<?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>141351</bug_id>
          
          <creation_ts>2015-02-06 22:25:33 -0800</creation_ts>
          <short_desc>Upgrade ES6 Iterator interfaces</short_desc>
          <delta_ts>2015-03-11 05:03:40 -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>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>142575</dependson>
          <blocked>142080</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>joepeck</cc>
    
    <cc>mark.lam</cc>
    
    <cc>ossy</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1067495</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-06 22:25:33 -0800</bug_when>
    <thetext>Upgrade ES6 Iterator interfaces</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1067496</commentid>
    <comment_count>1</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-06 22:27:45 -0800</bug_when>
    <thetext>In the JSC&apos;s iterator interface, using [[iteratorNext]] for next() method. In the latest spec, it is exposed as Iterator.prototype.next()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068420</commentid>
    <comment_count>2</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-11 11:46:41 -0800</bug_when>
    <thetext>https://bugs.webkit.org/show_bug.cgi?id=122532
Need to consider about this patch.
Now, iterator interface in ES6 is reverted into { value / done } style.
And `next` function can be easily observed by users.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068423</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-11 11:48:10 -0800</bug_when>
    <thetext>And this
https://bugs.webkit.org/show_bug.cgi?id=122575</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068711</commentid>
    <comment_count>4</comment_count>
      <attachid>246467</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-12 12:44:24 -0800</bug_when>
    <thetext>Created attachment 246467
prototype

rev1 prototype</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068796</commentid>
    <comment_count>5</comment_count>
      <attachid>246489</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-12 16:49:40 -0800</bug_when>
    <thetext>Created attachment 246489
prototype

rev2 prototype</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068830</commentid>
    <comment_count>6</comment_count>
      <attachid>246500</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-12 20:20:32 -0800</bug_when>
    <thetext>Created attachment 246500
prototype

rev3 prototype</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069702</commentid>
    <comment_count>7</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-16 17:59:08 -0800</bug_when>
    <thetext>Spawned from https://esdiscuss.org/topic/performance-of-iterator-next-as-specified#content-15

Thank you for your reply.
So leveraging this escape analysis, possiblly, implementing ArrayIteratorPrototype.next in JavaScript in builtin/ looks better than using a intrinsic.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069705</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-16 18:14:01 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; Spawned from
&gt; https://esdiscuss.org/topic/performance-of-iterator-next-as-
&gt; specified#content-15
&gt; 
&gt; Thank you for your reply.
&gt; So leveraging this escape analysis, possiblly, implementing
&gt; ArrayIteratorPrototype.next in JavaScript in builtin/ looks better than
&gt; using a intrinsic.

Yes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069774</commentid>
    <comment_count>9</comment_count>
      <attachid>246730</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-16 23:12:39 -0800</bug_when>
    <thetext>Created attachment 246730
prototype

rev4 prototype</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069788</commentid>
    <comment_count>10</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-16 23:50:23 -0800</bug_when>
    <thetext>After https://bugs.webkit.org/show_bug.cgi?id=141640 is fixed, we can leverage op_is_object to check whether iterator results are object or not.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070942</commentid>
    <comment_count>11</comment_count>
      <attachid>246730</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-02-20 20:07:11 -0800</bug_when>
    <thetext>Comment on attachment 246730
prototype

Awesome! I&apos;m excited about this.

It looks like you fixed up Promise.all(iterable). I look forward to &quot;new Set(iterable)&quot;, because unfortunately WebKit handles Set construction differently from others right now:

  js&gt; s = new Set([1,2,3])
  &lt; Set

  js&gt; s.size
  &lt; 1 // expected 3.

That said, it would be a behavior change we&apos;d need to be careful about.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071062</commentid>
    <comment_count>12</comment_count>
    <who name="Dean Jackson">dino</who>
    <bug_when>2015-02-22 02:11:51 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Comment on attachment 246730 [details]
&gt; prototype
&gt; 
&gt; Awesome! I&apos;m excited about this.
&gt; 
&gt; It looks like you fixed up Promise.all(iterable). I look forward to &quot;new
&gt; Set(iterable)&quot;, because unfortunately WebKit handles Set construction
&gt; differently from others right now:
&gt; 
&gt;   js&gt; s = new Set([1,2,3])
&gt;   &lt; Set
&gt; 
&gt;   js&gt; s.size
&gt;   &lt; 1 // expected 3.
&gt; 
&gt; That said, it would be a behavior change we&apos;d need to be careful about.

Do you think so? I would think that not many people are using Set yet and, if they are, they probably are simply doing new Set(), and adding elements afterwards.

I think it&apos;s better to make the breaking change sooner rather than later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071081</commentid>
    <comment_count>13</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-22 09:44:48 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; Comment on attachment 246730 [details]
&gt; &gt; prototype
&gt; &gt; 
&gt; &gt; Awesome! I&apos;m excited about this.
&gt; &gt; 
&gt; &gt; It looks like you fixed up Promise.all(iterable). I look forward to &quot;new
&gt; &gt; Set(iterable)&quot;, because unfortunately WebKit handles Set construction
&gt; &gt; differently from others right now:
&gt; &gt; 
&gt; &gt;   js&gt; s = new Set([1,2,3])
&gt; &gt;   &lt; Set
&gt; &gt; 
&gt; &gt;   js&gt; s.size
&gt; &gt;   &lt; 1 // expected 3.
&gt; &gt; 
&gt; &gt; That said, it would be a behavior change we&apos;d need to be careful about.
&gt; 
&gt; Do you think so? I would think that not many people are using Set yet and,
&gt; if they are, they probably are simply doing new Set(), and adding elements
&gt; afterwards.
&gt; 
&gt; I think it&apos;s better to make the breaking change sooner rather than later.

Personally I think new Set(iterable) change doesn&apos;t break the things in *web* applications
because this upgraded interface is already shipped by V8 in Chrome. So web applications code
may consider the both cases when using Set.
However, when changing it, it is necessary to check the use of this in the inspector code :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071146</commentid>
    <comment_count>14</comment_count>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-02-22 23:53:15 -0800</bug_when>
    <thetext>&gt; Personally I think new Set(iterable) change doesn&apos;t break the things in *web* applications
&gt; because this upgraded interface is already shipped by V8 in Chrome. So web applications code
&gt; may consider the both cases when using Set.

What I mean is: Safari 8 has already shipped an implementation of Set. In that, &quot;new Set(array)&quot; creates a Set with 1 item in it. This change, would iterate the array and put each array item into the Set. That is an incompatible change.


&gt; However, when changing it, it is necessary to check the use of this in the inspector code :)

Heh, we do try to make use of every little feature ;).

However, we do not make use of &quot;new Set(...)&quot; at all. I just checked. But I have been aware of this discrepancy and have been avoiding using any special &quot;new Set&quot; syntax for just this reason (in case JSC makes this change which would break us).

After thinking about it, I&apos;m still a bit disappointed in the API. To create a union of 3 arrays, the &quot;simple&quot; approach is ugly:

  var union = new Set(array1.concat(array2).concat(array3))

It would be cool if the spec allowed variables arguments so I could do:

  var union = new Set(array1, array2, array3);

But, 1 gets the job done I suppose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071904</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-24 19:45:14 -0800</bug_when>
    <thetext>(In reply to comment #14)
&gt; What I mean is: Safari 8 has already shipped an implementation of Set. In
&gt; that, &quot;new Set(array)&quot; creates a Set with 1 item in it. This change, would
&gt; iterate the array and put each array item into the Set. That is an
&gt; incompatible change.
&gt;
&gt; Heh, we do try to make use of every little feature ;).
&gt; 
&gt; However, we do not make use of &quot;new Set(...)&quot; at all. I just checked. But I
&gt; have been aware of this discrepancy and have been avoiding using any special
&gt; &quot;new Set&quot; syntax for just this reason (in case JSC makes this change which
&gt; would break us).

Ah, yes. After aligning JSC to the latest spec, we can use the constructor.

&gt; After thinking about it, I&apos;m still a bit disappointed in the API. To create
&gt; a union of 3 arrays, the &quot;simple&quot; approach is ugly:
&gt; 
&gt;   var union = new Set(array1.concat(array2).concat(array3))
&gt; 
&gt; It would be cool if the spec allowed variables arguments so I could do:
&gt; 
&gt;   var union = new Set(array1, array2, array3);
&gt; 
&gt; But, 1 gets the job done I suppose.

new Set(a1, a2, a3) API looks nice.
Investigating python&apos;s API, python&apos;s set also takes set(iterable).
Hm, is there any reason not accepting multiple arguments?
I need to dig old es-discuss threads about it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1071932</commentid>
    <comment_count>16</comment_count>
      <attachid>247301</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-24 20:21:18 -0800</bug_when>
    <thetext>Created attachment 247301
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072071</commentid>
    <comment_count>17</comment_count>
      <attachid>247301</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-25 09:25:37 -0800</bug_when>
    <thetext>Comment on attachment 247301
Patch

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

Added comments.

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:29
&gt; +    if (this == null || (typeof this !== &quot;object&quot; &amp;&amp; typeof this !== &quot;function&quot;))

This is not efficient. Since there&apos;s bytecode `op_is_object` exists, using it here is the best way to generate guard for non-objects.
But now, we dont&apos; have a way to generate a specific bytecode here.

I&apos;m now planning to implement bytecode level intrinsic into priviledged JavaScript in a separate patch.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:1938
&gt; +        emitJumpIfTrue(emitIsObject(newTemporary(), src), isObjectLabel.get());

Simplified :)

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2641
&gt; +    }

When an error is thrown in enumeration&apos;s body, we need to handle IteratorClose.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2654
&gt; +    }

When `break` is executed, we need to handle IteratorClose.

&gt; Source/JavaScriptCore/tests/stress/set-iterators-next.js:26
&gt; +// TODO: Set.prototype.values() is not exposed.

Now values method is not exposed since it may hide some variables within with-scope.
@@unscopable will solve it. So after @@unscopable is implemented, we can expose values method and test it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072090</commentid>
    <comment_count>18</comment_count>
      <attachid>247301</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-25 10:27:36 -0800</bug_when>
    <thetext>Comment on attachment 247301
Patch

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

&gt; Source/JavaScriptCore/runtime/JSArrayIterator.cpp:54
&gt; +        itemKind = jsNontrivialString(&amp;vm, ASCIILiteral(&quot;key+value&quot;));

Is it preferrable to save these string in VM&apos;s smallStrings?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072677</commentid>
    <comment_count>19</comment_count>
      <attachid>247505</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-27 02:44:15 -0800</bug_when>
    <thetext>Created attachment 247505
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1072678</commentid>
    <comment_count>20</comment_count>
      <attachid>247505</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-02-27 02:45:42 -0800</bug_when>
    <thetext>Comment on attachment 247505
Patch

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

Added comments

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:55
&gt; +    if (itemKind === @arrayIterationKindKey) {

Use numbers for kind representation instead of string. It&apos;s more efficient.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073460</commentid>
    <comment_count>21</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 15:03:43 -0800</bug_when>
    <thetext>Could anyone review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073467</commentid>
    <comment_count>22</comment_count>
      <attachid>247505</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-02 15:22:50 -0800</bug_when>
    <thetext>Comment on attachment 247505
Patch

I&apos;m looking at it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073477</commentid>
    <comment_count>23</comment_count>
      <attachid>247505</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-02 15:37:31 -0800</bug_when>
    <thetext>Comment on attachment 247505
Patch

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

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:32
&gt; +function next() {
&gt; +    &quot;use strict&quot;;
&gt; +
&gt; +    if (this == null || (typeof this !== &quot;object&quot; &amp;&amp; typeof this !== &quot;function&quot;))
&gt; +        throw new @TypeError(&quot;%ArrayIteratorPrototype%.next requires that |this| be Object&quot;);
&gt; +
&gt; +    var itemKind = this.@arrayIterationKind;

This method is enormous and almost certainly not inlineable.  This will defeat object allocation sinking and a bunch of other optimizations.  Is it clear that all of these various checks are needed?

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:39
&gt; +            value: undefined,

You don&apos;t have to set value to anything if done is true.

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:40
&gt; +            done: true

You should add the done property before you add the value property.

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:52
&gt; +        return {
&gt; +            value: undefined,
&gt; +            done: true
&gt; +        };
&gt; +    };

For the purpose of object allocation sinking, it&apos;s much better if you create the result object using just one allocation.  I.e. this is better:

var o = {};
if (index &gt;= length) {
    o.done = true;
} else {
    o.done = false;
    o.value = elementValue;
}
return o;

and this is worse:

if (index &gt;= length) {
    return { done : true };
else {
    reutnr { done : false, value: elementValue };
}

Long term, we will fix the bug that makes the second form slower - but for now you might as well structure it to be easier to optimize.

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:69
&gt; +        value: [ index, elementValue ],

Is this really how this is supposed to work?  My understanding is that the value property is just supposed to contain the value, not an array with index and value.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073505</commentid>
    <comment_count>24</comment_count>
      <attachid>247505</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 16:24:10 -0800</bug_when>
    <thetext>Comment on attachment 247505
Patch

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

Thanks for your review!

&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:32
&gt;&gt; +    var itemKind = this.@arrayIterationKind;
&gt; 
&gt; This method is enormous and almost certainly not inlineable.  This will defeat object allocation sinking and a bunch of other optimizations.  Is it clear that all of these various checks are needed?

The above check `if (this == null || (typeof this !== &quot;object&quot; &amp;&amp; typeof this !== &quot;function&quot;))` is needed since we need to guarantee `this` is Object type (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-%arrayiteratorprototype%.next).
But, I&apos;ve come up with an idea. Instead of above check, we can  just use

if (this == null)
    throw new @TypeError(...);

var itemKind = this.@arrayIterationKind.
...


This is because since only array iterator instance has @arrayIterationKind property, all primitive values and non array-iterator objects can be filtered by this.

&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:39
&gt;&gt; +            value: undefined,
&gt; 
&gt; You don&apos;t have to set value to anything if done is true.

However, since http://people.mozilla.org/~jorendorff/es6-draft.html#sec-createiterresultobject says that value shold be there, so we can observe this by executing the following script.

var array = [42];
var iter = array[Symbol.iterator]();
var result = iter.next();
var doneResult = iter.next();
assert(doneResult.hasOwnProperty(&apos;value&apos;));

What do you think of?

&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:40
&gt;&gt; +            done: true
&gt; 
&gt; You should add the done property before you add the value property.

Thanks! I&apos;ll follow.

&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:52
&gt;&gt; +    };
&gt; 
&gt; For the purpose of object allocation sinking, it&apos;s much better if you create the result object using just one allocation.  I.e. this is better:
&gt; 
&gt; var o = {};
&gt; if (index &gt;= length) {
&gt;     o.done = true;
&gt; } else {
&gt;     o.done = false;
&gt;     o.value = elementValue;
&gt; }
&gt; return o;
&gt; 
&gt; and this is worse:
&gt; 
&gt; if (index &gt;= length) {
&gt;     return { done : true };
&gt; else {
&gt;     reutnr { done : false, value: elementValue };
&gt; }
&gt; 
&gt; Long term, we will fix the bug that makes the second form slower - but for now you might as well structure it to be easier to optimize.

Thanks for your pointing! I&apos;ll fix it.

&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:69
&gt;&gt; +        value: [ index, elementValue ],
&gt; 
&gt; Is this really how this is supposed to work?  My understanding is that the value property is just supposed to contain the value, not an array with index and value.

Reaching here, itemKind is @arrayIterationKindKeyValue. When iterator is this kind, it returnes [index, element] as value. (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-%arrayiteratorprototype%.next step 17.b)
This is used (&amp; exposed to users) when using array.entries();
It is intended to be used like the following,

for (var [index, value] of array.entries()) {
    print(index, value);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073529</commentid>
    <comment_count>25</comment_count>
      <attachid>247722</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 17:01:51 -0800</bug_when>
    <thetext>Created attachment 247722
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073534</commentid>
    <comment_count>26</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-02 17:09:18 -0800</bug_when>
    <thetext>(In reply to comment #24)
&gt; Comment on attachment 247505 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=247505&amp;action=review
&gt; 
&gt; Thanks for your review!
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:32
&gt; &gt;&gt; +    var itemKind = this.@arrayIterationKind;
&gt; &gt; 
&gt; &gt; This method is enormous and almost certainly not inlineable.  This will defeat object allocation sinking and a bunch of other optimizations.  Is it clear that all of these various checks are needed?
&gt; 
&gt; The above check `if (this == null || (typeof this !== &quot;object&quot; &amp;&amp; typeof
&gt; this !== &quot;function&quot;))` is needed since we need to guarantee `this` is Object
&gt; type
&gt; (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-
&gt; %arrayiteratorprototype%.next).
&gt; But, I&apos;ve come up with an idea. Instead of above check, we can  just use
&gt; 
&gt; if (this == null)
&gt;     throw new @TypeError(...);
&gt; 
&gt; var itemKind = this.@arrayIterationKind.
&gt; ...
&gt; 
&gt; 
&gt; This is because since only array iterator instance has @arrayIterationKind
&gt; property, all primitive values and non array-iterator objects can be
&gt; filtered by this.

So, how would you get &quot;this&quot; to be null?

&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:39
&gt; &gt;&gt; +            value: undefined,
&gt; &gt; 
&gt; &gt; You don&apos;t have to set value to anything if done is true.
&gt; 
&gt; However, since
&gt; http://people.mozilla.org/~jorendorff/es6-draft.html#sec-
&gt; createiterresultobject says that value shold be there, so we can observe
&gt; this by executing the following script.
&gt; 
&gt; var array = [42];
&gt; var iter = array[Symbol.iterator]();
&gt; var result = iter.next();
&gt; var doneResult = iter.next();
&gt; assert(doneResult.hasOwnProperty(&apos;value&apos;));
&gt; 
&gt; What do you think of?

Gotcha, I read an earlier version of the spec and was confused.

&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:40
&gt; &gt;&gt; +            done: true
&gt; &gt; 
&gt; &gt; You should add the done property before you add the value property.
&gt; 
&gt; Thanks! I&apos;ll follow.

I suggested that based on my assumption that &quot;value&quot; shouldn&apos;t be added if &quot;done&quot; is &quot;true&quot;.  So, you can use whatever order you want.  But it&apos;s best to be consistent with what users tend to be doing, and I don&apos;t presume to know.

&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:52
&gt; &gt;&gt; +    };
&gt; &gt; 
&gt; &gt; For the purpose of object allocation sinking, it&apos;s much better if you create the result object using just one allocation.  I.e. this is better:
&gt; &gt; 
&gt; &gt; var o = {};
&gt; &gt; if (index &gt;= length) {
&gt; &gt;     o.done = true;
&gt; &gt; } else {
&gt; &gt;     o.done = false;
&gt; &gt;     o.value = elementValue;
&gt; &gt; }
&gt; &gt; return o;
&gt; &gt; 
&gt; &gt; and this is worse:
&gt; &gt; 
&gt; &gt; if (index &gt;= length) {
&gt; &gt;     return { done : true };
&gt; &gt; else {
&gt; &gt;     reutnr { done : false, value: elementValue };
&gt; &gt; }
&gt; &gt; 
&gt; &gt; Long term, we will fix the bug that makes the second form slower - but for now you might as well structure it to be easier to optimize.
&gt; 
&gt; Thanks for your pointing! I&apos;ll fix it.
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:69
&gt; &gt;&gt; +        value: [ index, elementValue ],
&gt; &gt; 
&gt; &gt; Is this really how this is supposed to work?  My understanding is that the value property is just supposed to contain the value, not an array with index and value.
&gt; 
&gt; Reaching here, itemKind is @arrayIterationKindKeyValue. When iterator is
&gt; this kind, it returnes [index, element] as value.
&gt; (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-
&gt; %arrayiteratorprototype%.next step 17.b)
&gt; This is used (&amp; exposed to users) when using array.entries();
&gt; It is intended to be used like the following,
&gt; 
&gt; for (var [index, value] of array.entries()) {
&gt;     print(index, value);
&gt; }

I see.  I misunderstood.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073535</commentid>
    <comment_count>27</comment_count>
      <attachid>247722</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-02 17:10:09 -0800</bug_when>
    <thetext>Comment on attachment 247722
Patch

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

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:32
&gt; +    var itemKind = this.@arrayIterationKind;

Is this really how it&apos;s supposed to work?  Is it possible to have different next methods depending on iteration kind?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073543</commentid>
    <comment_count>28</comment_count>
      <attachid>247505</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 17:47:34 -0800</bug_when>
    <thetext>Comment on attachment 247505
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:32
&gt;&gt;&gt;&gt; +    var itemKind = this.@arrayIterationKind;
&gt;&gt;&gt; 
&gt;&gt;&gt; This method is enormous and almost certainly not inlineable.  This will defeat object allocation sinking and a bunch of other optimizations.  Is it clear that all of these various checks are needed?
&gt;&gt; 
&gt;&gt; The above check `if (this == null || (typeof this !== &quot;object&quot; &amp;&amp; typeof this !== &quot;function&quot;))` is needed since we need to guarantee `this` is Object type (http://people.mozilla.org/~jorendorff/es6-draft.html#sec-%arrayiteratorprototype%.next).
&gt;&gt; But, I&apos;ve come up with an idea. Instead of above check, we can  just use
&gt;&gt; 
&gt;&gt; if (this == null)
&gt;&gt;     throw new @TypeError(...);
&gt;&gt; 
&gt;&gt; var itemKind = this.@arrayIterationKind.
&gt;&gt; ...
&gt;&gt; 
&gt;&gt; 
&gt;&gt; This is because since only array iterator instance has @arrayIterationKind property, all primitive values and non array-iterator objects can be filtered by this.
&gt; 
&gt; So, how would you get &quot;this&quot; to be null?

We can extract this `next` method since it is now exposed to users.
So,

var array = [42];
var arrayIterator = array[Symbol.iterator]();
var arrayIteratorPrototype = arrayIterator.__proto__;
var arrayIteratorPrototypeNext = arrayIterator.next;

// When calling like the following, |this| becomes null. (since ArrayIterator.prototype.next is strict code, |this| doesn&apos;t become the global object.).
arrayIteratorPrototypeNext.call(null);

&gt;&gt;&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:40
&gt;&gt;&gt;&gt; +            done: true
&gt;&gt;&gt; 
&gt;&gt;&gt; You should add the done property before you add the value property.
&gt;&gt; 
&gt;&gt; Thanks! I&apos;ll follow.
&gt; 
&gt; I suggested that based on my assumption that &quot;value&quot; shouldn&apos;t be added if &quot;done&quot; is &quot;true&quot;.  So, you can use whatever order you want.  But it&apos;s best to be consistent with what users tend to be doing, and I don&apos;t presume to know.

Ah, I&apos;ve got it.

&gt;&gt;&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:52
&gt;&gt;&gt;&gt; +    };
&gt;&gt;&gt; 
&gt;&gt;&gt; For the purpose of object allocation sinking, it&apos;s much better if you create the result object using just one allocation.  I.e. this is better:
&gt;&gt;&gt; 
&gt;&gt;&gt; var o = {};
&gt;&gt;&gt; if (index &gt;= length) {
&gt;&gt;&gt;     o.done = true;
&gt;&gt;&gt; } else {
&gt;&gt;&gt;     o.done = false;
&gt;&gt;&gt;     o.value = elementValue;
&gt;&gt;&gt; }
&gt;&gt;&gt; return o;
&gt;&gt;&gt; 
&gt;&gt;&gt; and this is worse:
&gt;&gt;&gt; 
&gt;&gt;&gt; if (index &gt;= length) {
&gt;&gt;&gt;     return { done : true };
&gt;&gt;&gt; else {
&gt;&gt;&gt;     reutnr { done : false, value: elementValue };
&gt;&gt;&gt; }
&gt;&gt;&gt; 
&gt;&gt;&gt; Long term, we will fix the bug that makes the second form slower - but for now you might as well structure it to be easier to optimize.
&gt;&gt; 
&gt;&gt; Thanks for your pointing! I&apos;ll fix it.
&gt; 
&gt; I see.  I misunderstood.

Oops! I missed that [[Put]].
When using the style,

var o = {};
o.value = &apos;value;

We can disturb it by defining accessors to Object.prototype.value...
So I suggest that extracting the object allocation function.

function createIteratorResult(done, value) {
    return {
        done: done,
        value: value
    };
}

And use it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073544</commentid>
    <comment_count>29</comment_count>
      <attachid>247722</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 17:48:34 -0800</bug_when>
    <thetext>Comment on attachment 247722
Patch

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

&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:32
&gt;&gt; +    var itemKind = this.@arrayIterationKind;
&gt; 
&gt; Is this really how it&apos;s supposed to work?  Is it possible to have different next methods depending on iteration kind?

Since ArrayIterator.prototype.next is exposed to users and it is now defined in ArrayIteratorPrototype (not ArrayIterator object itself),
we can observe it when each iterator has a different next method.

var array = [42,42];
var iter1 = array.entries();
var iter2 = array.keys();

assert(iter1.next === iter2.next);
assert(iter1.__proto__ === iter2.__proto__);
assert(iter1.__proto__.hasOwnProperty(&apos;next&apos;));
assert(!iter1.hasOwnProperty(&apos;next&apos;));
assert(iter2.__proto__.hasOwnProperty(&apos;next&apos;));
assert(!iter2.hasOwnProperty(&apos;next&apos;));

But, defining functions for each array iteration kind sounds very nice. So what do you think of this style?

function next() {
    &quot;use strict&quot;;
    if (this == null)
        throw new @TypeError(&quot;%ArrayIteratorPrototype%.next requires that |this| not be null or undefined&quot;);

    var nextForKind = this.@arrayNextForKind;
    if (!nextForKind)
        throw new @TypeError(&quot;%ArrayIteratorPrototype%.next requires that |this| be Array Iterator Instance&quot;);

    return this.@nextForKind();
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073550</commentid>
    <comment_count>30</comment_count>
      <attachid>247722</attachid>
    <who name="Joseph Pecoraro">joepeck</who>
    <bug_when>2015-03-02 18:06:13 -0800</bug_when>
    <thetext>Comment on attachment 247722
Patch

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

&gt; Source/JavaScriptCore/tests/stress/custom-iterators.js:1
&gt; +// This test checks the behavior of custom iterable objects.

These tests are great! Should there also be basic LayoutTests alongside the JSC stress tests? Or is it more common for JSC tests to just be stress tests now?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073554</commentid>
    <comment_count>31</comment_count>
      <attachid>247722</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 18:17:56 -0800</bug_when>
    <thetext>Comment on attachment 247722
Patch

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

&gt;&gt; Source/JavaScriptCore/tests/stress/custom-iterators.js:1
&gt;&gt; +// This test checks the behavior of custom iterable objects.
&gt; 
&gt; These tests are great! Should there also be basic LayoutTests alongside the JSC stress tests? Or is it more common for JSC tests to just be stress tests now?

Is it preferable to move this to layout-tests?
Or adding the same meaning tests to layout-tests additionally?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073555</commentid>
    <comment_count>32</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-02 18:23:15 -0800</bug_when>
    <thetext>(In reply to comment #31)
&gt; Comment on attachment 247722 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=247722&amp;action=review
&gt; 
&gt; &gt;&gt; Source/JavaScriptCore/tests/stress/custom-iterators.js:1
&gt; &gt;&gt; +// This test checks the behavior of custom iterable objects.
&gt; &gt; 
&gt; &gt; These tests are great! Should there also be basic LayoutTests alongside the JSC stress tests? Or is it more common for JSC tests to just be stress tests now?
&gt; 
&gt; Is it preferable to move this to layout-tests?
&gt; Or adding the same meaning tests to layout-tests additionally?

It&apos;s preferable to just have JSC stress tests.  Layout tests don&apos;t do a good job of putting JSC through its various execution engine modes, and they are more cumbersome to write.

If it&apos;s possible to write it as a JSC stress test, then that&apos;s what you should do, and you shouldn&apos;t bother with a layout test.

The only exception is JSRegress benchmarks (i.e. LayoutTests/js/regress/script-tests), which double as benchmarks when running run-jsc-benchmarks.  But these are not strictly correctness tests.  These are short-running benchmarks - aimed to run for 10ms or less.  If possible, these benchmarks should check their results. Both run-webkit-tests and run-jsc-stress-tests will run them, and we sometimes catch bugs from them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073560</commentid>
    <comment_count>33</comment_count>
      <attachid>247722</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 18:44:24 -0800</bug_when>
    <thetext>Comment on attachment 247722
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/tests/stress/custom-iterators.js:1
&gt;&gt;&gt;&gt; +// This test checks the behavior of custom iterable objects.
&gt;&gt;&gt; 
&gt;&gt;&gt; These tests are great! Should there also be basic LayoutTests alongside the JSC stress tests? Or is it more common for JSC tests to just be stress tests now?
&gt;&gt; 
&gt;&gt; Is it preferable to move this to layout-tests?
&gt;&gt; Or adding the same meaning tests to layout-tests additionally?
&gt; 
&gt; It&apos;s preferable to just have JSC stress tests.  Layout tests don&apos;t do a good job of putting JSC through its various execution engine modes, and they are more cumbersome to write.
&gt; 
&gt; If it&apos;s possible to write it as a JSC stress test, then that&apos;s what you should do, and you shouldn&apos;t bother with a layout test.
&gt; 
&gt; The only exception is JSRegress benchmarks (i.e. LayoutTests/js/regress/script-tests), which double as benchmarks when running run-jsc-benchmarks.  But these are not strictly correctness tests.  These are short-running benchmarks - aimed to run for 10ms or less.  If possible, these benchmarks should check their results. Both run-webkit-tests and run-jsc-stress-tests will run them, and we sometimes catch bugs from them.

OK. Thank you for your clarification :D</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073564</commentid>
    <comment_count>34</comment_count>
      <attachid>247722</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 18:53:04 -0800</bug_when>
    <thetext>Comment on attachment 247722
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:32
&gt;&gt;&gt; +    var itemKind = this.@arrayIterationKind;
&gt;&gt; 
&gt;&gt; Is this really how it&apos;s supposed to work?  Is it possible to have different next methods depending on iteration kind?
&gt; 
&gt; Since ArrayIterator.prototype.next is exposed to users and it is now defined in ArrayIteratorPrototype (not ArrayIterator object itself),
&gt; we can observe it when each iterator has a different next method.
&gt; 
&gt; var array = [42,42];
&gt; var iter1 = array.entries();
&gt; var iter2 = array.keys();
&gt; 
&gt; assert(iter1.next === iter2.next);
&gt; assert(iter1.__proto__ === iter2.__proto__);
&gt; assert(iter1.__proto__.hasOwnProperty(&apos;next&apos;));
&gt; assert(!iter1.hasOwnProperty(&apos;next&apos;));
&gt; assert(iter2.__proto__.hasOwnProperty(&apos;next&apos;));
&gt; assert(!iter2.hasOwnProperty(&apos;next&apos;));
&gt; 
&gt; But, defining functions for each array iteration kind sounds very nice. So what do you think of this style?
&gt; 
&gt; function next() {
&gt;     &quot;use strict&quot;;
&gt;     if (this == null)
&gt;         throw new @TypeError(&quot;%ArrayIteratorPrototype%.next requires that |this| not be null or undefined&quot;);
&gt; 
&gt;     var nextForKind = this.@arrayNextForKind;
&gt;     if (!nextForKind)
&gt;         throw new @TypeError(&quot;%ArrayIteratorPrototype%.next requires that |this| be Array Iterator Instance&quot;);
&gt; 
&gt;     return this.@nextForKind();
&gt; }

Ah, but, if we extract object allocation to createIteratorResult function, the body becomes fairly simple.
Only the following code depends on the iteration kind.

    if (itemKind === @arrayIterationKindKey)
        return createIteratorResult(index, false);

    var elementValue = array[index];
    if (itemKind === @arrayIterationKindValue)
        return createIteratorResult(elementValue, false);

     // itemKind is @arrayIteratorKindKeyValue.
    return createIteratorResult([ index, elementValue ], false);

So maybe, spliting it into 3 functions is not necessary I think. What do you think of it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073613</commentid>
    <comment_count>35</comment_count>
      <attachid>247746</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 21:17:40 -0800</bug_when>
    <thetext>Created attachment 247746
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073614</commentid>
    <comment_count>36</comment_count>
      <attachid>247746</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 21:22:13 -0800</bug_when>
    <thetext>Comment on attachment 247746
Patch

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

Uploaded the revised patch.

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:56
&gt; +    }

After considering the implementation, I changed the form to the current one.
1. Object allocation uses ObjectLiteral. It uses [[DefineOwnProperty]] and accessors in Object.prototype can&apos;t disturb it.
2. Since array object extraction (L39), index extraction (L41), length  check (L43), index update (L46) are duplicate in all item kinds, in the meantime, we don&apos;t split method into 3 (key, value, key+value).

What do you think of?

&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:61
&gt; +    };

Object allocations are now aggregated here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073624</commentid>
    <comment_count>37</comment_count>
      <attachid>247722</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-02 22:49:13 -0800</bug_when>
    <thetext>Comment on attachment 247722
Patch

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

&gt;&gt;&gt;&gt; Source/JavaScriptCore/builtins/ArrayIterator.prototype.js:32
&gt;&gt;&gt;&gt; +    var itemKind = this.@arrayIterationKind;
&gt;&gt;&gt; 
&gt;&gt;&gt; Is this really how it&apos;s supposed to work?  Is it possible to have different next methods depending on iteration kind?
&gt;&gt; 
&gt;&gt; Since ArrayIterator.prototype.next is exposed to users and it is now defined in ArrayIteratorPrototype (not ArrayIterator object itself),
&gt;&gt; we can observe it when each iterator has a different next method.
&gt;&gt; 
&gt;&gt; var array = [42,42];
&gt;&gt; var iter1 = array.entries();
&gt;&gt; var iter2 = array.keys();
&gt;&gt; 
&gt;&gt; assert(iter1.next === iter2.next);
&gt;&gt; assert(iter1.__proto__ === iter2.__proto__);
&gt;&gt; assert(iter1.__proto__.hasOwnProperty(&apos;next&apos;));
&gt;&gt; assert(!iter1.hasOwnProperty(&apos;next&apos;));
&gt;&gt; assert(iter2.__proto__.hasOwnProperty(&apos;next&apos;));
&gt;&gt; assert(!iter2.hasOwnProperty(&apos;next&apos;));
&gt;&gt; 
&gt;&gt; But, defining functions for each array iteration kind sounds very nice. So what do you think of this style?
&gt;&gt; 
&gt;&gt; function next() {
&gt;&gt;     &quot;use strict&quot;;
&gt;&gt;     if (this == null)
&gt;&gt;         throw new @TypeError(&quot;%ArrayIteratorPrototype%.next requires that |this| not be null or undefined&quot;);
&gt;&gt; 
&gt;&gt;     var nextForKind = this.@arrayNextForKind;
&gt;&gt;     if (!nextForKind)
&gt;&gt;         throw new @TypeError(&quot;%ArrayIteratorPrototype%.next requires that |this| be Array Iterator Instance&quot;);
&gt;&gt; 
&gt;&gt;     return this.@nextForKind();
&gt;&gt; }
&gt; 
&gt; Ah, but, if we extract object allocation to createIteratorResult function, the body becomes fairly simple.
&gt; Only the following code depends on the iteration kind.
&gt; 
&gt;     if (itemKind === @arrayIterationKindKey)
&gt;         return createIteratorResult(index, false);
&gt; 
&gt;     var elementValue = array[index];
&gt;     if (itemKind === @arrayIterationKindValue)
&gt;         return createIteratorResult(elementValue, false);
&gt; 
&gt;      // itemKind is @arrayIteratorKindKeyValue.
&gt;     return createIteratorResult([ index, elementValue ], false);
&gt; 
&gt; So maybe, spliting it into 3 functions is not necessary I think. What do you think of it?

&quot;&gt; Is this really how it&apos;s supposed to work?&quot;

Yes, This itemKind represents the ArrayIterator&apos;s kind, that is &quot;key&quot;, &quot;value&quot; and &quot;key+value&quot;.
(http://people.mozilla.org/~jorendorff/es6-draft.html#sec-properties-of-array-iterator-instances)

When &quot;key&quot;, the iterator produces keys (in array, it&apos;s index). When &quot;value&quot;, the iterator produces values (in array, it&apos;s element).
And when &quot;key+value&quot;, the iterator produces the pair of key and value as [key, value].

To make array iterator efficient, instead of strings that represents kind (like &quot;key&quot;, &quot;value&quot;, &quot;key+value&quot;), we use small integers, (0, 1, 2).
It&apos;s defined as enum in C++ (ArrayIterationKind) and it&apos;s also exposed to priviledged JS code with private symbols (global.{@arrayIterationKindKey, @arrayIterationKindValue and @arrayIterationKindKeyValue})</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1073922</commentid>
    <comment_count>38</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-03 18:39:36 -0800</bug_when>
    <thetext>OK, updated the patch. Could you take a look?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074353</commentid>
    <comment_count>39</comment_count>
      <attachid>247746</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-04 19:47:10 -0800</bug_when>
    <thetext>Comment on attachment 247746
Patch

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

And added comments for minor fixes.

&gt; Source/JavaScriptCore/bytecompiler/BytecodeGenerator.cpp:2574
&gt; +    RefPtr&lt;RegisterID&gt; next = emitGetById(newTemporary(), iterator.get(), propertyNames().next);

Oops. it should be moved into the following braces.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074361</commentid>
    <comment_count>40</comment_count>
      <attachid>247746</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-04 20:08:51 -0800</bug_when>
    <thetext>Comment on attachment 247746
Patch

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

&gt; Source/JavaScriptCore/runtime/JSPromiseConstructor.cpp:346
&gt; +static JSValue performPromiseAll(ExecState* exec, JSValue iterator, JSValue C, JSPromiseDeferred* deferred)

And one comment is that, currently, the change in Promise.all / Promise.race is limited in only iterator treatment things. (Use IteratorOperations)

This is because, from the old spec, Promise.all and Promise.race architecture is largely changed. (e.g. changing [[CountDown]] to remainingElementsCount)
So updating it seems another concern. I think performing fundamental changes in the subsequent patch like &quot;Upgrading ES6 Promises) is better.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074362</commentid>
    <comment_count>41</comment_count>
      <attachid>247746</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-04 20:09:34 -0800</bug_when>
    <thetext>Comment on attachment 247746
Patch

I buy this.  LGTM. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1074504</commentid>
    <comment_count>42</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2015-03-05 06:57:56 -0800</bug_when>
    <thetext>Committed r181077: &lt;http://trac.webkit.org/changeset/181077&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1076293</commentid>
    <comment_count>43</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-03-11 05:03:40 -0700</bug_when>
    <thetext>(In reply to comment #42)
&gt; Committed r181077: &lt;http://trac.webkit.org/changeset/181077&gt;

It caused a regression on AArch64 (at least on Linux) - bug142575 .</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246467</attachid>
            <date>2015-02-12 12:44:24 -0800</date>
            <delta_ts>2015-02-12 16:49:35 -0800</delta_ts>
            <desc>prototype</desc>
            <filename>bug-141351-20150213054421.patch</filename>
            <type>text/plain</type>
            <size>70095</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5OTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YjExNDMwY2RmZWYxOTM3NzAxZWFlNTMzZGRlMDcyMzdlZmYyOTE2Li4xZjVlNWE4OTA4ZThlODAw
NWExM2Q0YTg0Y2ExODM1MWRkZTE4OWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxNS0wMi0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBVcGdyYWRlIEVTNiBJdGVyYXRvciBpbnRlcmZhY2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEzNTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc09iamVjdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SXNVbmRlZmluZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAg
ICAgICAoSlNDOjphcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXlUaHVua0dlbmVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFsdWVUaHVua0dlbmVy
YXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjphcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAgICAgICAgKiBydW50
aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUl0ZXJh
dG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmNyZWF0ZUl0ZXJh
dG9yUmVzdWx0KToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JOZXh0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6OmFycmF5
SXRlcmF0b3JQcm90b3R5cGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6Oml0ZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yVmFsdWUpOgorICAg
ICAgICAoSlNDOjppdGVyYXRvckNvbXBsZXRlKToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JTdGVw
KToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JDbG9zZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUl0
ZXJSZXN1bHRPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQ
cm90b3R5cGUuY3BwLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OmNyZWF0ZUl0ZXJhdG9yUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJ
dGVyYXRvck5leHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dEtl
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
OjpwZXJmb3JtUHJvbWlzZVJhY2VMb29wKToKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlQ29uc3Ry
dWN0b3JGdW5jUmFjZSk6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm9taXNlQWxsKToKKyAgICAg
ICAgKEpTQzo6SlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKToKKyAgICAgICAgKiBydW50aW1l
L01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQcm90b3R5
cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OlNldEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChKU0M6OlNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQpOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjp0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyk6
CisKIDIwMTUtMDItMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTcGxpdCBGVEw6OkpTQ2FsbCBpbnRvIHRoZSBwYXJ0IHRoYXQga25vd3MgYWJvdXQgY2FsbCBp
bmxpbmUgY2FjaGluZyBhbmQgdGhlIHBhcnQgdGhhdCBpbnRlcmFjdHMgd2l0aCBMTFZNIHBhdGNo
cG9pbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2Q3Nzk2MzFjZjMx
Zjk1ODdkZjI3Yzk5NTBhNzFhNWFkNDFjN2RlMy4uNWMzZjJjYTFmYzgwMmM1OWU2NjU5Y2Q5Njli
MzYyYmZiZTcxNGQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNDM4
LDcgKzQzOCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCi0gICAgcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcCAKKyAgICBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCiAgICAgcnVudGltZS9FeGVj
dXRhYmxlLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKICAgICBydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCkBAIC00NTAsNiArNDUwLDcgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAKICAgICBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCiAgICAgcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAorICAgIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
LmNwcAogICAgIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuY3BwCiAgICAgcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5jcHAKICAgICBydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCmluZGV4IGE1NmU2ZDU4YmQ3OTZlZmUzOWI3M2JkNDliYTM0ZjlkODQw
MDkzMWQuLmQ5MzVkNWExMzE0OGNjNzEzMjIyNzRkM2I1YjY1MDQzNTJiOWYyNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCkBAIC0yNDQ0LDYgKzI0NDQsMTMgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRocm93VHlwZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBlbWl0T3Bjb2Rl
KG9wX3Rocm93X3N0YXRpY19lcnJvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50VmFsdWUoYWRkU3RyaW5nQ29uc3RhbnQoSWRlbnRpZmllcihtX3ZtLCBtZXNzYWdlKSkp
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworfQorCiB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewogICAgIGVtaXRPcGNvZGUob3BfcHVzaF9uYW1lX3Njb3BlKTsK
QEAgLTI2NDksMjQgKzI2NTYsMTAwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVt
ZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgRXhwcmVzc2lvCiAgICAgICAg
IGVtaXRNb3ZlKGFyZ3MudGhpc1JlZ2lzdGVyKCksIHN1YmplY3QuZ2V0KCkpOwogICAgICAgICBl
bWl0Q2FsbChpdGVyYXRvci5nZXQoKSwgaXRlcmF0b3IuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgYXJncywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVu
ZCgpKTsKICAgICB9Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJhdG9yTmV4dCA9IGVtaXRH
ZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLml0
ZXJhdG9yTmV4dFByaXZhdGVOYW1lKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBu
ZXdUZW1wb3JhcnkoKTsKICAgICBlbWl0TG9hZCh2YWx1ZS5nZXQoKSwganNVbmRlZmluZWQoKSk7
CiAgICAgCiAgICAgZW1pdEp1bXAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogICAgIAogICAg
IFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gbmV3TGFiZWwoKTsKKyAgICBSZWZQdHI8TGFiZWw+
IGl0ZXJhdG9yRG9uZSA9IG5ld0xhYmVsKCk7CiAgICAgZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7CiAgICAgZW1pdExvb3BIaW50KCk7CisKKyAgICBSZWZQdHI8TGFiZWw+IHRyeVN0YXJ0TGFi
ZWwgPSBuZXdMYWJlbCgpOworICAgIGVtaXRMYWJlbCh0cnlTdGFydExhYmVsLmdldCgpKTsKKyAg
ICBUcnlEYXRhKiB0cnlEYXRhID0gcHVzaFRyeSh0cnlTdGFydExhYmVsLmdldCgpKTsKICAgICBj
YWxsQmFjaygqdGhpcywgdmFsdWUuZ2V0KCkpOworICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJl
ID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOworCiAgICAgZW1pdExhYmVsKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKLSAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMs
IDAsIDEpOwotICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJh
dG9yLmdldCgpKTsKLSAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIo
MCksIHZhbHVlLmdldCgpKTsKLSAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgaXRlcmF0b3JOZXh0
LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRBcmd1bWVudHMsIG5vZGUtPmRpdm90KCks
IG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IG5leHQgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCks
IHByb3BlcnR5TmFtZXMoKS5uZXh0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlcmF0b3JO
ZXh0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIG5leHQuZ2V0KCksIHByb3BlcnR5TmFt
ZXMoKS5pdGVyYXRvck5leHRQcml2YXRlTmFtZSk7CisgICAgUmVmUHRyPExhYmVsPiBpdGVyYXRv
clJlc3VsdEludGVyZmFjZVN0YXJ0ID0gbmV3TGFiZWwoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5k
ZWZpbmVkKHJlc3VsdC5nZXQoKSwgaXRlcmF0b3JOZXh0LmdldCgpKSwgaXRlcmF0b3JSZXN1bHRJ
bnRlcmZhY2VTdGFydC5nZXQoKSk7CisKKyAgICAvLyBXaGVuIHRoZSBuZXh0IG1ldGhvZCBoYXMg
YSBmdW5jdGlvbiBhcyBhbiBpdGVyYXRvck5leHQgcHJpdmF0ZSBwcm9wZXJ0eSwgd2UgdXNlIGl0
IGluc3RlYWQgb2YgdGhlIHVzdWFsICJuZXh0IiBtZXRob2QuCisgICAgLy8gVGhpcyBtZXRob2Qg
ZG9lc24ndCBjcmVhdGUgYW4gaXRlcmF0b3IgcmVzdWx0IG9iamVjdCBhbmQgZW5hYmxlcyBjb21t
b24gYnVpbHRpbiBvYmplY3RzIGxpa2UgQXJyYXkgdG8gaXRlcmF0ZSBmYXN0ZXIuCisgICAgewor
ICAgICAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMsIDAsIDEpOworICAgICAg
ICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7
CisgICAgICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMuYXJndW1lbnRSZWdpc3RlcigwKSwgdmFs
dWUuZ2V0KCkpOworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgaXRlcmF0b3JOZXh0Lmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRBcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5v
ZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgfQogICAgIGVtaXRKdW1w
SWZGYWxzZShlbWl0RXF1YWxpdHlPcChvcF9zdHJpY3RlcSwgcmVzdWx0LmdldCgpLCB2YWx1ZS5n
ZXQoKSwgZW1pdExvYWQoMCwgSlNWYWx1ZSh2bSgpLT5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgp
KSkpLCBsb29wU3RhcnQuZ2V0KCkpOworICAgIGVtaXRKdW1wKGl0ZXJhdG9yRG9uZS5nZXQoKSk7
CisKKyAgICBlbWl0TGFiZWwoaXRlcmF0b3JSZXN1bHRJbnRlcmZhY2VTdGFydC5nZXQoKSk7Cisg
ICAgeworICAgICAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMsIDAsIDEpOwor
ICAgICAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5n
ZXQoKSk7CisgICAgICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMuYXJndW1lbnRSZWdpc3Rlcigw
KSwgdmFsdWUuZ2V0KCkpOworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgbmV4dC5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2Rl
LT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgIH0KKyAgICB7CisgICAgICAg
IFJlZlB0cjxMYWJlbD4gdHlwZUlzT2JqZWN0ID0gbmV3TGFiZWwoKTsKKyAgICAgICAgZW1pdEp1
bXBJZlRydWUoZW1pdElzT2JqZWN0KHJlc3VsdC5nZXQoKSwgdmFsdWUuZ2V0KCkpLCB0eXBlSXNP
YmplY3QuZ2V0KCkpOworICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJ
dGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAgICBl
bWl0TGFiZWwodHlwZUlzT2JqZWN0LmdldCgpKTsKKyAgICB9CisgICAgZW1pdEp1bXBJZlRydWUo
ZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCku
ZG9uZSksIGl0ZXJhdG9yRG9uZS5nZXQoKSk7CisgICAgZW1pdEdldEJ5SWQodmFsdWUuZ2V0KCks
IHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkudmFsdWUpOworICAgIGVtaXRKdW1wKGxvb3BT
dGFydC5nZXQoKSk7CisKKyAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1l
ZCBjb250cm9sIGZsb3cuCisgICAgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0
aW9uUmVnaXN0ZXIgPSBwb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgbmV3VGVtcG9yYXJ5KCks
IGNhdGNoSGVyZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0aHJvdyA9IG5ld0xh
YmVsKCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhvZCA9IGVtaXRH
ZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnJl
dHVybktleXdvcmQpOworICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQocmVz
dWx0LmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCByZXRocm93LmdldCgpKTsKKworICAgICAg
ICBSZWZQdHI8TGFiZWw+IHR5cGVJc09iamVjdENoZWNrID0gbmV3TGFiZWwoKTsKKworICAgICAg
ICBDYWxsQXJndW1lbnRzIHJldHVybkFyZ3VtZW50cygqdGhpcywgMCk7CisgICAgICAgIGVtaXRN
b3ZlKHJldHVybkFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOworCisg
ICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbFRyeVN0YXJ0ID0gbmV3TGFiZWwoKTsKKyAg
ICAgICAgZW1pdExhYmVsKHJldHVybkNhbGxUcnlTdGFydC5nZXQoKSk7CisgICAgICAgIFRyeURh
dGEqIHJldHVybkNhbGxUcnlEYXRhID0gcHVzaFRyeShyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkp
OworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4
cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2
b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiByZXR1
cm5DYWxsQ2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOworICAgICAgICBl
bWl0SnVtcCh0eXBlSXNPYmplY3RDaGVjay5nZXQoKSk7CisKKyAgICAgICAgZW1pdExhYmVsKHR5
cGVJc09iamVjdENoZWNrLmdldCgpKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2Jq
ZWN0KHJlc3VsdC5nZXQoKSwgdmFsdWUuZ2V0KCkpLCByZXRocm93LmdldCgpKTsKKyAgICAgICAg
ZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFj
ZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKworICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0
dXJuQ2FsbFRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCByZXR1cm5DYWxsQ2F0Y2hIZXJlLmdldCgp
KTsKKyAgICAgICAgZW1pdExhYmVsKHJldGhyb3cuZ2V0KCkpOworICAgICAgICBlbWl0VGhyb3co
ZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgIH0KKworICAgIC8vIEl0ZXJhdG9yQ2xvc2Ug
c2VxdWVuY2UgZm9yIGJyZWFrLWVkIGNvbnRyb2wgZmxvdy4KICAgICBlbWl0TGFiZWwoc2NvcGUt
PmJyZWFrVGFyZ2V0KCkpOworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVy
bk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJv
cGVydHlOYW1lcygpLnJldHVybktleXdvcmQpOworICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0
SXNVbmRlZmluZWQocmVzdWx0LmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCBpdGVyYXRvckRv
bmUuZ2V0KCkpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlz
LCAwKTsKKyAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBp
dGVyYXRvci5nZXQoKSk7CisgICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRo
b2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZv
dCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgICAgICBlbWl0
SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QocmVzdWx0LmdldCgpLCB2YWx1ZS5nZXQoKSksIGl0ZXJh
dG9yRG9uZS5nZXQoKSk7CisgICAgICAgIGVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwo
Ikl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgfQor
CisgICAgZW1pdExhYmVsKGl0ZXJhdG9yRG9uZS5nZXQoKSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UpCkBAIC0yNzQzLDYgKzI4MjYsMjMgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogaW4KICAgICByZXR1cm4gZHN0OwogfQogCisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0SXNPYmplY3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCit7
CisgICAgZW1pdE9wY29kZShvcF9pc19vYmplY3QpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkp
OworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0SXNVbmRlZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCit7CisgICAg
ZW1pdE9wY29kZShvcF9pc191bmRlZmluZWQpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOwor
ICAgIHJldHVybiBkc3Q7Cit9CisKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVk
Rm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJl
Z2lzdGVyKQogewogICAgIGlmICghbG9jYWxSZWdpc3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAyNTc0
ZTgzNzZkNzY1OWIxOTE4MmUyMThlZTRhYjQ1Yzk3YWViNzBhLi44ZWNiYjI4ZDIzYWMzMjA1ZDRk
OTdlYmZjMjA1ODQwMTg5YWM0YzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC01MjYsNiArNTI2LDkgQEAK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGluZGV4KTsKIAorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNPYmplY3QoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0
SXNVbmRlZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOworCiAgICAgICAg
IHZvaWQgZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKIAogICAgICAgICAvLyBTdGFy
dCBhIHRyeSBibG9jay4gJ3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgpAQCAtNTQwLDYg
KzU0Myw3IEBACiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGVtaXRUaHJvd1JlZmVyZW5jZUVy
cm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgZW1pdFRocm93VHlwZUVy
cm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAgICAgdm9pZCBlbWl0UHVzaEZ1bmN0
aW9uTmFtZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHks
IFJlZ2lzdGVySUQqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgdm9pZCBl
bWl0UHVzaENhdGNoU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDdiMGNkYTY4NmNj
NDcyN2VjZjI4YWY3YTU3YTVlMDc1MTEzNWMzYTUuLmNjMmEzMzJjMWEyYmIxYjNkOTdiZGM5NmI2
ZjU2ZDFkODY4M2YxY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKQEAgLTEwNDQsMzAgKzEwNDQsMzAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGltdWxUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImltdWwiKTsKIH0KIAotc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZNKiB2
bSwgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJ
dGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICB0eXBlZGVmIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRydXN0ZWRJbW0zMiBUcnVzdGVkSW1tMzI7
CiAgICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpUcnVzdGVkSW1tUHRyIFRydXN0ZWRJ
bW1QdHI7CiAgICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpBZGRyZXNzIEFkZHJlc3M7
CiAgICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpCYXNlSW5kZXggQmFzZUluZGV4Owog
ICAgIHR5cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6SnVtcCBKdW1wOwotICAgIAorCiAgICAg
U3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0pOwogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBiZWlu
ZyBjYWxsZWQgb24gYW4gYXJyYXkgaXRlcmF0b3IsIGFuZCBsb2FkIG1faXRlcmF0ZWRPYmplY3Qs
IGFuZCBtX25leHRJbmRleCBpbnRvIHJlZ1QwIGFuZCByZWdUMSByZXNwZWN0aXZlbHkKICAgICBq
aXQubG9hZEFyZ3VtZW50V2l0aFNwZWNpZmljQ2xhc3MoSlNBcnJheUl0ZXJhdG9yOjppbmZvKCks
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRoaXNBcmd1bWVudCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKIAogICAgIC8vIEVhcmx5IGV4aXQg
aWYgd2UgZG9uJ3QgaGF2ZSBhIHRodW5rIGZvciB0aGlzIGZvcm0gb2YgaXRlcmF0aW9uCiAgICAg
aml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJh
dG9yOjpvZmZzZXRPZkl0ZXJhdGlvbktpbmQoKSksIFRydXN0ZWRJbW0zMihBcnJheUl0ZXJhdGVL
ZXlWYWx1ZSkpKTsKLSAgICAKKwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRlZE9iamVjdCgp
KSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIAorCiAgICAgaml0LmxvYWQzMihB
ZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNl
dE9mTmV4dEluZGV4KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7Ci0gICAgCisKICAg
ICAvLyBQdWxsIG91dCB0aGUgYnV0dGVyZmx5IGZyb20gaXRlcmF0ZWRPYmplY3QKICAgICBqaXQu
bG9hZDgoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNDZWxsOjppbmRleGlu
Z1R5cGVPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzKTsKICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7CiAgICAgSnVtcCBudWxs
QnV0dGVyZmx5ID0gaml0LmJyYW5jaFRlc3RQdHIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6WmVybywg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwotICAgIAorCiAgICAgSnVtcCBub3REb25lID0g
aml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkJlbG93LCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICBudWxsQnV0dGVyZmx5LmxpbmsoJmpp
dCk7CkBAIC0xMDc1LDI4ICsxMDc1LDI3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
YXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcihWTSogdm0sIEFycmF5SXRlcmF0CiAgICAg
Ly8gUmV0dXJuIHRoZSB0ZXJtaW5hdGlvbiBzaWduYWwgdG8gaW5kaWNhdGUgdGhhdCB3ZSd2ZSBm
aW5pc2hlZAogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodm0tPml0ZXJhdGlvblRlcm1pbmF0
b3IuZ2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnJldHVybkpT
Q2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgCisKICAgICBub3REb25lLmxp
bmsoJmppdCk7Ci0gICAgCi0gICAgaWYgKGtpbmQgPT0gQXJyYXlJdGVyYXRlS2V5KSB7Ci0gICAg
ICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgICAg
ICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwotICAgICAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAi
YXJyYXktaXRlcmF0b3ItbmV4dC1rZXkiKTsKLSAgICAgICAgCi0gICAgfQotICAgIEFTU0VSVChr
aW5kID09IEFycmF5SXRlcmF0ZVZhbHVlKTsKLSAgICAKKworICAgIEp1bXAgbm90S2V5ID0gaml0
LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkVxdWFsLCBBZGRyZXNzKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0aW9uS2luZCgp
KSwgVHJ1c3RlZEltbTMyKEFycmF5SXRlcmF0ZVZhbHVlKSk7CisKKyAgICBqaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5
SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpKTsKKyAgICBqaXQucmV0dXJuSW50MzIoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOworCisgICAgbm90S2V5LmxpbmsoJmppdCk7CisKICAg
ICAvLyBPa2F5LCBub3cgd2UncmUgcmV0dXJuaW5nIGEgdmFsdWUgc28gbWFrZSBzdXJlIHdlJ3Jl
IGluc2lkZSB0aGUgdmVjdG9yIHNpemUKICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNo
MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6QWJvdmVPckVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAorCiAgICAgLy8gU28gbm93IHdlIHBlcmZv
cm0gaW5saW5lIGxvYWRzIGZvciBpbnQzMiwgdmFsdWUvdW5kZWNpZGVkLCBhbmQgZG91YmxlIHN0
b3JhZ2UKICAgICBKdW1wIHVuZGVjaWRlZFN0b3JhZ2UgPSBqaXQuYnJhbmNoMzIoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBUcnVzdGVkSW1t
MzIoQXJyYXlXaXRoVW5kZWNpZGVkKSk7CiAgICAgSnVtcCBub3RDb250aWd1b3VzU3RvcmFnZSA9
IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhDb250aWd1b3VzKSk7Ci0gICAg
CisKICAgICB1bmRlY2lkZWRTdG9yYWdlLmxpbmsoJmppdCk7Ci0gICAgCisKICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7Ci0gICAgCisKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6VGltZXNFaWdodCksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBKdW1wIG5v
dEhvbGUgPSBqaXQuYnJhbmNoVGVzdDY0KFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vblplcm8sIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTExMTgsMzMgKzExMTcsMjMgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZN
KiB2bSwgQXJyYXlJdGVyYXQKICAgICBqaXQucmV0dXJuSlNWYWx1ZShTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogI2VuZGlmCiAgICAgbm90
Q29udGlndW91c1N0b3JhZ2UubGluaygmaml0KTsKLSAgICAKKwogICAgIEp1bXAgbm90SW50MzJT
dG9yYWdlID0gaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vdEVxdWFsLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMywgVHJ1c3RlZEltbTMyKEFycmF5V2l0aEludDMyKSk7CiAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwogICAg
IGppdC5sb2FkMzIoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGltZXNFaWdodCwgSlNW
YWx1ZTo6b2Zmc2V0T2ZQYXlsb2FkKCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAg
ICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7CiAgICAgaml0
LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBub3RJbnQzMlN0
b3JhZ2UubGluaygmaml0KTsKLSAgICAKKwogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFu
Y2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhEb3VibGUpKSk7CiAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwogICAgIGppdC5sb2FkRG91Ymxl
KEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQpLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpmcFJlZ1QwKTsKICAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNz
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4
dEluZGV4KCkpKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDApOwotICAgIAotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbCh2bSksICJhcnJheS1pdGVyYXRvci1uZXh0LXZhbHVlIik7Ci19CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcih2bSwg
QXJyYXlJdGVyYXRlS2V5KTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiYXJyYXktaXRlcmF0b3ItbmV4dCIpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcih2bSwg
QXJyYXlJdGVyYXRlVmFsdWUpOwotfQotICAgIAogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IDI0NmRh
MmVhNjQ1NGI5ZTMwMjc2YWQyMTc3NGI1NWMyNTNkNDEwYzYuLjBjMTg2ODkwNzc5MTAzZTNmMjZk
ZWYzMDFiMjEzZWVhYjNmZDg0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuaApAQCAtMTMwLDggKzEzMCw3IEBAIGlubGluZSBUaHVua0dlbmVyYXRvciB2
aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5r
R2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3Io
Vk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKFZN
Kik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvclByb3RvdHlw
ZUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0KICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRz
SXRlcmF0b3JQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
dW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGQ3OWNjNTJlMDkyYmM2ZTkwYjQxYmJl
Nzk5OGMyYWI3MDdhYTNkMmMuLmFkOGI3NTkwZDg1ZTY1NmE5MTJiNGFhOTkxNzYwZmFkMzYzMDYw
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c0l0
ZXJhdG9yUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5oIgogCisj
aW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIApAQCAtNDMsNyArNDQsNyBAQCB2b2lk
IEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhp
cyk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9y
UHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yLCBEb250
RW51bSwgMCk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRvck5leHRQcml2YXRlTmFtZSwgYXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwg
RG9udEVudW0sIDApOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
bmV4dCwgYXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90
eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNTUsOCArNTYsOCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVu
Y05leHQoQ2FsbEZyYW1lKiBjYWxsRgogewogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChq
c0Nhc3Q8SlNBcmd1bWVudHNJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLT5uZXh0
KGNhbGxGcmFtZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlv
blRlcm1pbmF0b3IuZ2V0KCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0
ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRl
ZmluZWQoKSwgdHJ1ZSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGM4ODAwZTNjZGNh
NjI1MmVhYjk4ZmQwMjExODYxZTFkMGRiZWMxMTIuLjMxYzAyYTU4MzdiZjZlYmNmMGExMzM2NWQ1
YWEwMTJmMTg3YjgzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCkBAIC0yMCwxMiArMjAsMTMgQEAKICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5
SXRlcmF0b3JQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgpAQCAtMzgsNiArMzksOCBAQAogY29uc3Qg
Q2xhc3NJbmZvIEFycmF5SXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkFycmF5IEl0ZXJh
dG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShBcnJheUl0ZXJhdG9y
UHJvdG90eXBlKSB9OwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRvck5leHQoRXhl
Y1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJh
dG9yUHJvdG90eXBlTmV4dChFeGVjU3RhdGUqKTsKIAogdm9pZCBBcnJheUl0ZXJhdG9yUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7CkBAIC00Niw2ICs0OSw5IEBAIHZvaWQgQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgdm0ucHJv
dG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04o
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJyYXlJdGVyYXRvclByb3Rv
dHlwZUl0ZXJhdGUsIERvbnRFbnVtLCAwKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPm5leHQsIGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LCBEb250RW51bSwg
MCk7CisgICAgSlNWYWx1ZSBuZXh0RnVuY3Rpb24gPSBnZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPm5leHQpOworICAgIGpzQ2FzdDxKU09iamVjdCo+KG5leHRGdW5jdGlvbiktPkpTQ19O
QVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFBy
aXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0b3JOZXh0LCBEb250RW51bSwg
MCwgQXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dEludHJpbnNpYyk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01Myw0ICs1OSw5NyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBBcnJheUl0ZXJhdGlvbktpbmQga2luZCwgc2l6ZV90IGluZGV4LCBKU1ZhbHVl
IHJlc3VsdCwgYm9vbCBkb25lKQoreworICAgIGlmIChkb25lKQorICAgICAgICByZXR1cm4gY2Fs
bEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCk7CisKKyAgICBzd2l0Y2ggKGtp
bmQgJiB+QXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7CisgICAgY2FzZSBBcnJheUl0ZXJhdGVLZXk6
CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmRleCk7CisKKyAgICBjYXNlIEFycmF5SXRlcmF0
ZVZhbHVlOgorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgY2FzZSBBcnJheUl0ZXJhdGVL
ZXlWYWx1ZTogeworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgICAgICBh
cmdzLmFwcGVuZChqc051bWJlcihpbmRleCkpOworICAgICAgICBhcmdzLmFwcGVuZChyZXN1bHQp
OworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5jYWxs
ZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShjYWxs
RnJhbWUsIDAsIGdsb2JhbE9iamVjdCwgYXJncyk7CisKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIEpT
VmFsdWUoKTsKK30KKworc3RhdGljIEpTVmFsdWUgaXRlcmF0b3JOZXh0KENhbGxGcmFtZSogY2Fs
bEZyYW1lKQoreworICAgIEpTQXJyYXlJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0
PEpTQXJyYXlJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghaXRl
cmF0b3IpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgQXJyYXlJ
dGVyYXRvci5uZXh0KCkgb24gYSBub24tQXJyYXlJdGVyYXRvciBvYmplY3QiKSk7CisgICAgfQor
ICAgIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCA9IGl0ZXJhdG9yLT5pdGVyYXRlZE9iamVjdCgp
OworICAgIHNpemVfdCBpbmRleCA9IGl0ZXJhdG9yLT5uZXh0SW5kZXgoKTsKKyAgICBBcnJheUl0
ZXJhdGlvbktpbmQga2luZCA9IGl0ZXJhdG9yLT5pdGVyYXRpb25LaW5kKCk7CisgICAgSlNWYWx1
ZSBqc0xlbmd0aCA9IEpTVmFsdWUoaXRlcmF0ZWRPYmplY3QpLmdldChjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKworICAgIHNpemVfdCBsZW5ndGgg
PSBqc0xlbmd0aC50b1VJbnQzMihjYWxsRnJhbWUpOworICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAgICBpZiAoaW5kZXggPj0g
bGVuZ3RoKSB7CisgICAgICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUl0ZXJhdG9yUmVzdWx0KGNhbGxGcmFtZSwga2luZCwgaW5kZXgsIGpzVW5kZWZpbmVkKCks
IHRydWUpOworICAgIH0KKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBpdGVyYXRlZE9iamVjdC0+
dHJ5R2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBpdGVyYXRvci0+c2V0TmV4dElu
ZGV4KGluZGV4ICsgMSk7CisgICAgICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxs
RnJhbWUsIGtpbmQsIGluZGV4LCByZXN1bHQsIGZhbHNlKTsKKyAgICB9CisKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoaXRlcmF0ZWRP
YmplY3QpOworICAgIGlmIChraW5kID4gQXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7CisgICAgICAg
IC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBpbmRleGVkIHByb3BlcnR5IHdpbGwgYmUgYW4gb3duIHBy
b3BlcnR5IHNvIGNhY2hlIHRoZSBnZXRPd25Qcm9wZXJ0eQorICAgICAgICAvLyBtZXRob2QgbG9j
YWxseQorICAgICAgICBhdXRvIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXggPSBpdGVyYXRlZE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleDsKKyAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChpdGVyYXRlZE9iamVjdCwgY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpIHsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGl0
ZXJhdGVkT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpIHsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWRPYmplY3QtPmdldFByb3Bl
cnR5U2xvdChjYWxsRnJhbWUsIGluZGV4LCBzbG90KSkKKyAgICAgICAgcmVzdWx0ID0gc2xvdC5n
ZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKKworICAgIGlmIChpbmRleCA9PSBsZW5ndGgpCisg
ICAgICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKKyAgICBlbHNlCisgICAgICAgIGl0ZXJhdG9yLT5z
ZXROZXh0SW5kZXgoaW5kZXggKyAxKTsKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHQo
Y2FsbEZyYW1lLCBraW5kLCBpbmRleCwganNVbmRlZmluZWQoKSwgaW5kZXggPT0gbGVuZ3RoKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yUHJvdG90eXBl
SXRlcmF0b3JOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoaXRlcmF0b3JOZXh0KGNhbGxGcmFtZSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0KENhbGxGcmFtZSogY2FsbEZy
YW1lKQoreworICAgIEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7Cisg
ICAgaWYgKHJlc3VsdCA9PSBjYWxsRnJhbWUtPnZtKCkuaXRlcmF0aW9uVGVybWluYXRvci5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0
KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsK
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmlu
c2ljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAppbmRleCA1
MzhiMzI4NGMyNGMxMzM2NDBmYTQ3ZTNlNDI3YmRkNjU3OWFjNGE5Li45ZTFkZTVjYTdmZGQwNTBi
MTc1NjIyYjA5YThhNDJlZTk3NTRjN2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRyaW5zaWMuaApAQCAtNTIsMTAgKzUyLDggQEAgZW51bSBJbnRyaW5zaWMgewogICAgIFN0
cmluZ1Byb3RvdHlwZVZhbHVlT2ZJbnRyaW5zaWMsCiAgICAgSU11bEludHJpbnNpYywKICAgICBG
Um91bmRJbnRyaW5zaWMsCi0gICAgQXJyYXlJdGVyYXRvck5leHRWYWx1ZUludHJpbnNpYywKLSAg
ICBBcnJheUl0ZXJhdG9yTmV4dEtleUludHJpbnNpYywKLSAgICBBcnJheUl0ZXJhdG9yTmV4dEdl
bmVyaWNJbnRyaW5zaWMsCi0gICAgCisgICAgQXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9y
TmV4dEludHJpbnNpYywKKwogICAgIC8vIERlYnVnZ2luZyBpbnRyaW5zaWNzLiBUaGVzZSBhcmUg
bWVhbnQgdG8gYmUgdXNlZCBhcyB0ZXN0aW5nIGhhY2tzIHdpdGhpbgogICAgIC8vIGpzYy5jcHAg
YW5kIHNob3VsZCBuZXZlciBiZSBleHBvc2VkIHRvIHVzZXJzLgogICAgIERGR1RydWVJbnRyaW5z
aWMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVy
YXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmMzYzI4MTNkODcwNzU2MjNjNWI4NDJiMzc0YTI3NTAw
MzQ2N2VlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SXRlcmF0b3JPcGVyYXRpb25zLmNwcApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisK
K25hbWVzcGFjZSBKU0MgeworCitKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgaXRlcmF0b3IsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNWYWx1ZSBuZXh0RnVu
Y3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0
KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOworCisgICAgQ2FsbERhdGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7CisgICAgQ2FsbFR5
cGUgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24sIG5leHRG
dW5jdGlvbkNhbGxEYXRhKTsKKyAgICBpZiAobmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5
cGVOb25lKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAgICBNYXJr
ZWRBcmd1bWVudEJ1ZmZlciBuZXh0RnVuY3Rpb25Bcmd1bWVudHM7CisgICAgaWYgKCF2YWx1ZS5p
c0VtcHR5KCkpCisgICAgICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlv
bkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlvbkFy
Z3VtZW50cyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKKworICAgIGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCisgICAgICAgIHJl
dHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pT
VmFsdWUgaXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKK3sK
KyAgICByZXR1cm4gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJhdG9yLCBKU1ZhbHVlKCkpOworfQor
CitKU1ZhbHVlIGl0ZXJhdG9yVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJSZXN1
bHQpCit7CisgICAgcmV0dXJuIGl0ZXJSZXN1bHQuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVy
dHlOYW1lcy0+dmFsdWUpOworfQorCitib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0YXRlKiBl
eGVjLCBKU1ZhbHVlIGl0ZXJSZXN1bHQpCit7CisgICAgSlNWYWx1ZSBkb25lID0gaXRlclJlc3Vs
dC5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lKTsKKyAgICByZXR1cm4g
ZG9uZS50b0Jvb2xlYW4oZXhlYyk7Cit9CisKK0pTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGl0ZXJh
dG9yTmV4dChleGVjLCBpdGVyYXRvcik7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBib29sIGRvbmUgPSBpdGVyYXRvckNv
bXBsZXRlKGV4ZWMsIHJlc3VsdCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgcmV0dXJu
IGpzQm9vbGVhbihmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBpdGVyYXRv
ckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKK3sKKyAgICBKU1ZhbHVl
IGV4Y2VwdGlvbjsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhj
ZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9u
KCk7CisgICAgfQorICAgIEpTVmFsdWUgcmV0dXJuRnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhl
YywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5yZXR1cm5LZXl3b3JkKTsKKyAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXR1cm5GdW5j
dGlvbi5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkK
KyAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIHJldHVybkZ1bmN0aW9uQ2Fs
bERhdGE7CisgICAgQ2FsbFR5cGUgcmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRh
KHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxEYXRhKTsKKyAgICBpZiAocmV0dXJu
RnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgaWYgKCFleGNlcHRp
b24uaXNFbXB0eSgpKQorICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVy
IHJldHVybkZ1bmN0aW9uQXJndW1lbnRzOworICAgIEpTVmFsdWUgaW5uZXJSZXN1bHQgPSBjYWxs
KGV4ZWMsIHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxUeXBlLCByZXR1cm5GdW5j
dGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHMpOworCisgICAg
aWYgKCFleGNlcHRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNl
cHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbm5l
clJlc3VsdC5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAg
ICAgICByZXR1cm47CisgICAgfQorfQorCitKU09iamVjdCogY3JlYXRlSXRlclJlc3VsdE9iamVj
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIGJvb2wgZG9uZSkKK3sKKyAgICBKU09i
amVjdCogcmVzdWx0T2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7CisgICAgcmVz
dWx0T2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmRv
bmUsIGpzQm9vbGVhbihkb25lKSk7CisgICAgcmVzdWx0T2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+
dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlLCB2YWx1ZSk7CisgICAgcmV0dXJuIHJl
c3VsdE9iamVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiZWYz
ODgzNWFhZWVlZmFlYzEyYzgwYTk1ZWIxMzNiNzhkYWRkMjQKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaApAQCAtMCww
ICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgSXRlcmF0b3JPcGVyYXRpb25zX2gKKyNkZWZpbmUgSXRlcmF0b3JPcGVy
YXRpb25zX2gKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU09iamVjdC5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworSlNWYWx1ZSBpdGVyYXRvck5leHQoRXhlY1N0YXRlKiwg
SlNWYWx1ZSBpdGVyYXRvciwgSlNWYWx1ZSk7CitKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3Rh
dGUqLCBKU1ZhbHVlIGl0ZXJhdG9yKTsKK0pTVmFsdWUgaXRlcmF0b3JWYWx1ZShFeGVjU3RhdGUq
LCBKU1ZhbHVlIGl0ZXJSZXN1bHQpOworYm9vbCBpdGVyYXRvckNvbXBsZXRlKEV4ZWNTdGF0ZSos
IEpTVmFsdWUgaXRlclJlc3VsdCk7CitKU1ZhbHVlIGl0ZXJhdG9yU3RlcChFeGVjU3RhdGUqLCBK
U1ZhbHVlIGl0ZXJhdG9yKTsKK3ZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqLCBKU1ZhbHVl
IGl0ZXJhdG9yKTsKK0pTT2JqZWN0KiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KEV4ZWNTdGF0ZSos
IEpTVmFsdWUsIGJvb2wgZG9uZSk7CisKK30KKworI2VuZGlmIC8vICFkZWZpbmVkKEl0ZXJhdG9y
T3BlcmF0aW9uc19oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlJdGVyYXRvci5jcHAKaW5kZXggMzNiYWI3MWI2NzkwMjg4OTY3OTUyNjNhNGZjNTlhM2VjOGRj
M2RiZi4uODdjYjVmYjMyNDllMzZlYjE1ODI2MmU0YjE2YjIwMzI3ODBkYjljYSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCkBAIC0z
NSwzMSArMzUsMTQgQEAKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlJdGVyYXRvcjo6c19pbmZv
ID0geyAiQXJyYXlJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFC
TEUoSlNBcnJheUl0ZXJhdG9yKSB9OwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheUl0ZXJhdG9yTmV4dEtleShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0VmFsdWUoRXhlY1N0YXRlKik7Ci1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dEdlbmVy
aWMoRXhlY1N0YXRlKik7Ci0KLXZvaWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihW
TSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5SXRlcmF0aW9uS2luZCBr
aW5kLCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpCit2b2lkIEpTQXJyYXlJdGVyYXRvcjo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIEFycmF5SXRlcmF0aW9uS2luZCBr
aW5kLCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRp
b24odm0pOwogICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICBtX2l0ZXJhdGlvbktp
bmQgPSBraW5kOwogICAgIG1faXRlcmF0ZWRPYmplY3Quc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9i
amVjdCk7Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdGVLZXk6Ci0g
ICAgICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yTmV4dFByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yTmV4dEtleSwgRG9udEVudW0sIDAs
IEFycmF5SXRlcmF0b3JOZXh0S2V5SW50cmluc2ljKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2Fz
ZSBBcnJheUl0ZXJhdGVWYWx1ZToKLSAgICAgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJ
T04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0
b3JOZXh0VmFsdWUsIERvbnRFbnVtLCAwLCBBcnJheUl0ZXJhdG9yTmV4dFZhbHVlSW50cmluc2lj
KTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgSlNDX05BVElWRV9JTlRS
SU5TSUNfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUs
IGFycmF5SXRlcmF0b3JOZXh0R2VuZXJpYywgRG9udEVudW0sIDAsIEFycmF5SXRlcmF0b3JOZXh0
R2VuZXJpY0ludHJpbnNpYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQogfQotICAgIAotICAg
IAorCiB2b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIEpTQXJyYXlJdGVyYXRvciogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKQEAgLTY4LDk5ICs1MSw0IEBAIHZvaWQg
SlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3Im
IHZpc2l0b3IpCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0ZWRPYmpl
Y3QpOwogfQogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgY3JlYXRlSXRlcmF0b3JSZXN1bHQoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUsIEFycmF5SXRlcmF0aW9uS2luZCBraW5kLCBzaXplX3QgaW5kZXgs
IEpTVmFsdWUgcmVzdWx0LCBib29sIGRvbmUpCi17Ci0gICAgaWYgKGRvbmUpCi0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3Iu
Z2V0KCkpOwotICAgIAotICAgIHN3aXRjaCAoa2luZCAmIH5BcnJheUl0ZXJhdGVTcGFyc2VUYWcp
IHsKLSAgICBjYXNlIEFycmF5SXRlcmF0ZUtleToKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihpbmRleCkpOwotICAgICAgICAKLSAgICBjYXNlIEFycmF5SXRlcmF0ZVZh
bHVlOgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgIAot
ICAgIGNhc2UgQXJyYXlJdGVyYXRlS2V5VmFsdWU6IHsKLSAgICAgICAgTWFya2VkQXJndW1lbnRC
dWZmZXIgYXJnczsKLSAgICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAg
ICAgYXJncy5hcHBlbmQocmVzdWx0KTsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNvbnN0cnVjdEFycmF5KGNhbGxGcmFtZSwgMCwgZ2xvYmFsT2Jq
ZWN0LCBhcmdzKSk7Ci0gICAgICAgIAotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKEpTVmFsdWUoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBK
U0FycmF5SXRlcmF0b3IqIGl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU0FycmF5SXRlcmF0b3Iq
PihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKLSAgICBpZiAoIWl0ZXJhdG9yKSB7Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRo
cm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY2FsbCBBcnJheUl0
ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1BcnJheUl0ZXJhdG9yIG9iamVjdCIpKSk7Ci0gICAgfQot
ICAgIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCA9IGl0ZXJhdG9yLT5pdGVyYXRlZE9iamVjdCgp
OwotICAgIHNpemVfdCBpbmRleCA9IGl0ZXJhdG9yLT5uZXh0SW5kZXgoKTsKLSAgICBBcnJheUl0
ZXJhdGlvbktpbmQga2luZCA9IGl0ZXJhdG9yLT5pdGVyYXRpb25LaW5kKCk7Ci0gICAgSlNWYWx1
ZSBqc0xlbmd0aCA9IEpTVmFsdWUoaXRlcmF0ZWRPYmplY3QpLmdldChjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwotICAg
IAotICAgIHNpemVfdCBsZW5ndGggPSBqc0xlbmd0aC50b1VJbnQzMihjYWxsRnJhbWUpOwotICAg
IGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVsbCgpKTsKLSAgICAKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7Ci0gICAg
ICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVz
dWx0KGNhbGxGcmFtZSwga2luZCwgaW5kZXgsIGpzVW5kZWZpbmVkKCksIHRydWUpOwotICAgIH0K
LSAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBpdGVyYXRlZE9iamVjdC0+dHJ5R2V0SW5kZXhRdWlj
a2x5KGluZGV4KSkgewotICAgICAgICBpdGVyYXRvci0+c2V0TmV4dEluZGV4KGluZGV4ICsgMSk7
Ci0gICAgICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxsRnJhbWUsIGtpbmQsIGlu
ZGV4LCByZXN1bHQsIGZhbHNlKTsKLSAgICB9Ci0gICAgCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBq
c1VuZGVmaW5lZCgpOwotICAgIFByb3BlcnR5U2xvdCBzbG90KGl0ZXJhdGVkT2JqZWN0KTsKLSAg
ICBpZiAoa2luZCA+IEFycmF5SXRlcmF0ZVNwYXJzZVRhZykgewotICAgICAgICAvLyBXZSBhc3N1
bWUgdGhhdCB0aGUgaW5kZXhlZCBwcm9wZXJ0eSB3aWxsIGJlIGFuIG93biBwcm9wZXJ0eSBzbyBj
YWNoZSB0aGUgZ2V0T3duUHJvcGVydHkKLSAgICAgICAgLy8gbWV0aG9kIGxvY2FsbHkKLSAgICAg
ICAgYXV0byBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4ID0gaXRlcmF0ZWRPYmplY3QtPm1ldGhv
ZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXg7Ci0gICAgICAgIHdoaWxlIChpbmRl
eCA8IGxlbmd0aCkgewotICAgICAgICAgICAgaWYgKGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgo
aXRlcmF0ZWRPYmplY3QsIGNhbGxGcmFtZSwgaW5kZXgsIHNsb3QpKSB7Ci0gICAgICAgICAgICAg
ICAgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKLSAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpdGVyYXRlZE9iamVj
dC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaW5kZXgsIHNsb3QpKSB7Ci0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAg
ICAgIH0KLSAgICB9IGVsc2UgaWYgKGl0ZXJhdGVkT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2Fs
bEZyYW1lLCBpbmRleCwgc2xvdCkpCi0gICAgICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2Fs
bEZyYW1lLCBpbmRleCk7Ci0gICAgCi0gICAgaWYgKGluZGV4ID09IGxlbmd0aCkKLSAgICAgICAg
aXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIGVsc2UKLSAgICAgICAgaXRlcmF0b3ItPnNldE5leHRJ
bmRleChpbmRleCArIDEpOwotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxsRnJh
bWUsIGtpbmQsIGluZGV4LCBqc1VuZGVmaW5lZCgpLCBpbmRleCA9PSBsZW5ndGgpOwotfQotICAg
IAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dEtleShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHQoY2FsbEZy
YW1lKTsKLX0KLSAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRv
ck5leHRWYWx1ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVy
YXRvck5leHQoY2FsbEZyYW1lKTsKLX0KLSAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlJdGVyYXRvck5leHRHZW5lcmljKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAg
IHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dChjYWxsRnJhbWUpOwotfQotCiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAK
aW5kZXggZjFhMmU1NjJmOWFiZjQwMmFiNjM4ZGMwOWM2ZWZjMzgwZDFjNWI0ZC4uYThhM2ZmYzBj
OWQ2N2Q0NjQ4OTE2NDIzNWNkZDFhMWNiNWYxMGUwMyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcApAQCAtMjksNiAr
MjksNyBAQAogI2lmIEVOQUJMRShQUk9NSVNFUykKIAogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5j
bHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMu
aCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCkBA
IC0yMzIsMTA0ICsyMzMsNTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21p
c2VDb25zdHJ1Y3RvckZ1bmNSZWplY3QoRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoZGVmZXJyZWQtPnByb21pc2UoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmFjZShFeGVjU3RhdGUqIGV4ZWMp
CitzdGF0aWMgdm9pZCBwZXJmb3JtUHJvbWlzZVJhY2VMb29wKEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSBpdGVyYXRvciwgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkLCBKU1ZhbHVlIEMpCiB7
Ci0gICAgLy8gLS0gUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKSAtLQotICAgIEpTVmFsdWUgaXRlcmFi
bGUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgpOwotCi0gICAg
Ly8gMS4gTGV0ICdDJyBiZSB0aGUgdGhpcyB2YWx1ZS4KLSAgICBKU1ZhbHVlIEMgPSBleGVjLT50
aGlzVmFsdWUoKTsKLQotICAgIC8vIDIuIExldCAnZGVmZXJyZWQnIGJlIHRoZSByZXN1bHQgb2Yg
Y2FsbGluZyBHZXREZWZlcnJlZChDKS4KLSAgICBKU1ZhbHVlIGRlZmVycmVkVmFsdWUgPSBjcmVh
dGVKU1Byb21pc2VEZWZlcnJlZEZyb21Db25zdHJ1Y3RvcihleGVjLCBDKTsKLQotICAgIC8vIDMu
IFJldHVybklmQWJydXB0KGRlZmVycmVkKS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBK
U1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBqc0Nhc3Q8SlNQcm9taXNlRGVmZXJyZWQqPihk
ZWZlcnJlZFZhbHVlKTsKLQotICAgIC8vIDQuIExldCAnaXRlcmF0b3InIGJlIHRoZSByZXN1bHQg
b2YgY2FsbGluZyBHZXRJdGVyYXRvcihpdGVyYWJsZSkuCi0gICAgSlNWYWx1ZSBpdGVyYXRvckZ1
bmN0aW9uID0gaXRlcmFibGUuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJp
dmF0ZU5hbWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLQotICAg
IENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKLSAgICBDYWxsVHlwZSBpdGVyYXRv
ckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShpdGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRv
ckZ1bmN0aW9uQ2FsbERhdGEpOwotICAgIGlmIChpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPT0g
Q2FsbFR5cGVOb25lKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwot
ICAgIH0KLQotICAgIEFyZ0xpc3QgaXRlcmF0b3JGdW5jdGlvbkFyZ3VtZW50czsKLSAgICBKU1Zh
bHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBpdGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0
aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmFibGUsIGl0ZXJhdG9y
RnVuY3Rpb25Bcmd1bWVudHMpOwotCi0gICAgLy8gNS4gUmVqZWN0SWZBYnJ1cHQoaXRlcmF0b3Is
IGRlZmVycmVkKS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0KICAg
ICAvLyA2LiBSZXBlYXQKICAgICBkbyB7CiAgICAgICAgIC8vIGkuIExldCAnbmV4dCcgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIEl0ZXJhdG9yU3RlcChpdGVyYXRvcikuCi0gICAgICAgIEpTVmFs
dWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlO
YW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVj
dGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0
ZXAoZXhlYywgaXRlcmF0b3IpOwogCi0gICAgICAgIENhbGxEYXRhIG5leHRGdW5jdGlvbkNhbGxE
YXRhOwotICAgICAgICBDYWxsVHlwZSBuZXh0RnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRh
KG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEpOwotICAgICAgICBpZiAobmV4dEZ1
bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVq
ZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBuZXh0RnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAgICAgIG5leHRGdW5jdGlvbkFy
Z3VtZW50cy5hcHBlbmQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEpTVmFsdWUgbmV4dCA9IGNh
bGwoZXhlYywgbmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsVHlwZSwgbmV4dEZ1bmN0aW9u
Q2FsbERhdGEsIGl0ZXJhdG9yLCBuZXh0RnVuY3Rpb25Bcmd1bWVudHMpOwotICAgICAgICAKICAg
ICAgICAgLy8gaWkuIFJlamVjdElmQWJydXB0KG5leHQsIGRlZmVycmVkKS4KICAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLSAgICAKKyAgICAgICAgICAgIHJl
dHVybjsKKwogICAgICAgICAvLyBpaWkuIElmICduZXh0JyBpcyBmYWxzZSwgcmV0dXJuIGRlZmVy
cmVkLltbUHJvbWlzZV1dLgotICAgICAgICAvLyBOb3RlOiBXZSBpbXBsZW1lbnQgdGhpcyBhcyBh
biBpdGVyYXRpb25UZXJtaW5hdG9yCi0gICAgICAgIGlmIChuZXh0ID09IHZtLml0ZXJhdGlvblRl
cm1pbmF0b3IuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVy
cmVkLT5wcm9taXNlKCkpOwotICAgICAgICAKKyAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIC8vIGl2LiBMZXQgJ25leHRWYWx1ZScgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIEl0ZXJhdG9yVmFsdWUobmV4dCkuCiAgICAgICAgIC8vIHYu
IFJlamVjdElmQWJydXB0KG5leHRWYWx1ZSwgZGVmZXJyZWQpLgotICAgICAgICAvLyBOb3RlOiAn
bmV4dCcgaXMgYWxyZWFkeSB0aGUgdmFsdWUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVy
ZS4KKyAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4ZWMsIG5leHQp
OworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgLy8gdmkuIExldCAnbmV4dFByb21pc2UnIGJlIHRoZSByZXN1bHQgb2YgY2Fs
bGluZyBJbnZva2UoQywgInJlc29sdmUiLCAobmV4dFZhbHVlKSkuCi0gICAgICAgIEpTVmFsdWUg
cmVzb2x2ZUZ1bmN0aW9uID0gQy5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+cmVzb2x2ZSk7
CisgICAgICAgIEpTVmFsdWUgcmVzb2x2ZUZ1bmN0aW9uID0gQy5nZXQoZXhlYywgZXhlYy0+dm0o
KS5wcm9wZXJ0eU5hbWVzLT5yZXNvbHZlKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24o
ZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDYWxsRGF0
YSByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgcmVzb2x2ZUZ1bmN0
aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXNvbHZlRnVuY3Rpb24sIHJlc29sdmVGdW5jdGlv
bkNhbGxEYXRhKTsKICAgICAgICAgaWYgKHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkp
OworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzOwotICAgICAgICByZXNvbHZlRnVuY3Rp
b25Bcmd1bWVudHMuYXBwZW5kKG5leHQpOworICAgICAgICByZXNvbHZlRnVuY3Rpb25Bcmd1bWVu
dHMuYXBwZW5kKG5leHRWYWx1ZSk7CiAgICAgICAgIEpTVmFsdWUgbmV4dFByb21pc2UgPSBjYWxs
KGV4ZWMsIHJlc29sdmVGdW5jdGlvbiwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5cGUsIHJlc29sdmVG
dW5jdGlvbkNhbGxEYXRhLCBDLCByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHMpOwogCiAgICAgICAg
IC8vIHZpaS4gUmVqZWN0SWZBYnJ1cHQobmV4dFByb21pc2UsIGRlZmVycmVkKS4KICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICAvLyB2aWlpLiBMZXQgJ3Jlc3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIEludm9rZShuZXh0UHJvbWlzZSwgInRoZW4iLCAoZGVmZXJyZWQuW1tSZXNvbHZlXV0sIGRl
ZmVycmVkLltbUmVqZWN0XV0pKS4KLSAgICAgICAgSlNWYWx1ZSB0aGVuRnVuY3Rpb24gPSBuZXh0
UHJvbWlzZS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dGhlbik7CisgICAgICAgIEpTVmFs
dWUgdGhlbkZ1bmN0aW9uID0gbmV4dFByb21pc2UuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVy
dHlOYW1lcy0+dGhlbik7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVy
cmVkKSk7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ2FsbERhdGEgdGhlbkZ1bmN0
aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIHRoZW5GdW5jdGlvbkNhbGxUeXBlID0gZ2V0
Q2FsbERhdGEodGhlbkZ1bmN0aW9uLCB0aGVuRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgICAgIGlm
ICh0aGVuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
YnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgfQogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHRoZW5GdW5jdGlvbkFyZ3Vt
ZW50czsKQEAgLTM0MCwxNCArMjk0LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmFjZShFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAg
Ly8gaXguIFJlamVjdElmQWJydXB0KHJlc3VsdCwgZGVmZXJyZWQpLgogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFi
cnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
IH0gd2hpbGUgKHRydWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJv
bWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY1JhY2UoRXhlY1N0YXRlKiBleGVj
KQogewotICAgIC8vIC0tIFByb21pc2UuYWxsKGl0ZXJhYmxlKSAtLQotCisgICAgLy8gLS0gUHJv
bWlzZS5yYWNlKGl0ZXJhYmxlKSAtLQogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1
bWVudCgwKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCkBAIC0zNjEsOSArMzE0LDYgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwo
RXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIC8vIE5PVEU6IEEg
bm9uLWFicnVwdCBjb21wbGV0aW9uIG9mIGNyZWF0ZUpTUHJvbWlzZURlZmVycmVkRnJvbUNvbnN0
cnVjdG9yIGltcGxpZXMgdGhhdAotICAgIC8vIEMgYW5kIGRlZmVycmVkVmFsdWUgYXJlIG9iamVj
dHMuCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBhc09iamVjdChDKTsKICAgICBKU1Byb21p
c2VEZWZlcnJlZCogZGVmZXJyZWQgPSBqc0Nhc3Q8SlNQcm9taXNlRGVmZXJyZWQqPihkZWZlcnJl
ZFZhbHVlKTsKIAogICAgIC8vIDQuIExldCAnaXRlcmF0b3InIGJlIHRoZSByZXN1bHQgb2YgY2Fs
bGluZyBHZXRJdGVyYXRvcihpdGVyYWJsZSkuCkBAIC0zODUsNDAgKzMzNSwzNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3Rh
dGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwogCisgICAg
cGVyZm9ybVByb21pc2VSYWNlTG9vcChleGVjLCBpdGVyYXRvciwgZGVmZXJyZWQsIEMpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaXRlcmF0b3JDbG9zZShleGVjLCBp
dGVyYXRvcik7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZGVmZXJyZWQtPnByb21pc2UoKSk7Cit9CisKK3N0YXRpYyBK
U1ZhbHVlIHBlcmZvcm1Qcm9taXNlQWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRv
ciwgSlNWYWx1ZSBDLCBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQpCit7CisgICAgSlNPYmpl
Y3QqIHRoaXNPYmplY3QgPSBhc09iamVjdChDKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
CiAgICAgLy8gNi4gTGV0ICd2YWx1ZXMnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBBcnJheUNy
ZWF0ZSgwKS4KICAgICBKU0FycmF5KiB2YWx1ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMs
IG51bGxwdHIsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKLSAgICAKKwogICAgIC8vIDcu
IExldCAnY291bnRkb3duSG9sZGVyJyBiZSBSZWNvcmQgeyBbW0NvdW50ZG93bl1dOiAwIH0uCiAg
ICAgTnVtYmVyT2JqZWN0KiBjb3VudGRvd25Ib2xkZXIgPSBjb25zdHJ1Y3ROdW1iZXIoZXhlYywg
dGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWUoMCkpOwotICAgIAorCiAgICAgLy8g
OC4gTGV0ICdpbmRleCcgYmUgMC4KICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgCisKICAg
ICAvLyA5LiBSZXBlYXQuCiAgICAgZG8gewogICAgICAgICAvLyBpLiBMZXQgJ25leHQnIGJlIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpLgotICAgICAgICBKU1Zh
bHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5
TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lKTsKKyAgICAgICAgSlNWYWx1ZSBuZXh0ID0g
aXRlcmF0b3JTdGVwKGV4ZWMsIGl0ZXJhdG9yKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rp
b24oZXhlYywgZGVmZXJyZWQpKTsKLQotICAgICAgICBDYWxsRGF0YSBuZXh0RnVuY3Rpb25DYWxs
RGF0YTsKLSAgICAgICAgQ2FsbFR5cGUgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0
YShuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxEYXRhKTsKLSAgICAgICAgaWYgKG5leHRG
dW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewotICAgICAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJl
amVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgbmV4dEZ1bmN0aW9uQXJndW1lbnRzOwotICAgICAgICBuZXh0RnVuY3Rpb25B
cmd1bWVudHMuYXBwZW5kKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBKU1ZhbHVlIG5leHQgPSBj
YWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5leHRGdW5jdGlv
bkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsKLSAgICAgICAgCi0g
ICAgICAgIC8vIGlpLiBSZWplY3RJZkFicnVwdChuZXh0LCBkZWZlcnJlZCkuCi0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4g
anNVbmRlZmluZWQoKTsKIAogICAgICAgICAvLyBpaWkuIElmICduZXh0JyBpcyBmYWxzZSwKLSAg
ICAgICAgLy8gTm90ZTogV2UgaW1wbGVtZW50IHRoaXMgYXMgYW4gaXRlcmF0aW9uVGVybWluYXRv
cgotICAgICAgICBpZiAobmV4dCA9PSB2bS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKSB7Cisg
ICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSkgewogICAgICAgICAgICAgLy8gYS4gSWYgJ2luZGV4
JyBpcyAwLAogICAgICAgICAgICAgaWYgKCFpbmRleCkgewogICAgICAgICAgICAgICAgIC8vIGEu
IExldCAncmVzb2x2ZVJlc3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxd
XSBpbnRlcm5hbCBtZXRob2QKQEAgLTQyOCw0MCArMzc1LDQ0IEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykK
IAogICAgICAgICAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KHJlc29sdmVSZXN1bHQpLgog
ICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAKKwogICAgICAgICAgICAgLy8gYi4gUmV0dXJuIGRlZmVycmVkLltbUHJvbWlzZV1dLgotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZWZlcnJlZC0+cHJvbWlzZSgpKTsKKyAg
ICAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwogICAgICAgICB9Ci0gICAgICAg
IAorCiAgICAgICAgIC8vIGl2LiBMZXQgJ25leHRWYWx1ZScgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIEl0ZXJhdG9yVmFsdWUobmV4dCkuCiAgICAgICAgIC8vIHYuIFJlamVjdElmQWJydXB0KG5l
eHRWYWx1ZSwgZGVmZXJyZWQpLgotICAgICAgICAvLyBOb3RlOiAnbmV4dCcgaXMgYWxyZWFkeSB0
aGUgdmFsdWUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICAgICAgSlNWYWx1
ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4ZWMsIG5leHQpOworICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKwor
ICAgICAgICB2YWx1ZXMtPnB1c2goZXhlYywganNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgLy8g
dmkuIExldCAnbmV4dFByb21pc2UnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJbnZva2UoQywg
InJlc29sdmUiLCAobmV4dFZhbHVlKSkuCiAgICAgICAgIEpTVmFsdWUgcmVzb2x2ZUZ1bmN0aW9u
ID0gQy5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+cmVzb2x2ZSk7CiAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgICAgICBDYWxsRGF0YSByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YTsK
ICAgICAgICAgQ2FsbFR5cGUgcmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShy
ZXNvbHZlRnVuY3Rpb24sIHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhKTsKICAgICAgICAgaWYgKHJl
c29sdmVGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewogICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFi
cnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXNv
bHZlRnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAgICAgIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cy5h
cHBlbmQobmV4dCk7CisgICAgICAgIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQobmV4
dFZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSBuZXh0UHJvbWlzZSA9IGNhbGwoZXhlYywgcmVzb2x2
ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25DYWxsVHlwZSwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERh
dGEsIEMsIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cyk7CiAKICAgICAgICAgLy8gdmlpLiBSZWpl
Y3RJZkFicnVwdChuZXh0UHJvbWlzZSwgZGVmZXJyZWQpLgogICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJl
amVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAKICAgICAgICAgLy8gdmlpaS4gTGV0ICdjb3VudGRvd25GdW5jdGlvbicgYmUgYSBuZXcg
YnVpbHQtaW4gZnVuY3Rpb24gb2JqZWN0IGFzIGRlZmluZWQgaW4gUHJvbWlzZS5hbGwgQ291bnRk
b3duIEZ1bmN0aW9ucy4KICAgICAgICAgSlNGdW5jdGlvbiogY291bnRkb3duRnVuY3Rpb24gPSBj
cmVhdGVQcm9taXNlQWxsQ291bnRkb3duRnVuY3Rpb24odm0sIHRoaXNPYmplY3QtPmdsb2JhbE9i
amVjdCgpKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gaXguIFNldCB0aGUgW1tJbmRleF1dIGlu
dGVybmFsIHNsb3Qgb2YgJ2NvdW50ZG93bkZ1bmN0aW9uJyB0byAnaW5kZXgnLgogICAgICAgICBj
b3VudGRvd25GdW5jdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pbmRleFBy
aXZhdGVOYW1lLCBKU1ZhbHVlKGluZGV4KSk7CiAKQEAgLTQ3NCwxNiArNDI1LDIwIEBAIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNT
dGF0ZSogZXhlYykKICAgICAgICAgLy8geGlpLiBTZXQgdGhlIFtbQ291bnRkb3duSG9sZGVyXV0g
aW50ZXJuYWwgc2xvdCBvZiAnY291bnRkb3duRnVuY3Rpb24nIHRvICdjb3VudGRvd25Ib2xkZXIn
LgogICAgICAgICBjb3VudGRvd25GdW5jdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5h
bWVzLT5jb3VudGRvd25Ib2xkZXJQcml2YXRlTmFtZSwgY291bnRkb3duSG9sZGVyKTsKIAorICAg
ICAgICAvLyB4dmkuIFNldCBjb3VudGRvd25Ib2xkZXIuW1tDb3VudGRvd25dXSB0byBjb3VudGRv
d25Ib2xkZXIuW1tDb3VudGRvd25dXSArIDEuCisgICAgICAgIHVpbnQzMl90IG5ld0NvdW50ZG93
blZhbHVlID0gY291bnRkb3duSG9sZGVyLT5pbnRlcm5hbFZhbHVlKCkuYXNVSW50MzIoKSArIDE7
CisgICAgICAgIGNvdW50ZG93bkhvbGRlci0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgSlNWYWx1ZShu
ZXdDb3VudGRvd25WYWx1ZSkpOworCiAgICAgICAgIC8vIHhpaWkuIExldCAncmVzdWx0JyBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgSW52b2tlKG5leHRQcm9taXNlLCAidGhlbiIsIChjb3VudGRv
d25GdW5jdGlvbiwgZGVmZXJyZWQuW1tSZWplY3RdXSkpLgogICAgICAgICBKU1ZhbHVlIHRoZW5G
dW5jdGlvbiA9IG5leHRQcm9taXNlLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50aGVuKTsK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIENhbGxEYXRhIHRoZW5GdW5jdGlv
bkNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSB0aGVuRnVuY3Rpb25DYWxsVHlwZSA9IGdldENh
bGxEYXRhKHRoZW5GdW5jdGlvbiwgdGhlbkZ1bmN0aW9uQ2FsbERhdGEpOwogICAgICAgICBpZiAo
dGhlbkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJy
dXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRl
ZmluZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHRoZW5G
dW5jdGlvbkFyZ3VtZW50czsKQEAgLTQ5NCwxNSArNDQ5LDYyIEBAIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykK
IAogICAgICAgICAvLyB4aXYuIFJlamVjdElmQWJydXB0KHJlc3VsdCwgZGVmZXJyZWQpLgogICAg
ICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgLy8geHYuIFNldCBpbmRleCB0byBpbmRl
eCArIDEuCiAgICAgICAgIGluZGV4Kys7Ci0KLSAgICAgICAgLy8geHZpLiBTZXQgY291bnRkb3du
SG9sZGVyLltbQ291bnRkb3duXV0gdG8gY291bnRkb3duSG9sZGVyLltbQ291bnRkb3duXV0gKyAx
LgotICAgICAgICB1aW50MzJfdCBuZXdDb3VudGRvd25WYWx1ZSA9IGNvdW50ZG93bkhvbGRlci0+
aW50ZXJuYWxWYWx1ZSgpLmFzVUludDMyKCkgKyAxOwotICAgICAgICBjb3VudGRvd25Ib2xkZXIt
PnNldEludGVybmFsVmFsdWUodm0sIEpTVmFsdWUobmV3Q291bnRkb3duVmFsdWUpKTsKICAgICB9
IHdoaWxlICh0cnVlKTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VD
b25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIC0tIFByb21pc2Uu
YWxsKGl0ZXJhYmxlKSAtLQorCisgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50
KDApOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICAvLyAxLiBMZXQgJ0MnIGJlIHRo
ZSB0aGlzIHZhbHVlLgorICAgIEpTVmFsdWUgQyA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworCisgICAg
Ly8gMi4gTGV0ICdkZWZlcnJlZCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEdldERlZmVycmVk
KEMpLgorICAgIEpTVmFsdWUgZGVmZXJyZWRWYWx1ZSA9IGNyZWF0ZUpTUHJvbWlzZURlZmVycmVk
RnJvbUNvbnN0cnVjdG9yKGV4ZWMsIEMpOworCisgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoZGVm
ZXJyZWQpLgorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKworICAgIC8vIE5PVEU6IEEgbm9uLWFicnVw
dCBjb21wbGV0aW9uIG9mIGNyZWF0ZUpTUHJvbWlzZURlZmVycmVkRnJvbUNvbnN0cnVjdG9yIGlt
cGxpZXMgdGhhdAorICAgIC8vIEMgYW5kIGRlZmVycmVkVmFsdWUgYXJlIG9iamVjdHMuCisgICAg
SlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0ganNDYXN0PEpTUHJvbWlzZURlZmVycmVkKj4o
ZGVmZXJyZWRWYWx1ZSk7CisKKyAgICAvLyA0LiBMZXQgJ2l0ZXJhdG9yJyBiZSB0aGUgcmVzdWx0
IG9mIGNhbGxpbmcgR2V0SXRlcmF0b3IoaXRlcmFibGUpLgorICAgIEpTVmFsdWUgaXRlcmF0b3JG
dW5jdGlvbiA9IGl0ZXJhYmxlLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclBy
aXZhdGVOYW1lKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisKKyAg
ICBDYWxsRGF0YSBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGE7CisgICAgQ2FsbFR5cGUgaXRlcmF0
b3JGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoaXRlcmF0b3JGdW5jdGlvbiwgaXRlcmF0
b3JGdW5jdGlvbkNhbGxEYXRhKTsKKyAgICBpZiAoaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlID09
IENhbGxUeXBlTm9uZSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsK
KyAgICB9CisKKyAgICBBcmdMaXN0IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHM7CisgICAgSlNW
YWx1ZSBpdGVyYXRvciA9IGNhbGwoZXhlYywgaXRlcmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5j
dGlvbkNhbGxUeXBlLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhYmxlLCBpdGVyYXRv
ckZ1bmN0aW9uQXJndW1lbnRzKTsKKworICAgIC8vIDUuIFJlamVjdElmQWJydXB0KGl0ZXJhdG9y
LCBkZWZlcnJlZCkuCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworCisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBwZXJmb3JtUHJvbWlzZUFsbChleGVjLCBpdGVyYXRvciwgQywg
ZGVmZXJyZWQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpdGVy
YXRvckNsb3NlKGV4ZWMsIGl0ZXJhdG9yKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24o
ZXhlYywgZGVmZXJyZWQpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwogfQogCiBKU1Byb21pc2UqIGNvbnN0cnVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVjLCBK
U0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uKiByZXNvbHZlcikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBl
LmNwcAppbmRleCBiMjIwYjk4NzU4ODVjNDJmOWNlNjM4ZjMyMjI0NzkyYzMyNzYxMDE3Li44MDY3
Y2IyMGYwYzM3ZDY2YTc3OGJlOWQxZWY2YWZkYjNjNmRlODI4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCkBAIC0y
Niw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFwSXRlcmF0b3JQ
cm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUg
IkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1
ZGUgIkpTTWFwSXRlcmF0b3IuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgdm9pZCBNYXBJdGVyYXRvclBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CiAKICAgICBKU0Nf
TkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIE1h
cEl0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Ci0gICAgSlNDX05B
VElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwg
TWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOworICAgIEpTQ19OQVRJ
VkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgTWFwSXRlcmF0b3JQcm90b3R5cGVG
dW5jTmV4dCwgRG9udEVudW0sIDApOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSogY2FsbEZyYW1lKQpA
QCAtNTksMTIgKzYwLDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0
b3JQcm90b3R5cGVGdW5jTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBKU01hcEl0ZXJh
dG9yKiBpdGVyYXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNhbGxGcmFtZS0+
dGhpc1ZhbHVlKCkpOwogICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBj
YWxsIE1hcEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1NYXBJdGVyYXRvciBvYmplY3QiKSkpOwot
ICAgIAorCiAgICAgSlNWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxG
cmFtZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2Fs
bEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7CiAgICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3Iu
Z2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVj
dChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKaW5k
ZXggNTczYWNmYTVjZDc2NGIwOWVlNzU0M2IzNDdiNDlhNTExMWU3MDUzNy4uNTI2MWJmM2NhY2Mx
ZDRlMGU0NTc1NTFhMDIyZGU2N2M5MTk0ZGZmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcApAQCAtMjYsNiArMjYs
NyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNldEl0ZXJhdG9yUHJvdG90eXBl
LmgiCiAKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU1Nl
dEl0ZXJhdG9yLmgiCkBAIC00Niw3ICs0Nyw3IEBAIHZvaWQgU2V0SXRlcmF0b3JQcm90b3R5cGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAg
ICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOwogCiAgICAgSlNDX05BVElWRV9G
VU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBTZXRJdGVyYXRv
clByb3RvdHlwZUZ1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOwotICAgIEpTQ19OQVRJVkVfRlVO
Q1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIFNldEl0ZXJh
dG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVtLCAwKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPm5leHQsIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQs
IERvbnRFbnVtLCAwKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBTZXRJdGVy
YXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTYyLDEw
ICs2Myw5IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3JQcm90b3R5
cGVGdW5jTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNh
bGwgU2V0SXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLVNldEl0ZXJhdG9yIG9iamVjdCIpKSk7CiAK
ICAgICBpZiAoaXRlcmF0b3ItPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKICAg
ICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJh
bWUtPnZtKCkuaXRlcmF0aW9uVGVybWluYXRvci5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwg
dHJ1ZSkpOwogfQogCi0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1ZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAw
ZjczNTQwZjQzNTk2YTcyNDZlMjk0MjQyYmUwNTJhMWQ0NTY2ZGY4Li41YTI4NGViYTBiNGRlN2E1
YjFjODJlMDhhY2RlYjE3MjQzZThiZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCkBAIC0zOTYsMTAgKzM5Niw4IEBAIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVy
YXRvckZvckludHJpbnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICByZXR1cm4gbG9n
VGh1bmtHZW5lcmF0b3I7CiAgICAgY2FzZSBJTXVsSW50cmluc2ljOgogICAgICAgICByZXR1cm4g
aW11bFRodW5rR2VuZXJhdG9yOwotICAgIGNhc2UgQXJyYXlJdGVyYXRvck5leHRLZXlJbnRyaW5z
aWM6Ci0gICAgICAgIHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yOwot
ICAgIGNhc2UgQXJyYXlJdGVyYXRvck5leHRWYWx1ZUludHJpbnNpYzoKLSAgICAgICAgcmV0dXJu
IGFycmF5SXRlcmF0b3JOZXh0VmFsdWVUaHVua0dlbmVyYXRvcjsKKyAgICBjYXNlIEFycmF5SXRl
cmF0b3JQcm90b3R5cGVJdGVyYXRvck5leHRJbnRyaW5zaWM6CisgICAgICAgIHJldHVybiBhcnJh
eUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0b3I7CiAgICAgZGVmYXVs
dDoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDdhOTA1ZmNmOGEwMmYyYWVlNTI0
N2ExYzc1ODllNDU3NTE4OWQ4ZTYuLjk2OWUyNWU3MzM3MDExOTY4NThmZTFmZjUzODM0MGYzMDE5
NzkxNWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMCBAQAorMjAxNS0wMi0xMiAgWXVzdWtlIFN1enVraSAg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBVcGdyYWRlIEVTNiBJdGVyYXRvciBp
bnRlcmZhY2VzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNDEzNTEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIGpzL2N1c3RvbS1pdGVyYXRvcnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBq
cy9jdXN0b20taXRlcmF0b3JzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL2l0ZXJhdG9ycy1z
aGFwZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL2l0ZXJhdG9ycy1zaGFwZS5o
dG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWl0ZXJhdG9ycy5q
czogQWRkZWQuCisgICAgICAgIChjdXN0b21JdGVyYXRvci5uZXh0KToKKyAgICAgICAgKGN1c3Rv
bUl0ZXJhdG9yLlN5bWJvbC5pdGVyYXRvcik6CisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2l0
ZXJhdG9ycy1zaGFwZS5qczogQWRkZWQuCisgICAgICAgIChrZXlWYWx1ZUl0ZXJhdG9yLnNldCBl
bnRyaWVzKToKKwogMjAxNS0wMi0xMSAgQ29tbWl0IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbGluZyBvdXQgcjE3OTkyMS4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2pzL2N1c3RvbS1pdGVyYXRvcnMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvanMvY3VzdG9tLWl0ZXJhdG9ycy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzhi
ZWVjMTZiZmE4NzlmZjM5ZDAzMDZiMWRhNTk5NGUzM2RjZGM4ZgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2pzL2N1c3RvbS1pdGVyYXRvcnMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
NTEgQEAKK1RoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIGN1c3RvbSBpdGVyYWJsZSBv
YmplY3RzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyB2YWx1ZSBpcyAw
CitQQVNTIHZhbHVlIGlzIDEKK1BBU1MgdmFsdWUgaXMgMgorUEFTUyB2YWx1ZSBpcyAzCitQQVNT
IHZhbHVlIGlzIDQKK1BBU1MgdmFsdWUgaXMgNQorUEFTUyB2YWx1ZSBpcyA2CitQQVNTIHZhbHVl
IGlzIDcKK1BBU1MgdmFsdWUgaXMgOAorUEFTUyB2YWx1ZSBpcyA5CitQQVNTIHZhbHVlIGlzIDEw
CitQQVNTIHZhbHVlIGlzIDExCitQQVNTIHZhbHVlIGlzIDEyCitQQVNTIHZhbHVlIGlzIDEzCitQ
QVNTIHZhbHVlIGlzIDE0CitQQVNTIHZhbHVlIGlzIDE1CitQQVNTIHZhbHVlIGlzIDE2CitQQVNT
IHZhbHVlIGlzIDE3CitQQVNTIHZhbHVlIGlzIDE4CitQQVNTIHZhbHVlIGlzIDE5CitQQVNTIHZh
bHVlIGlzIDIwCitQQVNTIHZhbHVlIGlzIDIxCitQQVNTIHZhbHVlIGlzIDIyCitQQVNTIHZhbHVl
IGlzIDIzCitQQVNTIHZhbHVlIGlzIDI0CitQQVNTIHZhbHVlIGlzIDI1CitQQVNTIHZhbHVlIGlz
IDI2CitQQVNTIHZhbHVlIGlzIDI3CitQQVNTIHZhbHVlIGlzIDI4CitQQVNTIHZhbHVlIGlzIDI5
CitQQVNTIHZhbHVlIGlzIDMwCitQQVNTIHZhbHVlIGlzIDMxCitQQVNTIHZhbHVlIGlzIDMyCitQ
QVNTIHZhbHVlIGlzIDMzCitQQVNTIHZhbHVlIGlzIDM0CitQQVNTIHZhbHVlIGlzIDM1CitQQVNT
IHZhbHVlIGlzIDM2CitQQVNTIHZhbHVlIGlzIDM3CitQQVNTIHZhbHVlIGlzIDM4CitQQVNTIHZh
bHVlIGlzIDM5CitQQVNTIHZhbHVlIGlzIDQwCitQQVNTIHZhbHVlIGlzIDQxCitQQVNTIHN1Y2Nl
c3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvY3VzdG9tLWl0ZXJhdG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvanMvY3VzdG9t
LWl0ZXJhdG9ycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmN2NlMzU0YjBkY2JkYzAyM2E0NmY3OTNiYjEz
MzkyY2EzNGU5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9jdXN0b20taXRl
cmF0b3JzLmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9J
RVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0ic2NyaXB0LXRlc3RzL2N1c3RvbS1pdGVyYXRvcnMuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5Pgor
PC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvaXRlcmF0b3JzLXNoYXBlLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2l0ZXJhdG9ycy1zaGFwZS1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjc4NmJjMjJmNjNlZmFkN2EwOTljNjMwZTZkNjdkMzRhNDBlNDQ5OQotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2l0ZXJhdG9ycy1zaGFwZS1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwzOSBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGUgc2hhcGUgb2YgYnVpbHRpbiBp
dGVyYXRvcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitBcnJheUl0ZXJhdG9y
CitQQVNTIHZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyBmYWxzZQorUEFT
UyB2YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIHRydWUK
K1BBU1MgdHlwZW9mIHZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQgaXMgImZ1bmN0aW9uIgor
UEFTUyBrZXlJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIGZhbHNlCitQQVNTIGtl
eUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIHRydWUKK1BBU1Mg
dHlwZW9mIGtleUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IGlzICJmdW5jdGlvbiIKK1BBU1Mga2V5
VmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIGZhbHNlCitQQVNTIGtleVZh
bHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykgaXMgdHJ1ZQorUEFT
UyB0eXBlb2Yga2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCBpcyAiZnVuY3Rpb24iCitT
ZXRJdGVyYXRvcgorUEFTUyB2YWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0JykgaXMg
ZmFsc2UKK1BBU1MgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQn
KSBpcyB0cnVlCitQQVNTIHR5cGVvZiB2YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IGlzICJm
dW5jdGlvbiIKK1BBU1Mga2V5SXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyBmYWxz
ZQorUEFTUyBrZXlJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyB0
cnVlCitQQVNTIHR5cGVvZiBrZXlJdGVyYXRvci5fX3Byb3RvX18ubmV4dCBpcyAiZnVuY3Rpb24i
CitQQVNTIGtleVZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyBmYWxzZQor
UEFTUyBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlz
IHRydWUKK1BBU1MgdHlwZW9mIGtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQgaXMgImZ1
bmN0aW9uIgorTWFwSXRlcmF0b3IKK1BBU1MgdmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgn
bmV4dCcpIGlzIGZhbHNlCitQQVNTIHZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3Bl
cnR5KCduZXh0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18u
bmV4dCBpcyAiZnVuY3Rpb24iCitQQVNTIGtleUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0
JykgaXMgZmFsc2UKK1BBU1Mga2V5SXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCdu
ZXh0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2Yga2V5SXRlcmF0b3IuX19wcm90b19fLm5leHQgaXMg
ImZ1bmN0aW9uIgorUEFTUyBrZXlWYWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0Jykg
aXMgZmFsc2UKK1BBU1Mga2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHko
J25leHQnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5u
ZXh0IGlzICJmdW5jdGlvbiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pdGVyYXRvcnMtc2hhcGUu
aHRtbCBiL0xheW91dFRlc3RzL2pzL2l0ZXJhdG9ycy1zaGFwZS5odG1sCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQy
OTU1MGZkODcxMzdlMzZiNGEyYzEwMmJkMTRmYTc1Yzc3NDU2NjEKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9qcy9pdGVyYXRvcnMtc2hhcGUuaHRtbApAQCAtMCwwICsxLDEwIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaXRlcmF0b3JzLXNo
YXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2pzL3NjcmlwdC10ZXN0cy9jdXN0b20taXRlcmF0b3JzLmpzIGIvTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL2N1c3RvbS1pdGVyYXRvcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2ZiMjE4ZjI1NGY3NzMw
YzA0YmQ3MDE0NzE2ZDkzOWFiZGFmZjNhNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L2pzL3NjcmlwdC10ZXN0cy9jdXN0b20taXRlcmF0b3JzLmpzCkBAIC0wLDAgKzEsMjMgQEAKK2Rl
c2NyaXB0aW9uKAorIlRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIGN1c3RvbSBpdGVy
YWJsZSBvYmplY3RzLiIKKyk7CisKK3ZhciBjdXN0b21JdGVyYXRvciA9IHsKKyAgICBfX2tleTog
MCwKKyAgICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAg
ICBkb25lOiB0aGlzLl9fa2V5ID09PSA0MiwKKyAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9fa2V5
KysKKyAgICAgICAgfTsKKyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0KK307CisKK3ZhciBleHBlY3RlZCA9IDA7
Citmb3IgKHZhciB2YWx1ZSBvZiBjdXN0b21JdGVyYXRvcikgeworICAgIHNob3VsZEJlKCJ2YWx1
ZSIsIFN0cmluZyhleHBlY3RlZCsrKSk7Cit9CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvaXRlcmF0b3JzLXNoYXBl
LmpzIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2l0ZXJhdG9ycy1zaGFwZS5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yNGM3OGZkODMzMDE2YzNkOTZhYjgwY2ExOWY0NGFiYjhlZGU2OWM2Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2l0ZXJhdG9ycy1zaGFwZS5q
cwpAQCAtMCwwICsxLDY1IEBACitkZXNjcmlwdGlvbigKKyJUaGlzIHRlc3QgY2hlY2tzIHRoZSBz
aGFwZSBvZiBidWlsdGluIGl0ZXJhdG9ycy4iCispOworCitkZWJ1ZygiQXJyYXlJdGVyYXRvciIp
OwordmFyIGFycmF5ID0gWydDb2NvYScsICdDYXBwdWNjaW5vJywgJ1RoZSBkZXMgQWxpemVzJywg
J01hdGNoYScsICdLaWxpbWFuamFybyddOwordmFyIHZhbHVlSXRlcmF0b3IgPSBhcnJheVtTeW1i
b2wuaXRlcmF0b3JdKCk7CitzaG91bGRCZUZhbHNlKCJ2YWx1ZUl0ZXJhdG9yLmhhc093blByb3Bl
cnR5KCduZXh0JykiKTsKK3Nob3VsZEJlVHJ1ZSgidmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFz
T3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2YgdmFs
dWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCIsICJmdW5jdGlvbiIpOworCit2YXIga2V5SXRlcmF0
b3IgPSBhcnJheS5rZXlzKCk7CitzaG91bGRCZUZhbHNlKCJrZXlJdGVyYXRvci5oYXNPd25Qcm9w
ZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZVRydWUoImtleUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNP
d25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoInR5cGVvZiBrZXlJ
dGVyYXRvci5fX3Byb3RvX18ubmV4dCIsICJmdW5jdGlvbiIpOworCit2YXIga2V5VmFsdWVJdGVy
YXRvciA9IGFycmF5LmVudHJpZXMoKTsKK3Nob3VsZEJlRmFsc2UoImtleVZhbHVlSXRlcmF0b3Iu
aGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVlKCJrZXlWYWx1ZUl0ZXJhdG9y
Ll9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZUVxdWFsVG9TdHJp
bmcoInR5cGVvZiBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IiwgImZ1bmN0aW9uIik7
CisKK2RlYnVnKCJTZXRJdGVyYXRvciIpOwordmFyIHNldCA9IG5ldyBTZXQoWydDb2NvYScsICdD
YXBwdWNjaW5vJywgJ1RoZSBkZXMgQWxpemVzJywgJ01hdGNoYScsICdLaWxpbWFuamFybyddKTsK
K3ZhciB2YWx1ZUl0ZXJhdG9yID0gc2V0W1N5bWJvbC5pdGVyYXRvcl0oKTsKK3Nob3VsZEJlRmFs
c2UoInZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVl
KCJ2YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91
bGRCZUVxdWFsVG9TdHJpbmcoInR5cGVvZiB2YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0Iiwg
ImZ1bmN0aW9uIik7CisKK3ZhciBrZXlJdGVyYXRvciA9IHNldC5rZXlzKCk7CitzaG91bGRCZUZh
bHNlKCJrZXlJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZVRydWUo
ImtleUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoInR5cGVvZiBrZXlJdGVyYXRvci5fX3Byb3RvX18ubmV4dCIsICJmdW5j
dGlvbiIpOworCit2YXIga2V5VmFsdWVJdGVyYXRvciA9IHNldC5lbnRyaWVzKCk7CitzaG91bGRC
ZUZhbHNlKCJrZXlWYWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3Vs
ZEJlVHJ1ZSgia2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQn
KSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2Yga2V5VmFsdWVJdGVyYXRvci5fX3By
b3RvX18ubmV4dCIsICJmdW5jdGlvbiIpOworCitkZWJ1ZygiTWFwSXRlcmF0b3IiKTsKK3ZhciBt
YXAgPSBuZXcgTWFwKCk7CitbCisgICAgWyAnQ29jb2EnLCAyLCBdLAorICAgIFsgJ0NhcHB1Y2Np
bm8nLCAwIF0sCisgICAgWyAnVGhlIGRlcyBBbGl6ZXMnLCAzIF0sCisgICAgWyAnTWF0Y2hhJywg
MiBdLAorICAgIFsgJ0tpbGltYW5qYXJvJywgMV0KK10uZm9yRWFjaChmdW5jdGlvbiAoWyBrZXks
IHZhbHVlIF0pIHsKKyAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworfSk7Cit2YXIgdmFsdWVJdGVy
YXRvciA9IG1hcFtTeW1ib2wuaXRlcmF0b3JdKCk7CitzaG91bGRCZUZhbHNlKCJ2YWx1ZUl0ZXJh
dG9yLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlVHJ1ZSgidmFsdWVJdGVyYXRv
ci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJ0eXBlb2YgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCIsICJmdW5jdGlvbiIpOwor
Cit2YXIga2V5SXRlcmF0b3IgPSBtYXAua2V5cygpOworc2hvdWxkQmVGYWxzZSgia2V5SXRlcmF0
b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVlKCJrZXlJdGVyYXRvci5f
X3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJ0eXBlb2Yga2V5SXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKwordmFy
IGtleVZhbHVlSXRlcmF0b3IgPSBtYXAuZW50cmllcygpOworc2hvdWxkQmVGYWxzZSgia2V5VmFs
dWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZVRydWUoImtleVZh
bHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJl
RXF1YWxUb1N0cmluZygidHlwZW9mIGtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAi
ZnVuY3Rpb24iKTsKKworc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246489</attachid>
            <date>2015-02-12 16:49:40 -0800</date>
            <delta_ts>2015-02-12 20:20:28 -0800</delta_ts>
            <desc>prototype</desc>
            <filename>bug-141351-20150213094938.patch</filename>
            <type>text/plain</type>
            <size>70120</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTc5OTMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBm
YjExNDMwY2RmZWYxOTM3NzAxZWFlNTMzZGRlMDcyMzdlZmYyOTE2Li4xZjVlNWE4OTA4ZThlODAw
NWExM2Q0YTg0Y2ExODM1MWRkZTE4OWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MiBAQAorMjAxNS0wMi0xMiAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBVcGdyYWRlIEVTNiBJdGVyYXRvciBpbnRlcmZhY2VzCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDEzNTEKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0
OgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHA6CisgICAgICAg
IChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dUeXBlRXJyb3IpOgorICAgICAgICAo
SlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0aW9uKToKKyAgICAgICAgKEpTQzo6
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc09iamVjdCk6CisgICAgICAgIChKU0M6OkJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0SXNVbmRlZmluZWQpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuY3BwOgorICAg
ICAgICAoSlNDOjphcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0
b3IpOgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXlUaHVua0dlbmVyYXRvcik6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFsdWVUaHVua0dlbmVy
YXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5oOgorICAgICAg
ICAqIHJ1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjphcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAgICAgICAgKiBydW50
aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpBcnJheUl0ZXJh
dG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmNyZWF0ZUl0ZXJh
dG9yUmVzdWx0KToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JOZXh0KToKKyAgICAgICAgKEpTQzo6
YXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6OmFycmF5
SXRlcmF0b3JQcm90b3R5cGVOZXh0KToKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgor
ICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6Oml0ZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yVmFsdWUpOgorICAg
ICAgICAoSlNDOjppdGVyYXRvckNvbXBsZXRlKToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JTdGVw
KToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JDbG9zZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUl0
ZXJSZXN1bHRPYmplY3QpOgorICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg6
IENvcGllZCBmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQ
cm90b3R5cGUuY3BwLgorICAgICAgICAqIHJ1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChK
U0M6OmNyZWF0ZUl0ZXJhdG9yUmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJ
dGVyYXRvck5leHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dEtl
eSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFsdWUpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMpOiBEZWxldGVkLgor
ICAgICAgICAqIHJ1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
OjpwZXJmb3JtUHJvbWlzZVJhY2VMb29wKToKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlQ29uc3Ry
dWN0b3JGdW5jUmFjZSk6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm9taXNlQWxsKToKKyAgICAg
ICAgKEpTQzo6SlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKToKKyAgICAgICAgKiBydW50aW1l
L01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQcm90
b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQcm90b3R5
cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHA6
CisgICAgICAgIChKU0M6OlNldEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6Cisg
ICAgICAgIChKU0M6OlNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQpOgorICAgICAgICAqIHJ1
bnRpbWUvVk0uY3BwOgorICAgICAgICAoSlNDOjp0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyk6
CisKIDIwMTUtMDItMTAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAg
ICBTcGxpdCBGVEw6OkpTQ2FsbCBpbnRvIHRoZSBwYXJ0IHRoYXQga25vd3MgYWJvdXQgY2FsbCBp
bmxpbmUgY2FjaGluZyBhbmQgdGhlIHBhcnQgdGhhdCBpbnRlcmFjdHMgd2l0aCBMTFZNIHBhdGNo
cG9pbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2Q3Nzk2MzFjZjMx
Zjk1ODdkZjI3Yzk5NTBhNzFhNWFkNDFjN2RlMy4uNWMzZjJjYTFmYzgwMmM1OWU2NjU5Y2Q5Njli
MzYyYmZiZTcxNGQ1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNDM4
LDcgKzQzOCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50
aW1lL0Vycm9ySW5zdGFuY2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKICAg
ICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCi0gICAgcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcCAKKyAgICBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCiAgICAgcnVudGltZS9FeGVj
dXRhYmxlLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKICAgICBydW50
aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCkBAIC00NTAsNiArNDUwLDcgQEAgc2V0KEph
dmFTY3JpcHRDb3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVh
ZGluZy5jcHAKICAgICBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCiAgICAgcnVu
dGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAorICAgIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
LmNwcAogICAgIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuY3BwCiAgICAgcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5jcHAKICAgICBydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3Bw
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCmluZGV4IGE1NmU2ZDU4YmQ3OTZlZmUzOWI3M2JkNDliYTM0ZjlkODQw
MDkzMWQuLmQ5MzVkNWExMzE0OGNjNzEzMjIyNzRkM2I1YjY1MDQzNTJiOWYyNTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCkBAIC0yNDQ0LDYgKzI0NDQsMTMgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dFRocm93VHlwZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBlbWl0T3Bjb2Rl
KG9wX3Rocm93X3N0YXRpY19lcnJvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENv
bnN0YW50VmFsdWUoYWRkU3RyaW5nQ29uc3RhbnQoSWRlbnRpZmllcihtX3ZtLCBtZXNzYWdlKSkp
LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworfQorCiB2b2lk
IEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKFJlZ2lzdGVySUQq
IGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlLCB1bnNp
Z25lZCBhdHRyaWJ1dGVzKQogewogICAgIGVtaXRPcGNvZGUob3BfcHVzaF9uYW1lX3Njb3BlKTsK
QEAgLTI2NDksMjQgKzI2NTYsMTAwIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVt
ZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSogbm9kZSwgRXhwcmVzc2lvCiAgICAgICAg
IGVtaXRNb3ZlKGFyZ3MudGhpc1JlZ2lzdGVyKCksIHN1YmplY3QuZ2V0KCkpOwogICAgICAgICBl
bWl0Q2FsbChpdGVyYXRvci5nZXQoKSwgaXRlcmF0b3IuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgYXJncywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVu
ZCgpKTsKICAgICB9Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJhdG9yTmV4dCA9IGVtaXRH
ZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLml0
ZXJhdG9yTmV4dFByaXZhdGVOYW1lKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBu
ZXdUZW1wb3JhcnkoKTsKICAgICBlbWl0TG9hZCh2YWx1ZS5nZXQoKSwganNVbmRlZmluZWQoKSk7
CiAgICAgCiAgICAgZW1pdEp1bXAoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwogICAgIAogICAg
IFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gbmV3TGFiZWwoKTsKKyAgICBSZWZQdHI8TGFiZWw+
IGl0ZXJhdG9yRG9uZSA9IG5ld0xhYmVsKCk7CiAgICAgZW1pdExhYmVsKGxvb3BTdGFydC5nZXQo
KSk7CiAgICAgZW1pdExvb3BIaW50KCk7CisKKyAgICBSZWZQdHI8TGFiZWw+IHRyeVN0YXJ0TGFi
ZWwgPSBuZXdMYWJlbCgpOworICAgIGVtaXRMYWJlbCh0cnlTdGFydExhYmVsLmdldCgpKTsKKyAg
ICBUcnlEYXRhKiB0cnlEYXRhID0gcHVzaFRyeSh0cnlTdGFydExhYmVsLmdldCgpKTsKICAgICBj
YWxsQmFjaygqdGhpcywgdmFsdWUuZ2V0KCkpOworICAgIFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJl
ID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOworCiAgICAgZW1pdExhYmVsKHNjb3BlLT5j
b250aW51ZVRhcmdldCgpKTsKLSAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMs
IDAsIDEpOwotICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJh
dG9yLmdldCgpKTsKLSAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIo
MCksIHZhbHVlLmdldCgpKTsKLSAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgaXRlcmF0b3JOZXh0
LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRBcmd1bWVudHMsIG5vZGUtPmRpdm90KCks
IG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IG5leHQgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCks
IHByb3BlcnR5TmFtZXMoKS5uZXh0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlcmF0b3JO
ZXh0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIG5leHQuZ2V0KCksIHByb3BlcnR5TmFt
ZXMoKS5pdGVyYXRvck5leHRQcml2YXRlTmFtZSk7CisgICAgUmVmUHRyPExhYmVsPiBpdGVyYXRv
clJlc3VsdEludGVyZmFjZVN0YXJ0ID0gbmV3TGFiZWwoKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7CisgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5k
ZWZpbmVkKHJlc3VsdC5nZXQoKSwgaXRlcmF0b3JOZXh0LmdldCgpKSwgaXRlcmF0b3JSZXN1bHRJ
bnRlcmZhY2VTdGFydC5nZXQoKSk7CisKKyAgICAvLyBXaGVuIHRoZSBuZXh0IG1ldGhvZCBoYXMg
YSBmdW5jdGlvbiBhcyBhbiBpdGVyYXRvck5leHQgcHJpdmF0ZSBwcm9wZXJ0eSwgd2UgdXNlIGl0
IGluc3RlYWQgb2YgdGhlIHVzdWFsICJuZXh0IiBtZXRob2QuCisgICAgLy8gVGhpcyBtZXRob2Qg
ZG9lc24ndCBjcmVhdGUgYW4gaXRlcmF0b3IgcmVzdWx0IG9iamVjdCBhbmQgZW5hYmxlcyBjb21t
b24gYnVpbHRpbiBvYmplY3RzIGxpa2UgQXJyYXkgdG8gaXRlcmF0ZSBmYXN0ZXIuCisgICAgewor
ICAgICAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMsIDAsIDEpOworICAgICAg
ICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7
CisgICAgICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMuYXJndW1lbnRSZWdpc3RlcigwKSwgdmFs
dWUuZ2V0KCkpOworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgaXRlcmF0b3JOZXh0Lmdl
dCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRBcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5v
ZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgfQogICAgIGVtaXRKdW1w
SWZGYWxzZShlbWl0RXF1YWxpdHlPcChvcF9zdHJpY3RlcSwgcmVzdWx0LmdldCgpLCB2YWx1ZS5n
ZXQoKSwgZW1pdExvYWQoMCwgSlNWYWx1ZSh2bSgpLT5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgp
KSkpLCBsb29wU3RhcnQuZ2V0KCkpOworICAgIGVtaXRKdW1wKGl0ZXJhdG9yRG9uZS5nZXQoKSk7
CisKKyAgICBlbWl0TGFiZWwoaXRlcmF0b3JSZXN1bHRJbnRlcmZhY2VTdGFydC5nZXQoKSk7Cisg
ICAgeworICAgICAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1bWVudHMoKnRoaXMsIDAsIDEpOwor
ICAgICAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5n
ZXQoKSk7CisgICAgICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMuYXJndW1lbnRSZWdpc3Rlcigw
KSwgdmFsdWUuZ2V0KCkpOworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgbmV4dC5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2Rl
LT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgIH0KKyAgICB7CisgICAgICAg
IFJlZlB0cjxMYWJlbD4gdHlwZUlzT2JqZWN0ID0gbmV3TGFiZWwoKTsKKyAgICAgICAgZW1pdEp1
bXBJZlRydWUoZW1pdElzT2JqZWN0KHJlc3VsdC5nZXQoKSwgdmFsdWUuZ2V0KCkpLCB0eXBlSXNP
YmplY3QuZ2V0KCkpOworICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJ
dGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAgICBl
bWl0TGFiZWwodHlwZUlzT2JqZWN0LmdldCgpKTsKKyAgICB9CisgICAgZW1pdEp1bXBJZlRydWUo
ZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCku
ZG9uZSksIGl0ZXJhdG9yRG9uZS5nZXQoKSk7CisgICAgZW1pdEdldEJ5SWQodmFsdWUuZ2V0KCks
IHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkudmFsdWUpOworICAgIGVtaXRKdW1wKGxvb3BT
dGFydC5nZXQoKSk7CisKKyAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1l
ZCBjb250cm9sIGZsb3cuCisgICAgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0
aW9uUmVnaXN0ZXIgPSBwb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgbmV3VGVtcG9yYXJ5KCks
IGNhdGNoSGVyZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0aHJvdyA9IG5ld0xh
YmVsKCk7CisKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhvZCA9IGVtaXRH
ZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnJl
dHVybktleXdvcmQpOworICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQocmVz
dWx0LmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCByZXRocm93LmdldCgpKTsKKworICAgICAg
ICBSZWZQdHI8TGFiZWw+IHR5cGVJc09iamVjdENoZWNrID0gbmV3TGFiZWwoKTsKKworICAgICAg
ICBDYWxsQXJndW1lbnRzIHJldHVybkFyZ3VtZW50cygqdGhpcywgMCk7CisgICAgICAgIGVtaXRN
b3ZlKHJldHVybkFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOworCisg
ICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbFRyeVN0YXJ0ID0gbmV3TGFiZWwoKTsKKyAg
ICAgICAgZW1pdExhYmVsKHJldHVybkNhbGxUcnlTdGFydC5nZXQoKSk7CisgICAgICAgIFRyeURh
dGEqIHJldHVybkNhbGxUcnlEYXRhID0gcHVzaFRyeShyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkp
OworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4
cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2
b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgUmVmUHRyPExhYmVsPiByZXR1
cm5DYWxsQ2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOworICAgICAgICBl
bWl0SnVtcCh0eXBlSXNPYmplY3RDaGVjay5nZXQoKSk7CisKKyAgICAgICAgZW1pdExhYmVsKHR5
cGVJc09iamVjdENoZWNrLmdldCgpKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2Jq
ZWN0KHJlc3VsdC5nZXQoKSwgdmFsdWUuZ2V0KCkpLCByZXRocm93LmdldCgpKTsKKyAgICAgICAg
ZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFj
ZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKworICAgICAgICBwb3BUcnlBbmRFbWl0Q2F0Y2gocmV0
dXJuQ2FsbFRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCByZXR1cm5DYWxsQ2F0Y2hIZXJlLmdldCgp
KTsKKyAgICAgICAgZW1pdExhYmVsKHJldGhyb3cuZ2V0KCkpOworICAgICAgICBlbWl0VGhyb3co
ZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgIH0KKworICAgIC8vIEl0ZXJhdG9yQ2xvc2Ug
c2VxdWVuY2UgZm9yIGJyZWFrLWVkIGNvbnRyb2wgZmxvdy4KICAgICBlbWl0TGFiZWwoc2NvcGUt
PmJyZWFrVGFyZ2V0KCkpOworICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVy
bk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJv
cGVydHlOYW1lcygpLnJldHVybktleXdvcmQpOworICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0
SXNVbmRlZmluZWQocmVzdWx0LmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCBpdGVyYXRvckRv
bmUuZ2V0KCkpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlz
LCAwKTsKKyAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBp
dGVyYXRvci5nZXQoKSk7CisgICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRo
b2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZv
dCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgICAgICBlbWl0
SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QocmVzdWx0LmdldCgpLCB2YWx1ZS5nZXQoKSksIGl0ZXJh
dG9yRG9uZS5nZXQoKSk7CisgICAgICAgIGVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwo
Ikl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgfQor
CisgICAgZW1pdExhYmVsKGl0ZXJhdG9yRG9uZS5nZXQoKSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIGJhc2UpCkBAIC0yNzQzLDYgKzI4MjYsMjMgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogaW4KICAgICByZXR1cm4gZHN0OwogfQogCisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0SXNPYmplY3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCit7
CisgICAgZW1pdE9wY29kZShvcF9pc19vYmplY3QpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChkc3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkp
OworICAgIHJldHVybiBkc3Q7Cit9CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0SXNVbmRlZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCit7CisgICAg
ZW1pdE9wY29kZShvcF9pc191bmRlZmluZWQpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChk
c3QtPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOwor
ICAgIHJldHVybiBkc3Q7Cit9CisKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVk
Rm9ySW5TY29wZShSZWdpc3RlcklEKiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJl
Z2lzdGVyKQogewogICAgIGlmICghbG9jYWxSZWdpc3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCAyNTc0
ZTgzNzZkNzY1OWIxOTE4MmUyMThlZTRhYjQ1Yzk3YWViNzBhLi44ZWNiYjI4ZDIzYWMzMjA1ZDRk
OTdlYmZjMjA1ODQwMTg5YWM0YzU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCkBAIC01MjYsNiArNTI2LDkgQEAK
ICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKFJlZ2lz
dGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJl
Z2lzdGVySUQqIGluZGV4KTsKIAorICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNPYmplY3QoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0
SXNVbmRlZmluZWQoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOworCiAgICAgICAg
IHZvaWQgZW1pdFJlYWRPbmx5RXhjZXB0aW9uSWZOZWVkZWQoKTsKIAogICAgICAgICAvLyBTdGFy
dCBhIHRyeSBibG9jay4gJ3N0YXJ0JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgpAQCAtNTQwLDYg
KzU0Myw3IEBACiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGVtaXRUaHJvd1JlZmVyZW5jZUVy
cm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CisgICAgICAgIHZvaWQgZW1pdFRocm93VHlwZUVy
cm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSk7CiAKICAgICAgICAgdm9pZCBlbWl0UHVzaEZ1bmN0
aW9uTmFtZVNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHks
IFJlZ2lzdGVySUQqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgdm9pZCBl
bWl0UHVzaENhdGNoU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9w
ZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDdiMGNkYTY4NmNj
NDcyN2VjZjI4YWY3YTU3YTVlMDc1MTEzNWMzYTUuLmNjMmEzMzJjMWEyYmIxYjNkOTdiZGM5NmI2
ZjU2ZDFkODY4M2YxY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1
bmtHZW5lcmF0b3JzLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKQEAgLTEwNDQsMzAgKzEwNDQsMzAgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IGltdWxUaHVua0dlbmVyYXRvcihWTSogdm0pCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+
aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImltdWwiKTsKIH0KIAotc3RhdGljIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZNKiB2
bSwgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQpCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJ
dGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKIHsKICAg
ICB0eXBlZGVmIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRydXN0ZWRJbW0zMiBUcnVzdGVkSW1tMzI7
CiAgICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpUcnVzdGVkSW1tUHRyIFRydXN0ZWRJ
bW1QdHI7CiAgICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpBZGRyZXNzIEFkZHJlc3M7
CiAgICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpCYXNlSW5kZXggQmFzZUluZGV4Owog
ICAgIHR5cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6SnVtcCBKdW1wOwotICAgIAorCiAgICAg
U3BlY2lhbGl6ZWRUaHVua0pJVCBqaXQodm0pOwogICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBiZWlu
ZyBjYWxsZWQgb24gYW4gYXJyYXkgaXRlcmF0b3IsIGFuZCBsb2FkIG1faXRlcmF0ZWRPYmplY3Qs
IGFuZCBtX25leHRJbmRleCBpbnRvIHJlZ1QwIGFuZCByZWdUMSByZXNwZWN0aXZlbHkKICAgICBq
aXQubG9hZEFyZ3VtZW50V2l0aFNwZWNpZmljQ2xhc3MoSlNBcnJheUl0ZXJhdG9yOjppbmZvKCks
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRoaXNBcmd1bWVudCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKIAogICAgIC8vIEVhcmx5IGV4aXQg
aWYgd2UgZG9uJ3QgaGF2ZSBhIHRodW5rIGZvciB0aGlzIGZvcm0gb2YgaXRlcmF0aW9uCiAgICAg
aml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkFib3Zl
T3JFcXVhbCwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJh
dG9yOjpvZmZzZXRPZkl0ZXJhdGlvbktpbmQoKSksIFRydXN0ZWRJbW0zMihBcnJheUl0ZXJhdGVL
ZXlWYWx1ZSkpKTsKLSAgICAKKwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRlZE9iamVjdCgp
KSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIAorCiAgICAgaml0LmxvYWQzMihB
ZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNl
dE9mTmV4dEluZGV4KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7Ci0gICAgCisKICAg
ICAvLyBQdWxsIG91dCB0aGUgYnV0dGVyZmx5IGZyb20gaXRlcmF0ZWRPYmplY3QKICAgICBqaXQu
bG9hZDgoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNDZWxsOjppbmRleGlu
Z1R5cGVPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzKTsKICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7CiAgICAgSnVtcCBudWxs
QnV0dGVyZmx5ID0gaml0LmJyYW5jaFRlc3RQdHIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6WmVybywg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwotICAgIAorCiAgICAgSnVtcCBub3REb25lID0g
aml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkJlbG93LCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgQnV0dGVyZmx5
OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7CiAKICAgICBudWxsQnV0dGVyZmx5LmxpbmsoJmpp
dCk7CkBAIC0xMDc1LDI4ICsxMDc1LDI3IEBAIHN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
YXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcihWTSogdm0sIEFycmF5SXRlcmF0CiAgICAg
Ly8gUmV0dXJuIHRoZSB0ZXJtaW5hdGlvbiBzaWduYWwgdG8gaW5kaWNhdGUgdGhhdCB3ZSd2ZSBm
aW5pc2hlZAogICAgIGppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodm0tPml0ZXJhdGlvblRlcm1pbmF0
b3IuZ2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgaml0LnJldHVybkpT
Q2VsbChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgCisKICAgICBub3REb25lLmxp
bmsoJmppdCk7Ci0gICAgCi0gICAgaWYgKGtpbmQgPT0gQXJyYXlJdGVyYXRlS2V5KSB7Ci0gICAg
ICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgICAg
ICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwotICAgICAgICBy
ZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAi
YXJyYXktaXRlcmF0b3ItbmV4dC1rZXkiKTsKLSAgICAgICAgCi0gICAgfQotICAgIEFTU0VSVChr
aW5kID09IEFycmF5SXRlcmF0ZVZhbHVlKTsKLSAgICAKKworICAgIEp1bXAgbm90S2V5ID0gaml0
LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkVxdWFsLCBBZGRyZXNzKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0aW9uS2luZCgp
KSwgVHJ1c3RlZEltbTMyKEFycmF5SXRlcmF0ZVZhbHVlKSk7CisKKyAgICBqaXQuYWRkMzIoVHJ1
c3RlZEltbTMyKDEpLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5
SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpKTsKKyAgICBqaXQucmV0dXJuSW50MzIoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOworCisgICAgbm90S2V5LmxpbmsoJmppdCk7CisKICAg
ICAvLyBPa2F5LCBub3cgd2UncmUgcmV0dXJuaW5nIGEgdmFsdWUgc28gbWFrZSBzdXJlIHdlJ3Jl
IGluc2lkZSB0aGUgdmVjdG9yIHNpemUKICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNo
MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6QWJvdmVPckVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgQnV0dGVyZmx5Ojpv
ZmZzZXRPZlZlY3Rvckxlbmd0aCgpKSkpOwotICAgIAorCiAgICAgLy8gU28gbm93IHdlIHBlcmZv
cm0gaW5saW5lIGxvYWRzIGZvciBpbnQzMiwgdmFsdWUvdW5kZWNpZGVkLCBhbmQgZG91YmxlIHN0
b3JhZ2UKICAgICBKdW1wIHVuZGVjaWRlZFN0b3JhZ2UgPSBqaXQuYnJhbmNoMzIoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBUcnVzdGVkSW1t
MzIoQXJyYXlXaXRoVW5kZWNpZGVkKSk7CiAgICAgSnVtcCBub3RDb250aWd1b3VzU3RvcmFnZSA9
IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhDb250aWd1b3VzKSk7Ci0gICAg
CisKICAgICB1bmRlY2lkZWRTdG9yYWdlLmxpbmsoJmppdCk7Ci0gICAgCisKICAgICBqaXQubG9h
ZFB0cihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVy
Zmx5T2Zmc2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7Ci0gICAgCisKICNpZiBV
U0UoSlNWQUxVRTY0KQogICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6VGltZXNFaWdodCksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBKdW1wIG5v
dEhvbGUgPSBqaXQuYnJhbmNoVGVzdDY0KFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vblplcm8sIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKQEAgLTExMTgsMzMgKzExMTcsMjMgQEAgc3RhdGlj
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZN
KiB2bSwgQXJyYXlJdGVyYXQKICAgICBqaXQucmV0dXJuSlNWYWx1ZShTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwogI2VuZGlmCiAgICAgbm90
Q29udGlndW91c1N0b3JhZ2UubGluaygmaml0KTsKLSAgICAKKwogICAgIEp1bXAgbm90SW50MzJT
dG9yYWdlID0gaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vdEVxdWFsLCBTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMywgVHJ1c3RlZEltbTMyKEFycmF5V2l0aEludDMyKSk7CiAg
ICAgaml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNPYmpl
Y3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwogICAg
IGppdC5sb2FkMzIoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGltZXNFaWdodCwgSlNW
YWx1ZTo6b2Zmc2V0T2ZQYXlsb2FkKCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAg
ICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7CiAgICAgaml0
LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKICAgICBub3RJbnQzMlN0
b3JhZ2UubGluaygmaml0KTsKLSAgICAKKwogICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFu
Y2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhEb3VibGUpKSk7CiAgICAgaml0LmxvYWRQdHIo
QWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9m
ZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwogICAgIGppdC5sb2FkRG91Ymxl
KEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQpLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpmcFJlZ1QwKTsKICAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNz
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4
dEluZGV4KCkpKTsKICAgICBqaXQucmV0dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZw
UmVnVDApOwotICAgIAotICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlO
YXRpdmVUYWlsQ2FsbCh2bSksICJhcnJheS1pdGVyYXRvci1uZXh0LXZhbHVlIik7Ci19CiAKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcih2bSwg
QXJyYXlJdGVyYXRlS2V5KTsKKyAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+
Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiYXJyYXktaXRlcmF0b3ItbmV4dCIpOwogfQogCi1NYWNy
b0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yKFZN
KiB2bSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcih2bSwg
QXJyYXlJdGVyYXRlVmFsdWUpOwotfQotICAgIAogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IDI0NmRh
MmVhNjQ1NGI5ZTMwMjc2YWQyMTc3NGI1NWMyNTNkNDEwYzYuLjBjMTg2ODkwNzc5MTAzZTNmMjZk
ZWYzMDFiMjEzZWVhYjNmZDg0NGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuaApAQCAtMTMwLDggKzEzMCw3IEBAIGlubGluZSBUaHVua0dlbmVyYXRvciB2
aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5r
R2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3Io
Vk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKFZN
Kik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2Vu
ZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvclByb3RvdHlw
ZUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0KICNlbmRpZiAvLyBFTkFCTEUo
SklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRz
SXRlcmF0b3JQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
dW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGQ3OWNjNTJlMDkyYmM2ZTkwYjQxYmJl
Nzk5OGMyYWI3MDdhYTNkMmMuLmFkOGI3NTkwZDg1ZTY1NmE5MTJiNGFhOTkxNzYwZmFkMzYzMDYw
YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c0l0
ZXJhdG9yUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5oIgogCisj
aW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVy
YXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIApAQCAtNDMsNyArNDQsNyBAQCB2b2lk
IEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhp
cyk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9y
UHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yLCBEb250
RW51bSwgMCk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRvck5leHRQcml2YXRlTmFtZSwgYXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwg
RG9udEVudW0sIDApOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
bmV4dCwgYXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOwog
fQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90
eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNTUsOCArNTYsOCBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVu
Y05leHQoQ2FsbEZyYW1lKiBjYWxsRgogewogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChq
c0Nhc3Q8SlNBcmd1bWVudHNJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLT5uZXh0
KGNhbGxGcmFtZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1
bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlv
blRlcm1pbmF0b3IuZ2V0KCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0
ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRl
ZmluZWQoKSwgdHJ1ZSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGM4ODAwZTNjZGNh
NjI1MmVhYjk4ZmQwMjExODYxZTFkMGRiZWMxMTIuLjMxYzAyYTU4MzdiZjZlYmNmMGExMzM2NWQ1
YWEwMTJmMTg3YjgzYWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCkBAIC0yMCwxMiArMjAsMTMgQEAKICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5
SXRlcmF0b3JQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTQXJyYXlJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgpAQCAtMzgsNiArMzksOCBAQAogY29uc3Qg
Q2xhc3NJbmZvIEFycmF5SXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkFycmF5IEl0ZXJh
dG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShBcnJheUl0ZXJhdG9y
UHJvdG90eXBlKSB9OwogCiBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJh
eUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0ZShFeGVjU3RhdGUqKTsKK3N0YXRpYyBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRvck5leHQoRXhl
Y1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJh
dG9yUHJvdG90eXBlTmV4dChFeGVjU3RhdGUqKTsKIAogdm9pZCBBcnJheUl0ZXJhdG9yUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qp
CiB7CkBAIC00Niw2ICs0OSw5IEBAIHZvaWQgQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0CiAgICAgdm0ucHJv
dG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04o
dm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJyYXlJdGVyYXRvclByb3Rv
dHlwZUl0ZXJhdGUsIERvbnRFbnVtLCAwKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPm5leHQsIGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LCBEb250RW51bSwg
MCk7CisgICAgSlNWYWx1ZSBuZXh0RnVuY3Rpb24gPSBnZXREaXJlY3Qodm0sIHZtLnByb3BlcnR5
TmFtZXMtPm5leHQpOworICAgIGpzQ2FzdDxKU09iamVjdCo+KG5leHRGdW5jdGlvbiktPkpTQ19O
QVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFBy
aXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0b3JOZXh0LCBEb250RW51bSwg
MCwgQXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dEludHJpbnNpYyk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdGUo
Q2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01Myw0ICs1OSw5NyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT50aGlzVmFsdWUo
KSk7CiB9CiAKK3N0YXRpYyBKU1ZhbHVlIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KENhbGxGcmFtZSog
Y2FsbEZyYW1lLCBBcnJheUl0ZXJhdGlvbktpbmQga2luZCwgc2l6ZV90IGluZGV4LCBKU1ZhbHVl
IHJlc3VsdCwgYm9vbCBkb25lKQoreworICAgIGlmIChkb25lKQorICAgICAgICByZXR1cm4gY2Fs
bEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCk7CisKKyAgICBzd2l0Y2ggKGtp
bmQgJiB+QXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7CisgICAgY2FzZSBBcnJheUl0ZXJhdGVLZXk6
CisgICAgICAgIHJldHVybiBqc051bWJlcihpbmRleCk7CisKKyAgICBjYXNlIEFycmF5SXRlcmF0
ZVZhbHVlOgorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgY2FzZSBBcnJheUl0ZXJhdGVL
ZXlWYWx1ZTogeworICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOworICAgICAgICBh
cmdzLmFwcGVuZChqc051bWJlcihpbmRleCkpOworICAgICAgICBhcmdzLmFwcGVuZChyZXN1bHQp
OworICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5jYWxs
ZWUoKS0+Z2xvYmFsT2JqZWN0KCk7CisgICAgICAgIHJldHVybiBjb25zdHJ1Y3RBcnJheShjYWxs
RnJhbWUsIDAsIGdsb2JhbE9iamVjdCwgYXJncyk7CisKKyAgICB9CisgICAgZGVmYXVsdDoKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisgICAgcmV0dXJuIEpT
VmFsdWUoKTsKK30KKworc3RhdGljIEpTVmFsdWUgaXRlcmF0b3JOZXh0KENhbGxGcmFtZSogY2Fs
bEZyYW1lKQoreworICAgIEpTQXJyYXlJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0
PEpTQXJyYXlJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAgIGlmICghaXRl
cmF0b3IpIHsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiB0
aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgQXJyYXlJ
dGVyYXRvci5uZXh0KCkgb24gYSBub24tQXJyYXlJdGVyYXRvciBvYmplY3QiKSk7CisgICAgfQor
ICAgIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCA9IGl0ZXJhdG9yLT5pdGVyYXRlZE9iamVjdCgp
OworICAgIHNpemVfdCBpbmRleCA9IGl0ZXJhdG9yLT5uZXh0SW5kZXgoKTsKKyAgICBBcnJheUl0
ZXJhdGlvbktpbmQga2luZCA9IGl0ZXJhdG9yLT5pdGVyYXRpb25LaW5kKCk7CisgICAgSlNWYWx1
ZSBqc0xlbmd0aCA9IEpTVmFsdWUoaXRlcmF0ZWRPYmplY3QpLmdldChjYWxsRnJhbWUsIGNhbGxG
cmFtZS0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCk7CisgICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc051bGwoKTsKKworICAgIHNpemVfdCBsZW5ndGgg
PSBqc0xlbmd0aC50b1VJbnQzMihjYWxsRnJhbWUpOworICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAgICBpZiAoaW5kZXggPj0g
bGVuZ3RoKSB7CisgICAgICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZUl0ZXJhdG9yUmVzdWx0KGNhbGxGcmFtZSwga2luZCwgaW5kZXgsIGpzVW5kZWZpbmVkKCks
IHRydWUpOworICAgIH0KKyAgICBpZiAoSlNWYWx1ZSByZXN1bHQgPSBpdGVyYXRlZE9iamVjdC0+
dHJ5R2V0SW5kZXhRdWlja2x5KGluZGV4KSkgeworICAgICAgICBpdGVyYXRvci0+c2V0TmV4dElu
ZGV4KGluZGV4ICsgMSk7CisgICAgICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxs
RnJhbWUsIGtpbmQsIGluZGV4LCByZXN1bHQsIGZhbHNlKTsKKyAgICB9CisKKyAgICBKU1ZhbHVl
IHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7CisgICAgUHJvcGVydHlTbG90IHNsb3QoaXRlcmF0ZWRP
YmplY3QpOworICAgIGlmIChraW5kID4gQXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7CisgICAgICAg
IC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBpbmRleGVkIHByb3BlcnR5IHdpbGwgYmUgYW4gb3duIHBy
b3BlcnR5IHNvIGNhY2hlIHRoZSBnZXRPd25Qcm9wZXJ0eQorICAgICAgICAvLyBtZXRob2QgbG9j
YWxseQorICAgICAgICBhdXRvIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXggPSBpdGVyYXRlZE9i
amVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleDsKKyAgICAgICAg
d2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7CisgICAgICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlT
bG90QnlJbmRleChpdGVyYXRlZE9iamVjdCwgY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpIHsKKyAg
ICAgICAgICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGl0
ZXJhdGVkT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpIHsK
KyAgICAgICAgICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5k
ZXgrKzsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWRPYmplY3QtPmdldFByb3Bl
cnR5U2xvdChjYWxsRnJhbWUsIGluZGV4LCBzbG90KSkKKyAgICAgICAgcmVzdWx0ID0gc2xvdC5n
ZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKKworICAgIGlmIChpbmRleCA9PSBsZW5ndGgpCisg
ICAgICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKKyAgICBlbHNlCisgICAgICAgIGl0ZXJhdG9yLT5z
ZXROZXh0SW5kZXgoaW5kZXggKyAxKTsKKyAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHQo
Y2FsbEZyYW1lLCBraW5kLCBpbmRleCwganNVbmRlZmluZWQoKSwgaW5kZXggPT0gbGVuZ3RoKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yUHJvdG90eXBl
SXRlcmF0b3JOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQoreworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoaXRlcmF0b3JOZXh0KGNhbGxGcmFtZSkpOworfQorCitFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0KENhbGxGcmFtZSogY2FsbEZy
YW1lKQoreworICAgIEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7Cisg
ICAgaWYgKHJlc3VsdCA9PSBjYWxsRnJhbWUtPnZtKCkuaXRlcmF0aW9uVGVybWluYXRvci5nZXQo
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0
KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsK
K30KKwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmlu
c2ljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAppbmRleCA1
MzhiMzI4NGMyNGMxMzM2NDBmYTQ3ZTNlNDI3YmRkNjU3OWFjNGE5Li45ZTFkZTVjYTdmZGQwNTBi
MTc1NjIyYjA5YThhNDJlZTk3NTRjN2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbnRyaW5zaWMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbnRyaW5zaWMuaApAQCAtNTIsMTAgKzUyLDggQEAgZW51bSBJbnRyaW5zaWMgewogICAgIFN0
cmluZ1Byb3RvdHlwZVZhbHVlT2ZJbnRyaW5zaWMsCiAgICAgSU11bEludHJpbnNpYywKICAgICBG
Um91bmRJbnRyaW5zaWMsCi0gICAgQXJyYXlJdGVyYXRvck5leHRWYWx1ZUludHJpbnNpYywKLSAg
ICBBcnJheUl0ZXJhdG9yTmV4dEtleUludHJpbnNpYywKLSAgICBBcnJheUl0ZXJhdG9yTmV4dEdl
bmVyaWNJbnRyaW5zaWMsCi0gICAgCisgICAgQXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9y
TmV4dEludHJpbnNpYywKKwogICAgIC8vIERlYnVnZ2luZyBpbnRyaW5zaWNzLiBUaGVzZSBhcmUg
bWVhbnQgdG8gYmUgdXNlZCBhcyB0ZXN0aW5nIGhhY2tzIHdpdGhpbgogICAgIC8vIGpzYy5jcHAg
YW5kIHNob3VsZCBuZXZlciBiZSBleHBvc2VkIHRvIHVzZXJzLgogICAgIERGR1RydWVJbnRyaW5z
aWMsCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVy
YXRpb25zLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yN2EzYjBmNjM2ZWMxZTJmMjRjOGRkNzBkN2NmZGJiMmQw
MDU5OGU2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SXRlcmF0b3JPcGVyYXRpb25zLmNwcApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElT
JycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgor
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgor
Cit1c2luZyBuYW1lc3BhY2UgV1RGOworCituYW1lc3BhY2UgSlNDIHsKKworSlNWYWx1ZSBpdGVy
YXRvck5leHQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yLCBKU1ZhbHVlIHZhbHVl
KQoreworICAgIEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4ZWMt
PnZtKCkucHJvcGVydHlOYW1lcy0+bmV4dCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIENhbGxEYXRhIG5leHRGdW5j
dGlvbkNhbGxEYXRhOworICAgIENhbGxUeXBlIG5leHRGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEobmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSk7CisgICAgaWYgKG5leHRG
dW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMpOworCisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbmV4dEZ1bmN0aW9uQXJn
dW1lbnRzOworICAgIGlmICghdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBuZXh0RnVuY3Rpb25B
cmd1bWVudHMuYXBwZW5kKHZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywg
bmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsVHlwZSwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEs
IGl0ZXJhdG9yLCBuZXh0RnVuY3Rpb25Bcmd1bWVudHMpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBpZiAoIXJlc3Vs
dC5pc09iamVjdCgpKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4
ZWMsIEpTVmFsdWUgaXRlcmF0b3IpCit7CisgICAgcmV0dXJuIGl0ZXJhdG9yTmV4dChleGVjLCBp
dGVyYXRvciwgSlNWYWx1ZSgpKTsKK30KKworSlNWYWx1ZSBpdGVyYXRvclZhbHVlKEV4ZWNTdGF0
ZSogZXhlYywgSlNWYWx1ZSBpdGVyUmVzdWx0KQoreworICAgIHJldHVybiBpdGVyUmVzdWx0Lmdl
dChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlKTsKK30KKworYm9vbCBpdGVy
YXRvckNvbXBsZXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyUmVzdWx0KQoreworICAg
IEpTVmFsdWUgZG9uZSA9IGl0ZXJSZXN1bHQuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlO
YW1lcy0+ZG9uZSk7CisgICAgcmV0dXJuIGRvbmUudG9Cb29sZWFuKGV4ZWMpOworfQorCitKU1Zh
bHVlIGl0ZXJhdG9yU3RlcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IpCit7Cisg
ICAgSlNWYWx1ZSByZXN1bHQgPSBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0b3IpOworICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cisg
ICAgYm9vbCBkb25lID0gaXRlcmF0b3JDb21wbGV0ZShleGVjLCByZXN1bHQpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisgICAg
aWYgKGRvbmUpCisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3ZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
aXRlcmF0b3IpCit7CisgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigpOworICAg
ICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KKyAgICBKU1ZhbHVlIHJldHVybkZ1
bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+cmV0
dXJuS2V5d29yZCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQoKSkgeworICAgICAgICBp
ZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBleGVjLT52bSgpLnRocm93RXhj
ZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBD
YWxsRGF0YSByZXR1cm5GdW5jdGlvbkNhbGxEYXRhOworICAgIENhbGxUeXBlIHJldHVybkZ1bmN0
aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVuY3Rpb25D
YWxsRGF0YSk7CisgICAgaWYgKHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25l
KSB7CisgICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGV4ZWMt
PnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFyZ3VtZW50czsKKyAgICBK
U1ZhbHVlIGlubmVyUmVzdWx0ID0gY2FsbChleGVjLCByZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVu
Y3Rpb25DYWxsVHlwZSwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIHJldHVybkZ1
bmN0aW9uQXJndW1lbnRzKTsKKworICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkgeworICAg
ICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghaW5uZXJSZXN1bHQuaXNPYmplY3QoKSkgeworICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KK30KKworSlNPYmpl
Y3QqIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVl
LCBib29sIGRvbmUpCit7CisgICAgSlNPYmplY3QqIHJlc3VsdE9iamVjdCA9IGNvbnN0cnVjdEVt
cHR5T2JqZWN0KGV4ZWMpOworICAgIHJlc3VsdE9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kb25lLCBqc0Jvb2xlYW4oZG9uZSkpOworICAgIHJlc3Vs
dE9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1
ZSwgdmFsdWUpOworICAgIHJldHVybiByZXN1bHRPYmplY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JP
cGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJh
dGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40YmVmMzg4MzVhYWVlZWZhZWMxMmM4MGE5NWViMTMzYjc4ZGFk
ZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEl0ZXJhdG9yT3BlcmF0aW9u
c19oCisjZGVmaW5lIEl0ZXJhdG9yT3BlcmF0aW9uc19oCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVl
LmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0pTVmFsdWUg
aXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0b3IsIEpTVmFsdWUpOworSlNW
YWx1ZSBpdGVyYXRvck5leHQoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyYXRvcik7CitKU1ZhbHVl
IGl0ZXJhdG9yVmFsdWUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyUmVzdWx0KTsKK2Jvb2wgaXRl
cmF0b3JDb21wbGV0ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJSZXN1bHQpOworSlNWYWx1ZSBp
dGVyYXRvclN0ZXAoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyYXRvcik7Cit2b2lkIGl0ZXJhdG9y
Q2xvc2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyYXRvcik7CitKU09iamVjdCogY3JlYXRlSXRl
clJlc3VsdE9iamVjdChFeGVjU3RhdGUqLCBKU1ZhbHVlLCBib29sIGRvbmUpOworCit9CisKKyNl
bmRpZiAvLyAhZGVmaW5lZChJdGVyYXRvck9wZXJhdGlvbnNfaCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCmluZGV4IDMzYmFiNzFiNjc5
MDI4ODk2Nzk1MjYzYTRmYzU5YTNlYzhkYzNkYmYuLjg3Y2I1ZmIzMjQ5ZTM2ZWIxNTgyNjJlNGIx
NmIyMDMyNzgwZGI5Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlJdGVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmNwcApAQCAtMzUsMzEgKzM1LDE0IEBACiAKIGNvbnN0IENsYXNzSW5m
byBKU0FycmF5SXRlcmF0b3I6OnNfaW5mbyA9IHsgIkFycmF5SXRlcmF0b3IiLCAmQmFzZTo6c19p
bmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlJdGVyYXRvcikgfTsKIAotc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHRLZXkoRXhlY1N0
YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9y
TmV4dFZhbHVlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NB
TEwgYXJyYXlJdGVyYXRvck5leHRHZW5lcmljKEV4ZWNTdGF0ZSopOwotCi12b2lkIEpTQXJyYXlJ
dGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBBcnJheUl0ZXJhdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KQor
dm9pZCBKU0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqLCBBcnJheUl0ZXJhdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KQog
ewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5m
bygpKSk7CiAgICAgbV9pdGVyYXRpb25LaW5kID0ga2luZDsKICAgICBtX2l0ZXJhdGVkT2JqZWN0
LnNldCh2bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIHN3aXRjaCAoa2luZCkgewotICAg
IGNhc2UgQXJyYXlJdGVyYXRlS2V5OgotICAgICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5D
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgYXJyYXlJdGVy
YXRvck5leHRLZXksIERvbnRFbnVtLCAwLCBBcnJheUl0ZXJhdG9yTmV4dEtleUludHJpbnNpYyk7
Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlJdGVyYXRlVmFsdWU6Ci0gICAgICAgIEpT
Q19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4
dFByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlLCBEb250RW51bSwgMCwgQXJyYXlJ
dGVyYXRvck5leHRWYWx1ZUludHJpbnNpYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMt
Pml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMsIERvbnRF
bnVtLCAwLCBBcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWNJbnRyaW5zaWMpOwotICAgICAgICBicmVh
azsKLSAgICB9Ci0KIH0KLSAgICAKLSAgICAKKwogdm9pZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBKU0Fy
cmF5SXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2VsbCk7
CkBAIC02OCw5OSArNTEsNCBAQCB2b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihK
U0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0KTsKIH0KIAotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBBcnJheUl0ZXJhdGlv
bktpbmQga2luZCwgc2l6ZV90IGluZGV4LCBKU1ZhbHVlIHJlc3VsdCwgYm9vbCBkb25lKQotewot
ICAgIGlmIChkb25lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+
dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKTsKLSAgICAKLSAgICBzd2l0Y2ggKGtpbmQg
JiB+QXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdGVLZXk6Ci0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAgICAg
Ci0gICAgY2FzZSBBcnJheUl0ZXJhdGVWYWx1ZToKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwotICAgICAgICAKLSAgICBjYXNlIEFycmF5SXRlcmF0ZUtleVZhbHVlOiB7
Ci0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgIGFyZ3MuYXBwZW5k
KGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmNhbGxlZSgpLT5nbG9i
YWxPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RBcnJh
eShjYWxsRnJhbWUsIDAsIGdsb2JhbE9iamVjdCwgYXJncykpOwotICAgICAgICAKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotfQotCi1zdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgSlNBcnJheUl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzRHlu
YW1pY0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAg
aWYgKCFpdGVyYXRvcikgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0
ZXJhbCgiQ2Fubm90IGNhbGwgQXJyYXlJdGVyYXRvci5uZXh0KCkgb24gYSBub24tQXJyYXlJdGVy
YXRvciBvYmplY3QiKSkpOwotICAgIH0KLSAgICBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QgPSBp
dGVyYXRvci0+aXRlcmF0ZWRPYmplY3QoKTsKLSAgICBzaXplX3QgaW5kZXggPSBpdGVyYXRvci0+
bmV4dEluZGV4KCk7Ci0gICAgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQgPSBpdGVyYXRvci0+aXRl
cmF0aW9uS2luZCgpOwotICAgIEpTVmFsdWUganNMZW5ndGggPSBKU1ZhbHVlKGl0ZXJhdGVkT2Jq
ZWN0KS5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwot
ICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKLSAgICAKLSAgICBzaXplX3QgbGVuZ3RoID0ganNMZW5ndGgu
dG9VSW50MzIoY2FsbEZyYW1lKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgCi0gICAgaWYg
KGluZGV4ID49IGxlbmd0aCkgewotICAgICAgICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgICAg
IHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxsRnJhbWUsIGtpbmQsIGluZGV4LCBqc1Vu
ZGVmaW5lZCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0
ZWRPYmplY3QtPnRyeUdldEluZGV4UXVpY2tseShpbmRleCkpIHsKLSAgICAgICAgaXRlcmF0b3It
PnNldE5leHRJbmRleChpbmRleCArIDEpOwotICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JS
ZXN1bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwgcmVzdWx0LCBmYWxzZSk7Ci0gICAgfQotICAg
IAotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChpdGVyYXRlZE9iamVjdCk7Ci0gICAgaWYgKGtpbmQgPiBBcnJheUl0ZXJhdGVTcGFyc2VU
YWcpIHsKLSAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIGluZGV4ZWQgcHJvcGVydHkgd2ls
bCBiZSBhbiBvd24gcHJvcGVydHkgc28gY2FjaGUgdGhlIGdldE93blByb3BlcnR5Ci0gICAgICAg
IC8vIG1ldGhvZCBsb2NhbGx5Ci0gICAgICAgIGF1dG8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCA9IGl0ZXJhdGVkT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4OwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGl0ZXJhdGVkT2JqZWN0LCBjYWxsRnJhbWUsIGluZGV4
LCBzbG90KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZy
YW1lLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaXRlcmF0ZWRPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlu
ZGV4LCBzbG90KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2Fs
bEZyYW1lLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpdGVyYXRlZE9i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaW5kZXgsIHNsb3QpKQotICAgICAgICBy
ZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwotICAgIAotICAgIGlmIChp
bmRleCA9PSBsZW5ndGgpCi0gICAgICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICBlbHNlCi0g
ICAgICAgIGl0ZXJhdG9yLT5zZXROZXh0SW5kZXgoaW5kZXggKyAxKTsKLSAgICByZXR1cm4gY3Jl
YXRlSXRlcmF0b3JSZXN1bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwganNVbmRlZmluZWQoKSwg
aW5kZXggPT0gbGVuZ3RoKTsKLX0KLSAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlJdGVyYXRvck5leHRLZXkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJu
IGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7Ci19Ci0gICAgCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0VmFsdWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
Ci17Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7Ci19Ci0gICAgCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0R2VuZXJpYyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHQoY2FsbEZy
YW1lKTsKLX0KLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGYxYTJlNTYyZjlhYmY0MDJhYjYzOGRjMDlj
NmVmYzM4MGQxYzViNGQuLmE4YTNmZmMwYzlkNjdkNDY0ODkxNjQyMzVjZGQxYTFjYjVmMTBlMDMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0
cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VD
b25zdHJ1Y3Rvci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAK
ICNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTUHJvbWlzZS5oIgpAQCAtMjMyLDEwNCArMjMzLDU3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmVqZWN0KEV4ZWNTdGF0
ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVkLT5wcm9taXNlKCkp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9y
RnVuY1JhY2UoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIHZvaWQgcGVyZm9ybVByb21pc2VSYWNl
TG9vcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IsIEpTUHJvbWlzZURlZmVycmVk
KiBkZWZlcnJlZCwgSlNWYWx1ZSBDKQogewotICAgIC8vIC0tIFByb21pc2UucmFjZShpdGVyYWJs
ZSkgLS0KLSAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKLQotICAgIC8vIDEuIExldCAnQycgYmUgdGhlIHRoaXMgdmFsdWUu
Ci0gICAgSlNWYWx1ZSBDID0gZXhlYy0+dGhpc1ZhbHVlKCk7Ci0KLSAgICAvLyAyLiBMZXQgJ2Rl
ZmVycmVkJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0RGVmZXJyZWQoQykuCi0gICAgSlNW
YWx1ZSBkZWZlcnJlZFZhbHVlID0gY3JlYXRlSlNQcm9taXNlRGVmZXJyZWRGcm9tQ29uc3RydWN0
b3IoZXhlYywgQyk7Ci0KLSAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChkZWZlcnJlZCkuCi0gICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzVW5kZWZpbmVkKCkpOwotCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0ganND
YXN0PEpTUHJvbWlzZURlZmVycmVkKj4oZGVmZXJyZWRWYWx1ZSk7Ci0KLSAgICAvLyA0LiBMZXQg
J2l0ZXJhdG9yJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0SXRlcmF0b3IoaXRlcmFibGUp
LgotICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5jdGlvbiA9IGl0ZXJhYmxlLmdldChleGVjLCB2bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9u
KGV4ZWMsIGRlZmVycmVkKSk7Ci0KLSAgICBDYWxsRGF0YSBpdGVyYXRvckZ1bmN0aW9uQ2FsbERh
dGE7Ci0gICAgQ2FsbFR5cGUgaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
aXRlcmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhKTsKLSAgICBpZiAoaXRl
cmF0b3JGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewotICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWpl
Y3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLSAgICB9Ci0KLSAgICBBcmdMaXN0IGl0ZXJhdG9yRnVu
Y3Rpb25Bcmd1bWVudHM7Ci0gICAgSlNWYWx1ZSBpdGVyYXRvciA9IGNhbGwoZXhlYywgaXRlcmF0
b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlLCBpdGVyYXRvckZ1bmN0aW9uQ2Fs
bERhdGEsIGl0ZXJhYmxlLCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzKTsKLQotICAgIC8vIDUu
IFJlamVjdElmQWJydXB0KGl0ZXJhdG9yLCBkZWZlcnJlZCkuCi0gICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlv
bihleGVjLCBkZWZlcnJlZCkpOwotCiAgICAgLy8gNi4gUmVwZWF0CiAgICAgZG8gewogICAgICAg
ICAvLyBpLiBMZXQgJ25leHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclN0ZXAo
aXRlcmF0b3IpLgotICAgICAgICBKU1ZhbHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChl
eGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lKTsK
LSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAg
SlNWYWx1ZSBuZXh0ID0gaXRlcmF0b3JTdGVwKGV4ZWMsIGl0ZXJhdG9yKTsKIAotICAgICAgICBD
YWxsRGF0YSBuZXh0RnVuY3Rpb25DYWxsRGF0YTsKLSAgICAgICAgQ2FsbFR5cGUgbmV4dEZ1bmN0
aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxE
YXRhKTsKLSAgICAgICAgaWYgKG5leHRGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkg
ewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbmV4dEZ1bmN0aW9uQXJndW1lbnRz
OwotICAgICAgICBuZXh0RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKGpzVW5kZWZpbmVkKCkpOwot
ICAgICAgICBKU1ZhbHVlIG5leHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0
aW9uQ2FsbFR5cGUsIG5leHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9u
QXJndW1lbnRzKTsKLSAgICAgICAgCiAgICAgICAgIC8vIGlpLiBSZWplY3RJZkFicnVwdChuZXh0
LCBkZWZlcnJlZCkuCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVk
KSk7Ci0gICAgCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8gaWlpLiBJZiAnbmV4
dCcgaXMgZmFsc2UsIHJldHVybiBkZWZlcnJlZC5bW1Byb21pc2VdXS4KLSAgICAgICAgLy8gTm90
ZTogV2UgaW1wbGVtZW50IHRoaXMgYXMgYW4gaXRlcmF0aW9uVGVybWluYXRvcgotICAgICAgICBp
ZiAobmV4dCA9PSB2bS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShkZWZlcnJlZC0+cHJvbWlzZSgpKTsKLSAgICAgICAgCisgICAg
ICAgIGlmIChuZXh0LmlzRmFsc2UoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAv
LyBpdi4gTGV0ICduZXh0VmFsdWUnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclZh
bHVlKG5leHQpLgogICAgICAgICAvLyB2LiBSZWplY3RJZkFicnVwdChuZXh0VmFsdWUsIGRlZmVy
cmVkKS4KLSAgICAgICAgLy8gTm90ZTogJ25leHQnIGlzIGFscmVhZHkgdGhlIHZhbHVlLCBzbyB0
aGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuCisgICAgICAgIEpTVmFsdWUgbmV4dFZhbHVlID0g
aXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIHZpLiBMZXQgJ25leHRQcm9t
aXNlJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSW52b2tlKEMsICJyZXNvbHZlIiwgKG5leHRW
YWx1ZSkpLgotICAgICAgICBKU1ZhbHVlIHJlc29sdmVGdW5jdGlvbiA9IEMuZ2V0KGV4ZWMsIHZt
LnByb3BlcnR5TmFtZXMtPnJlc29sdmUpOworICAgICAgICBKU1ZhbHVlIHJlc29sdmVGdW5jdGlv
biA9IEMuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+cmVzb2x2ZSk7CiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICBy
ZXR1cm47CiAKICAgICAgICAgQ2FsbERhdGEgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGE7CiAgICAg
ICAgIENhbGxUeXBlIHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVzb2x2
ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgICAgIGlmIChyZXNvbHZl
RnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgICAgIHRocm93VHlw
ZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRS
ZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
fQogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50
czsKLSAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChuZXh0KTsKKyAgICAg
ICAgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChuZXh0VmFsdWUpOwogICAgICAgICBK
U1ZhbHVlIG5leHRQcm9taXNlID0gY2FsbChleGVjLCByZXNvbHZlRnVuY3Rpb24sIHJlc29sdmVG
dW5jdGlvbkNhbGxUeXBlLCByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YSwgQywgcmVzb2x2ZUZ1bmN0
aW9uQXJndW1lbnRzKTsKIAogICAgICAgICAvLyB2aWkuIFJlamVjdElmQWJydXB0KG5leHRQcm9t
aXNlLCBkZWZlcnJlZCkuCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVy
cmVkKSk7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gdmlpaS4gTGV0ICdyZXN1
bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJbnZva2UobmV4dFByb21pc2UsICJ0aGVuIiwg
KGRlZmVycmVkLltbUmVzb2x2ZV1dLCBkZWZlcnJlZC5bW1JlamVjdF1dKSkuCi0gICAgICAgIEpT
VmFsdWUgdGhlbkZ1bmN0aW9uID0gbmV4dFByb21pc2UuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPnRoZW4pOworICAgICAgICBKU1ZhbHVlIHRoZW5GdW5jdGlvbiA9IG5leHRQcm9taXNlLmdl
dChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnRoZW4pOwogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFi
cnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwogCiAg
ICAgICAgIENhbGxEYXRhIHRoZW5GdW5jdGlvbkNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSB0
aGVuRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKHRoZW5GdW5jdGlvbiwgdGhlbkZ1bmN0
aW9uQ2FsbERhdGEpOwogICAgICAgICBpZiAodGhlbkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5
cGVOb25lKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7
CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciB0aGVuRnVuY3Rpb25Bcmd1bWVudHM7CkBAIC0zNDAsMTQgKzI5NCwxMyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY1JhY2UoRXhl
Y1N0YXRlKiBleGVjKQogCiAgICAgICAgIC8vIGl4LiBSZWplY3RJZkFicnVwdChyZXN1bHQsIGRl
ZmVycmVkKS4KICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsK
KyAgICAgICAgICAgIHJldHVybjsKICAgICB9IHdoaWxlICh0cnVlKTsKIH0KIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRl
KiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3Rv
ckZ1bmNSYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICAvLyAtLSBQcm9taXNlLmFsbChpdGVy
YWJsZSkgLS0KLQorICAgIC8vIC0tIFByb21pc2UucmFjZShpdGVyYWJsZSkgLS0KICAgICBKU1Zh
bHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKIApAQCAtMzYxLDkgKzMxNCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQ
cm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmlu
ZWQoKSk7CiAKLSAgICAvLyBOT1RFOiBBIG5vbi1hYnJ1cHQgY29tcGxldGlvbiBvZiBjcmVhdGVK
U1Byb21pc2VEZWZlcnJlZEZyb21Db25zdHJ1Y3RvciBpbXBsaWVzIHRoYXQKLSAgICAvLyBDIGFu
ZCBkZWZlcnJlZFZhbHVlIGFyZSBvYmplY3RzLgotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0g
YXNPYmplY3QoQyk7CiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0ganNDYXN0PEpT
UHJvbWlzZURlZmVycmVkKj4oZGVmZXJyZWRWYWx1ZSk7CiAKICAgICAvLyA0LiBMZXQgJ2l0ZXJh
dG9yJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0SXRlcmF0b3IoaXRlcmFibGUpLgpAQCAt
Mzg1LDQwICszMzUsMzcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VD
b25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24o
ZXhlYywgZGVmZXJyZWQpKTsKIAorICAgIHBlcmZvcm1Qcm9taXNlUmFjZUxvb3AoZXhlYywgaXRl
cmF0b3IsIGRlZmVycmVkLCBDKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAg
ICAgIGl0ZXJhdG9yQ2xvc2UoZXhlYywgaXRlcmF0b3IpOworICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24o
ZXhlYywgZGVmZXJyZWQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVkLT5w
cm9taXNlKCkpOworfQorCitzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJvbWlzZUFsbChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IsIEpTVmFsdWUgQywgSlNQcm9taXNlRGVmZXJyZWQq
IGRlZmVycmVkKQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gYXNPYmplY3QoQyk7Cisg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKwogICAgIC8vIDYuIExldCAndmFsdWVzJyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgQXJyYXlDcmVhdGUoMCkuCiAgICAgSlNBcnJheSogdmFsdWVzID0g
Y29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmpl
Y3QoKSk7Ci0gICAgCisKICAgICAvLyA3LiBMZXQgJ2NvdW50ZG93bkhvbGRlcicgYmUgUmVjb3Jk
IHsgW1tDb3VudGRvd25dXTogMCB9LgogICAgIE51bWJlck9iamVjdCogY291bnRkb3duSG9sZGVy
ID0gY29uc3RydWN0TnVtYmVyKGV4ZWMsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBKU1Zh
bHVlKDApKTsKLSAgICAKKwogICAgIC8vIDguIExldCAnaW5kZXgnIGJlIDAuCiAgICAgdW5zaWdu
ZWQgaW5kZXggPSAwOwotICAgIAorCiAgICAgLy8gOS4gUmVwZWF0LgogICAgIGRvIHsKICAgICAg
ICAgLy8gaS4gTGV0ICduZXh0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSXRlcmF0b3JTdGVw
KGl0ZXJhdG9yKS4KLSAgICAgICAgSlNWYWx1ZSBuZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQo
ZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSk7
CisgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0KLSAgICAgICAg
Q2FsbERhdGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIG5leHRGdW5j
dGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxs
RGF0YSk7Ci0gICAgICAgIGlmIChuZXh0RnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUp
IHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG5leHRGdW5jdGlvbkFyZ3VtZW50
czsKLSAgICAgICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChqc1VuZGVmaW5lZCgpKTsK
LSAgICAgICAgSlNWYWx1ZSBuZXh0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRGdW5j
dGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlv
bkFyZ3VtZW50cyk7Ci0gICAgICAgIAotICAgICAgICAvLyBpaS4gUmVqZWN0SWZBYnJ1cHQobmV4
dCwgZGVmZXJyZWQpLgotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJl
ZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgLy8gaWlp
LiBJZiAnbmV4dCcgaXMgZmFsc2UsCi0gICAgICAgIC8vIE5vdGU6IFdlIGltcGxlbWVudCB0aGlz
IGFzIGFuIGl0ZXJhdGlvblRlcm1pbmF0b3IKLSAgICAgICAgaWYgKG5leHQgPT0gdm0uaXRlcmF0
aW9uVGVybWluYXRvci5nZXQoKSkgeworICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkpIHsKICAg
ICAgICAgICAgIC8vIGEuIElmICdpbmRleCcgaXMgMCwKICAgICAgICAgICAgIGlmICghaW5kZXgp
IHsKICAgICAgICAgICAgICAgICAvLyBhLiBMZXQgJ3Jlc29sdmVSZXN1bHQnIGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kCkBAIC00MjgsNDAgKzM3
NSw0NCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9y
RnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgICAgICAgICAvLyBiLiBSZXR1cm5J
ZkFicnVwdChyZXNvbHZlUmVzdWx0KS4KICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNV
bmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGIuIFJldHVybiBk
ZWZlcnJlZC5bW1Byb21pc2VdXS4KLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
ZGVmZXJyZWQtPnByb21pc2UoKSk7CisgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21p
c2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBpdi4gTGV0ICduZXh0VmFs
dWUnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclZhbHVlKG5leHQpLgogICAgICAg
ICAvLyB2LiBSZWplY3RJZkFicnVwdChuZXh0VmFsdWUsIGRlZmVycmVkKS4KLSAgICAgICAgLy8g
Tm90ZTogJ25leHQnIGlzIGFscmVhZHkgdGhlIHZhbHVlLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRv
IGRvIGhlcmUuCisgICAgICAgIEpTVmFsdWUgbmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShleGVj
LCBuZXh0KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAg
cmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgdmFsdWVzLT5wdXNoKGV4ZWMsIGpzVW5k
ZWZpbmVkKCkpOwogCiAgICAgICAgIC8vIHZpLiBMZXQgJ25leHRQcm9taXNlJyBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgSW52b2tlKEMsICJyZXNvbHZlIiwgKG5leHRWYWx1ZSkpLgogICAgICAg
ICBKU1ZhbHVlIHJlc29sdmVGdW5jdGlvbiA9IEMuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMt
PnJlc29sdmUpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkp
OworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgQ2FsbERhdGEg
cmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIHJlc29sdmVGdW5jdGlv
bkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVzb2x2ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25D
YWxsRGF0YSk7CiAgICAgICAgIGlmIChyZXNvbHZlRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsK
KyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKICAgICAgICAg
TWFya2VkQXJndW1lbnRCdWZmZXIgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzOwotICAgICAgICBy
ZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKG5leHQpOworICAgICAgICByZXNvbHZlRnVu
Y3Rpb25Bcmd1bWVudHMuYXBwZW5kKG5leHRWYWx1ZSk7CiAgICAgICAgIEpTVmFsdWUgbmV4dFBy
b21pc2UgPSBjYWxsKGV4ZWMsIHJlc29sdmVGdW5jdGlvbiwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5
cGUsIHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhLCBDLCByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHMp
OwogCiAgICAgICAgIC8vIHZpaS4gUmVqZWN0SWZBYnJ1cHQobmV4dFByb21pc2UsIGRlZmVycmVk
KS4KICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIC8vIHZpaWkuIExldCAnY291
bnRkb3duRnVuY3Rpb24nIGJlIGEgbmV3IGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBhcyBkZWZp
bmVkIGluIFByb21pc2UuYWxsIENvdW50ZG93biBGdW5jdGlvbnMuCiAgICAgICAgIEpTRnVuY3Rp
b24qIGNvdW50ZG93bkZ1bmN0aW9uID0gY3JlYXRlUHJvbWlzZUFsbENvdW50ZG93bkZ1bmN0aW9u
KHZtLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8v
IGl4LiBTZXQgdGhlIFtbSW5kZXhdXSBpbnRlcm5hbCBzbG90IG9mICdjb3VudGRvd25GdW5jdGlv
bicgdG8gJ2luZGV4Jy4KICAgICAgICAgY291bnRkb3duRnVuY3Rpb24tPnB1dERpcmVjdCh2bSwg
dm0ucHJvcGVydHlOYW1lcy0+aW5kZXhQcml2YXRlTmFtZSwgSlNWYWx1ZShpbmRleCkpOwogCkBA
IC00NzQsMTYgKzQyNSwyMCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlz
ZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIC8vIHhpaS4gU2V0
IHRoZSBbW0NvdW50ZG93bkhvbGRlcl1dIGludGVybmFsIHNsb3Qgb2YgJ2NvdW50ZG93bkZ1bmN0
aW9uJyB0byAnY291bnRkb3duSG9sZGVyJy4KICAgICAgICAgY291bnRkb3duRnVuY3Rpb24tPnB1
dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+Y291bnRkb3duSG9sZGVyUHJpdmF0ZU5hbWUs
IGNvdW50ZG93bkhvbGRlcik7CiAKKyAgICAgICAgLy8geHZpLiBTZXQgY291bnRkb3duSG9sZGVy
LltbQ291bnRkb3duXV0gdG8gY291bnRkb3duSG9sZGVyLltbQ291bnRkb3duXV0gKyAxLgorICAg
ICAgICB1aW50MzJfdCBuZXdDb3VudGRvd25WYWx1ZSA9IGNvdW50ZG93bkhvbGRlci0+aW50ZXJu
YWxWYWx1ZSgpLmFzVUludDMyKCkgKyAxOworICAgICAgICBjb3VudGRvd25Ib2xkZXItPnNldElu
dGVybmFsVmFsdWUodm0sIEpTVmFsdWUobmV3Q291bnRkb3duVmFsdWUpKTsKKwogICAgICAgICAv
LyB4aWlpLiBMZXQgJ3Jlc3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEludm9rZShuZXh0
UHJvbWlzZSwgInRoZW4iLCAoY291bnRkb3duRnVuY3Rpb24sIGRlZmVycmVkLltbUmVqZWN0XV0p
KS4KICAgICAgICAgSlNWYWx1ZSB0aGVuRnVuY3Rpb24gPSBuZXh0UHJvbWlzZS5nZXQoZXhlYywg
dm0ucHJvcGVydHlOYW1lcy0+dGhlbik7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4
ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAg
ICAgICBDYWxsRGF0YSB0aGVuRnVuY3Rpb25DYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgdGhl
bkZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh0aGVuRnVuY3Rpb24sIHRoZW5GdW5jdGlv
bkNhbGxEYXRhKTsKICAgICAgICAgaWYgKHRoZW5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBl
Tm9uZSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciB0aGVuRnVuY3Rpb25Bcmd1bWVudHM7CkBAIC00OTQsMTUgKzQ0
OSw2MiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9y
RnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgLy8geGl2LiBSZWplY3RJZkFicnVw
dChyZXN1bHQsIGRlZmVycmVkKS4KICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywg
ZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAg
IC8vIHh2LiBTZXQgaW5kZXggdG8gaW5kZXggKyAxLgogICAgICAgICBpbmRleCsrOwotCi0gICAg
ICAgIC8vIHh2aS4gU2V0IGNvdW50ZG93bkhvbGRlci5bW0NvdW50ZG93bl1dIHRvIGNvdW50ZG93
bkhvbGRlci5bW0NvdW50ZG93bl1dICsgMS4KLSAgICAgICAgdWludDMyX3QgbmV3Q291bnRkb3du
VmFsdWUgPSBjb3VudGRvd25Ib2xkZXItPmludGVybmFsVmFsdWUoKS5hc1VJbnQzMigpICsgMTsK
LSAgICAgICAgY291bnRkb3duSG9sZGVyLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBKU1ZhbHVlKG5l
d0NvdW50ZG93blZhbHVlKSk7CiAgICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhl
YykKK3sKKyAgICAvLyAtLSBQcm9taXNlLmFsbChpdGVyYWJsZSkgLS0KKworICAgIEpTVmFsdWUg
aXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOwor
CisgICAgLy8gMS4gTGV0ICdDJyBiZSB0aGUgdGhpcyB2YWx1ZS4KKyAgICBKU1ZhbHVlIEMgPSBl
eGVjLT50aGlzVmFsdWUoKTsKKworICAgIC8vIDIuIExldCAnZGVmZXJyZWQnIGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyBHZXREZWZlcnJlZChDKS4KKyAgICBKU1ZhbHVlIGRlZmVycmVkVmFsdWUg
PSBjcmVhdGVKU1Byb21pc2VEZWZlcnJlZEZyb21Db25zdHJ1Y3RvcihleGVjLCBDKTsKKworICAg
IC8vIDMuIFJldHVybklmQWJydXB0KGRlZmVycmVkKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisK
KyAgICAvLyBOT1RFOiBBIG5vbi1hYnJ1cHQgY29tcGxldGlvbiBvZiBjcmVhdGVKU1Byb21pc2VE
ZWZlcnJlZEZyb21Db25zdHJ1Y3RvciBpbXBsaWVzIHRoYXQKKyAgICAvLyBDIGFuZCBkZWZlcnJl
ZFZhbHVlIGFyZSBvYmplY3RzLgorICAgIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IGpz
Q2FzdDxKU1Byb21pc2VEZWZlcnJlZCo+KGRlZmVycmVkVmFsdWUpOworCisgICAgLy8gNC4gTGV0
ICdpdGVyYXRvcicgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEdldEl0ZXJhdG9yKGl0ZXJhYmxl
KS4KKyAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5nZXQoZXhlYywgdm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlv
bihleGVjLCBkZWZlcnJlZCkpOworCisgICAgQ2FsbERhdGEgaXRlcmF0b3JGdW5jdGlvbkNhbGxE
YXRhOworICAgIENhbGxUeXBlIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRh
KGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSk7CisgICAgaWYgKGl0
ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVq
ZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgfQorCisgICAgQXJnTGlzdCBpdGVyYXRvckZ1
bmN0aW9uQXJndW1lbnRzOworICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJh
dG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSwgaXRlcmF0b3JGdW5jdGlvbkNh
bGxEYXRhLCBpdGVyYWJsZSwgaXRlcmF0b3JGdW5jdGlvbkFyZ3VtZW50cyk7CisKKyAgICAvLyA1
LiBSZWplY3RJZkFicnVwdChpdGVyYXRvciwgZGVmZXJyZWQpLgorICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rp
b24oZXhlYywgZGVmZXJyZWQpKTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybVByb21p
c2VBbGwoZXhlYywgaXRlcmF0b3IsIEMsIGRlZmVycmVkKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpIHsKKyAgICAgICAgaXRlcmF0b3JDbG9zZShleGVjLCBpdGVyYXRvcik7CisgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgfQorICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogSlNQcm9taXNlKiBjb25zdHJ1Y3RQ
cm9taXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNG
dW5jdGlvbiogcmVzb2x2ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKaW5kZXggYjIyMGI5ODc1ODg1YzQyZjljZTYz
OGYzMjIyNDc5MmMzMjc2MTAxNy4uODA2N2NiMjBmMGMzN2Q2NmE3NzhiZTlkMWVmNmFmZGIzYzZk
ZTgyOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0
b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0
ZXJhdG9yUHJvdG90eXBlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIk1hcEl0ZXJhdG9yUHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJJdGVyYXRv
ck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCkBAIC00Niw3ICs0
Nyw3IEBAIHZvaWQgTWFwSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJv
dG90eXBlKHRoaXMpOwogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT5pdGVyYXRvclByaXZhdGVOYW1lLCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvciwg
RG9udEVudW0sIDApOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERv
bnRFbnVtLCAwKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPm5l
eHQsIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVtLCAwKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRv
cihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU5LDEyICs2MCwxMiBAQCBFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAgICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpT
TWFwSXRlcmF0b3IqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9y
KQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFt
ZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY2FsbCBNYXBJdGVyYXRvci5uZXh0KCkgb24gYSBub24t
TWFwSXRlcmF0b3Igb2JqZWN0IikpKTsKLSAgICAKKwogICAgIEpTVmFsdWUgcmVzdWx0OwogICAg
IGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
cmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOwogICAgIGl0
ZXJhdG9yLT5maW5pc2goKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+
dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVl
KSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
SXRlcmF0b3JQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0
SXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IDU3M2FjZmE1Y2Q3NjRiMDllZTc1NDNiMzQ3YjQ5
YTUxMTFlNzA1MzcuLjUyNjFiZjNjYWNjMWQ0ZTBlNDU3NTUxYTAyMmRlNjdjOTE5NGRmZjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclBy
b3RvdHlwZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTZXRJdGVyYXRvclByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgpAQCAtNDYsNyArNDcsNyBAQCB2
b2lkIFNldEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0
aGlzKTsKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0
b3JQcml2YXRlTmFtZSwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IsIERvbnRFbnVt
LCAwKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9y
TmV4dFByaXZhdGVOYW1lLCBTZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwg
MCk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBTZXRJ
dGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCkBAIC02MiwxMCArNjMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1l
LCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIFNldEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1T
ZXRJdGVyYXRvciBvYmplY3QiKSkpOwogCiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFt
ZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZy
YW1lLCByZXN1bHQsIGZhbHNlKSk7CiAgICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0
KCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChj
YWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIAotCiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9WTS5jcHAKaW5kZXggMGY3MzU0MGY0MzU5NmE3MjQ2ZTI5NDI0MmJlMDUyYTFk
NDU2NmRmOC4uNWEyODRlYmEwYjRkZTdhNWIxYzgyZTA4YWNkZWIxNzI0M2U4YmYwOSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzk2LDEwICszOTYsOCBAQCBzdGF0aWMg
VGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMoSW50cmluc2ljIGludHJp
bnNpYykKICAgICAgICAgcmV0dXJuIGxvZ1RodW5rR2VuZXJhdG9yOwogICAgIGNhc2UgSU11bElu
dHJpbnNpYzoKICAgICAgICAgcmV0dXJuIGltdWxUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIEFy
cmF5SXRlcmF0b3JOZXh0S2V5SW50cmluc2ljOgotICAgICAgICByZXR1cm4gYXJyYXlJdGVyYXRv
ck5leHRLZXlUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIEFycmF5SXRlcmF0b3JOZXh0VmFsdWVJ
bnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlVGh1bmtHZW5l
cmF0b3I7CisgICAgY2FzZSBBcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0b3JOZXh0SW50cmlu
c2ljOgorICAgICAgICByZXR1cm4gYXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dFRo
dW5rR2VuZXJhdG9yOwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpp
bmRleCA3YTkwNWZjZjhhMDJmMmFlZTUyNDdhMWM3NTg5ZTQ1NzUxODlkOGU2Li45NjllMjVlNzMz
NzAxMTk2ODU4ZmUxZmY1MzgzNDBmMzAxOTc5MTVjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjAgQEAKKzIw
MTUtMDItMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAg
ICAgVXBncmFkZSBFUzYgSXRlcmF0b3IgaW50ZXJmYWNlcworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9jdXN0b20taXRlcmF0b3JzLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvY3VzdG9tLWl0ZXJhdG9ycy5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBqcy9pdGVyYXRvcnMtc2hhcGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9pdGVyYXRvcnMtc2hhcGUuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvc2NyaXB0
LXRlc3RzL2N1c3RvbS1pdGVyYXRvcnMuanM6IEFkZGVkLgorICAgICAgICAoY3VzdG9tSXRlcmF0
b3IubmV4dCk6CisgICAgICAgIChjdXN0b21JdGVyYXRvci5TeW1ib2wuaXRlcmF0b3IpOgorICAg
ICAgICAqIGpzL3NjcmlwdC10ZXN0cy9pdGVyYXRvcnMtc2hhcGUuanM6IEFkZGVkLgorICAgICAg
ICAoa2V5VmFsdWVJdGVyYXRvci5zZXQgZW50cmllcyk6CisKIDIwMTUtMDItMTEgIENvbW1pdCBR
dWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJv
bGxpbmcgb3V0IHIxNzk5MjEuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9jdXN0b20taXRl
cmF0b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2N1c3RvbS1pdGVyYXRvcnMtZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4YmVlYzE2YmZhODc5ZmYzOWQwMzA2YjFkYTU5OTRlMzNk
Y2RjOGYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9jdXN0b20taXRlcmF0b3Jz
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUxIEBACitUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhh
dmlvciBvZiBjdXN0b20gaXRlcmFibGUgb2JqZWN0cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgdmFsdWUgaXMgMAorUEFTUyB2YWx1ZSBpcyAxCitQQVNTIHZhbHVlIGlz
IDIKK1BBU1MgdmFsdWUgaXMgMworUEFTUyB2YWx1ZSBpcyA0CitQQVNTIHZhbHVlIGlzIDUKK1BB
U1MgdmFsdWUgaXMgNgorUEFTUyB2YWx1ZSBpcyA3CitQQVNTIHZhbHVlIGlzIDgKK1BBU1MgdmFs
dWUgaXMgOQorUEFTUyB2YWx1ZSBpcyAxMAorUEFTUyB2YWx1ZSBpcyAxMQorUEFTUyB2YWx1ZSBp
cyAxMgorUEFTUyB2YWx1ZSBpcyAxMworUEFTUyB2YWx1ZSBpcyAxNAorUEFTUyB2YWx1ZSBpcyAx
NQorUEFTUyB2YWx1ZSBpcyAxNgorUEFTUyB2YWx1ZSBpcyAxNworUEFTUyB2YWx1ZSBpcyAxOAor
UEFTUyB2YWx1ZSBpcyAxOQorUEFTUyB2YWx1ZSBpcyAyMAorUEFTUyB2YWx1ZSBpcyAyMQorUEFT
UyB2YWx1ZSBpcyAyMgorUEFTUyB2YWx1ZSBpcyAyMworUEFTUyB2YWx1ZSBpcyAyNAorUEFTUyB2
YWx1ZSBpcyAyNQorUEFTUyB2YWx1ZSBpcyAyNgorUEFTUyB2YWx1ZSBpcyAyNworUEFTUyB2YWx1
ZSBpcyAyOAorUEFTUyB2YWx1ZSBpcyAyOQorUEFTUyB2YWx1ZSBpcyAzMAorUEFTUyB2YWx1ZSBp
cyAzMQorUEFTUyB2YWx1ZSBpcyAzMgorUEFTUyB2YWx1ZSBpcyAzMworUEFTUyB2YWx1ZSBpcyAz
NAorUEFTUyB2YWx1ZSBpcyAzNQorUEFTUyB2YWx1ZSBpcyAzNgorUEFTUyB2YWx1ZSBpcyAzNwor
UEFTUyB2YWx1ZSBpcyAzOAorUEFTUyB2YWx1ZSBpcyAzOQorUEFTUyB2YWx1ZSBpcyA0MAorUEFT
UyB2YWx1ZSBpcyA0MQorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2N1c3RvbS1pdGVyYXRvcnMuaHRt
bCBiL0xheW91dFRlc3RzL2pzL2N1c3RvbS1pdGVyYXRvcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjdj
ZTM1NGIwZGNiZGMwMjNhNDZmNzkzYmIxMzM5MmNhMzRlOTg3Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvanMvY3VzdG9tLWl0ZXJhdG9ycy5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9jdXN0b20taXRlcmF0
b3JzLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0
LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L2pzL2l0ZXJhdG9ycy1zaGFwZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9pdGVyYXRv
cnMtc2hhcGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY3ODZiYzIyZjYzZWZhZDdhMDk5YzYz
MGU2ZDY3ZDM0YTQwZTQ0OTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9pdGVy
YXRvcnMtc2hhcGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgdGVzdCBjaGVj
a3MgdGhlIHNoYXBlIG9mIGJ1aWx0aW4gaXRlcmF0b3JzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworQXJyYXlJdGVyYXRvcgorUEFTUyB2YWx1ZUl0ZXJhdG9yLmhhc093blByb3Bl
cnR5KCduZXh0JykgaXMgZmFsc2UKK1BBU1MgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3du
UHJvcGVydHkoJ25leHQnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiB2YWx1ZUl0ZXJhdG9yLl9fcHJv
dG9fXy5uZXh0IGlzICJmdW5jdGlvbiIKK1BBU1Mga2V5SXRlcmF0b3IuaGFzT3duUHJvcGVydHko
J25leHQnKSBpcyBmYWxzZQorUEFTUyBrZXlJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVy
dHkoJ25leHQnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBrZXlJdGVyYXRvci5fX3Byb3RvX18ubmV4
dCBpcyAiZnVuY3Rpb24iCitQQVNTIGtleVZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25l
eHQnKSBpcyBmYWxzZQorUEFTUyBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9w
ZXJ0eSgnbmV4dCcpIGlzIHRydWUKK1BBU1MgdHlwZW9mIGtleVZhbHVlSXRlcmF0b3IuX19wcm90
b19fLm5leHQgaXMgImZ1bmN0aW9uIgorU2V0SXRlcmF0b3IKK1BBU1MgdmFsdWVJdGVyYXRvci5o
YXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIGZhbHNlCitQQVNTIHZhbHVlSXRlcmF0b3IuX19wcm90
b19fLmhhc093blByb3BlcnR5KCduZXh0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgdmFsdWVJdGVy
YXRvci5fX3Byb3RvX18ubmV4dCBpcyAiZnVuY3Rpb24iCitQQVNTIGtleUl0ZXJhdG9yLmhhc093
blByb3BlcnR5KCduZXh0JykgaXMgZmFsc2UKK1BBU1Mga2V5SXRlcmF0b3IuX19wcm90b19fLmhh
c093blByb3BlcnR5KCduZXh0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2Yga2V5SXRlcmF0b3IuX19w
cm90b19fLm5leHQgaXMgImZ1bmN0aW9uIgorUEFTUyBrZXlWYWx1ZUl0ZXJhdG9yLmhhc093blBy
b3BlcnR5KCduZXh0JykgaXMgZmFsc2UKK1BBU1Mga2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18u
aGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBrZXlWYWx1ZUl0ZXJh
dG9yLl9fcHJvdG9fXy5uZXh0IGlzICJmdW5jdGlvbiIKK01hcEl0ZXJhdG9yCitQQVNTIHZhbHVl
SXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyBmYWxzZQorUEFTUyB2YWx1ZUl0ZXJh
dG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIHRydWUKK1BBU1MgdHlwZW9m
IHZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQgaXMgImZ1bmN0aW9uIgorUEFTUyBrZXlJdGVy
YXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIGZhbHNlCitQQVNTIGtleUl0ZXJhdG9yLl9f
cHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIHRydWUKK1BBU1MgdHlwZW9mIGtleUl0
ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IGlzICJmdW5jdGlvbiIKK1BBU1Mga2V5VmFsdWVJdGVyYXRv
ci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIGZhbHNlCitQQVNTIGtleVZhbHVlSXRlcmF0b3Iu
X19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2Yga2V5
VmFsdWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCBpcyAiZnVuY3Rpb24iCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvanMvaXRlcmF0b3JzLXNoYXBlLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9pdGVyYXRvcnMt
c2hhcGUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40Mjk1NTBmZDg3MTM3ZTM2YjRhMmMxMDJiZDE0ZmE3NWM3
NzQ1NjYxCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvaXRlcmF0b3JzLXNoYXBl
Lmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
c2NyaXB0LXRlc3RzL2l0ZXJhdG9ycy1zaGFwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0i
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWl0ZXJhdG9y
cy5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jdXN0b20taXRlcmF0b3JzLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmNmYjIxOGYyNTRmNzczMGMwNGJkNzAxNDcxNmQ5MzlhYmRhZmYzYTYKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWl0ZXJhdG9y
cy5qcwpAQCAtMCwwICsxLDIzIEBACitkZXNjcmlwdGlvbigKKyJUaGlzIHRlc3QgY2hlY2tzIHRo
ZSBiZWhhdmlvciBvZiBjdXN0b20gaXRlcmFibGUgb2JqZWN0cy4iCispOworCit2YXIgY3VzdG9t
SXRlcmF0b3IgPSB7CisgICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgZG9uZTogdGhpcy5fX2tleSA9PT0gNDIsCisgICAg
ICAgICAgICB2YWx1ZTogdGhpcy5fX2tleSsrCisgICAgICAgIH07CisgICAgfSwKKyAgICBbU3lt
Ym9sLml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9
Cit9OworCit2YXIgZXhwZWN0ZWQgPSAwOworZm9yICh2YXIgdmFsdWUgb2YgY3VzdG9tSXRlcmF0
b3IpIHsKKyAgICBzaG91bGRCZSgidmFsdWUiLCBTdHJpbmcoZXhwZWN0ZWQrKykpOworfQorCitz
dWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL2l0ZXJhdG9ycy1zaGFwZS5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0
cy9pdGVyYXRvcnMtc2hhcGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRjNzhmZDgzMzAxNmMzZDk2YWI4MGNh
MTlmNDRhYmI4ZWRlNjljNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3Njcmlw
dC10ZXN0cy9pdGVyYXRvcnMtc2hhcGUuanMKQEAgLTAsMCArMSw2NSBAQAorZGVzY3JpcHRpb24o
CisiVGhpcyB0ZXN0IGNoZWNrcyB0aGUgc2hhcGUgb2YgYnVpbHRpbiBpdGVyYXRvcnMuIgorKTsK
KworZGVidWcoIkFycmF5SXRlcmF0b3IiKTsKK3ZhciBhcnJheSA9IFsnQ29jb2EnLCAnQ2FwcHVj
Y2lubycsICdUaGUgZGVzIEFsaXplcycsICdNYXRjaGEnLCAnS2lsaW1hbmphcm8nXTsKK3ZhciB2
YWx1ZUl0ZXJhdG9yID0gYXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpOworc2hvdWxkQmVGYWxzZSgi
dmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZVRydWUoInZh
bHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJl
RXF1YWxUb1N0cmluZygidHlwZW9mIHZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVu
Y3Rpb24iKTsKKwordmFyIGtleUl0ZXJhdG9yID0gYXJyYXkua2V5cygpOworc2hvdWxkQmVGYWxz
ZSgia2V5SXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVlKCJr
ZXlJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVF
cXVhbFRvU3RyaW5nKCJ0eXBlb2Yga2V5SXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rp
b24iKTsKKwordmFyIGtleVZhbHVlSXRlcmF0b3IgPSBhcnJheS5lbnRyaWVzKCk7CitzaG91bGRC
ZUZhbHNlKCJrZXlWYWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3Vs
ZEJlVHJ1ZSgia2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQn
KSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2Yga2V5VmFsdWVJdGVyYXRvci5fX3By
b3RvX18ubmV4dCIsICJmdW5jdGlvbiIpOworCitkZWJ1ZygiU2V0SXRlcmF0b3IiKTsKK3ZhciBz
ZXQgPSBuZXcgU2V0KFsnQ29jb2EnLCAnQ2FwcHVjY2lubycsICdUaGUgZGVzIEFsaXplcycsICdN
YXRjaGEnLCAnS2lsaW1hbmphcm8nXSk7Cit2YXIgdmFsdWVJdGVyYXRvciA9IHNldFtTeW1ib2wu
aXRlcmF0b3JdKCk7CitzaG91bGRCZUZhbHNlKCJ2YWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5
KCduZXh0JykiKTsKK3Nob3VsZEJlVHJ1ZSgidmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3du
UHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2YgdmFsdWVJ
dGVyYXRvci5fX3Byb3RvX18ubmV4dCIsICJmdW5jdGlvbiIpOworCit2YXIga2V5SXRlcmF0b3Ig
PSBzZXQua2V5cygpOworc2hvdWxkQmVGYWxzZSgia2V5SXRlcmF0b3IuaGFzT3duUHJvcGVydHko
J25leHQnKSIpOworc2hvdWxkQmVUcnVlKCJrZXlJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJv
cGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2Yga2V5SXRlcmF0
b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKwordmFyIGtleVZhbHVlSXRlcmF0b3Ig
PSBzZXQuZW50cmllcygpOworc2hvdWxkQmVGYWxzZSgia2V5VmFsdWVJdGVyYXRvci5oYXNPd25Q
cm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZVRydWUoImtleVZhbHVlSXRlcmF0b3IuX19wcm90
b19fLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygidHlw
ZW9mIGtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKworZGVi
dWcoIk1hcEl0ZXJhdG9yIik7Cit2YXIgbWFwID0gbmV3IE1hcCgpOworWworICAgIFsgJ0NvY29h
JywgMiwgXSwKKyAgICBbICdDYXBwdWNjaW5vJywgMCBdLAorICAgIFsgJ1RoZSBkZXMgQWxpemVz
JywgMyBdLAorICAgIFsgJ01hdGNoYScsIDIgXSwKKyAgICBbICdLaWxpbWFuamFybycsIDFdCitd
LmZvckVhY2goZnVuY3Rpb24gKFsga2V5LCB2YWx1ZSBdKSB7CisgICAgbWFwLnNldChrZXksIHZh
bHVlKTsKK30pOwordmFyIHZhbHVlSXRlcmF0b3IgPSBtYXBbU3ltYm9sLml0ZXJhdG9yXSgpOwor
c2hvdWxkQmVGYWxzZSgidmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7Citz
aG91bGRCZVRydWUoInZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0
JykiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygidHlwZW9mIHZhbHVlSXRlcmF0b3IuX19wcm90
b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKwordmFyIGtleUl0ZXJhdG9yID0gbWFwLmtleXMoKTsK
K3Nob3VsZEJlRmFsc2UoImtleUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3No
b3VsZEJlVHJ1ZSgia2V5SXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0Jyki
KTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygidHlwZW9mIGtleUl0ZXJhdG9yLl9fcHJvdG9fXy5u
ZXh0IiwgImZ1bmN0aW9uIik7CisKK3ZhciBrZXlWYWx1ZUl0ZXJhdG9yID0gbWFwLmVudHJpZXMo
KTsKK3Nob3VsZEJlRmFsc2UoImtleVZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQn
KSIpOworc2hvdWxkQmVUcnVlKCJrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9w
ZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoInR5cGVvZiBrZXlWYWx1ZUl0
ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IiwgImZ1bmN0aW9uIik7CisKK3N1Y2Nlc3NmdWxseVBhcnNl
ZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246500</attachid>
            <date>2015-02-12 20:20:32 -0800</date>
            <delta_ts>2015-02-16 23:12:34 -0800</delta_ts>
            <desc>prototype</desc>
            <filename>bug-141351-20150213132032.patch</filename>
            <type>text/plain</type>
            <size>79786</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMDI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZGY2ZWRhM2I2OWIxNzdkYmEwOGI3ZDY4NGI5OTA4MDFlOWQyMzgyLi40Mzc2NTJhMmYxODZkODM1
ZDQ5YzE5NDViZmI1ODg4YTMwNDk5NjMwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMTcgQEAKKzIwMTUtMDItMTIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgVXBncmFkZSBFUzYgSXRlcmF0b3IgaW50ZXJmYWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4
dDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAg
ICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRocm93VHlwZUVycm9yKToKKyAgICAgICAg
KEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbik6CisgICAgICAgIChKU0M6
OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNPYmplY3QpOgorICAgICAgICAoSlNDOjpCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdElzVW5kZWZpbmVkKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAg
ICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcik6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0S2V5VGh1bmtHZW5lcmF0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFZhbHVlVGh1bmtHZW5l
cmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVua0dlbmVyYXRvcnMuaDoKKyAgICAg
ICAgKiBydW50aW1lL0FyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6QXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAg
KEpTQzo6YXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVu
dGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QXJyYXlJdGVy
YXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVy
YXRvclJlc3VsdCk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yTmV4dCk6CisgICAgICAgIChKU0M6
OmFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRvck5leHQpOgorICAgICAgICAoSlNDOjphcnJh
eUl0ZXJhdG9yUHJvdG90eXBlTmV4dCk6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoK
KyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAg
ICAoSlNDOjppdGVyYXRvck5leHQpOgorICAgICAgICAoSlNDOjppdGVyYXRvclZhbHVlKToKKyAg
ICAgICAgKEpTQzo6aXRlcmF0b3JDb21wbGV0ZSk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yU3Rl
cCk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yQ2xvc2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVJ
dGVyUmVzdWx0T2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5o
OiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9y
UHJvdG90eXBlLmNwcC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpjcmVhdGVJdGVyYXRvclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5
SXRlcmF0b3JOZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRL
ZXkpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFZhbHVlKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRHZW5lcmljKTogRGVsZXRlZC4K
KyAgICAgICAgKiBydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpT
Qzo6cGVyZm9ybVByb21pc2VSYWNlTG9vcCk6CisgICAgICAgIChKU0M6OkpTUHJvbWlzZUNvbnN0
cnVjdG9yRnVuY1JhY2UpOgorICAgICAgICAoSlNDOjpwZXJmb3JtUHJvbWlzZUFsbCk6CisgICAg
ICAgIChKU0M6OkpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbCk6CisgICAgICAgICogcnVudGlt
ZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6Ok1hcEl0ZXJhdG9yUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6Ok1hcEl0ZXJhdG9yUHJvdG90
eXBlRnVuY05leHQpOgorICAgICAgICAqIHJ1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3Bw
OgorICAgICAgICAoSlNDOjpTZXRJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgor
ICAgICAgICAoSlNDOjpTZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAgICAgICAgKiBy
dW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6dGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMp
OgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
dmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzOgorICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRUaHJvd1R5cGVFcnJvcik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9y
OjplbWl0RW51bWVyYXRpb24pOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1p
dElzT2JqZWN0KToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc1VuZGVm
aW5lZCk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmg6CisgICAg
ICAgICogaml0L1RodW5rR2VuZXJhdG9ycy5jcHA6CisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0
b3JQcm90b3R5cGVJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OmFy
cmF5SXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjph
cnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6YXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBqaXQvVGh1bmtHZW5lcmF0b3JzLmg6CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHNJ
dGVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFyZ3VtZW50c0l0ZXJhdG9yUHJv
dG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OmFyZ3VtZW50c0l0ZXJhdG9y
UHJvdG90eXBlRnVuY05leHQpOgorICAgICAgICAqIHJ1bnRpbWUvQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5jcHA6CisgICAgICAgIChKU0M6OkFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSXRlcmF0b3JSZXN1bHQpOgorICAgICAgICAo
SlNDOjppdGVyYXRvck5leHQpOgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yUHJvdG90eXBl
SXRlcmF0b3JOZXh0KToKKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQp
OgorICAgICAgICAqIHJ1bnRpbWUvSW50cmluc2ljLmg6CisgICAgICAgICogcnVudGltZS9JdGVy
YXRvck9wZXJhdGlvbnMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6aXRlcmF0b3JOZXh0KToK
KyAgICAgICAgKEpTQzo6aXRlcmF0b3JWYWx1ZSk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yQ29t
cGxldGUpOgorICAgICAgICAoSlNDOjppdGVyYXRvclN0ZXApOgorICAgICAgICAoSlNDOjppdGVy
YXRvckNsb3NlKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSXRlclJlc3VsdE9iamVjdCk6CisgICAg
ICAgICogcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaDogQ29waWVkIGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAuCisgICAgICAg
ICogcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU0FycmF5SXRl
cmF0b3I6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6Y3JlYXRlSXRlcmF0b3JSZXN1
bHQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0S2V5KTogRGVsZXRlZC4KKyAgICAgICAg
KEpTQzo6YXJyYXlJdGVyYXRvck5leHRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFy
cmF5SXRlcmF0b3JOZXh0R2VuZXJpYyk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1By
b21pc2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm9taXNlUmFjZUxv
b3ApOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNlKToKKyAgICAg
ICAgKEpTQzo6cGVyZm9ybVByb21pc2VBbGwpOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VDb25z
dHJ1Y3RvckZ1bmNBbGwpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUu
Y3BwOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAgICAgICAg
KiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U2V0SXRl
cmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U2V0SXRlcmF0
b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAg
IChKU0M6OnRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKToKKwogMjAxNS0wMi0xMiAgQmVuamFt
aW4gUG91bGFpbiAgPGJlbmphbWluQHdlYmtpdC5vcmc+CiAKICAgICAgICAgU2ltcGxpZnkgdGhl
IGluaXRpYWxpemF0aW9uIG9mIEJ5dGVjb2RlR2VuZXJhdG9yIGEgYml0CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQKaW5kZXggY2Q3Nzk2MzFjZjMxZjk1ODdkZjI3Yzk5NTBhNzFhNWFk
NDFjN2RlMy4uNWMzZjJjYTFmYzgwMmM1OWU2NjU5Y2Q5NjliMzYyYmZiZTcxNGQ1MSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dApAQCAtNDM4LDcgKzQzOCw3IEBAIHNldChKYXZh
U2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3Bw
CiAgICAgcnVudGltZS9FcnJvclByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkZ1
enouY3BwCi0gICAgcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcCAKKyAgICBydW50aW1lL0V4
Y2VwdGlvbkhlbHBlcnMuY3BwCiAgICAgcnVudGltZS9FeGVjdXRhYmxlLmNwcAogICAgIHJ1bnRp
bWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuY3BwCkBAIC00NTAsNiArNDUwLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JVTlRJTUVf
U09VUkNFUwogICAgIHJ1bnRpbWUvSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAKICAgICBydW50aW1l
L0ludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9u
LmNwcAorICAgIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcAogICAgIHJ1bnRpbWUvSlNB
UElWYWx1ZVdyYXBwZXIuY3BwCiAgICAgcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAK
ICAgICBydW50aW1lL0pTQXJndW1lbnRzSXRlcmF0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagppbmRleCBjZmZhMTE5YmQ0M2JhYjdmZjYzYTM0OGM0YjkyYmMxYzdk
MmMyNGM4Li5mYjkwNjhmZDk5ZGRkZWJiMjUwOWQzNzIzNzc0NjU3YjliYTlkZTUyIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTcxNyw2ICs3MTcsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFs
RnVuY3Rpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJdGVy
YXRvck9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0FQSVZhbHVlV3JhcHBlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTTGV4aWNhbEVudmlyb25tZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1bWVudHNJdGVyYXRvci5jcHAiIC8+CkBAIC0xNDg3LDYgKzE0
ODgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVy
bmFsRnVuY3Rpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50
cmluc2ljLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEl0ZXJhdG9y
T3BlcmF0aW9ucy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FQ
SVZhbHVlV3JhcHBlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxK
U0xleGljYWxFbnZpcm9ubWVudC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiIC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZp
bHRlcnMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKaW5kZXggMjdjZDRlNGQxNjdmNzlkOTA2ZjMwNTE5
YWI5NzQ3NjA0ZDQxNjYyMy4uMTljYWRmMjQ0ODU3ZGM0NjQzODNmYTY1YjVmMzA3MDJmYjNhZTQ5
MyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVy
cwpAQCAtNjMwLDYgKzYzMCw5IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1l
XEludGVybmFsRnVuY3Rpb24uY3BwIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgog
ICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJdGVy
YXRvck9wZXJhdGlvbnMuY3BwIj4KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgorICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xleGlj
YWxFbnZpcm9ubWVudC5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAg
PC9DbENvbXBpbGU+CkBAIC0yNjU4LDYgKzI2NjEsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxJbnRyaW5zaWMuaCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRl
cj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVc
SXRlcmF0b3JPcGVyYXRpb25zLmgiPgorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+Cisg
ICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTGV4
aWNhbEVudmlyb25tZW50LmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJhZjI5MDQ1NGVi
YjRjZjE2MGVmMjQyNjEwNzRmNzhkZmE2YjRhMzUuLjE1NDUyOWE1ZjUwMjAyNjg1ZWJjOWIzM2Y1
YjA3ZDE4MTU1NGVlM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzMsNiAr
OTMzLDggQEAKIAkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVDMDI4NUIxNzE3
OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oICovOyB9OwogCQk2NUZCNTExNzE4NEVFRTcw
MDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGQjUxMTYxODRFRTlCQzAwQzEyQjcwIC8qIFByb3RvQ2Fs
bEZyYW1lLmNwcCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2Vy
RXZhbEVuYWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzAxMTNENEIx
QThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQg
LyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCAqLzsgfTsKKwkJNzAxMTNENEMxQThEQjA5MzAwMzg0
OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3Bl
cmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcwNUI0MUFCMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTMxQTZFNTAxRTAwNzE2NzU3
IC8qIFN5bWJvbC5jcHAgKi87IH07CiAJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1i
b2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNUI0
MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFBRDFBNkU1MDFFMDA3MTY3NTcgLyogU3lt
Ym9sQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzA1QjQxQTUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmNw
cCAqLzsgfTsKQEAgLTI2MDIsNiArMjYwNCw4IEBACiAJCTY1RkI1MTE1MTg0RUU4RjgwMEMxMkI3
MCAvKiBQcm90b0NhbGxGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
cm90b0NhbGxGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUZCNTExNjE4
NEVFOUJDMDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHJvdG9DYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z2dlckV2YWxFbmFibGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhD
NCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8qIEJv
b2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IH07CiAJCTcwNUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2wuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQzMDYsNiArNDMxMCw4IEBACiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAw
REY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUxOTlDMDUw
MDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJODZCRjY0MkExNDhEQjJCNTAw
NERFMzZBIC8qIEludHJpbnNpYy5oICovLAorCQkJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAv
KiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAorCQkJCTcwMTEzRDRBMUE4REIwOTMwMDM4NDhD
NCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKIAkJCQkxNERBODE4RjBEOTlGRDIwMDBCMEE0
RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovLAogCQkJCTE0REE4MThFMEQ5OUZEMjAw
MEIwQTRGQiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oICovLAogCQkJCUE3NjE0MENCMTgyOTgy
Q0IwMDc1MDYyNCAvKiBKU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcCAqLywKQEAgLTU4NDQsNiArNTg1
MCw3IEBACiAJCQkJQkMxMTY2N0IwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRlcnBy
ZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIElu
dHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTMwRTE2RjVD
RDAwQjM0NDYwIC8qIEphdmFTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y1MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUwM0ZBMUExODhFMEZCMDAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzA0NCw2ICs3MDUxLDcgQEAKIAkJCQlBNzg4NTNGOTE3OTcyNjI5MDAx
NDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExOTE4OEUwRkIwMDAxMTBGMTQg
LyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDkyRjBF
RDIyRDcwMDBCODk2MTkgLyogSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QTkwRUQwMEVF
N0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAppbmRleCBlODU0OTVkZDc1ZTFkMWQ0OGIzZWM1YTI0MzA1NmNiMWRiMGQ4ZjYxLi43
ZTRhNDYxZDQxNzQyYTA5NzU3NGU0OGFjOTFlZmNmODA3N2ViZjk2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cApAQCAtMjM5MCw2ICsyMzkwLDEzIEBAIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUaHJv
d1JlZmVyZW5jZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQodHJ1ZSk7CiB9CiAKK3ZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvd1R5
cGVFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCit7CisgICAgZW1pdE9wY29kZShvcF90aHJv
d19zdGF0aWNfZXJyb3IpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZh
bHVlKGFkZFN0cmluZ0NvbnN0YW50KElkZW50aWZpZXIobV92bSwgbWVzc2FnZSkpKS0+aW5kZXgo
KSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZhbHNlKTsKK30KKwogdm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSwgdW5zaWduZWQgYXR0
cmlidXRlcykKIHsKICAgICBlbWl0T3Bjb2RlKG9wX3B1c2hfbmFtZV9zY29wZSk7CkBAIC0yNTk1
LDI0ICsyNjAyLDEwMCBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24o
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEV4cHJlc3NpbwogICAgICAgICBlbWl0TW92
ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBzdWJqZWN0LmdldCgpKTsKICAgICAgICAgZW1pdENhbGwo
aXRlcmF0b3IuZ2V0KCksIGl0ZXJhdG9yLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3Ms
IG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CiAg
ICAgfQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyYXRvck5leHQgPSBlbWl0R2V0QnlJZChu
ZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5pdGVyYXRvck5l
eHRQcml2YXRlTmFtZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gbmV3VGVtcG9y
YXJ5KCk7CiAgICAgZW1pdExvYWQodmFsdWUuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwogICAgIAog
ICAgIGVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKICAgICAKICAgICBSZWZQdHI8
TGFiZWw+IGxvb3BTdGFydCA9IG5ld0xhYmVsKCk7CisgICAgUmVmUHRyPExhYmVsPiBpdGVyYXRv
ckRvbmUgPSBuZXdMYWJlbCgpOwogICAgIGVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwogICAg
IGVtaXRMb29wSGludCgpOworCisgICAgUmVmUHRyPExhYmVsPiB0cnlTdGFydExhYmVsID0gbmV3
TGFiZWwoKTsKKyAgICBlbWl0TGFiZWwodHJ5U3RhcnRMYWJlbC5nZXQoKSk7CisgICAgVHJ5RGF0
YSogdHJ5RGF0YSA9IHB1c2hUcnkodHJ5U3RhcnRMYWJlbC5nZXQoKSk7CiAgICAgY2FsbEJhY2so
KnRoaXMsIHZhbHVlLmdldCgpKTsKKyAgICBSZWZQdHI8TGFiZWw+IGNhdGNoSGVyZSA9IGVtaXRM
YWJlbChuZXdMYWJlbCgpLmdldCgpKTsKKwogICAgIGVtaXRMYWJlbChzY29wZS0+Y29udGludWVU
YXJnZXQoKSk7Ci0gICAgQ2FsbEFyZ3VtZW50cyBuZXh0QXJndW1lbnRzKCp0aGlzLCAwLCAxKTsK
LSAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQo
KSk7Ci0gICAgZW1pdE1vdmUobmV4dEFyZ3VtZW50cy5hcmd1bWVudFJlZ2lzdGVyKDApLCB2YWx1
ZS5nZXQoKSk7Ci0gICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIGl0ZXJhdG9yTmV4dC5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5k
aXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiBu
ZXh0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9wZXJ0
eU5hbWVzKCkubmV4dCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGl0ZXJhdG9yTmV4dCA9IGVt
aXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBuZXh0LmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkuaXRl
cmF0b3JOZXh0UHJpdmF0ZU5hbWUpOworICAgIFJlZlB0cjxMYWJlbD4gaXRlcmF0b3JSZXN1bHRJ
bnRlcmZhY2VTdGFydCA9IG5ld0xhYmVsKCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3Vs
dCA9IG5ld1RlbXBvcmFyeSgpOworICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZChy
ZXN1bHQuZ2V0KCksIGl0ZXJhdG9yTmV4dC5nZXQoKSksIGl0ZXJhdG9yUmVzdWx0SW50ZXJmYWNl
U3RhcnQuZ2V0KCkpOworCisgICAgLy8gV2hlbiB0aGUgbmV4dCBtZXRob2QgaGFzIGEgZnVuY3Rp
b24gYXMgYW4gaXRlcmF0b3JOZXh0IHByaXZhdGUgcHJvcGVydHksIHdlIHVzZSBpdCBpbnN0ZWFk
IG9mIHRoZSB1c3VhbCAibmV4dCIgbWV0aG9kLgorICAgIC8vIFRoaXMgbWV0aG9kIGRvZXNuJ3Qg
Y3JlYXRlIGFuIGl0ZXJhdG9yIHJlc3VsdCBvYmplY3QgYW5kIGVuYWJsZXMgY29tbW9uIGJ1aWx0
aW4gb2JqZWN0cyBsaWtlIEFycmF5IHRvIGl0ZXJhdGUgZmFzdGVyLgorICAgIHsKKyAgICAgICAg
Q2FsbEFyZ3VtZW50cyBuZXh0QXJndW1lbnRzKCp0aGlzLCAwLCAxKTsKKyAgICAgICAgZW1pdE1v
dmUobmV4dEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOworICAgICAg
ICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIHZhbHVlLmdldCgp
KTsKKyAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIGl0ZXJhdG9yTmV4dC5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZv
dFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgIH0KICAgICBlbWl0SnVtcElmRmFsc2Uo
ZW1pdEVxdWFsaXR5T3Aob3Bfc3RyaWN0ZXEsIHJlc3VsdC5nZXQoKSwgdmFsdWUuZ2V0KCksIGVt
aXRMb2FkKDAsIEpTVmFsdWUodm0oKS0+aXRlcmF0aW9uVGVybWluYXRvci5nZXQoKSkpKSwgbG9v
cFN0YXJ0LmdldCgpKTsKKyAgICBlbWl0SnVtcChpdGVyYXRvckRvbmUuZ2V0KCkpOworCisgICAg
ZW1pdExhYmVsKGl0ZXJhdG9yUmVzdWx0SW50ZXJmYWNlU3RhcnQuZ2V0KCkpOworICAgIHsKKyAg
ICAgICAgQ2FsbEFyZ3VtZW50cyBuZXh0QXJndW1lbnRzKCp0aGlzLCAwLCAxKTsKKyAgICAgICAg
ZW1pdE1vdmUobmV4dEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOwor
ICAgICAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIHZhbHVl
LmdldCgpKTsKKyAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIG5leHQuZ2V0KCksIE5vRXhw
ZWN0ZWRGdW5jdGlvbiwgbmV4dEFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RT
dGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBSZWZQdHI8
TGFiZWw+IHR5cGVJc09iamVjdCA9IG5ld0xhYmVsKCk7CisgICAgICAgIGVtaXRKdW1wSWZUcnVl
KGVtaXRJc09iamVjdChyZXN1bHQuZ2V0KCksIHZhbHVlLmdldCgpKSwgdHlwZUlzT2JqZWN0Lmdl
dCgpKTsKKyAgICAgICAgZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3Ig
cmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICAgICAgZW1pdExhYmVs
KHR5cGVJc09iamVjdC5nZXQoKSk7CisgICAgfQorICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRHZXRC
eUlkKG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLmRvbmUpLCBp
dGVyYXRvckRvbmUuZ2V0KCkpOworICAgIGVtaXRHZXRCeUlkKHZhbHVlLmdldCgpLCB2YWx1ZS5n
ZXQoKSwgcHJvcGVydHlOYW1lcygpLnZhbHVlKTsKKyAgICBlbWl0SnVtcChsb29wU3RhcnQuZ2V0
KCkpOworCisgICAgLy8gSXRlcmF0b3JDbG9zZSBzZXF1ZW5jZSBmb3IgdGhyb3ctZWQgY29udHJv
bCBmbG93LgorICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lz
dGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCBjYXRjaEhl
cmUuZ2V0KCkpOworICAgICAgICBSZWZQdHI8TGFiZWw+IHJldGhyb3cgPSBuZXdMYWJlbCgpOwor
CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2QgPSBlbWl0R2V0QnlJZChu
ZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5yZXR1cm5LZXl3
b3JkKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkKHJlc3VsdC5nZXQo
KSwgcmV0dXJuTWV0aG9kLmdldCgpKSwgcmV0aHJvdy5nZXQoKSk7CisKKyAgICAgICAgUmVmUHRy
PExhYmVsPiB0eXBlSXNPYmplY3RDaGVjayA9IG5ld0xhYmVsKCk7CisKKyAgICAgICAgQ2FsbEFy
Z3VtZW50cyByZXR1cm5Bcmd1bWVudHMoKnRoaXMsIDApOworICAgICAgICBlbWl0TW92ZShyZXR1
cm5Bcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKKworICAgICAgICBS
ZWZQdHI8TGFiZWw+IHJldHVybkNhbGxUcnlTdGFydCA9IG5ld0xhYmVsKCk7CisgICAgICAgIGVt
aXRMYWJlbChyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkpOworICAgICAgICBUcnlEYXRhKiByZXR1
cm5DYWxsVHJ5RGF0YSA9IHB1c2hUcnkocmV0dXJuQ2FsbFRyeVN0YXJ0LmdldCgpKTsKKyAgICAg
ICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIHJldHVybk1ldGhvZC5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQo
KSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbENh
dGNoSGVyZSA9IGVtaXRMYWJlbChuZXdMYWJlbCgpLmdldCgpKTsKKyAgICAgICAgZW1pdEp1bXAo
dHlwZUlzT2JqZWN0Q2hlY2suZ2V0KCkpOworCisgICAgICAgIGVtaXRMYWJlbCh0eXBlSXNPYmpl
Y3RDaGVjay5nZXQoKSk7CisgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09iamVjdChyZXN1
bHQuZ2V0KCksIHZhbHVlLmdldCgpKSwgcmV0aHJvdy5nZXQoKSk7CisgICAgICAgIGVtaXRUaHJv
d1R5cGVFcnJvcihBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90
IGFuIG9iamVjdC4iKSk7CisKKyAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxU
cnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgcmV0dXJuQ2FsbENhdGNoSGVyZS5nZXQoKSk7CisgICAg
ICAgIGVtaXRMYWJlbChyZXRocm93LmdldCgpKTsKKyAgICAgICAgZW1pdFRocm93KGV4Y2VwdGlv
blJlZ2lzdGVyLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNl
IGZvciBicmVhay1lZCBjb250cm9sIGZsb3cuCiAgICAgZW1pdExhYmVsKHNjb3BlLT5icmVha1Rh
cmdldCgpKTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2Qg
PSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFt
ZXMoKS5yZXR1cm5LZXl3b3JkKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZp
bmVkKHJlc3VsdC5nZXQoKSwgcmV0dXJuTWV0aG9kLmdldCgpKSwgaXRlcmF0b3JEb25lLmdldCgp
KTsKKworICAgICAgICBDYWxsQXJndW1lbnRzIHJldHVybkFyZ3VtZW50cygqdGhpcywgMCk7Cisg
ICAgICAgIGVtaXRNb3ZlKHJldHVybkFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3Iu
Z2V0KCkpOworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0aG9kLmdldCgp
LCBOb0V4cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9k
ZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgZW1pdEp1bXBJZlRy
dWUoZW1pdElzT2JqZWN0KHJlc3VsdC5nZXQoKSwgdmFsdWUuZ2V0KCkpLCBpdGVyYXRvckRvbmUu
Z2V0KCkpOworICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRv
ciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgIH0KKworICAgIGVt
aXRMYWJlbChpdGVyYXRvckRvbmUuZ2V0KCkpOwogfQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdl
bmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5ndGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBiYXNlKQpAQCAtMjY4OSw2ICsyNzcyLDIzIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGlu
CiAgICAgcmV0dXJuIGRzdDsKIH0KIAorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdElzT2JqZWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQoreworICAgIGVt
aXRPcGNvZGUob3BfaXNfb2JqZWN0KTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5p
bmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsKKyAgICBy
ZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdElzVW5k
ZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKQoreworICAgIGVtaXRPcGNv
ZGUob3BfaXNfdW5kZWZpbmVkKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRl
eCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoc3JjLT5pbmRleCgpKTsKKyAgICByZXR1
cm4gZHN0OworfQorCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2Nv
cGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3RlciwgUmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlcikK
IHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKaW5kZXggMzE4ODU5ODE2Y2Q5
OWNiYTBkYWZlZWUwNGQzMjAyYTI3MmQ4ZTQ2ZS4uMjE0ZGZiZDY4ZTUyZDE0NmIwYjVkZDg4NThl
NDFlNDNkN2Q2N2JjYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtNTI3LDYgKzUyNyw5IEBACiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXROZXh0RW51bWVyYXRvclByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJlZ2lzdGVySUQqIGluZGV4KTsKICAgICAgICAg
UmVnaXN0ZXJJRCogZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklE
KiBpbmRleCk7CiAKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzT2JqZWN0KFJlZ2lzdGVySUQq
IGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKKyAgICAgICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZp
bmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKKwogICAgICAgICB2b2lkIGVt
aXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkg
YmxvY2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4gZW1pdHRlZC4KQEAgLTU0MSw2ICs1NDQsNyBA
QAogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBlbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2b2lkIGVtaXRUaHJvd1R5cGVFcnJvcihjb25z
dCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgICAgIHZvaWQgZW1pdFB1c2hGdW5jdGlvbk5hbWVT
Y29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3Rl
cklEKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CiAgICAgICAgIHZvaWQgZW1pdFB1c2hD
YXRjaFNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJl
Z2lzdGVySUQqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAppbmRleCA3YjBjZGE2ODZjYzQ3MjdlY2Yy
OGFmN2E1N2E1ZTA3NTExMzVjM2E1Li5jYzJhMzMyYzFhMmJiMWIzZDk3YmRjOTZiNmY1NmQxZDg2
ODNmMWNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJh
dG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMu
Y3BwCkBAIC0xMDQ0LDMwICsxMDQ0LDMwIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1
bmtHZW5lcmF0b3IoVk0qIHZtKQogICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJz
LT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJpbXVsIik7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcihWTSogdm0sIEFycmF5
SXRlcmF0aW9uS2luZCBraW5kKQorTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JQ
cm90b3R5cGVJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcihWTSogdm0pCiB7CiAgICAgdHlwZWRl
ZiBTcGVjaWFsaXplZFRodW5rSklUOjpUcnVzdGVkSW1tMzIgVHJ1c3RlZEltbTMyOwogICAgIHR5
cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VHJ1c3RlZEltbVB0ciBUcnVzdGVkSW1tUHRyOwog
ICAgIHR5cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6QWRkcmVzcyBBZGRyZXNzOwogICAgIHR5
cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6QmFzZUluZGV4IEJhc2VJbmRleDsKICAgICB0eXBl
ZGVmIFNwZWNpYWxpemVkVGh1bmtKSVQ6Okp1bXAgSnVtcDsKLSAgICAKKwogICAgIFNwZWNpYWxp
emVkVGh1bmtKSVQgaml0KHZtKTsKICAgICAvLyBNYWtlIHN1cmUgd2UncmUgYmVpbmcgY2FsbGVk
IG9uIGFuIGFycmF5IGl0ZXJhdG9yLCBhbmQgbG9hZCBtX2l0ZXJhdGVkT2JqZWN0LCBhbmQgbV9u
ZXh0SW5kZXggaW50byByZWdUMCBhbmQgcmVnVDEgcmVzcGVjdGl2ZWx5CiAgICAgaml0LmxvYWRB
cmd1bWVudFdpdGhTcGVjaWZpY0NsYXNzKEpTQXJyYXlJdGVyYXRvcjo6aW5mbygpLCBTcGVjaWFs
aXplZFRodW5rSklUOjpUaGlzQXJndW1lbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7CiAKICAgICAvLyBFYXJseSBleGl0IGlmIHdlIGRv
bid0IGhhdmUgYSB0aHVuayBmb3IgdGhpcyBmb3JtIG9mIGl0ZXJhdGlvbgogICAgIGppdC5hcHBl
bmRGYWlsdXJlKGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpBYm92ZU9yRXF1YWws
IEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zm
c2V0T2ZJdGVyYXRpb25LaW5kKCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlJdGVyYXRlS2V5VmFsdWUp
KSk7Ci0gICAgCisKICAgICBqaXQubG9hZFB0cihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0ZWRPYmplY3QoKSksIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICAKKwogICAgIGppdC5sb2FkMzIoQWRkcmVzcyhT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJ
bmRleCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwotICAgIAorCiAgICAgLy8gUHVs
bCBvdXQgdGhlIGJ1dHRlcmZseSBmcm9tIGl0ZXJhdGVkT2JqZWN0CiAgICAgaml0LmxvYWQ4KEFk
ZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zm
c2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMyk7CiAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwogICAgIEp1bXAgbnVsbEJ1dHRlcmZs
eSA9IGppdC5icmFuY2hUZXN0UHRyKFNwZWNpYWxpemVkVGh1bmtKSVQ6Olplcm8sIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAgICAKKwogICAgIEp1bXAgbm90RG9uZSA9IGppdC5icmFu
Y2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpCZWxvdywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDEsIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0
T2ZQdWJsaWNMZW5ndGgoKSkpOwogCiAgICAgbnVsbEJ1dHRlcmZseS5saW5rKCZqaXQpOwpAQCAt
MTA3NSwyOCArMTA3NSwyNyBAQCBzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRl
cmF0b3JOZXh0VGh1bmtHZW5lcmF0b3IoVk0qIHZtLCBBcnJheUl0ZXJhdAogICAgIC8vIFJldHVy
biB0aGUgdGVybWluYXRpb24gc2lnbmFsIHRvIGluZGljYXRlIHRoYXQgd2UndmUgZmluaXNoZWQK
ICAgICBqaXQubW92ZShUcnVzdGVkSW1tUHRyKHZtLT5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgp
KSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5yZXR1cm5KU0NlbGwoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIAorCiAgICAgbm90RG9uZS5saW5rKCZqaXQp
OwotICAgIAotICAgIGlmIChraW5kID09IEFycmF5SXRlcmF0ZUtleSkgewotICAgICAgICBqaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0
LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpKTsKLSAgICAgICAgaml0LnJl
dHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKLSAgICAgICAgcmV0dXJuIGpp
dC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImFycmF5LWl0
ZXJhdG9yLW5leHQta2V5Iik7Ci0gICAgICAgIAotICAgIH0KLSAgICBBU1NFUlQoa2luZCA9PSBB
cnJheUl0ZXJhdGVWYWx1ZSk7Ci0gICAgCisKKyAgICBKdW1wIG5vdEtleSA9IGppdC5icmFuY2gz
MihTcGVjaWFsaXplZFRodW5rSklUOjpFcXVhbCwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZkl0ZXJhdGlvbktpbmQoKSksIFRydXN0
ZWRJbW0zMihBcnJheUl0ZXJhdGVWYWx1ZSkpOworCisgICAgaml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9y
OjpvZmZzZXRPZk5leHRJbmRleCgpKSk7CisgICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QxKTsKKworICAgIG5vdEtleS5saW5rKCZqaXQpOworCiAgICAgLy8gT2th
eSwgbm93IHdlJ3JlIHJldHVybmluZyBhIHZhbHVlIHNvIG1ha2Ugc3VyZSB3ZSdyZSBpbnNpZGUg
dGhlIHZlY3RvciBzaXplCiAgICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaDMyKFNwZWNp
YWxpemVkVGh1bmtKSVQ6OkFib3ZlT3JFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEs
IEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZW
ZWN0b3JMZW5ndGgoKSkpKTsKLSAgICAKKwogICAgIC8vIFNvIG5vdyB3ZSBwZXJmb3JtIGlubGlu
ZSBsb2FkcyBmb3IgaW50MzIsIHZhbHVlL3VuZGVjaWRlZCwgYW5kIGRvdWJsZSBzdG9yYWdlCiAg
ICAgSnVtcCB1bmRlY2lkZWRTdG9yYWdlID0gaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtK
SVQ6OkVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgVHJ1c3RlZEltbTMyKEFycmF5
V2l0aFVuZGVjaWRlZCkpOwogICAgIEp1bXAgbm90Q29udGlndW91c1N0b3JhZ2UgPSBqaXQuYnJh
bmNoMzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6Tm90RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QzLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQ29udGlndW91cykpOwotICAgIAorCiAgICAg
dW5kZWNpZGVkU3RvcmFnZS5saW5rKCZqaXQpOwotICAgIAorCiAgICAgaml0LmxvYWRQdHIoQWRk
cmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNl
dCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwotICAgIAorCiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICBqaXQubG9hZDY0KEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MiwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVz
RWlnaHQpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgSnVtcCBub3RIb2xlID0g
aml0LmJyYW5jaFRlc3Q2NChTcGVjaWFsaXplZFRodW5rSklUOjpOb25aZXJvLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMCk7CkBAIC0xMTE4LDMzICsxMTE3LDIzIEBAIHN0YXRpYyBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcihWTSogdm0sIEFy
cmF5SXRlcmF0CiAgICAgaml0LnJldHVybkpTVmFsdWUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVn
VDAsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKICNlbmRpZgogICAgIG5vdENvbnRpZ3Vv
dXNTdG9yYWdlLmxpbmsoJmppdCk7Ci0gICAgCisKICAgICBKdW1wIG5vdEludDMyU3RvcmFnZSA9
IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhJbnQzMikpOwogICAgIGppdC5s
b2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2JqZWN0OjpidXR0
ZXJmbHlPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKICAgICBqaXQubG9h
ZDMyKEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQsIEpTVmFsdWU6Om9m
ZnNldE9mUGF5bG9hZCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwogICAgIGppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQs
IEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwogICAgIGppdC5yZXR1cm5J
bnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7CiAgICAgbm90SW50MzJTdG9yYWdlLmxp
bmsoJmppdCk7Ci0gICAgCisKICAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoMzIoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6Tm90RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBU
cnVzdGVkSW1tMzIoQXJyYXlXaXRoRG91YmxlKSkpOwogICAgIGppdC5sb2FkUHRyKEFkZHJlc3Mo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSks
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKICAgICBqaXQubG9hZERvdWJsZShCYXNlSW5k
ZXgoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qx
LCBTcGVjaWFsaXplZFRodW5rSklUOjpUaW1lc0VpZ2h0KSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
ZnBSZWdUMCk7CiAgICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgp
KSk7CiAgICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsK
LSAgICAKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGwodm0pLCAiYXJyYXktaXRlcmF0b3ItbmV4dC12YWx1ZSIpOwotfQogCi1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRLZXlUaHVua0dlbmVyYXRvcihWTSogdm0pCi17
Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0b3Iodm0sIEFycmF5SXRl
cmF0ZUtleSk7CisgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZVRhaWxDYWxsKHZtKSwgImFycmF5LWl0ZXJhdG9yLW5leHQiKTsKIH0KIAotTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0VmFsdWVUaHVua0dlbmVyYXRvcihWTSogdm0pCi17
Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0b3Iodm0sIEFycmF5SXRl
cmF0ZVZhbHVlKTsKLX0KLSAgICAKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCAyNDZkYTJlYTY0NTRi
OWUzMDI3NmFkMjE3NzRiNTVjMjUzZDQxMGM2Li4wYzE4Njg5MDc3OTEwM2UzZjI2ZGVmMzAxYjIx
M2VlYWIzZmQ4NDRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0
b3JzLmgKQEAgLTEzMCw4ICsxMzAsNyBAQCBpbmxpbmUgVGh1bmtHZW5lcmF0b3IgdmlydHVhbFRo
dW5rR2VuZXJhdG9yRm9yKAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRUaHVua0dlbmVyYXRv
cihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJhdG9yKFZNKik7CiBN
YWNyb0Fzc2VtYmxlckNvZGVSZWYgaW11bFRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2Vt
YmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRLZXlUaHVua0dlbmVyYXRvcihWTSopOwotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0VmFsdWVUaHVua0dlbmVyYXRvcihW
TSopOworTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRv
ck5leHRUaHVua0dlbmVyYXRvcihWTSopOwogCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c0l0ZXJhdG9y
UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c0l0
ZXJhdG9yUHJvdG90eXBlLmNwcAppbmRleCBkNzljYzUyZTA5MmJjNmU5MGI0MWJiZTc5OThjMmFi
NzA3YWEzZDJjLi5hZDhiNzU5MGQ4NWU2NTZhOTEyYjRhYTk5MTc2MGZhZDM2MzA2MGJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHNJdGVyYXRvclBy
b3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRz
SXRlcmF0b3JQcm90b3R5cGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUg
Ikl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKQEAgLTQzLDcgKzQ0LDcgQEAgdm9pZCBBcmd1bWVu
dHNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2IKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOwogCiAg
ICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVO
YW1lLCBhcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvciwgRG9udEVudW0sIDAp
OwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0
UHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVt
LCAwKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPm5leHQsIGFy
Z3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVtLCAwKTsKIH0KIAogRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNJ
dGVyYXRvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU1LDggKzU2LDggQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KENh
bGxGcmFtZSogY2FsbEYKIHsKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAoanNDYXN0PEpT
QXJndW1lbnRzSXRlcmF0b3IqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKS0+bmV4dChjYWxsRnJh
bWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dm0oKS5pdGVyYXRpb25UZXJtaW5h
dG9yLmdldCgpKTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVz
dWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCks
IHRydWUpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcAppbmRleCBjODgwMGUzY2RjYTYyNTJlYWI5
OGZkMDIxMTg2MWUxZDBkYmVjMTEyLi4zMWMwMmE1ODM3YmY2ZWJjZjBhMTMzNjVkNWFhMDEyZjE4
N2I4M2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0
ZXJhdG9yUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9B
cnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcApAQCAtMjAsMTIgKzIwLDEzIEBACiAgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCiAgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcnJheUl0ZXJhdG9y
UHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJKU0FycmF5SXRlcmF0b3IuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKQEAgLTM4LDYgKzM5LDggQEAKIGNvbnN0IENsYXNzSW5m
byBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJBcnJheSBJdGVyYXRvciIsICZC
YXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoQXJyYXlJdGVyYXRvclByb3RvdHlw
ZSkgfTsKIAogc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRv
clByb3RvdHlwZUl0ZXJhdGUoRXhlY1N0YXRlKik7CitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSop
Oworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvclByb3Rv
dHlwZU5leHQoRXhlY1N0YXRlKik7CiAKIHZvaWQgQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogewpAQCAt
NDYsNiArNDksOSBAQCB2b2lkIEFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9u
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdAogICAgIHZtLnByb3RvdHlwZU1h
cC5hZGRQcm90b3R5cGUodGhpcyk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVy
YXRlLCBEb250RW51bSwgMCk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5h
bWVzLT5uZXh0LCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dCwgRG9udEVudW0sIDApOworICAg
IEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gZ2V0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5u
ZXh0KTsKKyAgICBqc0Nhc3Q8SlNPYmplY3QqPihuZXh0RnVuY3Rpb24pLT5KU0NfTkFUSVZFX0lO
VFJJTlNJQ19GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFt
ZSwgYXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dCwgRG9udEVudW0sIDAsIEFycmF5
SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRvck5leHRJbnRyaW5zaWMpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtNTMsNCArNTksOTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwogfQog
CitzdGF0aWMgSlNWYWx1ZSBjcmVhdGVJdGVyYXRvclJlc3VsdChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSwgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQsIHNpemVfdCBpbmRleCwgSlNWYWx1ZSByZXN1bHQs
IGJvb2wgZG9uZSkKK3sKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgcmV0dXJuIGNhbGxGcmFtZS0+
dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpOworCisgICAgc3dpdGNoIChraW5kICYgfkFy
cmF5SXRlcmF0ZVNwYXJzZVRhZykgeworICAgIGNhc2UgQXJyYXlJdGVyYXRlS2V5OgorICAgICAg
ICByZXR1cm4ganNOdW1iZXIoaW5kZXgpOworCisgICAgY2FzZSBBcnJheUl0ZXJhdGVWYWx1ZToK
KyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgIGNhc2UgQXJyYXlJdGVyYXRlS2V5VmFsdWU6
IHsKKyAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKKyAgICAgICAgYXJncy5hcHBl
bmQoanNOdW1iZXIoaW5kZXgpKTsKKyAgICAgICAgYXJncy5hcHBlbmQocmVzdWx0KTsKKyAgICAg
ICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFtZS0+Y2FsbGVlKCktPmds
b2JhbE9iamVjdCgpOworICAgICAgICByZXR1cm4gY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCAw
LCBnbG9iYWxPYmplY3QsIGFyZ3MpOworCisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorICAgIHJldHVybiBKU1ZhbHVlKCk7
Cit9CisKK3N0YXRpYyBKU1ZhbHVlIGl0ZXJhdG9yTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
K3sKKyAgICBKU0FycmF5SXRlcmF0b3IqIGl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU0FycmF5
SXRlcmF0b3IqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICBpZiAoIWl0ZXJhdG9yKSB7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4gdGhyb3dUeXBl
RXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIEFycmF5SXRlcmF0b3Iu
bmV4dCgpIG9uIGEgbm9uLUFycmF5SXRlcmF0b3Igb2JqZWN0IikpOworICAgIH0KKyAgICBKU09i
amVjdCogaXRlcmF0ZWRPYmplY3QgPSBpdGVyYXRvci0+aXRlcmF0ZWRPYmplY3QoKTsKKyAgICBz
aXplX3QgaW5kZXggPSBpdGVyYXRvci0+bmV4dEluZGV4KCk7CisgICAgQXJyYXlJdGVyYXRpb25L
aW5kIGtpbmQgPSBpdGVyYXRvci0+aXRlcmF0aW9uS2luZCgpOworICAgIEpTVmFsdWUganNMZW5n
dGggPSBKU1ZhbHVlKGl0ZXJhdGVkT2JqZWN0KS5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnBy
b3BlcnR5TmFtZXMoKS5sZW5ndGgpOworICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4ganNOdWxsKCk7CisKKyAgICBzaXplX3QgbGVuZ3RoID0ganNMZW5n
dGgudG9VSW50MzIoY2FsbEZyYW1lKTsKKyAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIGpzTnVsbCgpOworCisgICAgaWYgKGluZGV4ID49IGxlbmd0aCkg
eworICAgICAgICBpdGVyYXRvci0+ZmluaXNoKCk7CisgICAgICAgIHJldHVybiBjcmVhdGVJdGVy
YXRvclJlc3VsdChjYWxsRnJhbWUsIGtpbmQsIGluZGV4LCBqc1VuZGVmaW5lZCgpLCB0cnVlKTsK
KyAgICB9CisgICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0ZWRPYmplY3QtPnRyeUdldElu
ZGV4UXVpY2tseShpbmRleCkpIHsKKyAgICAgICAgaXRlcmF0b3ItPnNldE5leHRJbmRleChpbmRl
eCArIDEpOworICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHQoY2FsbEZyYW1lLCBr
aW5kLCBpbmRleCwgcmVzdWx0LCBmYWxzZSk7CisgICAgfQorCisgICAgSlNWYWx1ZSByZXN1bHQg
PSBqc1VuZGVmaW5lZCgpOworICAgIFByb3BlcnR5U2xvdCBzbG90KGl0ZXJhdGVkT2JqZWN0KTsK
KyAgICBpZiAoa2luZCA+IEFycmF5SXRlcmF0ZVNwYXJzZVRhZykgeworICAgICAgICAvLyBXZSBh
c3N1bWUgdGhhdCB0aGUgaW5kZXhlZCBwcm9wZXJ0eSB3aWxsIGJlIGFuIG93biBwcm9wZXJ0eSBz
byBjYWNoZSB0aGUgZ2V0T3duUHJvcGVydHkKKyAgICAgICAgLy8gbWV0aG9kIGxvY2FsbHkKKyAg
ICAgICAgYXV0byBnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4ID0gaXRlcmF0ZWRPYmplY3QtPm1l
dGhvZFRhYmxlKCktPmdldE93blByb3BlcnR5U2xvdEJ5SW5kZXg7CisgICAgICAgIHdoaWxlIChp
bmRleCA8IGxlbmd0aCkgeworICAgICAgICAgICAgaWYgKGdldE93blByb3BlcnR5U2xvdEJ5SW5k
ZXgoaXRlcmF0ZWRPYmplY3QsIGNhbGxGcmFtZSwgaW5kZXgsIHNsb3QpKSB7CisgICAgICAgICAg
ICAgICAgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChpdGVyYXRlZE9i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaW5kZXgsIHNsb3QpKSB7CisgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluZGV4Kys7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgaWYgKGl0ZXJhdGVkT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3Qo
Y2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpCisgICAgICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUo
Y2FsbEZyYW1lLCBpbmRleCk7CisKKyAgICBpZiAoaW5kZXggPT0gbGVuZ3RoKQorICAgICAgICBp
dGVyYXRvci0+ZmluaXNoKCk7CisgICAgZWxzZQorICAgICAgICBpdGVyYXRvci0+c2V0TmV4dElu
ZGV4KGluZGV4ICsgMSk7CisgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KGNhbGxGcmFt
ZSwga2luZCwgaW5kZXgsIGpzVW5kZWZpbmVkKCksIGluZGV4ID09IGxlbmd0aCk7Cit9CisKK0Vu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9y
TmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGl0ZXJhdG9yTmV4dChjYWxsRnJhbWUpKTsKK30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKK3sK
KyAgICBKU1ZhbHVlIHJlc3VsdCA9IGl0ZXJhdG9yTmV4dChjYWxsRnJhbWUpOworICAgIGlmIChy
ZXN1bHQgPT0gY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpCisgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJh
bWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNy
ZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7Cit9CisKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKaW5kZXggNTM4YjMyODRj
MjRjMTMzNjQwZmE0N2UzZTQyN2JkZDY1NzlhYzRhOS4uOWUxZGU1Y2E3ZmRkMDUwYjE3NTYyMmIw
OWE4YTQyZWU5NzU0YzdkZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW50cmluc2ljLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmlu
c2ljLmgKQEAgLTUyLDEwICs1Miw4IEBAIGVudW0gSW50cmluc2ljIHsKICAgICBTdHJpbmdQcm90
b3R5cGVWYWx1ZU9mSW50cmluc2ljLAogICAgIElNdWxJbnRyaW5zaWMsCiAgICAgRlJvdW5kSW50
cmluc2ljLAotICAgIEFycmF5SXRlcmF0b3JOZXh0VmFsdWVJbnRyaW5zaWMsCi0gICAgQXJyYXlJ
dGVyYXRvck5leHRLZXlJbnRyaW5zaWMsCi0gICAgQXJyYXlJdGVyYXRvck5leHRHZW5lcmljSW50
cmluc2ljLAotICAgIAorICAgIEFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRvck5leHRJbnRy
aW5zaWMsCisKICAgICAvLyBEZWJ1Z2dpbmcgaW50cmluc2ljcy4gVGhlc2UgYXJlIG1lYW50IHRv
IGJlIHVzZWQgYXMgdGVzdGluZyBoYWNrcyB3aXRoaW4KICAgICAvLyBqc2MuY3BwIGFuZCBzaG91
bGQgbmV2ZXIgYmUgZXhwb3NlZCB0byB1c2Vycy4KICAgICBERkdUcnVlSW50cmluc2ljLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25z
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMjdhM2IwZjYzNmVjMWUyZjI0YzhkZDcwZDdjZmRiYjJkMDA1OThlNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAKQEAgLTAsMCArMSwxNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgorCisjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiT2JqZWN0Q29uc3RydWN0b3IuaCIKKwordXNpbmcg
bmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIEpTQyB7CisKK0pTVmFsdWUgaXRlcmF0b3JOZXh0
KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvciwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAg
ICBKU1ZhbHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPm5leHQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBDYWxsRGF0YSBuZXh0RnVuY3Rpb25DYWxs
RGF0YTsKKyAgICBDYWxsVHlwZSBuZXh0RnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKG5l
eHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEpOworICAgIGlmIChuZXh0RnVuY3Rpb25D
YWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG5leHRGdW5jdGlvbkFyZ3VtZW50czsK
KyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKKyAgICAgICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRz
LmFwcGVuZCh2YWx1ZSk7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5j
dGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5leHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRv
ciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgaWYgKCFyZXN1bHQuaXNPYmpl
Y3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOworCisgICAgcmV0dXJu
IHJlc3VsdDsKK30KKworSlNWYWx1ZSBpdGVyYXRvck5leHQoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGl0ZXJhdG9yKQoreworICAgIHJldHVybiBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0b3Is
IEpTVmFsdWUoKSk7Cit9CisKK0pTVmFsdWUgaXRlcmF0b3JWYWx1ZShFeGVjU3RhdGUqIGV4ZWMs
IEpTVmFsdWUgaXRlclJlc3VsdCkKK3sKKyAgICByZXR1cm4gaXRlclJlc3VsdC5nZXQoZXhlYywg
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSk7Cit9CisKK2Jvb2wgaXRlcmF0b3JDb21w
bGV0ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlclJlc3VsdCkKK3sKKyAgICBKU1ZhbHVl
IGRvbmUgPSBpdGVyUmVzdWx0LmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmRv
bmUpOworICAgIHJldHVybiBkb25lLnRvQm9vbGVhbihleGVjKTsKK30KKworSlNWYWx1ZSBpdGVy
YXRvclN0ZXAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yKQoreworICAgIEpTVmFs
dWUgcmVzdWx0ID0gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJhdG9yKTsKKyAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGJvb2wg
ZG9uZSA9IGl0ZXJhdG9yQ29tcGxldGUoZXhlYywgcmVzdWx0KTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGlmIChkb25l
KQorICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKKyAgICByZXR1cm4gcmVzdWx0Owor
fQorCit2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9y
KQoreworICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkgeworICAgICAgICBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgZXhl
Yy0+Y2xlYXJFeGNlcHRpb24oKTsKKyAgICB9CisgICAgSlNWYWx1ZSByZXR1cm5GdW5jdGlvbiA9
IGl0ZXJhdG9yLmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdv
cmQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgaWYgKHJldHVybkZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgaWYgKCFleGNl
cHRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihl
eGVjLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEg
cmV0dXJuRnVuY3Rpb25DYWxsRGF0YTsKKyAgICBDYWxsVHlwZSByZXR1cm5GdW5jdGlvbkNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEocmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2FsbERhdGEp
OworICAgIGlmIChyZXR1cm5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgeworICAg
ICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHRocm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHM7CisgICAgSlNWYWx1ZSBp
bm5lclJlc3VsdCA9IGNhbGwoZXhlYywgcmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2Fs
bFR5cGUsIHJldHVybkZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCByZXR1cm5GdW5jdGlvbkFy
Z3VtZW50cyk7CisKKyAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgZXhl
Yy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47
CisKKyAgICBpZiAoIWlubmVyUmVzdWx0LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9CisKK0pTT2JqZWN0KiBjcmVh
dGVJdGVyUmVzdWx0T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBk
b25lKQoreworICAgIEpTT2JqZWN0KiByZXN1bHRPYmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjKTsKKyAgICByZXN1bHRPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuZG9uZSwganNCb29sZWFuKGRvbmUpKTsKKyAgICByZXN1bHRPYmplY3Qt
PnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUsIHZhbHVl
KTsKKyAgICByZXR1cm4gcmVzdWx0T2JqZWN0OworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9u
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNGJlZjM4ODM1YWFlZWVmYWVjMTJjODBhOTVlYjEzM2I3OGRhZGQyNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3Bl
cmF0aW9ucy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVz
dWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJdGVyYXRvck9wZXJhdGlvbnNfaAorI2Rl
ZmluZSBJdGVyYXRvck9wZXJhdGlvbnNfaAorCisjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2lu
Y2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitKU1ZhbHVlIGl0ZXJhdG9y
TmV4dChFeGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJhdG9yLCBKU1ZhbHVlKTsKK0pTVmFsdWUgaXRl
cmF0b3JOZXh0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0b3IpOworSlNWYWx1ZSBpdGVyYXRv
clZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlclJlc3VsdCk7Citib29sIGl0ZXJhdG9yQ29t
cGxldGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyUmVzdWx0KTsKK0pTVmFsdWUgaXRlcmF0b3JT
dGVwKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0b3IpOwordm9pZCBpdGVyYXRvckNsb3NlKEV4
ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0b3IpOworSlNPYmplY3QqIGNyZWF0ZUl0ZXJSZXN1bHRP
YmplY3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgYm9vbCBkb25lKTsKKworfQorCisjZW5kaWYgLy8g
IWRlZmluZWQoSXRlcmF0b3JPcGVyYXRpb25zX2gpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAppbmRleCAzM2JhYjcxYjY3OTAyODg5Njc5
NTI2M2E0ZmM1OWEzZWM4ZGMzZGJmLi44N2NiNWZiMzI0OWUzNmViMTU4MjYyZTRiMTZiMjAzMjc4
MGRiOWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJ
dGVyYXRvci5jcHAKQEAgLTM1LDMxICszNSwxNCBAQAogCiBjb25zdCBDbGFzc0luZm8gSlNBcnJh
eUl0ZXJhdG9yOjpzX2luZm8gPSB7ICJBcnJheUl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwg
Q1JFQVRFX01FVEhPRF9UQUJMRShKU0FycmF5SXRlcmF0b3IpIH07CiAKLXN0YXRpYyBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0S2V5KEV4ZWNTdGF0ZSopOwot
c3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHRWYWx1
ZShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5
SXRlcmF0b3JOZXh0R2VuZXJpYyhFeGVjU3RhdGUqKTsKLQotdm9pZCBKU0FycmF5SXRlcmF0b3I6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJy
YXlJdGVyYXRpb25LaW5kIGtpbmQsIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCkKK3ZvaWQgSlNB
cnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiwgQXJy
YXlJdGVyYXRpb25LaW5kIGtpbmQsIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCkKIHsKICAgICBC
YXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwog
ICAgIG1faXRlcmF0aW9uS2luZCA9IGtpbmQ7CiAgICAgbV9pdGVyYXRlZE9iamVjdC5zZXQodm0s
IHRoaXMsIGl0ZXJhdGVkT2JqZWN0KTsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEFy
cmF5SXRlcmF0ZUtleToKLSAgICAgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT04odm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0b3JOZXh0
S2V5LCBEb250RW51bSwgMCwgQXJyYXlJdGVyYXRvck5leHRLZXlJbnRyaW5zaWMpOwotICAgICAg
ICBicmVhazsKLSAgICBjYXNlIEFycmF5SXRlcmF0ZVZhbHVlOgotICAgICAgICBKU0NfTkFUSVZF
X0lOVFJJTlNJQ19GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRl
TmFtZSwgYXJyYXlJdGVyYXRvck5leHRWYWx1ZSwgRG9udEVudW0sIDAsIEFycmF5SXRlcmF0b3JO
ZXh0VmFsdWVJbnRyaW5zaWMpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRv
ck5leHRQcml2YXRlTmFtZSwgYXJyYXlJdGVyYXRvck5leHRHZW5lcmljLCBEb250RW51bSwgMCwg
QXJyYXlJdGVyYXRvck5leHRHZW5lcmljSW50cmluc2ljKTsKLSAgICAgICAgYnJlYWs7Ci0gICAg
fQotCiB9Ci0gICAgCi0gICAgCisKIHZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgSlNBcnJheUl0ZXJh
dG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRvcio+KGNlbGwpOwpAQCAtNjgs
OTkgKzUxLDQgQEAgdm9pZCBKU0FycmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBj
ZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVj
dC0+bV9pdGVyYXRlZE9iamVjdCk7CiB9CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjcmVhdGVJ
dGVyYXRvclJlc3VsdChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgQXJyYXlJdGVyYXRpb25LaW5kIGtp
bmQsIHNpemVfdCBpbmRleCwgSlNWYWx1ZSByZXN1bHQsIGJvb2wgZG9uZSkKLXsKLSAgICBpZiAo
ZG9uZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnZtKCkuaXRl
cmF0aW9uVGVybWluYXRvci5nZXQoKSk7Ci0gICAgCi0gICAgc3dpdGNoIChraW5kICYgfkFycmF5
SXRlcmF0ZVNwYXJzZVRhZykgewotICAgIGNhc2UgQXJyYXlJdGVyYXRlS2V5OgotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIAotICAgIGNh
c2UgQXJyYXlJdGVyYXRlVmFsdWU6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKLSAgICAgICAgCi0gICAgY2FzZSBBcnJheUl0ZXJhdGVLZXlWYWx1ZTogewotICAgICAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBhcmdzOwotICAgICAgICBhcmdzLmFwcGVuZChqc051bWJl
cihpbmRleCkpOwotICAgICAgICBhcmdzLmFwcGVuZChyZXN1bHQpOwotICAgICAgICBKU0dsb2Jh
bE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0
KCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXkoY2FsbEZy
YW1lLCAwLCBnbG9iYWxPYmplY3QsIGFyZ3MpKTsKLSAgICAgICAgCi0gICAgfQotICAgIGRlZmF1
bHQ6Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZSgpKTsKLX0KLQotc3RhdGljIGlubGluZSBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0KENhbGxGcmFtZSogY2Fs
bEZyYW1lKQotewotICAgIEpTQXJyYXlJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0
PEpTQXJyYXlJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghaXRl
cmF0b3IpIHsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIkNh
bm5vdCBjYWxsIEFycmF5SXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLUFycmF5SXRlcmF0b3Igb2Jq
ZWN0IikpKTsKLSAgICB9Ci0gICAgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0ID0gaXRlcmF0b3It
Pml0ZXJhdGVkT2JqZWN0KCk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXRlcmF0b3ItPm5leHRJbmRl
eCgpOwotICAgIEFycmF5SXRlcmF0aW9uS2luZCBraW5kID0gaXRlcmF0b3ItPml0ZXJhdGlvbktp
bmQoKTsKLSAgICBKU1ZhbHVlIGpzTGVuZ3RoID0gSlNWYWx1ZShpdGVyYXRlZE9iamVjdCkuZ2V0
KGNhbGxGcmFtZSwgY2FsbEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICBpZiAo
Y2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc051bGwoKSk7Ci0gICAgCi0gICAgc2l6ZV90IGxlbmd0aCA9IGpzTGVuZ3RoLnRvVUludDMy
KGNhbGxGcmFtZSk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwotICAgIAotICAgIGlmIChpbmRleCA+
PSBsZW5ndGgpIHsKLSAgICAgICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgICAgICByZXR1cm4g
Y3JlYXRlSXRlcmF0b3JSZXN1bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwganNVbmRlZmluZWQo
KSwgdHJ1ZSk7Ci0gICAgfQotICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGl0ZXJhdGVkT2JqZWN0
LT50cnlHZXRJbmRleFF1aWNrbHkoaW5kZXgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT5zZXROZXh0
SW5kZXgoaW5kZXggKyAxKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KGNh
bGxGcmFtZSwga2luZCwgaW5kZXgsIHJlc3VsdCwgZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICBK
U1ZhbHVlIHJlc3VsdCA9IGpzVW5kZWZpbmVkKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoaXRl
cmF0ZWRPYmplY3QpOwotICAgIGlmIChraW5kID4gQXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7Ci0g
ICAgICAgIC8vIFdlIGFzc3VtZSB0aGF0IHRoZSBpbmRleGVkIHByb3BlcnR5IHdpbGwgYmUgYW4g
b3duIHByb3BlcnR5IHNvIGNhY2hlIHRoZSBnZXRPd25Qcm9wZXJ0eQotICAgICAgICAvLyBtZXRo
b2QgbG9jYWxseQotICAgICAgICBhdXRvIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXggPSBpdGVy
YXRlZE9iamVjdC0+bWV0aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleDsKLSAg
ICAgICAgd2hpbGUgKGluZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoZ2V0T3duUHJv
cGVydHlTbG90QnlJbmRleChpdGVyYXRlZE9iamVjdCwgY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkp
IHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5k
ZXgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
aWYgKGl0ZXJhdGVkT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpbmRleCwgc2xv
dCkpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwg
aW5kZXgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaW5kZXgrKzsKLSAgICAgICAgfQotICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWRPYmplY3QtPmdl
dFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGluZGV4LCBzbG90KSkKLSAgICAgICAgcmVzdWx0ID0g
c2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKLSAgICAKLSAgICBpZiAoaW5kZXggPT0g
bGVuZ3RoKQotICAgICAgICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgZWxzZQotICAgICAgICBp
dGVyYXRvci0+c2V0TmV4dEluZGV4KGluZGV4ICsgMSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJh
dG9yUmVzdWx0KGNhbGxGcmFtZSwga2luZCwgaW5kZXgsIGpzVW5kZWZpbmVkKCksIGluZGV4ID09
IGxlbmd0aCk7Ci19Ci0gICAgCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRl
cmF0b3JOZXh0S2V5KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBhcnJheUl0
ZXJhdG9yTmV4dChjYWxsRnJhbWUpOwotfQotICAgIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAg
IHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dChjYWxsRnJhbWUpOwotfQotICAgIAotRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7Ci19
Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlz
ZUNvbnN0cnVjdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlz
ZUNvbnN0cnVjdG9yLmNwcAppbmRleCBmMWEyZTU2MmY5YWJmNDAyYWI2MzhkYzA5YzZlZmMzODBk
MWM1YjRkLi5hOGEzZmZjMGM5ZDY3ZDQ2NDg5MTY0MjM1Y2RkMWExY2I1ZjEwZTAzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0
b3IuY3BwCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKFBST01JU0VTKQogCiAjaW5jbHVk
ZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJK
U0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRl
ICJKU1Byb21pc2UuaCIKQEAgLTIzMiwxMDQgKzIzMyw1NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY1JlamVjdChFeGVjU3RhdGUqIGV4ZWMp
CiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZWZlcnJlZC0+cHJvbWlzZSgpKTsKIH0KIAot
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNl
KEV4ZWNTdGF0ZSogZXhlYykKK3N0YXRpYyB2b2lkIHBlcmZvcm1Qcm9taXNlUmFjZUxvb3AoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yLCBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJy
ZWQsIEpTVmFsdWUgQykKIHsKLSAgICAvLyAtLSBQcm9taXNlLnJhY2UoaXRlcmFibGUpIC0tCi0g
ICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7Ci0KLSAgICAvLyAxLiBMZXQgJ0MnIGJlIHRoZSB0aGlzIHZhbHVlLgotICAgIEpT
VmFsdWUgQyA9IGV4ZWMtPnRoaXNWYWx1ZSgpOwotCi0gICAgLy8gMi4gTGV0ICdkZWZlcnJlZCcg
YmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEdldERlZmVycmVkKEMpLgotICAgIEpTVmFsdWUgZGVm
ZXJyZWRWYWx1ZSA9IGNyZWF0ZUpTUHJvbWlzZURlZmVycmVkRnJvbUNvbnN0cnVjdG9yKGV4ZWMs
IEMpOwotCi0gICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoZGVmZXJyZWQpLgotICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKTsKLQotICAgIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IGpzQ2FzdDxKU1By
b21pc2VEZWZlcnJlZCo+KGRlZmVycmVkVmFsdWUpOwotCi0gICAgLy8gNC4gTGV0ICdpdGVyYXRv
cicgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEdldEl0ZXJhdG9yKGl0ZXJhYmxlKS4KLSAgICBK
U1ZhbHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5nZXQoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBk
ZWZlcnJlZCkpOwotCi0gICAgQ2FsbERhdGEgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhOwotICAg
IENhbGxUeXBlIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKGl0ZXJhdG9y
RnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSk7Ci0gICAgaWYgKGl0ZXJhdG9yRnVu
Y3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3Io
ZXhlYyk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4
ZWMsIGRlZmVycmVkKSk7Ci0gICAgfQotCi0gICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9uQXJn
dW1lbnRzOwotICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9yRnVuY3Rp
b24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhLCBp
dGVyYWJsZSwgaXRlcmF0b3JGdW5jdGlvbkFyZ3VtZW50cyk7Ci0KLSAgICAvLyA1LiBSZWplY3RJ
ZkFicnVwdChpdGVyYXRvciwgZGVmZXJyZWQpLgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywg
ZGVmZXJyZWQpKTsKLQogICAgIC8vIDYuIFJlcGVhdAogICAgIGRvIHsKICAgICAgICAgLy8gaS4g
TGV0ICduZXh0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSXRlcmF0b3JTdGVwKGl0ZXJhdG9y
KS4KLSAgICAgICAgSlNWYWx1ZSBuZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgZXhl
Yy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSk7Ci0gICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgIEpTVmFsdWUg
bmV4dCA9IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7CiAKLSAgICAgICAgQ2FsbERhdGEg
bmV4dEZ1bmN0aW9uQ2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIG5leHRGdW5jdGlvbkNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEobmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSk7Ci0g
ICAgICAgIGlmIChuZXh0RnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKLSAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG5leHRGdW5jdGlvbkFyZ3VtZW50czsKLSAgICAg
ICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAg
SlNWYWx1ZSBuZXh0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxU
eXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50
cyk7Ci0gICAgICAgIAogICAgICAgICAvLyBpaS4gUmVqZWN0SWZBYnJ1cHQobmV4dCwgZGVmZXJy
ZWQpLgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotICAg
IAorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIC8vIGlpaS4gSWYgJ25leHQnIGlzIGZh
bHNlLCByZXR1cm4gZGVmZXJyZWQuW1tQcm9taXNlXV0uCi0gICAgICAgIC8vIE5vdGU6IFdlIGlt
cGxlbWVudCB0aGlzIGFzIGFuIGl0ZXJhdGlvblRlcm1pbmF0b3IKLSAgICAgICAgaWYgKG5leHQg
PT0gdm0uaXRlcmF0aW9uVGVybWluYXRvci5nZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoZGVmZXJyZWQtPnByb21pc2UoKSk7Ci0gICAgICAgIAorICAgICAgICBpZiAo
bmV4dC5pc0ZhbHNlKCkpCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8gaXYuIExl
dCAnbmV4dFZhbHVlJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSXRlcmF0b3JWYWx1ZShuZXh0
KS4KICAgICAgICAgLy8gdi4gUmVqZWN0SWZBYnJ1cHQobmV4dFZhbHVlLCBkZWZlcnJlZCkuCi0g
ICAgICAgIC8vIE5vdGU6ICduZXh0JyBpcyBhbHJlYWR5IHRoZSB2YWx1ZSwgc28gdGhlcmUgaXMg
bm90aGluZyB0byBkbyBoZXJlLgorICAgICAgICBKU1ZhbHVlIG5leHRWYWx1ZSA9IGl0ZXJhdG9y
VmFsdWUoZXhlYywgbmV4dCk7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyB2aS4gTGV0ICduZXh0UHJvbWlzZScgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIEludm9rZShDLCAicmVzb2x2ZSIsIChuZXh0VmFsdWUpKS4K
LSAgICAgICAgSlNWYWx1ZSByZXNvbHZlRnVuY3Rpb24gPSBDLmdldChleGVjLCB2bS5wcm9wZXJ0
eU5hbWVzLT5yZXNvbHZlKTsKKyAgICAgICAgSlNWYWx1ZSByZXNvbHZlRnVuY3Rpb24gPSBDLmdl
dChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnJlc29sdmUpOwogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIENhbGxEYXRhIHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhOwogICAgICAgICBDYWxs
VHlwZSByZXNvbHZlRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKHJlc29sdmVGdW5jdGlv
biwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGEpOwogICAgICAgICBpZiAocmVzb2x2ZUZ1bmN0aW9u
Q2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihl
eGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9u
KGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAg
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAg
ICAgIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQobmV4dCk7CisgICAgICAgIHJlc29s
dmVGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQobmV4dFZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSBu
ZXh0UHJvbWlzZSA9IGNhbGwoZXhlYywgcmVzb2x2ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25D
YWxsVHlwZSwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGEsIEMsIHJlc29sdmVGdW5jdGlvbkFyZ3Vt
ZW50cyk7CiAKICAgICAgICAgLy8gdmlpLiBSZWplY3RJZkFicnVwdChuZXh0UHJvbWlzZSwgZGVm
ZXJyZWQpLgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwor
ICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIHZpaWkuIExldCAncmVzdWx0JyBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgSW52b2tlKG5leHRQcm9taXNlLCAidGhlbiIsIChkZWZlcnJl
ZC5bW1Jlc29sdmVdXSwgZGVmZXJyZWQuW1tSZWplY3RdXSkpLgotICAgICAgICBKU1ZhbHVlIHRo
ZW5GdW5jdGlvbiA9IG5leHRQcm9taXNlLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50aGVu
KTsKKyAgICAgICAgSlNWYWx1ZSB0aGVuRnVuY3Rpb24gPSBuZXh0UHJvbWlzZS5nZXQoZXhlYywg
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT50aGVuKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWpl
Y3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBD
YWxsRGF0YSB0aGVuRnVuY3Rpb25DYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgdGhlbkZ1bmN0
aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh0aGVuRnVuY3Rpb24sIHRoZW5GdW5jdGlvbkNhbGxE
YXRhKTsKICAgICAgICAgaWYgKHRoZW5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkg
ewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIg
dGhlbkZ1bmN0aW9uQXJndW1lbnRzOwpAQCAtMzQwLDE0ICsyOTQsMTMgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNlKEV4ZWNTdGF0ZSog
ZXhlYykKIAogICAgICAgICAvLyBpeC4gUmVqZWN0SWZBYnJ1cHQocmVzdWx0LCBkZWZlcnJlZCku
CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAg
ICAgICByZXR1cm47CiAgICAgfSB3aGlsZSAodHJ1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykK
K0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmFj
ZShFeGVjU3RhdGUqIGV4ZWMpCiB7Ci0gICAgLy8gLS0gUHJvbWlzZS5hbGwoaXRlcmFibGUpIC0t
Ci0KKyAgICAvLyAtLSBQcm9taXNlLnJhY2UoaXRlcmFibGUpIC0tCiAgICAgSlNWYWx1ZSBpdGVy
YWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKQEAg
LTM2MSw5ICszMTQsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNv
bnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwog
Ci0gICAgLy8gTk9URTogQSBub24tYWJydXB0IGNvbXBsZXRpb24gb2YgY3JlYXRlSlNQcm9taXNl
RGVmZXJyZWRGcm9tQ29uc3RydWN0b3IgaW1wbGllcyB0aGF0Ci0gICAgLy8gQyBhbmQgZGVmZXJy
ZWRWYWx1ZSBhcmUgb2JqZWN0cy4KLSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGFzT2JqZWN0
KEMpOwogICAgIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IGpzQ2FzdDxKU1Byb21pc2VE
ZWZlcnJlZCo+KGRlZmVycmVkVmFsdWUpOwogCiAgICAgLy8gNC4gTGV0ICdpdGVyYXRvcicgYmUg
dGhlIHJlc3VsdCBvZiBjYWxsaW5nIEdldEl0ZXJhdG9yKGl0ZXJhYmxlKS4KQEAgLTM4NSw0MCAr
MzM1LDM3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0
b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRl
ZmVycmVkKSk7CiAKKyAgICBwZXJmb3JtUHJvbWlzZVJhY2VMb29wKGV4ZWMsIGl0ZXJhdG9yLCBk
ZWZlcnJlZCwgQyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpdGVy
YXRvckNsb3NlKGV4ZWMsIGl0ZXJhdG9yKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRl
ZmVycmVkKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZWZlcnJlZC0+cHJvbWlzZSgp
KTsKK30KKworc3RhdGljIEpTVmFsdWUgcGVyZm9ybVByb21pc2VBbGwoRXhlY1N0YXRlKiBleGVj
LCBKU1ZhbHVlIGl0ZXJhdG9yLCBKU1ZhbHVlIEMsIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJl
ZCkKK3sKKyAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGFzT2JqZWN0KEMpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisKICAgICAvLyA2LiBMZXQgJ3ZhbHVlcycgYmUgdGhlIHJlc3VsdCBv
ZiBjYWxsaW5nIEFycmF5Q3JlYXRlKDApLgogICAgIEpTQXJyYXkqIHZhbHVlcyA9IGNvbnN0cnVj
dEVtcHR5QXJyYXkoZXhlYywgbnVsbHB0ciwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwot
ICAgIAorCiAgICAgLy8gNy4gTGV0ICdjb3VudGRvd25Ib2xkZXInIGJlIFJlY29yZCB7IFtbQ291
bnRkb3duXV06IDAgfS4KICAgICBOdW1iZXJPYmplY3QqIGNvdW50ZG93bkhvbGRlciA9IGNvbnN0
cnVjdE51bWJlcihleGVjLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZSgwKSk7
Ci0gICAgCisKICAgICAvLyA4LiBMZXQgJ2luZGV4JyBiZSAwLgogICAgIHVuc2lnbmVkIGluZGV4
ID0gMDsKLSAgICAKKwogICAgIC8vIDkuIFJlcGVhdC4KICAgICBkbyB7CiAgICAgICAgIC8vIGku
IExldCAnbmV4dCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEl0ZXJhdG9yU3RlcChpdGVyYXRv
cikuCi0gICAgICAgIEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4
ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUpOworICAgICAg
ICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0b3IpOwogICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotCi0gICAgICAgIENhbGxEYXRh
IG5leHRGdW5jdGlvbkNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBuZXh0RnVuY3Rpb25DYWxs
VHlwZSA9IGdldENhbGxEYXRhKG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEpOwot
ICAgICAgICBpZiAobmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAg
ICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBuZXh0RnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAg
ICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAg
IEpTVmFsdWUgbmV4dCA9IGNhbGwoZXhlYywgbmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxs
VHlwZSwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCBuZXh0RnVuY3Rpb25Bcmd1bWVu
dHMpOwotICAgICAgICAKLSAgICAgICAgLy8gaWkuIFJlamVjdElmQWJydXB0KG5leHQsIGRlZmVy
cmVkKS4KLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIC8vIGlpaS4gSWYgJ25l
eHQnIGlzIGZhbHNlLAotICAgICAgICAvLyBOb3RlOiBXZSBpbXBsZW1lbnQgdGhpcyBhcyBhbiBp
dGVyYXRpb25UZXJtaW5hdG9yCi0gICAgICAgIGlmIChuZXh0ID09IHZtLml0ZXJhdGlvblRlcm1p
bmF0b3IuZ2V0KCkpIHsKKyAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKSB7CiAgICAgICAgICAg
ICAvLyBhLiBJZiAnaW5kZXgnIGlzIDAsCiAgICAgICAgICAgICBpZiAoIWluZGV4KSB7CiAgICAg
ICAgICAgICAgICAgLy8gYS4gTGV0ICdyZXNvbHZlUmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgdGhlIFtbQ2FsbF1dIGludGVybmFsIG1ldGhvZApAQCAtNDI4LDQwICszNzUsNDQgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwo
RXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQo
cmVzb2x2ZVJlc3VsdCkuCiAgICAgICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBiLiBSZXR1cm4gZGVmZXJyZWQu
W1tQcm9taXNlXV0uCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVk
LT5wcm9taXNlKCkpOworICAgICAgICAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiAg
ICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgLy8gaXYuIExldCAnbmV4dFZhbHVlJyBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgSXRlcmF0b3JWYWx1ZShuZXh0KS4KICAgICAgICAgLy8gdi4g
UmVqZWN0SWZBYnJ1cHQobmV4dFZhbHVlLCBkZWZlcnJlZCkuCi0gICAgICAgIC8vIE5vdGU6ICdu
ZXh0JyBpcyBhbHJlYWR5IHRoZSB2YWx1ZSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJl
LgorICAgICAgICBKU1ZhbHVlIG5leHRWYWx1ZSA9IGl0ZXJhdG9yVmFsdWUoZXhlYywgbmV4dCk7
CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworCisgICAgICAgIHZhbHVlcy0+cHVzaChleGVjLCBqc1VuZGVmaW5lZCgp
KTsKIAogICAgICAgICAvLyB2aS4gTGV0ICduZXh0UHJvbWlzZScgYmUgdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIEludm9rZShDLCAicmVzb2x2ZSIsIChuZXh0VmFsdWUpKS4KICAgICAgICAgSlNWYWx1
ZSByZXNvbHZlRnVuY3Rpb24gPSBDLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5yZXNvbHZl
KTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIENhbGxEYXRhIHJlc29sdmVG
dW5jdGlvbkNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSByZXNvbHZlRnVuY3Rpb25DYWxsVHlw
ZSA9IGdldENhbGxEYXRhKHJlc29sdmVGdW5jdGlvbiwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGEp
OwogICAgICAgICBpZiAocmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7
CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50czsKLSAgICAgICAgcmVzb2x2ZUZ1
bmN0aW9uQXJndW1lbnRzLmFwcGVuZChuZXh0KTsKKyAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uQXJn
dW1lbnRzLmFwcGVuZChuZXh0VmFsdWUpOwogICAgICAgICBKU1ZhbHVlIG5leHRQcm9taXNlID0g
Y2FsbChleGVjLCByZXNvbHZlRnVuY3Rpb24sIHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlLCByZXNv
bHZlRnVuY3Rpb25DYWxsRGF0YSwgQywgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzKTsKIAogICAg
ICAgICAvLyB2aWkuIFJlamVjdElmQWJydXB0KG5leHRQcm9taXNlLCBkZWZlcnJlZCkuCiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICAvLyB2aWlpLiBMZXQgJ2NvdW50ZG93bkZ1
bmN0aW9uJyBiZSBhIG5ldyBidWlsdC1pbiBmdW5jdGlvbiBvYmplY3QgYXMgZGVmaW5lZCBpbiBQ
cm9taXNlLmFsbCBDb3VudGRvd24gRnVuY3Rpb25zLgogICAgICAgICBKU0Z1bmN0aW9uKiBjb3Vu
dGRvd25GdW5jdGlvbiA9IGNyZWF0ZVByb21pc2VBbGxDb3VudGRvd25GdW5jdGlvbih2bSwgdGhp
c09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwotICAgICAgICAKKwogICAgICAgICAvLyBpeC4gU2V0
IHRoZSBbW0luZGV4XV0gaW50ZXJuYWwgc2xvdCBvZiAnY291bnRkb3duRnVuY3Rpb24nIHRvICdp
bmRleCcuCiAgICAgICAgIGNvdW50ZG93bkZ1bmN0aW9uLT5wdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmluZGV4UHJpdmF0ZU5hbWUsIEpTVmFsdWUoaW5kZXgpKTsKIApAQCAtNDc0LDE2
ICs0MjUsMjAgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1
Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICAvLyB4aWkuIFNldCB0aGUgW1tD
b3VudGRvd25Ib2xkZXJdXSBpbnRlcm5hbCBzbG90IG9mICdjb3VudGRvd25GdW5jdGlvbicgdG8g
J2NvdW50ZG93bkhvbGRlcicuCiAgICAgICAgIGNvdW50ZG93bkZ1bmN0aW9uLT5wdXREaXJlY3Qo
dm0sIHZtLnByb3BlcnR5TmFtZXMtPmNvdW50ZG93bkhvbGRlclByaXZhdGVOYW1lLCBjb3VudGRv
d25Ib2xkZXIpOwogCisgICAgICAgIC8vIHh2aS4gU2V0IGNvdW50ZG93bkhvbGRlci5bW0NvdW50
ZG93bl1dIHRvIGNvdW50ZG93bkhvbGRlci5bW0NvdW50ZG93bl1dICsgMS4KKyAgICAgICAgdWlu
dDMyX3QgbmV3Q291bnRkb3duVmFsdWUgPSBjb3VudGRvd25Ib2xkZXItPmludGVybmFsVmFsdWUo
KS5hc1VJbnQzMigpICsgMTsKKyAgICAgICAgY291bnRkb3duSG9sZGVyLT5zZXRJbnRlcm5hbFZh
bHVlKHZtLCBKU1ZhbHVlKG5ld0NvdW50ZG93blZhbHVlKSk7CisKICAgICAgICAgLy8geGlpaS4g
TGV0ICdyZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJbnZva2UobmV4dFByb21pc2Us
ICJ0aGVuIiwgKGNvdW50ZG93bkZ1bmN0aW9uLCBkZWZlcnJlZC5bW1JlamVjdF1dKSkuCiAgICAg
ICAgIEpTVmFsdWUgdGhlbkZ1bmN0aW9uID0gbmV4dFByb21pc2UuZ2V0KGV4ZWMsIHZtLnByb3Bl
cnR5TmFtZXMtPnRoZW4pOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZl
cnJlZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgQ2Fs
bERhdGEgdGhlbkZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIHRoZW5GdW5jdGlv
bkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodGhlbkZ1bmN0aW9uLCB0aGVuRnVuY3Rpb25DYWxsRGF0
YSk7CiAgICAgICAgIGlmICh0aGVuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsK
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAg
ICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFya2VkQXJn
dW1lbnRCdWZmZXIgdGhlbkZ1bmN0aW9uQXJndW1lbnRzOwpAQCAtNDk0LDE1ICs0NDksNjIgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwo
RXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIC8vIHhpdi4gUmVqZWN0SWZBYnJ1cHQocmVzdWx0
LCBkZWZlcnJlZCkuCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVk
KSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICAvLyB4di4g
U2V0IGluZGV4IHRvIGluZGV4ICsgMS4KICAgICAgICAgaW5kZXgrKzsKLQotICAgICAgICAvLyB4
dmkuIFNldCBjb3VudGRvd25Ib2xkZXIuW1tDb3VudGRvd25dXSB0byBjb3VudGRvd25Ib2xkZXIu
W1tDb3VudGRvd25dXSArIDEuCi0gICAgICAgIHVpbnQzMl90IG5ld0NvdW50ZG93blZhbHVlID0g
Y291bnRkb3duSG9sZGVyLT5pbnRlcm5hbFZhbHVlKCkuYXNVSW50MzIoKSArIDE7Ci0gICAgICAg
IGNvdW50ZG93bkhvbGRlci0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgSlNWYWx1ZShuZXdDb3VudGRv
d25WYWx1ZSkpOwogICAgIH0gd2hpbGUgKHRydWUpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCit7Cisg
ICAgLy8gLS0gUHJvbWlzZS5hbGwoaXRlcmFibGUpIC0tCisKKyAgICBKU1ZhbHVlIGl0ZXJhYmxl
ID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgIC8v
IDEuIExldCAnQycgYmUgdGhlIHRoaXMgdmFsdWUuCisgICAgSlNWYWx1ZSBDID0gZXhlYy0+dGhp
c1ZhbHVlKCk7CisKKyAgICAvLyAyLiBMZXQgJ2RlZmVycmVkJyBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgR2V0RGVmZXJyZWQoQykuCisgICAgSlNWYWx1ZSBkZWZlcnJlZFZhbHVlID0gY3JlYXRl
SlNQcm9taXNlRGVmZXJyZWRGcm9tQ29uc3RydWN0b3IoZXhlYywgQyk7CisKKyAgICAvLyAzLiBS
ZXR1cm5JZkFicnVwdChkZWZlcnJlZCkuCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQor
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgLy8g
Tk9URTogQSBub24tYWJydXB0IGNvbXBsZXRpb24gb2YgY3JlYXRlSlNQcm9taXNlRGVmZXJyZWRG
cm9tQ29uc3RydWN0b3IgaW1wbGllcyB0aGF0CisgICAgLy8gQyBhbmQgZGVmZXJyZWRWYWx1ZSBh
cmUgb2JqZWN0cy4KKyAgICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBqc0Nhc3Q8SlNQ
cm9taXNlRGVmZXJyZWQqPihkZWZlcnJlZFZhbHVlKTsKKworICAgIC8vIDQuIExldCAnaXRlcmF0
b3InIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBHZXRJdGVyYXRvcihpdGVyYWJsZSkuCisgICAg
SlNWYWx1ZSBpdGVyYXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5
TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywg
ZGVmZXJyZWQpKTsKKworICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKKyAg
ICBDYWxsVHlwZSBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShpdGVyYXRv
ckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEpOworICAgIGlmIChpdGVyYXRvckZ1
bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgIHRocm93VHlwZUVycm9y
KGV4ZWMpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihl
eGVjLCBkZWZlcnJlZCkpOworICAgIH0KKworICAgIEFyZ0xpc3QgaXRlcmF0b3JGdW5jdGlvbkFy
Z3VtZW50czsKKyAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBpdGVyYXRvckZ1bmN0
aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSwg
aXRlcmFibGUsIGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOworCisgICAgLy8gNS4gUmVqZWN0
SWZBYnJ1cHQoaXRlcmF0b3IsIGRlZmVycmVkKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMs
IGRlZmVycmVkKSk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHBlcmZvcm1Qcm9taXNlQWxsKGV4
ZWMsIGl0ZXJhdG9yLCBDLCBkZWZlcnJlZCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KSB7CisgICAgICAgIGl0ZXJhdG9yQ2xvc2UoZXhlYywgaXRlcmF0b3IpOworICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgIH0KKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEpTUHJvbWlzZSogY29uc3RydWN0UHJvbWlzZShF
eGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24q
IHJlc29sdmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
SXRlcmF0b3JQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFw
SXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGIyMjBiOTg3NTg4NWM0MmY5Y2U2MzhmMzIyMjQ3
OTJjMzI3NjEwMTcuLjgwNjdjYjIwZjBjMzdkNjZhNzc4YmU5ZDFlZjZhZmRiM2M2ZGU4MjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90
eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclBy
b3RvdHlwZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJNYXBJdGVyYXRvclByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgpAQCAtNDYsNyArNDcsNyBAQCB2
b2lkIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0
aGlzKTsKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0
b3JQcml2YXRlTmFtZSwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IsIERvbnRFbnVt
LCAwKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9y
TmV4dFByaXZhdGVOYW1lLCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwg
MCk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBNYXBJ
dGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7CiB9CiAKIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCkBAIC01OSwxMiArNjAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1l
KQogICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU01hcEl0ZXJh
dG9yKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFpdGVyYXRvcikKICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJ
TGl0ZXJhbCgiQ2Fubm90IGNhbGwgTWFwSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1hcEl0ZXJh
dG9yIG9iamVjdCIpKSk7Ci0gICAgCisKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAoaXRl
cmF0b3ItPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRl
clJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKICAgICBpdGVyYXRvci0+
ZmluaXNoKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnZtKCkuaXRl
cmF0aW9uVGVybWluYXRvci5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVh
dGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOwogfQog
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9y
UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9y
UHJvdG90eXBlLmNwcAppbmRleCA1NzNhY2ZhNWNkNzY0YjA5ZWU3NTQzYjM0N2I0OWE1MTExZTcw
NTM3Li41MjYxYmYzY2FjYzFkNGUwZTQ1NzU1MWEwMjJkZTY3YzkxOTRkZmY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUu
Y3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2V0
SXRlcmF0b3JQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgdm9pZCBTZXRJ
dGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0KQogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CiAK
ICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0
ZU5hbWUsIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Ci0g
ICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2
YXRlTmFtZSwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOworICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgU2V0SXRlcmF0b3JQ
cm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQpAQCAtNjIsMTAgKzYzLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBT
ZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlM
aXRlcmFsKCJDYW5ub3QgY2FsbCBTZXRJdGVyYXRvci5uZXh0KCkgb24gYSBub24tU2V0SXRlcmF0
b3Igb2JqZWN0IikpKTsKIAogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3Vs
dCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVz
dWx0LCBmYWxzZSkpOwogICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKTsKKyAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1l
LCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uY3BwCmluZGV4IDBmNzM1NDBmNDM1OTZhNzI0NmUyOTQyNDJiZTA1MmExZDQ1NjZkZjgu
LjVhMjg0ZWJhMGI0ZGU3YTViMWM4MmUwOGFjZGViMTcyNDNlOGJmMDkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTM5NiwxMCArMzk2LDggQEAgc3RhdGljIFRodW5rR2Vu
ZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiAg
ICAgICAgIHJldHVybiBsb2dUaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIElNdWxJbnRyaW5zaWM6
CiAgICAgICAgIHJldHVybiBpbXVsVGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBBcnJheUl0ZXJh
dG9yTmV4dEtleUludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0S2V5
VGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdG9yTmV4dFZhbHVlSW50cmluc2lj
OgotICAgICAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yOwor
ICAgIGNhc2UgQXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdG9yTmV4dEludHJpbnNpYzoKKyAg
ICAgICAgcmV0dXJuIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRvck5leHRUaHVua0dlbmVy
YXRvcjsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gMDsKICAgICB9CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNmQ5
MDU1M2M1ZDI4ZGY0Mzc1ZmI5YjRjMWY3MTYzMGQyN2Q1YjdmOC4uZTljYmVmNDllNmNhNTNkMDRl
NjExYjMyMzkwNDU2OThmOWFkNDM3ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE1LTAyLTEy
ICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFVwZ3Jh
ZGUgRVM2IEl0ZXJhdG9yIGludGVyZmFjZXMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE0MTM1MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICoganMvY3VzdG9tLWl0ZXJhdG9ycy1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGpzL2N1c3RvbS1pdGVyYXRvcnMuaHRtbDogQWRkZWQuCisgICAgICAg
ICoganMvaXRlcmF0b3JzLXNoYXBlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMv
aXRlcmF0b3JzLXNoYXBlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9j
dXN0b20taXRlcmF0b3JzLmpzOiBBZGRlZC4KKyAgICAgICAgKGN1c3RvbUl0ZXJhdG9yLm5leHQp
OgorICAgICAgICAoY3VzdG9tSXRlcmF0b3IuU3ltYm9sLml0ZXJhdG9yKToKKyAgICAgICAgKiBq
cy9zY3JpcHQtdGVzdHMvaXRlcmF0b3JzLXNoYXBlLmpzOiBBZGRlZC4KKyAgICAgICAgKGtleVZh
bHVlSXRlcmF0b3Iuc2V0IGVudHJpZXMpOgorCiAyMDE1LTAyLTEyICBIdW5zZW9wIEplb25nICA8
aHM4NS5qZW9uZ0BzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXSBOZWVkIHRvIGhhdmUgbmV3
IGJhc2VsaW5lIGZvciBzb21lIHRlc3RzIG9mIGZhc3QvcnVieSBzaW5jZSByMTcyODc0CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9qcy9jdXN0b20taXRlcmF0b3JzLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2pzL2N1c3RvbS1pdGVyYXRvcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc4
YmVlYzE2YmZhODc5ZmYzOWQwMzA2YjFkYTU5OTRlMzNkY2RjOGYKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9qcy9jdXN0b20taXRlcmF0b3JzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDUxIEBACitUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiBjdXN0b20gaXRlcmFibGUg
b2JqZWN0cy4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgdmFsdWUgaXMg
MAorUEFTUyB2YWx1ZSBpcyAxCitQQVNTIHZhbHVlIGlzIDIKK1BBU1MgdmFsdWUgaXMgMworUEFT
UyB2YWx1ZSBpcyA0CitQQVNTIHZhbHVlIGlzIDUKK1BBU1MgdmFsdWUgaXMgNgorUEFTUyB2YWx1
ZSBpcyA3CitQQVNTIHZhbHVlIGlzIDgKK1BBU1MgdmFsdWUgaXMgOQorUEFTUyB2YWx1ZSBpcyAx
MAorUEFTUyB2YWx1ZSBpcyAxMQorUEFTUyB2YWx1ZSBpcyAxMgorUEFTUyB2YWx1ZSBpcyAxMwor
UEFTUyB2YWx1ZSBpcyAxNAorUEFTUyB2YWx1ZSBpcyAxNQorUEFTUyB2YWx1ZSBpcyAxNgorUEFT
UyB2YWx1ZSBpcyAxNworUEFTUyB2YWx1ZSBpcyAxOAorUEFTUyB2YWx1ZSBpcyAxOQorUEFTUyB2
YWx1ZSBpcyAyMAorUEFTUyB2YWx1ZSBpcyAyMQorUEFTUyB2YWx1ZSBpcyAyMgorUEFTUyB2YWx1
ZSBpcyAyMworUEFTUyB2YWx1ZSBpcyAyNAorUEFTUyB2YWx1ZSBpcyAyNQorUEFTUyB2YWx1ZSBp
cyAyNgorUEFTUyB2YWx1ZSBpcyAyNworUEFTUyB2YWx1ZSBpcyAyOAorUEFTUyB2YWx1ZSBpcyAy
OQorUEFTUyB2YWx1ZSBpcyAzMAorUEFTUyB2YWx1ZSBpcyAzMQorUEFTUyB2YWx1ZSBpcyAzMgor
UEFTUyB2YWx1ZSBpcyAzMworUEFTUyB2YWx1ZSBpcyAzNAorUEFTUyB2YWx1ZSBpcyAzNQorUEFT
UyB2YWx1ZSBpcyAzNgorUEFTUyB2YWx1ZSBpcyAzNworUEFTUyB2YWx1ZSBpcyAzOAorUEFTUyB2
YWx1ZSBpcyAzOQorUEFTUyB2YWx1ZSBpcyA0MAorUEFTUyB2YWx1ZSBpcyA0MQorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2pzL2N1c3RvbS1pdGVyYXRvcnMuaHRtbCBiL0xheW91dFRlc3RzL2pzL2N1c3Rv
bS1pdGVyYXRvcnMuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZjdjZTM1NGIwZGNiZGMwMjNhNDZmNzkzYmIx
MzM5MmNhMzRlOTg3Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvY3VzdG9tLWl0
ZXJhdG9ycy5odG1sCkBAIC0wLDAgKzEsMTAgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVz
b3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9jdXN0b20taXRlcmF0b3JzLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2l0ZXJhdG9ycy1zaGFwZS1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9qcy9pdGVyYXRvcnMtc2hhcGUtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY3ODZiYzIyZjYzZWZhZDdhMDk5YzYzMGU2ZDY3ZDM0YTQwZTQ0OTkKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9pdGVyYXRvcnMtc2hhcGUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsMzkgQEAKK1RoaXMgdGVzdCBjaGVja3MgdGhlIHNoYXBlIG9mIGJ1aWx0aW4g
aXRlcmF0b3JzLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1Mi
IG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQXJyYXlJdGVyYXRv
cgorUEFTUyB2YWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0JykgaXMgZmFsc2UKK1BB
U1MgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyB0cnVl
CitQQVNTIHR5cGVvZiB2YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IGlzICJmdW5jdGlvbiIK
K1BBU1Mga2V5SXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyBmYWxzZQorUEFTUyBr
ZXlJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyB0cnVlCitQQVNT
IHR5cGVvZiBrZXlJdGVyYXRvci5fX3Byb3RvX18ubmV4dCBpcyAiZnVuY3Rpb24iCitQQVNTIGtl
eVZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyBmYWxzZQorUEFTUyBrZXlW
YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIHRydWUKK1BB
U1MgdHlwZW9mIGtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQgaXMgImZ1bmN0aW9uIgor
U2V0SXRlcmF0b3IKK1BBU1MgdmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlz
IGZhbHNlCitQQVNTIHZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0
JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCBpcyAi
ZnVuY3Rpb24iCitQQVNTIGtleUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0JykgaXMgZmFs
c2UKK1BBU1Mga2V5SXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykgaXMg
dHJ1ZQorUEFTUyB0eXBlb2Yga2V5SXRlcmF0b3IuX19wcm90b19fLm5leHQgaXMgImZ1bmN0aW9u
IgorUEFTUyBrZXlWYWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0JykgaXMgZmFsc2UK
K1BBU1Mga2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSBp
cyB0cnVlCitQQVNTIHR5cGVvZiBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IGlzICJm
dW5jdGlvbiIKK01hcEl0ZXJhdG9yCitQQVNTIHZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHko
J25leHQnKSBpcyBmYWxzZQorUEFTUyB2YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9w
ZXJ0eSgnbmV4dCcpIGlzIHRydWUKK1BBU1MgdHlwZW9mIHZhbHVlSXRlcmF0b3IuX19wcm90b19f
Lm5leHQgaXMgImZ1bmN0aW9uIgorUEFTUyBrZXlJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4
dCcpIGlzIGZhbHNlCitQQVNTIGtleUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgn
bmV4dCcpIGlzIHRydWUKK1BBU1MgdHlwZW9mIGtleUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IGlz
ICJmdW5jdGlvbiIKK1BBU1Mga2V5VmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcp
IGlzIGZhbHNlCitQQVNTIGtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5
KCduZXh0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2Yga2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18u
bmV4dCBpcyAiZnVuY3Rpb24iCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RF
U1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvaXRlcmF0b3JzLXNoYXBl
Lmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9pdGVyYXRvcnMtc2hhcGUuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
Mjk1NTBmZDg3MTM3ZTM2YjRhMmMxMDJiZDE0ZmE3NWM3NzQ1NjYxCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvaXRlcmF0b3JzLXNoYXBlLmh0bWwKQEAgLTAsMCArMSwxMCBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2l0ZXJhdG9ycy1z
aGFwZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWl0ZXJhdG9ycy5qcyBiL0xheW91dFRlc3RzL2pzL3Nj
cmlwdC10ZXN0cy9jdXN0b20taXRlcmF0b3JzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNmYjIxOGYyNTRmNzcz
MGMwNGJkNzAxNDcxNmQ5MzlhYmRhZmYzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9zY3JpcHQtdGVzdHMvY3VzdG9tLWl0ZXJhdG9ycy5qcwpAQCAtMCwwICsxLDIzIEBACitk
ZXNjcmlwdGlvbigKKyJUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiBjdXN0b20gaXRl
cmFibGUgb2JqZWN0cy4iCispOworCit2YXIgY3VzdG9tSXRlcmF0b3IgPSB7CisgICAgX19rZXk6
IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAg
ICAgZG9uZTogdGhpcy5fX2tleSA9PT0gNDIsCisgICAgICAgICAgICB2YWx1ZTogdGhpcy5fX2tl
eSsrCisgICAgICAgIH07CisgICAgfSwKKyAgICBbU3ltYm9sLml0ZXJhdG9yXTogZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9Cit9OworCit2YXIgZXhwZWN0ZWQgPSAw
OworZm9yICh2YXIgdmFsdWUgb2YgY3VzdG9tSXRlcmF0b3IpIHsKKyAgICBzaG91bGRCZSgidmFs
dWUiLCBTdHJpbmcoZXhwZWN0ZWQrKykpOworfQorCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVl
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2l0ZXJhdG9ycy1zaGFw
ZS5qcyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pdGVyYXRvcnMtc2hhcGUuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMjRjNzhmZDgzMzAxNmMzZDk2YWI4MGNhMTlmNDRhYmI4ZWRlNjljNgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9pdGVyYXRvcnMtc2hhcGUu
anMKQEAgLTAsMCArMSw2NSBAQAorZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNrcyB0aGUg
c2hhcGUgb2YgYnVpbHRpbiBpdGVyYXRvcnMuIgorKTsKKworZGVidWcoIkFycmF5SXRlcmF0b3Ii
KTsKK3ZhciBhcnJheSA9IFsnQ29jb2EnLCAnQ2FwcHVjY2lubycsICdUaGUgZGVzIEFsaXplcycs
ICdNYXRjaGEnLCAnS2lsaW1hbmphcm8nXTsKK3ZhciB2YWx1ZUl0ZXJhdG9yID0gYXJyYXlbU3lt
Ym9sLml0ZXJhdG9yXSgpOworc2hvdWxkQmVGYWxzZSgidmFsdWVJdGVyYXRvci5oYXNPd25Qcm9w
ZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZVRydWUoInZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhh
c093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygidHlwZW9mIHZh
bHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKwordmFyIGtleUl0ZXJh
dG9yID0gYXJyYXkua2V5cygpOworc2hvdWxkQmVGYWxzZSgia2V5SXRlcmF0b3IuaGFzT3duUHJv
cGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVlKCJrZXlJdGVyYXRvci5fX3Byb3RvX18uaGFz
T3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2Yga2V5
SXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKwordmFyIGtleVZhbHVlSXRl
cmF0b3IgPSBhcnJheS5lbnRyaWVzKCk7CitzaG91bGRCZUZhbHNlKCJrZXlWYWx1ZUl0ZXJhdG9y
Lmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlVHJ1ZSgia2V5VmFsdWVJdGVyYXRv
ci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3Ry
aW5nKCJ0eXBlb2Yga2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCIsICJmdW5jdGlvbiIp
OworCitkZWJ1ZygiU2V0SXRlcmF0b3IiKTsKK3ZhciBzZXQgPSBuZXcgU2V0KFsnQ29jb2EnLCAn
Q2FwcHVjY2lubycsICdUaGUgZGVzIEFsaXplcycsICdNYXRjaGEnLCAnS2lsaW1hbmphcm8nXSk7
Cit2YXIgdmFsdWVJdGVyYXRvciA9IHNldFtTeW1ib2wuaXRlcmF0b3JdKCk7CitzaG91bGRCZUZh
bHNlKCJ2YWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlVHJ1
ZSgidmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hv
dWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2YgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCIs
ICJmdW5jdGlvbiIpOworCit2YXIga2V5SXRlcmF0b3IgPSBzZXQua2V5cygpOworc2hvdWxkQmVG
YWxzZSgia2V5SXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVl
KCJrZXlJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxk
QmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2Yga2V5SXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVu
Y3Rpb24iKTsKKwordmFyIGtleVZhbHVlSXRlcmF0b3IgPSBzZXQuZW50cmllcygpOworc2hvdWxk
QmVGYWxzZSgia2V5VmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91
bGRCZVRydWUoImtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0
JykiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygidHlwZW9mIGtleVZhbHVlSXRlcmF0b3IuX19w
cm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKworZGVidWcoIk1hcEl0ZXJhdG9yIik7Cit2YXIg
bWFwID0gbmV3IE1hcCgpOworWworICAgIFsgJ0NvY29hJywgMiwgXSwKKyAgICBbICdDYXBwdWNj
aW5vJywgMCBdLAorICAgIFsgJ1RoZSBkZXMgQWxpemVzJywgMyBdLAorICAgIFsgJ01hdGNoYScs
IDIgXSwKKyAgICBbICdLaWxpbWFuamFybycsIDFdCitdLmZvckVhY2goZnVuY3Rpb24gKFsga2V5
LCB2YWx1ZSBdKSB7CisgICAgbWFwLnNldChrZXksIHZhbHVlKTsKK30pOwordmFyIHZhbHVlSXRl
cmF0b3IgPSBtYXBbU3ltYm9sLml0ZXJhdG9yXSgpOworc2hvdWxkQmVGYWxzZSgidmFsdWVJdGVy
YXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZVRydWUoInZhbHVlSXRlcmF0
b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlRXF1YWxUb1N0
cmluZygidHlwZW9mIHZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsK
KwordmFyIGtleUl0ZXJhdG9yID0gbWFwLmtleXMoKTsKK3Nob3VsZEJlRmFsc2UoImtleUl0ZXJh
dG9yLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlVHJ1ZSgia2V5SXRlcmF0b3Iu
X19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmlu
ZygidHlwZW9mIGtleUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IiwgImZ1bmN0aW9uIik7CisKK3Zh
ciBrZXlWYWx1ZUl0ZXJhdG9yID0gbWFwLmVudHJpZXMoKTsKK3Nob3VsZEJlRmFsc2UoImtleVZh
bHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVlKCJrZXlW
YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRC
ZUVxdWFsVG9TdHJpbmcoInR5cGVvZiBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0Iiwg
ImZ1bmN0aW9uIik7CisKK3N1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246730</attachid>
            <date>2015-02-16 23:12:39 -0800</date>
            <delta_ts>2015-02-24 20:21:13 -0800</delta_ts>
            <desc>prototype</desc>
            <filename>bug-141351-20150217161232.patch</filename>
            <type>text/plain</type>
            <size>94015</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMTQzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
NGM1N2U4MmUwZjFkNWZlMGVlZTYxMjBiN2ZjYTJiZGU0OGIyZDMxLi45YzI4NDAwZDMwZjQ1MGVj
ZjFkZjM2MGYyNTBkZGE4ZTE1ZTI4YmU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDAgQEAKKzIwMTUtMDItMTYgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgVXBncmFkZSBFUzYgSXRlcmF0b3IgaW50ZXJmYWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1cGdy
YWRlcyB0aGUgZXhpc2luZyBFUzYgaXRlcmF0b3IgdG8gYWxpZ24gdGhlIGxhdGVzdCBzcGVjLgor
ICAgICAgICBJbiB0aGUgbGF0ZXN0IHNwZWMsCisgICAgICAgIDEuIGBJdGVyYXRvci5uZXh0YCBy
ZXR1cm5zIG9iamVjdCB0aGF0IGltcGxlbWVudHMgSXRlcmF0b3JSZXN1bHQgaW50ZXJmYWNlIHsg
dmFsdWU6IHZhbHVlLCBkb25lLCBib29sZWFuIH0uCisgICAgICAgIDIuIGBJdGVyYXRvci5yZXR1
cm5gIGlzIGludHJvZHVjZWQuIFdoZW4gdGhlIGl0ZXJhdGlvbiBpcyB0ZXJtaW5hdGVkIGJ5IHRo
ZSBhYnJ1cHQgY29tcGxldGlvbiwKKyAgICAgICAgICAgIGl0IGlzIGNhbGxlZCB0byBjbG9zZSBp
dGVyYXRvciBzdGF0ZS4KKyAgICAgICAgMy4gSXRlcmF0b3IubmV4dCBvZiBBcnJheSBpcyBtb3Zl
ZCBmcm9tIGFuIGl0ZXJhdG9yIG9iamVjdCB0byBgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlYC4K
KworICAgICAgICBUbyB1cGdyYWRlIGl0LCB3ZSBjaGFuZ2VzIHRoZSBieXRlY29kZSB0aGF0IHJl
cHJlc2VudHMgZm9yLW9mIGxvb3BzLgorICAgICAgICBBbmQgdG8gZW1ib2R5IHRoZSBlZmZpY2ll
bnQgaXRlcmF0aW9uIHdpdGggYW4gaXRlcmF0b3Igb2JqZWN0LAorICAgICAgICB3ZSBpbXBsZW1l
bnRlZCAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCBpbiBKYXZhU2NyaXB0IGFuZAorICAg
ICAgICBpdCBpcyBsb2NhdGVkIGluIGJ1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90eXBlLmpz
LgorICAgICAgICBJbXBsZW1lbnRpbmcgaXQgaW4gSmF2YVNjcmlwdCBlbmNvdXJhZ2VzIGlubGlu
aW5nIGFuZAorICAgICAgICB1dGlsaXplcyBlc2NhcGUgYW5hbHlzaXMgZm9yIGFuIGl0ZXJhdG9y
IHJlc3VsdCBvYmplY3QgaW4gREZHIEpJVC4KKyAgICAgICAgQW5kIHdlIGRyb3BwZWQgdGhlIGlu
dHJpbnNpYyB2ZXJzaW9uIG9mICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0LgorCisgICAg
ICAgIEFuZCB3ZSBpbnRyb2R1Y2VkIEl0ZXJhdG9yT3BlcmF0aW9ucyB0aGF0IGlzIGRlZmluZWQg
aW4gdGhlIHNwZWMuCisgICAgICAgIEl0IGFsaWducyB0aGUgaXRlcmF0aW9uIGluIHRoZSBydW50
aW1lIHRvIHRoZSBsYXRlc3Qgc3BlYy4KKyAgICAgICAgQ3VycmVudGx5LCBQcm9taXNlLmFsbCBh
bmQgUHJvbWlzZS5yYWNlIHVzZXMgYW4gaXRlcmFibGUgb2JqZWN0LgorICAgICAgICBIb3dldmVy
LCBQcm9taXNlLmFsbCBhbmQgUHJvbWlzZS5yYWNlIGltcGxlbWVudGF0aW9uIGlzIGFsc28gYmFz
ZWQgb24gdGhlIG9sZCBzcGVjLgorICAgICAgICBTdWJzZXF1ZW50IHBhdGNoZXMgd2lsbCB1cGdy
YWRlIGl0LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNv
dXJjZXMubWFrZToKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnM6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBidWlsdGlucy9BcnJheUl0ZXJhdG9yLnByb3Rv
dHlwZS5qczogQWRkZWQuCisgICAgICAgIChuZXh0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFRocm93VHlwZUVycm9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRFbnVtZXJhdGlvbik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNP
YmplY3QpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdElzVW5kZWZpbmVk
KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAg
KiBqaXQvVGh1bmtHZW5lcmF0b3JzLmNwcDoKKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5l
eHRUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JO
ZXh0S2V5VGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJh
dG9yTmV4dFZhbHVlVGh1bmtHZW5lcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuaDoKKyAgICAgICAgKiBydW50aW1lL0FyZ3VtZW50c0l0ZXJhdG9yUHJvdG90
eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6QXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6YXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5j
TmV4dCk6CisgICAgICAgICogcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6QXJyYXlJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAg
ICAgICAoSlNDOjpBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QpOgor
ICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yUHJvdG9GdW5jSXRlcmF0ZSk6CisgICAgICAgIChK
U0M6OmFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
dW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1v
bklkZW50aWZpZXJzLmg6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAg
KiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpp
dGVyYXRvck5leHQpOgorICAgICAgICAoSlNDOjppdGVyYXRvclZhbHVlKToKKyAgICAgICAgKEpT
Qzo6aXRlcmF0b3JDb21wbGV0ZSk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yU3RlcCk6CisgICAg
ICAgIChKU0M6Oml0ZXJhdG9yQ2xvc2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyUmVzdWx0
T2JqZWN0KToKKyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oOiBDb3BpZWQg
ZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBl
LmNwcC4KKyAgICAgICAgKiBydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHA6CisgICAgICAgIChK
U0M6OkpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0Fy
cmF5SXRlcmF0b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjcmVh
dGVJdGVyYXRvclJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JO
ZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXkpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFZhbHVlKTogRGVsZXRlZC4KKyAg
ICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0
b3I6OkpTQXJyYXlJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6aXRl
cmF0aW9uS2luZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6aXRl
cmF0ZWRPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6Om5l
eHRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6c2V0TmV4
dEluZGV4KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpmaW5pc2gp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0
aW9uS2luZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0
T2ZJdGVyYXRlZE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRv
cjo6b2Zmc2V0T2ZOZXh0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNQcm9t
aXNlQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlNDOjpwZXJmb3JtUHJvbWlzZVJhY2VMb29w
KToKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmFjZSk6CisgICAgICAg
IChKU0M6OnBlcmZvcm1Qcm9taXNlQWxsKToKKyAgICAgICAgKEpTQzo6SlNQcm9taXNlQ29uc3Ry
dWN0b3JGdW5jQWxsKToKKyAgICAgICAgKiBydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNw
cDoKKyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToK
KyAgICAgICAgKEpTQzo6TWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICog
cnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OlNldEl0ZXJh
dG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OlNldEl0ZXJhdG9y
UHJvdG90eXBlRnVuY05leHQpOgorICAgICAgICAqIHJ1bnRpbWUvVk0uY3BwOgorICAgICAgICAo
SlNDOjp0aHVua0dlbmVyYXRvckZvckludHJpbnNpYyk6CisKIDIwMTUtMDItMTUgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBSYXJlIGNhc2UgcHJvZmlsaW5nIHNo
b3VsZCBhY3R1YWxseSB3b3JrCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXgg
Y2Q3Nzk2MzFjZjMxZjk1ODdkZjI3Yzk5NTBhNzFhNWFkNDFjN2RlMy4uNjgwNDQyYWE0YzcxNzlm
YmVjMDUwODg5Zjk4NTMzMzk5ZGYxMGI1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtNDM4LDcgKzQzOCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJD
RVMKICAgICBydW50aW1lL0Vycm9ySW5zdGFuY2UuY3BwCiAgICAgcnVudGltZS9FcnJvclByb3Rv
dHlwZS5jcHAKICAgICBydW50aW1lL0V4Y2VwdGlvbkZ1enouY3BwCi0gICAgcnVudGltZS9FeGNl
cHRpb25IZWxwZXJzLmNwcCAKKyAgICBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwCiAgICAg
cnVudGltZS9FeGVjdXRhYmxlLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25Db25zdHJ1Y3Rvci5j
cHAKICAgICBydW50aW1lL0Z1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwCkBAIC00NTAsNiArNDUw
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvSW5p
dGlhbGl6ZVRocmVhZGluZy5jcHAKICAgICBydW50aW1lL0ludGVuZGVkU3RydWN0dXJlQ2hhaW4u
Y3BwCiAgICAgcnVudGltZS9JbnRlcm5hbEZ1bmN0aW9uLmNwcAorICAgIHJ1bnRpbWUvSXRlcmF0
b3JPcGVyYXRpb25zLmNwcAogICAgIHJ1bnRpbWUvSlNBUElWYWx1ZVdyYXBwZXIuY3BwCiAgICAg
cnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKICAgICBydW50aW1lL0pTQXJndW1lbnRz
SXRlcmF0b3IuY3BwCkBAIC01NzYsNiArNTc3LDcgQEAgbGlzdChBUFBFTkQgSmF2YVNjcmlwdENv
cmVfU09VUkNFUwogCiBzZXQoSmF2YVNjcmlwdENvcmVfTFVUX0ZJTEVTCiAgICAgcnVudGltZS9B
cnJheUNvbnN0cnVjdG9yLmNwcAorICAgIHJ1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5j
cHAKICAgICBydW50aW1lL0FycmF5UHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvQm9vbGVhblBy
b3RvdHlwZS5jcHAKICAgICBydW50aW1lL0RhdGVDb25zdHJ1Y3Rvci5jcHAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggNGEyNjIzZWY1YzljNzU2ZDVkYTU0
N2YxZDNkNjVjZWE5YTE3Njk1YS4uNGRiMDliZDQ3NzJiNGQxYzlmMGM2MWMwMmFlNmQzOTViNjU0
MWU3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKQEAgLTM2
LDYgKzM2LDcgQEAgVlBBVEggPSBcCiAuUEhPTlkgOiBhbGwKIGFsbCA6IFwKICAgICBBcnJheUNv
bnN0cnVjdG9yLmx1dC5oIFwKKyAgICBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIFwKICAg
ICBBcnJheVByb3RvdHlwZS5sdXQuaCBcCiAgICAgQm9vbGVhblByb3RvdHlwZS5sdXQuaCBcCiAg
ICAgRGF0ZUNvbnN0cnVjdG9yLmx1dC5oIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ogYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qCmluZGV4IGNmZmExMTliZDQzYmFiN2ZmNjNhMzQ4YzRiOTJiYzFjN2QyYzI0YzguLjcy
YjgyMTMyMjdiMzZlMTRjMGZlOTliMTljYTk1NGI1YzhhMzFhMTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvagpAQCAtNzE3LDYgKzcxNyw3IEBACiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEluaXRpYWxpemVUaHJlYWRpbmcuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlvbi5j
cHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEl0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQVBJVmFs
dWVXcmFwcGVyLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVu
dGltZVxKU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcCIgLz4KQEAgLTg1MCw2ICs4NTEsNyBAQAogICA8
L0l0ZW1Hcm91cD4KICAgPEl0ZW1Hcm91cD4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29u
ZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3RO
YW1lKVxEZXJpdmVkU291cmNlc1xBcnJheUNvbnN0cnVjdG9yLmx1dC5oIiAvPgorICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNo
aXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFycmF5SXRlcmF0b3JQcm90
b3R5cGUubHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcQXJyYXlQcm90b3R5cGUubHV0LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQ
cm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcQm9vbGVhblByb3RvdHlwZS5sdXQuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRm
b3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xEYXRlQ29uc3Ry
dWN0b3IubHV0LmgiIC8+CkBAIC0xNDg3LDYgKzE0ODksNyBAQAogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5ccnVudGltZVxJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmgiIC8+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24uaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50cmluc2ljLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEl0ZXJhdG9yT3BlcmF0aW9ucy5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FQSVZhbHVlV3JhcHBlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xleGljYWxFbnZpcm9ubWVudC5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FyZ3VtZW50c0l0ZXJhdG9yLmgi
IC8+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMK
aW5kZXggMjdjZDRlNGQxNjdmNzlkOTA2ZjMwNTE5YWI5NzQ3NjA0ZDQxNjYyMy4uNzg3ODA4MTdm
OGE3ZjA4YzhiZTYxYjYzZDZiYWI0ZDVkM2M0OTczOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5m
aWx0ZXJzCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwpAQCAtNjMwLDYgKzYzMCw5IEBACiAgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24uY3BwIj4KICAg
ICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJdGVyYXRvck9wZXJhdGlvbnMuY3BwIj4KKyAgICAg
IDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgorICAgIDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xleGljYWxFbnZpcm9ubWVudC5jcHAiPgogICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC0yNjU4LDYgKzI2
NjEsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRyaW5zaWMuaCI+
CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSXRlcmF0b3JPcGVyYXRpb25zLmgiPgorICAg
ICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTGV4aWNhbEVudmlyb25tZW50LmgiPgogICAgICAg
PEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CkBAIC0zMDU4LDYgKzMw
NjQsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIp
XG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2Vz
XFN0cmluZ0NvbnN0cnVjdG9yLmx1dC5oIj4KICAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2Vz
PC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENv
bmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0
TmFtZSlcRGVyaXZlZFNvdXJjZXNcQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCI+CisgICAg
ICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZv
cm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFycmF5UHJvdG90
eXBlLmx1dC5oIj4KICAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+CiAgICAg
PC9DbEluY2x1ZGU+CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IGJhZjI5MDQ1NGVi
YjRjZjE2MGVmMjQyNjEwNzRmNzhkZmE2YjRhMzUuLjE1NDUyOWE1ZjUwMjAyNjg1ZWJjOWIzM2Y1
YjA3ZDE4MTU1NGVlM2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC05MzMsNiAr
OTMzLDggQEAKIAkJNjVDMDI4NUQxNzE3OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjVDMDI4NUIxNzE3
OTY2ODAwMzUxRTM1IC8qIEFSTXY3RE9wY29kZS5oICovOyB9OwogCQk2NUZCNTExNzE4NEVFRTcw
MDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNjVGQjUxMTYxODRFRTlCQzAwQzEyQjcwIC8qIFByb3RvQ2Fs
bEZyYW1lLmNwcCAqLzsgfTsKIAkJNkFEMkNCNEQxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2Vy
RXZhbEVuYWJsZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJNzAxMTNENEIx
QThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQg
LyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCAqLzsgfTsKKwkJNzAxMTNENEMxQThEQjA5MzAwMzg0
OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3Bl
cmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTcwNUI0MUFCMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzA1QjQxQTMxQTZFNTAxRTAwNzE2NzU3
IC8qIFN5bWJvbC5jcHAgKi87IH07CiAJCTcwNUI0MUFDMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1i
b2wuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNUI0
MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFBRDFBNkU1MDFFMDA3MTY3NTcgLyogU3lt
Ym9sQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNzA1QjQxQTUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmNw
cCAqLzsgfTsKQEAgLTI2MDIsNiArMjYwNCw4IEBACiAJCTY1RkI1MTE1MTg0RUU4RjgwMEMxMkI3
MCAvKiBQcm90b0NhbGxGcmFtZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQ
cm90b0NhbGxGcmFtZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2NUZCNTExNjE4
NEVFOUJDMDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUHJvdG9DYWxsRnJhbWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxl
ci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBEZWJ1Z2dlckV2YWxFbmFibGVy
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhD
NCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJNzAxMTNENEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzA0RkQzNTMwNTY5N0U2RDAwM0RCRUQ5IC8qIEJv
b2xlYW5PYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQm9vbGVhbk9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB0YWJXaWR0
aCA9IDg7IH07CiAJCTcwNUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU3ltYm9sLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTeW1ib2wuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTQzMDYsNiArNDMxMCw4IEBACiAJCQkJQkM5QkI5NUIwRTE5NjgwNjAw
REY4ODU1IC8qIEludGVybmFsRnVuY3Rpb24uY3BwICovLAogCQkJCUJDMTE2NjdBMEUxOTlDMDUw
MDgwNjZERCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmggKi8sCiAJCQkJODZCRjY0MkExNDhEQjJCNTAw
NERFMzZBIC8qIEludHJpbnNpYy5oICovLAorCQkJCTcwMTEzRDQ5MUE4REIwOTMwMDM4NDhDNCAv
KiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovLAorCQkJCTcwMTEzRDRBMUE4REIwOTMwMDM4NDhD
NCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLywKIAkJCQkxNERBODE4RjBEOTlGRDIwMDBCMEE0
RkIgLyogSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwICovLAogCQkJCTE0REE4MThFMEQ5OUZEMjAw
MEIwQTRGQiAvKiBKU0xleGljYWxFbnZpcm9ubWVudC5oICovLAogCQkJCUE3NjE0MENCMTgyOTgy
Q0IwMDc1MDYyNCAvKiBKU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcCAqLywKQEAgLTU4NDQsNiArNTg1
MCw3IEBACiAJCQkJQkMxMTY2N0IwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRlcnBy
ZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8qIElu
dHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0IC8q
IEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTMwRTE2RjVD
RDAwQjM0NDYwIC8qIEphdmFTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y1MTlE
MEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTUwM0ZBMUExODhFMEZCMDAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBpbiBI
ZWFkZXJzICovLApAQCAtNzA0NCw2ICs3MDUxLDcgQEAKIAkJCQlBNzg4NTNGOTE3OTcyNjI5MDAx
NDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkx
NDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3BwIGlu
IFNvdXJjZXMgKi8sCisJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3Bl
cmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExOTE4OEUwRkIwMDAxMTBGMTQg
LyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDkyRjBF
RDIyRDcwMDBCODk2MTkgLyogSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QTkwRUQwMEVF
N0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90
eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJv
dG90eXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIzY2MwOWE2OWRjNDFiZGZiY2RiOWQxMjY3ZTM4NWQ0MTlm
MGIwODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMv
QXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBuZXh0KCkg
eworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBpZiAodGhpcyA9PSBudWxsKQorICAgICAgICB0aHJv
dyBuZXcgQFR5cGVFcnJvcigiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMg
dGhhdCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkIik7CisKKyAgICBpZiAodHlwZW9m
IHRoaXMgIT09ICJvYmplY3QiKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiJUFycmF5
SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgT2JqZWN0Iik7
CisKKyAgICB2YXIgaXRlbUtpbmQgPSB0aGlzLkBhcnJheUl0ZXJhdGlvbktpbmQ7CisgICAgaWYg
KCFpdGVtS2luZCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIiVBcnJheUl0ZXJhdG9y
UHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIEFycmF5IEl0ZXJhdG9yIElu
c3RhbmNlIik7CisKKyAgICB2YXIgYXJyYXkgPSB0aGlzLkBpdGVyYXRlZE9iamVjdDsKKyAgICBp
ZiAoYXJyYXkgPT09IHVuZGVmaW5lZCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAg
dmFsdWU6IHVuZGVmaW5lZCwKKyAgICAgICAgICAgIGRvbmU6IHRydWUKKyAgICAgICAgfTsKKyAg
ICB9CisKKyAgICB2YXIgaW5kZXggPSB0aGlzLkBhcnJheUl0ZXJhdG9yTmV4dEluZGV4OworICAg
IHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPj4+IDA7CisgICAgaWYgKGluZGV4ID49IGxlbmd0
aCkgeworICAgICAgICB0aGlzLkBpdGVyYXRlZE9iamVjdCA9IHVuZGVmaW5lZDsKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQsCisgICAgICAgICAgICBkb25l
OiB0cnVlCisgICAgICAgIH07CisgICAgfTsKKyAgICB0aGlzLkBhcnJheUl0ZXJhdG9yTmV4dElu
ZGV4ID0gaW5kZXggKyAxOworCisgICAgaWYgKGl0ZW1LaW5kID09PSAia2V5IikgeworICAgICAg
ICByZXR1cm4geworICAgICAgICAgICAgdmFsdWU6IGluZGV4LAorICAgICAgICAgICAgZG9uZTog
ZmFsc2UKKyAgICAgICAgfTsKKyAgICB9CisgICAgdmFyIGVsZW1lbnRWYWx1ZSA9IGFycmF5W2lu
ZGV4XTsKKyAgICBpZiAoaXRlbUtpbmQgPT09ICJ2YWx1ZSIpIHsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIHZhbHVlOiBlbGVtZW50VmFsdWUsCisgICAgICAgICAgICBkb25lOiBmYWxz
ZQorICAgICAgICB9OworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICB2YWx1ZTogWyBpbmRl
eCwgZWxlbWVudFZhbHVlIF0sCisgICAgICAgIGRvbmU6IGZhbHNlCisgICAgfTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAKaW5kZXggOWEyOTg1MjZlOGIyMDhkZWM0OWIzZGU0YjAzNGM1YmZhYTBjN2Q5NC4u
NzZlMzcwZDk5ZmUxMTYzNDcxY2JkOWVjNzgzYjkyNTVlZjQ5YWZhMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKQEAgLTIzOTAsNiArMjM5MCwxMyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhy
b3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpCiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHRydWUpOwogfQogCit2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dU
eXBlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQoreworICAgIGVtaXRPcGNvZGUob3BfdGhy
b3dfc3RhdGljX2Vycm9yKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRW
YWx1ZShhZGRTdHJpbmdDb25zdGFudChJZGVudGlmaWVyKG1fdm0sIG1lc3NhZ2UpKSktPmluZGV4
KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmYWxzZSk7Cit9CisKIHZvaWQgQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBj
b25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCiB7CiAgICAgZW1pdE9wY29kZShvcF9wdXNoX25hbWVfc2NvcGUpOwpAQCAtMjU5
NSwyNCArMjYwMiw4MyBAQCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24o
VGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEqIG5vZGUsIEV4cHJlc3NpbwogICAgICAgICBlbWl0TW92
ZShhcmdzLnRoaXNSZWdpc3RlcigpLCBzdWJqZWN0LmdldCgpKTsKICAgICAgICAgZW1pdENhbGwo
aXRlcmF0b3IuZ2V0KCksIGl0ZXJhdG9yLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGFyZ3Ms
IG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CiAg
ICAgfQotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpdGVyYXRvck5leHQgPSBlbWl0R2V0QnlJZChu
ZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5pdGVyYXRvck5l
eHRQcml2YXRlTmFtZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gbmV3VGVtcG9y
YXJ5KCk7CiAgICAgZW1pdExvYWQodmFsdWUuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwogICAgIAog
ICAgIGVtaXRKdW1wKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKICAgICAKICAgICBSZWZQdHI8
TGFiZWw+IGxvb3BTdGFydCA9IG5ld0xhYmVsKCk7CisgICAgUmVmUHRyPExhYmVsPiBpdGVyYXRv
ckRvbmUgPSBuZXdMYWJlbCgpOwogICAgIGVtaXRMYWJlbChsb29wU3RhcnQuZ2V0KCkpOwogICAg
IGVtaXRMb29wSGludCgpOworCisgICAgUmVmUHRyPExhYmVsPiB0cnlTdGFydExhYmVsID0gbmV3
TGFiZWwoKTsKKyAgICBlbWl0TGFiZWwodHJ5U3RhcnRMYWJlbC5nZXQoKSk7CisgICAgVHJ5RGF0
YSogdHJ5RGF0YSA9IHB1c2hUcnkodHJ5U3RhcnRMYWJlbC5nZXQoKSk7CiAgICAgY2FsbEJhY2so
KnRoaXMsIHZhbHVlLmdldCgpKTsKKyAgICBSZWZQdHI8TGFiZWw+IGNhdGNoSGVyZSA9IGVtaXRM
YWJlbChuZXdMYWJlbCgpLmdldCgpKTsKKwogICAgIGVtaXRMYWJlbChzY29wZS0+Y29udGludWVU
YXJnZXQoKSk7Ci0gICAgQ2FsbEFyZ3VtZW50cyBuZXh0QXJndW1lbnRzKCp0aGlzLCAwLCAxKTsK
LSAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQo
KSk7Ci0gICAgZW1pdE1vdmUobmV4dEFyZ3VtZW50cy5hcmd1bWVudFJlZ2lzdGVyKDApLCB2YWx1
ZS5nZXQoKSk7Ci0gICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIGl0ZXJhdG9yTmV4dC5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5k
aXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
ZXN1bHQgPSBuZXdUZW1wb3JhcnkoKTsKLSAgICBlbWl0SnVtcElmRmFsc2UoZW1pdEVxdWFsaXR5
T3Aob3Bfc3RyaWN0ZXEsIHJlc3VsdC5nZXQoKSwgdmFsdWUuZ2V0KCksIGVtaXRMb2FkKDAsIEpT
VmFsdWUodm0oKS0+aXRlcmF0aW9uVGVybWluYXRvci5nZXQoKSkpKSwgbG9vcFN0YXJ0LmdldCgp
KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbmV4dCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFy
eSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLm5leHQpOworICAgIHsKKyAgICAg
ICAgQ2FsbEFyZ3VtZW50cyBuZXh0QXJndW1lbnRzKCp0aGlzLCAwLCAxKTsKKyAgICAgICAgZW1p
dE1vdmUobmV4dEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOworICAg
ICAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIHZhbHVlLmdl
dCgpKTsKKyAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIG5leHQuZ2V0KCksIE5vRXhwZWN0
ZWRGdW5jdGlvbiwgbmV4dEFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFy
dCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBSZWZQdHI8TGFi
ZWw+IHR5cGVJc09iamVjdCA9IG5ld0xhYmVsKCk7CisgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVt
aXRJc09iamVjdChuZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCkpLCB0eXBlSXNPYmplY3QuZ2V0
KCkpOworICAgICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciBy
ZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAgICBlbWl0TGFiZWwo
dHlwZUlzT2JqZWN0LmdldCgpKTsKKyAgICB9CisgICAgZW1pdEp1bXBJZlRydWUoZW1pdEdldEJ5
SWQobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkuZG9uZSksIGl0
ZXJhdG9yRG9uZS5nZXQoKSk7CisgICAgZW1pdEdldEJ5SWQodmFsdWUuZ2V0KCksIHZhbHVlLmdl
dCgpLCBwcm9wZXJ0eU5hbWVzKCkudmFsdWUpOworICAgIGVtaXRKdW1wKGxvb3BTdGFydC5nZXQo
KSk7CisKKyAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1lZCBjb250cm9s
IGZsb3cuCisgICAgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0
ZXIgPSBwb3BUcnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgbmV3VGVtcG9yYXJ5KCksIGNhdGNoSGVy
ZS5nZXQoKSk7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0aHJvdyA9IG5ld0xhYmVsKCk7CisK
KyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5l
d1RlbXBvcmFyeSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnJldHVybktleXdv
cmQpOworICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5
KCksIHJldHVybk1ldGhvZC5nZXQoKSksIHJldGhyb3cuZ2V0KCkpOworCisgICAgICAgIFJlZlB0
cjxMYWJlbD4gdHlwZUlzT2JqZWN0Q2hlY2sgPSBuZXdMYWJlbCgpOworCisgICAgICAgIENhbGxB
cmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCAwKTsKKyAgICAgICAgZW1pdE1vdmUocmV0
dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7CisKKyAgICAgICAg
UmVmUHRyPExhYmVsPiByZXR1cm5DYWxsVHJ5U3RhcnQgPSBuZXdMYWJlbCgpOworICAgICAgICBl
bWl0TGFiZWwocmV0dXJuQ2FsbFRyeVN0YXJ0LmdldCgpKTsKKyAgICAgICAgVHJ5RGF0YSogcmV0
dXJuQ2FsbFRyeURhdGEgPSBwdXNoVHJ5KHJldHVybkNhbGxUcnlTdGFydC5nZXQoKSk7CisgICAg
ICAgIGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRG
dW5jdGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0
KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgICAgICBSZWZQdHI8TGFiZWw+IHJldHVybkNhbGxD
YXRjaEhlcmUgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7CisgICAgICAgIGVtaXRKdW1w
KHR5cGVJc09iamVjdENoZWNrLmdldCgpKTsKKworICAgICAgICBlbWl0TGFiZWwodHlwZUlzT2Jq
ZWN0Q2hlY2suZ2V0KCkpOworICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3
VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpKSwgcmV0aHJvdy5nZXQoKSk7CisgICAgICAgIGVtaXRU
aHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMg
bm90IGFuIG9iamVjdC4iKSk7CisKKyAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNh
bGxUcnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgcmV0dXJuQ2FsbENhdGNoSGVyZS5nZXQoKSk7Cisg
ICAgICAgIGVtaXRMYWJlbChyZXRocm93LmdldCgpKTsKKyAgICAgICAgZW1pdFRocm93KGV4Y2Vw
dGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVl
bmNlIGZvciBicmVhay1lZCBjb250cm9sIGZsb3cuCiAgICAgZW1pdExhYmVsKHNjb3BlLT5icmVh
a1RhcmdldCgpKTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRo
b2QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5
TmFtZXMoKS5yZXR1cm5LZXl3b3JkKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5k
ZWZpbmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCBpdGVyYXRvckRvbmUu
Z2V0KCkpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCAw
KTsKKyAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVy
YXRvci5nZXQoKSk7CisgICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRob2Qu
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZvdCgp
LCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgICAgICBlbWl0SnVt
cElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpKSwgaXRlcmF0
b3JEb25lLmdldCgpKTsKKyAgICAgICAgZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgi
SXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICB9CisK
KyAgICBlbWl0TGFiZWwoaXRlcmF0b3JEb25lLmdldCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogYmFzZSkKQEAgLTI2ODksNiArMjc1NSwyMyBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBpbgogICAgIHJldHVybiBkc3Q7CiB9CiAKKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5l
cmF0b3I6OmVtaXRJc09iamVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKK3sK
KyAgICBlbWl0T3Bjb2RlKG9wX2lzX29iamVjdCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7
CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVt
aXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKK3sKKyAgICBl
bWl0T3Bjb2RlKG9wX2lzX3VuZGVmaW5lZCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRz
dC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7Cisg
ICAgcmV0dXJuIGRzdDsKK30KKwogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRG
b3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVn
aXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDI0NjJh
MGFjNmRjYzc1YTE1MDgwMWM1YzFiZTAwMTU2ODEyYmI2MGEuLjg5MzM4NWJjZWMxMWZhNzUxN2Vl
ZDVkZjBkOWY4YzRkY2VlZTVjNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTUyNiw2ICs1MjYsOSBAQAog
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVn
aXN0ZXJJRCogaW5kZXgpOwogCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc09iamVjdChSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJ
c1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CisKICAgICAgICAg
dm9pZCBlbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwogCiAgICAgICAgIC8vIFN0YXJ0
IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVuIGVtaXR0ZWQuCkBAIC01NDAsNiAr
NTQzLDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZW1pdFRocm93UmVmZXJlbmNlRXJy
b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBlbWl0VGhyb3dUeXBlRXJy
b3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgICAgICB2b2lkIGVtaXRQdXNoRnVuY3Rp
b25OYW1lU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwg
UmVnaXN0ZXJJRCogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICB2b2lkIGVt
aXRQdXNoQ2F0Y2hTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3Bl
cnR5LCBSZWdpc3RlcklEKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggN2IwY2RhNjg2Y2M0
NzI3ZWNmMjhhZjdhNTdhNWUwNzUxMTM1YzNhNS4uMTAwN2QyZDY3Yzk3NTdhNDFiM2IwMzcwZDEw
OTQxY2FhMTVlOWQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcApAQCAtMTA0NCwxMDcgKzEwNDQsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
aW11bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5q
aXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiaW11bCIpOwogfQogCi1zdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0b3IoVk0qIHZt
LCBBcnJheUl0ZXJhdGlvbktpbmQga2luZCkKLXsKLSAgICB0eXBlZGVmIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OlRydXN0ZWRJbW0zMiBUcnVzdGVkSW1tMzI7Ci0gICAgdHlwZWRlZiBTcGVjaWFsaXpl
ZFRodW5rSklUOjpUcnVzdGVkSW1tUHRyIFRydXN0ZWRJbW1QdHI7Ci0gICAgdHlwZWRlZiBTcGVj
aWFsaXplZFRodW5rSklUOjpBZGRyZXNzIEFkZHJlc3M7Ci0gICAgdHlwZWRlZiBTcGVjaWFsaXpl
ZFRodW5rSklUOjpCYXNlSW5kZXggQmFzZUluZGV4OwotICAgIHR5cGVkZWYgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6SnVtcCBKdW1wOwotICAgIAotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZt
KTsKLSAgICAvLyBNYWtlIHN1cmUgd2UncmUgYmVpbmcgY2FsbGVkIG9uIGFuIGFycmF5IGl0ZXJh
dG9yLCBhbmQgbG9hZCBtX2l0ZXJhdGVkT2JqZWN0LCBhbmQgbV9uZXh0SW5kZXggaW50byByZWdU
MCBhbmQgcmVnVDEgcmVzcGVjdGl2ZWx5Ci0gICAgaml0LmxvYWRBcmd1bWVudFdpdGhTcGVjaWZp
Y0NsYXNzKEpTQXJyYXlJdGVyYXRvcjo6aW5mbygpLCBTcGVjaWFsaXplZFRodW5rSklUOjpUaGlz
QXJndW1lbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMSk7Ci0KLSAgICAvLyBFYXJseSBleGl0IGlmIHdlIGRvbid0IGhhdmUgYSB0aHVuayBm
b3IgdGhpcyBmb3JtIG9mIGl0ZXJhdGlvbgotICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFu
Y2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpBYm92ZU9yRXF1YWwsIEFkZHJlc3MoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRpb25LaW5k
KCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlJdGVyYXRlS2V5VmFsdWUpKSk7Ci0gICAgCi0gICAgaml0
LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJh
dG9yOjpvZmZzZXRPZkl0ZXJhdGVkT2JqZWN0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MCk7Ci0gICAgCi0gICAgaml0LmxvYWQzMihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMSk7Ci0gICAgCi0gICAgLy8gUHVsbCBvdXQgdGhlIGJ1dHRlcmZseSBmcm9t
IGl0ZXJhdGVkT2JqZWN0Ci0gICAgaml0LmxvYWQ4KEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMyk7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDIpOwotICAgIEp1bXAgbnVsbEJ1dHRlcmZseSA9IGppdC5icmFuY2hUZXN0UHRyKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6Olplcm8sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAg
ICAKLSAgICBKdW1wIG5vdERvbmUgPSBqaXQuYnJhbmNoMzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
QmVsb3csIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQotICAg
IG51bGxCdXR0ZXJmbHkubGluaygmaml0KTsKLQotICAgIC8vIFJldHVybiB0aGUgdGVybWluYXRp
b24gc2lnbmFsIHRvIGluZGljYXRlIHRoYXQgd2UndmUgZmluaXNoZWQKLSAgICBqaXQubW92ZShU
cnVzdGVkSW1tUHRyKHZtLT5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKSwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDApOwotICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDApOwotICAgIAotICAgIG5vdERvbmUubGluaygmaml0KTsKLSAgICAKLSAgICBpZiAo
a2luZCA9PSBBcnJheUl0ZXJhdGVLZXkpIHsKLSAgICAgICAgaml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9y
OjpvZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0gICAgICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMSk7Ci0gICAgICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmpp
dFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJhcnJheS1pdGVyYXRvci1uZXh0LWtleSIp
OwotICAgICAgICAKLSAgICB9Ci0gICAgQVNTRVJUKGtpbmQgPT0gQXJyYXlJdGVyYXRlVmFsdWUp
OwotICAgIAotICAgIC8vIE9rYXksIG5vdyB3ZSdyZSByZXR1cm5pbmcgYSB2YWx1ZSBzbyBtYWtl
IHN1cmUgd2UncmUgaW5zaWRlIHRoZSB2ZWN0b3Igc2l6ZQotICAgIGppdC5hcHBlbmRGYWlsdXJl
KGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpBYm92ZU9yRXF1YWwsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QxLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBC
dXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgLy8gU28gbm93
IHdlIHBlcmZvcm0gaW5saW5lIGxvYWRzIGZvciBpbnQzMiwgdmFsdWUvdW5kZWNpZGVkLCBhbmQg
ZG91YmxlIHN0b3JhZ2UKLSAgICBKdW1wIHVuZGVjaWRlZFN0b3JhZ2UgPSBqaXQuYnJhbmNoMzIo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBU
cnVzdGVkSW1tMzIoQXJyYXlXaXRoVW5kZWNpZGVkKSk7Ci0gICAgSnVtcCBub3RDb250aWd1b3Vz
U3RvcmFnZSA9IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhDb250aWd1b3Vz
KSk7Ci0gICAgCi0gICAgdW5kZWNpZGVkU3RvcmFnZS5saW5rKCZqaXQpOwotICAgIAotICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAgICAKLSNp
ZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6VGltZXNFaWdodCksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICBKdW1w
IG5vdEhvbGUgPSBqaXQuYnJhbmNoVGVzdDY0KFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vblplcm8s
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJ
VDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsK
LSAgICBub3RIb2xlLmxpbmsoJmppdCk7Ci0gICAgaml0LmFkZFB0cihUcnVzdGVkSW1tMzIoMSks
IEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zm
c2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgIGppdC5yZXR1cm5KU1ZhbHVlKFNwZWNpYWxpemVkVGh1
bmtKSVQ6OnJlZ1QwKTsKLSNlbHNlCi0gICAgaml0LmxvYWQzMihCYXNlSW5kZXgoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpUaW1lc0VpZ2h0LCBKU1ZhbHVlOjpvZmZzZXRPZlRhZygpKSwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDMpOwotICAgIEp1bXAgbm90SG9sZSA9IGppdC5icmFuY2gzMihTcGVj
aWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgaml0Lm1vdmUoSlNJbnRl
cmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBKU0ludGVyZmFj
ZUpJVDo6cmVnVDEpOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIo
MCksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigx
KSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpv
ZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0gICAgaml0LnJldHVybkpTVmFsdWUoU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgbm90SG9sZS5saW5r
KCZqaXQpOwotICAgIGppdC5sb2FkMzIoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGlt
ZXNFaWdodCwgSlNWYWx1ZTo6b2Zmc2V0T2ZQYXlsb2FkKCkpLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCk7Ci0gICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgp
KSk7Ci0gICAgaml0Lm1vdmUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QxKTsKLSAgICBqaXQucmV0dXJuSlNWYWx1ZShTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwotI2VuZGlmCi0gICAgbm90
Q29udGlndW91c1N0b3JhZ2UubGluaygmaml0KTsKLSAgICAKLSAgICBKdW1wIG5vdEludDMyU3Rv
cmFnZSA9IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhJbnQzMikpOwotICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAgICBq
aXQubG9hZDMyKEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQsIEpTVmFs
dWU6Om9mZnNldE9mUGF5bG9hZCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAg
IGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6
cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgIGppdC5y
ZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgbm90SW50MzJTdG9y
YWdlLmxpbmsoJmppdCk7Ci0gICAgCi0gICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaDMy
KFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vdEVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MywgVHJ1c3RlZEltbTMyKEFycmF5V2l0aERvdWJsZSkpKTsKLSAgICBqaXQubG9hZFB0cihBZGRy
ZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0
KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7Ci0gICAgaml0LmxvYWREb3VibGUoQmFz
ZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGltZXNFaWdodCksIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OmZwUmVnVDApOwotICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5k
ZXgoKSkpOwotICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdU
MCk7Ci0gICAgCi0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2
ZVRhaWxDYWxsKHZtKSwgImFycmF5LWl0ZXJhdG9yLW5leHQtdmFsdWUiKTsKLX0KLQotTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0S2V5VGh1bmtHZW5lcmF0b3IoVk0qIHZt
KQotewotICAgIHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKHZtLCBBcnJh
eUl0ZXJhdGVLZXkpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5l
eHRWYWx1ZVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRv
ck5leHRUaHVua0dlbmVyYXRvcih2bSwgQXJyYXlJdGVyYXRlVmFsdWUpOwotfQotICAgIAogfQog
CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5r
R2VuZXJhdG9ycy5oCmluZGV4IDI0NmRhMmVhNjQ1NGI5ZTMwMjc2YWQyMTc3NGI1NWMyNTNkNDEw
YzYuLmZkYjAwY2Y4MmFlNmIxMGRjYjNhMDM5MzZiYzcwYThhM2RiM2I5YTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAtMTMwLDggKzEzMCw2IEBA
IGlubGluZSBUaHVua0dlbmVyYXRvciB2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoCiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVs
VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9y
TmV4dEtleVRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJ
dGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0KICNlbmRpZiAvLyBFTkFC
TEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1l
bnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
QXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGQ3OWNjNTJlMDkyYmM2ZTkwYjQx
YmJlNzk5OGMyYWI3MDdhYTNkMmMuLmFkOGI3NTkwZDg1ZTY1NmE5MTJiNGFhOTkxNzYwZmFkMzYz
MDYwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50
c0l0ZXJhdG9yUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Bcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5oIgog
CisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNBcmd1bWVudHNJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIApAQCAtNDMsNyArNDQsNyBAQCB2
b2lkIEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUo
dGhpcyk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yLCBE
b250RW51bSwgMCk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5p
dGVyYXRvck5leHRQcml2YXRlTmFtZSwgYXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4
dCwgRG9udEVudW0sIDApOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1l
cy0+bmV4dCwgYXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDAp
OwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJv
dG90eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNTUsOCArNTYsOCBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBl
RnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRgogewogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlm
IChqc0Nhc3Q8SlNBcmd1bWVudHNJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLT5u
ZXh0KGNhbGxGcmFtZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShy
ZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJh
dGlvblRlcm1pbmF0b3IuZ2V0KCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNy
ZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNV
bmRlZmluZWQoKSwgdHJ1ZSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGM4ODAwZTNj
ZGNhNjI1MmVhYjk4ZmQwMjExODYxZTFkMGRiZWMxMTIuLmY3Mzk4NzNlZThlYjg4YTkxNzVmMDZk
M2VhMzllYWI4YzgxNjc3YjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCkBAIC0yMCwxMyArMjAsMjMgQEAK
ICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFy
cmF5SXRlcmF0b3JQcm90b3R5cGUuaCIKIAorbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRlKEV4
ZWNTdGF0ZSopOworCit9CisKKyNpbmNsdWRlICJBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5o
IgorCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNBcnJheUl0
ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFs
T2JqZWN0LmgiCkBAIC0zNSwyMiArNDUsMzMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0
IENsYXNzSW5mbyBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpzX2luZm8gPSB7ICJBcnJheSBJdGVy
YXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoQXJyYXlJdGVyYXRv
clByb3RvdHlwZSkgfTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdGUoRXhlY1N0YXRlKik7Citjb25zdCBDbGFzc0luZm8g
QXJyYXlJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiQXJyYXkgSXRlcmF0b3IiLCAmQmFz
ZTo6c19pbmZvLCAmYXJyYXlJdGVyYXRvclByb3RvdHlwZVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RB
QkxFKEFycmF5SXRlcmF0b3JQcm90b3R5cGUpIH07CisKKy8qIFNvdXJjZSBmb3IgQXJyYXlJdGVy
YXRvclByb3RvdHlwZS5sdXQuaAorQGJlZ2luIGFycmF5SXRlcmF0b3JQcm90b3R5cGVUYWJsZQor
ICBuZXh0ICAgICAgYXJyYXlJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0ICBEb250RW51bXxGdW5j
dGlvbiAwCitAZW5kCisqLwogCiB2b2lkIEFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAg
IHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7Ci0KLSAgICBKU0NfTkFUSVZFX0ZV
TkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0
b3JQcm90b3R5cGVJdGVyYXRlLCBEb250RW51bSwgMCk7CisgICAgSlNDX05BVElWRV9GVU5DVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yUHJv
dG9GdW5jSXRlcmF0ZSwgRG9udEVudW0sIDApOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKENhbGxGcmFtZSogY2FsbEZyYW1l
KQorYm9vbCBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmpl
Y3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJh
bWUtPnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEJhc2U+
KGV4ZWMsIGFycmF5SXRlcmF0b3JQcm90b3R5cGVUYWJsZSwganNDYXN0PEFycmF5SXRlcmF0b3JQ
cm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIHNsb3QpOwogfQogCisvLyAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9y
UHJvdG9GdW5jSXRlcmF0ZShFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShleGVjLT50aGlzVmFsdWUoKSk7CiB9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3Rv
dHlwZS5oCmluZGV4IDEwZWU5YTZhMjY3NmQ5OWQxOTM3ZDM4Yzg3ODEyOTU4NDRmYTBiNWQuLjU0
N2UzMzI3MmQyZTRjMTM1Njk0MGI5OTNlNDNlYWNmYzAyYzYyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgKQEAg
LTQ4LDEyICs0OCwxNyBAQCBjbGFzcyBBcnJheUl0ZXJhdG9yUHJvdG90eXBlIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGds
b2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7CiAgICAgfQogCitwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6
U3RydWN0dXJlRmxhZ3M7CisKIHByaXZhdGU6CiAgICAgQXJyYXlJdGVyYXRvclByb3RvdHlwZShW
TSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVy
ZSkKICAgICB7CiAgICAgfQorCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFs
T2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0Kiwg
RXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmKTsKIH07CiAKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4
IDY1ODE1Y2M5YTFlOWY3YzYyMTAzOTIyMDNhYzhmMTgxMDdkZjhhNzAuLjM4M2Q2NTQ2NWYxYzY0
Y2Q5ZDY5OTg1OTBjNTViNjJlMDhhMmVkNDEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaApAQCAtMjM1LDcgKzIzNSw5IEBACiAKICNk
ZWZpbmUgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRSht
YWNybykgXAogICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05P
V05fU1lNQk9MKG1hY3JvKSBcCi0gICAgbWFjcm8oaXRlcmF0b3JOZXh0KSBcCisgICAgbWFjcm8o
aXRlcmF0ZWRPYmplY3QpIFwKKyAgICBtYWNybyhhcnJheUl0ZXJhdG9yTmV4dEluZGV4KSBcCisg
ICAgbWFjcm8oYXJyYXlJdGVyYXRpb25LaW5kKSBcCiAgICAgbWFjcm8ocmVzb2x2ZSkgXAogICAg
IG1hY3JvKHJlamVjdCkgXAogICAgIG1hY3JvKHByb21pc2UpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSW50cmluc2ljLmgKaW5kZXggNTM4YjMyODRjMjRjMTMzNjQwZmE0N2UzZTQy
N2JkZDY1NzlhYzRhOS4uZjgyODMzNjk1MDFlMDk0NTMwNzE0MDlmNDA2Zjg5YTIwNjg5YTYwZCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKQEAgLTUyLDEwICs1
Miw3IEBAIGVudW0gSW50cmluc2ljIHsKICAgICBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmlu
c2ljLAogICAgIElNdWxJbnRyaW5zaWMsCiAgICAgRlJvdW5kSW50cmluc2ljLAotICAgIEFycmF5
SXRlcmF0b3JOZXh0VmFsdWVJbnRyaW5zaWMsCi0gICAgQXJyYXlJdGVyYXRvck5leHRLZXlJbnRy
aW5zaWMsCi0gICAgQXJyYXlJdGVyYXRvck5leHRHZW5lcmljSW50cmluc2ljLAotICAgIAorCiAg
ICAgLy8gRGVidWdnaW5nIGludHJpbnNpY3MuIFRoZXNlIGFyZSBtZWFudCB0byBiZSB1c2VkIGFz
IHRlc3RpbmcgaGFja3Mgd2l0aGluCiAgICAgLy8ganNjLmNwcCBhbmQgc2hvdWxkIG5ldmVyIGJl
IGV4cG9zZWQgdG8gdXNlcnMuCiAgICAgREZHVHJ1ZUludHJpbnNpYywKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjI3YTNiMGY2MzZlYzFlMmYyNGM4ZGQ3MGQ3Y2ZkYmIyZDAwNTk4ZTYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMu
Y3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJdGVyYXRv
ck9wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5l
cy5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBX
VEY7CisKK25hbWVzcGFjZSBKU0MgeworCitKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IsIEpTVmFsdWUgdmFsdWUpCit7CisgICAgSlNWYWx1ZSBu
ZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5uZXh0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBq
c1VuZGVmaW5lZCgpOworCisgICAgQ2FsbERhdGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7CisgICAg
Q2FsbFR5cGUgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24s
IG5leHRGdW5jdGlvbkNhbGxEYXRhKTsKKyAgICBpZiAobmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPT0g
Q2FsbFR5cGVOb25lKQorICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAg
ICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBuZXh0RnVuY3Rpb25Bcmd1bWVudHM7CisgICAgaWYgKCF2
YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQodmFs
dWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRG
dW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5j
dGlvbkFyZ3VtZW50cyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9
CisKK0pTVmFsdWUgaXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRv
cikKK3sKKyAgICByZXR1cm4gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJhdG9yLCBKU1ZhbHVlKCkp
OworfQorCitKU1ZhbHVlIGl0ZXJhdG9yVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0
ZXJSZXN1bHQpCit7CisgICAgcmV0dXJuIGl0ZXJSZXN1bHQuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+dmFsdWUpOworfQorCitib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJSZXN1bHQpCit7CisgICAgSlNWYWx1ZSBkb25lID0gaXRl
clJlc3VsdC5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lKTsKKyAgICBy
ZXR1cm4gZG9uZS50b0Jvb2xlYW4oZXhlYyk7Cit9CisKK0pTVmFsdWUgaXRlcmF0b3JTdGVwKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9
IGl0ZXJhdG9yTmV4dChleGVjLCBpdGVyYXRvcik7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBib29sIGRvbmUgPSBpdGVy
YXRvckNvbXBsZXRlKGV4ZWMsIHJlc3VsdCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAg
cmV0dXJuIGpzQm9vbGVhbihmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBp
dGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKK3sKKyAgICBK
U1ZhbHVlIGV4Y2VwdGlvbjsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAg
ICAgZXhjZXB0aW9uID0gZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhj
ZXB0aW9uKCk7CisgICAgfQorICAgIEpTVmFsdWUgcmV0dXJuRnVuY3Rpb24gPSBpdGVyYXRvci5n
ZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5yZXR1cm5LZXl3b3JkKTsKKyAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXR1
cm5GdW5jdGlvbi5pc1VuZGVmaW5lZCgpKSB7CisgICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0
aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIHJldHVybkZ1bmN0
aW9uQ2FsbERhdGE7CisgICAgQ2FsbFR5cGUgcmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9IGdldENh
bGxEYXRhKHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxEYXRhKTsKKyAgICBpZiAo
cmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgaWYgKCFl
eGNlcHRpb24uaXNFbXB0eSgpKQorICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlv
bihleGVjLCBleGNlcHRpb24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIHJldHVybkZ1bmN0aW9uQXJndW1lbnRzOworICAgIEpTVmFsdWUgaW5uZXJSZXN1bHQg
PSBjYWxsKGV4ZWMsIHJldHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxUeXBlLCByZXR1
cm5GdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHMpOwor
CisgICAgaWYgKCFleGNlcHRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIGV4ZWMtPnZtKCkudGhy
b3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYg
KCFpbm5lclJlc3VsdC5pc09iamVjdCgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMp
OworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitKU09iamVjdCogY3JlYXRlSXRlclJlc3Vs
dE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIGJvb2wgZG9uZSkKK3sKKyAg
ICBKU09iamVjdCogcmVzdWx0T2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYyk7Cisg
ICAgcmVzdWx0T2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLmRvbmUsIGpzQm9vbGVhbihkb25lKSk7CisgICAgcmVzdWx0T2JqZWN0LT5wdXREaXJlY3Qo
ZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlLCB2YWx1ZSk7CisgICAgcmV0
dXJuIHJlc3VsdE9iamVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjRiZWYzODgzNWFhZWVlZmFlYzEyYzgwYTk1ZWIxMzNiNzhkYWRkMjQKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaApA
QCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kg
PHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSXRlcmF0b3JPcGVyYXRpb25zX2gKKyNkZWZpbmUgSXRlcmF0
b3JPcGVyYXRpb25zX2gKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJKU09i
amVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSlNWYWx1ZSBpdGVyYXRvck5leHQoRXhlY1N0
YXRlKiwgSlNWYWx1ZSBpdGVyYXRvciwgSlNWYWx1ZSk7CitKU1ZhbHVlIGl0ZXJhdG9yTmV4dChF
eGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJhdG9yKTsKK0pTVmFsdWUgaXRlcmF0b3JWYWx1ZShFeGVj
U3RhdGUqLCBKU1ZhbHVlIGl0ZXJSZXN1bHQpOworYm9vbCBpdGVyYXRvckNvbXBsZXRlKEV4ZWNT
dGF0ZSosIEpTVmFsdWUgaXRlclJlc3VsdCk7CitKU1ZhbHVlIGl0ZXJhdG9yU3RlcChFeGVjU3Rh
dGUqLCBKU1ZhbHVlIGl0ZXJhdG9yKTsKK3ZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqLCBK
U1ZhbHVlIGl0ZXJhdG9yKTsKK0pTT2JqZWN0KiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KEV4ZWNT
dGF0ZSosIEpTVmFsdWUsIGJvb2wgZG9uZSk7CisKK30KKworI2VuZGlmIC8vICFkZWZpbmVkKEl0
ZXJhdG9yT3BlcmF0aW9uc19oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlJdGVyYXRvci5jcHAKaW5kZXggMzNiYWI3MWI2NzkwMjg4OTY3OTUyNjNhNGZjNTlh
M2VjOGRjM2RiZi4uM2U3ZDIwODE2NTRkODYxYzhkOWUxODFjY2UyMDA2ZDE3ZmI5NWY1MyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3Bw
CkBAIC0zNSwxMzIgKzM1LDI2IEBACiAKIGNvbnN0IENsYXNzSW5mbyBKU0FycmF5SXRlcmF0b3I6
OnNfaW5mbyA9IHsgIkFycmF5SXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVU
SE9EX1RBQkxFKEpTQXJyYXlJdGVyYXRvcikgfTsKIAotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHRLZXkoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlKEV4ZWNTdGF0
ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5l
eHRHZW5lcmljKEV4ZWNTdGF0ZSopOwotCi12b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBBcnJheUl0ZXJhdGlv
bktpbmQga2luZCwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KQordm9pZCBKU0FycmF5SXRlcmF0
b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBBcnJheUl0ZXJhdGlv
bktpbmQga2luZCwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KQogewogICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7Ci0gICAgbV9pdGVy
YXRpb25LaW5kID0ga2luZDsKLSAgICBtX2l0ZXJhdGVkT2JqZWN0LnNldCh2bSwgdGhpcywgaXRl
cmF0ZWRPYmplY3QpOworCisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVy
YXRlZE9iamVjdFByaXZhdGVOYW1lLCBpdGVyYXRlZE9iamVjdCk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5hcnJheUl0ZXJhdG9yTmV4dEluZGV4UHJpdmF0ZU5hbWUsIGpz
TnVtYmVyKDApKTsKKyAgICBKU1N0cmluZyogaXRlbUtpbmQgPSBudWxscHRyOwogICAgIHN3aXRj
aCAoa2luZCkgewogICAgIGNhc2UgQXJyYXlJdGVyYXRlS2V5OgotICAgICAgICBKU0NfTkFUSVZF
X0lOVFJJTlNJQ19GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRl
TmFtZSwgYXJyYXlJdGVyYXRvck5leHRLZXksIERvbnRFbnVtLCAwLCBBcnJheUl0ZXJhdG9yTmV4
dEtleUludHJpbnNpYyk7CisgICAgICAgIGl0ZW1LaW5kID0ganNOb250cml2aWFsU3RyaW5nKCZ2
bSwgQVNDSUlMaXRlcmFsKCJrZXkiKSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQXJyYXlJ
dGVyYXRlVmFsdWU6Ci0gICAgICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OKHZtLnBy
b3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yTmV4dFZh
bHVlLCBEb250RW51bSwgMCwgQXJyYXlJdGVyYXRvck5leHRWYWx1ZUludHJpbnNpYyk7CisgICAg
ICAgIGl0ZW1LaW5kID0ganNOb250cml2aWFsU3RyaW5nKCZ2bSwgQVNDSUlMaXRlcmFsKCJ2YWx1
ZSIpKTsKICAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgSlNDX05BVElWRV9J
TlRSSU5TSUNfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5h
bWUsIGFycmF5SXRlcmF0b3JOZXh0R2VuZXJpYywgRG9udEVudW0sIDAsIEFycmF5SXRlcmF0b3JO
ZXh0R2VuZXJpY0ludHJpbnNpYyk7CisgICAgY2FzZSBBcnJheUl0ZXJhdGVLZXlWYWx1ZToKKyAg
ICAgICAgaXRlbUtpbmQgPSBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImtl
eSt2YWx1ZSIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotCi19Ci0gICAgCi0gICAgCi12b2lk
IEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9y
JiB2aXNpdG9yKQotewotICAgIEpTQXJyYXlJdGVyYXRvciogdGhpc09iamVjdCA9IGpzQ2FzdDxK
U0FycmF5SXRlcmF0b3IqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRTKHRo
aXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0LCB2
aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVyYXRlZE9iamVj
dCk7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjcmVhdGVJdGVyYXRvclJlc3VsdChDYWxs
RnJhbWUqIGNhbGxGcmFtZSwgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQsIHNpemVfdCBpbmRleCwg
SlNWYWx1ZSByZXN1bHQsIGJvb2wgZG9uZSkKLXsKLSAgICBpZiAoZG9uZSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnZtKCkuaXRlcmF0aW9uVGVybWluYXRvci5n
ZXQoKSk7Ci0gICAgCi0gICAgc3dpdGNoIChraW5kICYgfkFycmF5SXRlcmF0ZVNwYXJzZVRhZykg
ewotICAgIGNhc2UgQXJyYXlJdGVyYXRlS2V5OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIAotICAgIGNhc2UgQXJyYXlJdGVyYXRlVmFs
dWU6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAgCi0g
ICAgY2FzZSBBcnJheUl0ZXJhdGVLZXlWYWx1ZTogewotICAgICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciBhcmdzOwotICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihpbmRleCkpOwotICAgICAg
ICBhcmdzLmFwcGVuZChyZXN1bHQpOwotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0ID0gY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCAwLCBnbG9iYWxPYmpl
Y3QsIGFyZ3MpKTsKLSAgICAgICAgCi0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZSgpKTsKLX0KLQotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIEpT
QXJyYXlJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlJdGVyYXRvcio+
KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghaXRlcmF0b3IpIHsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIEFycmF5SXRl
cmF0b3IubmV4dCgpIG9uIGEgbm9uLUFycmF5SXRlcmF0b3Igb2JqZWN0IikpKTsKLSAgICB9Ci0g
ICAgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0ID0gaXRlcmF0b3ItPml0ZXJhdGVkT2JqZWN0KCk7
Ci0gICAgc2l6ZV90IGluZGV4ID0gaXRlcmF0b3ItPm5leHRJbmRleCgpOwotICAgIEFycmF5SXRl
cmF0aW9uS2luZCBraW5kID0gaXRlcmF0b3ItPml0ZXJhdGlvbktpbmQoKTsKLSAgICBKU1ZhbHVl
IGpzTGVuZ3RoID0gSlNWYWx1ZShpdGVyYXRlZE9iamVjdCkuZ2V0KGNhbGxGcmFtZSwgY2FsbEZy
YW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAg
Ci0gICAgc2l6ZV90IGxlbmd0aCA9IGpzTGVuZ3RoLnRvVUludDMyKGNhbGxGcmFtZSk7Ci0gICAg
aWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdWxsKCkpOwotICAgIAotICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKLSAgICAg
ICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1
bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwganNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci0gICAgfQot
ICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGl0ZXJhdGVkT2JqZWN0LT50cnlHZXRJbmRleFF1aWNr
bHkoaW5kZXgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT5zZXROZXh0SW5kZXgoaW5kZXggKyAxKTsK
LSAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KGNhbGxGcmFtZSwga2luZCwgaW5k
ZXgsIHJlc3VsdCwgZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9IGpz
VW5kZWZpbmVkKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoaXRlcmF0ZWRPYmplY3QpOwotICAg
IGlmIChraW5kID4gQXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7Ci0gICAgICAgIC8vIFdlIGFzc3Vt
ZSB0aGF0IHRoZSBpbmRleGVkIHByb3BlcnR5IHdpbGwgYmUgYW4gb3duIHByb3BlcnR5IHNvIGNh
Y2hlIHRoZSBnZXRPd25Qcm9wZXJ0eQotICAgICAgICAvLyBtZXRob2QgbG9jYWxseQotICAgICAg
ICBhdXRvIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXggPSBpdGVyYXRlZE9iamVjdC0+bWV0aG9k
VGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleDsKLSAgICAgICAgd2hpbGUgKGluZGV4
IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlTbG90QnlJbmRleChp
dGVyYXRlZE9iamVjdCwgY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpIHsKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGl0ZXJhdGVkT2JqZWN0
LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAg
ICAgfQotICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWRPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxs
RnJhbWUsIGluZGV4LCBzbG90KSkKLSAgICAgICAgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShjYWxs
RnJhbWUsIGluZGV4KTsKLSAgICAKLSAgICBpZiAoaW5kZXggPT0gbGVuZ3RoKQotICAgICAgICBp
dGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgZWxzZQotICAgICAgICBpdGVyYXRvci0+c2V0TmV4dElu
ZGV4KGluZGV4ICsgMSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KGNhbGxGcmFt
ZSwga2luZCwgaW5kZXgsIGpzVW5kZWZpbmVkKCksIGluZGV4ID09IGxlbmd0aCk7Ci19Ci0gICAg
Ci1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0S2V5KENhbGxG
cmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dChjYWxsRnJh
bWUpOwotfQotICAgIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9y
TmV4dFZhbHVlKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBhcnJheUl0ZXJh
dG9yTmV4dChjYWxsRnJhbWUpOwotfQotICAgIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBhcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAg
cmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7CisgICAgcHV0RGlyZWN0KHZtLCB2
bS5wcm9wZXJ0eU5hbWVzLT5hcnJheUl0ZXJhdGlvbktpbmRQcml2YXRlTmFtZSwgaXRlbUtpbmQp
OwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5SXRlcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVy
YXRvci5oCmluZGV4IDdiYjBmYzVkMzY5Y2MwNzQxMjM2N2I2Yjk4NTljYTk1YjY1MWQ2OGMuLjJl
OTc2YmU0NTg4YTJjODNhY2I3ZTAzMmQxNTg4MmRjMmEwYTFiNDggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCkBAIC0zMywxMSArMzMsNyBA
QAogZW51bSBBcnJheUl0ZXJhdGlvbktpbmQgOiB1aW50MzJfdCB7CiAgICAgQXJyYXlJdGVyYXRl
S2V5LAogICAgIEFycmF5SXRlcmF0ZVZhbHVlLAotICAgIEFycmF5SXRlcmF0ZUtleVZhbHVlLAot
ICAgIEFycmF5SXRlcmF0ZVNwYXJzZVRhZyA9IDQsCi0gICAgQXJyYXlJdGVyYXRlU3BhcnNlS2V5
LAotICAgIEFycmF5SXRlcmF0ZVNwYXJzZVZhbHVlLAotICAgIEFycmF5SXRlcmF0ZVNwYXJzZUtl
eVZhbHVlCisgICAgQXJyYXlJdGVyYXRlS2V5VmFsdWUKIH07CiAKIGNsYXNzIEpTQXJyYXlJdGVy
YXRvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKQEAgLTU5LDMwICs1NSwxNCBAQCBjbGFz
cyBKU0FycmF5SXRlcmF0b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIHJl
dHVybiBpbnN0YW5jZTsKICAgICB9CiAKLSAgICBBcnJheUl0ZXJhdGlvbktpbmQgaXRlcmF0aW9u
S2luZCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0aW9uS2luZDsgfQotICAgIEpTT2JqZWN0KiBp
dGVyYXRlZE9iamVjdCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0ZWRPYmplY3QuZ2V0KCk7IH0K
LSAgICBzaXplX3QgbmV4dEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0SW5kZXg7IH0KLSAg
ICB2b2lkIHNldE5leHRJbmRleChzaXplX3QgbmV4dEluZGV4KSB7IG1fbmV4dEluZGV4ID0gbmV4
dEluZGV4OyB9Ci0gICAgdm9pZCBmaW5pc2goKSB7IG1fbmV4dEluZGV4ID0gc3RkOjpudW1lcmlj
X2xpbWl0czx1aW50MzJfdD46Om1heCgpOyB9Ci0gICAgCiAgICAgdXNpbmcgSlNOb25GaW5hbE9i
amVjdDo6YXJyYXlTdG9yYWdlT3JOdWxsOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJ
dGVyYXRpb25LaW5kKCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlJdGVyYXRvciwg
bV9pdGVyYXRpb25LaW5kKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJdGVyYXRl
ZE9iamVjdCgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5SXRlcmF0b3IsIG1faXRl
cmF0ZWRPYmplY3QpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk5leHRJbmRleCgp
IHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5SXRlcmF0b3IsIG1fbmV4dEluZGV4KTsg
fQotCiBwcml2YXRlOgogICAgIEpTQXJyYXlJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX25leHRJ
bmRleCgwKQogICAgIHsKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBBcnJheUl0ZXJhdGlvbktpbmQsIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVj
dCk7Ci0gICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYp
OwotICAgIAotICAgIEFycmF5SXRlcmF0aW9uS2luZCBtX2l0ZXJhdGlvbktpbmQ7Ci0gICAgV3Jp
dGVCYXJyaWVyPEpTT2JqZWN0PiBtX2l0ZXJhdGVkT2JqZWN0OwotICAgIHVpbnQzMl90IG1fbmV4
dEluZGV4OwogfTsKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCmluZGV4IGYxYTJlNTYyZjlhYmY0MDJhYjYzOGRj
MDljNmVmYzM4MGQxYzViNGQuLmFmZGZjMjdkMjBhODY1YTM0M2FmMjFkNWM3NDg4ZGM0MzY1YjE3
MTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNv
bnN0cnVjdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21p
c2VDb25zdHJ1Y3Rvci5jcHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMp
CiAKICNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTUHJvbWlzZS5oIgpAQCAtMjMyLDEwNCArMjMzLDU3IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmVqZWN0KEV4ZWNT
dGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVkLT5wcm9taXNl
KCkpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVj
dG9yRnVuY1JhY2UoRXhlY1N0YXRlKiBleGVjKQorc3RhdGljIHZvaWQgcGVyZm9ybVByb21pc2VS
YWNlTG9vcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IsIEpTUHJvbWlzZURlZmVy
cmVkKiBkZWZlcnJlZCwgSlNWYWx1ZSBDKQogewotICAgIC8vIC0tIFByb21pc2UucmFjZShpdGVy
YWJsZSkgLS0KLSAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAg
Vk0mIHZtID0gZXhlYy0+dm0oKTsKLQotICAgIC8vIDEuIExldCAnQycgYmUgdGhlIHRoaXMgdmFs
dWUuCi0gICAgSlNWYWx1ZSBDID0gZXhlYy0+dGhpc1ZhbHVlKCk7Ci0KLSAgICAvLyAyLiBMZXQg
J2RlZmVycmVkJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0RGVmZXJyZWQoQykuCi0gICAg
SlNWYWx1ZSBkZWZlcnJlZFZhbHVlID0gY3JlYXRlSlNQcm9taXNlRGVmZXJyZWRGcm9tQ29uc3Ry
dWN0b3IoZXhlYywgQyk7Ci0KLSAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChkZWZlcnJlZCkuCi0g
ICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpOwotCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0g
anNDYXN0PEpTUHJvbWlzZURlZmVycmVkKj4oZGVmZXJyZWRWYWx1ZSk7Ci0KLSAgICAvLyA0LiBM
ZXQgJ2l0ZXJhdG9yJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0SXRlcmF0b3IoaXRlcmFi
bGUpLgotICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5jdGlvbiA9IGl0ZXJhYmxlLmdldChleGVjLCB2
bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0
aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0KLSAgICBDYWxsRGF0YSBpdGVyYXRvckZ1bmN0aW9uQ2Fs
bERhdGE7Ci0gICAgQ2FsbFR5cGUgaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERh
dGEoaXRlcmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhKTsKLSAgICBpZiAo
aXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewotICAgICAgICB0aHJv
d1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRS
ZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLSAgICB9Ci0KLSAgICBBcmdMaXN0IGl0ZXJhdG9y
RnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAgSlNWYWx1ZSBpdGVyYXRvciA9IGNhbGwoZXhlYywgaXRl
cmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlLCBpdGVyYXRvckZ1bmN0aW9u
Q2FsbERhdGEsIGl0ZXJhYmxlLCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzKTsKLQotICAgIC8v
IDUuIFJlamVjdElmQWJydXB0KGl0ZXJhdG9yLCBkZWZlcnJlZCkuCi0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVj
dGlvbihleGVjLCBkZWZlcnJlZCkpOwotCiAgICAgLy8gNi4gUmVwZWF0CiAgICAgZG8gewogICAg
ICAgICAvLyBpLiBMZXQgJ25leHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclN0
ZXAoaXRlcmF0b3IpLgotICAgICAgICBKU1ZhbHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJhdG9yLmdl
dChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1l
KTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLQotICAg
ICAgICBDYWxsRGF0YSBuZXh0RnVuY3Rpb25DYWxsRGF0YTsKLSAgICAgICAgQ2FsbFR5cGUgbmV4
dEZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlv
bkNhbGxEYXRhKTsKLSAgICAgICAgaWYgKG5leHRGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBl
Tm9uZSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwot
ICAgICAgICB9CisgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVy
YXRvcik7CiAKLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbmV4dEZ1bmN0aW9uQXJndW1l
bnRzOwotICAgICAgICBuZXh0RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKGpzVW5kZWZpbmVkKCkp
OwotICAgICAgICBKU1ZhbHVlIG5leHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1
bmN0aW9uQ2FsbFR5cGUsIG5leHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0
aW9uQXJndW1lbnRzKTsKLSAgICAgICAgCiAgICAgICAgIC8vIGlpLiBSZWplY3RJZkFicnVwdChu
ZXh0LCBkZWZlcnJlZCkuCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVy
cmVkKSk7Ci0gICAgCisgICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8gaWlpLiBJZiAn
bmV4dCcgaXMgZmFsc2UsIHJldHVybiBkZWZlcnJlZC5bW1Byb21pc2VdXS4KLSAgICAgICAgLy8g
Tm90ZTogV2UgaW1wbGVtZW50IHRoaXMgYXMgYW4gaXRlcmF0aW9uVGVybWluYXRvcgotICAgICAg
ICBpZiAobmV4dCA9PSB2bS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKQotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZWZlcnJlZC0+cHJvbWlzZSgpKTsKLSAgICAgICAgCisg
ICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAg
ICAvLyBpdi4gTGV0ICduZXh0VmFsdWUnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRv
clZhbHVlKG5leHQpLgogICAgICAgICAvLyB2LiBSZWplY3RJZkFicnVwdChuZXh0VmFsdWUsIGRl
ZmVycmVkKS4KLSAgICAgICAgLy8gTm90ZTogJ25leHQnIGlzIGFscmVhZHkgdGhlIHZhbHVlLCBz
byB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuCisgICAgICAgIEpTVmFsdWUgbmV4dFZhbHVl
ID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIHZpLiBMZXQgJ25leHRQ
cm9taXNlJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSW52b2tlKEMsICJyZXNvbHZlIiwgKG5l
eHRWYWx1ZSkpLgotICAgICAgICBKU1ZhbHVlIHJlc29sdmVGdW5jdGlvbiA9IEMuZ2V0KGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPnJlc29sdmUpOworICAgICAgICBKU1ZhbHVlIHJlc29sdmVGdW5j
dGlvbiA9IEMuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+cmVzb2x2ZSk7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgQ2FsbERhdGEgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGE7CiAg
ICAgICAgIENhbGxUeXBlIHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVz
b2x2ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgICAgIGlmIChyZXNv
bHZlRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1
cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgfQogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHJlc29sdmVGdW5jdGlvbkFyZ3Vt
ZW50czsKLSAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChuZXh0KTsKKyAg
ICAgICAgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChuZXh0VmFsdWUpOwogICAgICAg
ICBKU1ZhbHVlIG5leHRQcm9taXNlID0gY2FsbChleGVjLCByZXNvbHZlRnVuY3Rpb24sIHJlc29s
dmVGdW5jdGlvbkNhbGxUeXBlLCByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YSwgQywgcmVzb2x2ZUZ1
bmN0aW9uQXJndW1lbnRzKTsKIAogICAgICAgICAvLyB2aWkuIFJlamVjdElmQWJydXB0KG5leHRQ
cm9taXNlLCBkZWZlcnJlZCkuCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRl
ZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gdmlpaS4gTGV0ICdy
ZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJbnZva2UobmV4dFByb21pc2UsICJ0aGVu
IiwgKGRlZmVycmVkLltbUmVzb2x2ZV1dLCBkZWZlcnJlZC5bW1JlamVjdF1dKSkuCi0gICAgICAg
IEpTVmFsdWUgdGhlbkZ1bmN0aW9uID0gbmV4dFByb21pc2UuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5
TmFtZXMtPnRoZW4pOworICAgICAgICBKU1ZhbHVlIHRoZW5GdW5jdGlvbiA9IG5leHRQcm9taXNl
LmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnRoZW4pOwogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIENhbGxEYXRhIHRoZW5GdW5jdGlvbkNhbGxEYXRhOwogICAgICAgICBDYWxsVHlw
ZSB0aGVuRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKHRoZW5GdW5jdGlvbiwgdGhlbkZ1
bmN0aW9uQ2FsbERhdGEpOwogICAgICAgICBpZiAodGhlbkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2Fs
bFR5cGVOb25lKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVk
KSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciB0aGVuRnVuY3Rpb25Bcmd1bWVudHM7CkBAIC0zNDAsMTQgKzI5NCwxMyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY1JhY2Uo
RXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIC8vIGl4LiBSZWplY3RJZkFicnVwdChyZXN1bHQs
IGRlZmVycmVkKS4KICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQp
KTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICB9IHdoaWxlICh0cnVlKTsKIH0KIAotRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0
YXRlKiBleGVjKQorRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1
Y3RvckZ1bmNSYWNlKEV4ZWNTdGF0ZSogZXhlYykKIHsKLSAgICAvLyAtLSBQcm9taXNlLmFsbChp
dGVyYWJsZSkgLS0KLQorICAgIC8vIC0tIFByb21pc2UucmFjZShpdGVyYWJsZSkgLS0KICAgICBK
U1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKIApAQCAtMzYxLDkgKzMxNCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
SlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRl
ZmluZWQoKSk7CiAKLSAgICAvLyBOT1RFOiBBIG5vbi1hYnJ1cHQgY29tcGxldGlvbiBvZiBjcmVh
dGVKU1Byb21pc2VEZWZlcnJlZEZyb21Db25zdHJ1Y3RvciBpbXBsaWVzIHRoYXQKLSAgICAvLyBD
IGFuZCBkZWZlcnJlZFZhbHVlIGFyZSBvYmplY3RzLgotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0
ID0gYXNPYmplY3QoQyk7CiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0ganNDYXN0
PEpTUHJvbWlzZURlZmVycmVkKj4oZGVmZXJyZWRWYWx1ZSk7CiAKICAgICAvLyA0LiBMZXQgJ2l0
ZXJhdG9yJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0SXRlcmF0b3IoaXRlcmFibGUpLgpA
QCAtMzg1LDQwICszMzUsMzcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21p
c2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rp
b24oZXhlYywgZGVmZXJyZWQpKTsKIAorICAgIHBlcmZvcm1Qcm9taXNlUmFjZUxvb3AoZXhlYywg
aXRlcmF0b3IsIGRlZmVycmVkLCBDKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIGl0ZXJhdG9yQ2xvc2UoZXhlYywgaXRlcmF0b3IpOworICAgIGlmIChleGVjLT5oYWRF
eGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rp
b24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVk
LT5wcm9taXNlKCkpOworfQorCitzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJvbWlzZUFsbChFeGVj
U3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IsIEpTVmFsdWUgQywgSlNQcm9taXNlRGVmZXJy
ZWQqIGRlZmVycmVkKQoreworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gYXNPYmplY3QoQyk7
CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKwogICAgIC8vIDYuIExldCAndmFsdWVzJyBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgQXJyYXlDcmVhdGUoMCkuCiAgICAgSlNBcnJheSogdmFsdWVz
ID0gY29uc3RydWN0RW1wdHlBcnJheShleGVjLCBudWxscHRyLCB0aGlzT2JqZWN0LT5nbG9iYWxP
YmplY3QoKSk7Ci0gICAgCisKICAgICAvLyA3LiBMZXQgJ2NvdW50ZG93bkhvbGRlcicgYmUgUmVj
b3JkIHsgW1tDb3VudGRvd25dXTogMCB9LgogICAgIE51bWJlck9iamVjdCogY291bnRkb3duSG9s
ZGVyID0gY29uc3RydWN0TnVtYmVyKGV4ZWMsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBK
U1ZhbHVlKDApKTsKLSAgICAKKwogICAgIC8vIDguIExldCAnaW5kZXgnIGJlIDAuCiAgICAgdW5z
aWduZWQgaW5kZXggPSAwOwotICAgIAorCiAgICAgLy8gOS4gUmVwZWF0LgogICAgIGRvIHsKICAg
ICAgICAgLy8gaS4gTGV0ICduZXh0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSXRlcmF0b3JT
dGVwKGl0ZXJhdG9yKS4KLSAgICAgICAgSlNWYWx1ZSBuZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5n
ZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFt
ZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0KLSAg
ICAgICAgQ2FsbERhdGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIG5l
eHRGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rp
b25DYWxsRGF0YSk7Ci0gICAgICAgIGlmIChuZXh0RnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlw
ZU5vbmUpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG5leHRGdW5jdGlvbkFy
Z3VtZW50czsKLSAgICAgICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChqc1VuZGVmaW5l
ZCgpKTsKLSAgICAgICAgSlNWYWx1ZSBuZXh0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5l
eHRGdW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRG
dW5jdGlvbkFyZ3VtZW50cyk7Ci0gICAgICAgIAotICAgICAgICAvLyBpaS4gUmVqZWN0SWZBYnJ1
cHQobmV4dCwgZGVmZXJyZWQpLgorICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAo
ZXhlYywgaXRlcmF0b3IpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZl
cnJlZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgLy8g
aWlpLiBJZiAnbmV4dCcgaXMgZmFsc2UsCi0gICAgICAgIC8vIE5vdGU6IFdlIGltcGxlbWVudCB0
aGlzIGFzIGFuIGl0ZXJhdGlvblRlcm1pbmF0b3IKLSAgICAgICAgaWYgKG5leHQgPT0gdm0uaXRl
cmF0aW9uVGVybWluYXRvci5nZXQoKSkgeworICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkpIHsK
ICAgICAgICAgICAgIC8vIGEuIElmICdpbmRleCcgaXMgMCwKICAgICAgICAgICAgIGlmICghaW5k
ZXgpIHsKICAgICAgICAgICAgICAgICAvLyBhLiBMZXQgJ3Jlc29sdmVSZXN1bHQnIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kCkBAIC00MjgsNDAg
KzM3NSw0NCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVj
dG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgICAgICAgICAvLyBiLiBSZXR1
cm5JZkFicnVwdChyZXNvbHZlUmVzdWx0KS4KICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNVbmRlZmluZWQoKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGIuIFJldHVy
biBkZWZlcnJlZC5bW1Byb21pc2VdXS4KLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoZGVmZXJyZWQtPnByb21pc2UoKSk7CisgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnBy
b21pc2UoKTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBpdi4gTGV0ICduZXh0
VmFsdWUnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclZhbHVlKG5leHQpLgogICAg
ICAgICAvLyB2LiBSZWplY3RJZkFicnVwdChuZXh0VmFsdWUsIGRlZmVycmVkKS4KLSAgICAgICAg
Ly8gTm90ZTogJ25leHQnIGlzIGFscmVhZHkgdGhlIHZhbHVlLCBzbyB0aGVyZSBpcyBub3RoaW5n
IHRvIGRvIGhlcmUuCisgICAgICAgIEpTVmFsdWUgbmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShl
eGVjLCBuZXh0KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICAgICAgdmFsdWVzLT5wdXNoKGV4ZWMsIGpz
VW5kZWZpbmVkKCkpOwogCiAgICAgICAgIC8vIHZpLiBMZXQgJ25leHRQcm9taXNlJyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgSW52b2tlKEMsICJyZXNvbHZlIiwgKG5leHRWYWx1ZSkpLgogICAg
ICAgICBKU1ZhbHVlIHJlc29sdmVGdW5jdGlvbiA9IEMuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPnJlc29sdmUpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJl
ZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgQ2FsbERh
dGEgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIHJlc29sdmVGdW5j
dGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVzb2x2ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rp
b25DYWxsRGF0YSk7CiAgICAgICAgIGlmIChyZXNvbHZlRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQp
KTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKICAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzOwotICAgICAg
ICByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKG5leHQpOworICAgICAgICByZXNvbHZl
RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKG5leHRWYWx1ZSk7CiAgICAgICAgIEpTVmFsdWUgbmV4
dFByb21pc2UgPSBjYWxsKGV4ZWMsIHJlc29sdmVGdW5jdGlvbiwgcmVzb2x2ZUZ1bmN0aW9uQ2Fs
bFR5cGUsIHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhLCBDLCByZXNvbHZlRnVuY3Rpb25Bcmd1bWVu
dHMpOwogCiAgICAgICAgIC8vIHZpaS4gUmVqZWN0SWZBYnJ1cHQobmV4dFByb21pc2UsIGRlZmVy
cmVkKS4KICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAg
ICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIC8vIHZpaWkuIExldCAn
Y291bnRkb3duRnVuY3Rpb24nIGJlIGEgbmV3IGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBhcyBk
ZWZpbmVkIGluIFByb21pc2UuYWxsIENvdW50ZG93biBGdW5jdGlvbnMuCiAgICAgICAgIEpTRnVu
Y3Rpb24qIGNvdW50ZG93bkZ1bmN0aW9uID0gY3JlYXRlUHJvbWlzZUFsbENvdW50ZG93bkZ1bmN0
aW9uKHZtLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIAorCiAgICAgICAg
IC8vIGl4LiBTZXQgdGhlIFtbSW5kZXhdXSBpbnRlcm5hbCBzbG90IG9mICdjb3VudGRvd25GdW5j
dGlvbicgdG8gJ2luZGV4Jy4KICAgICAgICAgY291bnRkb3duRnVuY3Rpb24tPnB1dERpcmVjdCh2
bSwgdm0ucHJvcGVydHlOYW1lcy0+aW5kZXhQcml2YXRlTmFtZSwgSlNWYWx1ZShpbmRleCkpOwog
CkBAIC00NzcsMTMgKzQyOCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJv
bWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIC8vIHhpaWku
IExldCAncmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSW52b2tlKG5leHRQcm9taXNl
LCAidGhlbiIsIChjb3VudGRvd25GdW5jdGlvbiwgZGVmZXJyZWQuW1tSZWplY3RdXSkpLgogICAg
ICAgICBKU1ZhbHVlIHRoZW5GdW5jdGlvbiA9IG5leHRQcm9taXNlLmdldChleGVjLCB2bS5wcm9w
ZXJ0eU5hbWVzLT50aGVuKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVm
ZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIENh
bGxEYXRhIHRoZW5GdW5jdGlvbkNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSB0aGVuRnVuY3Rp
b25DYWxsVHlwZSA9IGdldENhbGxEYXRhKHRoZW5GdW5jdGlvbiwgdGhlbkZ1bmN0aW9uQ2FsbERh
dGEpOwogICAgICAgICBpZiAodGhlbkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7
CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIHRoZW5GdW5jdGlvbkFyZ3VtZW50czsKQEAgLTQ5NCw3ICs0NDUsNyBAQCBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChF
eGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgLy8geGl2LiBSZWplY3RJZkFicnVwdChyZXN1bHQs
IGRlZmVycmVkKS4KICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQp
KTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIC8vIHh2LiBT
ZXQgaW5kZXggdG8gaW5kZXggKyAxLgogICAgICAgICBpbmRleCsrOwpAQCAtNTAzLDYgKzQ1NCw1
NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVu
Y0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIHVpbnQzMl90IG5ld0NvdW50ZG93blZhbHVl
ID0gY291bnRkb3duSG9sZGVyLT5pbnRlcm5hbFZhbHVlKCkuYXNVSW50MzIoKSArIDE7CiAgICAg
ICAgIGNvdW50ZG93bkhvbGRlci0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgSlNWYWx1ZShuZXdDb3Vu
dGRvd25WYWx1ZSkpOwogICAgIH0gd2hpbGUgKHRydWUpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCit7
CisgICAgLy8gLS0gUHJvbWlzZS5hbGwoaXRlcmFibGUpIC0tCisKKyAgICBKU1ZhbHVlIGl0ZXJh
YmxlID0gZXhlYy0+YXJndW1lbnQoMCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAg
IC8vIDEuIExldCAnQycgYmUgdGhlIHRoaXMgdmFsdWUuCisgICAgSlNWYWx1ZSBDID0gZXhlYy0+
dGhpc1ZhbHVlKCk7CisKKyAgICAvLyAyLiBMZXQgJ2RlZmVycmVkJyBiZSB0aGUgcmVzdWx0IG9m
IGNhbGxpbmcgR2V0RGVmZXJyZWQoQykuCisgICAgSlNWYWx1ZSBkZWZlcnJlZFZhbHVlID0gY3Jl
YXRlSlNQcm9taXNlRGVmZXJyZWRGcm9tQ29uc3RydWN0b3IoZXhlYywgQyk7CisKKyAgICAvLyAz
LiBSZXR1cm5JZkFicnVwdChkZWZlcnJlZCkuCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAg
Ly8gTk9URTogQSBub24tYWJydXB0IGNvbXBsZXRpb24gb2YgY3JlYXRlSlNQcm9taXNlRGVmZXJy
ZWRGcm9tQ29uc3RydWN0b3IgaW1wbGllcyB0aGF0CisgICAgLy8gQyBhbmQgZGVmZXJyZWRWYWx1
ZSBhcmUgb2JqZWN0cy4KKyAgICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBqc0Nhc3Q8
SlNQcm9taXNlRGVmZXJyZWQqPihkZWZlcnJlZFZhbHVlKTsKKworICAgIC8vIDQuIExldCAnaXRl
cmF0b3InIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBHZXRJdGVyYXRvcihpdGVyYWJsZSkuCisg
ICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0KGV4ZWMsIHZtLnByb3Bl
cnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhl
YywgZGVmZXJyZWQpKTsKKworICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsK
KyAgICBDYWxsVHlwZSBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShpdGVy
YXRvckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEpOworICAgIGlmIChpdGVyYXRv
ckZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlv
bihleGVjLCBkZWZlcnJlZCkpOworICAgIH0KKworICAgIEFyZ0xpc3QgaXRlcmF0b3JGdW5jdGlv
bkFyZ3VtZW50czsKKyAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBpdGVyYXRvckZ1
bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0
YSwgaXRlcmFibGUsIGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOworCisgICAgLy8gNS4gUmVq
ZWN0SWZBYnJ1cHQoaXRlcmF0b3IsIGRlZmVycmVkKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4
ZWMsIGRlZmVycmVkKSk7CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHBlcmZvcm1Qcm9taXNlQWxs
KGV4ZWMsIGl0ZXJhdG9yLCBDLCBkZWZlcnJlZCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlv
bigpKSB7CisgICAgICAgIGl0ZXJhdG9yQ2xvc2UoZXhlYywgaXRlcmF0b3IpOworICAgICAgICBp
ZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgIH0KKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7CiB9CiAKIEpTUHJvbWlzZSogY29uc3RydWN0UHJvbWlz
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTRnVuY3Rp
b24qIHJlc29sdmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGIyMjBiOTg3NTg4NWM0MmY5Y2U2MzhmMzIy
MjQ3OTJjMzI3NjEwMTcuLjgwNjdjYjIwZjBjMzdkNjZhNzc4YmU5ZDFlZjZhZmRiM2M2ZGU4Mjgg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJv
dG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRv
clByb3RvdHlwZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJNYXBJdGVyYXRvclByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0Nl
bGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgpAQCAtNDYsNyArNDcsNyBA
QCB2b2lkIE1hcEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlw
ZSh0aGlzKTsKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRl
cmF0b3JQcml2YXRlTmFtZSwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IsIERvbnRF
bnVtLCAwKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yTmV4dFByaXZhdGVOYW1lLCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51
bSwgMCk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBN
YXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7CiB9CiAKIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpCkBAIC01OSwxMiArNjAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSogY2FsbEZy
YW1lKQogICAgIEpTTWFwSXRlcmF0b3IqIGl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU01hcEl0
ZXJhdG9yKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFpdGVyYXRvcikKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFT
Q0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgTWFwSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1hcEl0
ZXJhdG9yIG9iamVjdCIpKSk7Ci0gICAgCisKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAo
aXRlcmF0b3ItPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRl
SXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKICAgICBpdGVyYXRv
ci0+ZmluaXNoKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnZtKCku
aXRlcmF0aW9uVGVybWluYXRvci5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
cmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOwog
fQogCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJh
dG9yUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJh
dG9yUHJvdG90eXBlLmNwcAppbmRleCA1NzNhY2ZhNWNkNzY0YjA5ZWU3NTQzYjM0N2I0OWE1MTEx
ZTcwNTM3Li41MjYxYmYzY2FjYzFkNGUwZTQ1NzU1MWEwMjJkZTY3YzkxOTRkZmY5IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5
cGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U2V0SXRlcmF0b3JQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5l
cy5oIgogI2luY2x1ZGUgIkpTU2V0SXRlcmF0b3IuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgdm9pZCBT
ZXRJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0KQogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7
CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJp
dmF0ZU5hbWUsIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7
Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQ
cml2YXRlTmFtZSwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOwor
ICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgU2V0SXRlcmF0
b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQpAQCAtNjIsMTAgKzYzLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBTZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVND
SUlMaXRlcmFsKCJDYW5ub3QgY2FsbCBTZXRJdGVyYXRvci5uZXh0KCkgb24gYSBub24tU2V0SXRl
cmF0b3Igb2JqZWN0IikpKTsKIAogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJl
c3VsdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwg
cmVzdWx0LCBmYWxzZSkpOwogICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKTsK
KyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZy
YW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvVk0uY3BwCmluZGV4IDBmNzM1NDBmNDM1OTZhNzI0NmUyOTQyNDJiZTA1MmExZDQ1NjZk
ZjguLjRlNzI1OTlkOGQyN2VmNWMzODc0ZmIxMjU2NzMwMjM5NDNjMTQxYTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9WTS5jcHAKQEAgLTM5NiwxMCArMzk2LDYgQEAgc3RhdGljIFRodW5r
R2VuZXJhdG9yIHRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMp
CiAgICAgICAgIHJldHVybiBsb2dUaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIElNdWxJbnRyaW5z
aWM6CiAgICAgICAgIHJldHVybiBpbXVsVGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBBcnJheUl0
ZXJhdG9yTmV4dEtleUludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0
S2V5VGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdG9yTmV4dFZhbHVlSW50cmlu
c2ljOgotICAgICAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9y
OwogICAgIGRlZmF1bHQ6CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBjZmE3NDFm
ZDQzMTA4NDdkMGUwMTMzMTZmMGFhNGQ0MGE3Mzc5MGIyLi43OGRhMmMyNzk3MTVmNTdjZTc5M2Yx
ZTI3ODI4ZDVkNTUxNjc3MjUzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDcgQEAKKzIwMTUtMDItMTYgIFl1
c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKKyAgICAgICAgVXBncmFkZSBF
UzYgSXRlcmF0b3IgaW50ZXJmYWNlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTQxMzUxCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBqcy9hcnJheS1pdGVyYXRvcnMtbmV4dC1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIGpzL2FycmF5LWl0ZXJhdG9ycy1uZXh0Lmh0bWw6IEFkZGVkLgorCisg
ICAgICAgIFJldml2ZSB0aGUgb2xkZXIgQXJyYXkgaXRlcmF0b3IgdGVzdHMgdGhhdCBtYW51YWxs
eSBjYWxsICduZXh0JyBtZXRob2QuCisKKyAgICAgICAgKiBqcy9jdXN0b20taXRlcmF0b3JzLWV4
cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvY3VzdG9tLWl0ZXJhdG9ycy5odG1sOiBB
ZGRlZC4KKworICAgICAgICBUaGlzIHRlc3RzIHRoZSBiZWhhdmlvciBvZiBjdXN0b20gaXRlcmF0
b3JzLgorICAgICAgICAnbmV4dCcgYW5kICdyZXR1cm4nIG9mIGl0ZXJhdG9yIHdvcmsgd2l0aCBm
b3Itb2YuCisKKyAgICAgICAgKiBqcy9pdGVyYXRvcnMtc2hhcGUtZXhwZWN0ZWQudHh0OiBBZGRl
ZC4KKyAgICAgICAgKiBqcy9pdGVyYXRvcnMtc2hhcGUuaHRtbDogQWRkZWQuCisKKyAgICAgICAg
VGhpcyB0ZXN0cyB0aGUgc2hhcGUgb2YgaXRlcmF0b3JzOyBpdGVyYXRvcnMgb2YgQXJyYXkgaGF2
ZSAnbmV4dCcgbWV0aG9kIGluICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS4KKworICAgICAgICAq
IGpzL3NjcmlwdC10ZXN0cy9hcnJheS1pdGVyYXRvcnMtbmV4dC5qczogQWRkZWQuCisgICAgICAg
ICoganMvc2NyaXB0LXRlc3RzL2N1c3RvbS1pdGVyYXRvcnMuanM6IEFkZGVkLgorICAgICAgICAo
Y3VzdG9tSXRlcmF0b3IubmV4dCk6CisgICAgICAgIChjdXN0b21JdGVyYXRvci5TeW1ib2wuaXRl
cmF0b3IpOgorICAgICAgICAoY3VzdG9tSXRlcmF0b3IucmV0dXJuKToKKyAgICAgICAgKGN1c3Rv
bUl0ZXJhdG9yUmV0dXJuLm5leHQpOgorICAgICAgICAoY3VzdG9tSXRlcmF0b3JSZXR1cm4uU3lt
Ym9sLml0ZXJhdG9yKToKKyAgICAgICAgKGN1c3RvbUl0ZXJhdG9yUmV0dXJuLnJldHVybik6Cisg
ICAgICAgIChjdXN0b21JdGVyYXRvclJldHVybldpdGhFcnJvci5uZXh0KToKKyAgICAgICAgKGN1
c3RvbUl0ZXJhdG9yUmV0dXJuV2l0aEVycm9yLlN5bWJvbC5pdGVyYXRvcik6CisgICAgICAgIChj
dXN0b21JdGVyYXRvclJldHVybldpdGhFcnJvci5yZXR1cm4pOgorICAgICAgICAoY3VzdG9tSXRl
cmF0b3JSZXR1cm5Ob3RJdGVyYXRvclJlc3VsdC5uZXh0KToKKyAgICAgICAgKGN1c3RvbUl0ZXJh
dG9yUmV0dXJuTm90SXRlcmF0b3JSZXN1bHQuU3ltYm9sLml0ZXJhdG9yKToKKyAgICAgICAgKGN1
c3RvbUl0ZXJhdG9yUmV0dXJuTm90SXRlcmF0b3JSZXN1bHQucmV0dXJuKToKKyAgICAgICAgKC5p
dGVyLm5leHQpOgorICAgICAgICAoLml0ZXIuU3ltYm9sLml0ZXJhdG9yKToKKyAgICAgICAgKC5p
dGVyLnJldHVybik6CisgICAgICAgIChpdGVyYXRvckludGVyZmFjZUVycm9yVGVzdCk6CisgICAg
ICAgICoganMvc2NyaXB0LXRlc3RzL2l0ZXJhdG9ycy1zaGFwZS5qczogQWRkZWQuCisgICAgICAg
IChrZXlWYWx1ZUl0ZXJhdG9yLnNldCBlbnRyaWVzKToKKwogMjAxNS0wMi0xNiAgU2VyZ2lvIFZp
bGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLiBV
cGxvYWRpbmcgYSBuZXcgdGVzdCB0aGF0IHNob3VsZCBoYXZlIGJlZW4gdXBsb2FkZWQgYXMKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2FycmF5LWl0ZXJhdG9ycy1uZXh0LWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL2pzL2FycmF5LWl0ZXJhdG9ycy1uZXh0LWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4wNTViZjIzNGI2NDQ2ODg3NmY5ZWFmYjg5ZjU4ODRmMzc5Y2JiMTNkCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvYXJyYXktaXRlcmF0b3JzLW5leHQtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNjUgQEAKK1RoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIHRo
ZSBpdGVyYXRvci5uZXh0IG1ldGhvZHMgb24gQXJyYXkgb2JqZWN0cy4KKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mga2V5IGlzIDAKK1BBU1Mga2V5IGlzIDEKK1BBU1Mga2V5
IGlzIDIKK1BBU1Mga2V5IGlzIDMKK1BBU1Mga2V5IGlzIDQKK1BBU1Mga2V5IGlzIDUKK1BBU1Mg
dGVzdEFycmF5Lmxlbmd0aCBpcyA2CitQQVNTIGtleXMubmV4dCgpLnZhbHVlIGlzIHVuZGVmaW5l
ZC4KK1BBU1MgdmFsdWUgaXMgMQorUEFTUyB2YWx1ZSBpcyAyCitQQVNTIHZhbHVlIGlzIDMKK1BB
U1MgdmFsdWUgaXMgNAorUEFTUyB2YWx1ZSBpcyA1CitQQVNTIHZhbHVlIGlzIDYKK1BBU1MgdGVz
dEFycmF5Lmxlbmd0aCBpcyA2CitQQVNTIHZhbHVlcy5uZXh0KCkudmFsdWUgaXMgdW5kZWZpbmVk
LgorUEFTUyB2YWx1ZSBpcyB0ZXN0QXJyYXlba2V5XQorUEFTUyBrZXkgaXMgMAorUEFTUyB2YWx1
ZSBpcyAxCitQQVNTIHZhbHVlIGlzIHRlc3RBcnJheVtrZXldCitQQVNTIGtleSBpcyAxCitQQVNT
IHZhbHVlIGlzIDIKK1BBU1MgdmFsdWUgaXMgdGVzdEFycmF5W2tleV0KK1BBU1Mga2V5IGlzIDIK
K1BBU1MgdmFsdWUgaXMgMworUEFTUyB2YWx1ZSBpcyB0ZXN0QXJyYXlba2V5XQorUEFTUyBrZXkg
aXMgMworUEFTUyB2YWx1ZSBpcyA0CitQQVNTIHZhbHVlIGlzIHRlc3RBcnJheVtrZXldCitQQVNT
IGtleSBpcyA0CitQQVNTIHZhbHVlIGlzIDUKK1BBU1MgdmFsdWUgaXMgdGVzdEFycmF5W2tleV0K
K1BBU1Mga2V5IGlzIDUKK1BBU1MgdmFsdWUgaXMgNgorUEFTUyB0ZXN0QXJyYXkubGVuZ3RoIGlz
IDYKK1BBU1MgZW50cmllcy5uZXh0KCkudmFsdWUgaXMgdW5kZWZpbmVkLgorUEFTUyB2YWx1ZSBp
cyB0ZXN0QXJyYXlba2V5XQorUEFTUyBrZXkgaXMgaQorUEFTUyB2YWx1ZSBpcyB0ZXN0QXJyYXlb
a2V5XQorUEFTUyBrZXkgaXMgaQorUEFTUyB2YWx1ZSBpcyB0ZXN0QXJyYXlba2V5XQorUEFTUyBr
ZXkgaXMgaQorUEFTUyB2YWx1ZSBpcyB0ZXN0QXJyYXlba2V5XQorUEFTUyBrZXkgaXMgaQorUEFT
UyB2YWx1ZSBpcyB0ZXN0QXJyYXlba2V5XQorUEFTUyBrZXkgaXMgaQorUEFTUyB2YWx1ZSBpcyB0
ZXN0QXJyYXlba2V5XQorUEFTUyBrZXkgaXMgaQorUEFTUyB2YWx1ZSBpcyB0ZXN0QXJyYXlba2V5
XQorUEFTUyBrZXkgaXMgaQorUEFTUyB2YWx1ZSBpcyB0ZXN0QXJyYXlba2V5XQorUEFTUyBrZXkg
aXMgaQorUEFTUyB2YWx1ZSBpcyB0ZXN0QXJyYXlba2V5XQorUEFTUyBrZXkgaXMgaQorUEFTUyB0
ZXN0QXJyYXkubGVuZ3RoIGlzIDkKK1BBU1MgZW50cmllcy5uZXh0KCkudmFsdWUgaXMgdW5kZWZp
bmVkLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisK
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL2FycmF5LWl0ZXJhdG9ycy1uZXh0Lmh0bWwgYi9M
YXlvdXRUZXN0cy9qcy9hcnJheS1pdGVyYXRvcnMtbmV4dC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwYTAx
NjZlNWZkZGNjMzhmMTc0OGZjY2ViYTgwYjU1M2RiYjNiY2MKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9qcy9hcnJheS1pdGVyYXRvcnMtbmV4dC5odG1sCkBAIC0wLDAgKzEsMTAgQEAK
KzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgor
PGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9hcnJheS1pdGVy
YXRvcnMtbmV4dC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9qcy9jdXN0b20taXRlcmF0b3JzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pz
L2N1c3RvbS1pdGVyYXRvcnMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYzNzk5NzlmYTYwNGQz
YzQ4MGUzNDliMTA1ZGIyYWQ1ZTExMmI3ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9jdXN0b20taXRlcmF0b3JzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDY2IEBACitUaGlz
IHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiBjdXN0b20gaXRlcmFibGUgb2JqZWN0cy4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgdmFsdWUgaXMgMAorUEFTUyB2YWx1
ZSBpcyAxCitQQVNTIHZhbHVlIGlzIDIKK1BBU1MgdmFsdWUgaXMgMworUEFTUyB2YWx1ZSBpcyA0
CitQQVNTIHZhbHVlIGlzIDUKK1BBU1MgdmFsdWUgaXMgNgorUEFTUyB2YWx1ZSBpcyA3CitQQVNT
IHZhbHVlIGlzIDgKK1BBU1MgdmFsdWUgaXMgOQorUEFTUyB2YWx1ZSBpcyAxMAorUEFTUyB2YWx1
ZSBpcyAxMQorUEFTUyB2YWx1ZSBpcyAxMgorUEFTUyB2YWx1ZSBpcyAxMworUEFTUyB2YWx1ZSBp
cyAxNAorUEFTUyB2YWx1ZSBpcyAxNQorUEFTUyB2YWx1ZSBpcyAxNgorUEFTUyB2YWx1ZSBpcyAx
NworUEFTUyB2YWx1ZSBpcyAxOAorUEFTUyB2YWx1ZSBpcyAxOQorUEFTUyB2YWx1ZSBpcyAyMAor
UEFTUyB2YWx1ZSBpcyAyMQorUEFTUyB2YWx1ZSBpcyAyMgorUEFTUyB2YWx1ZSBpcyAyMworUEFT
UyB2YWx1ZSBpcyAyNAorUEFTUyB2YWx1ZSBpcyAyNQorUEFTUyB2YWx1ZSBpcyAyNgorUEFTUyB2
YWx1ZSBpcyAyNworUEFTUyB2YWx1ZSBpcyAyOAorUEFTUyB2YWx1ZSBpcyAyOQorUEFTUyB2YWx1
ZSBpcyAzMAorUEFTUyB2YWx1ZSBpcyAzMQorUEFTUyB2YWx1ZSBpcyAzMgorUEFTUyB2YWx1ZSBp
cyAzMworUEFTUyB2YWx1ZSBpcyAzNAorUEFTUyB2YWx1ZSBpcyAzNQorUEFTUyB2YWx1ZSBpcyAz
NgorUEFTUyB2YWx1ZSBpcyAzNworUEFTUyB2YWx1ZSBpcyAzOAorUEFTUyB2YWx1ZSBpcyAzOQor
UEFTUyB2YWx1ZSBpcyA0MAorUEFTUyB2YWx1ZSBpcyA0MQorUEFTUyB2YWx1ZSBpcyAwCitQQVNT
IGN1c3RvbUl0ZXJhdG9yUmV0dXJuLnJldHVybiBzaG91bGQgYmUgY2FsbGVkLgorUEFTUyBlcnJv
ci5tZXNzYWdlIGlzICJUZXJtaW5hdGUgaXRlcmF0aW9uLiIKK1BBU1MgdmFsdWUgaXMgMAorUEFT
UyBjdXN0b21JdGVyYXRvclJldHVybldpdGhFcnJvci5yZXR1cm4gc2hvdWxkIGJlIGNhbGxlZC4K
K1BBU1MgZXJyb3IubWVzc2FnZSBpcyAiVGVybWluYXRlIGl0ZXJhdGlvbi4iCitQQVNTIHZhbHVl
IGlzIDAKK1BBU1MgY3VzdG9tSXRlcmF0b3JSZXR1cm5Ob3RJdGVyYXRvclJlc3VsdC5yZXR1cm4g
c2hvdWxkIGJlIGNhbGxlZC4KK1BBU1MgZXJyb3IubWVzc2FnZSBpcyAiSXRlcmF0b3IgcmVzdWx0
IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIKK1BBU1MgZXJyb3IubWVzc2FnZSBpcyAiSXRl
cmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIKK1BBU1MgZXJyb3IubWVz
c2FnZSBpcyAiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIKK1BB
U1MgZXJyb3IubWVzc2FnZSBpcyAiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4g
b2JqZWN0LiIKK1BBU1MgZXJyb3IubWVzc2FnZSBpcyAiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFj
ZSBpcyBub3QgYW4gb2JqZWN0LiIKK1BBU1MgZXJyb3IubWVzc2FnZSBpcyAiSXRlcmF0b3IgcmVz
dWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIKK1BBU1MgZXJyb3IubWVzc2FnZSBpcyAi
bnVsbCBpcyBub3QgYW4gb2JqZWN0IChldmFsdWF0aW5nICd2YWx1ZSBvZiBpdGVyJykiCitQQVNT
IHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvanMvY3VzdG9tLWl0ZXJhdG9ycy5odG1sIGIvTGF5b3V0VGVzdHMvanMv
Y3VzdG9tLWl0ZXJhdG9ycy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJmN2NlMzU0YjBkY2JkYzAyM2E0NmY3
OTNiYjEzMzkyY2EzNGU5ODcKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9jdXN0
b20taXRlcmF0b3JzLmh0bWwKQEAgLTAsMCArMSwxMCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElD
ICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIu
Li9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2N1c3RvbS1pdGVyYXRvcnMuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9i
b2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvaXRlcmF0b3JzLXNoYXBl
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pzL2l0ZXJhdG9ycy1zaGFwZS1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjc4NmJjMjJmNjNlZmFkN2EwOTljNjMwZTZkNjdkMzRhNDBlNDQ5OQot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL2l0ZXJhdG9ycy1zaGFwZS1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwzOSBAQAorVGhpcyB0ZXN0IGNoZWNrcyB0aGUgc2hhcGUgb2YgYnVp
bHRpbiBpdGVyYXRvcnMuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAi
UEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitBcnJheUl0
ZXJhdG9yCitQQVNTIHZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyBmYWxz
ZQorUEFTUyB2YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlz
IHRydWUKK1BBU1MgdHlwZW9mIHZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQgaXMgImZ1bmN0
aW9uIgorUEFTUyBrZXlJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIGZhbHNlCitQ
QVNTIGtleUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIHRydWUK
K1BBU1MgdHlwZW9mIGtleUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IGlzICJmdW5jdGlvbiIKK1BB
U1Mga2V5VmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIGlzIGZhbHNlCitQQVNT
IGtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykgaXMgdHJ1
ZQorUEFTUyB0eXBlb2Yga2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCBpcyAiZnVuY3Rp
b24iCitTZXRJdGVyYXRvcgorUEFTUyB2YWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0
JykgaXMgZmFsc2UKK1BBU1MgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHko
J25leHQnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiB2YWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0
IGlzICJmdW5jdGlvbiIKK1BBU1Mga2V5SXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBp
cyBmYWxzZQorUEFTUyBrZXlJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQn
KSBpcyB0cnVlCitQQVNTIHR5cGVvZiBrZXlJdGVyYXRvci5fX3Byb3RvX18ubmV4dCBpcyAiZnVu
Y3Rpb24iCitQQVNTIGtleVZhbHVlSXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSBpcyBm
YWxzZQorUEFTUyBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5oYXNPd25Qcm9wZXJ0eSgnbmV4
dCcpIGlzIHRydWUKK1BBU1MgdHlwZW9mIGtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQg
aXMgImZ1bmN0aW9uIgorTWFwSXRlcmF0b3IKK1BBU1MgdmFsdWVJdGVyYXRvci5oYXNPd25Qcm9w
ZXJ0eSgnbmV4dCcpIGlzIGZhbHNlCitQQVNTIHZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093
blByb3BlcnR5KCduZXh0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2YgdmFsdWVJdGVyYXRvci5fX3By
b3RvX18ubmV4dCBpcyAiZnVuY3Rpb24iCitQQVNTIGtleUl0ZXJhdG9yLmhhc093blByb3BlcnR5
KCduZXh0JykgaXMgZmFsc2UKK1BBU1Mga2V5SXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3Bl
cnR5KCduZXh0JykgaXMgdHJ1ZQorUEFTUyB0eXBlb2Yga2V5SXRlcmF0b3IuX19wcm90b19fLm5l
eHQgaXMgImZ1bmN0aW9uIgorUEFTUyBrZXlWYWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCdu
ZXh0JykgaXMgZmFsc2UKK1BBU1Mga2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJv
cGVydHkoJ25leHQnKSBpcyB0cnVlCitQQVNTIHR5cGVvZiBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJv
dG9fXy5uZXh0IGlzICJmdW5jdGlvbiIKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUK
KworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9pdGVyYXRvcnMt
c2hhcGUuaHRtbCBiL0xheW91dFRlc3RzL2pzL2l0ZXJhdG9ycy1zaGFwZS5odG1sCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjQyOTU1MGZkODcxMzdlMzZiNGEyYzEwMmJkMTRmYTc1Yzc3NDU2NjEKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9qcy9pdGVyYXRvcnMtc2hhcGUuaHRtbApAQCAtMCwwICsxLDEw
IEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRt
bD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvaXRlcmF0
b3JzLXNoYXBlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvanMtdGVz
dC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9hcnJheS1pdGVyYXRvcnMtbmV4dC5qcyBiL0xheW91dFRl
c3RzL2pzL3NjcmlwdC10ZXN0cy9hcnJheS1pdGVyYXRvcnMtbmV4dC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
MDhmMmM4ZDZhZTA5N2Y2NWM2MzI3MWFhOWMwOTZmYjNhMDE4OTU1Ci0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2FycmF5LWl0ZXJhdG9ycy1uZXh0LmpzCkBA
IC0wLDAgKzEsNzQgQEAKK2Rlc2NyaXB0aW9uKAorIlRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2
aW9yIG9mIHRoZSBpdGVyYXRvci5uZXh0IG1ldGhvZHMgb24gQXJyYXkgb2JqZWN0cy4iCispOwor
Cit2YXIgdGVzdEFycmF5ID0gWzEsMiwzLDQsNSw2XQordmFyIGtleXMgPSB0ZXN0QXJyYXkua2V5
cygpOwordmFyIGkgPSAwOword2hpbGUgKHRydWUpIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBr
ZXl9ID0ga2V5cy5uZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIHNo
b3VsZEJlKCJrZXkiLCBTdHJpbmcoaSkpCisgICAgaSsrOworfQorCitzaG91bGRCZSgidGVzdEFy
cmF5Lmxlbmd0aCIsIFN0cmluZyhpKSkKKworc2hvdWxkQmVVbmRlZmluZWQoImtleXMubmV4dCgp
LnZhbHVlIikKKwordmFyIHZhbHVlcyA9IHRlc3RBcnJheVtTeW1ib2wuaXRlcmF0b3JdKCk7Cit2
YXIgaSA9IDA7Cit3aGlsZSAodHJ1ZSkgeworICAgIHZhciB7ZG9uZSwgdmFsdWV9ID0gdmFsdWVz
Lm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAgaSsrOworICAgIHNo
b3VsZEJlKCJ2YWx1ZSIsIFN0cmluZyhpKSApCit9CisKK3Nob3VsZEJlKCJ0ZXN0QXJyYXkubGVu
Z3RoIiwgU3RyaW5nKGkpKQorCitzaG91bGRCZVVuZGVmaW5lZCgidmFsdWVzLm5leHQoKS52YWx1
ZSIpCisKK3ZhciBlbnRyaWVzID0gdGVzdEFycmF5LmVudHJpZXMoKTsKK3ZhciBpID0gMDsKK2Rv
IHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBlbnRyeX0gPSBlbnRyaWVzLm5leHQoKTsKKyAgICBp
ZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAgdmFyIFtrZXksIHZhbHVlXSA9IGVudHJ5Owor
ICAgIHNob3VsZEJlKCJ2YWx1ZSIsICJ0ZXN0QXJyYXlba2V5XSIpCisgICAgc2hvdWxkQmUoImtl
eSIsIFN0cmluZyhpKSkKKyAgICBpKysKKyAgICBzaG91bGRCZSgidmFsdWUiLCBTdHJpbmcoaSkp
Cit9IHdoaWxlICghZG9uZSk7CisKK3Nob3VsZEJlKCJ0ZXN0QXJyYXkubGVuZ3RoIiwgU3RyaW5n
KGkpKQorCitzaG91bGRCZVVuZGVmaW5lZCgiZW50cmllcy5uZXh0KCkudmFsdWUiKQorCisKKwor
dmFyIGVudHJpZXMgPSB0ZXN0QXJyYXkuZW50cmllcygpOwordmFyIGkgPSAwOworZG8geworICAg
IHZhciB7ZG9uZSwgdmFsdWU6IGVudHJ5fSA9IGVudHJpZXMubmV4dCgpOworICAgIGlmIChkb25l
KQorICAgICAgICBicmVhazsKKyAgICB2YXIgW2tleSwgdmFsdWVdID0gZW50cnk7CisgICAgc2hv
dWxkQmUoInZhbHVlIiwgInRlc3RBcnJheVtrZXldIikKKyAgICBzaG91bGRCZSgia2V5IiwgImki
KQorICAgIGkrKworICAgIGlmIChpICUgMiA9PSAwKQorICAgICAgICB0ZXN0QXJyYXlbaV0gKj0g
MjsKKyAgICBpZiAoaSA8IDQpCisgICAgICAgIHRlc3RBcnJheS5wdXNoKHRlc3RBcnJheS5sZW5n
dGgpCisgICAgaWYgKGkgPT0gNCkKKyAgICAgICAgZGVsZXRlIHRlc3RBcnJheVs0XQorICAgIGlm
IChpID09IDUpCisgICAgICAgIHRlc3RBcnJheVs0XSA9IDUKK30gd2hpbGUgKCFkb25lKTsKK3No
b3VsZEJlKCJ0ZXN0QXJyYXkubGVuZ3RoIiwgU3RyaW5nKGkpKQorCitzaG91bGRCZVVuZGVmaW5l
ZCgiZW50cmllcy5uZXh0KCkudmFsdWUiKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL2N1c3RvbS1pdGVyYXRvcnMuanMgYi9MYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVz
dHMvY3VzdG9tLWl0ZXJhdG9ycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yMmJiNjMxYzc2NmI3MDc3ODY1M2Fk
YmM0YjJhNjhhNzA5NzZjMGZjCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvc2Ny
aXB0LXRlc3RzL2N1c3RvbS1pdGVyYXRvcnMuanMKQEAgLTAsMCArMSwxNDggQEAKK2Rlc2NyaXB0
aW9uKAorIlRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIGN1c3RvbSBpdGVyYWJsZSBv
YmplY3RzLiIKKyk7CisKK3ZhciBjdXN0b21JdGVyYXRvciA9IHsKKyAgICBfX2tleTogMCwKKyAg
ICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25l
OiB0aGlzLl9fa2V5ID09PSA0MiwKKyAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9fa2V5KysKKyAg
ICAgICAgfTsKKyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisgICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHRlc3RGYWlsZWQoImN1c3RvbUl0ZXJhdG9yLnJldHVybiBzaG91bGQgbm90IGJlIGNh
bGxlZC4iKTsKKyAgICB9Cit9OwordmFyIGV4cGVjdGVkID0gMDsKK2ZvciAodmFyIHZhbHVlIG9m
IGN1c3RvbUl0ZXJhdG9yKSB7CisgICAgc2hvdWxkQmUoInZhbHVlIiwgU3RyaW5nKGV4cGVjdGVk
KyspKTsKK30KKwordmFyIGN1c3RvbUl0ZXJhdG9yUmV0dXJuID0geworICAgIF9fa2V5OiAwLAor
ICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGRv
bmU6IHRoaXMuX19rZXkgPT09IDQyLAorICAgICAgICAgICAgdmFsdWU6IHRoaXMuX19rZXkrKwor
ICAgICAgICB9OworICAgIH0sCisgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICByZXR1cm46IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgdGVzdFBhc3NlZCgiY3VzdG9tSXRlcmF0b3JSZXR1cm4ucmV0dXJuIHNob3VsZCBi
ZSBjYWxsZWQuIik7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0cnVlLAor
ICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZAorICAgICAgICB9OworICAgIH0KK307Cit2YXIg
ZXJyb3IgPSBudWxsOwordHJ5IHsKKyAgICB2YXIgZXhwZWN0ZWQgPSAwOworICAgIGZvciAodmFy
IHZhbHVlIG9mIGN1c3RvbUl0ZXJhdG9yUmV0dXJuKSB7CisgICAgICAgIHNob3VsZEJlKCJ2YWx1
ZSIsIFN0cmluZyhleHBlY3RlZCsrKSk7CisgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGVybWlu
YXRlIGl0ZXJhdGlvbi4iKTsKKyAgICB9Cit9IGNhdGNoIChlKSB7CisgICAgZXJyb3IgPSBlOwor
ICAgIHNob3VsZEJlRXF1YWxUb1N0cmluZygiZXJyb3IubWVzc2FnZSIsICJUZXJtaW5hdGUgaXRl
cmF0aW9uLiIpOworfQorCit2YXIgY3VzdG9tSXRlcmF0b3JSZXR1cm5XaXRoRXJyb3IgPSB7Cisg
ICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgZG9uZTogdGhpcy5fX2tleSA9PT0gNDIsCisgICAgICAgICAgICB2YWx1ZTog
dGhpcy5fX2tleSsrCisgICAgICAgIH07CisgICAgfSwKKyAgICBbU3ltYm9sLml0ZXJhdG9yXTog
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAgIHJldHVybjog
ZnVuY3Rpb24gKCkgeworICAgICAgICB0ZXN0UGFzc2VkKCJjdXN0b21JdGVyYXRvclJldHVybldp
dGhFcnJvci5yZXR1cm4gc2hvdWxkIGJlIGNhbGxlZC4iKTsKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJFcnJvciByYWlzZWQgaW4gdGhlIGN1c3RvbUl0ZXJhdG9yUmV0dXJuV2l0aEVycm9yLnJl
dHVybi4iKTsKKyAgICB9Cit9OwordmFyIGVycm9yID0gbnVsbDsKK3RyeSB7CisgICAgdmFyIGV4
cGVjdGVkID0gMDsKKyAgICBmb3IgKHZhciB2YWx1ZSBvZiBjdXN0b21JdGVyYXRvclJldHVybldp
dGhFcnJvcikgeworICAgICAgICBzaG91bGRCZSgidmFsdWUiLCBTdHJpbmcoZXhwZWN0ZWQrKykp
OworICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlRlcm1pbmF0ZSBpdGVyYXRpb24uIik7CisgICAg
fQorfSBjYXRjaCAoZSkgeworICAgIGVycm9yID0gZTsKKyAgICBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoImVycm9yLm1lc3NhZ2UiLCAiVGVybWluYXRlIGl0ZXJhdGlvbi4iKTsKK30KKwordmFyIGN1
c3RvbUl0ZXJhdG9yUmV0dXJuTm90SXRlcmF0b3JSZXN1bHQgPSB7CisgICAgX19rZXk6IDAsCisg
ICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZG9u
ZTogdGhpcy5fX2tleSA9PT0gNDIsCisgICAgICAgICAgICB2YWx1ZTogdGhpcy5fX2tleSsrCisg
ICAgICAgIH07CisgICAgfSwKKyAgICBbU3ltYm9sLml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAgIHJldHVybjogZnVuY3Rpb24gKCkgewor
ICAgICAgICB0ZXN0UGFzc2VkKCJjdXN0b21JdGVyYXRvclJldHVybk5vdEl0ZXJhdG9yUmVzdWx0
LnJldHVybiBzaG91bGQgYmUgY2FsbGVkLiIpOworICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwor
ICAgIH0KK307Cit2YXIgZXJyb3IgPSBudWxsOwordHJ5IHsKKyAgICB2YXIgZXhwZWN0ZWQgPSAw
OworICAgIGZvciAodmFyIHZhbHVlIG9mIGN1c3RvbUl0ZXJhdG9yUmV0dXJuTm90SXRlcmF0b3JS
ZXN1bHQpIHsKKyAgICAgICAgc2hvdWxkQmUoInZhbHVlIiwgU3RyaW5nKGV4cGVjdGVkKyspKTsK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUZXJtaW5hdGUgaXRlcmF0aW9uLiIpOworICAgIH0K
K30gY2F0Y2ggKGUpIHsKKyAgICBlcnJvciA9IGU7CisgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5n
KCJlcnJvci5tZXNzYWdlIiwgIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9i
amVjdC4iKTsKK30KKworZnVuY3Rpb24gaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QobWVzc2Fn
ZSwgbm90SXRlcmF0b3JSZXN1bHQpIHsKKyAgICB2YXIgaXRlciA9IHsKKyAgICAgICAgX19rZXk6
IDAsCisgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBub3RJ
dGVyYXRvclJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorICAgICAg
ICByZXR1cm46IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoIml0ZXIucmV0
dXJuIHNob3VsZCBiZSBjYWxsZWQuIik7CisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOwor
ICAgICAgICB9CisgICAgfTsKKyAgICBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAg
Zm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgICAgICAgICAgdGVzdEZhaWxlZCgiSXRlcmF0
aW9uIHNob3VsZCBub3Qgb2NjdXIuIik7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIGVycm9yID0gZTsKKyAgICAgICAgc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJlcnJvci5t
ZXNzYWdlIiwgbWVzc2FnZSk7CisgICAgfQorfQorCitbCisgICAgdW5kZWZpbmVkLAorICAgIDQy
LAorICAgICJzdHJpbmciLAorICAgIHRydWUsCisgICAgU3ltYm9sKCJDb2NvYSIpCitdLmZvckVh
Y2goaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuYmluZChudWxsLCAiSXRlcmF0b3IgcmVzdWx0
IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKworLy8gRklYTUU6IEFmdGVyIGZpeGlu
ZyBpc19vYmplY3Qgb3Bjb2RlLCBpdCB3aWxsIHJldHVybiAiSXRlcmF0b3IgcmVzdWx0IGludGVy
ZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIgbWVzc2FnZS4KK2l0ZXJhdG9ySW50ZXJmYWNlRXJyb3JU
ZXN0KCJudWxsIGlzIG5vdCBhbiBvYmplY3QgKGV2YWx1YXRpbmcgJ3ZhbHVlIG9mIGl0ZXInKSIs
IG51bGwpOworCitzdWNjZXNzZnVsbHlQYXJzZWQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvanMvc2NyaXB0LXRlc3RzL2l0ZXJhdG9ycy1zaGFwZS5qcyBiL0xheW91dFRlc3RzL2pz
L3NjcmlwdC10ZXN0cy9pdGVyYXRvcnMtc2hhcGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjRjNzhmZDgzMzAx
NmMzZDk2YWI4MGNhMTlmNDRhYmI4ZWRlNjljNgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL2pzL3NjcmlwdC10ZXN0cy9pdGVyYXRvcnMtc2hhcGUuanMKQEAgLTAsMCArMSw2NSBAQAor
ZGVzY3JpcHRpb24oCisiVGhpcyB0ZXN0IGNoZWNrcyB0aGUgc2hhcGUgb2YgYnVpbHRpbiBpdGVy
YXRvcnMuIgorKTsKKworZGVidWcoIkFycmF5SXRlcmF0b3IiKTsKK3ZhciBhcnJheSA9IFsnQ29j
b2EnLCAnQ2FwcHVjY2lubycsICdUaGUgZGVzIEFsaXplcycsICdNYXRjaGEnLCAnS2lsaW1hbmph
cm8nXTsKK3ZhciB2YWx1ZUl0ZXJhdG9yID0gYXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpOworc2hv
dWxkQmVGYWxzZSgidmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91
bGRCZVRydWUoInZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0Jyki
KTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygidHlwZW9mIHZhbHVlSXRlcmF0b3IuX19wcm90b19f
Lm5leHQiLCAiZnVuY3Rpb24iKTsKKwordmFyIGtleUl0ZXJhdG9yID0gYXJyYXkua2V5cygpOwor
c2hvdWxkQmVGYWxzZSgia2V5SXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hv
dWxkQmVUcnVlKCJrZXlJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIp
Oworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2Yga2V5SXRlcmF0b3IuX19wcm90b19fLm5l
eHQiLCAiZnVuY3Rpb24iKTsKKwordmFyIGtleVZhbHVlSXRlcmF0b3IgPSBhcnJheS5lbnRyaWVz
KCk7CitzaG91bGRCZUZhbHNlKCJrZXlWYWx1ZUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCduZXh0
JykiKTsKK3Nob3VsZEJlVHJ1ZSgia2V5VmFsdWVJdGVyYXRvci5fX3Byb3RvX18uaGFzT3duUHJv
cGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBlb2Yga2V5VmFsdWVJ
dGVyYXRvci5fX3Byb3RvX18ubmV4dCIsICJmdW5jdGlvbiIpOworCitkZWJ1ZygiU2V0SXRlcmF0
b3IiKTsKK3ZhciBzZXQgPSBuZXcgU2V0KFsnQ29jb2EnLCAnQ2FwcHVjY2lubycsICdUaGUgZGVz
IEFsaXplcycsICdNYXRjaGEnLCAnS2lsaW1hbmphcm8nXSk7Cit2YXIgdmFsdWVJdGVyYXRvciA9
IHNldFtTeW1ib2wuaXRlcmF0b3JdKCk7CitzaG91bGRCZUZhbHNlKCJ2YWx1ZUl0ZXJhdG9yLmhh
c093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlVHJ1ZSgidmFsdWVJdGVyYXRvci5fX3By
b3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0
eXBlb2YgdmFsdWVJdGVyYXRvci5fX3Byb3RvX18ubmV4dCIsICJmdW5jdGlvbiIpOworCit2YXIg
a2V5SXRlcmF0b3IgPSBzZXQua2V5cygpOworc2hvdWxkQmVGYWxzZSgia2V5SXRlcmF0b3IuaGFz
T3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVlKCJrZXlJdGVyYXRvci5fX3Byb3Rv
X18uaGFzT3duUHJvcGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVFcXVhbFRvU3RyaW5nKCJ0eXBl
b2Yga2V5SXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKwordmFyIGtleVZh
bHVlSXRlcmF0b3IgPSBzZXQuZW50cmllcygpOworc2hvdWxkQmVGYWxzZSgia2V5VmFsdWVJdGVy
YXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZVRydWUoImtleVZhbHVlSXRl
cmF0b3IuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlRXF1YWxU
b1N0cmluZygidHlwZW9mIGtleVZhbHVlSXRlcmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rp
b24iKTsKKworZGVidWcoIk1hcEl0ZXJhdG9yIik7Cit2YXIgbWFwID0gbmV3IE1hcCgpOworWwor
ICAgIFsgJ0NvY29hJywgMiwgXSwKKyAgICBbICdDYXBwdWNjaW5vJywgMCBdLAorICAgIFsgJ1Ro
ZSBkZXMgQWxpemVzJywgMyBdLAorICAgIFsgJ01hdGNoYScsIDIgXSwKKyAgICBbICdLaWxpbWFu
amFybycsIDFdCitdLmZvckVhY2goZnVuY3Rpb24gKFsga2V5LCB2YWx1ZSBdKSB7CisgICAgbWFw
LnNldChrZXksIHZhbHVlKTsKK30pOwordmFyIHZhbHVlSXRlcmF0b3IgPSBtYXBbU3ltYm9sLml0
ZXJhdG9yXSgpOworc2hvdWxkQmVGYWxzZSgidmFsdWVJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgn
bmV4dCcpIik7CitzaG91bGRCZVRydWUoInZhbHVlSXRlcmF0b3IuX19wcm90b19fLmhhc093blBy
b3BlcnR5KCduZXh0JykiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygidHlwZW9mIHZhbHVlSXRl
cmF0b3IuX19wcm90b19fLm5leHQiLCAiZnVuY3Rpb24iKTsKKwordmFyIGtleUl0ZXJhdG9yID0g
bWFwLmtleXMoKTsKK3Nob3VsZEJlRmFsc2UoImtleUl0ZXJhdG9yLmhhc093blByb3BlcnR5KCdu
ZXh0JykiKTsKK3Nob3VsZEJlVHJ1ZSgia2V5SXRlcmF0b3IuX19wcm90b19fLmhhc093blByb3Bl
cnR5KCduZXh0JykiKTsKK3Nob3VsZEJlRXF1YWxUb1N0cmluZygidHlwZW9mIGtleUl0ZXJhdG9y
Ll9fcHJvdG9fXy5uZXh0IiwgImZ1bmN0aW9uIik7CisKK3ZhciBrZXlWYWx1ZUl0ZXJhdG9yID0g
bWFwLmVudHJpZXMoKTsKK3Nob3VsZEJlRmFsc2UoImtleVZhbHVlSXRlcmF0b3IuaGFzT3duUHJv
cGVydHkoJ25leHQnKSIpOworc2hvdWxkQmVUcnVlKCJrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9f
Xy5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpIik7CitzaG91bGRCZUVxdWFsVG9TdHJpbmcoInR5cGVv
ZiBrZXlWYWx1ZUl0ZXJhdG9yLl9fcHJvdG9fXy5uZXh0IiwgImZ1bmN0aW9uIik7CisKK3N1Y2Nl
c3NmdWxseVBhcnNlZCA9IHRydWU7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247301</attachid>
            <date>2015-02-24 20:21:18 -0800</date>
            <delta_ts>2015-02-27 02:44:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141351-20150225132105.patch</filename>
            <type>text/plain</type>
            <size>99788</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNTg3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MzU3YzZmY2RhMTRlMjEzMjc1YTM4OGEyMzRhY2MxYzFkOGU1MjE1Li5hY2Q1NTllNjljMzQzNGYw
NTk2MzIwNzk2ZTc4NjRhMGNjYzJmZjc5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxNDQgQEAKIDIwMTUtMDItMjQgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CiAKKyAgICAgICAgVXBncmFkZSBFUzYgSXRlcmF0b3IgaW50ZXJmYWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1cGdy
YWRlcyB0aGUgZXhpc2luZyBFUzYgaXRlcmF0b3IgdG8gYWxpZ24gdGhlIGxhdGVzdCBzcGVjLgor
ICAgICAgICBJbiB0aGUgbGF0ZXN0IHNwZWMsCisgICAgICAgIDEuIGBJdGVyYXRvci5uZXh0YCBy
ZXR1cm5zIG9iamVjdCB0aGF0IGltcGxlbWVudHMgSXRlcmF0b3JSZXN1bHQgaW50ZXJmYWNlIHsg
dmFsdWU6IHZhbHVlLCBkb25lLCBib29sZWFuIH0uCisgICAgICAgIDIuIGBJdGVyYXRvci5yZXR1
cm5gIGlzIGludHJvZHVjZWQuIFdoZW4gdGhlIGl0ZXJhdGlvbiBpcyB0ZXJtaW5hdGVkIGJ5IHRo
ZSBhYnJ1cHQgY29tcGxldGlvbiwKKyAgICAgICAgaXQgaXMgY2FsbGVkIHRvIGNsb3NlIGl0ZXJh
dG9yIHN0YXRlLgorICAgICAgICAzLiBJdGVyYXRvci5uZXh0IG9mIEFycmF5IGlzIG1vdmVkIGZy
b20gYW4gaXRlcmF0b3Igb2JqZWN0IHRvIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVgLgorCisg
ICAgICAgIFRvIHVwZ3JhZGUgaXQsIHdlIGNoYW5nZXMgdGhlIGJ5dGVjb2RlIHRoYXQgcmVwcmVz
ZW50cyBmb3Itb2YgbG9vcHMuCisgICAgICAgIEFuZCB0byBlbWJvZHkgdGhlIGVmZmljaWVudCBp
dGVyYXRpb24gd2l0aCBhbiBpdGVyYXRvciBvYmplY3QsCisgICAgICAgIHdlIGltcGxlbWVudGVk
ICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IGluIEphdmFTY3JpcHQgYW5kCisgICAgICAg
IGl0IGlzIGxvY2F0ZWQgaW4gYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMuCisg
ICAgICAgIEltcGxlbWVudGluZyBpdCBpbiBKYXZhU2NyaXB0IGVuY291cmFnZXMgaW5saW5pbmcg
YW5kCisgICAgICAgIHV0aWxpemVzIGVzY2FwZSBhbmFseXNpcyBmb3IgYW4gaXRlcmF0b3IgcmVz
dWx0IG9iamVjdCBpbiBERkcgSklULgorICAgICAgICBBbmQgd2UgZHJvcHBlZCB0aGUgaW50cmlu
c2ljIHZlcnNpb24gb2YgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQuCisKKyAgICAgICAg
QW5kIHdlIGludHJvZHVjZWQgSXRlcmF0b3JPcGVyYXRpb25zIHRoYXQgaXMgZGVmaW5lZCBpbiB0
aGUgc3BlYy4KKyAgICAgICAgSXQgYWxpZ25zIHRoZSBpdGVyYXRpb24gaW4gdGhlIHJ1bnRpbWUg
dG8gdGhlIGxhdGVzdCBzcGVjLgorICAgICAgICBDdXJyZW50bHksIFByb21pc2UuYWxsIGFuZCBQ
cm9taXNlLnJhY2UgdXNlcyBhbiBpdGVyYWJsZSBvYmplY3QuCisgICAgICAgIEhvd2V2ZXIsIFBy
b21pc2UuYWxsIGFuZCBQcm9taXNlLnJhY2UgaW1wbGVtZW50YXRpb24gaXMgYWxzbyBiYXNlZCBv
biB0aGUgb2xkIHNwZWMuCisgICAgICAgIFN1YnNlcXVlbnQgcGF0Y2hlcyB3aWxsIHVwZ3JhZGUg
aXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90eXBl
LmpzOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJh
dG9yUHJvdG90eXBlLmguCisgICAgICAgIChuZXh0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJldHVybik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dU
eXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0
aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNVbmRlZmluZWQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXlUaHVu
a0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFs
dWVUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjphcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OmFycmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRlKToKKyAgICAgICAgKEpTQzo6YXJyYXlJ
dGVyYXRvclByb3RvdHlwZUl0ZXJhdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvQXJy
YXlJdGVyYXRvclByb3RvdHlwZS5oOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuaDoKKyAgICAgICAgKiBydW50aW1lL0ludHJpbnNpYy5oOgorICAgICAgICAqIHJ1bnRpbWUv
SXRlcmF0b3JPcGVyYXRpb25zLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oml0ZXJhdG9yTmV4
dCk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yVmFsdWUpOgorICAgICAgICAoSlNDOjppdGVyYXRv
ckNvbXBsZXRlKToKKyAgICAgICAgKEpTQzo6aXRlcmF0b3JTdGVwKToKKyAgICAgICAgKEpTQzo6
aXRlcmF0b3JDbG9zZSk6CisgICAgICAgIChKU0M6OmNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QpOgor
ICAgICAgICAqIHJ1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwLgorICAg
ICAgICAqIHJ1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNBcnJh
eUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRv
cjo6dmlzaXRDaGlsZHJlbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmNyZWF0ZUl0ZXJhdG9y
UmVzdWx0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dEtleSk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFsdWUpOiBEZWxldGVkLgorICAgICAgICAoSlND
OjphcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUv
SlNBcnJheUl0ZXJhdG9yLmg6CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6SlNBcnJh
eUl0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjppdGVyYXRpb25LaW5k
KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjppdGVyYXRlZE9iamVj
dCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6bmV4dEluZGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpzZXROZXh0SW5kZXgpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6OmZpbmlzaCk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRpb25LaW5kKTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZkl0ZXJhdGVk
T2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRP
Zk5leHRJbmRleCk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9KU1Byb21pc2VDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm9taXNlUmFjZUxvb3ApOgorICAgICAg
ICAoSlNDOjpKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNlKToKKyAgICAgICAgKEpTQzo6cGVy
Zm9ybVByb21pc2VBbGwpOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNB
bGwpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAg
ICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAo
SlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAgICAgICAgKiBydW50aW1lL1Nl
dEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6U2V0SXRlcmF0b3JQcm90b3R5
cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U2V0SXRlcmF0b3JQcm90b3R5cGVG
dW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6CisgICAgICAgIChKU0M6OnRodW5r
R2VuZXJhdG9yRm9ySW50cmluc2ljKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvYXJyYXktaXRl
cmF0b3JzLW5leHQtd2l0aC1jYWxsLmpzOiBBZGRlZC4KKyAgICAgICAgKGluY3JlbWVudCk6Cisg
ICAgICAgIChmb3IpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4
dC5qczogQWRkZWQuCisKKyAgICAgICAgUmV2aXZlIHRoZSBvbGRlciBBcnJheSBpdGVyYXRvciB0
ZXN0cyB0aGF0IG1hbnVhbGx5IGNhbGwgJ25leHQnIG1ldGhvZC4KKworICAgICAgICAqIHRlc3Rz
L3N0cmVzcy9jdXN0b20taXRlcmF0b3JzLmpzOiBBZGRlZC4KKyAgICAgICAgKGl0ZXIubmV4dCk6
CisgICAgICAgIChpdGVyLlN5bWJvbC5pdGVyYXRvcik6CisgICAgICAgIChpdGVyLnJldHVybik6
CisgICAgICAgIChpdGVyLmdldCBuZXh0KToKKyAgICAgICAgKGl0ZXIuZ2V0IHJldHVybik6Cisg
ICAgICAgIChpdGVyYXRvckludGVyZmFjZUVycm9yVGVzdC5pdGVyLm5leHQpOgorICAgICAgICAo
aXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuaXRlci5TeW1ib2wuaXRlcmF0b3IpOgorICAgICAg
ICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuaXRlci5yZXR1cm4pOgorICAgICAgICAoaXRl
cmF0b3JJbnRlcmZhY2VFcnJvclRlc3QpOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJv
clRlc3RSZXR1cm4uaXRlci5uZXh0KToKKyAgICAgICAgKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JU
ZXN0UmV0dXJuLml0ZXIuU3ltYm9sLml0ZXJhdG9yKToKKyAgICAgICAgKGl0ZXJhdG9ySW50ZXJm
YWNlRXJyb3JUZXN0UmV0dXJuLml0ZXIucmV0dXJuKToKKyAgICAgICAgKGl0ZXJhdG9ySW50ZXJm
YWNlRXJyb3JUZXN0UmV0dXJuKToKKyAgICAgICAgKGl0ZXJhdG9ySW50ZXJmYWNlQnJlYWtUZXN0
UmV0dXJuLml0ZXIubmV4dCk6CisgICAgICAgIChpdGVyYXRvckludGVyZmFjZUJyZWFrVGVzdFJl
dHVybi5pdGVyLlN5bWJvbC5pdGVyYXRvcik6CisgICAgICAgIChpdGVyYXRvckludGVyZmFjZUJy
ZWFrVGVzdFJldHVybi5pdGVyLnJldHVybik6CisgICAgICAgIChpdGVyYXRvckludGVyZmFjZUJy
ZWFrVGVzdFJldHVybik6CisKKyAgICAgICAgVGhpcyB0ZXN0cyB0aGUgYmVoYXZpb3Igb2YgY3Vz
dG9tIGl0ZXJhdG9ycy4KKyAgICAgICAgJ25leHQnIGFuZCAncmV0dXJuJyBvZiBpdGVyYXRvciB3
b3JrIHdpdGggZm9yLW9mLgorCisgICAgICAgICogdGVzdHMvc3RyZXNzL2l0ZXJhdG9ycy1zaGFw
ZS5qczogQWRkZWQuCisgICAgICAgIChpdGVyYXRvclNoYXBlKToKKyAgICAgICAgKGtleVZhbHVl
SXRlcmF0b3Iuc2V0IGVudHJpZXMpOgorCisgICAgICAgIFRoaXMgdGVzdHMgdGhlIHNoYXBlIG9m
IGl0ZXJhdG9yczsgaXRlcmF0b3JzIG9mIEFycmF5IGhhdmUgJ25leHQnIG1ldGhvZCBpbiAlQXJy
YXlJdGVyYXRvclByb3RvdHlwZSUuCisKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbWFwLWl0ZXJh
dG9ycy1uZXh0LmpzOiBBZGRlZC4KKyAgICAgICAgKHNldCB2YXIpOgorICAgICAgICAoLmdldCBp
Zik6CisgICAgICAgIChvdGhlcktleSk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NldC1pdGVy
YXRvcnMtbmV4dC5qczogQWRkZWQuCisgICAgICAgIChvdGhlcktleSk6CisKKzIwMTUtMDItMjQg
IFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CisKICAgICAgICAgQ29uc3Ry
dWN0b3IgcmV0dXJuaW5nIG51bGwgc2hvdWxkIGNvbnN0cnVjdCBhbiBvYmplY3QgaW5zdGVhZCBv
ZiBudWxsCiAgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NDE2NDAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGNiNmQ1NWU3Mzc5
ZTIzZDQyYjM1MjdjNTJhZGY2NTZmNTNiM2VkOGEuLjBjMjRlZDJlMjIwYjc4ZGRlYzQ2NjE5YWEx
MjE0YjgxZTY4ZWU0NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTQz
OCw3ICs0MzgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VTCiAgICAgcnVu
dGltZS9FcnJvckluc3RhbmNlLmNwcAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCiAg
ICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAotICAgIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAgCisgICAgcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAogICAgIHJ1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCiAgICAgcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApAQCAtNDUwLDYgKzQ1MCw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwCiAgICAgcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAogICAgIHJ1
bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKKyAgICBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9u
cy5jcHAKICAgICBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmNwcAogICAgIHJ1bnRpbWUvSlNM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwCiAgICAgcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNw
cApAQCAtNTc5LDYgKzU4MCw3IEBAIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
IAogc2V0KEphdmFTY3JpcHRDb3JlX0xVVF9GSUxFUwogICAgIHJ1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAKKyAgICBydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCiAgICAgcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3Bw
CiAgICAgcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDRhMjYyM2VmNWM5Yzc1NmQ1ZGE1NDdmMWQzZDY1Y2Vh
OWExNzY5NWEuLjRkYjA5YmQ0NzcyYjRkMWM5ZjBjNjFjMDJhZTZkMzk1YjY1NDFlN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0zNiw2ICszNiw3IEBA
IFZQQVRIID0gXAogLlBIT05ZIDogYWxsCiBhbGwgOiBcCiAgICAgQXJyYXlDb25zdHJ1Y3Rvci5s
dXQuaCBcCisgICAgQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBcCiAgICAgQXJyYXlQcm90
b3R5cGUubHV0LmggXAogICAgIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggXAogICAgIERhdGVDb25z
dHJ1Y3Rvci5sdXQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRl
eCA3M2UxNTQ3MzRmOWQ0YTk3MzYwZmVmZGNmNGIwNjcxMWU4NGM4MDE3Li5hYjEyZGVkZjBiYzk1
Y2QxM2I0Y2Y2MDFmNmY2MjQ1OTBiMDg0N2Q3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oKQEAgLTcxOCw2ICs3MTgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24uY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJdGVyYXRvck9wZXJhdGlvbnMuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FQSVZhbHVlV3JhcHBlci5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTGV4aWNhbEVudmly
b25tZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1
bWVudHNJdGVyYXRvci5jcHAiIC8+CkBAIC04NTQsNiArODU1LDcgQEAKICAgPC9JdGVtR3JvdXA+
CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwk
KFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFy
cmF5UHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1
cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXEJvb2xlYW5Qcm90b3R5cGUubHV0LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVj
dHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcRGF0ZUNvbnN0cnVjdG9yLmx1dC5o
IiAvPgpAQCAtMTQ5Miw2ICsxNDk0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEludHJpbnNpYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJdGVyYXRvck9wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1bWVudHNJdGVyYXRvci5oIiAvPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGZmZjcy
MGM4MWQwMjY0NGNlZDQ3NWYxMGRjZmJjMGQwY2IyNmY5OTMuLmFiNjIxODg0NDYyZmQzNTg5Y2E2
NzhmZTRmNTczY2QwZTBkMjFjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTYzMCw2ICs2MzAsOSBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmNwcCI+CiAgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSXRlcmF0b3JPcGVyYXRpb25zLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwIj4KICAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjY2MSw2ICsyNjY0LDkgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50cmluc2ljLmgiPgogICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEl0ZXJhdG9yT3BlcmF0aW9ucy5oIj4KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0xleGljYWxFbnZpcm9ubWVudC5oIj4KICAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzA2NCw2ICszMDcwLDkgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRm
b3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xTdHJpbmdDb25z
dHJ1Y3Rvci5sdXQuaCI+CiAgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmgiPgorICAgICAgPEZpbHRlcj5E
ZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0
dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xBcnJheVByb3RvdHlwZS5sdXQuaCI+
CiAgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCBjYWQzMzMzYTFmN2Q0NmUyNjE3ZDJm
ZDgwNTJhMmRlYmI3MWI2NzI2Li5mMzY0NDcwNmNhMjZiNTM2ZWY1MzUxMDUxYzY4NzY3ZWE3NzYw
MDRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTQxLDYgKzk0MSw4IEBACiAJ
CTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QzAyODVCMTcxNzk2NjgwMDM1MUUz
NSAvKiBBUk12N0RPcGNvZGUuaCAqLzsgfTsKIAkJNjVGQjUxMTcxODRFRUU3MDAwQzEyQjcwIC8q
IFByb3RvQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1RkI1MTE2MTg0RUU5QkMwMEMxMkI3MCAvKiBQcm90b0NhbGxGcmFtZS5jcHAg
Ki87IH07CiAJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QUQyQ0I0
QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcwMTEzRDRCMUE4REIwOTMwMDM4
NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENDkxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTcwMTEzRDRDMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVy
YXRvck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFB
QjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wu
Y3BwICovOyB9OwogCQk3MDVCNDFBQzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
NUI0MUE1MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5jcHAgKi87IH07CkBA
IC0yNjIwLDYgKzI2MjIsOCBAQAogCQk2NUZCNTExNTE4NEVFOEY4MDBDMTJCNzAgLyogUHJvdG9D
YWxsRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG9DYWxsRnJh
bWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVGQjUxMTYxODRFRTlCQzAwQzEy
QjcwIC8qIFByb3RvQ2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3RvQ2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJFdmFsRW5hYmxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0
b3JPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEl0
ZXJhdG9yT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwMTEz
RDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJv
b2xlYW5PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9Owog
CQk3MDVCNDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00MzMxLDYgKzQzMzUsOCBAQAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJ
bnRlcm5hbEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQgLyog
SW50ZXJuYWxGdW5jdGlvbi5oICovLAogCQkJCTg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJ
bnRyaW5zaWMuaCAqLywKKwkJCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JP
cGVyYXRpb25zLmNwcCAqLywKKwkJCQk3MDExM0Q0QTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0
b3JPcGVyYXRpb25zLmggKi8sCiAJCQkJQTc2MTQwQ0IxODI5ODJDQjAwNzUwNjI0IC8qIEpTQXJn
dW1lbnRzSXRlcmF0b3IuY3BwICovLAogCQkJCUE3NjE0MENDMTgyOTgyQ0IwMDc1MDYyNCAvKiBK
U0FyZ3VtZW50c0l0ZXJhdG9yLmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdBQzAwRDMwQjA4IC8q
IEpTQXJyYXkuY3BwICovLApAQCAtNTg3OCw2ICs1ODg0LDcgQEAKIAkJCQlCQzExNjY3QjBFMTk5
QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
OUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBG
MTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDgzLDYgKzcw
OTAsNyBAQAogCQkJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0OCAv
KiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEN0Q0MEVEMjEy
ODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3MDExM0Q0
QjFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1MDNGQTE5MTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRo
bWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzI4
ZTg3YzI2NmQ5NDQ2OWRiMWIzYzk5NTEyMDhhZmJlZjkzODM3NQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheUl0ZXJhdG9yLnByb3RvdHlwZS5q
cwpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2Z1bmN0aW9uIG5leHQoKSB7CisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgaWYgKHRoaXMgPT0gbnVsbCB8fCAodHlwZW9mIHRoaXMgIT09ICJvYmplY3QiICYmIHR5cGVv
ZiB0aGlzICE9PSAiZnVuY3Rpb24iKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIiVB
cnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIE9iamVj
dCIpOworCisgICAgdmFyIGl0ZW1LaW5kID0gdGhpcy5AYXJyYXlJdGVyYXRpb25LaW5kOworICAg
IGlmICghaXRlbUtpbmQpCisgICAgICAgIHRocm93IG5ldyBAVHlwZUVycm9yKCIlQXJyYXlJdGVy
YXRvclByb3RvdHlwZSUubmV4dCByZXF1aXJlcyB0aGF0IHx0aGlzfCBiZSBBcnJheSBJdGVyYXRv
ciBJbnN0YW5jZSIpOworCisgICAgdmFyIGFycmF5ID0gdGhpcy5AaXRlcmF0ZWRPYmplY3Q7Cisg
ICAgaWYgKGFycmF5ID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAg
ICAgIHZhbHVlOiB1bmRlZmluZWQsCisgICAgICAgICAgICBkb25lOiB0cnVlCisgICAgICAgIH07
CisgICAgfQorCisgICAgdmFyIGluZGV4ID0gdGhpcy5AYXJyYXlJdGVyYXRvck5leHRJbmRleDsK
KyAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoID4+PiAwOworICAgIGlmIChpbmRleCA+PSBs
ZW5ndGgpIHsKKyAgICAgICAgdGhpcy5AaXRlcmF0ZWRPYmplY3QgPSB1bmRlZmluZWQ7CisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLAorICAgICAgICAgICAg
ZG9uZTogdHJ1ZQorICAgICAgICB9OworICAgIH07CisgICAgdGhpcy5AYXJyYXlJdGVyYXRvck5l
eHRJbmRleCA9IGluZGV4ICsgMTsKKworICAgIGlmIChpdGVtS2luZCA9PT0gImtleSIpIHsKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIHZhbHVlOiBpbmRleCwKKyAgICAgICAgICAgIGRv
bmU6IGZhbHNlCisgICAgICAgIH07CisgICAgfQorICAgIHZhciBlbGVtZW50VmFsdWUgPSBhcnJh
eVtpbmRleF07CisgICAgaWYgKGl0ZW1LaW5kID09PSAidmFsdWUiKSB7CisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICB2YWx1ZTogZWxlbWVudFZhbHVlLAorICAgICAgICAgICAgZG9uZTog
ZmFsc2UKKyAgICAgICAgfTsKKyAgICB9CisgICAgcmV0dXJuIHsKKyAgICAgICAgdmFsdWU6IFsg
aW5kZXgsIGVsZW1lbnRWYWx1ZSBdLAorICAgICAgICBkb25lOiBmYWxzZQorICAgIH07Cit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCmluZGV4IGFiZGRmYWM5MzM3YzFkYmQ2YzNmNmY0NzQ2OGVjMjc2OGQyNTRh
MDguLmVmMmYxNGIzZTYzZjc1YmIyZDI2Zjk1NmMxMTVmZjA1MmI1Mzk2ZmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuY3BwCkBAIC0xOTM0LDE2ICsxOTM0LDggQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0
b3I6OmVtaXRSZXR1cm4oUmVnaXN0ZXJJRCogc3JjKQogCiAgICAgaWYgKGlzQ29uc3RydWN0b3Io
KSAmJiBzcmMtPmluZGV4KCkgIT0gbV90aGlzUmVnaXN0ZXIuaW5kZXgoKSkgewogICAgICAgICBS
ZWZQdHI8TGFiZWw+IGlzT2JqZWN0TGFiZWwgPSBuZXdMYWJlbCgpOwotICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gaXNPYmplY3RSZWdpc3RlciA9IG5ld1RlbXBvcmFyeSgpOwogCi0gICAgICAg
IGVtaXRPcGNvZGUob3BfaXNfb2JqZWN0KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGlzT2JqZWN0UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc3JjLT5pbmRleCgpKTsKLQotICAgICAgICBzaXplX3QgYmVnaW4gPSBpbnN0cnVjdGlvbnMo
KS5zaXplKCk7Ci0gICAgICAgIGVtaXRPcGNvZGUob3BfanRydWUpOwotICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoaXNPYmplY3RSZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChpc09iamVjdExhYmVsLT5iaW5kKGJlZ2luLCBpbnN0cnVjdGlvbnMo
KS5zaXplKCkpKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBv
cmFyeSgpLCBzcmMpLCBpc09iamVjdExhYmVsLmdldCgpKTsKIAogICAgICAgICBlbWl0VW5hcnlO
b0RzdE9wKG9wX3JldCwgJm1fdGhpc1JlZ2lzdGVyKTsKIApAQCAtMjM4MSw2ICsyMzczLDEzIEBA
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFN0
cmluZyYgbWVzc2FnZSkKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodHJ1ZSk7CiB9CiAKK3Zv
aWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRUaHJvd1R5cGVFcnJvcihjb25zdCBTdHJpbmcmIG1l
c3NhZ2UpCit7CisgICAgZW1pdE9wY29kZShvcF90aHJvd19zdGF0aWNfZXJyb3IpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChhZGRDb25zdGFudFZhbHVlKGFkZFN0cmluZ0NvbnN0YW50KElk
ZW50aWZpZXIobV92bSwgbWVzc2FnZSkpKS0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGZhbHNlKTsKK30KKwogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFB1c2hGdW5j
dGlvbk5hbWVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5
LCBSZWdpc3RlcklEKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcykKIHsKICAgICBlbWl0T3Bj
b2RlKG9wX3B1c2hfbmFtZV9zY29wZSk7CkBAIC0yNTg0LDI0ICsyNTgzLDc3IEBAIHZvaWQgQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRFbnVtZXJhdGlvbihUaHJvd2FibGVFeHByZXNzaW9uRGF0YSog
bm9kZSwgRXhwcmVzc2lvCiAgICAgICAgIGVtaXRNb3ZlKGFyZ3MudGhpc1JlZ2lzdGVyKCksIHN1
YmplY3QuZ2V0KCkpOwogICAgICAgICBlbWl0Q2FsbChpdGVyYXRvci5nZXQoKSwgaXRlcmF0b3Iu
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2
b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKICAgICB9Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGl0ZXJhdG9yTmV4dCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5n
ZXQoKSwgcHJvcGVydHlOYW1lcygpLml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lKTsKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBuZXdUZW1wb3JhcnkoKTsKICAgICBlbWl0TG9hZCh2YWx1
ZS5nZXQoKSwganNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgZW1pdEp1bXAoc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOwogICAgIAogICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gbmV3TGFi
ZWwoKTsKKyAgICBSZWZQdHI8TGFiZWw+IGl0ZXJhdG9yRG9uZSA9IG5ld0xhYmVsKCk7CiAgICAg
ZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CiAgICAgZW1pdExvb3BIaW50KCk7CisKKyAgICBS
ZWZQdHI8TGFiZWw+IHRyeVN0YXJ0TGFiZWwgPSBuZXdMYWJlbCgpOworICAgIGVtaXRMYWJlbCh0
cnlTdGFydExhYmVsLmdldCgpKTsKKyAgICBUcnlEYXRhKiB0cnlEYXRhID0gcHVzaFRyeSh0cnlT
dGFydExhYmVsLmdldCgpKTsKICAgICBjYWxsQmFjaygqdGhpcywgdmFsdWUuZ2V0KCkpOworICAg
IFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwor
CiAgICAgZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICBDYWxsQXJndW1l
bnRzIG5leHRBcmd1bWVudHMoKnRoaXMsIDAsIDEpOwotICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKLSAgICBlbWl0TW92ZShuZXh0QXJn
dW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIHZhbHVlLmdldCgpKTsKLSAgICBlbWl0Q2FsbCh2
YWx1ZS5nZXQoKSwgaXRlcmF0b3JOZXh0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRB
cmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RF
bmQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOwot
ICAgIGVtaXRKdW1wSWZGYWxzZShlbWl0RXF1YWxpdHlPcChvcF9zdHJpY3RlcSwgcmVzdWx0Lmdl
dCgpLCB2YWx1ZS5nZXQoKSwgZW1pdExvYWQoMCwgSlNWYWx1ZSh2bSgpLT5pdGVyYXRpb25UZXJt
aW5hdG9yLmdldCgpKSkpLCBsb29wU3RhcnQuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBuZXh0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9w
ZXJ0eU5hbWVzKCkubmV4dCk7CisgICAgeworICAgICAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1
bWVudHMoKnRoaXMsIDAsIDEpOworICAgICAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7CisgICAgICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVu
dHMuYXJndW1lbnRSZWdpc3RlcigwKSwgdmFsdWUuZ2V0KCkpOworICAgICAgICBlbWl0Q2FsbCh2
YWx1ZS5nZXQoKSwgbmV4dC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBuZXh0QXJndW1lbnRz
LCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOwor
ICAgIH0KKyAgICB7CisgICAgICAgIFJlZlB0cjxMYWJlbD4gdHlwZUlzT2JqZWN0ID0gbmV3TGFi
ZWwoKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0KG5ld1RlbXBvcmFyeSgp
LCB2YWx1ZS5nZXQoKSksIHR5cGVJc09iamVjdC5nZXQoKSk7CisgICAgICAgIGVtaXRUaHJvd1R5
cGVFcnJvcihBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFu
IG9iamVjdC4iKSk7CisgICAgICAgIGVtaXRMYWJlbCh0eXBlSXNPYmplY3QuZ2V0KCkpOworICAg
IH0KKyAgICBlbWl0SnVtcElmVHJ1ZShlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgdmFsdWUu
Z2V0KCksIHByb3BlcnR5TmFtZXMoKS5kb25lKSwgaXRlcmF0b3JEb25lLmdldCgpKTsKKyAgICBl
bWl0R2V0QnlJZCh2YWx1ZS5nZXQoKSwgdmFsdWUuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS52YWx1
ZSk7CisgICAgZW1pdEp1bXAobG9vcFN0YXJ0LmdldCgpKTsKKworICAgIC8vIEl0ZXJhdG9yQ2xv
c2Ugc2VxdWVuY2UgZm9yIHRocm93LWVkIGNvbnRyb2wgZmxvdy4KKyAgICB7CisgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBleGNlcHRpb25SZWdpc3RlciA9IHBvcFRyeUFuZEVtaXRDYXRjaCh0
cnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgY2F0Y2hIZXJlLmdldCgpKTsKKyAgICAgICAgUmVmUHRy
PExhYmVsPiByZXRocm93ID0gbmV3TGFiZWwoKTsKKworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmV0dXJuTWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdl
dCgpLCBwcm9wZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7CisgICAgICAgIGVtaXRKdW1wSWZU
cnVlKGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwgcmV0dXJuTWV0aG9kLmdldCgpKSwg
cmV0aHJvdy5nZXQoKSk7CisKKyAgICAgICAgQ2FsbEFyZ3VtZW50cyByZXR1cm5Bcmd1bWVudHMo
KnRoaXMsIDApOworICAgICAgICBlbWl0TW92ZShyZXR1cm5Bcmd1bWVudHMudGhpc1JlZ2lzdGVy
KCksIGl0ZXJhdG9yLmdldCgpKTsKKworICAgICAgICBSZWZQdHI8TGFiZWw+IHJldHVybkNhbGxU
cnlTdGFydCA9IG5ld0xhYmVsKCk7CisgICAgICAgIGVtaXRMYWJlbChyZXR1cm5DYWxsVHJ5U3Rh
cnQuZ2V0KCkpOworICAgICAgICBUcnlEYXRhKiByZXR1cm5DYWxsVHJ5RGF0YSA9IHB1c2hUcnko
cmV0dXJuQ2FsbFRyeVN0YXJ0LmdldCgpKTsKKyAgICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCks
IHJldHVybk1ldGhvZC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCByZXR1cm5Bcmd1bWVudHMs
IG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7Cisg
ICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbENhdGNoSGVyZSA9IGVtaXRMYWJlbChuZXdM
YWJlbCgpLmdldCgpKTsKKyAgICAgICAgZW1pdEp1bXAocmV0aHJvdy5nZXQoKSk7CisKKyAgICAg
ICAgcG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxUcnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwg
cmV0dXJuQ2FsbENhdGNoSGVyZS5nZXQoKSk7CisgICAgICAgIGVtaXRMYWJlbChyZXRocm93Lmdl
dCgpKTsKKyAgICAgICAgZW1pdFRocm93KGV4Y2VwdGlvblJlZ2lzdGVyLmdldCgpKTsKKyAgICB9
CisKKyAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciBicmVhay1lZCBjb250cm9sIGZs
b3cuCiAgICAgZW1pdExhYmVsKHNjb3BlLT5icmVha1RhcmdldCgpKTsKKyAgICB7CisgICAgICAg
IFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3Jh
cnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5yZXR1cm5LZXl3b3JkKTsKKyAg
ICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZpbmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1
cm5NZXRob2QuZ2V0KCkpLCBpdGVyYXRvckRvbmUuZ2V0KCkpOworCisgICAgICAgIENhbGxBcmd1
bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCAwKTsKKyAgICAgICAgZW1pdE1vdmUocmV0dXJu
QXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7CisgICAgICAgIGVtaXRD
YWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
cmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUt
PmRpdm90RW5kKCkpOworICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVt
cG9yYXJ5KCksIHZhbHVlLmdldCgpKSwgaXRlcmF0b3JEb25lLmdldCgpKTsKKyAgICAgICAgZW1p
dFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBp
cyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICB9CisKKyAgICBlbWl0TGFiZWwoaXRlcmF0b3JEb25l
LmdldCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVt
ZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogYmFzZSkKQEAgLTI2Nzgs
NiArMjczMCwyMyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhT
dHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbgogICAgIHJldHVybiBkc3Q7CiB9
CiAKKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc09iamVjdChSZWdpc3Rl
cklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2lzX29iamVj
dCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBk
c3QsIFJlZ2lzdGVySUQqIHNyYykKK3sKKyAgICBlbWl0T3Bjb2RlKG9wX2lzX3VuZGVmaW5lZCk7
CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7CisgICAgcmV0dXJuIGRzdDsKK30KKwogdm9pZCBC
eXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2Fs
UmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4UmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJl
Z2lzdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9C
eXRlY29kZUdlbmVyYXRvci5oCmluZGV4IGE3N2Y0YjdiMmFhMDBiODU3YTA4YzU4Y2Y2NDBlODQ4
MTY5M2M5NDAuLmU1N2E5OGIzN2ViNDg4ZWI1MGU0YTg5MTIyYTZlMGQzMWZiN2QwN2UgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0
b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKQEAgLTUyNSw2ICs1MjUsOSBAQAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4
dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVt
ZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUb0lu
ZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW5kZXgpOwogCisgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRJc09iamVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNy
Yyk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3Qs
IFJlZ2lzdGVySUQqIHNyYyk7CisKICAgICAgICAgdm9pZCBlbWl0UmVhZE9ubHlFeGNlcHRpb25J
Zk5lZWRlZCgpOwogCiAgICAgICAgIC8vIFN0YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3Qg
aGF2ZSBiZWVuIGVtaXR0ZWQuCkBAIC01MzksNiArNTQyLDcgQEAKICAgICAgICAgfQogCiAgICAg
ICAgIHZvaWQgZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
KyAgICAgICAgdm9pZCBlbWl0VGhyb3dUeXBlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsK
IAogICAgICAgICB2b2lkIGVtaXRQdXNoRnVuY3Rpb25OYW1lU2NvcGUoUmVnaXN0ZXJJRCogZHN0
LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFsdWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOwogICAgICAgICB2b2lkIGVtaXRQdXNoQ2F0Y2hTY29wZShSZWdpc3RlcklE
KiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSwgdW5z
aWduZWQgYXR0cmlidXRlcyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2Vu
ZXJhdG9ycy5jcHAKaW5kZXggN2IwY2RhNjg2Y2M0NzI3ZWNmMjhhZjdhNTdhNWUwNzUxMTM1YzNh
NS4uMTAwN2QyZDY3Yzk3NTdhNDFiM2IwMzcwZDEwOTQxY2FhMTVlOWQ0MSAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcApAQCAtMTA0NCwxMDcgKzEw
NDQsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW11bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
ICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwo
dm0pLCAiaW11bCIpOwogfQogCi1zdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRl
cmF0b3JOZXh0VGh1bmtHZW5lcmF0b3IoVk0qIHZtLCBBcnJheUl0ZXJhdGlvbktpbmQga2luZCkK
LXsKLSAgICB0eXBlZGVmIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRydXN0ZWRJbW0zMiBUcnVzdGVk
SW1tMzI7Ci0gICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpUcnVzdGVkSW1tUHRyIFRy
dXN0ZWRJbW1QdHI7Ci0gICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpBZGRyZXNzIEFk
ZHJlc3M7Ci0gICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpCYXNlSW5kZXggQmFzZUlu
ZGV4OwotICAgIHR5cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6SnVtcCBKdW1wOwotICAgIAot
ICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0KHZtKTsKLSAgICAvLyBNYWtlIHN1cmUgd2UncmUg
YmVpbmcgY2FsbGVkIG9uIGFuIGFycmF5IGl0ZXJhdG9yLCBhbmQgbG9hZCBtX2l0ZXJhdGVkT2Jq
ZWN0LCBhbmQgbV9uZXh0SW5kZXggaW50byByZWdUMCBhbmQgcmVnVDEgcmVzcGVjdGl2ZWx5Ci0g
ICAgaml0LmxvYWRBcmd1bWVudFdpdGhTcGVjaWZpY0NsYXNzKEpTQXJyYXlJdGVyYXRvcjo6aW5m
bygpLCBTcGVjaWFsaXplZFRodW5rSklUOjpUaGlzQXJndW1lbnQsIFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1Q0LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7Ci0KLSAgICAvLyBFYXJseSBl
eGl0IGlmIHdlIGRvbid0IGhhdmUgYSB0aHVuayBmb3IgdGhpcyBmb3JtIG9mIGl0ZXJhdGlvbgot
ICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpB
Ym92ZU9yRXF1YWwsIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJ
dGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRpb25LaW5kKCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlJdGVy
YXRlS2V5VmFsdWUpKSk7Ci0gICAgCi0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZkl0ZXJhdGVkT2JqZWN0
KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgCi0gICAgaml0LmxvYWQzMihB
ZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNl
dE9mTmV4dEluZGV4KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7Ci0gICAgCi0gICAg
Ly8gUHVsbCBvdXQgdGhlIGJ1dHRlcmZseSBmcm9tIGl0ZXJhdGVkT2JqZWN0Ci0gICAgaml0Lmxv
YWQ4KEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdU
eXBlT2Zmc2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMyk7Ci0gICAgaml0LmxvYWRQ
dHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZs
eU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIpOwotICAgIEp1bXAgbnVsbEJ1
dHRlcmZseSA9IGppdC5icmFuY2hUZXN0UHRyKFNwZWNpYWxpemVkVGh1bmtKSVQ6Olplcm8sIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAgICAKLSAgICBKdW1wIG5vdERvbmUgPSBqaXQu
YnJhbmNoMzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6QmVsb3csIFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QxLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBCdXR0ZXJmbHk6Om9m
ZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQotICAgIG51bGxCdXR0ZXJmbHkubGluaygmaml0KTsK
LQotICAgIC8vIFJldHVybiB0aGUgdGVybWluYXRpb24gc2lnbmFsIHRvIGluZGljYXRlIHRoYXQg
d2UndmUgZmluaXNoZWQKLSAgICBqaXQubW92ZShUcnVzdGVkSW1tUHRyKHZtLT5pdGVyYXRpb25U
ZXJtaW5hdG9yLmdldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIGppdC5y
ZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIAotICAgIG5vdERv
bmUubGluaygmaml0KTsKLSAgICAKLSAgICBpZiAoa2luZCA9PSBBcnJheUl0ZXJhdGVLZXkpIHsK
LSAgICAgICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0g
ICAgICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7Ci0gICAg
ICAgIHJldHVybiBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2
bSksICJhcnJheS1pdGVyYXRvci1uZXh0LWtleSIpOwotICAgICAgICAKLSAgICB9Ci0gICAgQVNT
RVJUKGtpbmQgPT0gQXJyYXlJdGVyYXRlVmFsdWUpOwotICAgIAotICAgIC8vIE9rYXksIG5vdyB3
ZSdyZSByZXR1cm5pbmcgYSB2YWx1ZSBzbyBtYWtlIHN1cmUgd2UncmUgaW5zaWRlIHRoZSB2ZWN0
b3Igc2l6ZQotICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRo
dW5rSklUOjpBYm92ZU9yRXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBBZGRyZXNz
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVu
Z3RoKCkpKSk7Ci0gICAgCi0gICAgLy8gU28gbm93IHdlIHBlcmZvcm0gaW5saW5lIGxvYWRzIGZv
ciBpbnQzMiwgdmFsdWUvdW5kZWNpZGVkLCBhbmQgZG91YmxlIHN0b3JhZ2UKLSAgICBKdW1wIHVu
ZGVjaWRlZFN0b3JhZ2UgPSBqaXQuYnJhbmNoMzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6RXF1YWws
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoVW5kZWNp
ZGVkKSk7Ci0gICAgSnVtcCBub3RDb250aWd1b3VzU3RvcmFnZSA9IGppdC5icmFuY2gzMihTcGVj
aWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRy
dXN0ZWRJbW0zMihBcnJheVdpdGhDb250aWd1b3VzKSk7Ci0gICAgCi0gICAgdW5kZWNpZGVkU3Rv
cmFnZS5saW5rKCZqaXQpOwotICAgIAotICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAgICAKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5s
b2FkNjQoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGltZXNFaWdodCksIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICBKdW1wIG5vdEhvbGUgPSBqaXQuYnJhbmNoVGVzdDY0
KFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vblplcm8sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
KTsKLSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZp
bmVkKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBub3RIb2xlLmxpbmsoJmppdCk7Ci0g
ICAgaml0LmFkZFB0cihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgIGpp
dC5yZXR1cm5KU1ZhbHVlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSNlbHNlCi0gICAg
aml0LmxvYWQzMihCYXNlSW5kZXgoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVjaWFsaXplZFRodW5rSklUOjpUaW1lc0VpZ2h0LCBKU1Zh
bHVlOjpvZmZzZXRPZlRhZygpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMpOwotICAgIEp1
bXAgbm90SG9sZSA9IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZh
bHVlVGFnKSk7Ci0gICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpVbmRlZmluZWRUYWcpLCBKU0ludGVyZmFjZUpJVDo6cmVnVDEpOwotICAgIGppdC5tb3Zl
KEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tMzIoMCksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7
Ci0gICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0gICAg
aml0LnJldHVybkpTVmFsdWUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTSW50ZXJmYWNl
SklUOjpyZWdUMSk7Ci0gICAgbm90SG9sZS5saW5rKCZqaXQpOwotICAgIGppdC5sb2FkMzIoQmFz
ZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGltZXNFaWdodCwgSlNWYWx1ZTo6b2Zmc2V0T2ZQ
YXlsb2FkKCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgaml0LmFkZDMyKFRy
dXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJh
eUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0gICAgaml0Lm1vdmUoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDMsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKLSAgICBqaXQu
cmV0dXJuSlNWYWx1ZShTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDEpOwotI2VuZGlmCi0gICAgbm90Q29udGlndW91c1N0b3JhZ2UubGluaygmaml0
KTsKLSAgICAKLSAgICBKdW1wIG5vdEludDMyU3RvcmFnZSA9IGppdC5icmFuY2gzMihTcGVjaWFs
aXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRydXN0
ZWRJbW0zMihBcnJheVdpdGhJbnQzMikpOwotICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2JqZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAgICBqaXQubG9hZDMyKEJhc2VJbmRleChTcGVjaWFs
aXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQsIEpTVmFsdWU6Om9mZnNldE9mUGF5bG9hZCgpKSwgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSks
IEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zm
c2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgIGppdC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCk7Ci0gICAgbm90SW50MzJTdG9yYWdlLmxpbmsoJmppdCk7Ci0gICAgCi0gICAg
aml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vdEVx
dWFsLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgVHJ1c3RlZEltbTMyKEFycmF5V2l0aERv
dWJsZSkpKTsKLSAgICBqaXQubG9hZFB0cihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMik7Ci0gICAgaml0LmxvYWREb3VibGUoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
VGltZXNFaWdodCksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIGppdC5hZGQz
MihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpT
QXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgIGppdC5yZXR1cm5Eb3Vi
bGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgCi0gICAgcmV0dXJuIGppdC5m
aW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImFycmF5LWl0ZXJh
dG9yLW5leHQtdmFsdWUiKTsKLX0KLQotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0
b3JOZXh0S2V5VGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAgIHJldHVybiBhcnJheUl0ZXJh
dG9yTmV4dFRodW5rR2VuZXJhdG9yKHZtLCBBcnJheUl0ZXJhdGVLZXkpOwotfQotCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcih2bSwgQXJy
YXlJdGVyYXRlVmFsdWUpOwotfQotICAgIAogfQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCmluZGV4IDI0NmRhMmVh
NjQ1NGI5ZTMwMjc2YWQyMTc3NGI1NWMyNTNkNDEwYzYuLmZkYjAwY2Y4MmFlNmIxMGRjYjNhMDM5
MzZiYzcwYThhM2RiM2I5YTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dl
bmVyYXRvcnMuaApAQCAtMTMwLDggKzEzMCw2IEBAIGlubGluZSBUaHVua0dlbmVyYXRvciB2aXJ0
dWFsVGh1bmtHZW5lcmF0b3JGb3IoCiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2Vu
ZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoVk0q
KTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJh
dG9yKFZNKik7CiAKIH0KICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUu
Y3BwCmluZGV4IGQ3OWNjNTJlMDkyYmM2ZTkwYjQxYmJlNzk5OGMyYWI3MDdhYTNkMmMuLmFkOGI3
NTkwZDg1ZTY1NmE5MTJiNGFhOTkxNzYwZmFkMzYzMDYwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHNJdGVyYXRvclByb3RvdHlw
ZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJB
cmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRp
b25zLmgiCiAjaW5jbHVkZSAiSlNBcmd1bWVudHNJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKIApAQCAtNDMsNyArNDQsNyBAQCB2b2lkIEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90
eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAg
IHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CiAKICAgICBKU0NfTkFUSVZFX0ZV
TkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0l0
ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Ci0gICAgSlNDX05BVElW
RV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgYXJn
dW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOworICAgIEpTQ19O
QVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgYXJndW1lbnRzSXRlcmF0b3JQ
cm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFt
ZSogY2FsbEZyYW1lKQpAQCAtNTUsOCArNTYsOCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRgog
ewogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChqc0Nhc3Q8SlNBcmd1bWVudHNJdGVyYXRv
cio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpLT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0KSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZy
YW1lLCByZXN1bHQsIGZhbHNlKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJ
dGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOwogfQogCiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9y
UHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0
b3JQcm90b3R5cGUuY3BwCmluZGV4IGM4ODAwZTNjZGNhNjI1MmVhYjk4ZmQwMjExODYxZTFkMGRi
ZWMxMTIuLmY3Mzk4NzNlZThlYjg4YTkxNzVmMDZkM2VhMzllYWI4YzgxNjc3YjQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90
b3R5cGUuY3BwCkBAIC0yMCwxMyArMjAsMjMgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFycmF5SXRlcmF0b3JQcm90b3R5cGUuaCIKIAor
bmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRlKEV4ZWNTdGF0ZSopOworCit9CisKKyNpbmNsdWRl
ICJBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5oIgorCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVy
YXRpb25zLmgiCiAjaW5jbHVkZSAiSlNBcnJheUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxs
SW5saW5lcy5oIgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBAIC0zNSwyMiArNDUsMzMg
QEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBBcnJheUl0ZXJhdG9yUHJv
dG90eXBlOjpzX2luZm8gPSB7ICJBcnJheSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENS
RUFURV9NRVRIT0RfVEFCTEUoQXJyYXlJdGVyYXRvclByb3RvdHlwZSkgfTsKIAotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdGUo
RXhlY1N0YXRlKik7Citjb25zdCBDbGFzc0luZm8gQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6c19p
bmZvID0geyAiQXJyYXkgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAmYXJyYXlJdGVyYXRvclBy
b3RvdHlwZVRhYmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEFycmF5SXRlcmF0b3JQcm90b3R5cGUp
IH07CisKKy8qIFNvdXJjZSBmb3IgQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaAorQGJlZ2lu
IGFycmF5SXRlcmF0b3JQcm90b3R5cGVUYWJsZQorICBuZXh0ICAgICAgYXJyYXlJdGVyYXRvclBy
b3RvdHlwZUZ1bmNOZXh0ICBEb250RW51bXxGdW5jdGlvbiAwCitAZW5kCisqLwogCiB2b2lkIEFy
cmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmpl
Y3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAg
QVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5
cGUodGhpcyk7Ci0KLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yUHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlLCBEb250RW51
bSwgMCk7CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRv
clByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yUHJvdG9GdW5jSXRlcmF0ZSwgRG9udEVudW0sIDAp
OwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5
cGVJdGVyYXRlKENhbGxGcmFtZSogY2FsbEZyYW1lKQorYm9vbCBBcnJheUl0ZXJhdG9yUHJvdG90
eXBlOjpnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1
cm4gZ2V0U3RhdGljRnVuY3Rpb25TbG90PEJhc2U+KGV4ZWMsIGFycmF5SXRlcmF0b3JQcm90b3R5
cGVUYWJsZSwganNDYXN0PEFycmF5SXRlcmF0b3JQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0
eU5hbWUsIHNsb3QpOwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJy
YXkgRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yUHJvdG9GdW5jSXRlcmF0ZShFeGVjU3RhdGUq
IGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT50aGlzVmFsdWUoKSk7
CiB9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oCmluZGV4IDEwZWU5YTZhMjY3NmQ5
OWQxOTM3ZDM4Yzg3ODEyOTU4NDRmYTBiNWQuLjU0N2UzMzI3MmQyZTRjMTM1Njk0MGI5OTNlNDNl
YWNmYzAyYzYyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Fy
cmF5SXRlcmF0b3JQcm90b3R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgKQEAgLTQ4LDEyICs0OCwxNyBAQCBjbGFzcyBBcnJh
eUl0ZXJhdG9yUHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAgICAgICBy
ZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBl
SW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQogCitwcm90
ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gT3ZlcnJp
ZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKIHByaXZhdGU6
CiAgICAgQXJyYXlJdGVyYXRvclByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJl
KQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICB7CiAgICAgfQorCiAgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGljIGJvb2wg
Z2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlOYW1lLCBQ
cm9wZXJ0eVNsb3QmKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IGYxMTE3NzNmMTA1NTc0OTgxZTk2ODc3YzQ3
OTNlNGU5NWFkYjU4NTguLmIxYWZmMzMxOGQxYjNjNjI4MDc4YTliMmQxMTljZTljOTFlMWRjOWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmll
cnMuaApAQCAtMjM1LDcgKzIzNSw5IEBACiAKICNkZWZpbmUgSlNDX0NPTU1PTl9QUklWQVRFX0lE
RU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFNRShtYWNybykgXAogICAgIEpTQ19DT01NT05fUFJJ
VkFURV9JREVOVElGSUVSU19FQUNIX1dFTExfS05PV05fU1lNQk9MKG1hY3JvKSBcCi0gICAgbWFj
cm8oaXRlcmF0b3JOZXh0KSBcCisgICAgbWFjcm8oaXRlcmF0ZWRPYmplY3QpIFwKKyAgICBtYWNy
byhhcnJheUl0ZXJhdG9yTmV4dEluZGV4KSBcCisgICAgbWFjcm8oYXJyYXlJdGVyYXRpb25LaW5k
KSBcCiAgICAgbWFjcm8ocmVzb2x2ZSkgXAogICAgIG1hY3JvKHJlamVjdCkgXAogICAgIG1hY3Jv
KHByb21pc2UpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0lu
dHJpbnNpYy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKaW5k
ZXggNTM4YjMyODRjMjRjMTMzNjQwZmE0N2UzZTQyN2JkZDY1NzlhYzRhOS4uZjgyODMzNjk1MDFl
MDk0NTMwNzE0MDlmNDA2Zjg5YTIwNjg5YTYwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50cmluc2ljLmgKQEAgLTUyLDEwICs1Miw3IEBAIGVudW0gSW50cmluc2ljIHsKICAg
ICBTdHJpbmdQcm90b3R5cGVWYWx1ZU9mSW50cmluc2ljLAogICAgIElNdWxJbnRyaW5zaWMsCiAg
ICAgRlJvdW5kSW50cmluc2ljLAotICAgIEFycmF5SXRlcmF0b3JOZXh0VmFsdWVJbnRyaW5zaWMs
Ci0gICAgQXJyYXlJdGVyYXRvck5leHRLZXlJbnRyaW5zaWMsCi0gICAgQXJyYXlJdGVyYXRvck5l
eHRHZW5lcmljSW50cmluc2ljLAotICAgIAorCiAgICAgLy8gRGVidWdnaW5nIGludHJpbnNpY3Mu
IFRoZXNlIGFyZSBtZWFudCB0byBiZSB1c2VkIGFzIHRlc3RpbmcgaGFja3Mgd2l0aGluCiAgICAg
Ly8ganNjLmNwcCBhbmQgc2hvdWxkIG5ldmVyIGJlIGV4cG9zZWQgdG8gdXNlcnMuCiAgICAgREZH
VHJ1ZUludHJpbnNpYywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
dGVyYXRvck9wZXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIwMWQzM2Q2MWNlNjAxNTVjZGIyN2Yw
Nzg3MTQ4OGNhM2U5NjNiNGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUg
IkVycm9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0
cnVjdG9yLmgiCisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBKU0MgeworCitK
U1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IsIEpT
VmFsdWUgdmFsdWUpCit7CisgICAgSlNWYWx1ZSBuZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQo
ZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0KTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgQ2FsbERh
dGEgbmV4dEZ1bmN0aW9uQ2FsbERhdGE7CisgICAgQ2FsbFR5cGUgbmV4dEZ1bmN0aW9uQ2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxEYXRhKTsKKyAg
ICBpZiAobmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXR1
cm4gdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBuZXh0
RnVuY3Rpb25Bcmd1bWVudHM7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIG5l
eHRGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0g
Y2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rp
b25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50cyk7CisgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAg
IGlmICghcmVzdWx0LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihl
eGVjLCBBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9i
amVjdC4iKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIGl0ZXJhdG9yTmV4
dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IpCit7CisgICAgcmV0dXJuIGl0ZXJh
dG9yTmV4dChleGVjLCBpdGVyYXRvciwgSlNWYWx1ZSgpKTsKK30KKworSlNWYWx1ZSBpdGVyYXRv
clZhbHVlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyUmVzdWx0KQoreworICAgIHJldHVy
biBpdGVyUmVzdWx0LmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlKTsK
K30KKworYm9vbCBpdGVyYXRvckNvbXBsZXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVy
UmVzdWx0KQoreworICAgIEpTVmFsdWUgZG9uZSA9IGl0ZXJSZXN1bHQuZ2V0KGV4ZWMsIGV4ZWMt
PnZtKCkucHJvcGVydHlOYW1lcy0+ZG9uZSk7CisgICAgcmV0dXJuIGRvbmUudG9Cb29sZWFuKGV4
ZWMpOworfQorCitKU1ZhbHVlIGl0ZXJhdG9yU3RlcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUg
aXRlcmF0b3IpCit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpdGVyYXRvck5leHQoZXhlYywgaXRl
cmF0b3IpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CisgICAgYm9vbCBkb25lID0gaXRlcmF0b3JDb21wbGV0ZShleGVjLCByZXN1
bHQpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2Up
OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUq
IGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IpCit7CisgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4
Y2VwdGlvbigpOworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KKyAgICBK
U1ZhbHVlIHJldHVybkZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJv
cGVydHlOYW1lcy0+cmV0dXJuS2V5d29yZCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigp
KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQo
KSkgeworICAgICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBleGVj
LT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisKKyAgICBDYWxsRGF0YSByZXR1cm5GdW5jdGlvbkNhbGxEYXRhOworICAgIENhbGxU
eXBlIHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXR1cm5GdW5jdGlvbiwg
cmV0dXJuRnVuY3Rpb25DYWxsRGF0YSk7CisgICAgaWYgKHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUg
PT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAg
ICAgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFy
Z3VtZW50czsKKyAgICBKU1ZhbHVlIGlubmVyUmVzdWx0ID0gY2FsbChleGVjLCByZXR1cm5GdW5j
dGlvbiwgcmV0dXJuRnVuY3Rpb25DYWxsVHlwZSwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSwgaXRl
cmF0b3IsIHJldHVybkZ1bmN0aW9uQXJndW1lbnRzKTsKKworICAgIGlmICghZXhjZXB0aW9uLmlz
RW1wdHkoKSkgeworICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2Vw
dGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICghaW5uZXJSZXN1bHQuaXNPYmplY3Qo
KSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkl0ZXJhdG9y
IHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgICAgIHJldHVybjsK
KyAgICB9Cit9CisKK0pTT2JqZWN0KiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSB2YWx1ZSwgYm9vbCBkb25lKQoreworICAgIEpTT2JqZWN0KiByZXN1bHRP
YmplY3QgPSBjb25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICByZXN1bHRPYmplY3QtPnB1
dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZG9uZSwganNCb29sZWFu
KGRvbmUpKTsKKyAgICByZXN1bHRPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5w
cm9wZXJ0eU5hbWVzKCkudmFsdWUsIHZhbHVlKTsKKyAgICByZXR1cm4gcmVzdWx0T2JqZWN0Owor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJlZjM4ODM1YWFlZWVmYWVj
MTJjODBhOTVlYjEzM2I3OGRhZGQyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwu
Y29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRl
ZiBJdGVyYXRvck9wZXJhdGlvbnNfaAorI2RlZmluZSBJdGVyYXRvck9wZXJhdGlvbnNfaAorCisj
aW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJh
dG9yLCBKU1ZhbHVlKTsKK0pTVmFsdWUgaXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSosIEpTVmFsdWUg
aXRlcmF0b3IpOworSlNWYWx1ZSBpdGVyYXRvclZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRl
clJlc3VsdCk7Citib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVy
UmVzdWx0KTsKK0pTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0
b3IpOwordm9pZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0b3IpOwor
SlNPYmplY3QqIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgYm9v
bCBkb25lKTsKKworfQorCisjZW5kaWYgLy8gIWRlZmluZWQoSXRlcmF0b3JPcGVyYXRpb25zX2gp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0
b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNw
cAppbmRleCAzM2JhYjcxYjY3OTAyODg5Njc5NTI2M2E0ZmM1OWEzZWM4ZGMzZGJmLi4zZTdkMjA4
MTY1NGQ4NjFjOGQ5ZTE4MWNjZTIwMDZkMTdmYjk1ZjUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKQEAgLTM1LDEzMiArMzUsMjYg
QEAKIAogY29uc3QgQ2xhc3NJbmZvIEpTQXJyYXlJdGVyYXRvcjo6c19pbmZvID0geyAiQXJyYXlJ
dGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUl0
ZXJhdG9yKSB9OwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0
ZXJhdG9yTmV4dEtleShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9T
VF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0VmFsdWUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMoRXhlY1N0YXRl
Kik7Ci0KLXZvaWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xv
YmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEFycmF5SXRlcmF0aW9uS2luZCBraW5kLCBKU09iamVj
dCogaXRlcmF0ZWRPYmplY3QpCit2b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24o
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCosIEFycmF5SXRlcmF0aW9uS2luZCBraW5kLCBKU09iamVj
dCogaXRlcmF0ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAg
IEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKLSAgICBtX2l0ZXJhdGlvbktpbmQgPSBraW5kOwot
ICAgIG1faXRlcmF0ZWRPYmplY3Quc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7CisKKyAg
ICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdGVkT2JqZWN0UHJpdmF0ZU5h
bWUsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMt
PmFycmF5SXRlcmF0b3JOZXh0SW5kZXhQcml2YXRlTmFtZSwganNOdW1iZXIoMCkpOworICAgIEpT
U3RyaW5nKiBpdGVtS2luZCA9IG51bGxwdHI7CiAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgY2Fz
ZSBBcnJheUl0ZXJhdGVLZXk6Ci0gICAgICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9y
TmV4dEtleSwgRG9udEVudW0sIDAsIEFycmF5SXRlcmF0b3JOZXh0S2V5SW50cmluc2ljKTsKKyAg
ICAgICAgaXRlbUtpbmQgPSBqc05vbnRyaXZpYWxTdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoImtl
eSIpKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBBcnJheUl0ZXJhdGVWYWx1ZToKLSAgICAg
ICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0
b3JOZXh0UHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0b3JOZXh0VmFsdWUsIERvbnRFbnVtLCAwLCBB
cnJheUl0ZXJhdG9yTmV4dFZhbHVlSW50cmluc2ljKTsKKyAgICAgICAgaXRlbUtpbmQgPSBqc05v
bnRyaXZpYWxTdHJpbmcoJnZtLCBBU0NJSUxpdGVyYWwoInZhbHVlIikpOwogICAgICAgICBicmVh
azsKLSAgICBkZWZhdWx0OgotICAgICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgYXJyYXlJdGVyYXRvck5l
eHRHZW5lcmljLCBEb250RW51bSwgMCwgQXJyYXlJdGVyYXRvck5leHRHZW5lcmljSW50cmluc2lj
KTsKKyAgICBjYXNlIEFycmF5SXRlcmF0ZUtleVZhbHVlOgorICAgICAgICBpdGVtS2luZCA9IGpz
Tm9udHJpdmlhbFN0cmluZygmdm0sIEFTQ0lJTGl0ZXJhbCgia2V5K3ZhbHVlIikpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0KLX0KLSAgICAKLSAgICAKLXZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2
aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAg
SlNBcnJheUl0ZXJhdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRvcio+KGNl
bGwpOwotICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsK
LSAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0KTsKLX0KLQotc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBB
cnJheUl0ZXJhdGlvbktpbmQga2luZCwgc2l6ZV90IGluZGV4LCBKU1ZhbHVlIHJlc3VsdCwgYm9v
bCBkb25lKQotewotICAgIGlmIChkb25lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNhbGxGcmFtZS0+dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKTsKLSAgICAKLSAgICBz
d2l0Y2ggKGtpbmQgJiB+QXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7Ci0gICAgY2FzZSBBcnJheUl0
ZXJhdGVLZXk6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgp
KTsKLSAgICAgICAgCi0gICAgY2FzZSBBcnJheUl0ZXJhdGVWYWx1ZToKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwotICAgICAgICAKLSAgICBjYXNlIEFycmF5SXRlcmF0
ZUtleVZhbHVlOiB7Ci0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAg
IGFyZ3MuYXBwZW5kKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHJlc3Vs
dCk7Ci0gICAgICAgIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmNh
bGxlZSgpLT5nbG9iYWxPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
b25zdHJ1Y3RBcnJheShjYWxsRnJhbWUsIDAsIGdsb2JhbE9iamVjdCwgYXJncykpOwotICAgICAg
ICAKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKLSAgICB9Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotfQot
Ci1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRv
ck5leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgSlNBcnJheUl0ZXJhdG9yKiBpdGVy
YXRvciA9IGpzRHluYW1pY0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2FsbEZyYW1lLT50aGlzVmFs
dWUoKSk7Ci0gICAgaWYgKCFpdGVyYXRvcikgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJh
bWUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgQXJyYXlJdGVyYXRvci5uZXh0KCkgb24gYSBu
b24tQXJyYXlJdGVyYXRvciBvYmplY3QiKSkpOwotICAgIH0KLSAgICBKU09iamVjdCogaXRlcmF0
ZWRPYmplY3QgPSBpdGVyYXRvci0+aXRlcmF0ZWRPYmplY3QoKTsKLSAgICBzaXplX3QgaW5kZXgg
PSBpdGVyYXRvci0+bmV4dEluZGV4KCk7Ci0gICAgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQgPSBp
dGVyYXRvci0+aXRlcmF0aW9uS2luZCgpOwotICAgIEpTVmFsdWUganNMZW5ndGggPSBKU1ZhbHVl
KGl0ZXJhdGVkT2JqZWN0KS5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMo
KS5sZW5ndGgpOwotICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKLSAgICAKLSAgICBzaXplX3QgbGVuZ3Ro
ID0ganNMZW5ndGgudG9VSW50MzIoY2FsbEZyYW1lKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0g
ICAgCi0gICAgaWYgKGluZGV4ID49IGxlbmd0aCkgewotICAgICAgICBpdGVyYXRvci0+ZmluaXNo
KCk7Ci0gICAgICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxsRnJhbWUsIGtpbmQs
IGluZGV4LCBqc1VuZGVmaW5lZCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYgKEpTVmFsdWUgcmVz
dWx0ID0gaXRlcmF0ZWRPYmplY3QtPnRyeUdldEluZGV4UXVpY2tseShpbmRleCkpIHsKLSAgICAg
ICAgaXRlcmF0b3ItPnNldE5leHRJbmRleChpbmRleCArIDEpOwotICAgICAgICByZXR1cm4gY3Jl
YXRlSXRlcmF0b3JSZXN1bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwgcmVzdWx0LCBmYWxzZSk7
Ci0gICAgfQotICAgIAotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICBQ
cm9wZXJ0eVNsb3Qgc2xvdChpdGVyYXRlZE9iamVjdCk7Ci0gICAgaWYgKGtpbmQgPiBBcnJheUl0
ZXJhdGVTcGFyc2VUYWcpIHsKLSAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIGluZGV4ZWQg
cHJvcGVydHkgd2lsbCBiZSBhbiBvd24gcHJvcGVydHkgc28gY2FjaGUgdGhlIGdldE93blByb3Bl
cnR5Ci0gICAgICAgIC8vIG1ldGhvZCBsb2NhbGx5Ci0gICAgICAgIGF1dG8gZ2V0T3duUHJvcGVy
dHlTbG90QnlJbmRleCA9IGl0ZXJhdGVkT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9w
ZXJ0eVNsb3RCeUluZGV4OwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAg
ICAgICAgIGlmIChnZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGl0ZXJhdGVkT2JqZWN0LCBjYWxs
RnJhbWUsIGluZGV4LCBzbG90KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNsb3QuZ2V0
VmFsdWUoY2FsbEZyYW1lLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICBpZiAoaXRlcmF0ZWRPYmplY3QtPmdldFByb3BlcnR5U2xvdChj
YWxsRnJhbWUsIGluZGV4LCBzbG90KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNsb3Qu
Z2V0VmFsdWUoY2FsbEZyYW1lLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlm
IChpdGVyYXRlZE9iamVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaW5kZXgsIHNsb3Qp
KQotICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwotICAg
IAotICAgIGlmIChpbmRleCA9PSBsZW5ndGgpCi0gICAgICAgIGl0ZXJhdG9yLT5maW5pc2goKTsK
LSAgICBlbHNlCi0gICAgICAgIGl0ZXJhdG9yLT5zZXROZXh0SW5kZXgoaW5kZXggKyAxKTsKLSAg
ICByZXR1cm4gY3JlYXRlSXRlcmF0b3JSZXN1bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwganNV
bmRlZmluZWQoKSwgaW5kZXggPT0gbGVuZ3RoKTsKLX0KLSAgICAKLUVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHRLZXkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17
Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7Ci19Ci0gICAgCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0VmFsdWUoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7
Ci19Ci0gICAgCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0
R2VuZXJpYyhDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRv
ck5leHQoY2FsbEZyYW1lKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmFy
cmF5SXRlcmF0aW9uS2luZFByaXZhdGVOYW1lLCBpdGVtS2luZCk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKaW5kZXggN2JiMGZj
NWQzNjljYzA3NDEyMzY3YjZiOTg1OWNhOTViNjUxZDY4Yy4uMmU5NzZiZTQ1ODhhMmM4M2FjYjdl
MDMyZDE1ODgyZGMyYTBhMWI0OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNBcnJheUl0ZXJhdG9yLmgKQEAgLTMzLDExICszMyw3IEBACiBlbnVtIEFycmF5SXRlcmF0
aW9uS2luZCA6IHVpbnQzMl90IHsKICAgICBBcnJheUl0ZXJhdGVLZXksCiAgICAgQXJyYXlJdGVy
YXRlVmFsdWUsCi0gICAgQXJyYXlJdGVyYXRlS2V5VmFsdWUsCi0gICAgQXJyYXlJdGVyYXRlU3Bh
cnNlVGFnID0gNCwKLSAgICBBcnJheUl0ZXJhdGVTcGFyc2VLZXksCi0gICAgQXJyYXlJdGVyYXRl
U3BhcnNlVmFsdWUsCi0gICAgQXJyYXlJdGVyYXRlU3BhcnNlS2V5VmFsdWUKKyAgICBBcnJheUl0
ZXJhdGVLZXlWYWx1ZQogfTsKIAogY2xhc3MgSlNBcnJheUl0ZXJhdG9yIDogcHVibGljIEpTTm9u
RmluYWxPYmplY3QgewpAQCAtNTksMzAgKzU1LDE0IEBAIGNsYXNzIEpTQXJyYXlJdGVyYXRvciA6
IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAg
IH0KIAotICAgIEFycmF5SXRlcmF0aW9uS2luZCBpdGVyYXRpb25LaW5kKCkgY29uc3QgeyByZXR1
cm4gbV9pdGVyYXRpb25LaW5kOyB9Ci0gICAgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KCkgY29u
c3QgeyByZXR1cm4gbV9pdGVyYXRlZE9iamVjdC5nZXQoKTsgfQotICAgIHNpemVfdCBuZXh0SW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX25leHRJbmRleDsgfQotICAgIHZvaWQgc2V0TmV4dEluZGV4
KHNpemVfdCBuZXh0SW5kZXgpIHsgbV9uZXh0SW5kZXggPSBuZXh0SW5kZXg7IH0KLSAgICB2b2lk
IGZpbmlzaCgpIHsgbV9uZXh0SW5kZXggPSBzdGQ6Om51bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6
bWF4KCk7IH0KLSAgICAKICAgICB1c2luZyBKU05vbkZpbmFsT2JqZWN0OjphcnJheVN0b3JhZ2VP
ck51bGw7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkl0ZXJhdGlvbktpbmQoKSB7IHJl
dHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUl0ZXJhdG9yLCBtX2l0ZXJhdGlvbktpbmQpOyB9
Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkl0ZXJhdGVkT2JqZWN0KCkgeyByZXR1cm4g
T0JKRUNUX09GRlNFVE9GKEpTQXJyYXlJdGVyYXRvciwgbV9pdGVyYXRlZE9iamVjdCk7IH0KLSAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTmV4dEluZGV4KCkgeyByZXR1cm4gT0JKRUNUX09G
RlNFVE9GKEpTQXJyYXlJdGVyYXRvciwgbV9uZXh0SW5kZXgpOyB9Ci0KIHByaXZhdGU6CiAgICAg
SlNBcnJheUl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDog
QmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1fbmV4dEluZGV4KDApCiAgICAgewogICAg
IH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCosIEFycmF5
SXRlcmF0aW9uS2luZCwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KTsKLSAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7Ci0gICAgCi0gICAgQXJyYXlJ
dGVyYXRpb25LaW5kIG1faXRlcmF0aW9uS2luZDsKLSAgICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+
IG1faXRlcmF0ZWRPYmplY3Q7Ci0gICAgdWludDMyX3QgbV9uZXh0SW5kZXg7CiB9OwogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1
Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1
Y3Rvci5jcHAKaW5kZXggZjFhMmU1NjJmOWFiZjQwMmFiNjM4ZGMwOWM2ZWZjMzgwZDFjNWI0ZC4u
YWZkZmMyN2QyMGE4NjVhMzQzYWYyMWQ1Yzc0ODhkYzQzNjViMTcxNSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcApA
QCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShQUk9NSVNFUykKIAogI2luY2x1ZGUgIkVycm9y
LmgiCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1
ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNQcm9t
aXNlLmgiCkBAIC0yMzIsMTA0ICsyMzMsNTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSZWplY3QoRXhlY1N0YXRlKiBleGVjKQogICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoZGVmZXJyZWQtPnByb21pc2UoKSk7CiB9CiAKLUVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmFjZShFeGVjU3Rh
dGUqIGV4ZWMpCitzdGF0aWMgdm9pZCBwZXJmb3JtUHJvbWlzZVJhY2VMb29wKEV4ZWNTdGF0ZSog
ZXhlYywgSlNWYWx1ZSBpdGVyYXRvciwgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkLCBKU1Zh
bHVlIEMpCiB7Ci0gICAgLy8gLS0gUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKSAtLQotICAgIEpTVmFs
dWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwotCi0gICAgLy8gMS4gTGV0ICdDJyBiZSB0aGUgdGhpcyB2YWx1ZS4KLSAgICBKU1ZhbHVlIEMg
PSBleGVjLT50aGlzVmFsdWUoKTsKLQotICAgIC8vIDIuIExldCAnZGVmZXJyZWQnIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyBHZXREZWZlcnJlZChDKS4KLSAgICBKU1ZhbHVlIGRlZmVycmVkVmFs
dWUgPSBjcmVhdGVKU1Byb21pc2VEZWZlcnJlZEZyb21Db25zdHJ1Y3RvcihleGVjLCBDKTsKLQot
ICAgIC8vIDMuIFJldHVybklmQWJydXB0KGRlZmVycmVkKS4KLSAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
Ci0KLSAgICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBqc0Nhc3Q8SlNQcm9taXNlRGVm
ZXJyZWQqPihkZWZlcnJlZFZhbHVlKTsKLQotICAgIC8vIDQuIExldCAnaXRlcmF0b3InIGJlIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyBHZXRJdGVyYXRvcihpdGVyYWJsZSkuCi0gICAgSlNWYWx1ZSBp
dGVyYXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yUHJpdmF0ZU5hbWUpOwotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQp
KTsKLQotICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKLSAgICBDYWxsVHlw
ZSBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShpdGVyYXRvckZ1bmN0aW9u
LCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEpOwotICAgIGlmIChpdGVyYXRvckZ1bmN0aW9uQ2Fs
bFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZl
cnJlZCkpOwotICAgIH0KLQotICAgIEFyZ0xpc3QgaXRlcmF0b3JGdW5jdGlvbkFyZ3VtZW50czsK
LSAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBpdGVyYXRvckZ1bmN0aW9uLCBpdGVy
YXRvckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmFibGUs
IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOwotCi0gICAgLy8gNS4gUmVqZWN0SWZBYnJ1cHQo
aXRlcmF0b3IsIGRlZmVycmVkKS4KLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVk
KSk7Ci0KICAgICAvLyA2LiBSZXBlYXQKICAgICBkbyB7CiAgICAgICAgIC8vIGkuIExldCAnbmV4
dCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEl0ZXJhdG9yU3RlcChpdGVyYXRvcikuCi0gICAg
ICAgIEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCku
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUpOwotICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFi
cnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotCi0gICAgICAgIENhbGxEYXRhIG5leHRG
dW5jdGlvbkNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBuZXh0RnVuY3Rpb25DYWxsVHlwZSA9
IGdldENhbGxEYXRhKG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEpOwotICAgICAg
ICBpZiAobmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0gICAgICAgIH0KKyAgICAgICAg
SlNWYWx1ZSBuZXh0ID0gaXRlcmF0b3JTdGVwKGV4ZWMsIGl0ZXJhdG9yKTsKIAotICAgICAgICBN
YXJrZWRBcmd1bWVudEJ1ZmZlciBuZXh0RnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAgICAgIG5leHRG
dW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEpTVmFsdWUg
bmV4dCA9IGNhbGwoZXhlYywgbmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsVHlwZSwgbmV4
dEZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCBuZXh0RnVuY3Rpb25Bcmd1bWVudHMpOwotICAg
ICAgICAKICAgICAgICAgLy8gaWkuIFJlamVjdElmQWJydXB0KG5leHQsIGRlZmVycmVkKS4KICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLSAgICAKKyAgICAg
ICAgICAgIHJldHVybjsKKwogICAgICAgICAvLyBpaWkuIElmICduZXh0JyBpcyBmYWxzZSwgcmV0
dXJuIGRlZmVycmVkLltbUHJvbWlzZV1dLgotICAgICAgICAvLyBOb3RlOiBXZSBpbXBsZW1lbnQg
dGhpcyBhcyBhbiBpdGVyYXRpb25UZXJtaW5hdG9yCi0gICAgICAgIGlmIChuZXh0ID09IHZtLml0
ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGRlZmVycmVkLT5wcm9taXNlKCkpOwotICAgICAgICAKKyAgICAgICAgaWYgKG5leHQuaXNG
YWxzZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAgICAgIC8vIGl2LiBMZXQgJ25leHRW
YWx1ZScgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEl0ZXJhdG9yVmFsdWUobmV4dCkuCiAgICAg
ICAgIC8vIHYuIFJlamVjdElmQWJydXB0KG5leHRWYWx1ZSwgZGVmZXJyZWQpLgotICAgICAgICAv
LyBOb3RlOiAnbmV4dCcgaXMgYWxyZWFkeSB0aGUgdmFsdWUsIHNvIHRoZXJlIGlzIG5vdGhpbmcg
dG8gZG8gaGVyZS4KKyAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4
ZWMsIG5leHQpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAg
ICByZXR1cm47CiAKICAgICAgICAgLy8gdmkuIExldCAnbmV4dFByb21pc2UnIGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyBJbnZva2UoQywgInJlc29sdmUiLCAobmV4dFZhbHVlKSkuCi0gICAgICAg
IEpTVmFsdWUgcmVzb2x2ZUZ1bmN0aW9uID0gQy5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+
cmVzb2x2ZSk7CisgICAgICAgIEpTVmFsdWUgcmVzb2x2ZUZ1bmN0aW9uID0gQy5nZXQoZXhlYywg
ZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5yZXNvbHZlKTsKICAgICAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRS
ZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICBDYWxsRGF0YSByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgcmVz
b2x2ZUZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXNvbHZlRnVuY3Rpb24sIHJlc29s
dmVGdW5jdGlvbkNhbGxEYXRhKTsKICAgICAgICAgaWYgKHJlc29sdmVGdW5jdGlvbkNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBk
ZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKICAgICAgICAgTWFy
a2VkQXJndW1lbnRCdWZmZXIgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzOwotICAgICAgICByZXNv
bHZlRnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKG5leHQpOworICAgICAgICByZXNvbHZlRnVuY3Rp
b25Bcmd1bWVudHMuYXBwZW5kKG5leHRWYWx1ZSk7CiAgICAgICAgIEpTVmFsdWUgbmV4dFByb21p
c2UgPSBjYWxsKGV4ZWMsIHJlc29sdmVGdW5jdGlvbiwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5cGUs
IHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhLCBDLCByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHMpOwog
CiAgICAgICAgIC8vIHZpaS4gUmVqZWN0SWZBYnJ1cHQobmV4dFByb21pc2UsIGRlZmVycmVkKS4K
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICAvLyB2aWlpLiBMZXQgJ3Jlc3VsdCcgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIEludm9rZShuZXh0UHJvbWlzZSwgInRoZW4iLCAoZGVmZXJyZWQuW1tSZXNv
bHZlXV0sIGRlZmVycmVkLltbUmVqZWN0XV0pKS4KLSAgICAgICAgSlNWYWx1ZSB0aGVuRnVuY3Rp
b24gPSBuZXh0UHJvbWlzZS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dGhlbik7CisgICAg
ICAgIEpTVmFsdWUgdGhlbkZ1bmN0aW9uID0gbmV4dFByb21pc2UuZ2V0KGV4ZWMsIGV4ZWMtPnZt
KCkucHJvcGVydHlOYW1lcy0+dGhlbik7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24o
KSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4
ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgQ2FsbERhdGEg
dGhlbkZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIHRoZW5GdW5jdGlvbkNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEodGhlbkZ1bmN0aW9uLCB0aGVuRnVuY3Rpb25DYWxsRGF0YSk7CiAg
ICAgICAgIGlmICh0aGVuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKICAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHRoZW5GdW5j
dGlvbkFyZ3VtZW50czsKQEAgLTM0MCwxNCArMjk0LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmFjZShFeGVjU3RhdGUqIGV4ZWMpCiAK
ICAgICAgICAgLy8gaXguIFJlamVjdElmQWJydXB0KHJlc3VsdCwgZGVmZXJyZWQpLgogICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0
dXJuOwogICAgIH0gd2hpbGUgKHRydWUpOwogfQogCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY1JhY2UoRXhlY1N0
YXRlKiBleGVjKQogewotICAgIC8vIC0tIFByb21pc2UuYWxsKGl0ZXJhYmxlKSAtLQotCisgICAg
Ly8gLS0gUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKSAtLQogICAgIEpTVmFsdWUgaXRlcmFibGUgPSBl
eGVjLT5hcmd1bWVudCgwKTsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogCkBAIC0zNjEsOSAr
MzE0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3Rv
ckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAotICAgIC8v
IE5PVEU6IEEgbm9uLWFicnVwdCBjb21wbGV0aW9uIG9mIGNyZWF0ZUpTUHJvbWlzZURlZmVycmVk
RnJvbUNvbnN0cnVjdG9yIGltcGxpZXMgdGhhdAotICAgIC8vIEMgYW5kIGRlZmVycmVkVmFsdWUg
YXJlIG9iamVjdHMuCi0gICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBhc09iamVjdChDKTsKICAg
ICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBqc0Nhc3Q8SlNQcm9taXNlRGVmZXJyZWQq
PihkZWZlcnJlZFZhbHVlKTsKIAogICAgIC8vIDQuIExldCAnaXRlcmF0b3InIGJlIHRoZSByZXN1
bHQgb2YgY2FsbGluZyBHZXRJdGVyYXRvcihpdGVyYWJsZSkuCkBAIC0zODUsNDAgKzMzNSwzNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0Fs
bChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkp
OwogCisgICAgcGVyZm9ybVByb21pc2VSYWNlTG9vcChleGVjLCBpdGVyYXRvciwgZGVmZXJyZWQs
IEMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgaXRlcmF0b3JDbG9z
ZShleGVjLCBpdGVyYXRvcik7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGVmZXJyZWQtPnByb21pc2UoKSk7Cit9CisK
K3N0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm9taXNlQWxsKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1
ZSBpdGVyYXRvciwgSlNWYWx1ZSBDLCBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQpCit7Cisg
ICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBhc09iamVjdChDKTsKKyAgICBWTSYgdm0gPSBleGVj
LT52bSgpOworCiAgICAgLy8gNi4gTGV0ICd2YWx1ZXMnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyBBcnJheUNyZWF0ZSgwKS4KICAgICBKU0FycmF5KiB2YWx1ZXMgPSBjb25zdHJ1Y3RFbXB0eUFy
cmF5KGV4ZWMsIG51bGxwdHIsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKLSAgICAKKwog
ICAgIC8vIDcuIExldCAnY291bnRkb3duSG9sZGVyJyBiZSBSZWNvcmQgeyBbW0NvdW50ZG93bl1d
OiAwIH0uCiAgICAgTnVtYmVyT2JqZWN0KiBjb3VudGRvd25Ib2xkZXIgPSBjb25zdHJ1Y3ROdW1i
ZXIoZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCksIEpTVmFsdWUoMCkpOwotICAgIAor
CiAgICAgLy8gOC4gTGV0ICdpbmRleCcgYmUgMC4KICAgICB1bnNpZ25lZCBpbmRleCA9IDA7Ci0g
ICAgCisKICAgICAvLyA5LiBSZXBlYXQuCiAgICAgZG8gewogICAgICAgICAvLyBpLiBMZXQgJ25l
eHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpLgotICAg
ICAgICBKU1ZhbHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCBleGVjLT52bSgp
LnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lKTsKLSAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
YnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLQotICAgICAgICBDYWxsRGF0YSBuZXh0
RnVuY3Rpb25DYWxsRGF0YTsKLSAgICAgICAgQ2FsbFR5cGUgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUg
PSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxEYXRhKTsKLSAgICAg
ICAgaWYgKG5leHRGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewotICAgICAgICAg
ICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotICAgICAgICB9Ci0KLSAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbmV4dEZ1bmN0aW9uQXJndW1lbnRzOwotICAgICAgICBu
ZXh0RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBKU1Zh
bHVlIG5leHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUs
IG5leHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIGlpLiBSZWplY3RJZkFicnVwdChuZXh0LCBkZWZlcnJlZCku
CisgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7CiAg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAg
ICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICAvLyBpaWkuIElmICduZXh0JyBpcyBm
YWxzZSwKLSAgICAgICAgLy8gTm90ZTogV2UgaW1wbGVtZW50IHRoaXMgYXMgYW4gaXRlcmF0aW9u
VGVybWluYXRvcgotICAgICAgICBpZiAobmV4dCA9PSB2bS5pdGVyYXRpb25UZXJtaW5hdG9yLmdl
dCgpKSB7CisgICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSkgewogICAgICAgICAgICAgLy8gYS4g
SWYgJ2luZGV4JyBpcyAwLAogICAgICAgICAgICAgaWYgKCFpbmRleCkgewogICAgICAgICAgICAg
ICAgIC8vIGEuIExldCAncmVzb2x2ZVJlc3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIHRo
ZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QKQEAgLTQyOCw0MCArMzc1LDQ0IEBAIEVuY29kZWRK
U1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0
ZSogZXhlYykKIAogICAgICAgICAgICAgICAgIC8vIGIuIFJldHVybklmQWJydXB0KHJlc29sdmVS
ZXN1bHQpLgogICAgICAgICAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gYi4gUmV0dXJuIGRlZmVycmVkLltbUHJvbWlz
ZV1dLgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShkZWZlcnJlZC0+cHJvbWlz
ZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+cHJvbWlzZSgpOwogICAgICAgICB9
Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGl2LiBMZXQgJ25leHRWYWx1ZScgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIEl0ZXJhdG9yVmFsdWUobmV4dCkuCiAgICAgICAgIC8vIHYuIFJlamVjdElm
QWJydXB0KG5leHRWYWx1ZSwgZGVmZXJyZWQpLgotICAgICAgICAvLyBOb3RlOiAnbmV4dCcgaXMg
YWxyZWFkeSB0aGUgdmFsdWUsIHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICAg
ICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVlKGV4ZWMsIG5leHQpOworICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKKworICAgICAgICB2YWx1ZXMtPnB1c2goZXhlYywganNVbmRlZmluZWQoKSk7CiAKICAg
ICAgICAgLy8gdmkuIExldCAnbmV4dFByb21pc2UnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJ
bnZva2UoQywgInJlc29sdmUiLCAobmV4dFZhbHVlKSkuCiAgICAgICAgIEpTVmFsdWUgcmVzb2x2
ZUZ1bmN0aW9uID0gQy5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+cmVzb2x2ZSk7CiAgICAg
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBDYWxsRGF0YSByZXNvbHZlRnVuY3Rpb25D
YWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgcmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShyZXNvbHZlRnVuY3Rpb24sIHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhKTsKICAgICAg
ICAgaWYgKHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewogICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAgICAgIHJlc29sdmVGdW5jdGlvbkFy
Z3VtZW50cy5hcHBlbmQobmV4dCk7CisgICAgICAgIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cy5h
cHBlbmQobmV4dFZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSBuZXh0UHJvbWlzZSA9IGNhbGwoZXhl
YywgcmVzb2x2ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25DYWxsVHlwZSwgcmVzb2x2ZUZ1bmN0
aW9uQ2FsbERhdGEsIEMsIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cyk7CiAKICAgICAgICAgLy8g
dmlpLiBSZWplY3RJZkFicnVwdChuZXh0UHJvbWlzZSwgZGVmZXJyZWQpLgogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKICAgICAgICAgLy8gdmlpaS4gTGV0ICdjb3VudGRvd25GdW5jdGlvbicg
YmUgYSBuZXcgYnVpbHQtaW4gZnVuY3Rpb24gb2JqZWN0IGFzIGRlZmluZWQgaW4gUHJvbWlzZS5h
bGwgQ291bnRkb3duIEZ1bmN0aW9ucy4KICAgICAgICAgSlNGdW5jdGlvbiogY291bnRkb3duRnVu
Y3Rpb24gPSBjcmVhdGVQcm9taXNlQWxsQ291bnRkb3duRnVuY3Rpb24odm0sIHRoaXNPYmplY3Qt
Pmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgCisKICAgICAgICAgLy8gaXguIFNldCB0aGUgW1tJ
bmRleF1dIGludGVybmFsIHNsb3Qgb2YgJ2NvdW50ZG93bkZ1bmN0aW9uJyB0byAnaW5kZXgnLgog
ICAgICAgICBjb3VudGRvd25GdW5jdGlvbi0+cHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVz
LT5pbmRleFByaXZhdGVOYW1lLCBKU1ZhbHVlKGluZGV4KSk7CiAKQEAgLTQ3NywxMyArNDI4LDEz
IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5j
QWxsKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgLy8geGlpaS4gTGV0ICdyZXN1bHQnIGJlIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyBJbnZva2UobmV4dFByb21pc2UsICJ0aGVuIiwgKGNvdW50ZG93
bkZ1bmN0aW9uLCBkZWZlcnJlZC5bW1JlamVjdF1dKSkuCiAgICAgICAgIEpTVmFsdWUgdGhlbkZ1
bmN0aW9uID0gbmV4dFByb21pc2UuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRoZW4pOwog
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgQ2FsbERhdGEgdGhlbkZ1bmN0aW9u
Q2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIHRoZW5GdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2Fs
bERhdGEodGhlbkZ1bmN0aW9uLCB0aGVuRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgICAgIGlmICh0
aGVuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgICAgIHRocm93
VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1
cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdGhlbkZ1
bmN0aW9uQXJndW1lbnRzOwpAQCAtNDk0LDcgKzQ0NSw3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKIAog
ICAgICAgICAvLyB4aXYuIFJlamVjdElmQWJydXB0KHJlc3VsdCwgZGVmZXJyZWQpLgogICAgICAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0
dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgLy8geHYuIFNldCBpbmRleCB0byBpbmRleCAr
IDEuCiAgICAgICAgIGluZGV4Kys7CkBAIC01MDMsNiArNDU0LDU3IEBAIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhl
YykKICAgICAgICAgdWludDMyX3QgbmV3Q291bnRkb3duVmFsdWUgPSBjb3VudGRvd25Ib2xkZXIt
PmludGVybmFsVmFsdWUoKS5hc1VJbnQzMigpICsgMTsKICAgICAgICAgY291bnRkb3duSG9sZGVy
LT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBKU1ZhbHVlKG5ld0NvdW50ZG93blZhbHVlKSk7CiAgICAg
fSB3aGlsZSAodHJ1ZSk7CisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNl
Q29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICAvLyAtLSBQcm9taXNl
LmFsbChpdGVyYWJsZSkgLS0KKworICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVu
dCgwKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworCisgICAgLy8gMS4gTGV0ICdDJyBiZSB0
aGUgdGhpcyB2YWx1ZS4KKyAgICBKU1ZhbHVlIEMgPSBleGVjLT50aGlzVmFsdWUoKTsKKworICAg
IC8vIDIuIExldCAnZGVmZXJyZWQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBHZXREZWZlcnJl
ZChDKS4KKyAgICBKU1ZhbHVlIGRlZmVycmVkVmFsdWUgPSBjcmVhdGVKU1Byb21pc2VEZWZlcnJl
ZEZyb21Db25zdHJ1Y3RvcihleGVjLCBDKTsKKworICAgIC8vIDMuIFJldHVybklmQWJydXB0KGRl
ZmVycmVkKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAgICAvLyBOT1RFOiBBIG5vbi1hYnJ1
cHQgY29tcGxldGlvbiBvZiBjcmVhdGVKU1Byb21pc2VEZWZlcnJlZEZyb21Db25zdHJ1Y3RvciBp
bXBsaWVzIHRoYXQKKyAgICAvLyBDIGFuZCBkZWZlcnJlZFZhbHVlIGFyZSBvYmplY3RzLgorICAg
IEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IGpzQ2FzdDxKU1Byb21pc2VEZWZlcnJlZCo+
KGRlZmVycmVkVmFsdWUpOworCisgICAgLy8gNC4gTGV0ICdpdGVyYXRvcicgYmUgdGhlIHJlc3Vs
dCBvZiBjYWxsaW5nIEdldEl0ZXJhdG9yKGl0ZXJhYmxlKS4KKyAgICBKU1ZhbHVlIGl0ZXJhdG9y
RnVuY3Rpb24gPSBpdGVyYWJsZS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQ
cml2YXRlTmFtZSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworCisg
ICAgQ2FsbERhdGEgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhOworICAgIENhbGxUeXBlIGl0ZXJh
dG9yRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJh
dG9yRnVuY3Rpb25DYWxsRGF0YSk7CisgICAgaWYgKGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSA9
PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7
CisgICAgfQorCisgICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzOworICAgIEpT
VmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVu
Y3Rpb25DYWxsVHlwZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYWJsZSwgaXRlcmF0
b3JGdW5jdGlvbkFyZ3VtZW50cyk7CisKKyAgICAvLyA1LiBSZWplY3RJZkFicnVwdChpdGVyYXRv
ciwgZGVmZXJyZWQpLgorICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKwor
ICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybVByb21pc2VBbGwoZXhlYywgaXRlcmF0b3IsIEMs
IGRlZmVycmVkKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgaXRl
cmF0b3JDbG9zZShleGVjLCBpdGVyYXRvcik7CisgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9u
KGV4ZWMsIGRlZmVycmVkKSk7CisgICAgfQorICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVz
dWx0KTsKIH0KIAogSlNQcm9taXNlKiBjb25zdHJ1Y3RQcm9taXNlKEV4ZWNTdGF0ZSogZXhlYywg
SlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNGdW5jdGlvbiogcmVzb2x2ZXIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlw
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlw
ZS5jcHAKaW5kZXggYjIyMGI5ODc1ODg1YzQyZjljZTYzOGYzMjIyNDc5MmMzMjc2MTAxNy4uODA2
N2NiMjBmMGMzN2Q2NmE3NzhiZTlkMWVmNmFmZGIzYzZkZTgyOCAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcApAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hcEl0ZXJhdG9y
UHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRl
ICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNs
dWRlICJKU01hcEl0ZXJhdG9yLmgiCkBAIC00Niw3ICs0Nyw3IEBAIHZvaWQgTWFwSXRlcmF0b3JQ
cm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9i
amVjdCkKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOwogCiAgICAgSlND
X05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBN
YXBJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOwotICAgIEpTQ19O
QVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUs
IE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVtLCAwKTsKKyAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPm5leHQsIE1hcEl0ZXJhdG9yUHJvdG90eXBl
RnVuY05leHQsIERvbnRFbnVtLCAwKTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkK
QEAgLTU5LDEyICs2MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJh
dG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgSlNNYXBJdGVy
YXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTTWFwSXRlcmF0b3IqPihjYWxsRnJhbWUt
PnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQogICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3Qg
Y2FsbCBNYXBJdGVyYXRvci5uZXh0KCkgb24gYSBub24tTWFwSXRlcmF0b3Igb2JqZWN0IikpKTsK
LSAgICAKKwogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxs
RnJhbWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsK
KyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNh
bGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOwogICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9y
LmdldCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmpl
Y3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCmlu
ZGV4IDU3M2FjZmE1Y2Q3NjRiMDllZTc1NDNiMzQ3YjQ5YTUxMTFlNzA1MzcuLjUyNjFiZjNjYWNj
MWQ0ZTBlNDU3NTUxYTAyMmRlNjdjOTE5NGRmZjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKQEAgLTI2LDYgKzI2
LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTZXRJdGVyYXRvclByb3RvdHlw
ZS5oIgogCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNT
ZXRJdGVyYXRvci5oIgpAQCAtNDYsNyArNDcsNyBAQCB2b2lkIFNldEl0ZXJhdG9yUHJvdG90eXBl
OjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QpCiAg
ICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKIAogICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgU2V0SXRlcmF0
b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKLSAgICBKU0NfTkFUSVZFX0ZV
TkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lLCBTZXRJdGVy
YXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7CisgICAgSlNDX05BVElWRV9GVU5D
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBTZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0
LCBEb250RW51bSwgMCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRl
cmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCkBAIC02Miwx
MCArNjMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIFNldEl0ZXJhdG9yUHJvdG90
eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBj
YWxsIFNldEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1TZXRJdGVyYXRvciBvYmplY3QiKSkpOwog
CiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7CiAg
ICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZy
YW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpOworICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCks
IHRydWUpKTsKIH0KIAotCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKaW5kZXgg
MGY3MzU0MGY0MzU5NmE3MjQ2ZTI5NDI0MmJlMDUyYTFkNDU2NmRmOC4uNGU3MjU5OWQ4ZDI3ZWY1
YzM4NzRmYjEyNTY3MzAyMzk0M2MxNDFhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZN
LmNwcApAQCAtMzk2LDEwICszOTYsNiBAQCBzdGF0aWMgVGh1bmtHZW5lcmF0b3IgdGh1bmtHZW5l
cmF0b3JGb3JJbnRyaW5zaWMoSW50cmluc2ljIGludHJpbnNpYykKICAgICAgICAgcmV0dXJuIGxv
Z1RodW5rR2VuZXJhdG9yOwogICAgIGNhc2UgSU11bEludHJpbnNpYzoKICAgICAgICAgcmV0dXJu
IGltdWxUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIEFycmF5SXRlcmF0b3JOZXh0S2V5SW50cmlu
c2ljOgotICAgICAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHRLZXlUaHVua0dlbmVyYXRvcjsK
LSAgICBjYXNlIEFycmF5SXRlcmF0b3JOZXh0VmFsdWVJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVy
biBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlVGh1bmtHZW5lcmF0b3I7CiAgICAgZGVmYXVsdDoKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4dC13aXRoLWNhbGwuanMgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWl0ZXJhdG9ycy1uZXh0LXdpdGgtY2Fs
bC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZmQwMDliYTVlODNiYWY4YjU4NWNjZmQ0MWU2M2Y1ZWVlNmFmNzlh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9h
cnJheS1pdGVyYXRvcnMtbmV4dC13aXRoLWNhbGwuanMKQEAgLTAsMCArMSwxMTIgQEAKKy8vIFRo
aXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIHRoZSAlQXJyYXlJdGVyYXRvclByb3RvdHlw
ZSUubmV4dCBtZXRob2RzIHdpdGggY2FsbC4KKwordmFyIGFycmF5ID0gWzAsIDEsIDIsIDMsIDRd
OwordmFyIGFycmF5SXRlcmF0b3IgPSBhcnJheVtTeW1ib2wuaXRlcmF0b3JdKCk7Cit2YXIgYXJy
YXlJdGVyYXRvclByb3RvdHlwZSA9IGFycmF5SXRlcmF0b3IuX19wcm90b19fOwordmFyIGFycmF5
SXRlcmF0b3JQcm90b3R5cGVOZXh0ID0gYXJyYXlJdGVyYXRvclByb3RvdHlwZS5uZXh0OworCitp
ZiAoYXJyYXlJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpKQorICAgIHRocm93ICJuZXh0
IG1ldGhvZCBzaG91bGQgZXhpc3RzIG9uICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI7CitpZiAo
IWFycmF5SXRlcmF0b3JQcm90b3R5cGUuaGFzT3duUHJvcGVydHkoJ25leHQnKSkKKyAgICB0aHJv
dyAibmV4dCBtZXRob2Qgc2hvdWxkIGV4aXN0cyBvbiAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUi
OworCit2YXIgYXJyYXkxID0gWzQyLCA0MywgNDFdOwordmFyIGFycmF5MUl0ZXJhdG9yID0gYXJy
YXkxW1N5bWJvbC5pdGVyYXRvcl0oKTsKK3ZhciBpbmRleCA9IDA7Cit3aGlsZSAodHJ1ZSkgewor
ICAgIHZhciByZXN1bHQgPSBhcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dC5jYWxsKGFycmF5MUl0
ZXJhdG9yKTsKKyAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFsdWU7CisgICAgaWYgKHJlc3VsdC5k
b25lKSB7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBpZiAodmFsdWUgIT09IGFycmF5MVtp
bmRleCsrXSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK30K
K2lmIChpbmRleCAhPT0gMykKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCBpbmRleDogIiArIGluZGV4
OworCitmdW5jdGlvbiBpbmNyZW1lbnQoaXRlcikgeworICAgIHJldHVybiBhcnJheUl0ZXJhdG9y
UHJvdG90eXBlTmV4dC5jYWxsKGl0ZXIpOworfQordmFyIGFycmF5MSA9IFs0MiwgNDMsIC0yMF07
Cit2YXIgYXJyYXkyID0gWzQyLCA0MywgLTIwXTsKK3ZhciBhcnJheTFJdGVyYXRvciA9IGFycmF5
MVtTeW1ib2wuaXRlcmF0b3JdKCk7Cit2YXIgYXJyYXkySXRlcmF0b3IgPSBhcnJheTJbU3ltYm9s
Lml0ZXJhdG9yXSgpOworZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpIHsKKyAgICB2YXIgdmFs
dWUxID0gaW5jcmVtZW50KGFycmF5MUl0ZXJhdG9yKS52YWx1ZTsKKyAgICB2YXIgdmFsdWUyID0g
aW5jcmVtZW50KGFycmF5Mkl0ZXJhdG9yKS52YWx1ZTsKKyAgICBpZiAodmFsdWUxICE9PSB2YWx1
ZTIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWUxICsgIiAiICsg
dmFsdWUyOworfQorCit2YXIgYXJyYXkxID0gWyAwLCAxLCAyLCA0LCA1LCA2IF07Cit2YXIgYXJy
YXkxSXRlcmF0b3IgPSBhcnJheTFbU3ltYm9sLml0ZXJhdG9yXSgpOworCit2YXIgdmFsdWUgPSBh
cnJheTFJdGVyYXRvci5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09IDApCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK3ZhciB2YWx1ZSA9IGFycmF5MUl0ZXJhdG9y
Lm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gMSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIHZhbHVlOwordmFyIHZhbHVlID0gYXJyYXkxSXRlcmF0b3IubmV4dCgpLnZhbHVl
OworaWYgKHZhbHVlICE9PSAyKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFs
dWU7Cit2YXIgdmFsdWUgPSBhcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dC5jYWxsKGFycmF5MUl0
ZXJhdG9yKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gNCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIHZhbHVlOwordmFyIHZhbHVlID0gYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQu
Y2FsbChhcnJheTFJdGVyYXRvcikudmFsdWU7CitpZiAodmFsdWUgIT09IDUpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK3ZhciB2YWx1ZSA9IGFycmF5SXRlcmF0b3JQ
cm90b3R5cGVOZXh0LmNhbGwoYXJyYXkxSXRlcmF0b3IpLnZhbHVlOworaWYgKHZhbHVlICE9PSA2
KQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7Cit2YXIgdmFsdWUgPSBh
cnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dC5jYWxsKGFycmF5MUl0ZXJhdG9yKS52YWx1ZTsKK2lm
ICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsg
dmFsdWU7CisKK3ZhciBwcmltaXRpdmVzID0gWworICAgICJzdHJpbmciLAorICAgIDQyLAorICAg
IDAuMDMsCisgICAgZmFsc2UsCisgICAgdHJ1ZSwKKyAgICBTeW1ib2woIkNvY29hIiksCisgICAg
bnVsbCwKKyAgICB1bmRlZmluZWQKK107Citmb3IgKHZhciBwcmltaXRpdmUgb2YgcHJpbWl0aXZl
cykgeworICAgIHZhciBkaWRUaHJvdyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYXJyYXlJ
dGVyYXRvclByb3RvdHlwZU5leHQuY2FsbChwcmltaXRpdmUpOworICAgIH0gY2F0Y2ggKGUpIHsK
KyAgICAgICAgZGlkVGhyb3cgPSBlOworICAgIH0KKyAgICBpZiAoIWRpZFRocm93KQorICAgICAg
ICB0aHJvdyAiRXJyb3I6IG5vIGVycm9yIHRocm93biI7CisgICAgaWYgKFN0cmluZyhkaWRUaHJv
dykgIT09ICdUeXBlRXJyb3I6ICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVz
IHRoYXQgfHRoaXN8IGJlIE9iamVjdCcpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9y
IHRocm93bjogIiArIGRpZFRocm93OworfQorCit2YXIgbm9uUmVsYXRlZE9iamVjdHMgPSBbCisg
ICAge30sCisgICAgW10sCisgICAgbmV3IERhdGUoKSwKKyAgICBuZXcgRXJyb3IoKSwKKyAgICBP
YmplY3QoU3ltYm9sKCkpLAorICAgIG5ldyBTdHJpbmcoIkNhcHB1Y2Npbm8iKSwKKyAgICBuZXcg
TnVtYmVyKDQyKSwKKyAgICBuZXcgQm9vbGVhbihmYWxzZSksCisgICAgZnVuY3Rpb24gKCkgeyB9
LAorXTsKK2ZvciAodmFyIG9iamVjdCBvZiBub25SZWxhdGVkT2JqZWN0cykgeworICAgIHZhciBk
aWRUaHJvdyA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgYXJyYXlJdGVyYXRvclByb3RvdHlw
ZU5leHQuY2FsbChvYmplY3QpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZGlkVGhyb3cg
PSBlOworICAgIH0KKyAgICBpZiAoIWRpZFRocm93KQorICAgICAgICB0aHJvdyAiRXJyb3I6IG5v
IGVycm9yIHRocm93biI7CisgICAgaWYgKFN0cmluZyhkaWRUaHJvdykgIT09ICdUeXBlRXJyb3I6
ICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIEFy
cmF5IEl0ZXJhdG9yIEluc3RhbmNlJykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3Ig
dGhyb3duOiAiICsgZGlkVGhyb3c7Cit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2FycmF5LWl0ZXJhdG9ycy1uZXh0LmpzIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4dC5qcwpuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
MzRjMGU0YTk5ZGQ2NWRlMmIyMWU5NmUyNGRmNzE4ZDU4Y2Q5NzdhCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4
dC5qcwpAQCAtMCwwICsxLDkwIEBACisvLyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBv
ZiB0aGUgaXRlcmF0b3IubmV4dCBtZXRob2RzIG9uIEFycmF5IG9iamVjdHMKKwordmFyIHRlc3RB
cnJheSA9IFsxLDIsMyw0LDUsNl0KK3ZhciBrZXlzID0gdGVzdEFycmF5LmtleXMoKTsKK3ZhciBp
ID0gMDsKK3doaWxlICh0cnVlKSB7CisgICAgdmFyIHtkb25lLCB2YWx1ZToga2V5fSA9IGtleXMu
bmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAgICBicmVhazsKKyAgICBpZiAoa2V5ICE9PSBp
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGtleTsKKyAgICBpKys7Cit9
CisKK2lmICh0ZXN0QXJyYXkubGVuZ3RoICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlOiAiICsgaTsKKwordmFyIHZhbHVlID0ga2V5cy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUg
IT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOwor
Cit2YXIgdmFsdWVzID0gdGVzdEFycmF5W1N5bWJvbC5pdGVyYXRvcl0oKTsKK3ZhciBpID0gMDsK
K3doaWxlICh0cnVlKSB7CisgICAgdmFyIHtkb25lLCB2YWx1ZX0gPSB2YWx1ZXMubmV4dCgpOwor
ICAgIGlmIChkb25lKQorICAgICAgICBicmVhazsKKyAgICBpKys7CisgICAgaWYgKHZhbHVlICE9
PSBpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworfQorCitp
ZiAodGVzdEFycmF5Lmxlbmd0aCAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTog
IiArIGk7CisKK3ZhciB2YWx1ZSA9IHZhbHVlcy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09
IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworCit2
YXIgZW50cmllcyA9IHRlc3RBcnJheS5lbnRyaWVzKCk7Cit2YXIgaSA9IDA7CitkbyB7CisgICAg
dmFyIHtkb25lLCB2YWx1ZTogZW50cnl9ID0gZW50cmllcy5uZXh0KCk7CisgICAgaWYgKGRvbmUp
CisgICAgICAgIGJyZWFrOworICAgIHZhciBba2V5LCB2YWx1ZV0gPSBlbnRyeTsKKyAgICBpZiAo
dmFsdWUgIT09IHRlc3RBcnJheVtrZXldKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1
ZTogIiArIHZhbHVlICsgIiAiICsgdGVzdEFycmF5W2tleV07CisgICAgaWYgKGtleSAhPT0gaSkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7CisgICAgaSsrCisgICAg
aWYgKHZhbHVlICE9PSBpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZh
bHVlICsgIiAiICsgaTsKK30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RBcnJheS5sZW5ndGgg
IT09IGkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOworCit2YXIgdmFsdWUg
PSBlbnRyaWVzLm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisKK3ZhciBlbnRyaWVzID0gdGVzdEFy
cmF5LmVudHJpZXMoKTsKK3ZhciBpID0gMDsKK2RvIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBl
bnRyeX0gPSBlbnRyaWVzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7Cisg
ICAgdmFyIFtrZXksIHZhbHVlXSA9IGVudHJ5OworICAgIGlmICh2YWx1ZSAhPT0gdGVzdEFycmF5
W2tleV0pCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWUgKyAiICIg
KyB0ZXN0QXJyYXlba2V5XTsKKyAgICBpZiAoa2V5ICE9PSBpKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZTogIiArIGtleTsKKyAgICBpKysKKyAgICBpZiAoaSAlIDIgPT0gMCkKKyAg
ICAgICAgdGVzdEFycmF5W2ldICo9IDI7CisgICAgaWYgKGkgPCA0KQorICAgICAgICB0ZXN0QXJy
YXkucHVzaCh0ZXN0QXJyYXkubGVuZ3RoKQorICAgIGlmIChpID09IDQpCisgICAgICAgIGRlbGV0
ZSB0ZXN0QXJyYXlbNF0KKyAgICBpZiAoaSA9PSA1KQorICAgICAgICB0ZXN0QXJyYXlbNF0gPSA1
Cit9IHdoaWxlICghZG9uZSk7CisKK2lmICh0ZXN0QXJyYXkubGVuZ3RoICE9PSBpKQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZhbHVlID0gZW50cmllcy5uZXh0
KCkudmFsdWU7CitpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZTogIiArIHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9jdXN0b20taXRlcmF0b3JzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9jdXN0b20taXRlcmF0b3JzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZkNjQxM2ZlM2I1ZTkw
M2FmZmUzODAzZmQwMDRjMGNiMWYxYzY0ZjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2N1c3RvbS1pdGVyYXRvcnMuanMKQEAgLTAsMCArMSwz
MjIgQEAKKy8vIFRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIGN1c3RvbSBpdGVyYWJs
ZSBvYmplY3RzLgorCit2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7Cit2YXIgaXRlciA9IHsKKyAg
ICBfX2tleTogMCwKKyAgICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7Cisg
ICAgICAgICAgICBkb25lOiB0aGlzLl9fa2V5ID09PSA0MiwKKyAgICAgICAgICAgIHZhbHVlOiB0
aGlzLl9fa2V5KysKKyAgICAgICAgfTsKKyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisgICAgcmV0dXJuOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgfQorfTsKK3Zh
ciBleHBlY3RlZCA9IDA7Citmb3IgKHZhciB2YWx1ZSBvZiBpdGVyKSB7CisgICAgaWYgKHZhbHVl
ICE9PSBleHBlY3RlZCsrKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZh
bHVlOworfQoraWYgKHJldHVybkNhbGxlZCkKKyAgICB0aHJvdyAiRXJyb3I6IHJldHVybiBpcyBj
YWxsZWQuIjsKKworCisKK3ZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKK3ZhciBpdGVyID0gewor
ICAgIF9fa2V5OiAwLAorICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHsK
KyAgICAgICAgICAgIGRvbmU6IHRoaXMuX19rZXkgPT09IDQyLAorICAgICAgICAgICAgdmFsdWU6
IHRoaXMuX19rZXkrKworICAgICAgICB9OworICAgIH0sCisgICAgW1N5bWJvbC5pdGVyYXRvcl06
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICByZXR1cm46
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0
dXJuIHsKKyAgICAgICAgICAgIGRvbmU6IHRydWUsCisgICAgICAgICAgICB2YWx1ZTogdW5kZWZp
bmVkCisgICAgICAgIH07CisgICAgfQorfTsKKwordHJ5IHsKKyAgICBmb3IgKHZhciB2YWx1ZSBv
ZiBpdGVyKSB7CisgICAgICAgIHRocm93ICJFcnJvcjogVGVybWluYXRlIGl0ZXJhdGlvbi4iOwor
ICAgIH0KK30gY2F0Y2ggKGUpIHsKKyAgICBpZiAoU3RyaW5nKGUpICE9PSAiRXJyb3I6IFRlcm1p
bmF0ZSBpdGVyYXRpb24uIikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3du
OiAiICsgZTsKK30KK2lmICghcmV0dXJuQ2FsbGVkKQorICAgIHRocm93ICJFcnJvcjogcmV0dXJu
IGlzIG5vdCBjYWxsZWQuIjsKKworCisKK3ZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKK3ZhciBp
dGVyID0geworICAgIF9fa2V5OiAwLAorICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHsKKyAgICAgICAgICAgIGRvbmU6IHRoaXMuX19rZXkgPT09IDQyLAorICAgICAgICAg
ICAgdmFsdWU6IHRoaXMuX19rZXkrKworICAgICAgICB9OworICAgIH0sCisgICAgW1N5bWJvbC5p
dGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAg
ICByZXR1cm46IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsKKyAg
ICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGRvbmU6IHRydWUsCisgICAgICAgICAgICB2YWx1
ZTogdW5kZWZpbmVkCisgICAgICAgIH07CisgICAgfQorfTsKKworZm9yICh2YXIgdmFsdWUgb2Yg
aXRlcikgeworICAgIGJyZWFrOworfQoraWYgKCFyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cgIkVy
cm9yOiByZXR1cm4gaXMgbm90IGNhbGxlZC4iOworCisKKwordmFyIHJldHVybkNhbGxlZCA9IGZh
bHNlOwordmFyIGl0ZXIgPSB7CisgICAgX19rZXk6IDAsCisgICAgZ2V0IG5leHQoKSB7CisgICAg
ICAgIHRocm93ICJFcnJvcjogbG9va2luZyB1cCBuZXh0LiI7CisgICAgfSwKKyAgICBbU3ltYm9s
Lml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAor
ICAgIHJldHVybjogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOwor
ICAgIH0KK307Cit0cnkgeworICAgIGZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBJdGVyYXRpb24gc2hvdWxkIG5vdCBvY2N1ci4iOworICAgIH0KK30gY2F0
Y2ggKGUpIHsKKyAgICBpZiAoU3RyaW5nKGUpICE9PSAiRXJyb3I6IGxvb2tpbmcgdXAgbmV4dC4i
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246ICIgKyBlOworfQoraWYg
KHJldHVybkNhbGxlZCkKKyAgICB0aHJvdyAiRXJyb3I6IHJldHVybiBpcyBjYWxsZWQuIjsKKwor
CisKK3ZhciBpdGVyID0geworICAgIF9fa2V5OiAwLAorICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsK
KyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAgIGRvbmU6IHRoaXMuX19rZXkgPT09IDQyLAor
ICAgICAgICAgICAgdmFsdWU6IHRoaXMuX19rZXkrKworICAgICAgICB9OworICAgIH0sCisgICAg
W1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgfSwKKyAgICBnZXQgcmV0dXJuKCkgeworICAgICAgICB0aHJvdyAiRXJyb3I6IGxvb2tpbmcg
dXAgcmV0dXJuLiIKKyAgICB9Cit9OwordHJ5IHsKKyAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVy
KSB7CisgICAgICAgIHRocm93ICJFcnJvcjogVGVybWluYXRlIGl0ZXJhdGlvbi4iOworICAgIH0K
K30gY2F0Y2ggKGUpIHsKKyAgICBpZiAoU3RyaW5nKGUpICE9PSAiRXJyb3I6IGxvb2tpbmcgdXAg
cmV0dXJuLiIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGU7
Cit9CisKKworCit2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7Cit2YXIgaXRlciA9IHsKKyAgICBf
X2tleTogMCwKKyAgICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHRocm93ICJFcnJvcjog
bmV4dCBpcyBjYWxsZWQuIgorICAgIH0sCisgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICByZXR1cm46IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIGRvbmU6IHRydWUsCisgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkCisgICAg
ICAgIH07CisgICAgfQorfTsKKwordHJ5IHsKKyAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVyKSB7
CisgICAgICAgIHRocm93ICJFcnJvcjogVGVybWluYXRlIGl0ZXJhdGlvbi4iOworICAgIH0KK30g
Y2F0Y2ggKGUpIHsKKyAgICBpZiAoU3RyaW5nKGUpICE9PSAiRXJyb3I6IG5leHQgaXMgY2FsbGVk
LiIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGU7Cit9Citp
ZiAocmV0dXJuQ2FsbGVkKQorICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIGNhbGxlZC4iOwor
CisKKwordmFyIHJldHVybkNhbGxlZCA9IGZhbHNlOwordmFyIGl0ZXIgPSB7CisgICAgX19rZXk6
IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4geyBkb25lOiBmYWxz
ZSwgdmFsdWU6IDQyIH07CisgICAgfSwKKyAgICBbU3ltYm9sLml0ZXJhdG9yXTogZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAgIHJldHVybjogZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOworICAgICAgICB0aHJvdyAiRXJyb3I6
IHJldHVybiBpcyBjYWxsZWQuIjsKKyAgICB9Cit9OworCit0cnkgeworICAgIGZvciAodmFyIHZh
bHVlIG9mIGl0ZXIpIHsKKyAgICAgICAgdGhyb3cgIkVycm9yOiBUZXJtaW5hdGUgaXRlcmF0aW9u
LiI7CisgICAgfQorfSBjYXRjaCAoZSkgeworICAgIGlmIChTdHJpbmcoZSkgIT09ICJFcnJvcjog
VGVybWluYXRlIGl0ZXJhdGlvbi4iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0
aHJvd246ICIgKyBlOworfQoraWYgKCFyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cgIkVycm9yOiBy
ZXR1cm4gaXMgbm90IGNhbGxlZC4iOworCisKK3ZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKK3Zh
ciBpdGVyID0geworICAgIF9fa2V5OiAwLAorICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiA0MiB9OworICAgIH0sCisgICAgW1N5bWJv
bC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwK
KyAgICByZXR1cm46IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsK
KyAgICAgICAgdGhyb3cgIkVycm9yOiByZXR1cm4gaXMgY2FsbGVkLiI7CisgICAgfQorfTsKK3Ry
eSB7CisgICAgZm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgICAgICBicmVhazsKKyAgICB9
Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAhPT0gIkVycm9yOiByZXR1cm4gaXMg
Y2FsbGVkLiIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGU7
Cit9CitpZiAoIXJldHVybkNhbGxlZCkKKyAgICB0aHJvdyAiRXJyb3I6IHJldHVybiBpcyBub3Qg
Y2FsbGVkLiI7CisKKwordmFyIHByaW1pdGl2ZXMgPSBbCisgICAgdW5kZWZpbmVkLAorICAgIG51
bGwsCisgICAgNDIsCisgICAgInN0cmluZyIsCisgICAgdHJ1ZSwKKyAgICBTeW1ib2woIkNvY29h
IikKK107CisKK2Z1bmN0aW9uIGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0KG5vdEl0ZXJhdG9y
UmVzdWx0KSB7CisgICAgdmFyIHJldHVybkNhbGxlZCA9IGZhbHNlOworICAgIHZhciBpdGVyID0g
eworICAgICAgICBfX2tleTogMCwKKyAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAg
ICAgICAgcmV0dXJuIG5vdEl0ZXJhdG9yUmVzdWx0OworICAgICAgICB9LAorICAgICAgICBbU3lt
Ym9sLml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7Cisg
ICAgICAgIH0sCisgICAgICAgIHJldHVybjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0
dXJuQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiB1bmRlZmluZWQ7CisgICAgICAg
IH0KKyAgICB9OworICAgIHRyeSB7CisgICAgICAgIGZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogSXRlcmF0aW9uIHNob3VsZCBub3Qgb2NjdXIuIjsK
KyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKFN0cmluZyhlKSAhPT0g
IlR5cGVFcnJvcjogSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIp
CisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246ICIgKyBlOworICAg
IH0KKyAgICBpZiAocmV0dXJuQ2FsbGVkKQorICAgICAgICB0aHJvdyAiRXJyb3I6IHJldHVybiBp
cyBjYWxsZWQuIjsKK30KKworZnVuY3Rpb24gaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3RSZXR1
cm4obm90SXRlcmF0b3JSZXN1bHQpIHsKKyAgICB2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7Cisg
ICAgdmFyIGl0ZXIgPSB7CisgICAgICAgIF9fa2V5OiAwLAorICAgICAgICBuZXh0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IDQyIH07Cisg
ICAgICAgIH0sCisgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKyAgICAgICAgcmV0dXJuOiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIG5vdEl0ZXJhdG9yUmVzdWx0OworICAgICAgICB9CisgICAgfTsKKyAgICB0cnkgeworICAg
ICAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVyKSB7CisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IFRlcm1pbmF0ZSBpdGVyYXRpb24uIjsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsKKyAg
ICAgICAgaWYgKFN0cmluZyhlKSAhPT0gIkVycm9yOiBUZXJtaW5hdGUgaXRlcmF0aW9uLiIpCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246ICIgKyBlOworICAgIH0K
KyAgICBpZiAoIXJldHVybkNhbGxlZCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiByZXR1cm4gaXMg
bm90IGNhbGxlZC4iOworfQorCitwcmltaXRpdmVzLmZvckVhY2goaXRlcmF0b3JJbnRlcmZhY2VF
cnJvclRlc3QpOworcHJpbWl0aXZlcy5mb3JFYWNoKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0
UmV0dXJuKTsKKworCitmdW5jdGlvbiBpdGVyYXRvckludGVyZmFjZUJyZWFrVGVzdFJldHVybihu
b3RJdGVyYXRvclJlc3VsdCkgeworICAgIHZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKKyAgICB2
YXIgaXRlciA9IHsKKyAgICAgICAgX19rZXk6IDAsCisgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogNDIgfTsKKyAgICAg
ICAgfSwKKyAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
ICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorICAgICAgICByZXR1cm46IGZ1bmN0aW9uICgp
IHsKKyAgICAgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4g
bm90SXRlcmF0b3JSZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworICAgIHRyeSB7CisgICAgICAg
IGZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBpZiAoU3RyaW5nKGUpICE9PSAiVHlwZUVycm9y
OiBJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikKKyAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGU7CisgICAgfQorICAgIGlm
ICghcmV0dXJuQ2FsbGVkKQorICAgICAgICB0aHJvdyAiRXJyb3I6IHJldHVybiBpcyBub3QgY2Fs
bGVkLiI7Cit9CisKK3ByaW1pdGl2ZXMuZm9yRWFjaChpdGVyYXRvckludGVyZmFjZUJyZWFrVGVz
dFJldHVybik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2l0ZXJhdG9ycy1zaGFwZS5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
aXRlcmF0b3JzLXNoYXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVhYTU3OTk4ZjYyN2M1YTNhYzgxZGM0YzM4
ZDA4ZGJiZGVkMmYzNmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2l0ZXJhdG9ycy1zaGFwZS5qcwpAQCAtMCwwICsxLDUwIEBACisvLyBUaGlz
IHRlc3QgY2hlY2tzIHRoZSBzaGFwZSBvZiBidWlsdGluIGl0ZXJhdG9ycy4KKwordmFyIGFycmF5
ID0gWydDb2NvYScsICdDYXBwdWNjaW5vJywgJ1RoZSBkZXMgQWxpemVzJywgJ01hdGNoYScsICdL
aWxpbWFuamFybyddOworCitmdW5jdGlvbiBpdGVyYXRvclNoYXBlKGl0ZXIpIHsKKyAgICBpZiAo
aXRlci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGl0ZXJh
dG9yIHNob3VsZCBub3QgaGF2ZSBuZXh0IG1ldGhvZC4iOworICAgIGlmICghaXRlci5fX3Byb3Rv
X18uaGFzT3duUHJvcGVydHkoJ25leHQnKSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBpdGVyYXRv
ciBwcm90b3R5cGUgc2hvdWxkIGhhdmUgbmV4dCBtZXRob2QuIjsKKyAgICBpZiAodHlwZW9mIGl0
ZXIuX19wcm90b19fLm5leHQgIT09ICJmdW5jdGlvbiIpCisgICAgICAgIHRocm93ICJFcnJvcjog
aXRlcmF0b3IgcHJvdG90eXBlIHNob3VsZCBoYXZlIG5leHQgbWV0aG9kLiI7Cit9CisKK3ZhciB2
YWx1ZUl0ZXJhdG9yID0gYXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpOworaXRlcmF0b3JTaGFwZSh2
YWx1ZUl0ZXJhdG9yKTsKKwordmFyIGtleUl0ZXJhdG9yID0gYXJyYXkua2V5cygpOworaXRlcmF0
b3JTaGFwZShrZXlJdGVyYXRvcik7CisKK3ZhciBrZXlWYWx1ZUl0ZXJhdG9yID0gYXJyYXkuZW50
cmllcygpOworaXRlcmF0b3JTaGFwZShrZXlWYWx1ZUl0ZXJhdG9yKTsKKwordmFyIHNldCA9IG5l
dyBTZXQoWydDb2NvYScsICdDYXBwdWNjaW5vJywgJ1RoZSBkZXMgQWxpemVzJywgJ01hdGNoYScs
ICdLaWxpbWFuamFybyddKTsKK3ZhciB2YWx1ZUl0ZXJhdG9yID0gc2V0W1N5bWJvbC5pdGVyYXRv
cl0oKTsKK2l0ZXJhdG9yU2hhcGUodmFsdWVJdGVyYXRvcik7CisKK3ZhciBrZXlJdGVyYXRvciA9
IHNldC5rZXlzKCk7CitpdGVyYXRvclNoYXBlKGtleUl0ZXJhdG9yKTsKKwordmFyIGtleVZhbHVl
SXRlcmF0b3IgPSBzZXQuZW50cmllcygpOworaXRlcmF0b3JTaGFwZShrZXlWYWx1ZUl0ZXJhdG9y
KTsKKwordmFyIG1hcCA9IG5ldyBNYXAoKTsKK1sKKyAgICBbICdDb2NvYScsIDIsIF0sCisgICAg
WyAnQ2FwcHVjY2lubycsIDAgXSwKKyAgICBbICdUaGUgZGVzIEFsaXplcycsIDMgXSwKKyAgICBb
ICdNYXRjaGEnLCAyIF0sCisgICAgWyAnS2lsaW1hbmphcm8nLCAxXQorXS5mb3JFYWNoKGZ1bmN0
aW9uIChbIGtleSwgdmFsdWUgXSkgeworICAgIG1hcC5zZXQoa2V5LCB2YWx1ZSk7Cit9KTsKK3Zh
ciB2YWx1ZUl0ZXJhdG9yID0gbWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKK2l0ZXJhdG9yU2hhcGUo
dmFsdWVJdGVyYXRvcik7CisKK3ZhciBrZXlJdGVyYXRvciA9IG1hcC5rZXlzKCk7CitpdGVyYXRv
clNoYXBlKGtleUl0ZXJhdG9yKTsKKwordmFyIGtleVZhbHVlSXRlcmF0b3IgPSBtYXAuZW50cmll
cygpOworaXRlcmF0b3JTaGFwZShrZXlWYWx1ZUl0ZXJhdG9yKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWFwLWl0ZXJhdG9ycy1uZXh0LmpzIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXAtaXRlcmF0b3JzLW5leHQuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTMyOWVhZTE3MzMyMWE1NGI5MWM1ZWVkNWZhNmY2NDM1MWE5NTlhMQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWFwLWl0ZXJh
dG9ycy1uZXh0LmpzCkBAIC0wLDAgKzEsMTEzIEBACisvLyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBi
ZWhhdmlvciBvZiB0aGUgaXRlcmF0b3IubmV4dCBtZXRob2RzIG9uIE1hcCBvYmplY3RzCisKK3Zh
ciB0ZXN0QXJyYXkgPSBbMSwyLDMsNCw1LDZdCit2YXIgdGVzdE1hcCA9IG5ldyBNYXAoKTsKK2Zv
ciAodmFyIFtrZXksIHZhbHVlXSBvZiB0ZXN0QXJyYXkuZW50cmllcygpKSB7CisgICAgdGVzdE1h
cC5zZXQoa2V5LCB2YWx1ZSk7Cit9Cit2YXIga2V5cyA9IHRlc3RNYXAua2V5cygpOwordmFyIGkg
PSAwOword2hpbGUgKHRydWUpIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBrZXl9ID0ga2V5cy5u
ZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIGlmIChrZXkgPj0gdGVz
dEFycmF5Lmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7
CisgICAgaSsrOworfQorCitpZiAodGVzdE1hcC5zaXplICE9PSBpKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZhbHVlID0ga2V5cy5uZXh0KCkudmFsdWU7Citp
ZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiAr
IHZhbHVlOworCisvLyBUT0RPOiBNYXAucHJvdG90eXBlLnZhbHVlcygpIGlzIG5vdCBleHBvc2Vk
LgorLy8KKy8vIHZhciB2YWx1ZXMgPSB0ZXN0TWFwLnZhbHVlcygpOworLy8gdmFyIGkgPSAwOwor
Ly8gd2hpbGUgKHRydWUpIHsKKy8vICAgICB2YXIge2RvbmUsIHZhbHVlfSA9IHZhbHVlcy5uZXh0
KCk7CisvLyAgICAgaWYgKGRvbmUpCisvLyAgICAgICAgIGJyZWFrOworLy8gICAgIGkrKzsKKy8v
ICAgICBpZiAodGVzdEFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkKKy8vICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKy8vIH0KKy8vCisvLyBpZiAodGVzdE1h
cC5zaXplICE9PSBpKQorLy8gICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKy8v
CisvLyB2YXIgdmFsdWUgPSB2YWx1ZXMubmV4dCgpLnZhbHVlOworLy8gaWYgKHZhbHVlICE9PSB1
bmRlZmluZWQpCisvLyAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKwor
dmFyIGVudHJpZXMgPSB0ZXN0TWFwLmVudHJpZXMoKTsKK3ZhciBpID0gMDsKK2RvIHsKKyAgICB2
YXIge2RvbmUsIHZhbHVlOiBlbnRyeX0gPSBlbnRyaWVzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkK
KyAgICAgICAgYnJlYWs7CisgICAgdmFyIFtrZXksIHZhbHVlXSA9IGVudHJ5OworICAgIGlmICh2
YWx1ZSAhPT0gdGVzdE1hcC5nZXQoa2V5KSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyB2YWx1ZSArICIgIiArIHRlc3RNYXAuZ2V0KGtleSk7CisgICAgaWYgKGtleSA+PSB0
ZXN0QXJyYXkubGVuZ3RoKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGtl
eTsKKyAgICBpKys7CisgICAgaWYgKHRlc3RBcnJheS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWUgKyAiICIgKyBpOworfSB3
aGlsZSAoIWRvbmUpOworCitpZiAodGVzdE1hcC5zaXplICE9PSBpKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZhbHVlID0gZW50cmllcy5uZXh0KCkudmFsdWU7
CitpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTog
IiArIHZhbHVlOworCit2YXIgZW50cmllcyA9IHRlc3RNYXAuZW50cmllcygpOwordmFyIGkgPSAw
OworZG8geworICAgIHZhciB7ZG9uZSwgdmFsdWU6IGVudHJ5fSA9IGVudHJpZXMubmV4dCgpOwor
ICAgIGlmIChkb25lKQorICAgICAgICBicmVhazsKKyAgICB2YXIgW2tleSwgdmFsdWVdID0gZW50
cnk7CisgICAgaWYgKHZhbHVlICE9PSB0ZXN0TWFwLmdldChrZXkpKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlICsgIiAiICsgdGVzdE1hcC5nZXQoa2V5KTsKKyAg
ICBpKys7CisgICAgaWYgKGkgJSA0ID09PSAwKQorICAgICAgICB0ZXN0TWFwLnNldCgxMDAwMDAg
KyBpLCBpKTsKK30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RNYXAuc2l6ZSAhPT0gaSkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMu
bmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKworZnVuY3Rpb24gb3RoZXJLZXkoa2V5KSB7CisgICAg
cmV0dXJuIChrZXkgKyAxKSAlIHRlc3RBcnJheS5sZW5ndGg7Cit9CisKK3ZhciBlbnRyaWVzID0g
dGVzdE1hcC5lbnRyaWVzKCk7Cit2YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1
ZTogZW50cnl9ID0gZW50cmllcy5uZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFr
OworICAgIHZhciBba2V5LCB2YWx1ZV0gPSBlbnRyeTsKKyAgICBpZiAodmFsdWUgIT09IHRlc3RN
YXAuZ2V0KGtleSkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWUg
KyAiICIgKyB0ZXN0TWFwLmdldChrZXkpOworICAgIGkrKzsKKyAgICBpZiAoaSAlIDQgPT09IDAp
CisgICAgICAgIHRlc3RNYXAuZGVsZXRlKG90aGVyS2V5KGtleSkpOworfSB3aGlsZSAoIWRvbmUp
OworCitpZiAodGVzdE1hcC5zaXplICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
OiAiICsgaTsKKwordmFyIHZhbHVlID0gZW50cmllcy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUg
IT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zZXQtaXRlcmF0
b3JzLW5leHQuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NldC1pdGVy
YXRvcnMtbmV4dC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NzFkYzdlNDIxODFkYTkyMWZlNDc1MTI4NjQwYzQw
OTUwYzQyOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9zZXQtaXRlcmF0b3JzLW5leHQuanMKQEAgLTAsMCArMSwxMTcgQEAKKy8vIFRoaXMg
dGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIHRoZSBpdGVyYXRvci5uZXh0IG1ldGhvZHMgb24g
U2V0IG9iamVjdHMKKwordmFyIHRlc3RBcnJheSA9IFsxLDIsMyw0LDUsNl0KK3ZhciB0ZXN0U2V0
ID0gbmV3IFNldCgpOworZm9yICh2YXIgW2tleSwgdmFsdWVdIG9mIHRlc3RBcnJheS5lbnRyaWVz
KCkpIHsKKyAgICB0ZXN0U2V0LmFkZCh2YWx1ZSk7Cit9Cit2YXIga2V5cyA9IHRlc3RTZXQua2V5
cygpOwordmFyIGkgPSAwOword2hpbGUgKHRydWUpIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBr
ZXl9ID0ga2V5cy5uZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIGlm
ICh0ZXN0QXJyYXkuaW5kZXhPZihrZXkpID09PSAtMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWU6ICIgKyBrZXk7CisgICAgaSsrOworfQorCitpZiAodGVzdFNldC5zaXplICE9PSBp
KQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZhbHVlID0ga2V5
cy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworCisvLyBUT0RPOiBTZXQucHJvdG90eXBlLnZhbHVl
cygpIGlzIG5vdCBleHBvc2VkLgorLy8KKy8vIHZhciB2YWx1ZXMgPSB0ZXN0U2V0LnZhbHVlcygp
OworLy8gdmFyIGkgPSAwOworLy8gd2hpbGUgKHRydWUpIHsKKy8vICAgICB2YXIge2RvbmUsIHZh
bHVlfSA9IHZhbHVlcy5uZXh0KCk7CisvLyAgICAgaWYgKGRvbmUpCisvLyAgICAgICAgIGJyZWFr
OworLy8gICAgIGkrKzsKKy8vICAgICBpZiAodGVzdEFycmF5LmluZGV4T2YodmFsdWUpID09PSAt
MSkKKy8vICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKy8vIH0K
Ky8vCisvLyBpZiAodGVzdFNldC5zaXplICE9PSBpKQorLy8gICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlOiAiICsgaTsKKy8vCisvLyB2YXIgdmFsdWUgPSB2YWx1ZXMubmV4dCgpLnZhbHVlOwor
Ly8gaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisvLyAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyB2YWx1ZTsKKwordmFyIGVudHJpZXMgPSB0ZXN0U2V0LmVudHJpZXMoKTsKK3ZhciBp
ID0gMDsKK2RvIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBlbnRyeX0gPSBlbnRyaWVzLm5leHQo
KTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAgdmFyIFtrZXksIHZhbHVlXSA9
IGVudHJ5OworICAgIGlmIChrZXkgIT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZTogIiArIGtleSArICIgIiArIHZhbHVlOworICAgIGlmICghdGVzdFNldC5oYXModmFs
dWUpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworICAgIGlm
ICghdGVzdFNldC5oYXMoa2V5KSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIg
KyBrZXk7CisgICAgaSsrOworICAgIGlmICh0ZXN0QXJyYXkuaW5kZXhPZih2YWx1ZSkgPT09IC0x
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlICsgIiAiICsgaTsK
K30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RTZXQuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZh
bHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyB2YWx1ZTsKKwordmFyIGVudHJpZXMgPSB0ZXN0U2V0LmVudHJpZXMoKTsKK3ZhciBp
ID0gMDsKK2RvIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBlbnRyeX0gPSBlbnRyaWVzLm5leHQo
KTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAgdmFyIFtrZXksIHZhbHVlXSA9
IGVudHJ5OworICAgIGlmIChrZXkgIT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZTogIiArIGtleSArICIgIiArIHZhbHVlOworICAgIGlmICghdGVzdFNldC5oYXMoa2V5
KSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKyAgICBpKys7
CisgICAgaWYgKGkgJSA0ID09PSAwKQorICAgICAgICB0ZXN0U2V0LmFkZCgxMDAwMDAgKyBpKTsK
K30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RTZXQuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZh
bHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyB2YWx1ZTsKKworZnVuY3Rpb24gb3RoZXJLZXkoa2V5KSB7CisgICAgcmV0dXJuIChr
ZXkgKyAxKSAlIHRlc3RBcnJheS5sZW5ndGg7Cit9CisKK3ZhciBlbnRyaWVzID0gdGVzdFNldC5l
bnRyaWVzKCk7Cit2YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1ZTogZW50cnl9
ID0gZW50cmllcy5uZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIHZh
ciBba2V5LCB2YWx1ZV0gPSBlbnRyeTsKKyAgICBpZiAoIXRlc3RTZXQuaGFzKGtleSkpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWUgKyAiICIgKyB0ZXN0U2V0Lmdl
dChrZXkpOworICAgIGkrKzsKKyAgICBpZiAoaSAlIDQgPT09IDApCisgICAgICAgIHRlc3RTZXQu
ZGVsZXRlKG90aGVyS2V5KGtleSkpOworfSB3aGlsZSAoIWRvbmUpOworCitpZiAodGVzdFNldC5z
aXplICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZh
bHVlID0gZW50cmllcy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247505</attachid>
            <date>2015-02-27 02:44:15 -0800</date>
            <delta_ts>2015-03-02 17:01:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141351-20150227194400.patch</filename>
            <type>text/plain</type>
            <size>100932</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwNzMyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
N2UyMWFjNjRlNTJhN2E3YjQzZjU0OWYzNzRiNDc0YjY3MDkxNzIzLi5lMjM5NzE2OTA1OTg0ZTFm
OTZlMGFlYjQyODcyNjlmYTc2YTU0MDE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDQgQEAKKzIwMTUtMDItMjcgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgVXBncmFkZSBFUzYgSXRlcmF0b3IgaW50ZXJmYWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1cGdy
YWRlcyB0aGUgZXhpc2luZyBFUzYgaXRlcmF0b3IgdG8gYWxpZ24gdGhlIGxhdGVzdCBzcGVjLgor
ICAgICAgICBJbiB0aGUgbGF0ZXN0IHNwZWMsCisgICAgICAgIDEuIGBJdGVyYXRvci5uZXh0YCBy
ZXR1cm5zIG9iamVjdCB0aGF0IGltcGxlbWVudHMgSXRlcmF0b3JSZXN1bHQgaW50ZXJmYWNlIHsg
dmFsdWU6IHZhbHVlLCBkb25lLCBib29sZWFuIH0uCisgICAgICAgIDIuIGBJdGVyYXRvci5yZXR1
cm5gIGlzIGludHJvZHVjZWQuIFdoZW4gdGhlIGl0ZXJhdGlvbiBpcyB0ZXJtaW5hdGVkIGJ5IHRo
ZSBhYnJ1cHQgY29tcGxldGlvbiwKKyAgICAgICAgaXQgaXMgY2FsbGVkIHRvIGNsb3NlIGl0ZXJh
dG9yIHN0YXRlLgorICAgICAgICAzLiBJdGVyYXRvci5uZXh0IG9mIEFycmF5IGlzIG1vdmVkIGZy
b20gYW4gaXRlcmF0b3Igb2JqZWN0IHRvIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVgLgorCisg
ICAgICAgIFRvIHVwZ3JhZGUgaXQsIHdlIGNoYW5nZXMgdGhlIGJ5dGVjb2RlIHRoYXQgcmVwcmVz
ZW50cyBmb3Itb2YgbG9vcHMuCisgICAgICAgIEFuZCB0byBlbWJvZHkgdGhlIGVmZmljaWVudCBp
dGVyYXRpb24gd2l0aCBhbiBpdGVyYXRvciBvYmplY3QsCisgICAgICAgIHdlIGltcGxlbWVudGVk
ICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IGluIEphdmFTY3JpcHQgYW5kCisgICAgICAg
IGl0IGlzIGxvY2F0ZWQgaW4gYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMuCisg
ICAgICAgIEltcGxlbWVudGluZyBpdCBpbiBKYXZhU2NyaXB0IGVuY291cmFnZXMgaW5saW5pbmcg
YW5kCisgICAgICAgIHV0aWxpemVzIGVzY2FwZSBhbmFseXNpcyBmb3IgYW4gaXRlcmF0b3IgcmVz
dWx0IG9iamVjdCBpbiBERkcgSklULgorICAgICAgICBBbmQgd2UgZHJvcHBlZCB0aGUgaW50cmlu
c2ljIHZlcnNpb24gb2YgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQuCisKKyAgICAgICAg
QW5kIHdlIGludHJvZHVjZWQgSXRlcmF0b3JPcGVyYXRpb25zIHRoYXQgaXMgZGVmaW5lZCBpbiB0
aGUgc3BlYy4KKyAgICAgICAgSXQgYWxpZ25zIHRoZSBpdGVyYXRpb24gaW4gdGhlIHJ1bnRpbWUg
dG8gdGhlIGxhdGVzdCBzcGVjLgorICAgICAgICBDdXJyZW50bHksIFByb21pc2UuYWxsIGFuZCBQ
cm9taXNlLnJhY2UgdXNlcyBhbiBpdGVyYWJsZSBvYmplY3QuCisgICAgICAgIEhvd2V2ZXIsIFBy
b21pc2UuYWxsIGFuZCBQcm9taXNlLnJhY2UgaW1wbGVtZW50YXRpb24gaXMgYWxzbyBiYXNlZCBv
biB0aGUgb2xkIHNwZWMuCisgICAgICAgIFN1YnNlcXVlbnQgcGF0Y2hlcyB3aWxsIHVwZ3JhZGUg
aXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90eXBl
LmpzOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJh
dG9yUHJvdG90eXBlLmguCisgICAgICAgIChuZXh0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJldHVybik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dU
eXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0
aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNVbmRlZmluZWQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXlUaHVu
a0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFs
dWVUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjphcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OmFycmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRvcik6CisgICAgICAgIChKU0M6OmFycmF5
SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5SXRlcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmg6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50aW1l
L0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjppdGVyYXRvck5l
eHQpOgorICAgICAgICAoSlNDOjppdGVyYXRvclZhbHVlKToKKyAgICAgICAgKEpTQzo6aXRlcmF0
b3JDb21wbGV0ZSk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yU3RlcCk6CisgICAgICAgIChKU0M6
Oml0ZXJhdG9yQ2xvc2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcC4KKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyYXRv
clJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6YXJyYXlJdGVyYXRvck5leHRHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXlJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6OkpTQXJy
YXlJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6aXRlcmF0aW9uS2lu
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6aXRlcmF0ZWRPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6Om5leHRJbmRleCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6c2V0TmV4dEluZGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpmaW5pc2gpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0aW9uS2luZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRl
ZE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0
T2ZOZXh0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm9t
aXNlUmFjZUxvb3ApOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNl
KToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb21pc2VBbGwpOgorICAgICAgICAoSlNDOjpKU1By
b21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToK
KyAgICAgICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
U2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgIChKU0M6OnRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKToKKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3JzLW5leHQtd2l0aC1jYWxsLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGluY3JlbWVudCk6CisgICAgICAgIChmb3IpOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9hcnJheS1pdGVyYXRvcnMtbmV4dC5qczogQWRkZWQuCisKKyAgICAgICAgUmV2aXZlIHRoZSBv
bGRlciBBcnJheSBpdGVyYXRvciB0ZXN0cyB0aGF0IG1hbnVhbGx5IGNhbGwgJ25leHQnIG1ldGhv
ZC4KKworICAgICAgICAqIHRlc3RzL3N0cmVzcy9jdXN0b20taXRlcmF0b3JzLmpzOiBBZGRlZC4K
KyAgICAgICAgKGl0ZXIubmV4dCk6CisgICAgICAgIChpdGVyLlN5bWJvbC5pdGVyYXRvcik6Cisg
ICAgICAgIChpdGVyLnJldHVybik6CisgICAgICAgIChpdGVyLmdldCBuZXh0KToKKyAgICAgICAg
KGl0ZXIuZ2V0IHJldHVybik6CisgICAgICAgIChpdGVyYXRvckludGVyZmFjZUVycm9yVGVzdC5p
dGVyLm5leHQpOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuaXRlci5TeW1i
b2wuaXRlcmF0b3IpOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuaXRlci5y
ZXR1cm4pOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QpOgorICAgICAgICAo
aXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3RSZXR1cm4uaXRlci5uZXh0KToKKyAgICAgICAgKGl0
ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuLml0ZXIuU3ltYm9sLml0ZXJhdG9yKToKKyAg
ICAgICAgKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuLml0ZXIucmV0dXJuKToKKyAg
ICAgICAgKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuKToKKyAgICAgICAgKGl0ZXJh
dG9ySW50ZXJmYWNlQnJlYWtUZXN0UmV0dXJuLml0ZXIubmV4dCk6CisgICAgICAgIChpdGVyYXRv
ckludGVyZmFjZUJyZWFrVGVzdFJldHVybi5pdGVyLlN5bWJvbC5pdGVyYXRvcik6CisgICAgICAg
IChpdGVyYXRvckludGVyZmFjZUJyZWFrVGVzdFJldHVybi5pdGVyLnJldHVybik6CisgICAgICAg
IChpdGVyYXRvckludGVyZmFjZUJyZWFrVGVzdFJldHVybik6CisKKyAgICAgICAgVGhpcyB0ZXN0
cyB0aGUgYmVoYXZpb3Igb2YgY3VzdG9tIGl0ZXJhdG9ycy4KKyAgICAgICAgJ25leHQnIGFuZCAn
cmV0dXJuJyBvZiBpdGVyYXRvciB3b3JrIHdpdGggZm9yLW9mLgorCisgICAgICAgICogdGVzdHMv
c3RyZXNzL2l0ZXJhdG9ycy1zaGFwZS5qczogQWRkZWQuCisgICAgICAgIChpdGVyYXRvclNoYXBl
KToKKyAgICAgICAgKGtleVZhbHVlSXRlcmF0b3Iuc2V0IGVudHJpZXMpOgorCisgICAgICAgIFRo
aXMgdGVzdHMgdGhlIHNoYXBlIG9mIGl0ZXJhdG9yczsgaXRlcmF0b3JzIG9mIEFycmF5IGhhdmUg
J25leHQnIG1ldGhvZCBpbiAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUuCisKKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvbWFwLWl0ZXJhdG9ycy1uZXh0LmpzOiBBZGRlZC4KKyAgICAgICAgKHNldCB2
YXIpOgorICAgICAgICAoLmdldCBpZik6CisgICAgICAgIChvdGhlcktleSk6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL3NldC1pdGVyYXRvcnMtbmV4dC5qczogQWRkZWQuCisgICAgICAgIChvdGhl
cktleSk6CisKIDIwMTUtMDItMjYgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAog
ICAgICAgICBVbnJldmlld2VkLCByb2xsIG91dCByMTgwNzIzLiBJdCBicm9rZSBhIGJ1bmNoIG9m
IHRlc3RzLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IGY5Y2JkZGNjZmZm
ZWFhMzAwMjE0OTBhYTFmNzk5YjU2NGUyMDFhZDQuLmU3NTRjNmVhNjIzYTlkODg5MjIyYjUxODZi
N2E2OTc3ZDEyMjQ3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTQz
OCw3ICs0MzgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VTCiAgICAgcnVu
dGltZS9FcnJvckluc3RhbmNlLmNwcAogICAgIHJ1bnRpbWUvRXJyb3JQcm90b3R5cGUuY3BwCiAg
ICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAotICAgIHJ1bnRpbWUvRXhjZXB0aW9uSGVscGVy
cy5jcHAgCisgICAgcnVudGltZS9FeGNlcHRpb25IZWxwZXJzLmNwcAogICAgIHJ1bnRpbWUvRXhl
Y3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCiAgICAgcnVu
dGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApAQCAtNDUwLDYgKzQ1MCw3IEBAIHNldChK
YXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBydW50aW1lL0luaXRpYWxpemVUaHJl
YWRpbmcuY3BwCiAgICAgcnVudGltZS9JbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcAogICAgIHJ1
bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKKyAgICBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9u
cy5jcHAKICAgICBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVyLmNwcAogICAgIHJ1bnRpbWUvSlNM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwCiAgICAgcnVudGltZS9KU0FyZ3VtZW50c0l0ZXJhdG9yLmNw
cApAQCAtNTc5LDYgKzU4MCw3IEBAIGxpc3QoQVBQRU5EIEphdmFTY3JpcHRDb3JlX1NPVVJDRVMK
IAogc2V0KEphdmFTY3JpcHRDb3JlX0xVVF9GSUxFUwogICAgIHJ1bnRpbWUvQXJyYXlDb25zdHJ1
Y3Rvci5jcHAKKyAgICBydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCiAgICAgcnVu
dGltZS9BcnJheVByb3RvdHlwZS5jcHAKICAgICBydW50aW1lL0Jvb2xlYW5Qcm90b3R5cGUuY3Bw
CiAgICAgcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9E
ZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDRhMjYyM2VmNWM5Yzc1NmQ1ZGE1NDdmMWQzZDY1Y2Vh
OWExNzY5NWEuLjRkYjA5YmQ0NzcyYjRkMWM5ZjBjNjFjMDJhZTZkMzk1YjY1NDFlN2IgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC0zNiw2ICszNiw3IEBA
IFZQQVRIID0gXAogLlBIT05ZIDogYWxsCiBhbGwgOiBcCiAgICAgQXJyYXlDb25zdHJ1Y3Rvci5s
dXQuaCBcCisgICAgQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCBcCiAgICAgQXJyYXlQcm90
b3R5cGUubHV0LmggXAogICAgIEJvb2xlYW5Qcm90b3R5cGUubHV0LmggXAogICAgIERhdGVDb25z
dHJ1Y3Rvci5sdXQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagppbmRl
eCA4MzEwNzBjYzI2ZDMxMTZiMjBlM2Q4OGM5MjMzZTM3OThkZGZmNjkxLi5kMjdjM2ZkYjg4NTEy
MjM5NzdkNTYzMGVhYjdmNmUwOTY0MTRjOGY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRD
b3JlLnZjeHByb2oKQEAgLTcxOCw2ICs3MTgsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFsRnVuY3Rpb24uY3BwIiAvPgorICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJdGVyYXRvck9wZXJhdGlvbnMuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0FQSVZhbHVlV3JhcHBlci5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTGV4aWNhbEVudmly
b25tZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1
bWVudHNJdGVyYXRvci5jcHAiIC8+CkBAIC04NTQsNiArODU1LDcgQEAKICAgPC9JdGVtR3JvdXA+
CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25C
dWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZl
ZFNvdXJjZXNcQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwk
KFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9i
aiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFy
cmF5UHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1
cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUp
XERlcml2ZWRTb3VyY2VzXEJvb2xlYW5Qcm90b3R5cGUubHV0LmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVj
dHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcRGF0ZUNvbnN0cnVjdG9yLmx1dC5o
IiAvPgpAQCAtMTQ5Miw2ICsxNDk0LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxydW50aW1lXEludHJpbnNpYy5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJdGVyYXRvck9wZXJhdGlvbnMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1bWVudHNJdGVyYXRvci5oIiAvPgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCmluZGV4IGZmZjcy
MGM4MWQwMjY0NGNlZDQ3NWYxMGRjZmJjMGQwY2IyNmY5OTMuLmFiNjIxODg0NDYyZmQzNTg5Y2E2
NzhmZTRmNTczY2QwZTBkMjFjMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycworKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTYzMCw2ICs2MzAsOSBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmNwcCI+CiAgICAgICA8RmlsdGVy
PnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSXRlcmF0b3JPcGVyYXRpb25zLmNwcCI+CisgICAgICA8RmlsdGVyPnJ1
bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwIj4KICAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAtMjY2MSw2ICsyNjY0LDkgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50cmluc2ljLmgiPgogICAgICAgPEZp
bHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEl0ZXJhdG9yT3BlcmF0aW9ucy5oIj4KKyAgICAgIDxGaWx0ZXI+
cnVudGltZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAgIDxDbEluY2x1ZGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0xleGljYWxFbnZpcm9ubWVudC5oIj4KICAgICAgIDxGaWx0ZXI+cnVu
dGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAtMzA2NCw2ICszMDcwLDkgQEAKICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRm
b3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xTdHJpbmdDb25z
dHJ1Y3Rvci5sdXQuaCI+CiAgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgog
ICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9u
QnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2
ZWRTb3VyY2VzXEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmgiPgorICAgICAgPEZpbHRlcj5E
ZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5jbHVkZT4KICAgICA8Q2xJbmNsdWRl
IEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0
dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xBcnJheVByb3RvdHlwZS5sdXQuaCI+
CiAgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRl
PgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2YTg0NTY1OGEyNzRiMmUzM2U5ZTlk
NzQ4N2YxZTE5MzFkYTAyMTQwLi5hMDE4MDRhNmE5Nzc3YmE3ZWNlNTc3NDE4ZDVmNDdlZWI4MmU5
YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtOTQzLDYgKzk0Myw4IEBACiAJ
CTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1QzAyODVCMTcxNzk2NjgwMDM1MUUz
NSAvKiBBUk12N0RPcGNvZGUuaCAqLzsgfTsKIAkJNjVGQjUxMTcxODRFRUU3MDAwQzEyQjcwIC8q
IFByb3RvQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDY1RkI1MTE2MTg0RUU5QkMwMEMxMkI3MCAvKiBQcm90b0NhbGxGcmFtZS5jcHAg
Ki87IH07CiAJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAvKiBEZWJ1Z2dlckV2YWxFbmFibGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2QUQyQ0I0
QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcwMTEzRDRCMUE4REIwOTMwMDM4
NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENDkxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTcwMTEzRDRDMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVy
YXRvck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MDVCNDFB
QjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNUI0MUEzMUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wu
Y3BwICovOyB9OwogCQk3MDVCNDFBQzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDVCNDFBNDFBNkU1MDFF
MDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcw
NUI0MUE1MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5jcHAgKi87IH07CkBA
IC0yNjIyLDYgKzI2MjQsOCBAQAogCQk2NUZCNTExNTE4NEVFOEY4MDBDMTJCNzAgLyogUHJvdG9D
YWxsRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUHJvdG9DYWxsRnJh
bWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjVGQjUxMTYxODRFRTlCQzAwQzEy
QjcwIC8qIFByb3RvQ2FsbEZyYW1lLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFByb3RvQ2FsbEZyYW1lLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2VyRXZhbEVuYWJsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJFdmFsRW5hYmxlci5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0
b3JPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEl0
ZXJhdG9yT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTcwMTEz
RDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNEQkVEOSAvKiBCb29sZWFuT2JqZWN0
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gMzA7IGluZGVu
dFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEJv
b2xlYW5PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9Owog
CQk3MDVCNDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2wuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00MzMxLDYgKzQzMzUsOCBAQAogCQkJCUJDOUJCOTVCMEUxOTY4MDYwMERGODg1NSAvKiBJ
bnRlcm5hbEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlCQzExNjY3QTBFMTk5QzA1MDA4MDY2REQgLyog
SW50ZXJuYWxGdW5jdGlvbi5oICovLAogCQkJCTg2QkY2NDJBMTQ4REIyQjUwMDRERTM2QSAvKiBJ
bnRyaW5zaWMuaCAqLywKKwkJCQk3MDExM0Q0OTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JP
cGVyYXRpb25zLmNwcCAqLywKKwkJCQk3MDExM0Q0QTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0
b3JPcGVyYXRpb25zLmggKi8sCiAJCQkJQTc2MTQwQ0IxODI5ODJDQjAwNzUwNjI0IC8qIEpTQXJn
dW1lbnRzSXRlcmF0b3IuY3BwICovLAogCQkJCUE3NjE0MENDMTgyOTgyQ0IwMDc1MDYyNCAvKiBK
U0FyZ3VtZW50c0l0ZXJhdG9yLmggKi8sCiAJCQkJOTNBREZDRTYwQ0NCRDdBQzAwRDMwQjA4IC8q
IEpTQXJyYXkuY3BwICovLApAQCAtNTg3OCw2ICs1ODg0LDcgQEAKIAkJCQlCQzExNjY3QjBFMTk5
QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQy
OUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmluc2ljLmggaW4gSGVhZGVycyAqLywK
KwkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBFMTZGNUNEMDBCMzQ0NjAgLyogSmF2YVNjcmlwdC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRjUxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRQ
cm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTAzRkExQTE4OEUwRkIwMDAxMTBG
MTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MDgzLDYgKzcw
OTAsNyBAQAogCQkJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBFNCAvKiBJbnRlbmRlZFN0cnVjdHVy
ZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0YzOUNGMTA3RUMzNzYwMDQyN0E0OCAv
KiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEN0Q0MEVEMjEy
ODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQk3MDExM0Q0
QjFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUE1MDNGQTE5MTg4RTBGQjAwMDExMEYxNCAvKiBKYXZhU2NyaXB0Q2FsbEZyYW1lLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOTJGMEVEMjJENzAwMEI4OTYxOSAvKiBKSVQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3RDUxRjAwQUIzNTBEIC8qIEpJVEFyaXRo
bWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjQ2
MjNhNDNiODAzYzY1NTYzZmZjOTIwOWM1NDdhODk1YmU0YWM4ZQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJheUl0ZXJhdG9yLnByb3RvdHlwZS5q
cwpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1
a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FS
RSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwg
REFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgorICovCisKK2Z1bmN0aW9uIG5leHQoKSB7CisgICAgInVzZSBzdHJpY3QiOworCisg
ICAgaWYgKHRoaXMgPT0gbnVsbCB8fCAodHlwZW9mIHRoaXMgIT09ICJvYmplY3QiICYmIHR5cGVv
ZiB0aGlzICE9PSAiZnVuY3Rpb24iKSkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIiVB
cnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIE9iamVj
dCIpOworCisgICAgdmFyIGl0ZW1LaW5kID0gdGhpcy5AYXJyYXlJdGVyYXRpb25LaW5kOworICAg
IGlmIChpdGVtS2luZCA9PT0gdW5kZWZpbmVkKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJv
cigiJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUg
QXJyYXkgSXRlcmF0b3IgSW5zdGFuY2UiKTsKKworICAgIHZhciBhcnJheSA9IHRoaXMuQGl0ZXJh
dGVkT2JqZWN0OworICAgIGlmIChhcnJheSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLAorICAgICAgICAgICAgZG9uZTogdHJ1
ZQorICAgICAgICB9OworICAgIH0KKworICAgIHZhciBpbmRleCA9IHRoaXMuQGFycmF5SXRlcmF0
b3JOZXh0SW5kZXg7CisgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA+Pj4gMDsKKyAgICBp
ZiAoaW5kZXggPj0gbGVuZ3RoKSB7CisgICAgICAgIHRoaXMuQGl0ZXJhdGVkT2JqZWN0ID0gdW5k
ZWZpbmVkOworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZCwK
KyAgICAgICAgICAgIGRvbmU6IHRydWUKKyAgICAgICAgfTsKKyAgICB9OworICAgIHRoaXMuQGFy
cmF5SXRlcmF0b3JOZXh0SW5kZXggPSBpbmRleCArIDE7CisKKyAgICBpZiAoaXRlbUtpbmQgPT09
IEBhcnJheUl0ZXJhdGlvbktpbmRLZXkpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAgICAgICAg
IHZhbHVlOiBpbmRleCwKKyAgICAgICAgICAgIGRvbmU6IGZhbHNlCisgICAgICAgIH07CisgICAg
fQorICAgIHZhciBlbGVtZW50VmFsdWUgPSBhcnJheVtpbmRleF07CisgICAgaWYgKGl0ZW1LaW5k
ID09PSBAYXJyYXlJdGVyYXRpb25LaW5kVmFsdWUpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAgICAg
ICAgICAgIHZhbHVlOiBlbGVtZW50VmFsdWUsCisgICAgICAgICAgICBkb25lOiBmYWxzZQorICAg
ICAgICB9OworICAgIH0KKyAgICByZXR1cm4geworICAgICAgICB2YWx1ZTogWyBpbmRleCwgZWxl
bWVudFZhbHVlIF0sCisgICAgICAgIGRvbmU6IGZhbHNlCisgICAgfTsKK30KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5j
cHAKaW5kZXggYjdmNDM2ODY2NGZlOGE3MzJlYTY1MTI4NTJlMTlmNGJmZmZkZWQwYi4uZjI2M2M3
ZDRjMDM4ZmUyODU0ZDQzZTljZTAwYjRiYjI1Y2VlY2QwNyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAg
LTE5MjQsMTYgKzE5MjQsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJl
dHVybihSZWdpc3RlcklEKiBzcmMpCiAKICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpICYmIHNyYy0+
aW5kZXgoKSAhPSBtX3RoaXNSZWdpc3Rlci5pbmRleCgpKSB7CiAgICAgICAgIFJlZlB0cjxMYWJl
bD4gaXNPYmplY3RMYWJlbCA9IG5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBpc09iamVjdFJlZ2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7CiAKLSAgICAgICAgZW1pdE9wY29k
ZShvcF9pc19vYmplY3QpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNPYmplY3RS
ZWdpc3Rlci0+aW5kZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmlu
ZGV4KCkpOwotCi0gICAgICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsK
LSAgICAgICAgZW1pdE9wY29kZShvcF9qdHJ1ZSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChpc09iamVjdFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGlzT2JqZWN0TGFiZWwtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkp
OworICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHNy
YyksIGlzT2JqZWN0TGFiZWwuZ2V0KCkpOwogCiAgICAgICAgIGVtaXRVbmFyeU5vRHN0T3Aob3Bf
cmV0LCAmbV90aGlzUmVnaXN0ZXIpOwogCkBAIC0yMzcxLDYgKzIzNjMsMTMgQEAgdm9pZCBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNz
YWdlKQogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKIH0KIAordm9pZCBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFRocm93VHlwZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sK
KyAgICBlbWl0T3Bjb2RlKG9wX3Rocm93X3N0YXRpY19lcnJvcik7CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGFkZENvbnN0YW50VmFsdWUoYWRkU3RyaW5nQ29uc3RhbnQoSWRlbnRpZmllciht
X3ZtLCBtZXNzYWdlKSkpLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFs
c2UpOworfQorCiB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaEZ1bmN0aW9uTmFtZVNj
b3BlKFJlZ2lzdGVySUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVy
SUQqIHZhbHVlLCB1bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIGVtaXRPcGNvZGUob3BfcHVz
aF9uYW1lX3Njb3BlKTsKQEAgLTI1NzQsMjQgKzI1NzMsNzcgQEAgdm9pZCBCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdEVudW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHBy
ZXNzaW8KICAgICAgICAgZW1pdE1vdmUoYXJncy50aGlzUmVnaXN0ZXIoKSwgc3ViamVjdC5nZXQo
KSk7CiAgICAgICAgIGVtaXRDYWxsKGl0ZXJhdG9yLmdldCgpLCBpdGVyYXRvci5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCks
IG5vZGUtPmRpdm90RW5kKCkpOwogICAgIH0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlcmF0
b3JOZXh0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9w
ZXJ0eU5hbWVzKCkuaXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUpOwogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiB2YWx1ZSA9IG5ld1RlbXBvcmFyeSgpOwogICAgIGVtaXRMb2FkKHZhbHVlLmdldCgpLCBq
c1VuZGVmaW5lZCgpKTsKICAgICAKICAgICBlbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQo
KSk7CiAgICAgCiAgICAgUmVmUHRyPExhYmVsPiBsb29wU3RhcnQgPSBuZXdMYWJlbCgpOworICAg
IFJlZlB0cjxMYWJlbD4gaXRlcmF0b3JEb25lID0gbmV3TGFiZWwoKTsKICAgICBlbWl0TGFiZWwo
bG9vcFN0YXJ0LmdldCgpKTsKICAgICBlbWl0TG9vcEhpbnQoKTsKKworICAgIFJlZlB0cjxMYWJl
bD4gdHJ5U3RhcnRMYWJlbCA9IG5ld0xhYmVsKCk7CisgICAgZW1pdExhYmVsKHRyeVN0YXJ0TGFi
ZWwuZ2V0KCkpOworICAgIFRyeURhdGEqIHRyeURhdGEgPSBwdXNoVHJ5KHRyeVN0YXJ0TGFiZWwu
Z2V0KCkpOwogICAgIGNhbGxCYWNrKCp0aGlzLCB2YWx1ZS5nZXQoKSk7CisgICAgUmVmUHRyPExh
YmVsPiBjYXRjaEhlcmUgPSBlbWl0TGFiZWwobmV3TGFiZWwoKS5nZXQoKSk7CisKICAgICBlbWl0
TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFyZ2V0KCkpOwotICAgIENhbGxBcmd1bWVudHMgbmV4dEFy
Z3VtZW50cygqdGhpcywgMCwgMSk7Ci0gICAgZW1pdE1vdmUobmV4dEFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOwotICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMuYXJn
dW1lbnRSZWdpc3RlcigwKSwgdmFsdWUuZ2V0KCkpOwotICAgIGVtaXRDYWxsKHZhbHVlLmdldCgp
LCBpdGVyYXRvck5leHQuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgbmV4dEFyZ3VtZW50cywg
bm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKLSAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVzdWx0ID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgZW1pdEp1
bXBJZkZhbHNlKGVtaXRFcXVhbGl0eU9wKG9wX3N0cmljdGVxLCByZXN1bHQuZ2V0KCksIHZhbHVl
LmdldCgpLCBlbWl0TG9hZCgwLCBKU1ZhbHVlKHZtKCktPml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0
KCkpKSksIGxvb3BTdGFydC5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5leHQgPSBl
bWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMo
KS5uZXh0KTsKKyAgICB7CisgICAgICAgIENhbGxBcmd1bWVudHMgbmV4dEFyZ3VtZW50cygqdGhp
cywgMCwgMSk7CisgICAgICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGl0ZXJhdG9yLmdldCgpKTsKKyAgICAgICAgZW1pdE1vdmUobmV4dEFyZ3VtZW50cy5hcmd1bWVu
dFJlZ2lzdGVyKDApLCB2YWx1ZS5nZXQoKSk7CisgICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgp
LCBuZXh0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRBcmd1bWVudHMsIG5vZGUtPmRp
dm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgfQorICAg
IHsKKyAgICAgICAgUmVmUHRyPExhYmVsPiB0eXBlSXNPYmplY3QgPSBuZXdMYWJlbCgpOworICAg
ICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdl
dCgpKSwgdHlwZUlzT2JqZWN0LmdldCgpKTsKKyAgICAgICAgZW1pdFRocm93VHlwZUVycm9yKEFT
Q0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIp
KTsKKyAgICAgICAgZW1pdExhYmVsKHR5cGVJc09iamVjdC5nZXQoKSk7CisgICAgfQorICAgIGVt
aXRKdW1wSWZUcnVlKGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgcHJv
cGVydHlOYW1lcygpLmRvbmUpLCBpdGVyYXRvckRvbmUuZ2V0KCkpOworICAgIGVtaXRHZXRCeUlk
KHZhbHVlLmdldCgpLCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnZhbHVlKTsKKyAgICBl
bWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOworCisgICAgLy8gSXRlcmF0b3JDbG9zZSBzZXF1ZW5j
ZSBmb3IgdGhyb3ctZWQgY29udHJvbCBmbG93LgorICAgIHsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEsIG5l
d1RlbXBvcmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCkpOworICAgICAgICBSZWZQdHI8TGFiZWw+IHJl
dGhyb3cgPSBuZXdMYWJlbCgpOworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5N
ZXRob2QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3Bl
cnR5TmFtZXMoKS5yZXR1cm5LZXl3b3JkKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElz
VW5kZWZpbmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCByZXRocm93Lmdl
dCgpKTsKKworICAgICAgICBDYWxsQXJndW1lbnRzIHJldHVybkFyZ3VtZW50cygqdGhpcywgMCk7
CisgICAgICAgIGVtaXRNb3ZlKHJldHVybkFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0
b3IuZ2V0KCkpOworCisgICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbFRyeVN0YXJ0ID0g
bmV3TGFiZWwoKTsKKyAgICAgICAgZW1pdExhYmVsKHJldHVybkNhbGxUcnlTdGFydC5nZXQoKSk7
CisgICAgICAgIFRyeURhdGEqIHJldHVybkNhbGxUcnlEYXRhID0gcHVzaFRyeShyZXR1cm5DYWxs
VHJ5U3RhcnQuZ2V0KCkpOworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0
aG9kLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2
b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgUmVm
UHRyPExhYmVsPiByZXR1cm5DYWxsQ2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0
KCkpOworICAgICAgICBlbWl0SnVtcChyZXRocm93LmdldCgpKTsKKworICAgICAgICBwb3BUcnlB
bmRFbWl0Q2F0Y2gocmV0dXJuQ2FsbFRyeURhdGEsIG5ld1RlbXBvcmFyeSgpLCByZXR1cm5DYWxs
Q2F0Y2hIZXJlLmdldCgpKTsKKyAgICAgICAgZW1pdExhYmVsKHJldGhyb3cuZ2V0KCkpOworICAg
ICAgICBlbWl0VGhyb3coZXhjZXB0aW9uUmVnaXN0ZXIuZ2V0KCkpOworICAgIH0KKworICAgIC8v
IEl0ZXJhdG9yQ2xvc2Ugc2VxdWVuY2UgZm9yIGJyZWFrLWVkIGNvbnRyb2wgZmxvdy4KICAgICBl
bWl0TGFiZWwoc2NvcGUtPmJyZWFrVGFyZ2V0KCkpOworICAgIHsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHJldHVybk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVy
YXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnJldHVybktleXdvcmQpOworICAgICAgICBlbWl0
SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHJldHVybk1ldGhvZC5n
ZXQoKSksIGl0ZXJhdG9yRG9uZS5nZXQoKSk7CisKKyAgICAgICAgQ2FsbEFyZ3VtZW50cyByZXR1
cm5Bcmd1bWVudHMoKnRoaXMsIDApOworICAgICAgICBlbWl0TW92ZShyZXR1cm5Bcmd1bWVudHMu
dGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKKyAgICAgICAgZW1pdENhbGwodmFsdWUu
Z2V0KCksIHJldHVybk1ldGhvZC5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCByZXR1cm5Bcmd1
bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQo
KSk7CisgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09iamVjdChuZXdUZW1wb3JhcnkoKSwg
dmFsdWUuZ2V0KCkpLCBpdGVyYXRvckRvbmUuZ2V0KCkpOworICAgICAgICBlbWl0VGhyb3dUeXBl
RXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBv
YmplY3QuIikpOworICAgIH0KKworICAgIGVtaXRMYWJlbChpdGVyYXRvckRvbmUuZ2V0KCkpOwog
fQogCiBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEdldEVudW1lcmFibGVMZW5n
dGgoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBiYXNlKQpAQCAtMjY2OCw2ICsyNzIwLDIz
IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VG9JbmRleFN0cmluZyhSZWdp
c3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGluCiAgICAgcmV0dXJuIGRzdDsKIH0KIAorCitSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdElzT2JqZWN0KFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogc3JjKQoreworICAgIGVtaXRPcGNvZGUob3BfaXNfb2JqZWN0KTsKKyAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoc3JjLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCitSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0
ZXJJRCogc3JjKQoreworICAgIGVtaXRPcGNvZGUob3BfaXNfdW5kZWZpbmVkKTsKKyAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoc3JjLT5pbmRleCgpKTsKKyAgICByZXR1cm4gZHN0OworfQorCiB2b2lkIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjpwdXNoSW5kZXhlZEZvckluU2NvcGUoUmVnaXN0ZXJJRCogbG9jYWxSZWdpc3Rlciwg
UmVnaXN0ZXJJRCogaW5kZXhSZWdpc3RlcikKIHsKICAgICBpZiAoIWxvY2FsUmVnaXN0ZXIpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2Vu
ZXJhdG9yLmgKaW5kZXggZDZhNGEwOTUyOWY3MDA0ZGE4NTQ2ZGIzY2I3YzIzODI0ODIyMGVmMC4u
NTQ1N2NhZDlmOWQyZWVmNGQyM2Y0MjQ2ZmFjN2Y1YzM5YjEzOTY4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApA
QCAtNTI1LDYgKzUyNSw5IEBACiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXROZXh0RW51bWVyYXRv
clByb3BlcnR5TmFtZShSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGVudW1lcmF0b3IsIFJl
Z2lzdGVySUQqIGluZGV4KTsKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdFRvSW5kZXhTdHJpbmco
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBpbmRleCk7CiAKKyAgICAgICAgUmVnaXN0ZXJJ
RCogZW1pdElzT2JqZWN0KFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogc3JjKTsKKyAgICAg
ICAgUmVnaXN0ZXJJRCogZW1pdElzVW5kZWZpbmVkKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogc3JjKTsKKwogICAgICAgICB2b2lkIGVtaXRSZWFkT25seUV4Y2VwdGlvbklmTmVlZGVkKCk7
CiAKICAgICAgICAgLy8gU3RhcnQgYSB0cnkgYmxvY2suICdzdGFydCcgbXVzdCBoYXZlIGJlZW4g
ZW1pdHRlZC4KQEAgLTUzOSw2ICs1NDIsNyBAQAogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBl
bWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOworICAgICAgICB2
b2lkIGVtaXRUaHJvd1R5cGVFcnJvcihjb25zdCBTdHJpbmcmIG1lc3NhZ2UpOwogCiAgICAgICAg
IHZvaWQgZW1pdFB1c2hGdW5jdGlvbk5hbWVTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRl
cyk7CiAgICAgICAgIHZvaWQgZW1pdFB1c2hDYXRjaFNjb3BlKFJlZ2lzdGVySUQqIGRzdCwgY29u
c3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlLCB1bnNpZ25lZCBhdHRy
aWJ1dGVzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5l
cmF0b3JzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNw
cAppbmRleCA3YjBjZGE2ODZjYzQ3MjdlY2YyOGFmN2E1N2E1ZTA3NTExMzVjM2E1Li4xMDA3ZDJk
NjdjOTc1N2E0MWIzYjAzNzBkMTA5NDFjYWExNWU5ZDQxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwCkBAIC0xMDQ0LDEwNyArMTA0NCw2IEBAIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBpbXVsVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQogICAgIHJldHVy
biBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJpbXVs
Iik7CiB9CiAKLXN0YXRpYyBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRU
aHVua0dlbmVyYXRvcihWTSogdm0sIEFycmF5SXRlcmF0aW9uS2luZCBraW5kKQotewotICAgIHR5
cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VHJ1c3RlZEltbTMyIFRydXN0ZWRJbW0zMjsKLSAg
ICB0eXBlZGVmIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRydXN0ZWRJbW1QdHIgVHJ1c3RlZEltbVB0
cjsKLSAgICB0eXBlZGVmIFNwZWNpYWxpemVkVGh1bmtKSVQ6OkFkZHJlc3MgQWRkcmVzczsKLSAg
ICB0eXBlZGVmIFNwZWNpYWxpemVkVGh1bmtKSVQ6OkJhc2VJbmRleCBCYXNlSW5kZXg7Ci0gICAg
dHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpKdW1wIEp1bXA7Ci0gICAgCi0gICAgU3BlY2lh
bGl6ZWRUaHVua0pJVCBqaXQodm0pOwotICAgIC8vIE1ha2Ugc3VyZSB3ZSdyZSBiZWluZyBjYWxs
ZWQgb24gYW4gYXJyYXkgaXRlcmF0b3IsIGFuZCBsb2FkIG1faXRlcmF0ZWRPYmplY3QsIGFuZCBt
X25leHRJbmRleCBpbnRvIHJlZ1QwIGFuZCByZWdUMSByZXNwZWN0aXZlbHkKLSAgICBqaXQubG9h
ZEFyZ3VtZW50V2l0aFNwZWNpZmljQ2xhc3MoSlNBcnJheUl0ZXJhdG9yOjppbmZvKCksIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OlRoaXNBcmd1bWVudCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQs
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKLQotICAgIC8vIEVhcmx5IGV4aXQgaWYgd2Ug
ZG9uJ3QgaGF2ZSBhIHRodW5rIGZvciB0aGlzIGZvcm0gb2YgaXRlcmF0aW9uCi0gICAgaml0LmFw
cGVuZEZhaWx1cmUoaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkFib3ZlT3JFcXVh
bCwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpv
ZmZzZXRPZkl0ZXJhdGlvbktpbmQoKSksIFRydXN0ZWRJbW0zMihBcnJheUl0ZXJhdGVLZXlWYWx1
ZSkpKTsKLSAgICAKLSAgICBqaXQubG9hZFB0cihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0ZWRPYmplY3QoKSksIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICAKLSAgICBqaXQubG9hZDMyKEFkZHJlc3MoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5k
ZXgoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKLSAgICAKLSAgICAvLyBQdWxsIG91
dCB0aGUgYnV0dGVyZmx5IGZyb20gaXRlcmF0ZWRPYmplY3QKLSAgICBqaXQubG9hZDgoQWRkcmVz
cyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNDZWxsOjppbmRleGluZ1R5cGVPZmZzZXQo
KSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzKTsKLSAgICBqaXQubG9hZFB0cihBZGRyZXNz
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7Ci0gICAgSnVtcCBudWxsQnV0dGVyZmx5ID0g
aml0LmJyYW5jaFRlc3RQdHIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6WmVybywgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6cmVnVDIpOwotICAgIAotICAgIEp1bXAgbm90RG9uZSA9IGppdC5icmFuY2gzMihT
cGVjaWFsaXplZFRodW5rSklUOjpCZWxvdywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIEFk
ZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZQdWJs
aWNMZW5ndGgoKSkpOwotCi0gICAgbnVsbEJ1dHRlcmZseS5saW5rKCZqaXQpOwotCi0gICAgLy8g
UmV0dXJuIHRoZSB0ZXJtaW5hdGlvbiBzaWduYWwgdG8gaW5kaWNhdGUgdGhhdCB3ZSd2ZSBmaW5p
c2hlZAotICAgIGppdC5tb3ZlKFRydXN0ZWRJbW1QdHIodm0tPml0ZXJhdGlvblRlcm1pbmF0b3Iu
Z2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgaml0LnJldHVybkpTQ2Vs
bChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgCi0gICAgbm90RG9uZS5saW5rKCZq
aXQpOwotICAgIAotICAgIGlmIChraW5kID09IEFycmF5SXRlcmF0ZUtleSkgewotICAgICAgICBq
aXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpKTsKLSAgICAgICAgaml0
LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxKTsKLSAgICAgICAgcmV0dXJu
IGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRhaWxDYWxsKHZtKSwgImFycmF5
LWl0ZXJhdG9yLW5leHQta2V5Iik7Ci0gICAgICAgIAotICAgIH0KLSAgICBBU1NFUlQoa2luZCA9
PSBBcnJheUl0ZXJhdGVWYWx1ZSk7Ci0gICAgCi0gICAgLy8gT2theSwgbm93IHdlJ3JlIHJldHVy
bmluZyBhIHZhbHVlIHNvIG1ha2Ugc3VyZSB3ZSdyZSBpbnNpZGUgdGhlIHZlY3RvciBzaXplCi0g
ICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkFi
b3ZlT3JFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIEFkZHJlc3MoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDIsIEJ1dHRlcmZseTo6b2Zmc2V0T2ZWZWN0b3JMZW5ndGgoKSkpKTsK
LSAgICAKLSAgICAvLyBTbyBub3cgd2UgcGVyZm9ybSBpbmxpbmUgbG9hZHMgZm9yIGludDMyLCB2
YWx1ZS91bmRlY2lkZWQsIGFuZCBkb3VibGUgc3RvcmFnZQotICAgIEp1bXAgdW5kZWNpZGVkU3Rv
cmFnZSA9IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpFcXVhbCwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhVbmRlY2lkZWQpKTsKLSAg
ICBKdW1wIG5vdENvbnRpZ3VvdXNTdG9yYWdlID0gaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1
bmtKSVQ6Ok5vdEVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgVHJ1c3RlZEltbTMy
KEFycmF5V2l0aENvbnRpZ3VvdXMpKTsKLSAgICAKLSAgICB1bmRlY2lkZWRTdG9yYWdlLmxpbmso
JmppdCk7Ci0gICAgCi0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDIpOwotICAgIAotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgaml0LmxvYWQ2NChCYXNl
SW5kZXgoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QxLCBTcGVjaWFsaXplZFRodW5rSklUOjpUaW1lc0VpZ2h0KSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDApOwotICAgIEp1bXAgbm90SG9sZSA9IGppdC5icmFuY2hUZXN0NjQoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6Tm9uWmVybywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIGpp
dC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmluZWQpLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDApOwotICAgIG5vdEhvbGUubGluaygmaml0KTsKLSAgICBqaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwg
SlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0gICAgaml0LnJldHVybkpT
VmFsdWUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotI2Vsc2UKLSAgICBqaXQubG9hZDMy
KEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQsIEpTVmFsdWU6Om9mZnNl
dE9mVGFnKCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMyk7Ci0gICAgSnVtcCBub3RIb2xl
ID0gaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vdEVxdWFsLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMywgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpKTsK
LSAgICBqaXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVm
aW5lZFRhZyksIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgaml0Lm1vdmUoSlNJbnRlcmZh
Y2VKSVQ6OlRydXN0ZWRJbW0zMigwKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QwKTsKLSAgICBqaXQu
YWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0
LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpKTsKLSAgICBqaXQucmV0dXJu
SlNWYWx1ZShTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qx
KTsKLSAgICBub3RIb2xlLmxpbmsoJmppdCk7Ci0gICAgaml0LmxvYWQzMihCYXNlSW5kZXgoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVj
aWFsaXplZFRodW5rSklUOjpUaW1lc0VpZ2h0LCBKU1ZhbHVlOjpvZmZzZXRPZlBheWxvYWQoKSks
IFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMy
KDEpLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6
Om9mZnNldE9mTmV4dEluZGV4KCkpKTsKLSAgICBqaXQubW92ZShTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMywgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwotICAgIGppdC5yZXR1cm5KU1Zh
bHVlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdU
MSk7Ci0jZW5kaWYKLSAgICBub3RDb250aWd1b3VzU3RvcmFnZS5saW5rKCZqaXQpOwotICAgIAot
ICAgIEp1bXAgbm90SW50MzJTdG9yYWdlID0gaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtK
SVQ6Ok5vdEVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgVHJ1c3RlZEltbTMyKEFy
cmF5V2l0aEludDMyKSk7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDIpOwotICAgIGppdC5sb2FkMzIoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtK
SVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6VGltZXNFaWdodCwgSlNWYWx1ZTo6b2Zmc2V0T2ZQYXlsb2FkKCkpLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCk7Ci0gICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJ
bmRleCgpKSk7Ci0gICAgaml0LnJldHVybkludDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qw
KTsKLSAgICBub3RJbnQzMlN0b3JhZ2UubGluaygmaml0KTsKLSAgICAKLSAgICBqaXQuYXBwZW5k
RmFpbHVyZShqaXQuYnJhbmNoMzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6Tm90RXF1YWwsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoRG91YmxlKSkpOwot
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAg
ICBqaXQubG9hZERvdWJsZShCYXNlSW5kZXgoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVjaWFsaXplZFRodW5rSklUOjpUaW1lc0VpZ2h0
KSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBSZWdUMCk7Ci0gICAgaml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJh
dG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0gICAgaml0LnJldHVybkRvdWJsZShTcGVjaWFs
aXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICAKLSAgICByZXR1cm4gaml0LmZpbmFsaXplKHZt
LT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiYXJyYXktaXRlcmF0b3ItbmV4dC12
YWx1ZSIpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRLZXlU
aHVua0dlbmVyYXRvcihWTSogdm0pCi17Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0VGh1
bmtHZW5lcmF0b3Iodm0sIEFycmF5SXRlcmF0ZUtleSk7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQotewotICAg
IHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKHZtLCBBcnJheUl0ZXJhdGVW
YWx1ZSk7Ci19Ci0gICAgCiB9CiAKICNlbmRpZiAvLyBFTkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKaW5kZXggMjQ2ZGEyZWE2NDU0YjllMzAy
NzZhZDIxNzc0YjU1YzI1M2Q0MTBjNi4uZmRiMDBjZjgyYWU2YjEwZGNiM2EwMzkzNmJjNzBhOGEz
ZGIzYjlhNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVy
YXRvcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5o
CkBAIC0xMzAsOCArMTMwLDYgQEAgaW5saW5lIFRodW5rR2VuZXJhdG9yIHZpcnR1YWxUaHVua0dl
bmVyYXRvckZvcigKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzcXJ0VGh1bmtHZW5lcmF0b3IoVk0q
KTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBwb3dUaHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIGltdWxUaHVua0dlbmVyYXRvcihWTSopOwotTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0S2V5VGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlVGh1bmtHZW5lcmF0b3IoVk0qKTsK
IAogfQogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Bcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAKaW5kZXgg
ZDc5Y2M1MmUwOTJiYzZlOTBiNDFiYmU3OTk4YzJhYjcwN2FhM2QyYy4uYWQ4Yjc1OTBkODVlNjU2
YTkxMmI0YWE5OTE3NjBmYWQzNjMwNjBiZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlLmNwcApAQCAt
MjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkFyZ3VtZW50c0l0
ZXJhdG9yUHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNp
bmNsdWRlICJKU0FyZ3VtZW50c0l0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
CkBAIC00Myw3ICs0NCw3IEBAIHZvaWQgQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlz
aENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iCiAgICAgdm0ucHJvdG90
eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0u
cHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSwgYXJndW1lbnRzSXRlcmF0b3JQcm90
b3R5cGVGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9O
KHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lLCBhcmd1bWVudHNJdGVy
YXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7CisgICAgSlNDX05BVElWRV9GVU5D
VElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBhcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1
bmNOZXh0LCBEb250RW51bSwgMCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCkBAIC01NSw4ICs1Niw4IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJndW1l
bnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChDYWxsRnJhbWUqIGNhbGxGCiB7CiAgICAgSlNW
YWx1ZSByZXN1bHQ7CiAgICAgaWYgKGpzQ2FzdDxKU0FyZ3VtZW50c0l0ZXJhdG9yKj4oY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSktPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShj
YWxsRnJhbWUtPnZtKCkuaXRlcmF0aW9uVGVybWluYXRvci5nZXQoKSk7CisgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3Vs
dCwgZmFsc2UpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRP
YmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7CiB9CiAKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUu
Y3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlw
ZS5jcHAKaW5kZXggYzg4MDBlM2NkY2E2MjUyZWFiOThmZDAyMTE4NjFlMWQwZGJlYzExMi4uZjc2
ODY4YzAzZWE1MzM4MDEwYTJiN2IwNjFmZjBkNDI5MDg1NGJjMiAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5jcHAK
QEAgLTIwLDEzICsyMCwyMyBAQAogICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oIgogCituYW1lc3BhY2Ug
SlNDIHsKKworc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRv
clByb3RvRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSopOworCit9CisKKyNpbmNsdWRlICJBcnJheUl0
ZXJhdG9yUHJvdG90eXBlLmx1dC5oIgorCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiSlNBcnJheUl0ZXJhdG9yLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCkBAIC0zNSwyMiArNDUsMzMgQEAKIAogbmFt
ZXNwYWNlIEpTQyB7CiAKLWNvbnN0IENsYXNzSW5mbyBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpz
X2luZm8gPSB7ICJBcnJheSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRI
T0RfVEFCTEUoQXJyYXlJdGVyYXRvclByb3RvdHlwZSkgfTsKIAotc3RhdGljIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdGUoRXhlY1N0YXRl
Kik7Citjb25zdCBDbGFzc0luZm8gQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAi
QXJyYXkgSXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAmYXJyYXlJdGVyYXRvclByb3RvdHlwZVRh
YmxlLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEFycmF5SXRlcmF0b3JQcm90b3R5cGUpIH07CisKKy8q
IFNvdXJjZSBmb3IgQXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaAorQGJlZ2luIGFycmF5SXRl
cmF0b3JQcm90b3R5cGVUYWJsZQorICBuZXh0ICAgICAgYXJyYXlJdGVyYXRvclByb3RvRnVuY05l
eHQgIERvbnRFbnVtfEZ1bmN0aW9uIDAKK0BlbmQKKyovCiAKIHZvaWQgQXJyYXlJdGVyYXRvclBy
b3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0KQogewogICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJp
dHMoaW5mbygpKSk7CiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKLQot
ICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRl
TmFtZSwgYXJyYXlJdGVyYXRvclByb3RvdHlwZUl0ZXJhdGUsIERvbnRFbnVtLCAwKTsKKyAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUs
IGFycmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKENh
bGxGcmFtZSogY2FsbEZyYW1lKQorYm9vbCBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpnZXRPd25Q
cm9wZXJ0eVNsb3QoSlNPYmplY3QqIG9iamVjdCwgRXhlY1N0YXRlKiBleGVjLCBQcm9wZXJ0eU5h
bWUgcHJvcGVydHlOYW1lLCBQcm9wZXJ0eVNsb3QmIHNsb3QpCiB7Ci0gICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKKyAgICByZXR1cm4gZ2V0U3RhdGlj
RnVuY3Rpb25TbG90PEJhc2U+KGV4ZWMsIGFycmF5SXRlcmF0b3JQcm90b3R5cGVUYWJsZSwganND
YXN0PEFycmF5SXRlcmF0b3JQcm90b3R5cGUqPihvYmplY3QpLCBwcm9wZXJ0eU5hbWUsIHNsb3Qp
OwogfQogCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gQXJyYXkgRnVuY3Rpb25z
IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheUl0ZXJhdG9yUHJvdG9GdW5jSXRlcmF0b3IoRXhlY1N0YXRlKiBleGVjKQorewor
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZXhlYy0+dGhpc1ZhbHVlKCkpOwogfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaAppbmRleCAxMGVlOWE2YTI2NzZkOTlkMTkzN2QzOGM4
NzgxMjk1ODQ0ZmEwYjVkLi41NDdlMzMyNzJkMmU0YzEzNTY5NDBiOTkzZTQzZWFjZmMwMmM2Mjk1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9y
UHJvdG90eXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVy
YXRvclByb3RvdHlwZS5oCkBAIC00OCwxMiArNDgsMTcgQEAgY2xhc3MgQXJyYXlJdGVyYXRvclBy
b3RvdHlwZSA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAgICAgcmV0dXJuIFN0cnVj
dHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oT2JqZWN0
VHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOwogICAgIH0KIAorcHJvdGVjdGVkOgorICAg
IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IE92ZXJyaWRlc0dldE93blBy
b3BlcnR5U2xvdCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOworCiBwcml2YXRlOgogICAgIEFycmF5
SXRlcmF0b3JQcm90b3R5cGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAg
OiBCYXNlKHZtLCBzdHJ1Y3R1cmUpCiAgICAgewogICAgIH0KKwogICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mLCBKU0dsb2JhbE9iamVjdCopOworICAgIHN0YXRpYyBib29sIGdldE93blByb3Bl
cnR5U2xvdChKU09iamVjdCosIEV4ZWNTdGF0ZSosIFByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90
Jik7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9D
b21tb25JZGVudGlmaWVycy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
SWRlbnRpZmllcnMuaAppbmRleCBmMTExNzczZjEwNTU3NDk4MWU5Njg3N2M0NzkzZTRlOTVhZGI1
ODU4Li4zODZmNTQzYjlmNDZmYzZmNzVjZGJiNWQ0NDYwMjFiODE1MDYwZWI2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKQEAgLTIz
NSw3ICsyMzUsMTIgQEAKIAogI2RlZmluZSBKU0NfQ09NTU9OX1BSSVZBVEVfSURFTlRJRklFUlNf
RUFDSF9QUk9QRVJUWV9OQU1FKG1hY3JvKSBcCiAgICAgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5U
SUZJRVJTX0VBQ0hfV0VMTF9LTk9XTl9TWU1CT0wobWFjcm8pIFwKLSAgICBtYWNybyhpdGVyYXRv
ck5leHQpIFwKKyAgICBtYWNybyhpdGVyYXRlZE9iamVjdCkgXAorICAgIG1hY3JvKGFycmF5SXRl
cmF0b3JOZXh0SW5kZXgpIFwKKyAgICBtYWNybyhhcnJheUl0ZXJhdGlvbktpbmQpIFwKKyAgICBt
YWNybyhhcnJheUl0ZXJhdGlvbktpbmRLZXkpIFwKKyAgICBtYWNybyhhcnJheUl0ZXJhdGlvbktp
bmRWYWx1ZSkgXAorICAgIG1hY3JvKGFycmF5SXRlcmF0aW9uS2luZEtleVZhbHVlKSBcCiAgICAg
bWFjcm8ocmVzb2x2ZSkgXAogICAgIG1hY3JvKHJlamVjdCkgXAogICAgIG1hY3JvKHByb21pc2Up
IFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50cmluc2ljLmgKaW5kZXggNTM4YjMy
ODRjMjRjMTMzNjQwZmE0N2UzZTQyN2JkZDY1NzlhYzRhOS4uZjgyODMzNjk1MDFlMDk0NTMwNzE0
MDlmNDA2Zjg5YTIwNjg5YTYwZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50cmluc2ljLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW50
cmluc2ljLmgKQEAgLTUyLDEwICs1Miw3IEBAIGVudW0gSW50cmluc2ljIHsKICAgICBTdHJpbmdQ
cm90b3R5cGVWYWx1ZU9mSW50cmluc2ljLAogICAgIElNdWxJbnRyaW5zaWMsCiAgICAgRlJvdW5k
SW50cmluc2ljLAotICAgIEFycmF5SXRlcmF0b3JOZXh0VmFsdWVJbnRyaW5zaWMsCi0gICAgQXJy
YXlJdGVyYXRvck5leHRLZXlJbnRyaW5zaWMsCi0gICAgQXJyYXlJdGVyYXRvck5leHRHZW5lcmlj
SW50cmluc2ljLAotICAgIAorCiAgICAgLy8gRGVidWdnaW5nIGludHJpbnNpY3MuIFRoZXNlIGFy
ZSBtZWFudCB0byBiZSB1c2VkIGFzIHRlc3RpbmcgaGFja3Mgd2l0aGluCiAgICAgLy8ganNjLmNw
cCBhbmQgc2hvdWxkIG5ldmVyIGJlIGV4cG9zZWQgdG8gdXNlcnMuCiAgICAgREZHVHJ1ZUludHJp
bnNpYywKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9w
ZXJhdGlvbnMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMzODFmNGQ3NTY0ZTk0YzM2NjIyYzc0YjhlOTdhNDBl
MmNmNGFhMmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCkBAIC0wLDAgKzEsMTQyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKKworI2luY2x1ZGUgIkVycm9yLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIk9iamVjdENvbnN0cnVjdG9yLmgi
CisKK3VzaW5nIG5hbWVzcGFjZSBXVEY7CisKK25hbWVzcGFjZSBKU0MgeworCitKU1ZhbHVlIGl0
ZXJhdG9yTmV4dChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IsIEpTVmFsdWUgdmFs
dWUpCit7CisgICAgSlNWYWx1ZSBuZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgZXhl
Yy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5uZXh0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAgQ2FsbERhdGEgbmV4dEZ1
bmN0aW9uQ2FsbERhdGE7CisgICAgQ2FsbFR5cGUgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRD
YWxsRGF0YShuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxEYXRhKTsKKyAgICBpZiAobmV4
dEZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKQorICAgICAgICByZXR1cm4gdGhyb3dU
eXBlRXJyb3IoZXhlYyk7CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBuZXh0RnVuY3Rpb25B
cmd1bWVudHM7CisgICAgaWYgKCF2YWx1ZS5pc0VtcHR5KCkpCisgICAgICAgIG5leHRGdW5jdGlv
bkFyZ3VtZW50cy5hcHBlbmQodmFsdWUpOworICAgIEpTVmFsdWUgcmVzdWx0ID0gY2FsbChleGVj
LCBuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0
YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50cyk7CisgICAgaWYgKGV4ZWMtPmhhZEV4
Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgIGlmICghcmVz
dWx0LmlzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJ
SUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IpCit7CisgICAgcmV0dXJuIGl0ZXJhdG9yTmV4dChl
eGVjLCBpdGVyYXRvciwgSlNWYWx1ZSgpKTsKK30KKworSlNWYWx1ZSBpdGVyYXRvclZhbHVlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyUmVzdWx0KQoreworICAgIHJldHVybiBpdGVyUmVz
dWx0LmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnZhbHVlKTsKK30KKworYm9v
bCBpdGVyYXRvckNvbXBsZXRlKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyUmVzdWx0KQor
eworICAgIEpTVmFsdWUgZG9uZSA9IGl0ZXJSZXN1bHQuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJv
cGVydHlOYW1lcy0+ZG9uZSk7CisgICAgcmV0dXJuIGRvbmUudG9Cb29sZWFuKGV4ZWMpOworfQor
CitKU1ZhbHVlIGl0ZXJhdG9yU3RlcChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3Ip
Cit7CisgICAgSlNWYWx1ZSByZXN1bHQgPSBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0b3IpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CisgICAgYm9vbCBkb25lID0gaXRlcmF0b3JDb21wbGV0ZShleGVjLCByZXN1bHQpOworICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7
CisgICAgaWYgKGRvbmUpCisgICAgICAgIHJldHVybiBqc0Jvb2xlYW4oZmFsc2UpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgaXRlcmF0b3JDbG9zZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgaXRlcmF0b3IpCit7CisgICAgSlNWYWx1ZSBleGNlcHRpb247CisgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGV4ZWMtPmV4Y2VwdGlvbigp
OworICAgICAgICBleGVjLT5jbGVhckV4Y2VwdGlvbigpOworICAgIH0KKyAgICBKU1ZhbHVlIHJl
dHVybkZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1l
cy0+cmV0dXJuS2V5d29yZCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAocmV0dXJuRnVuY3Rpb24uaXNVbmRlZmluZWQoKSkgeworICAg
ICAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBleGVjLT52bSgpLnRo
cm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBDYWxsRGF0YSByZXR1cm5GdW5jdGlvbkNhbGxEYXRhOworICAgIENhbGxUeXBlIHJldHVy
bkZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXR1cm5GdW5jdGlvbiwgcmV0dXJuRnVu
Y3Rpb25DYWxsRGF0YSk7CisgICAgaWYgKHJldHVybkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5
cGVOb25lKSB7CisgICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAgICAg
IGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXR1cm5GdW5jdGlvbkFyZ3VtZW50czsK
KyAgICBKU1ZhbHVlIGlubmVyUmVzdWx0ID0gY2FsbChleGVjLCByZXR1cm5GdW5jdGlvbiwgcmV0
dXJuRnVuY3Rpb25DYWxsVHlwZSwgcmV0dXJuRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIHJl
dHVybkZ1bmN0aW9uQXJndW1lbnRzKTsKKworICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkg
eworICAgICAgICBleGVjLT52bSgpLnRocm93RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisg
ICAgICAgIHJldHVybjsKKworICAgIGlmICghaW5uZXJSZXN1bHQuaXNPYmplY3QoKSkgeworICAg
ICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBp
bnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9Cit9
CisKK0pTT2JqZWN0KiBjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgSlNW
YWx1ZSB2YWx1ZSwgYm9vbCBkb25lKQoreworICAgIEpTT2JqZWN0KiByZXN1bHRPYmplY3QgPSBj
b25zdHJ1Y3RFbXB0eU9iamVjdChleGVjKTsKKyAgICByZXN1bHRPYmplY3QtPnB1dERpcmVjdChl
eGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWUsIHZhbHVlKTsKKyAgICByZXN1
bHRPYmplY3QtPnB1dERpcmVjdChleGVjLT52bSgpLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZG9u
ZSwganNCb29sZWFuKGRvbmUpKTsKKyAgICByZXR1cm4gcmVzdWx0T2JqZWN0OworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0l0ZXJhdG9yT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRl
cmF0b3JPcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGJlZjM4ODM1YWFlZWVmYWVjMTJjODBhOTVl
YjEzM2I3OGRhZGQyNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBJdGVyYXRv
ck9wZXJhdGlvbnNfaAorI2RlZmluZSBJdGVyYXRvck9wZXJhdGlvbnNfaAorCisjaW5jbHVkZSAi
SlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIkpTT2JqZWN0LmgiCisKK25hbWVzcGFjZSBKU0Mgewor
CitKU1ZhbHVlIGl0ZXJhdG9yTmV4dChFeGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJhdG9yLCBKU1Zh
bHVlKTsKK0pTVmFsdWUgaXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0b3Ip
OworSlNWYWx1ZSBpdGVyYXRvclZhbHVlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlclJlc3VsdCk7
Citib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyUmVzdWx0KTsK
K0pTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0b3IpOwordm9p
ZCBpdGVyYXRvckNsb3NlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlcmF0b3IpOworSlNPYmplY3Qq
IGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoRXhlY1N0YXRlKiwgSlNWYWx1ZSwgYm9vbCBkb25lKTsK
KworfQorCisjZW5kaWYgLy8gIWRlZmluZWQoSXRlcmF0b3JPcGVyYXRpb25zX2gpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcAppbmRleCAz
M2JhYjcxYjY3OTAyODg5Njc5NTI2M2E0ZmM1OWEzZWM4ZGMzZGJmLi5kYWM1NjJiMWQ5ZDkzY2Zj
NTc2Y2Q3YjE3OTdjMzJlMDAyYzVlZmE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKQEAgLTM1LDEzMiArMzUsMTQgQEAKIAogY29u
c3QgQ2xhc3NJbmZvIEpTQXJyYXlJdGVyYXRvcjo6c19pbmZvID0geyAiQXJyYXlJdGVyYXRvciIs
ICZCYXNlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSlNBcnJheUl0ZXJhdG9yKSB9
OwogCi1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4
dEtleShFeGVjU3RhdGUqKTsKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFy
cmF5SXRlcmF0b3JOZXh0VmFsdWUoRXhlY1N0YXRlKik7Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMoRXhlY1N0YXRlKik7Ci0KLXZv
aWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0
KiBnbG9iYWxPYmplY3QsIEFycmF5SXRlcmF0aW9uS2luZCBraW5kLCBKU09iamVjdCogaXRlcmF0
ZWRPYmplY3QpCit2b2lkIEpTQXJyYXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBK
U0dsb2JhbE9iamVjdCosIEFycmF5SXRlcmF0aW9uS2luZCBraW5kLCBKU09iamVjdCogaXRlcmF0
ZWRPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwogICAgIEFTU0VSVChp
bmhlcml0cyhpbmZvKCkpKTsKLSAgICBtX2l0ZXJhdGlvbktpbmQgPSBraW5kOwotICAgIG1faXRl
cmF0ZWRPYmplY3Quc2V0KHZtLCB0aGlzLCBpdGVyYXRlZE9iamVjdCk7Ci0gICAgc3dpdGNoIChr
aW5kKSB7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdGVLZXk6Ci0gICAgICAgIEpTQ19OQVRJVkVfSU5U
UklOU0lDX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1l
LCBhcnJheUl0ZXJhdG9yTmV4dEtleSwgRG9udEVudW0sIDAsIEFycmF5SXRlcmF0b3JOZXh0S2V5
SW50cmluc2ljKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdGVWYWx1ZToK
LSAgICAgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+
aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0b3JOZXh0VmFsdWUsIERvbnRFbnVt
LCAwLCBBcnJheUl0ZXJhdG9yTmV4dFZhbHVlSW50cmluc2ljKTsKLSAgICAgICAgYnJlYWs7Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT04odm0ucHJv
cGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0b3JOZXh0R2Vu
ZXJpYywgRG9udEVudW0sIDAsIEFycmF5SXRlcmF0b3JOZXh0R2VuZXJpY0ludHJpbnNpYyk7Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLQotfQotICAgIAotICAgIAotdm9pZCBKU0FycmF5SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKLXsK
LSAgICBKU0FycmF5SXRlcmF0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNBcnJheUl0ZXJhdG9y
Kj4oY2VsbCk7Ci0gICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZv
KCkpOwotICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAg
dmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1faXRlcmF0ZWRPYmplY3QpOwotfQotCi1zdGF0
aWMgRW5jb2RlZEpTVmFsdWUgY3JlYXRlSXRlcmF0b3JSZXN1bHQoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUsIEFycmF5SXRlcmF0aW9uS2luZCBraW5kLCBzaXplX3QgaW5kZXgsIEpTVmFsdWUgcmVzdWx0
LCBib29sIGRvbmUpCi17Ci0gICAgaWYgKGRvbmUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpOwotICAgIAot
ICAgIHN3aXRjaCAoa2luZCAmIH5BcnJheUl0ZXJhdGVTcGFyc2VUYWcpIHsKLSAgICBjYXNlIEFy
cmF5SXRlcmF0ZUtleToKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bWJlcihp
bmRleCkpOwotICAgICAgICAKLSAgICBjYXNlIEFycmF5SXRlcmF0ZVZhbHVlOgotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3VsdCk7Ci0gICAgICAgIAotICAgIGNhc2UgQXJyYXlJ
dGVyYXRlS2V5VmFsdWU6IHsKLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgYXJnczsKLSAg
ICAgICAgYXJncy5hcHBlbmQoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAgICAgYXJncy5hcHBlbmQo
cmVzdWx0KTsKLSAgICAgICAgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IGNhbGxGcmFt
ZS0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5j
b2RlKGNvbnN0cnVjdEFycmF5KGNhbGxGcmFtZSwgMCwgZ2xvYmFsT2JqZWN0LCBhcmdzKSk7Ci0g
ICAgICAgIAotICAgIH0KLSAgICBkZWZhdWx0OgotICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgIH0KLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSk7
Ci19CiAKLXN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0
ZXJhdG9yTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICBKU0FycmF5SXRlcmF0b3Iq
IGl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU0FycmF5SXRlcmF0b3IqPihjYWxsRnJhbWUtPnRo
aXNWYWx1ZSgpKTsKLSAgICBpZiAoIWl0ZXJhdG9yKSB7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNh
bGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJDYW5ub3QgY2FsbCBBcnJheUl0ZXJhdG9yLm5leHQoKSBv
biBhIG5vbi1BcnJheUl0ZXJhdG9yIG9iamVjdCIpKSk7Ci0gICAgfQotICAgIEpTT2JqZWN0KiBp
dGVyYXRlZE9iamVjdCA9IGl0ZXJhdG9yLT5pdGVyYXRlZE9iamVjdCgpOwotICAgIHNpemVfdCBp
bmRleCA9IGl0ZXJhdG9yLT5uZXh0SW5kZXgoKTsKLSAgICBBcnJheUl0ZXJhdGlvbktpbmQga2lu
ZCA9IGl0ZXJhdG9yLT5pdGVyYXRpb25LaW5kKCk7Ci0gICAgSlNWYWx1ZSBqc0xlbmd0aCA9IEpT
VmFsdWUoaXRlcmF0ZWRPYmplY3QpLmdldChjYWxsRnJhbWUsIGNhbGxGcmFtZS0+cHJvcGVydHlO
YW1lcygpLmxlbmd0aCk7Ci0gICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdWxsKCkpOwotICAgIAotICAgIHNpemVfdCBs
ZW5ndGggPSBqc0xlbmd0aC50b1VJbnQzMihjYWxsRnJhbWUpOwotICAgIGlmIChjYWxsRnJhbWUt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVsbCgp
KTsKLSAgICAKLSAgICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT5m
aW5pc2goKTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KGNhbGxGcmFtZSwg
a2luZCwgaW5kZXgsIGpzVW5kZWZpbmVkKCksIHRydWUpOwotICAgIH0KLSAgICBpZiAoSlNWYWx1
ZSByZXN1bHQgPSBpdGVyYXRlZE9iamVjdC0+dHJ5R2V0SW5kZXhRdWlja2x5KGluZGV4KSkgewot
ICAgICAgICBpdGVyYXRvci0+c2V0TmV4dEluZGV4KGluZGV4ICsgMSk7Ci0gICAgICAgIHJldHVy
biBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxsRnJhbWUsIGtpbmQsIGluZGV4LCByZXN1bHQsIGZh
bHNlKTsKLSAgICB9Ci0gICAgCi0gICAgSlNWYWx1ZSByZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwot
ICAgIFByb3BlcnR5U2xvdCBzbG90KGl0ZXJhdGVkT2JqZWN0KTsKLSAgICBpZiAoa2luZCA+IEFy
cmF5SXRlcmF0ZVNwYXJzZVRhZykgewotICAgICAgICAvLyBXZSBhc3N1bWUgdGhhdCB0aGUgaW5k
ZXhlZCBwcm9wZXJ0eSB3aWxsIGJlIGFuIG93biBwcm9wZXJ0eSBzbyBjYWNoZSB0aGUgZ2V0T3du
UHJvcGVydHkKLSAgICAgICAgLy8gbWV0aG9kIGxvY2FsbHkKLSAgICAgICAgYXV0byBnZXRPd25Q
cm9wZXJ0eVNsb3RCeUluZGV4ID0gaXRlcmF0ZWRPYmplY3QtPm1ldGhvZFRhYmxlKCktPmdldE93
blByb3BlcnR5U2xvdEJ5SW5kZXg7Ci0gICAgICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkgewot
ICAgICAgICAgICAgaWYgKGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXgoaXRlcmF0ZWRPYmplY3Qs
IGNhbGxGcmFtZSwgaW5kZXgsIHNsb3QpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0gc2xv
dC5nZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChpdGVyYXRlZE9iamVjdC0+Z2V0UHJvcGVydHlT
bG90KGNhbGxGcmFtZSwgaW5kZXgsIHNsb3QpKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
c2xvdC5nZXRWYWx1ZShjYWxsRnJhbWUsIGluZGV4KTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgIH0KLSAgICB9IGVs
c2UgaWYgKGl0ZXJhdGVkT2JqZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpbmRleCwg
c2xvdCkpCi0gICAgICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZyYW1lLCBpbmRleCk7
Ci0gICAgCi0gICAgaWYgKGluZGV4ID09IGxlbmd0aCkKLSAgICAgICAgaXRlcmF0b3ItPmZpbmlz
aCgpOwotICAgIGVsc2UKLSAgICAgICAgaXRlcmF0b3ItPnNldE5leHRJbmRleChpbmRleCArIDEp
OwotICAgIHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxsRnJhbWUsIGtpbmQsIGluZGV4
LCBqc1VuZGVmaW5lZCgpLCBpbmRleCA9PSBsZW5ndGgpOwotfQotICAgIAotRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dEtleShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHQoY2FsbEZyYW1lKTsKLX0KLSAgICAK
LUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHRWYWx1ZShDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHQoY2FsbEZy
YW1lKTsKLX0KLSAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRv
ck5leHRHZW5lcmljKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBhcnJheUl0
ZXJhdG9yTmV4dChjYWxsRnJhbWUpOworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1l
cy0+aXRlcmF0ZWRPYmplY3RQcml2YXRlTmFtZSwgaXRlcmF0ZWRPYmplY3QpOworICAgIHB1dERp
cmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YXJyYXlJdGVyYXRvck5leHRJbmRleFByaXZhdGVO
YW1lLCBqc051bWJlcigwKSk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5h
cnJheUl0ZXJhdGlvbktpbmRQcml2YXRlTmFtZSwganNOdW1iZXIoa2luZCkpOwogfQogCiB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3Iu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCmluZGV4
IDdiYjBmYzVkMzY5Y2MwNzQxMjM2N2I2Yjk4NTljYTk1YjY1MWQ2OGMuLjJlOTc2YmU0NTg4YTJj
ODNhY2I3ZTAzMmQxNTg4MmRjMmEwYTFiNDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5oCkBAIC0zMywxMSArMzMsNyBAQAogZW51bSBBcnJh
eUl0ZXJhdGlvbktpbmQgOiB1aW50MzJfdCB7CiAgICAgQXJyYXlJdGVyYXRlS2V5LAogICAgIEFy
cmF5SXRlcmF0ZVZhbHVlLAotICAgIEFycmF5SXRlcmF0ZUtleVZhbHVlLAotICAgIEFycmF5SXRl
cmF0ZVNwYXJzZVRhZyA9IDQsCi0gICAgQXJyYXlJdGVyYXRlU3BhcnNlS2V5LAotICAgIEFycmF5
SXRlcmF0ZVNwYXJzZVZhbHVlLAotICAgIEFycmF5SXRlcmF0ZVNwYXJzZUtleVZhbHVlCisgICAg
QXJyYXlJdGVyYXRlS2V5VmFsdWUKIH07CiAKIGNsYXNzIEpTQXJyYXlJdGVyYXRvciA6IHB1Ymxp
YyBKU05vbkZpbmFsT2JqZWN0IHsKQEAgLTU5LDMwICs1NSwxNCBAQCBjbGFzcyBKU0FycmF5SXRl
cmF0b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBpbnN0YW5j
ZTsKICAgICB9CiAKLSAgICBBcnJheUl0ZXJhdGlvbktpbmQgaXRlcmF0aW9uS2luZCgpIGNvbnN0
IHsgcmV0dXJuIG1faXRlcmF0aW9uS2luZDsgfQotICAgIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVj
dCgpIGNvbnN0IHsgcmV0dXJuIG1faXRlcmF0ZWRPYmplY3QuZ2V0KCk7IH0KLSAgICBzaXplX3Qg
bmV4dEluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9uZXh0SW5kZXg7IH0KLSAgICB2b2lkIHNldE5l
eHRJbmRleChzaXplX3QgbmV4dEluZGV4KSB7IG1fbmV4dEluZGV4ID0gbmV4dEluZGV4OyB9Ci0g
ICAgdm9pZCBmaW5pc2goKSB7IG1fbmV4dEluZGV4ID0gc3RkOjpudW1lcmljX2xpbWl0czx1aW50
MzJfdD46Om1heCgpOyB9Ci0gICAgCiAgICAgdXNpbmcgSlNOb25GaW5hbE9iamVjdDo6YXJyYXlT
dG9yYWdlT3JOdWxsOwotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJdGVyYXRpb25LaW5k
KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlJdGVyYXRvciwgbV9pdGVyYXRpb25L
aW5kKTsgfQotICAgIHN0YXRpYyBwdHJkaWZmX3Qgb2Zmc2V0T2ZJdGVyYXRlZE9iamVjdCgpIHsg
cmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU0FycmF5SXRlcmF0b3IsIG1faXRlcmF0ZWRPYmplY3Qp
OyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZk5leHRJbmRleCgpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU0FycmF5SXRlcmF0b3IsIG1fbmV4dEluZGV4KTsgfQotCiBwcml2YXRl
OgogICAgIEpTQXJyYXlJdGVyYXRvcihWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlKQogICAg
ICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKLSAgICAgICAgLCBtX25leHRJbmRleCgwKQogICAg
IHsKICAgICB9CiAKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9iYWxPYmplY3Qq
LCBBcnJheUl0ZXJhdGlvbktpbmQsIEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCk7Ci0gICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotICAgIAotICAg
IEFycmF5SXRlcmF0aW9uS2luZCBtX2l0ZXJhdGlvbktpbmQ7Ci0gICAgV3JpdGVCYXJyaWVyPEpT
T2JqZWN0PiBtX2l0ZXJhdGVkT2JqZWN0OwotICAgIHVpbnQzMl90IG1fbmV4dEluZGV4OwogfTsK
IAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxP
YmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwCmluZGV4IDZiYTkyMmY3NTAxMzE5ODNjNWVjMTE5ZDg3OTM3MjcyNDMwNzk2YTAuLjA1YWUy
MmI4YWFkOWNiY2JjOTI4ZTIxOWNiNWZhOWU1ODI3ZmE1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTQyNyw2ICs0MjcsOSBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0Ojppbml0KFZNJiB2bSkKICAgICAgICAgR2xvYmFsUHJvcGVy
dHlJbmZvKHZtLnByb3BlcnR5TmFtZXMtPmFic1ByaXZhdGVOYW1lLCBwcml2YXRlRnVuY0Ficywg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8odm0ucHJvcGVydHlOYW1lcy0+Zmxvb3JQcml2YXRlTmFtZSwgcHJpdmF0ZUZ1bmNGbG9v
ciwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAogICAgICAgICBHbG9iYWxQcm9w
ZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+aXNGaW5pdGVQcml2YXRlTmFtZSwgcHJpdmF0ZUZ1
bmNJc0Zpbml0ZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBH
bG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YXJyYXlJdGVyYXRpb25LaW5kS2V5
UHJpdmF0ZU5hbWUsIGpzTnVtYmVyKEFycmF5SXRlcmF0ZUtleSksIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5
TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZFZhbHVlUHJpdmF0ZU5hbWUsIGpzTnVtYmVyKEFycmF5
SXRlcmF0ZVZhbHVlKSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAg
ICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YXJyYXlJdGVyYXRpb25LaW5k
S2V5VmFsdWVQcml2YXRlTmFtZSwganNOdW1iZXIoQXJyYXlJdGVyYXRlS2V5VmFsdWUpLCBEb250
RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAgfTsKICAgICBhZGRTdGF0aWNHbG9i
YWxzKHN0YXRpY0dsb2JhbHMsIFdURl9BUlJBWV9MRU5HVEgoc3RhdGljR2xvYmFscykpOwogICAg
IApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29u
c3RydWN0b3IuY3BwCmluZGV4IGYxYTJlNTYyZjlhYmY0MDJhYjYzOGRjMDljNmVmYzM4MGQxYzVi
NGQuLmFmZGZjMjdkMjBhODY1YTM0M2FmMjFkNWM3NDg4ZGM0MzY1YjE3MTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5j
cHAKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAKICNpbmNsdWRlICJF
cnJvci5oIgorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pT
VmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
UHJvbWlzZS5oIgpAQCAtMjMyLDEwNCArMjMzLDU3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmVqZWN0KEV4ZWNTdGF0ZSogZXhlYykKICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVkLT5wcm9taXNlKCkpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY1JhY2UoRXhl
Y1N0YXRlKiBleGVjKQorc3RhdGljIHZvaWQgcGVyZm9ybVByb21pc2VSYWNlTG9vcChFeGVjU3Rh
dGUqIGV4ZWMsIEpTVmFsdWUgaXRlcmF0b3IsIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCwg
SlNWYWx1ZSBDKQogewotICAgIC8vIC0tIFByb21pc2UucmFjZShpdGVyYWJsZSkgLS0KLSAgICBK
U1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJndW1lbnQoMCk7Ci0gICAgVk0mIHZtID0gZXhlYy0+
dm0oKTsKLQotICAgIC8vIDEuIExldCAnQycgYmUgdGhlIHRoaXMgdmFsdWUuCi0gICAgSlNWYWx1
ZSBDID0gZXhlYy0+dGhpc1ZhbHVlKCk7Ci0KLSAgICAvLyAyLiBMZXQgJ2RlZmVycmVkJyBiZSB0
aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0RGVmZXJyZWQoQykuCi0gICAgSlNWYWx1ZSBkZWZlcnJl
ZFZhbHVlID0gY3JlYXRlSlNQcm9taXNlRGVmZXJyZWRGcm9tQ29uc3RydWN0b3IoZXhlYywgQyk7
Ci0KLSAgICAvLyAzLiBSZXR1cm5JZkFicnVwdChkZWZlcnJlZCkuCi0gICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVk
KCkpOwotCi0gICAgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0ganNDYXN0PEpTUHJvbWlz
ZURlZmVycmVkKj4oZGVmZXJyZWRWYWx1ZSk7Ci0KLSAgICAvLyA0LiBMZXQgJ2l0ZXJhdG9yJyBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0SXRlcmF0b3IoaXRlcmFibGUpLgotICAgIEpTVmFs
dWUgaXRlcmF0b3JGdW5jdGlvbiA9IGl0ZXJhYmxlLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVz
LT5pdGVyYXRvclByaXZhdGVOYW1lKTsKLSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVy
cmVkKSk7Ci0KLSAgICBDYWxsRGF0YSBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGE7Ci0gICAgQ2Fs
bFR5cGUgaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEoaXRlcmF0b3JGdW5j
dGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhKTsKLSAgICBpZiAoaXRlcmF0b3JGdW5jdGlv
bkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewotICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVj
KTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywg
ZGVmZXJyZWQpKTsKLSAgICB9Ci0KLSAgICBBcmdMaXN0IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVu
dHM7Ci0gICAgSlNWYWx1ZSBpdGVyYXRvciA9IGNhbGwoZXhlYywgaXRlcmF0b3JGdW5jdGlvbiwg
aXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJh
YmxlLCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzKTsKLQotICAgIC8vIDUuIFJlamVjdElmQWJy
dXB0KGl0ZXJhdG9yLCBkZWZlcnJlZCkuCi0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZl
cnJlZCkpOwotCiAgICAgLy8gNi4gUmVwZWF0CiAgICAgZG8gewogICAgICAgICAvLyBpLiBMZXQg
J25leHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclN0ZXAoaXRlcmF0b3IpLgot
ICAgICAgICBKU1ZhbHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJhdG9yLmdldChleGVjLCBleGVjLT52
bSgpLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lKTsKLSAgICAgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLQotICAgICAgICBDYWxsRGF0YSBu
ZXh0RnVuY3Rpb25DYWxsRGF0YTsKLSAgICAgICAgQ2FsbFR5cGUgbmV4dEZ1bmN0aW9uQ2FsbFR5
cGUgPSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxEYXRhKTsKLSAg
ICAgICAgaWYgKG5leHRGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewotICAgICAg
ICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotICAgICAgICB9CisgICAg
ICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3RlcChleGVjLCBpdGVyYXRvcik7CiAKLSAgICAg
ICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbmV4dEZ1bmN0aW9uQXJndW1lbnRzOwotICAgICAgICBu
ZXh0RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKGpzVW5kZWZpbmVkKCkpOwotICAgICAgICBKU1Zh
bHVlIG5leHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUs
IG5leHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsK
LSAgICAgICAgCiAgICAgICAgIC8vIGlpLiBSZWplY3RJZkFicnVwdChuZXh0LCBkZWZlcnJlZCku
CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0gICAgCisg
ICAgICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8gaWlpLiBJZiAnbmV4dCcgaXMgZmFsc2Us
IHJldHVybiBkZWZlcnJlZC5bW1Byb21pc2VdXS4KLSAgICAgICAgLy8gTm90ZTogV2UgaW1wbGVt
ZW50IHRoaXMgYXMgYW4gaXRlcmF0aW9uVGVybWluYXRvcgotICAgICAgICBpZiAobmV4dCA9PSB2
bS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShkZWZlcnJlZC0+cHJvbWlzZSgpKTsKLSAgICAgICAgCisgICAgICAgIGlmIChuZXh0
LmlzRmFsc2UoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAvLyBpdi4gTGV0ICdu
ZXh0VmFsdWUnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclZhbHVlKG5leHQpLgog
ICAgICAgICAvLyB2LiBSZWplY3RJZkFicnVwdChuZXh0VmFsdWUsIGRlZmVycmVkKS4KLSAgICAg
ICAgLy8gTm90ZTogJ25leHQnIGlzIGFscmVhZHkgdGhlIHZhbHVlLCBzbyB0aGVyZSBpcyBub3Ro
aW5nIHRvIGRvIGhlcmUuCisgICAgICAgIEpTVmFsdWUgbmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1
ZShleGVjLCBuZXh0KTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgcmV0dXJuOwogCiAgICAgICAgIC8vIHZpLiBMZXQgJ25leHRQcm9taXNlJyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgSW52b2tlKEMsICJyZXNvbHZlIiwgKG5leHRWYWx1ZSkpLgotICAg
ICAgICBKU1ZhbHVlIHJlc29sdmVGdW5jdGlvbiA9IEMuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFt
ZXMtPnJlc29sdmUpOworICAgICAgICBKU1ZhbHVlIHJlc29sdmVGdW5jdGlvbiA9IEMuZ2V0KGV4
ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+cmVzb2x2ZSk7CiAgICAgICAgIGlmIChleGVj
LT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJy
dXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm47CiAKICAg
ICAgICAgQ2FsbERhdGEgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBl
IHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEocmVzb2x2ZUZ1bmN0aW9uLCBy
ZXNvbHZlRnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgICAgIGlmIChyZXNvbHZlRnVuY3Rpb25DYWxs
VHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMp
OwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhl
YywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAg
IE1hcmtlZEFyZ3VtZW50QnVmZmVyIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50czsKLSAgICAgICAg
cmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChuZXh0KTsKKyAgICAgICAgcmVzb2x2ZUZ1
bmN0aW9uQXJndW1lbnRzLmFwcGVuZChuZXh0VmFsdWUpOwogICAgICAgICBKU1ZhbHVlIG5leHRQ
cm9taXNlID0gY2FsbChleGVjLCByZXNvbHZlRnVuY3Rpb24sIHJlc29sdmVGdW5jdGlvbkNhbGxU
eXBlLCByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YSwgQywgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRz
KTsKIAogICAgICAgICAvLyB2aWkuIFJlamVjdElmQWJydXB0KG5leHRQcm9taXNlLCBkZWZlcnJl
ZCkuCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gdmlpaS4gTGV0ICdyZXN1bHQnIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyBJbnZva2UobmV4dFByb21pc2UsICJ0aGVuIiwgKGRlZmVycmVkLltb
UmVzb2x2ZV1dLCBkZWZlcnJlZC5bW1JlamVjdF1dKSkuCi0gICAgICAgIEpTVmFsdWUgdGhlbkZ1
bmN0aW9uID0gbmV4dFByb21pc2UuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnRoZW4pOwor
ICAgICAgICBKU1ZhbHVlIHRoZW5GdW5jdGlvbiA9IG5leHRQcm9taXNlLmdldChleGVjLCBleGVj
LT52bSgpLnByb3BlcnR5TmFtZXMtPnRoZW4pOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlv
bihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENhbGxE
YXRhIHRoZW5GdW5jdGlvbkNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSB0aGVuRnVuY3Rpb25D
YWxsVHlwZSA9IGdldENhbGxEYXRhKHRoZW5GdW5jdGlvbiwgdGhlbkZ1bmN0aW9uQ2FsbERhdGEp
OwogICAgICAgICBpZiAodGhlbkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CiAg
ICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciB0aGVu
RnVuY3Rpb25Bcmd1bWVudHM7CkBAIC0zNDAsMTQgKzI5NCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY1JhY2UoRXhlY1N0YXRlKiBleGVj
KQogCiAgICAgICAgIC8vIGl4LiBSZWplY3RJZkFicnVwdChyZXN1bHQsIGRlZmVycmVkKS4KICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAg
IHJldHVybjsKICAgICB9IHdoaWxlICh0cnVlKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQorRW5j
b2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNlKEV4
ZWNTdGF0ZSogZXhlYykKIHsKLSAgICAvLyAtLSBQcm9taXNlLmFsbChpdGVyYWJsZSkgLS0KLQor
ICAgIC8vIC0tIFByb21pc2UucmFjZShpdGVyYWJsZSkgLS0KICAgICBKU1ZhbHVlIGl0ZXJhYmxl
ID0gZXhlYy0+YXJndW1lbnQoMCk7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKIApAQCAtMzYx
LDkgKzMxNCw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3Ry
dWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CiAKLSAg
ICAvLyBOT1RFOiBBIG5vbi1hYnJ1cHQgY29tcGxldGlvbiBvZiBjcmVhdGVKU1Byb21pc2VEZWZl
cnJlZEZyb21Db25zdHJ1Y3RvciBpbXBsaWVzIHRoYXQKLSAgICAvLyBDIGFuZCBkZWZlcnJlZFZh
bHVlIGFyZSBvYmplY3RzLgotICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gYXNPYmplY3QoQyk7
CiAgICAgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkID0ganNDYXN0PEpTUHJvbWlzZURlZmVy
cmVkKj4oZGVmZXJyZWRWYWx1ZSk7CiAKICAgICAvLyA0LiBMZXQgJ2l0ZXJhdG9yJyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgR2V0SXRlcmF0b3IoaXRlcmFibGUpLgpAQCAtMzg1LDQwICszMzUs
MzcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1
bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJy
ZWQpKTsKIAorICAgIHBlcmZvcm1Qcm9taXNlUmFjZUxvb3AoZXhlYywgaXRlcmF0b3IsIGRlZmVy
cmVkLCBDKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIGl0ZXJhdG9y
Q2xvc2UoZXhlYywgaXRlcmF0b3IpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJy
ZWQpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVkLT5wcm9taXNlKCkpOwor
fQorCitzdGF0aWMgSlNWYWx1ZSBwZXJmb3JtUHJvbWlzZUFsbChFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgaXRlcmF0b3IsIEpTVmFsdWUgQywgSlNQcm9taXNlRGVmZXJyZWQqIGRlZmVycmVkKQor
eworICAgIEpTT2JqZWN0KiB0aGlzT2JqZWN0ID0gYXNPYmplY3QoQyk7CisgICAgVk0mIHZtID0g
ZXhlYy0+dm0oKTsKKwogICAgIC8vIDYuIExldCAndmFsdWVzJyBiZSB0aGUgcmVzdWx0IG9mIGNh
bGxpbmcgQXJyYXlDcmVhdGUoMCkuCiAgICAgSlNBcnJheSogdmFsdWVzID0gY29uc3RydWN0RW1w
dHlBcnJheShleGVjLCBudWxscHRyLCB0aGlzT2JqZWN0LT5nbG9iYWxPYmplY3QoKSk7Ci0gICAg
CisKICAgICAvLyA3LiBMZXQgJ2NvdW50ZG93bkhvbGRlcicgYmUgUmVjb3JkIHsgW1tDb3VudGRv
d25dXTogMCB9LgogICAgIE51bWJlck9iamVjdCogY291bnRkb3duSG9sZGVyID0gY29uc3RydWN0
TnVtYmVyKGV4ZWMsIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpLCBKU1ZhbHVlKDApKTsKLSAg
ICAKKwogICAgIC8vIDguIExldCAnaW5kZXgnIGJlIDAuCiAgICAgdW5zaWduZWQgaW5kZXggPSAw
OwotICAgIAorCiAgICAgLy8gOS4gUmVwZWF0LgogICAgIGRvIHsKICAgICAgICAgLy8gaS4gTGV0
ICduZXh0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSXRlcmF0b3JTdGVwKGl0ZXJhdG9yKS4K
LSAgICAgICAgSlNWYWx1ZSBuZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSk7Ci0gICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0KLSAgICAgICAgQ2FsbERhdGEg
bmV4dEZ1bmN0aW9uQ2FsbERhdGE7Ci0gICAgICAgIENhbGxUeXBlIG5leHRGdW5jdGlvbkNhbGxU
eXBlID0gZ2V0Q2FsbERhdGEobmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSk7Ci0g
ICAgICAgIGlmIChuZXh0RnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKLSAgICAg
ICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLSAgICAgICAgfQotCi0g
ICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIG5leHRGdW5jdGlvbkFyZ3VtZW50czsKLSAgICAg
ICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAg
SlNWYWx1ZSBuZXh0ID0gY2FsbChleGVjLCBuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxU
eXBlLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50
cyk7Ci0gICAgICAgIAotICAgICAgICAvLyBpaS4gUmVqZWN0SWZBYnJ1cHQobmV4dCwgZGVmZXJy
ZWQpLgorICAgICAgICBKU1ZhbHVlIG5leHQgPSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0b3Ip
OwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAg
ICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgLy8gaWlpLiBJZiAnbmV4dCcg
aXMgZmFsc2UsCi0gICAgICAgIC8vIE5vdGU6IFdlIGltcGxlbWVudCB0aGlzIGFzIGFuIGl0ZXJh
dGlvblRlcm1pbmF0b3IKLSAgICAgICAgaWYgKG5leHQgPT0gdm0uaXRlcmF0aW9uVGVybWluYXRv
ci5nZXQoKSkgeworICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkpIHsKICAgICAgICAgICAgIC8v
IGEuIElmICdpbmRleCcgaXMgMCwKICAgICAgICAgICAgIGlmICghaW5kZXgpIHsKICAgICAgICAg
ICAgICAgICAvLyBhLiBMZXQgJ3Jlc29sdmVSZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGlu
ZyB0aGUgW1tDYWxsXV0gaW50ZXJuYWwgbWV0aG9kCkBAIC00MjgsNDAgKzM3NSw0NCBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVj
U3RhdGUqIGV4ZWMpCiAKICAgICAgICAgICAgICAgICAvLyBiLiBSZXR1cm5JZkFicnVwdChyZXNv
bHZlUmVzdWx0KS4KICAgICAgICAgICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICAgICAg
fQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIC8vIGIuIFJldHVybiBkZWZlcnJlZC5bW1By
b21pc2VdXS4KLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGVmZXJyZWQtPnBy
b21pc2UoKSk7CisgICAgICAgICAgICByZXR1cm4gZGVmZXJyZWQtPnByb21pc2UoKTsKICAgICAg
ICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBpdi4gTGV0ICduZXh0VmFsdWUnIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRvclZhbHVlKG5leHQpLgogICAgICAgICAvLyB2LiBSZWpl
Y3RJZkFicnVwdChuZXh0VmFsdWUsIGRlZmVycmVkKS4KLSAgICAgICAgLy8gTm90ZTogJ25leHQn
IGlzIGFscmVhZHkgdGhlIHZhbHVlLCBzbyB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUuCisg
ICAgICAgIEpTVmFsdWUgbmV4dFZhbHVlID0gaXRlcmF0b3JWYWx1ZShleGVjLCBuZXh0KTsKKyAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGpzVW5k
ZWZpbmVkKCk7CisKKyAgICAgICAgdmFsdWVzLT5wdXNoKGV4ZWMsIGpzVW5kZWZpbmVkKCkpOwog
CiAgICAgICAgIC8vIHZpLiBMZXQgJ25leHRQcm9taXNlJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxp
bmcgSW52b2tlKEMsICJyZXNvbHZlIiwgKG5leHRWYWx1ZSkpLgogICAgICAgICBKU1ZhbHVlIHJl
c29sdmVGdW5jdGlvbiA9IEMuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPnJlc29sdmUpOwog
ICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgQ2FsbERhdGEgcmVzb2x2ZUZ1bmN0
aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlID0g
Z2V0Q2FsbERhdGEocmVzb2x2ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YSk7CiAg
ICAgICAgIGlmIChyZXNvbHZlRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKICAg
ICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFya2VkQXJndW1l
bnRCdWZmZXIgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzOwotICAgICAgICByZXNvbHZlRnVuY3Rp
b25Bcmd1bWVudHMuYXBwZW5kKG5leHQpOworICAgICAgICByZXNvbHZlRnVuY3Rpb25Bcmd1bWVu
dHMuYXBwZW5kKG5leHRWYWx1ZSk7CiAgICAgICAgIEpTVmFsdWUgbmV4dFByb21pc2UgPSBjYWxs
KGV4ZWMsIHJlc29sdmVGdW5jdGlvbiwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5cGUsIHJlc29sdmVG
dW5jdGlvbkNhbGxEYXRhLCBDLCByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHMpOwogCiAgICAgICAg
IC8vIHZpaS4gUmVqZWN0SWZBYnJ1cHQobmV4dFByb21pc2UsIGRlZmVycmVkKS4KICAgICAgICAg
aWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIC8vIHZpaWkuIExldCAnY291bnRkb3duRnVuY3Rp
b24nIGJlIGEgbmV3IGJ1aWx0LWluIGZ1bmN0aW9uIG9iamVjdCBhcyBkZWZpbmVkIGluIFByb21p
c2UuYWxsIENvdW50ZG93biBGdW5jdGlvbnMuCiAgICAgICAgIEpTRnVuY3Rpb24qIGNvdW50ZG93
bkZ1bmN0aW9uID0gY3JlYXRlUHJvbWlzZUFsbENvdW50ZG93bkZ1bmN0aW9uKHZtLCB0aGlzT2Jq
ZWN0LT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGl4LiBTZXQgdGhl
IFtbSW5kZXhdXSBpbnRlcm5hbCBzbG90IG9mICdjb3VudGRvd25GdW5jdGlvbicgdG8gJ2luZGV4
Jy4KICAgICAgICAgY291bnRkb3duRnVuY3Rpb24tPnB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlO
YW1lcy0+aW5kZXhQcml2YXRlTmFtZSwgSlNWYWx1ZShpbmRleCkpOwogCkBAIC00NzcsMTMgKzQy
OCwxMyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9y
RnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAgIC8vIHhpaWkuIExldCAncmVzdWx0JyBi
ZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgSW52b2tlKG5leHRQcm9taXNlLCAidGhlbiIsIChjb3Vu
dGRvd25GdW5jdGlvbiwgZGVmZXJyZWQuW1tSZWplY3RdXSkpLgogICAgICAgICBKU1ZhbHVlIHRo
ZW5GdW5jdGlvbiA9IG5leHRQcm9taXNlLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50aGVu
KTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIENhbGxEYXRhIHRoZW5GdW5j
dGlvbkNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSB0aGVuRnVuY3Rpb25DYWxsVHlwZSA9IGdl
dENhbGxEYXRhKHRoZW5GdW5jdGlvbiwgdGhlbkZ1bmN0aW9uQ2FsbERhdGEpOwogICAgICAgICBp
ZiAodGhlbkZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgICAgICB0
aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHRo
ZW5GdW5jdGlvbkFyZ3VtZW50czsKQEAgLTQ5NCw3ICs0NDUsNyBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMp
CiAKICAgICAgICAgLy8geGl2LiBSZWplY3RJZkFicnVwdChyZXN1bHQsIGRlZmVycmVkKS4KICAg
ICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAg
IHJldHVybiBqc1VuZGVmaW5lZCgpOwogCiAgICAgICAgIC8vIHh2LiBTZXQgaW5kZXggdG8gaW5k
ZXggKyAxLgogICAgICAgICBpbmRleCsrOwpAQCAtNTAzLDYgKzQ1NCw1NyBAQCBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUq
IGV4ZWMpCiAgICAgICAgIHVpbnQzMl90IG5ld0NvdW50ZG93blZhbHVlID0gY291bnRkb3duSG9s
ZGVyLT5pbnRlcm5hbFZhbHVlKCkuYXNVSW50MzIoKSArIDE7CiAgICAgICAgIGNvdW50ZG93bkhv
bGRlci0+c2V0SW50ZXJuYWxWYWx1ZSh2bSwgSlNWYWx1ZShuZXdDb3VudGRvd25WYWx1ZSkpOwog
ICAgIH0gd2hpbGUgKHRydWUpOworICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBqc1VuZGVmaW5lZCgpOworfQorCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJv
bWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCit7CisgICAgLy8gLS0gUHJv
bWlzZS5hbGwoaXRlcmFibGUpIC0tCisKKyAgICBKU1ZhbHVlIGl0ZXJhYmxlID0gZXhlYy0+YXJn
dW1lbnQoMCk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgIC8vIDEuIExldCAnQycg
YmUgdGhlIHRoaXMgdmFsdWUuCisgICAgSlNWYWx1ZSBDID0gZXhlYy0+dGhpc1ZhbHVlKCk7CisK
KyAgICAvLyAyLiBMZXQgJ2RlZmVycmVkJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgR2V0RGVm
ZXJyZWQoQykuCisgICAgSlNWYWx1ZSBkZWZlcnJlZFZhbHVlID0gY3JlYXRlSlNQcm9taXNlRGVm
ZXJyZWRGcm9tQ29uc3RydWN0b3IoZXhlYywgQyk7CisKKyAgICAvLyAzLiBSZXR1cm5JZkFicnVw
dChkZWZlcnJlZCkuCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworCisgICAgLy8gTk9URTogQSBub24t
YWJydXB0IGNvbXBsZXRpb24gb2YgY3JlYXRlSlNQcm9taXNlRGVmZXJyZWRGcm9tQ29uc3RydWN0
b3IgaW1wbGllcyB0aGF0CisgICAgLy8gQyBhbmQgZGVmZXJyZWRWYWx1ZSBhcmUgb2JqZWN0cy4K
KyAgICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBqc0Nhc3Q8SlNQcm9taXNlRGVmZXJy
ZWQqPihkZWZlcnJlZFZhbHVlKTsKKworICAgIC8vIDQuIExldCAnaXRlcmF0b3InIGJlIHRoZSBy
ZXN1bHQgb2YgY2FsbGluZyBHZXRJdGVyYXRvcihpdGVyYWJsZSkuCisgICAgSlNWYWx1ZSBpdGVy
YXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0KGV4ZWMsIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yUHJpdmF0ZU5hbWUpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsK
KworICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBp
dGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShpdGVyYXRvckZ1bmN0aW9uLCBp
dGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEpOworICAgIGlmIChpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5
cGUgPT0gQ2FsbFR5cGVOb25lKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOworICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJl
ZCkpOworICAgIH0KKworICAgIEFyZ0xpc3QgaXRlcmF0b3JGdW5jdGlvbkFyZ3VtZW50czsKKyAg
ICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBpdGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRv
ckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSwgaXRlcmFibGUsIGl0
ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOworCisgICAgLy8gNS4gUmVqZWN0SWZBYnJ1cHQoaXRl
cmF0b3IsIGRlZmVycmVkKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7
CisKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IHBlcmZvcm1Qcm9taXNlQWxsKGV4ZWMsIGl0ZXJhdG9y
LCBDLCBkZWZlcnJlZCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKSB7CisgICAgICAg
IGl0ZXJhdG9yQ2xvc2UoZXhlYywgaXRlcmF0b3IpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVj
dGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgIH0KKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KHJlc3VsdCk7CiB9CiAKIEpTUHJvbWlzZSogY29uc3RydWN0UHJvbWlzZShFeGVjU3RhdGUqIGV4
ZWMsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIEpTRnVuY3Rpb24qIHJlc29sdmVyKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90
b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90
b3R5cGUuY3BwCmluZGV4IGIyMjBiOTg3NTg4NWM0MmY5Y2U2MzhmMzIyMjQ3OTJjMzI3NjEwMTcu
LjgwNjdjYjIwZjBjMzdkNjZhNzc4YmU5ZDFlZjZhZmRiM2M2ZGU4MjggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAK
QEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYXBJdGVy
YXRvclByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiSlNNYXBJdGVyYXRvci5oIgpAQCAtNDYsNyArNDcsNyBAQCB2b2lkIE1hcEl0ZXJh
dG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QpCiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlzKTsKIAogICAg
IEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFt
ZSwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKLSAgICBK
U0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVO
YW1lLCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7CisgICAgSlND
X05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBNYXBJdGVyYXRvclByb3Rv
dHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NU
X0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IoQ2FsbEZyYW1lKiBjYWxsRnJh
bWUpCkBAIC01OSwxMiArNjAsMTIgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJ
dGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgIEpTTWFw
SXRlcmF0b3IqIGl0ZXJhdG9yID0ganNEeW5hbWljQ2FzdDxKU01hcEl0ZXJhdG9yKj4oY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CiAgICAgaWYgKCFpdGVyYXRvcikKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiQ2Fu
bm90IGNhbGwgTWFwSXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLU1hcEl0ZXJhdG9yIG9iamVjdCIp
KSk7Ci0gICAgCisKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAoaXRlcmF0b3ItPm5leHQo
Y2FsbEZyYW1lLCByZXN1bHQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHJlc3Vs
dCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVj
dChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKICAgICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnZtKCkuaXRlcmF0aW9uVGVybWlu
YXRvci5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0
T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOwogfQogCiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNw
cAppbmRleCA1NzNhY2ZhNWNkNzY0YjA5ZWU3NTQzYjM0N2I0OWE1MTExZTcwNTM3Li41MjYxYmYz
Y2FjYzFkNGUwZTQ1NzU1MWEwMjJkZTY3YzkxOTRkZmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCkBAIC0yNiw2
ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU2V0SXRlcmF0b3JQcm90
b3R5cGUuaCIKIAorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpT
Q0pTVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUg
IkpTU2V0SXRlcmF0b3IuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgdm9pZCBTZXRJdGVyYXRvclByb3Rv
dHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0
KQogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CiAKICAgICBKU0NfTkFU
SVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIFNldEl0
ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Ci0gICAgSlNDX05BVElW
RV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgU2V0
SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOworICAgIEpTQ19OQVRJVkVf
RlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5j
TmV4dCwgRG9udEVudW0sIDApOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIFNl
dEl0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAt
NjIsMTAgKzYzLDkgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBTZXRJdGVyYXRvclBy
b3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwgQVNDSUlMaXRlcmFsKCJDYW5u
b3QgY2FsbCBTZXRJdGVyYXRvci5uZXh0KCkgb24gYSBub24tU2V0SXRlcmF0b3Igb2JqZWN0Iikp
KTsKIAogICAgIGlmIChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCi0gICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkp
OwogICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNh
bGxGcmFtZS0+dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKTsKKyAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5l
ZCgpLCB0cnVlKSk7CiB9CiAKLQogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCmlu
ZGV4IDBmNzM1NDBmNDM1OTZhNzI0NmUyOTQyNDJiZTA1MmExZDQ1NjZkZjguLjRlNzI1OTlkOGQy
N2VmNWMzODc0ZmIxMjU2NzMwMjM5NDNjMTQxYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1ZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9WTS5jcHAKQEAgLTM5NiwxMCArMzk2LDYgQEAgc3RhdGljIFRodW5rR2VuZXJhdG9yIHRodW5r
R2VuZXJhdG9yRm9ySW50cmluc2ljKEludHJpbnNpYyBpbnRyaW5zaWMpCiAgICAgICAgIHJldHVy
biBsb2dUaHVua0dlbmVyYXRvcjsKICAgICBjYXNlIElNdWxJbnRyaW5zaWM6CiAgICAgICAgIHJl
dHVybiBpbXVsVGh1bmtHZW5lcmF0b3I7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdG9yTmV4dEtleUlu
dHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0S2V5VGh1bmtHZW5lcmF0
b3I7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdG9yTmV4dFZhbHVlSW50cmluc2ljOgotICAgICAgICBy
ZXR1cm4gYXJyYXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yOwogICAgIGRlZmF1bHQ6
CiAgICAgICAgIHJldHVybiAwOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3JzLW5leHQtd2l0aC1jYWxsLmpzIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4dC13aXRo
LWNhbGwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOWZkMDA5YmE1ZTgzYmFmOGI1ODVjY2ZkNDFlNjNmNWVlZTZh
Zjc5YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvYXJyYXktaXRlcmF0b3JzLW5leHQtd2l0aC1jYWxsLmpzCkBAIC0wLDAgKzEsMTEyIEBACisv
LyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiB0aGUgJUFycmF5SXRlcmF0b3JQcm90
b3R5cGUlLm5leHQgbWV0aG9kcyB3aXRoIGNhbGwuCisKK3ZhciBhcnJheSA9IFswLCAxLCAyLCAz
LCA0XTsKK3ZhciBhcnJheUl0ZXJhdG9yID0gYXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpOwordmFy
IGFycmF5SXRlcmF0b3JQcm90b3R5cGUgPSBhcnJheUl0ZXJhdG9yLl9fcHJvdG9fXzsKK3ZhciBh
cnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dCA9IGFycmF5SXRlcmF0b3JQcm90b3R5cGUubmV4dDsK
KworaWYgKGFycmF5SXRlcmF0b3IuaGFzT3duUHJvcGVydHkoJ25leHQnKSkKKyAgICB0aHJvdyAi
bmV4dCBtZXRob2Qgc2hvdWxkIGV4aXN0cyBvbiAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUiOwor
aWYgKCFhcnJheUl0ZXJhdG9yUHJvdG90eXBlLmhhc093blByb3BlcnR5KCduZXh0JykpCisgICAg
dGhyb3cgIm5leHQgbWV0aG9kIHNob3VsZCBleGlzdHMgb24gJUFycmF5SXRlcmF0b3JQcm90b3R5
cGUlIjsKKwordmFyIGFycmF5MSA9IFs0MiwgNDMsIDQxXTsKK3ZhciBhcnJheTFJdGVyYXRvciA9
IGFycmF5MVtTeW1ib2wuaXRlcmF0b3JdKCk7Cit2YXIgaW5kZXggPSAwOword2hpbGUgKHRydWUp
IHsKKyAgICB2YXIgcmVzdWx0ID0gYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQuY2FsbChhcnJh
eTFJdGVyYXRvcik7CisgICAgdmFyIHZhbHVlID0gcmVzdWx0LnZhbHVlOworICAgIGlmIChyZXN1
bHQuZG9uZSkgeworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKHZhbHVlICE9PSBhcnJh
eTFbaW5kZXgrK10pCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7
Cit9CitpZiAoaW5kZXggIT09IDMpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgaW5kZXg6ICIgKyBp
bmRleDsKKworZnVuY3Rpb24gaW5jcmVtZW50KGl0ZXIpIHsKKyAgICByZXR1cm4gYXJyYXlJdGVy
YXRvclByb3RvdHlwZU5leHQuY2FsbChpdGVyKTsKK30KK3ZhciBhcnJheTEgPSBbNDIsIDQzLCAt
MjBdOwordmFyIGFycmF5MiA9IFs0MiwgNDMsIC0yMF07Cit2YXIgYXJyYXkxSXRlcmF0b3IgPSBh
cnJheTFbU3ltYm9sLml0ZXJhdG9yXSgpOwordmFyIGFycmF5Mkl0ZXJhdG9yID0gYXJyYXkyW1N5
bWJvbC5pdGVyYXRvcl0oKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMzsgKytpKSB7CisgICAgdmFy
IHZhbHVlMSA9IGluY3JlbWVudChhcnJheTFJdGVyYXRvcikudmFsdWU7CisgICAgdmFyIHZhbHVl
MiA9IGluY3JlbWVudChhcnJheTJJdGVyYXRvcikudmFsdWU7CisgICAgaWYgKHZhbHVlMSAhPT0g
dmFsdWUyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlMSArICIg
IiArIHZhbHVlMjsKK30KKwordmFyIGFycmF5MSA9IFsgMCwgMSwgMiwgNCwgNSwgNiBdOwordmFy
IGFycmF5MUl0ZXJhdG9yID0gYXJyYXkxW1N5bWJvbC5pdGVyYXRvcl0oKTsKKwordmFyIHZhbHVl
ID0gYXJyYXkxSXRlcmF0b3IubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSAwKQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7Cit2YXIgdmFsdWUgPSBhcnJheTFJdGVy
YXRvci5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09IDEpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWU6ICIgKyB2YWx1ZTsKK3ZhciB2YWx1ZSA9IGFycmF5MUl0ZXJhdG9yLm5leHQoKS52
YWx1ZTsKK2lmICh2YWx1ZSAhPT0gMikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiAr
IHZhbHVlOwordmFyIHZhbHVlID0gYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQuY2FsbChhcnJh
eTFJdGVyYXRvcikudmFsdWU7CitpZiAodmFsdWUgIT09IDQpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWU6ICIgKyB2YWx1ZTsKK3ZhciB2YWx1ZSA9IGFycmF5SXRlcmF0b3JQcm90b3R5cGVO
ZXh0LmNhbGwoYXJyYXkxSXRlcmF0b3IpLnZhbHVlOworaWYgKHZhbHVlICE9PSA1KQorICAgIHRo
cm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7Cit2YXIgdmFsdWUgPSBhcnJheUl0ZXJh
dG9yUHJvdG90eXBlTmV4dC5jYWxsKGFycmF5MUl0ZXJhdG9yKS52YWx1ZTsKK2lmICh2YWx1ZSAh
PT0gNikKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOwordmFyIHZhbHVl
ID0gYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQuY2FsbChhcnJheTFJdGVyYXRvcikudmFsdWU7
CitpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTog
IiArIHZhbHVlOworCit2YXIgcHJpbWl0aXZlcyA9IFsKKyAgICAic3RyaW5nIiwKKyAgICA0MiwK
KyAgICAwLjAzLAorICAgIGZhbHNlLAorICAgIHRydWUsCisgICAgU3ltYm9sKCJDb2NvYSIpLAor
ICAgIG51bGwsCisgICAgdW5kZWZpbmVkCitdOworZm9yICh2YXIgcHJpbWl0aXZlIG9mIHByaW1p
dGl2ZXMpIHsKKyAgICB2YXIgZGlkVGhyb3cgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGFy
cmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LmNhbGwocHJpbWl0aXZlKTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIGRpZFRocm93ID0gZTsKKyAgICB9CisgICAgaWYgKCFkaWRUaHJvdykKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBubyBlcnJvciB0aHJvd24iOworICAgIGlmIChTdHJpbmcoZGlk
VGhyb3cpICE9PSAnVHlwZUVycm9yOiAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1
aXJlcyB0aGF0IHx0aGlzfCBiZSBPYmplY3QnKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBl
cnJvciB0aHJvd246ICIgKyBkaWRUaHJvdzsKK30KKwordmFyIG5vblJlbGF0ZWRPYmplY3RzID0g
WworICAgIHt9LAorICAgIFtdLAorICAgIG5ldyBEYXRlKCksCisgICAgbmV3IEVycm9yKCksCisg
ICAgT2JqZWN0KFN5bWJvbCgpKSwKKyAgICBuZXcgU3RyaW5nKCJDYXBwdWNjaW5vIiksCisgICAg
bmV3IE51bWJlcig0MiksCisgICAgbmV3IEJvb2xlYW4oZmFsc2UpLAorICAgIGZ1bmN0aW9uICgp
IHsgfSwKK107Citmb3IgKHZhciBvYmplY3Qgb2Ygbm9uUmVsYXRlZE9iamVjdHMpIHsKKyAgICB2
YXIgZGlkVGhyb3cgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGFycmF5SXRlcmF0b3JQcm90
b3R5cGVOZXh0LmNhbGwob2JqZWN0KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGRpZFRo
cm93ID0gZTsKKyAgICB9CisgICAgaWYgKCFkaWRUaHJvdykKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBubyBlcnJvciB0aHJvd24iOworICAgIGlmIChTdHJpbmcoZGlkVGhyb3cpICE9PSAnVHlwZUVy
cm9yOiAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1aXJlcyB0aGF0IHx0aGlzfCBi
ZSBBcnJheSBJdGVyYXRvciBJbnN0YW5jZScpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVy
cm9yIHRocm93bjogIiArIGRpZFRocm93OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4dC5qcyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3JzLW5leHQuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMzM0YzBlNGE5OWRkNjVkZTJiMjFlOTZlMjRkZjcxOGQ1OGNkOTc3YQotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3Jz
LW5leHQuanMKQEAgLTAsMCArMSw5MCBAQAorLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGUgYmVoYXZp
b3Igb2YgdGhlIGl0ZXJhdG9yLm5leHQgbWV0aG9kcyBvbiBBcnJheSBvYmplY3RzCisKK3ZhciB0
ZXN0QXJyYXkgPSBbMSwyLDMsNCw1LDZdCit2YXIga2V5cyA9IHRlc3RBcnJheS5rZXlzKCk7Cit2
YXIgaSA9IDA7Cit3aGlsZSAodHJ1ZSkgeworICAgIHZhciB7ZG9uZSwgdmFsdWU6IGtleX0gPSBr
ZXlzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAgaWYgKGtleSAh
PT0gaSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7CisgICAgaSsr
OworfQorCitpZiAodGVzdEFycmF5Lmxlbmd0aCAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJh
ZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGtleXMubmV4dCgpLnZhbHVlOworaWYgKHZh
bHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1
ZTsKKwordmFyIHZhbHVlcyA9IHRlc3RBcnJheVtTeW1ib2wuaXRlcmF0b3JdKCk7Cit2YXIgaSA9
IDA7Cit3aGlsZSAodHJ1ZSkgeworICAgIHZhciB7ZG9uZSwgdmFsdWV9ID0gdmFsdWVzLm5leHQo
KTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAgaSsrOworICAgIGlmICh2YWx1
ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK30K
KworaWYgKHRlc3RBcnJheS5sZW5ndGggIT09IGkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyBpOworCit2YXIgdmFsdWUgPSB2YWx1ZXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVl
ICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsK
KwordmFyIGVudHJpZXMgPSB0ZXN0QXJyYXkuZW50cmllcygpOwordmFyIGkgPSAwOworZG8gewor
ICAgIHZhciB7ZG9uZSwgdmFsdWU6IGVudHJ5fSA9IGVudHJpZXMubmV4dCgpOworICAgIGlmIChk
b25lKQorICAgICAgICBicmVhazsKKyAgICB2YXIgW2tleSwgdmFsdWVdID0gZW50cnk7CisgICAg
aWYgKHZhbHVlICE9PSB0ZXN0QXJyYXlba2V5XSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWU6ICIgKyB2YWx1ZSArICIgIiArIHRlc3RBcnJheVtrZXldOworICAgIGlmIChrZXkgIT09
IGkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsga2V5OworICAgIGkrKwor
ICAgIGlmICh2YWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIg
KyB2YWx1ZSArICIgIiArIGk7Cit9IHdoaWxlICghZG9uZSk7CisKK2lmICh0ZXN0QXJyYXkubGVu
Z3RoICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZh
bHVlID0gZW50cmllcy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworCit2YXIgZW50cmllcyA9IHRl
c3RBcnJheS5lbnRyaWVzKCk7Cit2YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1
ZTogZW50cnl9ID0gZW50cmllcy5uZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFr
OworICAgIHZhciBba2V5LCB2YWx1ZV0gPSBlbnRyeTsKKyAgICBpZiAodmFsdWUgIT09IHRlc3RB
cnJheVtrZXldKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlICsg
IiAiICsgdGVzdEFycmF5W2tleV07CisgICAgaWYgKGtleSAhPT0gaSkKKyAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7CisgICAgaSsrCisgICAgaWYgKGkgJSAyID09IDAp
CisgICAgICAgIHRlc3RBcnJheVtpXSAqPSAyOworICAgIGlmIChpIDwgNCkKKyAgICAgICAgdGVz
dEFycmF5LnB1c2godGVzdEFycmF5Lmxlbmd0aCkKKyAgICBpZiAoaSA9PSA0KQorICAgICAgICBk
ZWxldGUgdGVzdEFycmF5WzRdCisgICAgaWYgKGkgPT0gNSkKKyAgICAgICAgdGVzdEFycmF5WzRd
ID0gNQorfSB3aGlsZSAoIWRvbmUpOworCitpZiAodGVzdEFycmF5Lmxlbmd0aCAhPT0gaSkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMu
bmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvY3VzdG9tLWl0ZXJhdG9ycy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvY3VzdG9tLWl0ZXJhdG9ycy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZDY0MTNmZTNi
NWU5MDNhZmZlMzgwM2ZkMDA0YzBjYjFmMWM2NGYzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jdXN0b20taXRlcmF0b3JzLmpzCkBAIC0wLDAg
KzEsMzIyIEBACisvLyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiBjdXN0b20gaXRl
cmFibGUgb2JqZWN0cy4KKwordmFyIHJldHVybkNhbGxlZCA9IGZhbHNlOwordmFyIGl0ZXIgPSB7
CisgICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4g
eworICAgICAgICAgICAgZG9uZTogdGhpcy5fX2tleSA9PT0gNDIsCisgICAgICAgICAgICB2YWx1
ZTogdGhpcy5fX2tleSsrCisgICAgICAgIH07CisgICAgfSwKKyAgICBbU3ltYm9sLml0ZXJhdG9y
XTogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAgIHJldHVy
bjogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOworICAgIH0KK307
Cit2YXIgZXhwZWN0ZWQgPSAwOworZm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgIGlmICh2
YWx1ZSAhPT0gZXhwZWN0ZWQrKykKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIg
KyB2YWx1ZTsKK30KK2lmIChyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cgIkVycm9yOiByZXR1cm4g
aXMgY2FsbGVkLiI7CisKKworCit2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7Cit2YXIgaXRlciA9
IHsKKyAgICBfX2tleTogMCwKKyAgICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVy
biB7CisgICAgICAgICAgICBkb25lOiB0aGlzLl9fa2V5ID09PSA0MiwKKyAgICAgICAgICAgIHZh
bHVlOiB0aGlzLl9fa2V5KysKKyAgICAgICAgfTsKKyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0
b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisgICAgcmV0
dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgICAg
IHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0cnVlLAorICAgICAgICAgICAgdmFsdWU6IHVu
ZGVmaW5lZAorICAgICAgICB9OworICAgIH0KK307CisKK3RyeSB7CisgICAgZm9yICh2YXIgdmFs
dWUgb2YgaXRlcikgeworICAgICAgICB0aHJvdyAiRXJyb3I6IFRlcm1pbmF0ZSBpdGVyYXRpb24u
IjsKKyAgICB9Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAhPT0gIkVycm9yOiBU
ZXJtaW5hdGUgaXRlcmF0aW9uLiIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRo
cm93bjogIiArIGU7Cit9CitpZiAoIXJldHVybkNhbGxlZCkKKyAgICB0aHJvdyAiRXJyb3I6IHJl
dHVybiBpcyBub3QgY2FsbGVkLiI7CisKKworCit2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7Cit2
YXIgaXRlciA9IHsKKyAgICBfX2tleTogMCwKKyAgICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0aGlzLl9fa2V5ID09PSA0MiwKKyAgICAg
ICAgICAgIHZhbHVlOiB0aGlzLl9fa2V5KysKKyAgICAgICAgfTsKKyAgICB9LAorICAgIFtTeW1i
b2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0s
CisgICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0cnVlLAorICAgICAgICAgICAg
dmFsdWU6IHVuZGVmaW5lZAorICAgICAgICB9OworICAgIH0KK307CisKK2ZvciAodmFyIHZhbHVl
IG9mIGl0ZXIpIHsKKyAgICBicmVhazsKK30KK2lmICghcmV0dXJuQ2FsbGVkKQorICAgIHRocm93
ICJFcnJvcjogcmV0dXJuIGlzIG5vdCBjYWxsZWQuIjsKKworCisKK3ZhciByZXR1cm5DYWxsZWQg
PSBmYWxzZTsKK3ZhciBpdGVyID0geworICAgIF9fa2V5OiAwLAorICAgIGdldCBuZXh0KCkgewor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGxvb2tpbmcgdXAgbmV4dC4iOworICAgIH0sCisgICAgW1N5
bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAg
fSwKKyAgICByZXR1cm46IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1
ZTsKKyAgICB9Cit9OwordHJ5IHsKKyAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVyKSB7CisgICAg
ICAgIHRocm93ICJFcnJvcjogSXRlcmF0aW9uIHNob3VsZCBub3Qgb2NjdXIuIjsKKyAgICB9Cit9
IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAhPT0gIkVycm9yOiBsb29raW5nIHVwIG5l
eHQuIikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3duOiAiICsgZTsKK30K
K2lmIChyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cgIkVycm9yOiByZXR1cm4gaXMgY2FsbGVkLiI7
CisKKworCit2YXIgaXRlciA9IHsKKyAgICBfX2tleTogMCwKKyAgICBuZXh0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0aGlzLl9fa2V5ID09PSA0
MiwKKyAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9fa2V5KysKKyAgICAgICAgfTsKKyAgICB9LAor
ICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH0sCisgICAgZ2V0IHJldHVybigpIHsKKyAgICAgICAgdGhyb3cgIkVycm9yOiBsb29r
aW5nIHVwIHJldHVybi4iCisgICAgfQorfTsKK3RyeSB7CisgICAgZm9yICh2YXIgdmFsdWUgb2Yg
aXRlcikgeworICAgICAgICB0aHJvdyAiRXJyb3I6IFRlcm1pbmF0ZSBpdGVyYXRpb24uIjsKKyAg
ICB9Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAhPT0gIkVycm9yOiBsb29raW5n
IHVwIHJldHVybi4iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246ICIg
KyBlOworfQorCisKKwordmFyIHJldHVybkNhbGxlZCA9IGZhbHNlOwordmFyIGl0ZXIgPSB7Cisg
ICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICB0aHJvdyAiRXJy
b3I6IG5leHQgaXMgY2FsbGVkLiIKKyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisgICAgcmV0dXJuOiBmdW5j
dGlvbiAoKSB7CisgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB7
CisgICAgICAgICAgICBkb25lOiB0cnVlLAorICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZAor
ICAgICAgICB9OworICAgIH0KK307CisKK3RyeSB7CisgICAgZm9yICh2YXIgdmFsdWUgb2YgaXRl
cikgeworICAgICAgICB0aHJvdyAiRXJyb3I6IFRlcm1pbmF0ZSBpdGVyYXRpb24uIjsKKyAgICB9
Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAhPT0gIkVycm9yOiBuZXh0IGlzIGNh
bGxlZC4iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246ICIgKyBlOwor
fQoraWYgKHJldHVybkNhbGxlZCkKKyAgICB0aHJvdyAiRXJyb3I6IHJldHVybiBpcyBjYWxsZWQu
IjsKKworCisKK3ZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKK3ZhciBpdGVyID0geworICAgIF9f
a2V5OiAwLAorICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHsgZG9uZTog
ZmFsc2UsIHZhbHVlOiA0MiB9OworICAgIH0sCisgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICByZXR1cm46IGZ1bmN0
aW9uICgpIHsKKyAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiByZXR1cm4gaXMgY2FsbGVkLiI7CisgICAgfQorfTsKKwordHJ5IHsKKyAgICBmb3IgKHZh
ciB2YWx1ZSBvZiBpdGVyKSB7CisgICAgICAgIHRocm93ICJFcnJvcjogVGVybWluYXRlIGl0ZXJh
dGlvbi4iOworICAgIH0KK30gY2F0Y2ggKGUpIHsKKyAgICBpZiAoU3RyaW5nKGUpICE9PSAiRXJy
b3I6IFRlcm1pbmF0ZSBpdGVyYXRpb24uIikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJy
b3IgdGhyb3duOiAiICsgZTsKK30KK2lmICghcmV0dXJuQ2FsbGVkKQorICAgIHRocm93ICJFcnJv
cjogcmV0dXJuIGlzIG5vdCBjYWxsZWQuIjsKKworCit2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7
Cit2YXIgaXRlciA9IHsKKyAgICBfX2tleTogMCwKKyAgICBuZXh0OiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogNDIgfTsKKyAgICB9LAorICAgIFtT
eW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAg
IH0sCisgICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybkNhbGxlZCA9IHRy
dWU7CisgICAgICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIGNhbGxlZC4iOworICAgIH0KK307
Cit0cnkgeworICAgIGZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorfSBjYXRjaCAoZSkgeworICAgIGlmIChTdHJpbmcoZSkgIT09ICJFcnJvcjogcmV0dXJu
IGlzIGNhbGxlZC4iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246ICIg
KyBlOworfQoraWYgKCFyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cgIkVycm9yOiByZXR1cm4gaXMg
bm90IGNhbGxlZC4iOworCisKK3ZhciBwcmltaXRpdmVzID0gWworICAgIHVuZGVmaW5lZCwKKyAg
ICBudWxsLAorICAgIDQyLAorICAgICJzdHJpbmciLAorICAgIHRydWUsCisgICAgU3ltYm9sKCJD
b2NvYSIpCitdOworCitmdW5jdGlvbiBpdGVyYXRvckludGVyZmFjZUVycm9yVGVzdChub3RJdGVy
YXRvclJlc3VsdCkgeworICAgIHZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKKyAgICB2YXIgaXRl
ciA9IHsKKyAgICAgICAgX19rZXk6IDAsCisgICAgICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAg
ICAgICAgICAgIHJldHVybiBub3RJdGVyYXRvclJlc3VsdDsKKyAgICAgICAgfSwKKyAgICAgICAg
W1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiB0aGlz
OworICAgICAgICB9LAorICAgICAgICByZXR1cm46IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAg
IHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1cm4gdW5kZWZpbmVkOworICAg
ICAgICB9CisgICAgfTsKKyAgICB0cnkgeworICAgICAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVy
KSB7CisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IEl0ZXJhdGlvbiBzaG91bGQgbm90IG9jY3Vy
LiI7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGlmIChTdHJpbmcoZSkg
IT09ICJUeXBlRXJyb3I6IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVj
dC4iKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3duOiAiICsgZTsK
KyAgICB9CisgICAgaWYgKHJldHVybkNhbGxlZCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiByZXR1
cm4gaXMgY2FsbGVkLiI7Cit9CisKK2Z1bmN0aW9uIGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0
UmV0dXJuKG5vdEl0ZXJhdG9yUmVzdWx0KSB7CisgICAgdmFyIHJldHVybkNhbGxlZCA9IGZhbHNl
OworICAgIHZhciBpdGVyID0geworICAgICAgICBfX2tleTogMCwKKyAgICAgICAgbmV4dDogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiA0MiB9
OworICAgICAgICB9LAorICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgewor
ICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisgICAgICAgIHJldHVybjogZnVu
Y3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAg
IHJldHVybiBub3RJdGVyYXRvclJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisgICAgdHJ5IHsK
KyAgICAgICAgZm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBUZXJtaW5hdGUgaXRlcmF0aW9uLiI7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIGlmIChTdHJpbmcoZSkgIT09ICJFcnJvcjogVGVybWluYXRlIGl0ZXJhdGlvbi4i
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3duOiAiICsgZTsKKyAg
ICB9CisgICAgaWYgKCFyZXR1cm5DYWxsZWQpCisgICAgICAgIHRocm93ICJFcnJvcjogcmV0dXJu
IGlzIG5vdCBjYWxsZWQuIjsKK30KKworcHJpbWl0aXZlcy5mb3JFYWNoKGl0ZXJhdG9ySW50ZXJm
YWNlRXJyb3JUZXN0KTsKK3ByaW1pdGl2ZXMuZm9yRWFjaChpdGVyYXRvckludGVyZmFjZUVycm9y
VGVzdFJldHVybik7CisKKworZnVuY3Rpb24gaXRlcmF0b3JJbnRlcmZhY2VCcmVha1Rlc3RSZXR1
cm4obm90SXRlcmF0b3JSZXN1bHQpIHsKKyAgICB2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7Cisg
ICAgdmFyIGl0ZXIgPSB7CisgICAgICAgIF9fa2V5OiAwLAorICAgICAgICBuZXh0OiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IDQyIH07Cisg
ICAgICAgIH0sCisgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAg
ICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKyAgICAgICAgcmV0dXJuOiBmdW5jdGlv
biAoKSB7CisgICAgICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0
dXJuIG5vdEl0ZXJhdG9yUmVzdWx0OworICAgICAgICB9CisgICAgfTsKKyAgICB0cnkgeworICAg
ICAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVyKSB7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKFN0cmluZyhlKSAhPT0gIlR5cGVF
cnJvcjogSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246ICIgKyBlOworICAgIH0KKyAg
ICBpZiAoIXJldHVybkNhbGxlZCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiByZXR1cm4gaXMgbm90
IGNhbGxlZC4iOworfQorCitwcmltaXRpdmVzLmZvckVhY2goaXRlcmF0b3JJbnRlcmZhY2VCcmVh
a1Rlc3RSZXR1cm4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9pdGVyYXRvcnMtc2hhcGUuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2l0ZXJhdG9ycy1zaGFwZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWE1Nzk5OGY2MjdjNWEzYWM4MWRj
NGMzOGQwOGRiYmRlZDJmMzZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9pdGVyYXRvcnMtc2hhcGUuanMKQEAgLTAsMCArMSw1MCBAQAorLy8g
VGhpcyB0ZXN0IGNoZWNrcyB0aGUgc2hhcGUgb2YgYnVpbHRpbiBpdGVyYXRvcnMuCisKK3ZhciBh
cnJheSA9IFsnQ29jb2EnLCAnQ2FwcHVjY2lubycsICdUaGUgZGVzIEFsaXplcycsICdNYXRjaGEn
LCAnS2lsaW1hbmphcm8nXTsKKworZnVuY3Rpb24gaXRlcmF0b3JTaGFwZShpdGVyKSB7CisgICAg
aWYgKGl0ZXIuaGFzT3duUHJvcGVydHkoJ25leHQnKSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBp
dGVyYXRvciBzaG91bGQgbm90IGhhdmUgbmV4dCBtZXRob2QuIjsKKyAgICBpZiAoIWl0ZXIuX19w
cm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykpCisgICAgICAgIHRocm93ICJFcnJvcjogaXRl
cmF0b3IgcHJvdG90eXBlIHNob3VsZCBoYXZlIG5leHQgbWV0aG9kLiI7CisgICAgaWYgKHR5cGVv
ZiBpdGVyLl9fcHJvdG9fXy5uZXh0ICE9PSAiZnVuY3Rpb24iKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGl0ZXJhdG9yIHByb3RvdHlwZSBzaG91bGQgaGF2ZSBuZXh0IG1ldGhvZC4iOworfQorCit2
YXIgdmFsdWVJdGVyYXRvciA9IGFycmF5W1N5bWJvbC5pdGVyYXRvcl0oKTsKK2l0ZXJhdG9yU2hh
cGUodmFsdWVJdGVyYXRvcik7CisKK3ZhciBrZXlJdGVyYXRvciA9IGFycmF5LmtleXMoKTsKK2l0
ZXJhdG9yU2hhcGUoa2V5SXRlcmF0b3IpOworCit2YXIga2V5VmFsdWVJdGVyYXRvciA9IGFycmF5
LmVudHJpZXMoKTsKK2l0ZXJhdG9yU2hhcGUoa2V5VmFsdWVJdGVyYXRvcik7CisKK3ZhciBzZXQg
PSBuZXcgU2V0KFsnQ29jb2EnLCAnQ2FwcHVjY2lubycsICdUaGUgZGVzIEFsaXplcycsICdNYXRj
aGEnLCAnS2lsaW1hbmphcm8nXSk7Cit2YXIgdmFsdWVJdGVyYXRvciA9IHNldFtTeW1ib2wuaXRl
cmF0b3JdKCk7CitpdGVyYXRvclNoYXBlKHZhbHVlSXRlcmF0b3IpOworCit2YXIga2V5SXRlcmF0
b3IgPSBzZXQua2V5cygpOworaXRlcmF0b3JTaGFwZShrZXlJdGVyYXRvcik7CisKK3ZhciBrZXlW
YWx1ZUl0ZXJhdG9yID0gc2V0LmVudHJpZXMoKTsKK2l0ZXJhdG9yU2hhcGUoa2V5VmFsdWVJdGVy
YXRvcik7CisKK3ZhciBtYXAgPSBuZXcgTWFwKCk7CitbCisgICAgWyAnQ29jb2EnLCAyLCBdLAor
ICAgIFsgJ0NhcHB1Y2Npbm8nLCAwIF0sCisgICAgWyAnVGhlIGRlcyBBbGl6ZXMnLCAzIF0sCisg
ICAgWyAnTWF0Y2hhJywgMiBdLAorICAgIFsgJ0tpbGltYW5qYXJvJywgMV0KK10uZm9yRWFjaChm
dW5jdGlvbiAoWyBrZXksIHZhbHVlIF0pIHsKKyAgICBtYXAuc2V0KGtleSwgdmFsdWUpOworfSk7
Cit2YXIgdmFsdWVJdGVyYXRvciA9IG1hcFtTeW1ib2wuaXRlcmF0b3JdKCk7CitpdGVyYXRvclNo
YXBlKHZhbHVlSXRlcmF0b3IpOworCit2YXIga2V5SXRlcmF0b3IgPSBtYXAua2V5cygpOworaXRl
cmF0b3JTaGFwZShrZXlJdGVyYXRvcik7CisKK3ZhciBrZXlWYWx1ZUl0ZXJhdG9yID0gbWFwLmVu
dHJpZXMoKTsKK2l0ZXJhdG9yU2hhcGUoa2V5VmFsdWVJdGVyYXRvcik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hcC1pdGVyYXRvcnMtbmV4dC5qcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWFwLWl0ZXJhdG9ycy1uZXh0Lmpz
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjUzMjllYWUxNzMzMjFhNTRiOTFjNWVlZDVmYTZmNjQzNTFhOTU5YTEKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hcC1p
dGVyYXRvcnMtbmV4dC5qcwpAQCAtMCwwICsxLDExMyBAQAorLy8gVGhpcyB0ZXN0IGNoZWNrcyB0
aGUgYmVoYXZpb3Igb2YgdGhlIGl0ZXJhdG9yLm5leHQgbWV0aG9kcyBvbiBNYXAgb2JqZWN0cwor
Cit2YXIgdGVzdEFycmF5ID0gWzEsMiwzLDQsNSw2XQordmFyIHRlc3RNYXAgPSBuZXcgTWFwKCk7
Citmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2YgdGVzdEFycmF5LmVudHJpZXMoKSkgeworICAgIHRl
c3RNYXAuc2V0KGtleSwgdmFsdWUpOworfQordmFyIGtleXMgPSB0ZXN0TWFwLmtleXMoKTsKK3Zh
ciBpID0gMDsKK3doaWxlICh0cnVlKSB7CisgICAgdmFyIHtkb25lLCB2YWx1ZToga2V5fSA9IGtl
eXMubmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAgICBicmVhazsKKyAgICBpZiAoa2V5ID49
IHRlc3RBcnJheS5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsg
a2V5OworICAgIGkrKzsKK30KKworaWYgKHRlc3RNYXAuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGtleXMubmV4dCgpLnZhbHVl
OworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6
ICIgKyB2YWx1ZTsKKworLy8gVE9ETzogTWFwLnByb3RvdHlwZS52YWx1ZXMoKSBpcyBub3QgZXhw
b3NlZC4KKy8vCisvLyB2YXIgdmFsdWVzID0gdGVzdE1hcC52YWx1ZXMoKTsKKy8vIHZhciBpID0g
MDsKKy8vIHdoaWxlICh0cnVlKSB7CisvLyAgICAgdmFyIHtkb25lLCB2YWx1ZX0gPSB2YWx1ZXMu
bmV4dCgpOworLy8gICAgIGlmIChkb25lKQorLy8gICAgICAgICBicmVhazsKKy8vICAgICBpKys7
CisvLyAgICAgaWYgKHRlc3RBcnJheS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpCisvLyAgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisvLyB9CisvLworLy8gaWYgKHRl
c3RNYXAuc2l6ZSAhPT0gaSkKKy8vICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7
CisvLworLy8gdmFyIHZhbHVlID0gdmFsdWVzLm5leHQoKS52YWx1ZTsKKy8vIGlmICh2YWx1ZSAh
PT0gdW5kZWZpbmVkKQorLy8gICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7
CisKK3ZhciBlbnRyaWVzID0gdGVzdE1hcC5lbnRyaWVzKCk7Cit2YXIgaSA9IDA7CitkbyB7Cisg
ICAgdmFyIHtkb25lLCB2YWx1ZTogZW50cnl9ID0gZW50cmllcy5uZXh0KCk7CisgICAgaWYgKGRv
bmUpCisgICAgICAgIGJyZWFrOworICAgIHZhciBba2V5LCB2YWx1ZV0gPSBlbnRyeTsKKyAgICBp
ZiAodmFsdWUgIT09IHRlc3RNYXAuZ2V0KGtleSkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlOiAiICsgdmFsdWUgKyAiICIgKyB0ZXN0TWFwLmdldChrZXkpOworICAgIGlmIChrZXkg
Pj0gdGVzdEFycmF5Lmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIg
KyBrZXk7CisgICAgaSsrOworICAgIGlmICh0ZXN0QXJyYXkuaW5kZXhPZih2YWx1ZSkgPT09IC0x
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlICsgIiAiICsgaTsK
K30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RNYXAuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZh
bHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyB2YWx1ZTsKKwordmFyIGVudHJpZXMgPSB0ZXN0TWFwLmVudHJpZXMoKTsKK3ZhciBp
ID0gMDsKK2RvIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBlbnRyeX0gPSBlbnRyaWVzLm5leHQo
KTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAgdmFyIFtrZXksIHZhbHVlXSA9
IGVudHJ5OworICAgIGlmICh2YWx1ZSAhPT0gdGVzdE1hcC5nZXQoa2V5KSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZSArICIgIiArIHRlc3RNYXAuZ2V0KGtleSk7
CisgICAgaSsrOworICAgIGlmIChpICUgNCA9PT0gMCkKKyAgICAgICAgdGVzdE1hcC5zZXQoMTAw
MDAwICsgaSwgaSk7Cit9IHdoaWxlICghZG9uZSk7CisKK2lmICh0ZXN0TWFwLnNpemUgIT09IGkp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOworCit2YXIgdmFsdWUgPSBlbnRy
aWVzLm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAgIHRocm93ICJF
cnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisKK2Z1bmN0aW9uIG90aGVyS2V5KGtleSkgewor
ICAgIHJldHVybiAoa2V5ICsgMSkgJSB0ZXN0QXJyYXkubGVuZ3RoOworfQorCit2YXIgZW50cmll
cyA9IHRlc3RNYXAuZW50cmllcygpOwordmFyIGkgPSAwOworZG8geworICAgIHZhciB7ZG9uZSwg
dmFsdWU6IGVudHJ5fSA9IGVudHJpZXMubmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAgICBi
cmVhazsKKyAgICB2YXIgW2tleSwgdmFsdWVdID0gZW50cnk7CisgICAgaWYgKHZhbHVlICE9PSB0
ZXN0TWFwLmdldChrZXkpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZh
bHVlICsgIiAiICsgdGVzdE1hcC5nZXQoa2V5KTsKKyAgICBpKys7CisgICAgaWYgKGkgJSA0ID09
PSAwKQorICAgICAgICB0ZXN0TWFwLmRlbGV0ZShvdGhlcktleShrZXkpKTsKK30gd2hpbGUgKCFk
b25lKTsKKworaWYgKHRlc3RNYXAuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZh
bHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2V0LWl0
ZXJhdG9ycy1uZXh0LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zZXQt
aXRlcmF0b3JzLW5leHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcxZGM3ZTQyMTgxZGE5MjFmZTQ3NTEyODY0
MGM0MDk1MGM0Mjk0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3Mvc2V0LWl0ZXJhdG9ycy1uZXh0LmpzCkBAIC0wLDAgKzEsMTE3IEBACisvLyBU
aGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiB0aGUgaXRlcmF0b3IubmV4dCBtZXRob2Rz
IG9uIFNldCBvYmplY3RzCisKK3ZhciB0ZXN0QXJyYXkgPSBbMSwyLDMsNCw1LDZdCit2YXIgdGVz
dFNldCA9IG5ldyBTZXQoKTsKK2ZvciAodmFyIFtrZXksIHZhbHVlXSBvZiB0ZXN0QXJyYXkuZW50
cmllcygpKSB7CisgICAgdGVzdFNldC5hZGQodmFsdWUpOworfQordmFyIGtleXMgPSB0ZXN0U2V0
LmtleXMoKTsKK3ZhciBpID0gMDsKK3doaWxlICh0cnVlKSB7CisgICAgdmFyIHtkb25lLCB2YWx1
ZToga2V5fSA9IGtleXMubmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAgICBicmVhazsKKyAg
ICBpZiAodGVzdEFycmF5LmluZGV4T2Yoa2V5KSA9PT0gLTEpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlOiAiICsga2V5OworICAgIGkrKzsKK30KKworaWYgKHRlc3RTZXQuc2l6ZSAh
PT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9
IGtleXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKworLy8gVE9ETzogU2V0LnByb3RvdHlwZS52
YWx1ZXMoKSBpcyBub3QgZXhwb3NlZC4KKy8vCisvLyB2YXIgdmFsdWVzID0gdGVzdFNldC52YWx1
ZXMoKTsKKy8vIHZhciBpID0gMDsKKy8vIHdoaWxlICh0cnVlKSB7CisvLyAgICAgdmFyIHtkb25l
LCB2YWx1ZX0gPSB2YWx1ZXMubmV4dCgpOworLy8gICAgIGlmIChkb25lKQorLy8gICAgICAgICBi
cmVhazsKKy8vICAgICBpKys7CisvLyAgICAgaWYgKHRlc3RBcnJheS5pbmRleE9mKHZhbHVlKSA9
PT0gLTEpCisvLyAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7Cisv
LyB9CisvLworLy8gaWYgKHRlc3RTZXQuc2l6ZSAhPT0gaSkKKy8vICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZTogIiArIGk7CisvLworLy8gdmFyIHZhbHVlID0gdmFsdWVzLm5leHQoKS52YWx1
ZTsKKy8vIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorLy8gICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlOiAiICsgdmFsdWU7CisKK3ZhciBlbnRyaWVzID0gdGVzdFNldC5lbnRyaWVzKCk7Cit2
YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1ZTogZW50cnl9ID0gZW50cmllcy5u
ZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIHZhciBba2V5LCB2YWx1
ZV0gPSBlbnRyeTsKKyAgICBpZiAoa2V5ICE9PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWU6ICIgKyBrZXkgKyAiICIgKyB2YWx1ZTsKKyAgICBpZiAoIXRlc3RTZXQuaGFz
KHZhbHVlKSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKyAg
ICBpZiAoIXRlc3RTZXQuaGFzKGtleSkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
OiAiICsga2V5OworICAgIGkrKzsKKyAgICBpZiAodGVzdEFycmF5LmluZGV4T2YodmFsdWUpID09
PSAtMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZSArICIgIiAr
IGk7Cit9IHdoaWxlICghZG9uZSk7CisKK2lmICh0ZXN0U2V0LnNpemUgIT09IGkpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOworCit2YXIgdmFsdWUgPSBlbnRyaWVzLm5leHQo
KS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlOiAiICsgdmFsdWU7CisKK3ZhciBlbnRyaWVzID0gdGVzdFNldC5lbnRyaWVzKCk7Cit2
YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1ZTogZW50cnl9ID0gZW50cmllcy5u
ZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIHZhciBba2V5LCB2YWx1
ZV0gPSBlbnRyeTsKKyAgICBpZiAoa2V5ICE9PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgdmFsdWU6ICIgKyBrZXkgKyAiICIgKyB2YWx1ZTsKKyAgICBpZiAoIXRlc3RTZXQuaGFz
KGtleSkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisgICAg
aSsrOworICAgIGlmIChpICUgNCA9PT0gMCkKKyAgICAgICAgdGVzdFNldC5hZGQoMTAwMDAwICsg
aSk7Cit9IHdoaWxlICghZG9uZSk7CisKK2lmICh0ZXN0U2V0LnNpemUgIT09IGkpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOworCit2YXIgdmFsdWUgPSBlbnRyaWVzLm5leHQo
KS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlOiAiICsgdmFsdWU7CisKK2Z1bmN0aW9uIG90aGVyS2V5KGtleSkgeworICAgIHJldHVy
biAoa2V5ICsgMSkgJSB0ZXN0QXJyYXkubGVuZ3RoOworfQorCit2YXIgZW50cmllcyA9IHRlc3RT
ZXQuZW50cmllcygpOwordmFyIGkgPSAwOworZG8geworICAgIHZhciB7ZG9uZSwgdmFsdWU6IGVu
dHJ5fSA9IGVudHJpZXMubmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAgICBicmVhazsKKyAg
ICB2YXIgW2tleSwgdmFsdWVdID0gZW50cnk7CisgICAgaWYgKCF0ZXN0U2V0LmhhcyhrZXkpKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlICsgIiAiICsgdGVzdFNl
dC5nZXQoa2V5KTsKKyAgICBpKys7CisgICAgaWYgKGkgJSA0ID09PSAwKQorICAgICAgICB0ZXN0
U2V0LmRlbGV0ZShvdGhlcktleShrZXkpKTsKK30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RT
ZXQuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3Zh
ciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247722</attachid>
            <date>2015-03-02 17:01:51 -0800</date>
            <delta_ts>2015-03-02 21:17:33 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141351-20150303100133.patch</filename>
            <type>text/plain</type>
            <size>101349</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MWVkNmFkM2I4MWNhZjEyNWNmOTlhMDZiNDU5ZTcwNTc0NWI1ZGJiLi45MWFjY2U1ZDI1OWE0ZWE2
YTRhNGEyMTE2MzNmMTUzYjNhNzMxMmIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDQgQEAKKzIwMTUtMDMtMDIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgVXBncmFkZSBFUzYgSXRlcmF0b3IgaW50ZXJmYWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1cGdy
YWRlcyB0aGUgZXhpc2luZyBFUzYgaXRlcmF0b3IgdG8gYWxpZ24gdGhlIGxhdGVzdCBzcGVjLgor
ICAgICAgICBJbiB0aGUgbGF0ZXN0IHNwZWMsCisgICAgICAgIDEuIGBJdGVyYXRvci5uZXh0YCBy
ZXR1cm5zIG9iamVjdCB0aGF0IGltcGxlbWVudHMgSXRlcmF0b3JSZXN1bHQgaW50ZXJmYWNlIHsg
dmFsdWU6IHZhbHVlLCBkb25lLCBib29sZWFuIH0uCisgICAgICAgIDIuIGBJdGVyYXRvci5yZXR1
cm5gIGlzIGludHJvZHVjZWQuIFdoZW4gdGhlIGl0ZXJhdGlvbiBpcyB0ZXJtaW5hdGVkIGJ5IHRo
ZSBhYnJ1cHQgY29tcGxldGlvbiwKKyAgICAgICAgaXQgaXMgY2FsbGVkIHRvIGNsb3NlIGl0ZXJh
dG9yIHN0YXRlLgorICAgICAgICAzLiBJdGVyYXRvci5uZXh0IG9mIEFycmF5IGlzIG1vdmVkIGZy
b20gYW4gaXRlcmF0b3Igb2JqZWN0IHRvIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVgLgorCisg
ICAgICAgIFRvIHVwZ3JhZGUgaXQsIHdlIGNoYW5nZXMgdGhlIGJ5dGVjb2RlIHRoYXQgcmVwcmVz
ZW50cyBmb3Itb2YgbG9vcHMuCisgICAgICAgIEFuZCB0byBlbWJvZHkgdGhlIGVmZmljaWVudCBp
dGVyYXRpb24gd2l0aCBhbiBpdGVyYXRvciBvYmplY3QsCisgICAgICAgIHdlIGltcGxlbWVudGVk
ICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IGluIEphdmFTY3JpcHQgYW5kCisgICAgICAg
IGl0IGlzIGxvY2F0ZWQgaW4gYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMuCisg
ICAgICAgIEltcGxlbWVudGluZyBpdCBpbiBKYXZhU2NyaXB0IGVuY291cmFnZXMgaW5saW5pbmcg
YW5kCisgICAgICAgIHV0aWxpemVzIGVzY2FwZSBhbmFseXNpcyBmb3IgYW4gaXRlcmF0b3IgcmVz
dWx0IG9iamVjdCBpbiBERkcgSklULgorICAgICAgICBBbmQgd2UgZHJvcHBlZCB0aGUgaW50cmlu
c2ljIHZlcnNpb24gb2YgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQuCisKKyAgICAgICAg
QW5kIHdlIGludHJvZHVjZWQgSXRlcmF0b3JPcGVyYXRpb25zIHRoYXQgaXMgZGVmaW5lZCBpbiB0
aGUgc3BlYy4KKyAgICAgICAgSXQgYWxpZ25zIHRoZSBpdGVyYXRpb24gaW4gdGhlIHJ1bnRpbWUg
dG8gdGhlIGxhdGVzdCBzcGVjLgorICAgICAgICBDdXJyZW50bHksIFByb21pc2UuYWxsIGFuZCBQ
cm9taXNlLnJhY2UgdXNlcyBhbiBpdGVyYWJsZSBvYmplY3QuCisgICAgICAgIEhvd2V2ZXIsIFBy
b21pc2UuYWxsIGFuZCBQcm9taXNlLnJhY2UgaW1wbGVtZW50YXRpb24gaXMgYWxzbyBiYXNlZCBv
biB0aGUgb2xkIHNwZWMuCisgICAgICAgIFN1YnNlcXVlbnQgcGF0Y2hlcyB3aWxsIHVwZ3JhZGUg
aXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90eXBl
LmpzOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJh
dG9yUHJvdG90eXBlLmguCisgICAgICAgIChuZXh0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJldHVybik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dU
eXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0
aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNVbmRlZmluZWQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXlUaHVu
a0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFs
dWVUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjphcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OmFycmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRvcik6CisgICAgICAgIChKU0M6OmFycmF5
SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5SXRlcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmg6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50aW1l
L0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjppdGVyYXRvck5l
eHQpOgorICAgICAgICAoSlNDOjppdGVyYXRvclZhbHVlKToKKyAgICAgICAgKEpTQzo6aXRlcmF0
b3JDb21wbGV0ZSk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yU3RlcCk6CisgICAgICAgIChKU0M6
Oml0ZXJhdG9yQ2xvc2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcC4KKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyYXRv
clJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6YXJyYXlJdGVyYXRvck5leHRHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXlJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6OkpTQXJy
YXlJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6aXRlcmF0aW9uS2lu
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6aXRlcmF0ZWRPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6Om5leHRJbmRleCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6c2V0TmV4dEluZGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpmaW5pc2gpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0aW9uS2luZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRl
ZE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0
T2ZOZXh0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm9t
aXNlUmFjZUxvb3ApOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNl
KToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb21pc2VBbGwpOgorICAgICAgICAoSlNDOjpKU1By
b21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToK
KyAgICAgICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
U2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgIChKU0M6OnRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKToKKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3JzLW5leHQtd2l0aC1jYWxsLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGluY3JlbWVudCk6CisgICAgICAgIChmb3IpOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9hcnJheS1pdGVyYXRvcnMtbmV4dC5qczogQWRkZWQuCisKKyAgICAgICAgUmV2aXZlIHRoZSBv
bGRlciBBcnJheSBpdGVyYXRvciB0ZXN0cyB0aGF0IG1hbnVhbGx5IGNhbGwgJ25leHQnIG1ldGhv
ZC4KKworICAgICAgICAqIHRlc3RzL3N0cmVzcy9jdXN0b20taXRlcmF0b3JzLmpzOiBBZGRlZC4K
KyAgICAgICAgKGl0ZXIubmV4dCk6CisgICAgICAgIChpdGVyLlN5bWJvbC5pdGVyYXRvcik6Cisg
ICAgICAgIChpdGVyLnJldHVybik6CisgICAgICAgIChpdGVyLmdldCBuZXh0KToKKyAgICAgICAg
KGl0ZXIuZ2V0IHJldHVybik6CisgICAgICAgIChpdGVyYXRvckludGVyZmFjZUVycm9yVGVzdC5p
dGVyLm5leHQpOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuaXRlci5TeW1i
b2wuaXRlcmF0b3IpOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuaXRlci5y
ZXR1cm4pOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QpOgorICAgICAgICAo
aXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3RSZXR1cm4uaXRlci5uZXh0KToKKyAgICAgICAgKGl0
ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuLml0ZXIuU3ltYm9sLml0ZXJhdG9yKToKKyAg
ICAgICAgKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuLml0ZXIucmV0dXJuKToKKyAg
ICAgICAgKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuKToKKyAgICAgICAgKGl0ZXJh
dG9ySW50ZXJmYWNlQnJlYWtUZXN0UmV0dXJuLml0ZXIubmV4dCk6CisgICAgICAgIChpdGVyYXRv
ckludGVyZmFjZUJyZWFrVGVzdFJldHVybi5pdGVyLlN5bWJvbC5pdGVyYXRvcik6CisgICAgICAg
IChpdGVyYXRvckludGVyZmFjZUJyZWFrVGVzdFJldHVybi5pdGVyLnJldHVybik6CisgICAgICAg
IChpdGVyYXRvckludGVyZmFjZUJyZWFrVGVzdFJldHVybik6CisKKyAgICAgICAgVGhpcyB0ZXN0
cyB0aGUgYmVoYXZpb3Igb2YgY3VzdG9tIGl0ZXJhdG9ycy4KKyAgICAgICAgJ25leHQnIGFuZCAn
cmV0dXJuJyBvZiBpdGVyYXRvciB3b3JrIHdpdGggZm9yLW9mLgorCisgICAgICAgICogdGVzdHMv
c3RyZXNzL2l0ZXJhdG9ycy1zaGFwZS5qczogQWRkZWQuCisgICAgICAgIChpdGVyYXRvclNoYXBl
KToKKyAgICAgICAgKGtleVZhbHVlSXRlcmF0b3Iuc2V0IGVudHJpZXMpOgorCisgICAgICAgIFRo
aXMgdGVzdHMgdGhlIHNoYXBlIG9mIGl0ZXJhdG9yczsgaXRlcmF0b3JzIG9mIEFycmF5IGhhdmUg
J25leHQnIG1ldGhvZCBpbiAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUuCisKKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvbWFwLWl0ZXJhdG9ycy1uZXh0LmpzOiBBZGRlZC4KKyAgICAgICAgKHNldCB2
YXIpOgorICAgICAgICAoLmdldCBpZik6CisgICAgICAgIChvdGhlcktleSk6CisgICAgICAgICog
dGVzdHMvc3RyZXNzL3NldC1pdGVyYXRvcnMtbmV4dC5qczogQWRkZWQuCisgICAgICAgIChvdGhl
cktleSk6CisKIDIwMTUtMDMtMDIgIE1hcmsgTGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAg
ICAgICAgIEV4Y2VwdGlvbiBzdGFjayB1bndpbmRpbmcgaW4gSlNDIGhhbmdzIHdoaWxlIHRoZSBU
aW1lbGluZSBQcm9maWxlciBpcyBlbmFibGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMu
dHh0CmluZGV4IGY5Y2JkZGNjZmZmZWFhMzAwMjE0OTBhYTFmNzk5YjU2NGUyMDFhZDQuLmU3NTRj
NmVhNjIzYTlkODg5MjIyYjUxODZiN2E2OTc3ZDEyMjQ3ZWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Q01ha2VMaXN0cy50eHQKQEAgLTQzOCw3ICs0MzgsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVO
VElNRV9TT1VSQ0VTCiAgICAgcnVudGltZS9FcnJvckluc3RhbmNlLmNwcAogICAgIHJ1bnRpbWUv
RXJyb3JQcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9FeGNlcHRpb25GdXp6LmNwcAotICAgIHJ1
bnRpbWUvRXhjZXB0aW9uSGVscGVycy5jcHAgCisgICAgcnVudGltZS9FeGNlcHRpb25IZWxwZXJz
LmNwcAogICAgIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHAKICAgICBydW50aW1lL0Z1bmN0aW9uQ29u
c3RydWN0b3IuY3BwCiAgICAgcnVudGltZS9GdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcApAQCAt
NDUwLDYgKzQ1MCw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9SVU5USU1FX1NPVVJDRVMKICAgICBy
dW50aW1lL0luaXRpYWxpemVUaHJlYWRpbmcuY3BwCiAgICAgcnVudGltZS9JbnRlbmRlZFN0cnVj
dHVyZUNoYWluLmNwcAogICAgIHJ1bnRpbWUvSW50ZXJuYWxGdW5jdGlvbi5jcHAKKyAgICBydW50
aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAKICAgICBydW50aW1lL0pTQVBJVmFsdWVXcmFwcGVy
LmNwcAogICAgIHJ1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCiAgICAgcnVudGltZS9K
U0FyZ3VtZW50c0l0ZXJhdG9yLmNwcApAQCAtNTc5LDYgKzU4MCw3IEBAIGxpc3QoQVBQRU5EIEph
dmFTY3JpcHRDb3JlX1NPVVJDRVMKIAogc2V0KEphdmFTY3JpcHRDb3JlX0xVVF9GSUxFUwogICAg
IHJ1bnRpbWUvQXJyYXlDb25zdHJ1Y3Rvci5jcHAKKyAgICBydW50aW1lL0FycmF5SXRlcmF0b3JQ
cm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9BcnJheVByb3RvdHlwZS5jcHAKICAgICBydW50aW1l
L0Jvb2xlYW5Qcm90b3R5cGUuY3BwCiAgICAgcnVudGltZS9EYXRlQ29uc3RydWN0b3IuY3BwCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5tYWtlCmluZGV4IDRhMjYyM2VmNWM5
Yzc1NmQ1ZGE1NDdmMWQzZDY1Y2VhOWExNzY5NWEuLjRkYjA5YmQ0NzcyYjRkMWM5ZjBjNjFjMDJh
ZTZkMzk1YjY1NDFlN2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVk
U291cmNlcy5tYWtlCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9EZXJpdmVkU291cmNlcy5t
YWtlCkBAIC0zNiw2ICszNiw3IEBAIFZQQVRIID0gXAogLlBIT05ZIDogYWxsCiBhbGwgOiBcCiAg
ICAgQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCBcCisgICAgQXJyYXlJdGVyYXRvclByb3RvdHlwZS5s
dXQuaCBcCiAgICAgQXJyYXlQcm90b3R5cGUubHV0LmggXAogICAgIEJvb2xlYW5Qcm90b3R5cGUu
bHV0LmggXAogICAgIERhdGVDb25zdHJ1Y3Rvci5sdXQuaCBcCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNj
cmlwdENvcmUudmN4cHJvagppbmRleCA4MzEwNzBjYzI2ZDMxMTZiMjBlM2Q4OGM5MjMzZTM3OThk
ZGZmNjkxLi5kMjdjM2ZkYjg4NTEyMjM5NzdkNTYzMGVhYjdmNmUwOTY0MTRjOGY2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKQEAgLTcxOCw2ICs3MTgsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbml0aWFsaXplVGhyZWFkaW5nLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVybmFs
RnVuY3Rpb24uY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJdGVy
YXRvck9wZXJhdGlvbnMuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGlt
ZVxKU0FQSVZhbHVlV3JhcHBlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxy
dW50aW1lXEpTTGV4aWNhbEVudmlyb25tZW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1bWVudHNJdGVyYXRvci5jcHAiIC8+CkBAIC04NTQsNiArODU1
LDcgQEAKICAgPC9JdGVtR3JvdXA+CiAgIDxJdGVtR3JvdXA+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlc
JChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNcQXJyYXlDb25zdHJ1Y3Rvci5sdXQuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBs
YXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xBcnJheUl0
ZXJhdG9yUHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25m
aWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5h
bWUpXERlcml2ZWRTb3VyY2VzXEFycmF5UHJvdG90eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEJvb2xlYW5Qcm90b3R5cGUubHV0
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
b2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNc
RGF0ZUNvbnN0cnVjdG9yLmx1dC5oIiAvPgpAQCAtMTQ5Miw2ICsxNDk0LDcgQEAKICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludHJpbnNpYy5oIiAvPgorICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJdGVyYXRvck9wZXJhdGlvbnMuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuaCIg
Lz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMZXhpY2FsRW52aXJvbm1l
bnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNBcmd1bWVudHNJ
dGVyYXRvci5oIiAvPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
ai5maWx0ZXJzCmluZGV4IGZmZjcyMGM4MWQwMjY0NGNlZDQ3NWYxMGRjZmJjMGQwY2IyNmY5OTMu
LmFiNjIxODg0NDYyZmQzNTg5Y2E2NzhmZTRmNTczY2QwZTBkMjFjMTMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycworKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKQEAgLTYzMCw2ICs2MzAs
OSBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9u
LmNwcCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4K
KyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSXRlcmF0b3JPcGVyYXRpb25zLmNw
cCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAg
ICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMZXhpY2FsRW52aXJvbm1lbnQuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xDb21waWxlPgpAQCAt
MjY2MSw2ICsyNjY0LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50
cmluc2ljLmgiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1
ZGU+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEl0ZXJhdG9yT3BlcmF0aW9u
cy5oIj4KKyAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxKU0xleGljYWxFbnZpcm9ubWVudC5o
Ij4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpAQCAt
MzA2NCw2ICszMDcwLDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlv
bkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJp
dmVkU291cmNlc1xTdHJpbmdDb25zdHJ1Y3Rvci5sdXQuaCI+CiAgICAgICA8RmlsdGVyPkRlcml2
ZWQgU291cmNlczwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUp
XCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0
LmgiPgorICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KKyAgICA8L0NsSW5j
bHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxv
YmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xB
cnJheVByb3RvdHlwZS5sdXQuaCI+CiAgICAgICA8RmlsdGVyPkRlcml2ZWQgU291cmNlczwvRmls
dGVyPgogICAgIDwvQ2xJbmNsdWRlPgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2
YTg0NTY1OGEyNzRiMmUzM2U5ZTlkNzQ4N2YxZTE5MzFkYTAyMTQwLi5hMDE4MDRhNmE5Nzc3YmE3
ZWNlNTc3NDE4ZDVmNDdlZWI4MmU5YWQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpA
QCAtOTQzLDYgKzk0Myw4IEBACiAJCTY1QzAyODVEMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RP
cGNvZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1
QzAyODVCMTcxNzk2NjgwMDM1MUUzNSAvKiBBUk12N0RPcGNvZGUuaCAqLzsgfTsKIAkJNjVGQjUx
MTcxODRFRUU3MDAwQzEyQjcwIC8qIFByb3RvQ2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDY1RkI1MTE2MTg0RUU5QkMwMEMxMkI3MCAv
KiBQcm90b0NhbGxGcmFtZS5jcHAgKi87IH07CiAJCTZBRDJDQjREMTlCOTE0MDEwMDA2NTcxOSAv
KiBEZWJ1Z2dlckV2YWxFbmFibGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA2QUQyQ0I0QzE5QjkxNDAxMDAwNjU3MTkgLyogRGVidWdnZXJFdmFsRW5h
Ymxlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJ
CTcwMTEzRDRCMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzAxMTNENDkxQThEQjA5
MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgKi87IH07CisJCTcwMTEzRDRDMUE4
REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJ
dGVyYXRvck9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQk3MDVCNDFBQjFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwNUI0MUEzMUE2RTUw
MUUwMDcxNjc1NyAvKiBTeW1ib2wuY3BwICovOyB9OwogCQk3MDVCNDFBQzFBNkU1MDFFMDA3MTY3
NTcgLyogU3ltYm9sLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3MDVCNDFBNDFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUQxQTZFNTAxRTAwNzE2
NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcwNUI0MUE1MUE2RTUwMUUwMDcxNjc1NyAvKiBTeW1ib2xDb25z
dHJ1Y3Rvci5jcHAgKi87IH07CkBAIC0yNjIyLDYgKzI2MjQsOCBAQAogCQk2NUZCNTExNTE4NEVF
OEY4MDBDMTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gUHJvdG9DYWxsRnJhbWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
NjVGQjUxMTYxODRFRTlCQzAwQzEyQjcwIC8qIFByb3RvQ2FsbEZyYW1lLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFByb3RvQ2FsbEZyYW1lLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2Vy
RXZhbEVuYWJsZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRGVidWdnZXJF
dmFsRW5hYmxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MDExM0Q0OTFBOERC
MDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcwMTEzRDRBMUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJh
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSXRlcmF0b3JPcGVyYXRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwNEZEMzUzMDU2OTdFNkQwMDNE
QkVEOSAvKiBCb29sZWFuT2JqZWN0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEJvb2xlYW5PYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgdGFiV2lkdGggPSA4OyB9OwogCQk3MDVCNDFBMzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9s
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFN5bWJvbC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcwNUI0MUE0MUE2RTUwMUUwMDcxNjc1NyAvKiBT
eW1ib2wuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU3ltYm9sLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00MzMxLDYgKzQzMzUsOCBAQAogCQkJCUJDOUJCOTVC
MEUxOTY4MDYwMERGODg1NSAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCAqLywKIAkJCQlCQzExNjY3
QTBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oICovLAogCQkJCTg2QkY2NDJB
MTQ4REIyQjUwMDRERTM2QSAvKiBJbnRyaW5zaWMuaCAqLywKKwkJCQk3MDExM0Q0OTFBOERCMDkz
MDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmNwcCAqLywKKwkJCQk3MDExM0Q0QTFBOERC
MDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi8sCiAJCQkJQTc2MTQwQ0IxODI5
ODJDQjAwNzUwNjI0IC8qIEpTQXJndW1lbnRzSXRlcmF0b3IuY3BwICovLAogCQkJCUE3NjE0MEND
MTgyOTgyQ0IwMDc1MDYyNCAvKiBKU0FyZ3VtZW50c0l0ZXJhdG9yLmggKi8sCiAJCQkJOTNBREZD
RTYwQ0NCRDdBQzAwRDMwQjA4IC8qIEpTQXJyYXkuY3BwICovLApAQCAtNTg3OCw2ICs1ODg0LDcg
QEAKIAkJCQlCQzExNjY3QjBFMTk5QzA1MDA4MDY2REQgLyogSW50ZXJuYWxGdW5jdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQyOUQ3N0MwRUQyMEQ3MzAwQjg5NjE5IC8qIEludGVycHJldGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjBCRDgwMTE0OEVBNkYyMDAxMTJCMkYgLyogSW50cmlu
c2ljLmggaW4gSGVhZGVycyAqLywKKwkJCQk3MDExM0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRl
cmF0b3JPcGVyYXRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQxMzBFMTZGNUNEMDBC
MzQ0NjAgLyogSmF2YVNjcmlwdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjlDRjUxOUQwQkFD
MTAwQjFEMUI1IC8qIEZUTEV4aXRQcm9wZXJ0eVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlB
NTAzRkExQTE4OEUwRkIwMDAxMTBGMTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC03MDgzLDYgKzcwOTAsNyBAQAogCQkJCUE3ODg1M0Y5MTc5NzI2MjkwMDE0NDBF
NCAvKiBJbnRlbmRlZFN0cnVjdHVyZUNoYWluLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0N0Yz
OUNGMTA3RUMzNzYwMDQyN0E0OCAvKiBJbnRlcm5hbEZ1bmN0aW9uLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTE0MjlEN0Q0MEVEMjEyODIwMEI4OTYxOSAvKiBJbnRlcnByZXRlci5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQk3MDExM0Q0QjFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRp
b25zLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUE1MDNGQTE5MTg4RTBGQjAwMDExMEYxNCAvKiBK
YXZhU2NyaXB0Q2FsbEZyYW1lLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0MjlEOTJGMEVEMjJE
NzAwMEI4OTYxOSAvKiBKSVQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZBOTBFRDAwRUU3RDUx
RjAwQUIzNTBEIC8qIEpJVEFyaXRobWV0aWMuY3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5
cGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMjNjNDUzNTA4ZDlkNmY5N2Y0NjI0OTBjMmJkMTZjZjc5OWM0ZjA4
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9idWlsdGlucy9BcnJh
eUl0ZXJhdG9yLnByb3RvdHlwZS5qcwpAQCAtMCwwICsxLDcwIEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Z1bmN0aW9uIG5leHQoKSB7Cisg
ICAgInVzZSBzdHJpY3QiOworCisgICAgaWYgKHRoaXMgPT0gbnVsbCkKKyAgICAgICAgdGhyb3cg
bmV3IEBUeXBlRXJyb3IoIiVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRo
YXQgfHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCIpOworCisgICAgdmFyIGl0ZW1LaW5k
ID0gdGhpcy5AYXJyYXlJdGVyYXRpb25LaW5kOworICAgIGlmIChpdGVtS2luZCA9PT0gdW5kZWZp
bmVkKQorICAgICAgICB0aHJvdyBuZXcgQFR5cGVFcnJvcigiJUFycmF5SXRlcmF0b3JQcm90b3R5
cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgQXJyYXkgSXRlcmF0b3IgSW5zdGFuY2Ui
KTsKKworICAgIHZhciByZXN1bHQgPSB7fTsKKworICAgIHZhciBhcnJheSA9IHRoaXMuQGl0ZXJh
dGVkT2JqZWN0OworICAgIGlmIChhcnJheSA9PT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHJlc3Vs
dC5kb25lID0gdHJ1ZTsKKyAgICAgICAgcmVzdWx0LnZhbHVlID0gdW5kZWZpbmVkOworICAgICAg
ICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIHZhciBpbmRleCA9IHRoaXMuQGFycmF5SXRl
cmF0b3JOZXh0SW5kZXg7CisgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA+Pj4gMDsKKyAg
ICBpZiAoaW5kZXggPj0gbGVuZ3RoKSB7CisgICAgICAgIHRoaXMuQGl0ZXJhdGVkT2JqZWN0ID0g
dW5kZWZpbmVkOworICAgICAgICByZXN1bHQuZG9uZSA9IHRydWU7CisgICAgICAgIHJlc3VsdC52
YWx1ZSA9IHVuZGVmaW5lZDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9OworICAgIHRo
aXMuQGFycmF5SXRlcmF0b3JOZXh0SW5kZXggPSBpbmRleCArIDE7CisKKyAgICByZXN1bHQuZG9u
ZSA9IGZhbHNlOworICAgIGlmIChpdGVtS2luZCA9PT0gQGFycmF5SXRlcmF0aW9uS2luZEtleSkg
eworICAgICAgICByZXN1bHQudmFsdWUgPSBpbmRleDsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICB2YXIgZWxlbWVudFZhbHVlID0gYXJyYXlbaW5kZXhdOworICAgIGlmIChp
dGVtS2luZCA9PT0gQGFycmF5SXRlcmF0aW9uS2luZFZhbHVlKSB7CisgICAgICAgIHJlc3VsdC52
YWx1ZSA9IGVsZW1lbnRWYWx1ZTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICAvLyBpdGVtS2luZCBpcyBAYXJyYXlJdGVyYXRvcktpbmRLZXlWYWx1ZS4KKyAgICByZXN1bHQu
dmFsdWUgPSBbIGluZGV4LCBlbGVtZW50VmFsdWUgXTsKKyAgICByZXR1cm4gcmVzdWx0OworfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAppbmRleCAwODE3OGU0MDU3M2YyNDI5NjM3YWM3MjMzN2ZiZDM5Y2JiYmE0
NzRkLi5mZjU5MjhmZmU5OTUyYmNmNDg2OWI3NzlmNzIyZjMwNzI0ZTI1MTRmIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcApAQCAtMTkwNSwxNiArMTkwNSw4IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0UmV0dXJuKFJlZ2lzdGVySUQqIHNyYykKIAogICAgIGlmIChpc0NvbnN0cnVjdG9y
KCkgJiYgc3JjLT5pbmRleCgpICE9IG1fdGhpc1JlZ2lzdGVyLmluZGV4KCkpIHsKICAgICAgICAg
UmVmUHRyPExhYmVsPiBpc09iamVjdExhYmVsID0gbmV3TGFiZWwoKTsKLSAgICAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGlzT2JqZWN0UmVnaXN0ZXIgPSBuZXdUZW1wb3JhcnkoKTsKIAotICAgICAg
ICBlbWl0T3Bjb2RlKG9wX2lzX29iamVjdCk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChpc09iamVjdFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHNyYy0+aW5kZXgoKSk7Ci0KLSAgICAgICAgc2l6ZV90IGJlZ2luID0gaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpOwotICAgICAgICBlbWl0T3Bjb2RlKG9wX2p0cnVlKTsKLSAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKGlzT2JqZWN0UmVnaXN0ZXItPmluZGV4KCkpOwotICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoaXNPYmplY3RMYWJlbC0+YmluZChiZWdpbiwgaW5zdHJ1Y3Rpb25z
KCkuc2l6ZSgpKSk7CisgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09iamVjdChuZXdUZW1w
b3JhcnkoKSwgc3JjKSwgaXNPYmplY3RMYWJlbC5nZXQoKSk7CiAKICAgICAgICAgZW1pdFVuYXJ5
Tm9Ec3RPcChvcF9yZXQsICZtX3RoaXNSZWdpc3Rlcik7CiAKQEAgLTIzNTIsNiArMjM0NCwxMyBA
QCB2b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dSZWZlcmVuY2VFcnJvcihjb25zdCBT
dHJpbmcmIG1lc3NhZ2UpCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRydWUpOwogfQogCit2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dUeXBlRXJyb3IoY29uc3QgU3RyaW5nJiBt
ZXNzYWdlKQoreworICAgIGVtaXRPcGNvZGUob3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKKyAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnRWYWx1ZShhZGRTdHJpbmdDb25zdGFudChJ
ZGVudGlmaWVyKG1fdm0sIG1lc3NhZ2UpKSktPmluZGV4KCkpOworICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChmYWxzZSk7Cit9CisKIHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRQdXNoRnVu
Y3Rpb25OYW1lU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eSwgUmVnaXN0ZXJJRCogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCiB7CiAgICAgZW1pdE9w
Y29kZShvcF9wdXNoX25hbWVfc2NvcGUpOwpAQCAtMjU1MSwyOCArMjU1MCw4MSBAQCB2b2lkIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0RW51bWVyYXRpb24oVGhyb3dhYmxlRXhwcmVzc2lvbkRhdGEq
IG5vZGUsIEV4cHJlc3NpbwogICAgIGVtaXROb2RlKHN1YmplY3QuZ2V0KCksIHN1YmplY3ROb2Rl
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlcmF0b3IgPSBlbWl0R2V0QnlJZChuZXdUZW1w
b3JhcnkoKSwgc3ViamVjdC5nZXQoKSwgcHJvcGVydHlOYW1lcygpLml0ZXJhdG9yUHJpdmF0ZU5h
bWUpOwogICAgIHsKLSAgICAgICAgQ2FsbEFyZ3VtZW50cyBhcmdzKCp0aGlzLCAwKTsKKyAgICAg
ICAgQ2FsbEFyZ3VtZW50cyBhcmdzKCp0aGlzLCBudWxscHRyKTsKICAgICAgICAgZW1pdE1vdmUo
YXJncy50aGlzUmVnaXN0ZXIoKSwgc3ViamVjdC5nZXQoKSk7CiAgICAgICAgIGVtaXRDYWxsKGl0
ZXJhdG9yLmdldCgpLCBpdGVyYXRvci5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBhcmdzLCBu
b2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOwogICAg
IH0KLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gaXRlcmF0b3JOZXh0ID0gZW1pdEdldEJ5SWQobmV3
VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkuaXRlcmF0b3JOZXh0
UHJpdmF0ZU5hbWUpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IG5ld1RlbXBvcmFy
eSgpOwogICAgIGVtaXRMb2FkKHZhbHVlLmdldCgpLCBqc1VuZGVmaW5lZCgpKTsKICAgICAKICAg
ICBlbWl0SnVtcChzY29wZS0+Y29udGludWVUYXJnZXQoKSk7CiAgICAgCiAgICAgUmVmUHRyPExh
YmVsPiBsb29wU3RhcnQgPSBuZXdMYWJlbCgpOworICAgIFJlZlB0cjxMYWJlbD4gaXRlcmF0b3JE
b25lID0gbmV3TGFiZWwoKTsKICAgICBlbWl0TGFiZWwobG9vcFN0YXJ0LmdldCgpKTsKICAgICBl
bWl0TG9vcEhpbnQoKTsKKworICAgIFJlZlB0cjxMYWJlbD4gdHJ5U3RhcnRMYWJlbCA9IG5ld0xh
YmVsKCk7CisgICAgZW1pdExhYmVsKHRyeVN0YXJ0TGFiZWwuZ2V0KCkpOworICAgIFRyeURhdGEq
IHRyeURhdGEgPSBwdXNoVHJ5KHRyeVN0YXJ0TGFiZWwuZ2V0KCkpOwogICAgIGNhbGxCYWNrKCp0
aGlzLCB2YWx1ZS5nZXQoKSk7CisgICAgUmVmUHRyPExhYmVsPiBjYXRjaEhlcmUgPSBlbWl0TGFi
ZWwobmV3TGFiZWwoKS5nZXQoKSk7CisKICAgICBlbWl0TGFiZWwoc2NvcGUtPmNvbnRpbnVlVGFy
Z2V0KCkpOwotICAgIENhbGxBcmd1bWVudHMgbmV4dEFyZ3VtZW50cygqdGhpcywgMCwgMSk7Ci0g
ICAgZW1pdE1vdmUobmV4dEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkp
OwotICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVudHMuYXJndW1lbnRSZWdpc3RlcigwKSwgdmFsdWUu
Z2V0KCkpOwotICAgIGVtaXRDYWxsKHZhbHVlLmdldCgpLCBpdGVyYXRvck5leHQuZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgbmV4dEFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2
b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVz
dWx0ID0gbmV3VGVtcG9yYXJ5KCk7Ci0gICAgZW1pdEp1bXBJZkZhbHNlKGVtaXRFcXVhbGl0eU9w
KG9wX3N0cmljdGVxLCByZXN1bHQuZ2V0KCksIHZhbHVlLmdldCgpLCBlbWl0TG9hZCgwLCBKU1Zh
bHVlKHZtKCktPml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpKSksIGxvb3BTdGFydC5nZXQoKSk7
CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IG5leHQgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3Jhcnko
KSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFtZXMoKS5uZXh0KTsKKyAgICB7CisgICAgICAg
IENhbGxBcmd1bWVudHMgbmV4dEFyZ3VtZW50cygqdGhpcywgbnVsbHB0cik7CisgICAgICAgIGVt
aXRNb3ZlKG5leHRBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKKyAg
ICAgICAgZW1pdENhbGwodmFsdWUuZ2V0KCksIG5leHQuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgbmV4dEFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2Rl
LT5kaXZvdEVuZCgpKTsKKyAgICB9CisgICAgeworICAgICAgICBSZWZQdHI8TGFiZWw+IHR5cGVJ
c09iamVjdCA9IG5ld0xhYmVsKCk7CisgICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc09iamVj
dChuZXdUZW1wb3JhcnkoKSwgdmFsdWUuZ2V0KCkpLCB0eXBlSXNPYmplY3QuZ2V0KCkpOworICAg
ICAgICBlbWl0VGhyb3dUeXBlRXJyb3IoQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50
ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworICAgICAgICBlbWl0TGFiZWwodHlwZUlzT2Jq
ZWN0LmdldCgpKTsKKyAgICB9CisgICAgZW1pdEp1bXBJZlRydWUoZW1pdEdldEJ5SWQobmV3VGVt
cG9yYXJ5KCksIHZhbHVlLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkuZG9uZSksIGl0ZXJhdG9yRG9u
ZS5nZXQoKSk7CisgICAgZW1pdEdldEJ5SWQodmFsdWUuZ2V0KCksIHZhbHVlLmdldCgpLCBwcm9w
ZXJ0eU5hbWVzKCkudmFsdWUpOworICAgIGVtaXRKdW1wKGxvb3BTdGFydC5nZXQoKSk7CisKKyAg
ICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNlIGZvciB0aHJvdy1lZCBjb250cm9sIGZsb3cuCisg
ICAgeworICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZXhjZXB0aW9uUmVnaXN0ZXIgPSBwb3BU
cnlBbmRFbWl0Q2F0Y2godHJ5RGF0YSwgbmV3VGVtcG9yYXJ5KCksIGNhdGNoSGVyZS5nZXQoKSk7
CisgICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0aHJvdyA9IG5ld0xhYmVsKCk7CisKKyAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVybk1ldGhvZCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFy
eSgpLCBpdGVyYXRvci5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnJldHVybktleXdvcmQpOworICAg
ICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNVbmRlZmluZWQobmV3VGVtcG9yYXJ5KCksIHJldHVy
bk1ldGhvZC5nZXQoKSksIHJldGhyb3cuZ2V0KCkpOworCisgICAgICAgIFJlZlB0cjxMYWJlbD4g
cmV0dXJuQ2FsbFRyeVN0YXJ0ID0gbmV3TGFiZWwoKTsKKyAgICAgICAgZW1pdExhYmVsKHJldHVy
bkNhbGxUcnlTdGFydC5nZXQoKSk7CisgICAgICAgIFRyeURhdGEqIHJldHVybkNhbGxUcnlEYXRh
ID0gcHVzaFRyeShyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkpOworCisgICAgICAgIENhbGxBcmd1
bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCBudWxscHRyKTsKKyAgICAgICAgZW1pdE1vdmUo
cmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7CisgICAgICAg
IGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRob2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZvdCgpLCBub2RlLT5kaXZvdFN0YXJ0KCks
IG5vZGUtPmRpdm90RW5kKCkpOworCisgICAgICAgIFJlZlB0cjxMYWJlbD4gcmV0dXJuQ2FsbENh
dGNoSGVyZSA9IGVtaXRMYWJlbChuZXdMYWJlbCgpLmdldCgpKTsKKyAgICAgICAgZW1pdEp1bXAo
cmV0aHJvdy5nZXQoKSk7CisKKyAgICAgICAgcG9wVHJ5QW5kRW1pdENhdGNoKHJldHVybkNhbGxU
cnlEYXRhLCBuZXdUZW1wb3JhcnkoKSwgcmV0dXJuQ2FsbENhdGNoSGVyZS5nZXQoKSk7CisgICAg
ICAgIGVtaXRMYWJlbChyZXRocm93LmdldCgpKTsKKyAgICAgICAgZW1pdFRocm93KGV4Y2VwdGlv
blJlZ2lzdGVyLmdldCgpKTsKKyAgICB9CisKKyAgICAvLyBJdGVyYXRvckNsb3NlIHNlcXVlbmNl
IGZvciBicmVhay1lZCBjb250cm9sIGZsb3cuCiAgICAgZW1pdExhYmVsKHNjb3BlLT5icmVha1Rh
cmdldCgpKTsKKyAgICB7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5NZXRob2Qg
PSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHByb3BlcnR5TmFt
ZXMoKS5yZXR1cm5LZXl3b3JkKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzVW5kZWZp
bmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCBpdGVyYXRvckRvbmUuZ2V0
KCkpOworCisgICAgICAgIENhbGxBcmd1bWVudHMgcmV0dXJuQXJndW1lbnRzKCp0aGlzLCBudWxs
cHRyKTsKKyAgICAgICAgZW1pdE1vdmUocmV0dXJuQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBp
dGVyYXRvci5nZXQoKSk7CisgICAgICAgIGVtaXRDYWxsKHZhbHVlLmdldCgpLCByZXR1cm5NZXRo
b2QuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgcmV0dXJuQXJndW1lbnRzLCBub2RlLT5kaXZv
dCgpLCBub2RlLT5kaXZvdFN0YXJ0KCksIG5vZGUtPmRpdm90RW5kKCkpOworICAgICAgICBlbWl0
SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHZhbHVlLmdldCgpKSwgaXRl
cmF0b3JEb25lLmdldCgpKTsKKyAgICAgICAgZW1pdFRocm93VHlwZUVycm9yKEFTQ0lJTGl0ZXJh
bCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICB9
CisKKyAgICBlbWl0TGFiZWwoaXRlcmF0b3JEb25lLmdldCgpKTsKIH0KIAogUmVnaXN0ZXJJRCog
Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRHZXRFbnVtZXJhYmxlTGVuZ3RoKFJlZ2lzdGVySUQqIGRz
dCwgUmVnaXN0ZXJJRCogYmFzZSkKQEAgLTI2NDksNiArMjcwMSwyMyBAQCBSZWdpc3RlcklEKiBC
eXRlY29kZUdlbmVyYXRvcjo6ZW1pdFRvSW5kZXhTdHJpbmcoUmVnaXN0ZXJJRCogZHN0LCBSZWdp
c3RlcklEKiBpbgogICAgIHJldHVybiBkc3Q7CiB9CiAKKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRJc09iamVjdChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykK
K3sKKyAgICBlbWl0T3Bjb2RlKG9wX2lzX29iamVjdCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgo
KSk7CisgICAgcmV0dXJuIGRzdDsKK30KKworUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYykKK3sKKyAg
ICBlbWl0T3Bjb2RlKG9wX2lzX3VuZGVmaW5lZCk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHNyYy0+aW5kZXgoKSk7
CisgICAgcmV0dXJuIGRzdDsKK30KKwogdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6cHVzaEluZGV4
ZWRGb3JJblNjb3BlKFJlZ2lzdGVySUQqIGxvY2FsUmVnaXN0ZXIsIFJlZ2lzdGVySUQqIGluZGV4
UmVnaXN0ZXIpCiB7CiAgICAgaWYgKCFsb2NhbFJlZ2lzdGVyKQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oCmluZGV4IDVj
ODMyM2FjMGNmNjU2ZGVmOTNjZWFiMTU4YmYyZjA2YWVhZjAzODkuLmZiMDgzNjNmNjVhMGE5YWI3
NDQxYzEyM2YxMDQ5OTUzYzQ1ZGEyYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmgKQEAgLTUyOSw2ICs1MjksOSBA
QAogICAgICAgICBSZWdpc3RlcklEKiBlbWl0TmV4dEVudW1lcmF0b3JQcm9wZXJ0eU5hbWUoUmVn
aXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBlbnVtZXJhdG9yLCBSZWdpc3RlcklEKiBpbmRleCk7
CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUb0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwg
UmVnaXN0ZXJJRCogaW5kZXgpOwogCisgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRJc09iamVjdChS
ZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CisgICAgICAgIFJlZ2lzdGVySUQqIGVt
aXRJc1VuZGVmaW5lZChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIHNyYyk7CisKICAgICAg
ICAgdm9pZCBlbWl0UmVhZE9ubHlFeGNlcHRpb25JZk5lZWRlZCgpOwogCiAgICAgICAgIC8vIFN0
YXJ0IGEgdHJ5IGJsb2NrLiAnc3RhcnQnIG11c3QgaGF2ZSBiZWVuIGVtaXR0ZWQuCkBAIC01NDMs
NiArNTQ2LDcgQEAKICAgICAgICAgfQogCiAgICAgICAgIHZvaWQgZW1pdFRocm93UmVmZXJlbmNl
RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKKyAgICAgICAgdm9pZCBlbWl0VGhyb3dUeXBl
RXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKTsKIAogICAgICAgICB2b2lkIGVtaXRQdXNoRnVu
Y3Rpb25OYW1lU2NvcGUoUmVnaXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0
eSwgUmVnaXN0ZXJJRCogdmFsdWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwogICAgICAgICB2b2lk
IGVtaXRQdXNoQ2F0Y2hTY29wZShSZWdpc3RlcklEKiBkc3QsIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5LCBSZWdpc3RlcklEKiB2YWx1ZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKaW5kZXggN2IwY2RhNjg2
Y2M0NzI3ZWNmMjhhZjdhNTdhNWUwNzUxMTM1YzNhNS4uMTAwN2QyZDY3Yzk3NTdhNDFiM2IwMzcw
ZDEwOTQxY2FhMTVlOWQ0MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtH
ZW5lcmF0b3JzLmNwcApAQCAtMTA0NCwxMDcgKzEwNDQsNiBAQCBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgaW11bFRodW5rR2VuZXJhdG9yKFZNKiB2bSkKICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZt
LT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFpbENhbGwodm0pLCAiaW11bCIpOwogfQogCi1zdGF0aWMg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0b3IoVk0q
IHZtLCBBcnJheUl0ZXJhdGlvbktpbmQga2luZCkKLXsKLSAgICB0eXBlZGVmIFNwZWNpYWxpemVk
VGh1bmtKSVQ6OlRydXN0ZWRJbW0zMiBUcnVzdGVkSW1tMzI7Ci0gICAgdHlwZWRlZiBTcGVjaWFs
aXplZFRodW5rSklUOjpUcnVzdGVkSW1tUHRyIFRydXN0ZWRJbW1QdHI7Ci0gICAgdHlwZWRlZiBT
cGVjaWFsaXplZFRodW5rSklUOjpBZGRyZXNzIEFkZHJlc3M7Ci0gICAgdHlwZWRlZiBTcGVjaWFs
aXplZFRodW5rSklUOjpCYXNlSW5kZXggQmFzZUluZGV4OwotICAgIHR5cGVkZWYgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6SnVtcCBKdW1wOwotICAgIAotICAgIFNwZWNpYWxpemVkVGh1bmtKSVQgaml0
KHZtKTsKLSAgICAvLyBNYWtlIHN1cmUgd2UncmUgYmVpbmcgY2FsbGVkIG9uIGFuIGFycmF5IGl0
ZXJhdG9yLCBhbmQgbG9hZCBtX2l0ZXJhdGVkT2JqZWN0LCBhbmQgbV9uZXh0SW5kZXggaW50byBy
ZWdUMCBhbmQgcmVnVDEgcmVzcGVjdGl2ZWx5Ci0gICAgaml0LmxvYWRBcmd1bWVudFdpdGhTcGVj
aWZpY0NsYXNzKEpTQXJyYXlJdGVyYXRvcjo6aW5mbygpLCBTcGVjaWFsaXplZFRodW5rSklUOjpU
aGlzQXJndW1lbnQsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMSk7Ci0KLSAgICAvLyBFYXJseSBleGl0IGlmIHdlIGRvbid0IGhhdmUgYSB0aHVu
ayBmb3IgdGhpcyBmb3JtIG9mIGl0ZXJhdGlvbgotICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5i
cmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpBYm92ZU9yRXF1YWwsIEFkZHJlc3MoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRpb25L
aW5kKCkpLCBUcnVzdGVkSW1tMzIoQXJyYXlJdGVyYXRlS2V5VmFsdWUpKSk7Ci0gICAgCi0gICAg
aml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0
ZXJhdG9yOjpvZmZzZXRPZkl0ZXJhdGVkT2JqZWN0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMCk7Ci0gICAgCi0gICAgaml0LmxvYWQzMihBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpLCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUMSk7Ci0gICAgCi0gICAgLy8gUHVsbCBvdXQgdGhlIGJ1dHRlcmZseSBm
cm9tIGl0ZXJhdGVkT2JqZWN0Ci0gICAgaml0LmxvYWQ4KEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDAsIEpTQ2VsbDo6aW5kZXhpbmdUeXBlT2Zmc2V0KCkpLCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMyk7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDIpOwotICAgIEp1bXAgbnVsbEJ1dHRlcmZseSA9IGppdC5icmFuY2hUZXN0UHRy
KFNwZWNpYWxpemVkVGh1bmtKSVQ6Olplcm8sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsK
LSAgICAKLSAgICBKdW1wIG5vdERvbmUgPSBqaXQuYnJhbmNoMzIoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6QmVsb3csIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBBZGRyZXNzKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QyLCBCdXR0ZXJmbHk6Om9mZnNldE9mUHVibGljTGVuZ3RoKCkpKTsKLQot
ICAgIG51bGxCdXR0ZXJmbHkubGluaygmaml0KTsKLQotICAgIC8vIFJldHVybiB0aGUgdGVybWlu
YXRpb24gc2lnbmFsIHRvIGluZGljYXRlIHRoYXQgd2UndmUgZmluaXNoZWQKLSAgICBqaXQubW92
ZShUcnVzdGVkSW1tUHRyKHZtLT5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKSwgU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIGppdC5yZXR1cm5KU0NlbGwoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDApOwotICAgIAotICAgIG5vdERvbmUubGluaygmaml0KTsKLSAgICAKLSAgICBp
ZiAoa2luZCA9PSBBcnJheUl0ZXJhdGVLZXkpIHsKLSAgICAgICAgaml0LmFkZDMyKFRydXN0ZWRJ
bW0zMigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJh
dG9yOjpvZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0gICAgICAgIGppdC5yZXR1cm5JbnQzMihTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUMSk7Ci0gICAgICAgIHJldHVybiBqaXQuZmluYWxpemUodm0t
PmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJhcnJheS1pdGVyYXRvci1uZXh0LWtl
eSIpOwotICAgICAgICAKLSAgICB9Ci0gICAgQVNTRVJUKGtpbmQgPT0gQXJyYXlJdGVyYXRlVmFs
dWUpOwotICAgIAotICAgIC8vIE9rYXksIG5vdyB3ZSdyZSByZXR1cm5pbmcgYSB2YWx1ZSBzbyBt
YWtlIHN1cmUgd2UncmUgaW5zaWRlIHRoZSB2ZWN0b3Igc2l6ZQotICAgIGppdC5hcHBlbmRGYWls
dXJlKGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpBYm92ZU9yRXF1YWwsIFNwZWNp
YWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qy
LCBCdXR0ZXJmbHk6Om9mZnNldE9mVmVjdG9yTGVuZ3RoKCkpKSk7Ci0gICAgCi0gICAgLy8gU28g
bm93IHdlIHBlcmZvcm0gaW5saW5lIGxvYWRzIGZvciBpbnQzMiwgdmFsdWUvdW5kZWNpZGVkLCBh
bmQgZG91YmxlIHN0b3JhZ2UKLSAgICBKdW1wIHVuZGVjaWRlZFN0b3JhZ2UgPSBqaXQuYnJhbmNo
MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qz
LCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoVW5kZWNpZGVkKSk7Ci0gICAgSnVtcCBub3RDb250aWd1
b3VzU3RvcmFnZSA9IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwg
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhDb250aWd1
b3VzKSk7Ci0gICAgCi0gICAgdW5kZWNpZGVkU3RvcmFnZS5saW5rKCZqaXQpOwotICAgIAotICAg
IGppdC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2JqZWN0
OjpidXR0ZXJmbHlPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAgICAK
LSNpZiBVU0UoSlNWQUxVRTY0KQotICAgIGppdC5sb2FkNjQoQmFzZUluZGV4KFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRU
aHVua0pJVDo6VGltZXNFaWdodCksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICBK
dW1wIG5vdEhvbGUgPSBqaXQuYnJhbmNoVGVzdDY0KFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vblpl
cm8sIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICBqaXQubW92ZShKU0ludGVyZmFj
ZUpJVDo6VHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1Qw
KTsKLSAgICBub3RIb2xlLmxpbmsoJmppdCk7Ci0gICAgaml0LmFkZFB0cihUcnVzdGVkSW1tMzIo
MSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6
b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgIGppdC5yZXR1cm5KU1ZhbHVlKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1QwKTsKLSNlbHNlCi0gICAgaml0LmxvYWQzMihCYXNlSW5kZXgoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBTcGVjaWFs
aXplZFRodW5rSklUOjpUaW1lc0VpZ2h0LCBKU1ZhbHVlOjpvZmZzZXRPZlRhZygpKSwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDMpOwotICAgIEp1bXAgbm90SG9sZSA9IGppdC5icmFuY2gzMihT
cGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMs
IFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpFbXB0eVZhbHVlVGFnKSk7Ci0gICAgaml0Lm1vdmUoSlNJ
bnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpVbmRlZmluZWRUYWcpLCBKU0ludGVy
ZmFjZUpJVDo6cmVnVDEpOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
MzIoMCksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgaml0LmFkZDMyKFRydXN0ZWRJbW0z
MigxKSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9y
OjpvZmZzZXRPZk5leHRJbmRleCgpKSk7Ci0gICAgaml0LnJldHVybkpTVmFsdWUoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDAsIEpTSW50ZXJmYWNlSklUOjpyZWdUMSk7Ci0gICAgbm90SG9sZS5s
aW5rKCZqaXQpOwotICAgIGppdC5sb2FkMzIoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6
OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6
VGltZXNFaWdodCwgSlNWYWx1ZTo6b2Zmc2V0T2ZQYXlsb2FkKCkpLCBTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCk7Ci0gICAgaml0LmFkZDMyKFRydXN0ZWRJbW0zMigxKSwgQWRkcmVzcyhTcGVj
aWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9yOjpvZmZzZXRPZk5leHRJbmRl
eCgpKSk7Ci0gICAgaml0Lm1vdmUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QxKTsKLSAgICBqaXQucmV0dXJuSlNWYWx1ZShTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwotI2VuZGlmCi0gICAg
bm90Q29udGlndW91c1N0b3JhZ2UubGluaygmaml0KTsKLSAgICAKLSAgICBKdW1wIG5vdEludDMy
U3RvcmFnZSA9IGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklUOjpOb3RFcXVhbCwgU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJheVdpdGhJbnQzMikpOwot
ICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2Jq
ZWN0OjpidXR0ZXJmbHlPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAg
ICBqaXQubG9hZDMyKEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQsIEpT
VmFsdWU6Om9mZnNldE9mUGF5bG9hZCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwot
ICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJ
VDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgIGpp
dC5yZXR1cm5JbnQzMihTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgbm90SW50MzJT
dG9yYWdlLmxpbmsoJmppdCk7Ci0gICAgCi0gICAgaml0LmFwcGVuZEZhaWx1cmUoaml0LmJyYW5j
aDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6Ok5vdEVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklUOjpy
ZWdUMywgVHJ1c3RlZEltbTMyKEFycmF5V2l0aERvdWJsZSkpKTsKLSAgICBqaXQubG9hZFB0cihB
ZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zm
c2V0KCkpLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7Ci0gICAgaml0LmxvYWREb3VibGUo
QmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGltZXNFaWdodCksIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OmZwUmVnVDApOwotICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3Mo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0
SW5kZXgoKSkpOwotICAgIGppdC5yZXR1cm5Eb3VibGUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6ZnBS
ZWdUMCk7Ci0gICAgCi0gICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5h
dGl2ZVRhaWxDYWxsKHZtKSwgImFycmF5LWl0ZXJhdG9yLW5leHQtdmFsdWUiKTsKLX0KLQotTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0S2V5VGh1bmtHZW5lcmF0b3IoVk0q
IHZtKQotewotICAgIHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKHZtLCBB
cnJheUl0ZXJhdGVLZXkpOwotfQotCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRv
ck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVy
YXRvck5leHRUaHVua0dlbmVyYXRvcih2bSwgQXJyYXlJdGVyYXRlVmFsdWUpOwotfQotICAgIAog
fQogCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Ro
dW5rR2VuZXJhdG9ycy5oCmluZGV4IDI0NmRhMmVhNjQ1NGI5ZTMwMjc2YWQyMTc3NGI1NWMyNTNk
NDEwYzYuLmZkYjAwY2Y4MmFlNmIxMGRjYjNhMDM5MzZiYzcwYThhM2RiM2I5YTcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaApAQCAtMTMwLDggKzEzMCw2
IEBAIGlubGluZSBUaHVua0dlbmVyYXRvciB2aXJ0dWFsVGh1bmtHZW5lcmF0b3JGb3IoCiBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgc3FydFRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgcG93VGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBp
bXVsVGh1bmtHZW5lcmF0b3IoVk0qKTsKLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJheUl0ZXJh
dG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKFZNKik7Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJy
YXlJdGVyYXRvck5leHRWYWx1ZVRodW5rR2VuZXJhdG9yKFZNKik7CiAKIH0KICNlbmRpZiAvLyBF
TkFCTEUoSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJn
dW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGQ3OWNjNTJlMDkyYmM2ZTkw
YjQxYmJlNzk5OGMyYWI3MDdhYTNkMmMuLmFkOGI3NTkwZDg1ZTY1NmE5MTJiNGFhOTkxNzYwZmFk
MzYzMDYwYmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3Vt
ZW50c0l0ZXJhdG9yUHJvdG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Bcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNp
bmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5o
IgogCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiSlNBcmd1bWVu
dHNJdGVyYXRvci5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIApAQCAtNDMsNyArNDQsNyBA
QCB2b2lkIEFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0s
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYgogICAgIHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5
cGUodGhpcyk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0
ZXJhdG9yUHJpdmF0ZU5hbWUsIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY0l0ZXJhdG9y
LCBEb250RW51bSwgMCk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgYXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5j
TmV4dCwgRG9udEVudW0sIDApOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlO
YW1lcy0+bmV4dCwgYXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0s
IDApOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9y
UHJvdG90eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNTUsOCArNTYs
OCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90
eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRgogewogICAgIEpTVmFsdWUgcmVzdWx0OwogICAg
IGlmIChqc0Nhc3Q8SlNBcmd1bWVudHNJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
LT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShyZXN1bHQpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0
ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpOworICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1bHQsIGZhbHNlKSk7CisgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwg
anNVbmRlZmluZWQoKSwgdHJ1ZSkpOwogfQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IGM4ODAw
ZTNjZGNhNjI1MmVhYjk4ZmQwMjExODYxZTFkMGRiZWMxMTIuLmY3Njg2OGMwM2VhNTMzODAxMGEy
YjdiMDYxZmYwZDQyOTA4NTRiYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwCkBAIC0yMCwxMyArMjAsMjMg
QEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
IkFycmF5SXRlcmF0b3JQcm90b3R5cGUuaCIKIAorbmFtZXNwYWNlIEpTQyB7CisKK3N0YXRpYyBF
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRv
cihFeGVjU3RhdGUqKTsKKworfQorCisjaW5jbHVkZSAiQXJyYXlJdGVyYXRvclByb3RvdHlwZS5s
dXQuaCIKKworI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJy
YXlJdGVyYXRvci5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0NKU1Zh
bHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU0ds
b2JhbE9iamVjdC5oIgpAQCAtMzUsMjIgKzQ1LDMzIEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi1j
b25zdCBDbGFzc0luZm8gQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6c19pbmZvID0geyAiQXJyYXkg
SXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEFycmF5SXRl
cmF0b3JQcm90b3R5cGUpIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKEV4ZWNTdGF0ZSopOworY29uc3QgQ2xhc3NJ
bmZvIEFycmF5SXRlcmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkFycmF5IEl0ZXJhdG9yIiwg
JkJhc2U6OnNfaW5mbywgJmFycmF5SXRlcmF0b3JQcm90b3R5cGVUYWJsZSwgQ1JFQVRFX01FVEhP
RF9UQUJMRShBcnJheUl0ZXJhdG9yUHJvdG90eXBlKSB9OworCisvKiBTb3VyY2UgZm9yIEFycmF5
SXRlcmF0b3JQcm90b3R5cGUubHV0LmgKK0BiZWdpbiBhcnJheUl0ZXJhdG9yUHJvdG90eXBlVGFi
bGUKKyAgbmV4dCAgICAgIGFycmF5SXRlcmF0b3JQcm90b0Z1bmNOZXh0ICBEb250RW51bXxGdW5j
dGlvbiAwCitAZW5kCisqLwogCiB2b2lkIEFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKIHsKICAgICBCYXNl
OjpmaW5pc2hDcmVhdGlvbih2bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwogICAg
IHZtLnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7Ci0KLSAgICBKU0NfTkFUSVZFX0ZV
TkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0
b3JQcm90b3R5cGVJdGVyYXRlLCBEb250RW51bSwgMCk7CisgICAgSlNDX05BVElWRV9GVU5DVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yUHJv
dG9GdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAwKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0ZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKK2Jvb2wgQXJyYXlJdGVyYXRvclByb3RvdHlwZTo6Z2V0T3duUHJvcGVydHlTbG90KEpTT2Jq
ZWN0KiBvYmplY3QsIEV4ZWNTdGF0ZSogZXhlYywgUHJvcGVydHlOYW1lIHByb3BlcnR5TmFtZSwg
UHJvcGVydHlTbG90JiBzbG90KQogewotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY2FsbEZy
YW1lLT50aGlzVmFsdWUoKSk7CisgICAgcmV0dXJuIGdldFN0YXRpY0Z1bmN0aW9uU2xvdDxCYXNl
PihleGVjLCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlVGFibGUsIGpzQ2FzdDxBcnJheUl0ZXJhdG9y
UHJvdG90eXBlKj4ob2JqZWN0KSwgcHJvcGVydHlOYW1lLCBzbG90KTsKIH0KIAorLy8gLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEFycmF5IEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tCisKK0VuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRv
clByb3RvRnVuY0l0ZXJhdG9yKEV4ZWNTdGF0ZSogZXhlYykKK3sKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGV4ZWMtPnRoaXNWYWx1ZSgpKTsKIH0KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJv
dG90eXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJv
dG90eXBlLmgKaW5kZXggMTBlZTlhNmEyNjc2ZDk5ZDE5MzdkMzhjODc4MTI5NTg0NGZhMGI1ZC4u
NTQ3ZTMzMjcyZDJlNGMxMzU2OTQwYjk5M2U0M2VhY2ZjMDJjNjI5NSAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaApA
QCAtNDgsMTIgKzQ4LDE3IEBAIGNsYXNzIEFycmF5SXRlcmF0b3JQcm90b3R5cGUgOiBwdWJsaWMg
SlNOb25GaW5hbE9iamVjdCB7CiAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKE9iamVjdFR5cGUsIFN0cnVjdHVyZUZs
YWdzKSwgaW5mbygpKTsKICAgICB9CiAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5z
aWduZWQgU3RydWN0dXJlRmxhZ3MgPSBPdmVycmlkZXNHZXRPd25Qcm9wZXJ0eVNsb3QgfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKKwogcHJpdmF0ZToKICAgICBBcnJheUl0ZXJhdG9yUHJvdG90eXBl
KFZNJiB2bSwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0
dXJlKQogICAgIHsKICAgICB9CisKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiwgSlNHbG9i
YWxPYmplY3QqKTsKKyAgICBzdGF0aWMgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3QoSlNPYmplY3Qq
LCBFeGVjU3RhdGUqLCBQcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYpOwogfTsKIAogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMu
aCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmgKaW5k
ZXggZjExMTc3M2YxMDU1NzQ5ODFlOTY4NzdjNDc5M2U0ZTk1YWRiNTg1OC4uMzg2ZjU0M2I5ZjQ2
ZmM2Zjc1Y2RiYjVkNDQ2MDIxYjgxNTA2MGViNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRlbnRpZmllcnMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCkBAIC0yMzUsNyArMjM1LDEyIEBACiAK
ICNkZWZpbmUgSlNDX0NPTU1PTl9QUklWQVRFX0lERU5USUZJRVJTX0VBQ0hfUFJPUEVSVFlfTkFN
RShtYWNybykgXAogICAgIEpTQ19DT01NT05fUFJJVkFURV9JREVOVElGSUVSU19FQUNIX1dFTExf
S05PV05fU1lNQk9MKG1hY3JvKSBcCi0gICAgbWFjcm8oaXRlcmF0b3JOZXh0KSBcCisgICAgbWFj
cm8oaXRlcmF0ZWRPYmplY3QpIFwKKyAgICBtYWNybyhhcnJheUl0ZXJhdG9yTmV4dEluZGV4KSBc
CisgICAgbWFjcm8oYXJyYXlJdGVyYXRpb25LaW5kKSBcCisgICAgbWFjcm8oYXJyYXlJdGVyYXRp
b25LaW5kS2V5KSBcCisgICAgbWFjcm8oYXJyYXlJdGVyYXRpb25LaW5kVmFsdWUpIFwKKyAgICBt
YWNybyhhcnJheUl0ZXJhdGlvbktpbmRLZXlWYWx1ZSkgXAogICAgIG1hY3JvKHJlc29sdmUpIFwK
ICAgICBtYWNybyhyZWplY3QpIFwKICAgICBtYWNybyhwcm9taXNlKSBcCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCmluZGV4IDUzOGIzMjg0YzI0YzEzMzY0MGZhNDdl
M2U0MjdiZGQ2NTc5YWM0YTkuLmY4MjgzMzY5NTAxZTA5NDUzMDcxNDA5ZjQwNmY4OWEyMDY4OWE2
MGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0ludHJpbnNpYy5oCkBAIC01Miwx
MCArNTIsNyBAQCBlbnVtIEludHJpbnNpYyB7CiAgICAgU3RyaW5nUHJvdG90eXBlVmFsdWVPZklu
dHJpbnNpYywKICAgICBJTXVsSW50cmluc2ljLAogICAgIEZSb3VuZEludHJpbnNpYywKLSAgICBB
cnJheUl0ZXJhdG9yTmV4dFZhbHVlSW50cmluc2ljLAotICAgIEFycmF5SXRlcmF0b3JOZXh0S2V5
SW50cmluc2ljLAotICAgIEFycmF5SXRlcmF0b3JOZXh0R2VuZXJpY0ludHJpbnNpYywKLSAgICAK
KwogICAgIC8vIERlYnVnZ2luZyBpbnRyaW5zaWNzLiBUaGVzZSBhcmUgbWVhbnQgdG8gYmUgdXNl
ZCBhcyB0ZXN0aW5nIGhhY2tzIHdpdGhpbgogICAgIC8vIGpzYy5jcHAgYW5kIHNob3VsZCBuZXZl
ciBiZSBleHBvc2VkIHRvIHVzZXJzLgogICAgIERGR1RydWVJbnRyaW5zaWMsCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iMDFkMzNkNjFjZTYwMTU1Y2RiMjdmMDc4NzE0ODhjYTNlOTYzYjRiCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRp
b25zLmNwcApAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1
a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSXRl
cmF0b3JPcGVyYXRpb25zLmgiCisKKyNpbmNsdWRlICJFcnJvci5oIgorI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKyNpbmNsdWRlICJPYmplY3RDb25zdHJ1Y3Rvci5oIgorCit1c2luZyBuYW1lc3Bh
Y2UgV1RGOworCituYW1lc3BhY2UgSlNDIHsKKworSlNWYWx1ZSBpdGVyYXRvck5leHQoRXhlY1N0
YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yLCBKU1ZhbHVlIHZhbHVlKQoreworICAgIEpTVmFs
dWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlO
YW1lcy0+bmV4dCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKworICAgIENhbGxEYXRhIG5leHRGdW5jdGlvbkNhbGxEYXRhOwor
ICAgIENhbGxUeXBlIG5leHRGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEobmV4dEZ1bmN0
aW9uLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSk7CisgICAgaWYgKG5leHRGdW5jdGlvbkNhbGxUeXBl
ID09IENhbGxUeXBlTm9uZSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlwZUVycm9yKGV4ZWMpOwor
CisgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbmV4dEZ1bmN0aW9uQXJndW1lbnRzOworICAgIGlm
ICghdmFsdWUuaXNFbXB0eSgpKQorICAgICAgICBuZXh0RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5k
KHZhbHVlKTsKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGNhbGwoZXhlYywgbmV4dEZ1bmN0aW9uLCBu
ZXh0RnVuY3Rpb25DYWxsVHlwZSwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCBuZXh0
RnVuY3Rpb25Bcmd1bWVudHMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAg
ICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAgICBpZiAoIXJlc3VsdC5pc09iamVjdCgpKQor
ICAgICAgICByZXR1cm4gdGhyb3dUeXBlRXJyb3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJdGVyYXRv
ciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikpOworCisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworSlNWYWx1ZSBpdGVyYXRvck5leHQoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGl0ZXJhdG9yKQoreworICAgIHJldHVybiBpdGVyYXRvck5leHQoZXhlYywgaXRlcmF0b3IsIEpT
VmFsdWUoKSk7Cit9CisKK0pTVmFsdWUgaXRlcmF0b3JWYWx1ZShFeGVjU3RhdGUqIGV4ZWMsIEpT
VmFsdWUgaXRlclJlc3VsdCkKK3sKKyAgICByZXR1cm4gaXRlclJlc3VsdC5nZXQoZXhlYywgZXhl
Yy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT52YWx1ZSk7Cit9CisKK2Jvb2wgaXRlcmF0b3JDb21wbGV0
ZShFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgaXRlclJlc3VsdCkKK3sKKyAgICBKU1ZhbHVlIGRv
bmUgPSBpdGVyUmVzdWx0LmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPmRvbmUp
OworICAgIHJldHVybiBkb25lLnRvQm9vbGVhbihleGVjKTsKK30KKworSlNWYWx1ZSBpdGVyYXRv
clN0ZXAoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yKQoreworICAgIEpTVmFsdWUg
cmVzdWx0ID0gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJhdG9yKTsKKyAgICBpZiAoZXhlYy0+aGFk
RXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGJvb2wgZG9u
ZSA9IGl0ZXJhdG9yQ29tcGxldGUoZXhlYywgcmVzdWx0KTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworICAgIGlmIChkb25lKQor
ICAgICAgICByZXR1cm4ganNCb29sZWFuKGZhbHNlKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
Cit2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yKQor
eworICAgIEpTVmFsdWUgZXhjZXB0aW9uOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkg
eworICAgICAgICBleGNlcHRpb24gPSBleGVjLT5leGNlcHRpb24oKTsKKyAgICAgICAgZXhlYy0+
Y2xlYXJFeGNlcHRpb24oKTsKKyAgICB9CisgICAgSlNWYWx1ZSByZXR1cm5GdW5jdGlvbiA9IGl0
ZXJhdG9yLmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPnJldHVybktleXdvcmQp
OworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
aWYgKHJldHVybkZ1bmN0aW9uLmlzVW5kZWZpbmVkKCkpIHsKKyAgICAgICAgaWYgKCFleGNlcHRp
b24uaXNFbXB0eSgpKQorICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVj
LCBleGNlcHRpb24pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgQ2FsbERhdGEgcmV0
dXJuRnVuY3Rpb25DYWxsRGF0YTsKKyAgICBDYWxsVHlwZSByZXR1cm5GdW5jdGlvbkNhbGxUeXBl
ID0gZ2V0Q2FsbERhdGEocmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2FsbERhdGEpOwor
ICAgIGlmIChyZXR1cm5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgeworICAgICAg
ICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpCisgICAgICAgICAgICBleGVjLT52bSgpLnRocm93
RXhjZXB0aW9uKGV4ZWMsIGV4Y2VwdGlvbik7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHM7CisgICAgSlNWYWx1ZSBpbm5l
clJlc3VsdCA9IGNhbGwoZXhlYywgcmV0dXJuRnVuY3Rpb24sIHJldHVybkZ1bmN0aW9uQ2FsbFR5
cGUsIHJldHVybkZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCByZXR1cm5GdW5jdGlvbkFyZ3Vt
ZW50cyk7CisKKyAgICBpZiAoIWV4Y2VwdGlvbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgZXhlYy0+
dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRpb24pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm47CisK
KyAgICBpZiAoIWlubmVyUmVzdWx0LmlzT2JqZWN0KCkpIHsKKyAgICAgICAgdGhyb3dUeXBlRXJy
b3IoZXhlYywgQVNDSUlMaXRlcmFsKCJJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBh
biBvYmplY3QuIikpOworICAgICAgICByZXR1cm47CisgICAgfQorfQorCitKU09iamVjdCogY3Jl
YXRlSXRlclJlc3VsdE9iamVjdChFeGVjU3RhdGUqIGV4ZWMsIEpTVmFsdWUgdmFsdWUsIGJvb2wg
ZG9uZSkKK3sKKyAgICBKU09iamVjdCogcmVzdWx0T2JqZWN0ID0gY29uc3RydWN0RW1wdHlPYmpl
Y3QoZXhlYyk7CisgICAgcmVzdWx0T2JqZWN0LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLmRvbmUsIGpzQm9vbGVhbihkb25lKSk7CisgICAgcmVzdWx0T2JqZWN0
LT5wdXREaXJlY3QoZXhlYy0+dm0oKSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlLCB2YWx1
ZSk7CisgICAgcmV0dXJuIHJlc3VsdE9iamVjdDsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlv
bnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjRiZWYzODgzNWFhZWVlZmFlYzEyYzgwYTk1ZWIxMzNiNzhkYWRkMjQKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JdGVyYXRvck9w
ZXJhdGlvbnMuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IFl1
c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgSXRlcmF0b3JPcGVyYXRpb25zX2gKKyNk
ZWZpbmUgSXRlcmF0b3JPcGVyYXRpb25zX2gKKworI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNp
bmNsdWRlICJKU09iamVjdC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworSlNWYWx1ZSBpdGVyYXRv
ck5leHQoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVyYXRvciwgSlNWYWx1ZSk7CitKU1ZhbHVlIGl0
ZXJhdG9yTmV4dChFeGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJhdG9yKTsKK0pTVmFsdWUgaXRlcmF0
b3JWYWx1ZShFeGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJSZXN1bHQpOworYm9vbCBpdGVyYXRvckNv
bXBsZXRlKEV4ZWNTdGF0ZSosIEpTVmFsdWUgaXRlclJlc3VsdCk7CitKU1ZhbHVlIGl0ZXJhdG9y
U3RlcChFeGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJhdG9yKTsKK3ZvaWQgaXRlcmF0b3JDbG9zZShF
eGVjU3RhdGUqLCBKU1ZhbHVlIGl0ZXJhdG9yKTsKK0pTT2JqZWN0KiBjcmVhdGVJdGVyUmVzdWx0
T2JqZWN0KEV4ZWNTdGF0ZSosIEpTVmFsdWUsIGJvb2wgZG9uZSk7CisKK30KKworI2VuZGlmIC8v
ICFkZWZpbmVkKEl0ZXJhdG9yT3BlcmF0aW9uc19oKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKaW5kZXggMzNiYWI3MWI2NzkwMjg4OTY3
OTUyNjNhNGZjNTlhM2VjOGRjM2RiZi4uZGFjNTYyYjFkOWQ5M2NmYzU3NmNkN2IxNzk3YzMyZTAw
MmM1ZWZhNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUl0ZXJhdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
SXRlcmF0b3IuY3BwCkBAIC0zNSwxMzIgKzM1LDE0IEBACiAKIGNvbnN0IENsYXNzSW5mbyBKU0Fy
cmF5SXRlcmF0b3I6OnNfaW5mbyA9IHsgIkFycmF5SXRlcmF0b3IiLCAmQmFzZTo6c19pbmZvLCAw
LCBDUkVBVEVfTUVUSE9EX1RBQkxFKEpTQXJyYXlJdGVyYXRvcikgfTsKIAotc3RhdGljIEVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHRLZXkoRXhlY1N0YXRlKik7
Ci1zdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yTmV4dFZh
bHVlKEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJy
YXlJdGVyYXRvck5leHRHZW5lcmljKEV4ZWNTdGF0ZSopOwotCi12b2lkIEpTQXJyYXlJdGVyYXRv
cjo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBB
cnJheUl0ZXJhdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KQordm9pZCBK
U0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqLCBB
cnJheUl0ZXJhdGlvbktpbmQga2luZCwgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0KQogewogICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKICAgICBBU1NFUlQoaW5oZXJpdHMoaW5mbygpKSk7
Ci0gICAgbV9pdGVyYXRpb25LaW5kID0ga2luZDsKLSAgICBtX2l0ZXJhdGVkT2JqZWN0LnNldCh2
bSwgdGhpcywgaXRlcmF0ZWRPYmplY3QpOwotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2Ug
QXJyYXlJdGVyYXRlS2V5OgotICAgICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgYXJyYXlJdGVyYXRvck5l
eHRLZXksIERvbnRFbnVtLCAwLCBBcnJheUl0ZXJhdG9yTmV4dEtleUludHJpbnNpYyk7Ci0gICAg
ICAgIGJyZWFrOwotICAgIGNhc2UgQXJyYXlJdGVyYXRlVmFsdWU6Ci0gICAgICAgIEpTQ19OQVRJ
VkVfSU5UUklOU0lDX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZh
dGVOYW1lLCBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlLCBEb250RW51bSwgMCwgQXJyYXlJdGVyYXRv
ck5leHRWYWx1ZUludHJpbnNpYyk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIEpTQ19OQVRJVkVfSU5UUklOU0lDX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJh
dG9yTmV4dFByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMsIERvbnRFbnVtLCAw
LCBBcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWNJbnRyaW5zaWMpOwotICAgICAgICBicmVhazsKLSAg
ICB9Ci0KLX0KLSAgICAKLSAgICAKLXZvaWQgSlNBcnJheUl0ZXJhdG9yOjp2aXNpdENoaWxkcmVu
KEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi17Ci0gICAgSlNBcnJheUl0ZXJh
dG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTQXJyYXlJdGVyYXRvcio+KGNlbGwpOwotICAgIEFT
U0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwgaW5mbygpKTsKLSAgICBCYXNlOjp2
aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwotICAgIHZpc2l0b3IuYXBwZW5kKCZ0
aGlzT2JqZWN0LT5tX2l0ZXJhdGVkT2JqZWN0KTsKLX0KLQotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KENhbGxGcmFtZSogY2FsbEZyYW1lLCBBcnJheUl0ZXJhdGlv
bktpbmQga2luZCwgc2l6ZV90IGluZGV4LCBKU1ZhbHVlIHJlc3VsdCwgYm9vbCBkb25lKQotewot
ICAgIGlmIChkb25lKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+
dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKTsKLSAgICAKLSAgICBzd2l0Y2ggKGtpbmQg
JiB+QXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7Ci0gICAgY2FzZSBBcnJheUl0ZXJhdGVLZXk6Ci0g
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1iZXIoaW5kZXgpKTsKLSAgICAgICAg
Ci0gICAgY2FzZSBBcnJheUl0ZXJhdGVWYWx1ZToKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShyZXN1bHQpOwotICAgICAgICAKLSAgICBjYXNlIEFycmF5SXRlcmF0ZUtleVZhbHVlOiB7
Ci0gICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIGFyZ3M7Ci0gICAgICAgIGFyZ3MuYXBwZW5k
KGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIGFyZ3MuYXBwZW5kKHJlc3VsdCk7Ci0gICAgICAg
IEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBjYWxsRnJhbWUtPmNhbGxlZSgpLT5nbG9i
YWxPYmplY3QoKTsKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjb25zdHJ1Y3RBcnJh
eShjYWxsRnJhbWUsIDAsIGdsb2JhbE9iamVjdCwgYXJncykpOwotICAgICAgICAKLSAgICB9Ci0g
ICAgZGVmYXVsdDoKLSAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICB9
Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpOwotfQogCi1zdGF0aWMgaW5s
aW5lIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHQoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgSlNBcnJheUl0ZXJhdG9yKiBpdGVyYXRvciA9IGpzRHlu
YW1pY0Nhc3Q8SlNBcnJheUl0ZXJhdG9yKj4oY2FsbEZyYW1lLT50aGlzVmFsdWUoKSk7Ci0gICAg
aWYgKCFpdGVyYXRvcikgewotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJvd1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0
ZXJhbCgiQ2Fubm90IGNhbGwgQXJyYXlJdGVyYXRvci5uZXh0KCkgb24gYSBub24tQXJyYXlJdGVy
YXRvciBvYmplY3QiKSkpOwotICAgIH0KLSAgICBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QgPSBp
dGVyYXRvci0+aXRlcmF0ZWRPYmplY3QoKTsKLSAgICBzaXplX3QgaW5kZXggPSBpdGVyYXRvci0+
bmV4dEluZGV4KCk7Ci0gICAgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQgPSBpdGVyYXRvci0+aXRl
cmF0aW9uS2luZCgpOwotICAgIEpTVmFsdWUganNMZW5ndGggPSBKU1ZhbHVlKGl0ZXJhdGVkT2Jq
ZWN0KS5nZXQoY2FsbEZyYW1lLCBjYWxsRnJhbWUtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgpOwot
ICAgIGlmIChjYWxsRnJhbWUtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKGpzTnVsbCgpKTsKLSAgICAKLSAgICBzaXplX3QgbGVuZ3RoID0ganNMZW5ndGgu
dG9VSW50MzIoY2FsbEZyYW1lKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRFeGNlcHRpb24oKSkK
LSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0gICAgCi0gICAgaWYg
KGluZGV4ID49IGxlbmd0aCkgewotICAgICAgICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgICAg
IHJldHVybiBjcmVhdGVJdGVyYXRvclJlc3VsdChjYWxsRnJhbWUsIGtpbmQsIGluZGV4LCBqc1Vu
ZGVmaW5lZCgpLCB0cnVlKTsKLSAgICB9Ci0gICAgaWYgKEpTVmFsdWUgcmVzdWx0ID0gaXRlcmF0
ZWRPYmplY3QtPnRyeUdldEluZGV4UXVpY2tseShpbmRleCkpIHsKLSAgICAgICAgaXRlcmF0b3It
PnNldE5leHRJbmRleChpbmRleCArIDEpOwotICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JS
ZXN1bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwgcmVzdWx0LCBmYWxzZSk7Ci0gICAgfQotICAg
IAotICAgIEpTVmFsdWUgcmVzdWx0ID0ganNVbmRlZmluZWQoKTsKLSAgICBQcm9wZXJ0eVNsb3Qg
c2xvdChpdGVyYXRlZE9iamVjdCk7Ci0gICAgaWYgKGtpbmQgPiBBcnJheUl0ZXJhdGVTcGFyc2VU
YWcpIHsKLSAgICAgICAgLy8gV2UgYXNzdW1lIHRoYXQgdGhlIGluZGV4ZWQgcHJvcGVydHkgd2ls
bCBiZSBhbiBvd24gcHJvcGVydHkgc28gY2FjaGUgdGhlIGdldE93blByb3BlcnR5Ci0gICAgICAg
IC8vIG1ldGhvZCBsb2NhbGx5Ci0gICAgICAgIGF1dG8gZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eCA9IGl0ZXJhdGVkT2JqZWN0LT5tZXRob2RUYWJsZSgpLT5nZXRPd25Qcm9wZXJ0eVNsb3RCeUlu
ZGV4OwotICAgICAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHsKLSAgICAgICAgICAgIGlmIChn
ZXRPd25Qcm9wZXJ0eVNsb3RCeUluZGV4KGl0ZXJhdGVkT2JqZWN0LCBjYWxsRnJhbWUsIGluZGV4
LCBzbG90KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2FsbEZy
YW1lLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoaXRlcmF0ZWRPYmplY3QtPmdldFByb3BlcnR5U2xvdChjYWxsRnJhbWUsIGlu
ZGV4LCBzbG90KSkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9IHNsb3QuZ2V0VmFsdWUoY2Fs
bEZyYW1lLCBpbmRleCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBpbmRleCsrOwotICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChpdGVyYXRlZE9i
amVjdC0+Z2V0UHJvcGVydHlTbG90KGNhbGxGcmFtZSwgaW5kZXgsIHNsb3QpKQotICAgICAgICBy
ZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwotICAgIAotICAgIGlmIChp
bmRleCA9PSBsZW5ndGgpCi0gICAgICAgIGl0ZXJhdG9yLT5maW5pc2goKTsKLSAgICBlbHNlCi0g
ICAgICAgIGl0ZXJhdG9yLT5zZXROZXh0SW5kZXgoaW5kZXggKyAxKTsKLSAgICByZXR1cm4gY3Jl
YXRlSXRlcmF0b3JSZXN1bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwganNVbmRlZmluZWQoKSwg
aW5kZXggPT0gbGVuZ3RoKTsKLX0KLSAgICAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
YXJyYXlJdGVyYXRvck5leHRLZXkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0gICAgcmV0dXJu
IGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7Ci19Ci0gICAgCi1FbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0VmFsdWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUp
Ci17Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7Ci19Ci0gICAgCi1F
bmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0R2VuZXJpYyhDYWxs
RnJhbWUqIGNhbGxGcmFtZSkKLXsKLSAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5leHQoY2FsbEZy
YW1lKTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdGVkT2JqZWN0
UHJpdmF0ZU5hbWUsIGl0ZXJhdGVkT2JqZWN0KTsKKyAgICBwdXREaXJlY3Qodm0sIHZtLnByb3Bl
cnR5TmFtZXMtPmFycmF5SXRlcmF0b3JOZXh0SW5kZXhQcml2YXRlTmFtZSwganNOdW1iZXIoMCkp
OworICAgIHB1dERpcmVjdCh2bSwgdm0ucHJvcGVydHlOYW1lcy0+YXJyYXlJdGVyYXRpb25LaW5k
UHJpdmF0ZU5hbWUsIGpzTnVtYmVyKGtpbmQpKTsKIH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRlcmF0b3IuaAppbmRleCA3YmIwZmM1ZDM2OWNjMDc0
MTIzNjdiNmI5ODU5Y2E5NWI2NTFkNjhjLi4yZTk3NmJlNDU4OGEyYzgzYWNiN2UwMzJkMTU4ODJk
YzJhMGExYjQ4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Fy
cmF5SXRlcmF0b3IuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5
SXRlcmF0b3IuaApAQCAtMzMsMTEgKzMzLDcgQEAKIGVudW0gQXJyYXlJdGVyYXRpb25LaW5kIDog
dWludDMyX3QgewogICAgIEFycmF5SXRlcmF0ZUtleSwKICAgICBBcnJheUl0ZXJhdGVWYWx1ZSwK
LSAgICBBcnJheUl0ZXJhdGVLZXlWYWx1ZSwKLSAgICBBcnJheUl0ZXJhdGVTcGFyc2VUYWcgPSA0
LAotICAgIEFycmF5SXRlcmF0ZVNwYXJzZUtleSwKLSAgICBBcnJheUl0ZXJhdGVTcGFyc2VWYWx1
ZSwKLSAgICBBcnJheUl0ZXJhdGVTcGFyc2VLZXlWYWx1ZQorICAgIEFycmF5SXRlcmF0ZUtleVZh
bHVlCiB9OwogCiBjbGFzcyBKU0FycmF5SXRlcmF0b3IgOiBwdWJsaWMgSlNOb25GaW5hbE9iamVj
dCB7CkBAIC01OSwzMCArNTUsMTQgQEAgY2xhc3MgSlNBcnJheUl0ZXJhdG9yIDogcHVibGljIEpT
Tm9uRmluYWxPYmplY3QgewogICAgICAgICByZXR1cm4gaW5zdGFuY2U7CiAgICAgfQogCi0gICAg
QXJyYXlJdGVyYXRpb25LaW5kIGl0ZXJhdGlvbktpbmQoKSBjb25zdCB7IHJldHVybiBtX2l0ZXJh
dGlvbktpbmQ7IH0KLSAgICBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QoKSBjb25zdCB7IHJldHVy
biBtX2l0ZXJhdGVkT2JqZWN0LmdldCgpOyB9Ci0gICAgc2l6ZV90IG5leHRJbmRleCgpIGNvbnN0
IHsgcmV0dXJuIG1fbmV4dEluZGV4OyB9Ci0gICAgdm9pZCBzZXROZXh0SW5kZXgoc2l6ZV90IG5l
eHRJbmRleCkgeyBtX25leHRJbmRleCA9IG5leHRJbmRleDsgfQotICAgIHZvaWQgZmluaXNoKCkg
eyBtX25leHRJbmRleCA9IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKTsgfQot
ICAgIAogICAgIHVzaW5nIEpTTm9uRmluYWxPYmplY3Q6OmFycmF5U3RvcmFnZU9yTnVsbDsKLSAg
ICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mSXRlcmF0aW9uS2luZCgpIHsgcmV0dXJuIE9CSkVD
VF9PRkZTRVRPRihKU0FycmF5SXRlcmF0b3IsIG1faXRlcmF0aW9uS2luZCk7IH0KLSAgICBzdGF0
aWMgcHRyZGlmZl90IG9mZnNldE9mSXRlcmF0ZWRPYmplY3QoKSB7IHJldHVybiBPQkpFQ1RfT0ZG
U0VUT0YoSlNBcnJheUl0ZXJhdG9yLCBtX2l0ZXJhdGVkT2JqZWN0KTsgfQotICAgIHN0YXRpYyBw
dHJkaWZmX3Qgb2Zmc2V0T2ZOZXh0SW5kZXgoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNB
cnJheUl0ZXJhdG9yLCBtX25leHRJbmRleCk7IH0KLQogcHJpdmF0ZToKICAgICBKU0FycmF5SXRl
cmF0b3IoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKICAgICAgICAgOiBCYXNlKHZtLCBz
dHJ1Y3R1cmUpCi0gICAgICAgICwgbV9uZXh0SW5kZXgoMCkKICAgICB7CiAgICAgfQogCiAgICAg
dm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlJdGVyYXRpb25L
aW5kLCBKU09iamVjdCogaXRlcmF0ZWRPYmplY3QpOwotICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hp
bGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLSAgICAKLSAgICBBcnJheUl0ZXJhdGlvbktp
bmQgbV9pdGVyYXRpb25LaW5kOwotICAgIFdyaXRlQmFycmllcjxKU09iamVjdD4gbV9pdGVyYXRl
ZE9iamVjdDsKLSAgICB1aW50MzJfdCBtX25leHRJbmRleDsKIH07CiAKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAppbmRleCA2YmE5MjJm
NzUwMTMxOTgzYzVlYzExOWQ4NzkzNzI3MjQzMDc5NmEwLi4wNWFlMjJiOGFhZDljYmNiYzkyOGUy
MTljYjVmYTllNTgyN2ZhNWRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCkBAIC00MjcsNiArNDI3LDkgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6aW5pdChWTSYgdm0pCiAgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0
eU5hbWVzLT5hYnNQcml2YXRlTmFtZSwgcHJpdmF0ZUZ1bmNBYnMsIERvbnRFbnVtIHwgRG9udERl
bGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3BlcnR5
TmFtZXMtPmZsb29yUHJpdmF0ZU5hbWUsIHByaXZhdGVGdW5jRmxvb3IsIERvbnRFbnVtIHwgRG9u
dERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZvKHZtLnByb3Bl
cnR5TmFtZXMtPmlzRmluaXRlUHJpdmF0ZU5hbWUsIHByaXZhdGVGdW5jSXNGaW5pdGUsIERvbnRF
bnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJbmZv
KHZtLnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZEtleVByaXZhdGVOYW1lLCBqc051
bWJlcihBcnJheUl0ZXJhdGVLZXkpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSks
CisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5hcnJheUl0ZXJh
dGlvbktpbmRWYWx1ZVByaXZhdGVOYW1lLCBqc051bWJlcihBcnJheUl0ZXJhdGVWYWx1ZSksIERv
bnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKKyAgICAgICAgR2xvYmFsUHJvcGVydHlJ
bmZvKHZtLnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZEtleVZhbHVlUHJpdmF0ZU5h
bWUsIGpzTnVtYmVyKEFycmF5SXRlcmF0ZUtleVZhbHVlKSwgRG9udEVudW0gfCBEb250RGVsZXRl
IHwgUmVhZE9ubHkpLAogICAgIH07CiAgICAgYWRkU3RhdGljR2xvYmFscyhzdGF0aWNHbG9iYWxz
LCBXVEZfQVJSQVlfTEVOR1RIKHN0YXRpY0dsb2JhbHMpKTsKICAgICAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvbWlzZUNvbnN0cnVjdG9yLmNwcAppbmRl
eCBmMWEyZTU2MmY5YWJmNDAyYWI2MzhkYzA5YzZlZmMzODBkMWM1YjRkLi5hZmRmYzI3ZDIwYTg2
NWEzNDNhZjIxZDVjNzQ4OGRjNDM2NWIxNzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNlQ29uc3RydWN0b3IuY3BwCkBAIC0yOSw2ICsyOSw3
IEBACiAjaWYgRU5BQkxFKFBST01JU0VTKQogCiAjaW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRl
ICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgog
I2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU1Byb21pc2UuaCIKQEAgLTIz
MiwxMDQgKzIzMyw1NyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNv
bnN0cnVjdG9yRnVuY1JlamVjdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShkZWZlcnJlZC0+cHJvbWlzZSgpKTsKIH0KIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNlKEV4ZWNTdGF0ZSogZXhlYykKK3N0
YXRpYyB2b2lkIHBlcmZvcm1Qcm9taXNlUmFjZUxvb3AoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVl
IGl0ZXJhdG9yLCBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQsIEpTVmFsdWUgQykKIHsKLSAg
ICAvLyAtLSBQcm9taXNlLnJhY2UoaXRlcmFibGUpIC0tCi0gICAgSlNWYWx1ZSBpdGVyYWJsZSA9
IGV4ZWMtPmFyZ3VtZW50KDApOwotICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7Ci0KLSAgICAvLyAx
LiBMZXQgJ0MnIGJlIHRoZSB0aGlzIHZhbHVlLgotICAgIEpTVmFsdWUgQyA9IGV4ZWMtPnRoaXNW
YWx1ZSgpOwotCi0gICAgLy8gMi4gTGV0ICdkZWZlcnJlZCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxs
aW5nIEdldERlZmVycmVkKEMpLgotICAgIEpTVmFsdWUgZGVmZXJyZWRWYWx1ZSA9IGNyZWF0ZUpT
UHJvbWlzZURlZmVycmVkRnJvbUNvbnN0cnVjdG9yKGV4ZWMsIEMpOwotCi0gICAgLy8gMy4gUmV0
dXJuSWZBYnJ1cHQoZGVmZXJyZWQpLgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKLQotICAgIEpTUHJv
bWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IGpzQ2FzdDxKU1Byb21pc2VEZWZlcnJlZCo+KGRlZmVy
cmVkVmFsdWUpOwotCi0gICAgLy8gNC4gTGV0ICdpdGVyYXRvcicgYmUgdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIEdldEl0ZXJhdG9yKGl0ZXJhYmxlKS4KLSAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuY3Rp
b24gPSBpdGVyYWJsZS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRl
TmFtZSk7Ci0gICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotCi0gICAgQ2Fs
bERhdGEgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhOwotICAgIENhbGxUeXBlIGl0ZXJhdG9yRnVu
Y3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVu
Y3Rpb25DYWxsRGF0YSk7Ci0gICAgaWYgKGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxs
VHlwZU5vbmUpIHsKLSAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0gICAg
fQotCi0gICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0aW9uQXJndW1lbnRzOwotICAgIEpTVmFsdWUg
aXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25D
YWxsVHlwZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYWJsZSwgaXRlcmF0b3JGdW5j
dGlvbkFyZ3VtZW50cyk7Ci0KLSAgICAvLyA1LiBSZWplY3RJZkFicnVwdChpdGVyYXRvciwgZGVm
ZXJyZWQpLgotICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLQogICAgIC8v
IDYuIFJlcGVhdAogICAgIGRvIHsKICAgICAgICAgLy8gaS4gTGV0ICduZXh0JyBiZSB0aGUgcmVz
dWx0IG9mIGNhbGxpbmcgSXRlcmF0b3JTdGVwKGl0ZXJhdG9yKS4KLSAgICAgICAgSlNWYWx1ZSBu
ZXh0RnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVz
LT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSk7Ci0gICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRp
b24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9u
KGV4ZWMsIGRlZmVycmVkKSk7Ci0KLSAgICAgICAgQ2FsbERhdGEgbmV4dEZ1bmN0aW9uQ2FsbERh
dGE7Ci0gICAgICAgIENhbGxUeXBlIG5leHRGdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEo
bmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsRGF0YSk7Ci0gICAgICAgIGlmIChuZXh0RnVu
Y3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKLSAgICAgICAgICAgIHRocm93VHlwZUVy
cm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWpl
Y3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLSAgICAgICAgfQorICAgICAgICBKU1ZhbHVlIG5leHQg
PSBpdGVyYXRvclN0ZXAoZXhlYywgaXRlcmF0b3IpOwogCi0gICAgICAgIE1hcmtlZEFyZ3VtZW50
QnVmZmVyIG5leHRGdW5jdGlvbkFyZ3VtZW50czsKLSAgICAgICAgbmV4dEZ1bmN0aW9uQXJndW1l
bnRzLmFwcGVuZChqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgSlNWYWx1ZSBuZXh0ID0gY2FsbChl
eGVjLCBuZXh0RnVuY3Rpb24sIG5leHRGdW5jdGlvbkNhbGxUeXBlLCBuZXh0RnVuY3Rpb25DYWxs
RGF0YSwgaXRlcmF0b3IsIG5leHRGdW5jdGlvbkFyZ3VtZW50cyk7Ci0gICAgICAgIAogICAgICAg
ICAvLyBpaS4gUmVqZWN0SWZBYnJ1cHQobmV4dCwgZGVmZXJyZWQpLgogICAgICAgICBpZiAoZXhl
Yy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFi
cnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotICAgIAorICAgICAgICAgICAgcmV0dXJu
OworCiAgICAgICAgIC8vIGlpaS4gSWYgJ25leHQnIGlzIGZhbHNlLCByZXR1cm4gZGVmZXJyZWQu
W1tQcm9taXNlXV0uCi0gICAgICAgIC8vIE5vdGU6IFdlIGltcGxlbWVudCB0aGlzIGFzIGFuIGl0
ZXJhdGlvblRlcm1pbmF0b3IKLSAgICAgICAgaWYgKG5leHQgPT0gdm0uaXRlcmF0aW9uVGVybWlu
YXRvci5nZXQoKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGVmZXJyZWQt
PnByb21pc2UoKSk7Ci0gICAgICAgIAorICAgICAgICBpZiAobmV4dC5pc0ZhbHNlKCkpCisgICAg
ICAgICAgICByZXR1cm47CisKICAgICAgICAgLy8gaXYuIExldCAnbmV4dFZhbHVlJyBiZSB0aGUg
cmVzdWx0IG9mIGNhbGxpbmcgSXRlcmF0b3JWYWx1ZShuZXh0KS4KICAgICAgICAgLy8gdi4gUmVq
ZWN0SWZBYnJ1cHQobmV4dFZhbHVlLCBkZWZlcnJlZCkuCi0gICAgICAgIC8vIE5vdGU6ICduZXh0
JyBpcyBhbHJlYWR5IHRoZSB2YWx1ZSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLgor
ICAgICAgICBKU1ZhbHVlIG5leHRWYWx1ZSA9IGl0ZXJhdG9yVmFsdWUoZXhlYywgbmV4dCk7Cisg
ICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybjsKIAog
ICAgICAgICAvLyB2aS4gTGV0ICduZXh0UHJvbWlzZScgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IEludm9rZShDLCAicmVzb2x2ZSIsIChuZXh0VmFsdWUpKS4KLSAgICAgICAgSlNWYWx1ZSByZXNv
bHZlRnVuY3Rpb24gPSBDLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5yZXNvbHZlKTsKKyAg
ICAgICAgSlNWYWx1ZSByZXNvbHZlRnVuY3Rpb24gPSBDLmdldChleGVjLCBleGVjLT52bSgpLnBy
b3BlcnR5TmFtZXMtPnJlc29sdmUpOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkp
Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVj
LCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIENhbGxEYXRhIHJl
c29sdmVGdW5jdGlvbkNhbGxEYXRhOwogICAgICAgICBDYWxsVHlwZSByZXNvbHZlRnVuY3Rpb25D
YWxsVHlwZSA9IGdldENhbGxEYXRhKHJlc29sdmVGdW5jdGlvbiwgcmVzb2x2ZUZ1bmN0aW9uQ2Fs
bERhdGEpOwogICAgICAgICBpZiAocmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVO
b25lKSB7CiAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Cisg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1
ZmZlciByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAgICAgIHJlc29sdmVGdW5jdGlvbkFy
Z3VtZW50cy5hcHBlbmQobmV4dCk7CisgICAgICAgIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cy5h
cHBlbmQobmV4dFZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSBuZXh0UHJvbWlzZSA9IGNhbGwoZXhl
YywgcmVzb2x2ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25DYWxsVHlwZSwgcmVzb2x2ZUZ1bmN0
aW9uQ2FsbERhdGEsIEMsIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cyk7CiAKICAgICAgICAgLy8g
dmlpLiBSZWplY3RJZkFicnVwdChuZXh0UHJvbWlzZSwgZGVmZXJyZWQpLgogICAgICAgICBpZiAo
ZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgIC8vIHZpaWkuIExldCAncmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
SW52b2tlKG5leHRQcm9taXNlLCAidGhlbiIsIChkZWZlcnJlZC5bW1Jlc29sdmVdXSwgZGVmZXJy
ZWQuW1tSZWplY3RdXSkpLgotICAgICAgICBKU1ZhbHVlIHRoZW5GdW5jdGlvbiA9IG5leHRQcm9t
aXNlLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT50aGVuKTsKKyAgICAgICAgSlNWYWx1ZSB0
aGVuRnVuY3Rpb24gPSBuZXh0UHJvbWlzZS5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5h
bWVzLT50aGVuKTsKICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAg
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQp
KTsKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICBDYWxsRGF0YSB0aGVuRnVuY3Rpb25D
YWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgdGhlbkZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxs
RGF0YSh0aGVuRnVuY3Rpb24sIHRoZW5GdW5jdGlvbkNhbGxEYXRhKTsKICAgICAgICAgaWYgKHRo
ZW5GdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewogICAgICAgICAgICAgdGhyb3dU
eXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVw
dFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgdGhlbkZ1bmN0aW9uQXJndW1lbnRz
OwpAQCAtMzQwLDE0ICsyOTQsMTMgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1By
b21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNlKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICAvLyBp
eC4gUmVqZWN0SWZBYnJ1cHQocmVzdWx0LCBkZWZlcnJlZCkuCiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0
UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm47CiAgICAgfSB3
aGlsZSAodHJ1ZSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNl
Q29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKK0VuY29kZWRKU1ZhbHVlIEpTQ19I
T1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmFjZShFeGVjU3RhdGUqIGV4ZWMpCiB7
Ci0gICAgLy8gLS0gUHJvbWlzZS5hbGwoaXRlcmFibGUpIC0tCi0KKyAgICAvLyAtLSBQcm9taXNl
LnJhY2UoaXRlcmFibGUpIC0tCiAgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50
KDApOwogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAKQEAgLTM2MSw5ICszMTQsNiBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVj
U3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOwogCi0gICAgLy8gTk9URTogQSBub24t
YWJydXB0IGNvbXBsZXRpb24gb2YgY3JlYXRlSlNQcm9taXNlRGVmZXJyZWRGcm9tQ29uc3RydWN0
b3IgaW1wbGllcyB0aGF0Ci0gICAgLy8gQyBhbmQgZGVmZXJyZWRWYWx1ZSBhcmUgb2JqZWN0cy4K
LSAgICBKU09iamVjdCogdGhpc09iamVjdCA9IGFzT2JqZWN0KEMpOwogICAgIEpTUHJvbWlzZURl
ZmVycmVkKiBkZWZlcnJlZCA9IGpzQ2FzdDxKU1Byb21pc2VEZWZlcnJlZCo+KGRlZmVycmVkVmFs
dWUpOwogCiAgICAgLy8gNC4gTGV0ICdpdGVyYXRvcicgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5n
IEdldEl0ZXJhdG9yKGl0ZXJhYmxlKS4KQEAgLTM4NSw0MCArMzM1LDM3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSog
ZXhlYykKICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCiAgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CiAKKyAgICBwZXJm
b3JtUHJvbWlzZVJhY2VMb29wKGV4ZWMsIGl0ZXJhdG9yLCBkZWZlcnJlZCwgQyk7CisgICAgaWYg
KGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBpdGVyYXRvckNsb3NlKGV4ZWMsIGl0ZXJh
dG9yKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShkZWZlcnJlZC0+cHJvbWlzZSgpKTsKK30KKworc3RhdGljIEpTVmFs
dWUgcGVyZm9ybVByb21pc2VBbGwoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJhdG9yLCBK
U1ZhbHVlIEMsIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCkKK3sKKyAgICBKU09iamVjdCog
dGhpc09iamVjdCA9IGFzT2JqZWN0KEMpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKICAg
ICAvLyA2LiBMZXQgJ3ZhbHVlcycgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEFycmF5Q3JlYXRl
KDApLgogICAgIEpTQXJyYXkqIHZhbHVlcyA9IGNvbnN0cnVjdEVtcHR5QXJyYXkoZXhlYywgbnVs
bHB0ciwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCkpOwotICAgIAorCiAgICAgLy8gNy4gTGV0
ICdjb3VudGRvd25Ib2xkZXInIGJlIFJlY29yZCB7IFtbQ291bnRkb3duXV06IDAgfS4KICAgICBO
dW1iZXJPYmplY3QqIGNvdW50ZG93bkhvbGRlciA9IGNvbnN0cnVjdE51bWJlcihleGVjLCB0aGlz
T2JqZWN0LT5nbG9iYWxPYmplY3QoKSwgSlNWYWx1ZSgwKSk7Ci0gICAgCisKICAgICAvLyA4LiBM
ZXQgJ2luZGV4JyBiZSAwLgogICAgIHVuc2lnbmVkIGluZGV4ID0gMDsKLSAgICAKKwogICAgIC8v
IDkuIFJlcGVhdC4KICAgICBkbyB7CiAgICAgICAgIC8vIGkuIExldCAnbmV4dCcgYmUgdGhlIHJl
c3VsdCBvZiBjYWxsaW5nIEl0ZXJhdG9yU3RlcChpdGVyYXRvcikuCi0gICAgICAgIEpTVmFsdWUg
bmV4dEZ1bmN0aW9uID0gaXRlcmF0b3IuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1l
cy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlv
bihleGVjLCBkZWZlcnJlZCkpOwotCi0gICAgICAgIENhbGxEYXRhIG5leHRGdW5jdGlvbkNhbGxE
YXRhOwotICAgICAgICBDYWxsVHlwZSBuZXh0RnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRh
KG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEpOwotICAgICAgICBpZiAobmV4dEZ1
bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVF
cnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVq
ZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBNYXJrZWRBcmd1
bWVudEJ1ZmZlciBuZXh0RnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAgICAgIG5leHRGdW5jdGlvbkFy
Z3VtZW50cy5hcHBlbmQoanNVbmRlZmluZWQoKSk7Ci0gICAgICAgIEpTVmFsdWUgbmV4dCA9IGNh
bGwoZXhlYywgbmV4dEZ1bmN0aW9uLCBuZXh0RnVuY3Rpb25DYWxsVHlwZSwgbmV4dEZ1bmN0aW9u
Q2FsbERhdGEsIGl0ZXJhdG9yLCBuZXh0RnVuY3Rpb25Bcmd1bWVudHMpOwotICAgICAgICAKLSAg
ICAgICAgLy8gaWkuIFJlamVjdElmQWJydXB0KG5leHQsIGRlZmVycmVkKS4KKyAgICAgICAgSlNW
YWx1ZSBuZXh0ID0gaXRlcmF0b3JTdGVwKGV4ZWMsIGl0ZXJhdG9yKTsKICAgICAgICAgaWYgKGV4
ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShh
YnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1Vu
ZGVmaW5lZCgpOwogCiAgICAgICAgIC8vIGlpaS4gSWYgJ25leHQnIGlzIGZhbHNlLAotICAgICAg
ICAvLyBOb3RlOiBXZSBpbXBsZW1lbnQgdGhpcyBhcyBhbiBpdGVyYXRpb25UZXJtaW5hdG9yCi0g
ICAgICAgIGlmIChuZXh0ID09IHZtLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpIHsKKyAgICAg
ICAgaWYgKG5leHQuaXNGYWxzZSgpKSB7CiAgICAgICAgICAgICAvLyBhLiBJZiAnaW5kZXgnIGlz
IDAsCiAgICAgICAgICAgICBpZiAoIWluZGV4KSB7CiAgICAgICAgICAgICAgICAgLy8gYS4gTGV0
ICdyZXNvbHZlUmVzdWx0JyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcgdGhlIFtbQ2FsbF1dIGlu
dGVybmFsIG1ldGhvZApAQCAtNDI4LDQwICszNzUsNDQgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogCiAg
ICAgICAgICAgICAgICAgLy8gYi4gUmV0dXJuSWZBYnJ1cHQocmVzb2x2ZVJlc3VsdCkuCiAgICAg
ICAgICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpOworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAor
CiAgICAgICAgICAgICAvLyBiLiBSZXR1cm4gZGVmZXJyZWQuW1tQcm9taXNlXV0uCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVkLT5wcm9taXNlKCkpOworICAgICAg
ICAgICAgcmV0dXJuIGRlZmVycmVkLT5wcm9taXNlKCk7CiAgICAgICAgIH0KLSAgICAgICAgCisK
ICAgICAgICAgLy8gaXYuIExldCAnbmV4dFZhbHVlJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
SXRlcmF0b3JWYWx1ZShuZXh0KS4KICAgICAgICAgLy8gdi4gUmVqZWN0SWZBYnJ1cHQobmV4dFZh
bHVlLCBkZWZlcnJlZCkuCi0gICAgICAgIC8vIE5vdGU6ICduZXh0JyBpcyBhbHJlYWR5IHRoZSB2
YWx1ZSwgc28gdGhlcmUgaXMgbm90aGluZyB0byBkbyBoZXJlLgorICAgICAgICBKU1ZhbHVlIG5l
eHRWYWx1ZSA9IGl0ZXJhdG9yVmFsdWUoZXhlYywgbmV4dCk7CisgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOworCisgICAg
ICAgIHZhbHVlcy0+cHVzaChleGVjLCBqc1VuZGVmaW5lZCgpKTsKIAogICAgICAgICAvLyB2aS4g
TGV0ICduZXh0UHJvbWlzZScgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEludm9rZShDLCAicmVz
b2x2ZSIsIChuZXh0VmFsdWUpKS4KICAgICAgICAgSlNWYWx1ZSByZXNvbHZlRnVuY3Rpb24gPSBD
LmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5yZXNvbHZlKTsKICAgICAgICAgaWYgKGV4ZWMt
PmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1
cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybiBqc1VuZGVm
aW5lZCgpOwogCiAgICAgICAgIENhbGxEYXRhIHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhOwogICAg
ICAgICBDYWxsVHlwZSByZXNvbHZlRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKHJlc29s
dmVGdW5jdGlvbiwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGEpOwogICAgICAgICBpZiAocmVzb2x2
ZUZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7CiAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0
UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKICAgICAgICAgfQogCiAgICAgICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHJlc29sdmVG
dW5jdGlvbkFyZ3VtZW50czsKLSAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzLmFwcGVu
ZChuZXh0KTsKKyAgICAgICAgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZChuZXh0VmFs
dWUpOwogICAgICAgICBKU1ZhbHVlIG5leHRQcm9taXNlID0gY2FsbChleGVjLCByZXNvbHZlRnVu
Y3Rpb24sIHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlLCByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YSwg
QywgcmVzb2x2ZUZ1bmN0aW9uQXJndW1lbnRzKTsKIAogICAgICAgICAvLyB2aWkuIFJlamVjdElm
QWJydXB0KG5leHRQcm9taXNlLCBkZWZlcnJlZCkuCiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0
aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
IAogICAgICAgICAvLyB2aWlpLiBMZXQgJ2NvdW50ZG93bkZ1bmN0aW9uJyBiZSBhIG5ldyBidWls
dC1pbiBmdW5jdGlvbiBvYmplY3QgYXMgZGVmaW5lZCBpbiBQcm9taXNlLmFsbCBDb3VudGRvd24g
RnVuY3Rpb25zLgogICAgICAgICBKU0Z1bmN0aW9uKiBjb3VudGRvd25GdW5jdGlvbiA9IGNyZWF0
ZVByb21pc2VBbGxDb3VudGRvd25GdW5jdGlvbih2bSwgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0
KCkpOwotICAgICAgICAKKwogICAgICAgICAvLyBpeC4gU2V0IHRoZSBbW0luZGV4XV0gaW50ZXJu
YWwgc2xvdCBvZiAnY291bnRkb3duRnVuY3Rpb24nIHRvICdpbmRleCcuCiAgICAgICAgIGNvdW50
ZG93bkZ1bmN0aW9uLT5wdXREaXJlY3Qodm0sIHZtLnByb3BlcnR5TmFtZXMtPmluZGV4UHJpdmF0
ZU5hbWUsIEpTVmFsdWUoaW5kZXgpKTsKIApAQCAtNDc3LDEzICs0MjgsMTMgQEAgRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRl
KiBleGVjKQogICAgICAgICAvLyB4aWlpLiBMZXQgJ3Jlc3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBj
YWxsaW5nIEludm9rZShuZXh0UHJvbWlzZSwgInRoZW4iLCAoY291bnRkb3duRnVuY3Rpb24sIGRl
ZmVycmVkLltbUmVqZWN0XV0pKS4KICAgICAgICAgSlNWYWx1ZSB0aGVuRnVuY3Rpb24gPSBuZXh0
UHJvbWlzZS5nZXQoZXhlYywgdm0ucHJvcGVydHlOYW1lcy0+dGhlbik7CiAgICAgICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
YWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNV
bmRlZmluZWQoKTsKIAogICAgICAgICBDYWxsRGF0YSB0aGVuRnVuY3Rpb25DYWxsRGF0YTsKICAg
ICAgICAgQ2FsbFR5cGUgdGhlbkZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YSh0aGVuRnVu
Y3Rpb24sIHRoZW5GdW5jdGlvbkNhbGxEYXRhKTsKICAgICAgICAgaWYgKHRoZW5GdW5jdGlvbkNh
bGxUeXBlID09IENhbGxUeXBlTm9uZSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
Yyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihl
eGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAg
ICAgIH0KIAogICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciB0aGVuRnVuY3Rpb25Bcmd1bWVu
dHM7CkBAIC00OTQsNyArNDQ1LDcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1By
b21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogCiAgICAgICAgIC8vIHhp
di4gUmVqZWN0SWZBYnJ1cHQocmVzdWx0LCBkZWZlcnJlZCkuCiAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0
UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmlu
ZWQoKTsKIAogICAgICAgICAvLyB4di4gU2V0IGluZGV4IHRvIGluZGV4ICsgMS4KICAgICAgICAg
aW5kZXgrKzsKQEAgLTUwMyw2ICs0NTQsNTcgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogICAgICAgICB1
aW50MzJfdCBuZXdDb3VudGRvd25WYWx1ZSA9IGNvdW50ZG93bkhvbGRlci0+aW50ZXJuYWxWYWx1
ZSgpLmFzVUludDMyKCkgKyAxOwogICAgICAgICBjb3VudGRvd25Ib2xkZXItPnNldEludGVybmFs
VmFsdWUodm0sIEpTVmFsdWUobmV3Q291bnRkb3duVmFsdWUpKTsKICAgICB9IHdoaWxlICh0cnVl
KTsKKyAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsK
K30KKworRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1
bmNBbGwoRXhlY1N0YXRlKiBleGVjKQoreworICAgIC8vIC0tIFByb21pc2UuYWxsKGl0ZXJhYmxl
KSAtLQorCisgICAgSlNWYWx1ZSBpdGVyYWJsZSA9IGV4ZWMtPmFyZ3VtZW50KDApOworICAgIFZN
JiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICAvLyAxLiBMZXQgJ0MnIGJlIHRoZSB0aGlzIHZhbHVl
LgorICAgIEpTVmFsdWUgQyA9IGV4ZWMtPnRoaXNWYWx1ZSgpOworCisgICAgLy8gMi4gTGV0ICdk
ZWZlcnJlZCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEdldERlZmVycmVkKEMpLgorICAgIEpT
VmFsdWUgZGVmZXJyZWRWYWx1ZSA9IGNyZWF0ZUpTUHJvbWlzZURlZmVycmVkRnJvbUNvbnN0cnVj
dG9yKGV4ZWMsIEMpOworCisgICAgLy8gMy4gUmV0dXJuSWZBYnJ1cHQoZGVmZXJyZWQpLgorICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKworICAgIC8vIE5PVEU6IEEgbm9uLWFicnVwdCBjb21wbGV0aW9u
IG9mIGNyZWF0ZUpTUHJvbWlzZURlZmVycmVkRnJvbUNvbnN0cnVjdG9yIGltcGxpZXMgdGhhdAor
ICAgIC8vIEMgYW5kIGRlZmVycmVkVmFsdWUgYXJlIG9iamVjdHMuCisgICAgSlNQcm9taXNlRGVm
ZXJyZWQqIGRlZmVycmVkID0ganNDYXN0PEpTUHJvbWlzZURlZmVycmVkKj4oZGVmZXJyZWRWYWx1
ZSk7CisKKyAgICAvLyA0LiBMZXQgJ2l0ZXJhdG9yJyBiZSB0aGUgcmVzdWx0IG9mIGNhbGxpbmcg
R2V0SXRlcmF0b3IoaXRlcmFibGUpLgorICAgIEpTVmFsdWUgaXRlcmF0b3JGdW5jdGlvbiA9IGl0
ZXJhYmxlLmdldChleGVjLCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lKTsK
KyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisKKyAgICBDYWxsRGF0YSBp
dGVyYXRvckZ1bmN0aW9uQ2FsbERhdGE7CisgICAgQ2FsbFR5cGUgaXRlcmF0b3JGdW5jdGlvbkNh
bGxUeXBlID0gZ2V0Q2FsbERhdGEoaXRlcmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNh
bGxEYXRhKTsKKyAgICBpZiAoaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9u
ZSkgeworICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAgICAgICAgcmV0dXJuIEpTVmFs
dWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICB9CisKKyAg
ICBBcmdMaXN0IGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHM7CisgICAgSlNWYWx1ZSBpdGVyYXRv
ciA9IGNhbGwoZXhlYywgaXRlcmF0b3JGdW5jdGlvbiwgaXRlcmF0b3JGdW5jdGlvbkNhbGxUeXBl
LCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhYmxlLCBpdGVyYXRvckZ1bmN0aW9uQXJn
dW1lbnRzKTsKKworICAgIC8vIDUuIFJlamVjdElmQWJydXB0KGl0ZXJhdG9yLCBkZWZlcnJlZCku
CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworCisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBwZXJmb3JtUHJvbWlzZUFsbChleGVjLCBpdGVyYXRvciwgQywgZGVmZXJyZWQpOwor
ICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkgeworICAgICAgICBpdGVyYXRvckNsb3NlKGV4
ZWMsIGl0ZXJhdG9yKTsKKyAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJy
ZWQpKTsKKyAgICB9CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOwogfQogCiBK
U1Byb21pc2UqIGNvbnN0cnVjdFByb21pc2UoRXhlY1N0YXRlKiBleGVjLCBKU0dsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBKU0Z1bmN0aW9uKiByZXNvbHZlcikKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcCBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJhdG9yUHJvdG90eXBlLmNwcAppbmRleCBi
MjIwYjk4NzU4ODVjNDJmOWNlNjM4ZjMyMjI0NzkyYzMyNzYxMDE3Li44MDY3Y2IyMGYwYzM3ZDY2
YTc3OGJlOWQxZWY2YWZkYjNjNmRlODI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQcm90b3R5cGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBA
CiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFwSXRlcmF0b3JQcm90b3R5cGUuaCIK
IAorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQ0pTVmFsdWVJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDZWxsSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTWFwSXRl
cmF0b3IuaCIKQEAgLTQ2LDcgKzQ3LDcgQEAgdm9pZCBNYXBJdGVyYXRvclByb3RvdHlwZTo6Zmlu
aXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0KQogICAgIHZt
LnByb3RvdHlwZU1hcC5hZGRQcm90b3R5cGUodGhpcyk7CiAKICAgICBKU0NfTkFUSVZFX0ZVTkNU
SU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUsIE1hcEl0ZXJhdG9yUHJv
dG90eXBlRnVuY0l0ZXJhdG9yLCBEb250RW51bSwgMCk7Ci0gICAgSlNDX05BVElWRV9GVU5DVElP
Tih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgTWFwSXRlcmF0b3JQ
cm90b3R5cGVGdW5jTmV4dCwgRG9udEVudW0sIDApOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04o
dm0ucHJvcGVydHlOYW1lcy0+bmV4dCwgTWFwSXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCwgRG9u
dEVudW0sIDApOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9y
UHJvdG90eXBlRnVuY0l0ZXJhdG9yKENhbGxGcmFtZSogY2FsbEZyYW1lKQpAQCAtNTksMTIgKzYw
LDEyIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgTWFwSXRlcmF0b3JQcm90b3R5cGVG
dW5jTmV4dChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICBKU01hcEl0ZXJhdG9yKiBpdGVyYXRv
ciA9IGpzRHluYW1pY0Nhc3Q8SlNNYXBJdGVyYXRvcio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkp
OwogICAgIGlmICghaXRlcmF0b3IpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhy
b3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIE1hcEl0ZXJh
dG9yLm5leHQoKSBvbiBhIG5vbi1NYXBJdGVyYXRvciBvYmplY3QiKSkpOwotICAgIAorCiAgICAg
SlNWYWx1ZSByZXN1bHQ7CiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwgcmVzdWx0
KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCByZXN1
bHQsIGZhbHNlKSk7CiAgICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpOworICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUs
IGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIAogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3RvdHlwZS5jcHAKaW5kZXggNTczYWNmYTVj
ZDc2NGIwOWVlNzU0M2IzNDdiNDlhNTExMWU3MDUzNy4uNTI2MWJmM2NhY2MxZDRlMGU0NTc1NTFh
MDIyZGU2N2M5MTk0ZGZmOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2V0SXRlcmF0b3JQcm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlNldEl0ZXJhdG9yUHJvdG90eXBlLmgiCiAKKyNpbmNs
dWRlICJJdGVyYXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5o
IgogI2luY2x1ZGUgIkpTQ2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU1NldEl0ZXJhdG9yLmgi
CkBAIC00Niw3ICs0Nyw3IEBAIHZvaWQgU2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0
aW9uKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB2bS5wcm90b3R5
cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOwogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5w
cm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBTZXRJdGVyYXRvclByb3RvdHlwZUZ1
bmNJdGVyYXRvciwgRG9udEVudW0sIDApOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJv
cGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5hbWUsIFNldEl0ZXJhdG9yUHJvdG90eXBl
RnVuY05leHQsIERvbnRFbnVtLCAwKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3Bl
cnR5TmFtZXMtPm5leHQsIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVtLCAw
KTsKIH0KIAogRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBTZXRJdGVyYXRvclByb3RvdHlw
ZUZ1bmNJdGVyYXRvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTYyLDEwICs2Myw5IEBAIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dChD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZSh0aHJv
d1R5cGVFcnJvcihjYWxsRnJhbWUsIEFTQ0lJTGl0ZXJhbCgiQ2Fubm90IGNhbGwgU2V0SXRlcmF0
b3IubmV4dCgpIG9uIGEgbm9uLVNldEl0ZXJhdG9yIG9iamVjdCIpKSk7CiAKICAgICBpZiAoaXRl
cmF0b3ItPm5leHQoY2FsbEZyYW1lLCByZXN1bHQpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKHJlc3VsdCk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRl
clJlc3VsdE9iamVjdChjYWxsRnJhbWUsIHJlc3VsdCwgZmFsc2UpKTsKICAgICBpdGVyYXRvci0+
ZmluaXNoKCk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnZtKCkuaXRl
cmF0aW9uVGVybWluYXRvci5nZXQoKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVh
dGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwganNVbmRlZmluZWQoKSwgdHJ1ZSkpOwogfQog
Ci0KIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAppbmRleCAwZjczNTQwZjQzNTk2
YTcyNDZlMjk0MjQyYmUwNTJhMWQ0NTY2ZGY4Li40ZTcyNTk5ZDhkMjdlZjVjMzg3NGZiMTI1Njcz
MDIzOTQzYzE0MWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9W
TS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCkBAIC0zOTYs
MTAgKzM5Niw2IEBAIHN0YXRpYyBUaHVua0dlbmVyYXRvciB0aHVua0dlbmVyYXRvckZvckludHJp
bnNpYyhJbnRyaW5zaWMgaW50cmluc2ljKQogICAgICAgICByZXR1cm4gbG9nVGh1bmtHZW5lcmF0
b3I7CiAgICAgY2FzZSBJTXVsSW50cmluc2ljOgogICAgICAgICByZXR1cm4gaW11bFRodW5rR2Vu
ZXJhdG9yOwotICAgIGNhc2UgQXJyYXlJdGVyYXRvck5leHRLZXlJbnRyaW5zaWM6Ci0gICAgICAg
IHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yOwotICAgIGNhc2UgQXJy
YXlJdGVyYXRvck5leHRWYWx1ZUludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGFycmF5SXRlcmF0
b3JOZXh0VmFsdWVUaHVua0dlbmVyYXRvcjsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4g
MDsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2FycmF5LWl0ZXJhdG9ycy1uZXh0LXdpdGgtY2FsbC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3JzLW5leHQtd2l0aC1jYWxsLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmU1NzVkZGViNDE4NWVmMDFlZTk1YzI0NzNhNTM2ODM3MjJjMjBiMzMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWl0ZXJhdG9y
cy1uZXh0LXdpdGgtY2FsbC5qcwpAQCAtMCwwICsxLDExNSBAQAorLy8gVGhpcyB0ZXN0IGNoZWNr
cyB0aGUgYmVoYXZpb3Igb2YgdGhlICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IG1ldGhv
ZHMgd2l0aCBjYWxsLgorCit2YXIgYXJyYXkgPSBbMCwgMSwgMiwgMywgNF07Cit2YXIgYXJyYXlJ
dGVyYXRvciA9IGFycmF5W1N5bWJvbC5pdGVyYXRvcl0oKTsKK3ZhciBhcnJheUl0ZXJhdG9yUHJv
dG90eXBlID0gYXJyYXlJdGVyYXRvci5fX3Byb3RvX187Cit2YXIgYXJyYXlJdGVyYXRvclByb3Rv
dHlwZU5leHQgPSBhcnJheUl0ZXJhdG9yUHJvdG90eXBlLm5leHQ7CisKK2lmIChhcnJheUl0ZXJh
dG9yLmhhc093blByb3BlcnR5KCduZXh0JykpCisgICAgdGhyb3cgIm5leHQgbWV0aG9kIHNob3Vs
ZCBleGlzdHMgb24gJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlIjsKK2lmICghYXJyYXlJdGVyYXRv
clByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcpKQorICAgIHRocm93ICJuZXh0IG1ldGhv
ZCBzaG91bGQgZXhpc3RzIG9uICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJSI7CisKK3ZhciBhcnJh
eTEgPSBbNDIsIDQzLCA0MV07Cit2YXIgYXJyYXkxSXRlcmF0b3IgPSBhcnJheTFbU3ltYm9sLml0
ZXJhdG9yXSgpOwordmFyIGluZGV4ID0gMDsKK3doaWxlICh0cnVlKSB7CisgICAgdmFyIHJlc3Vs
dCA9IGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LmNhbGwoYXJyYXkxSXRlcmF0b3IpOworICAg
IHZhciB2YWx1ZSA9IHJlc3VsdC52YWx1ZTsKKyAgICBpZiAocmVzdWx0LmRvbmUpIHsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGlmICh2YWx1ZSAhPT0gYXJyYXkxW2luZGV4KytdKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworfQoraWYgKGluZGV4ICE9
PSAzKQorICAgIHRocm93ICJFcnJvcjogYmFkIGluZGV4OiAiICsgaW5kZXg7CisKK2Z1bmN0aW9u
IGluY3JlbWVudChpdGVyKSB7CisgICAgcmV0dXJuIGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0
LmNhbGwoaXRlcik7Cit9Cit2YXIgYXJyYXkxID0gWzQyLCA0MywgLTIwXTsKK3ZhciBhcnJheTIg
PSBbNDIsIDQzLCAtMjBdOwordmFyIGFycmF5MUl0ZXJhdG9yID0gYXJyYXkxW1N5bWJvbC5pdGVy
YXRvcl0oKTsKK3ZhciBhcnJheTJJdGVyYXRvciA9IGFycmF5MltTeW1ib2wuaXRlcmF0b3JdKCk7
Citmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkgeworICAgIHZhciB2YWx1ZTEgPSBpbmNyZW1l
bnQoYXJyYXkxSXRlcmF0b3IpLnZhbHVlOworICAgIHZhciB2YWx1ZTIgPSBpbmNyZW1lbnQoYXJy
YXkySXRlcmF0b3IpLnZhbHVlOworICAgIGlmICh2YWx1ZTEgIT09IHZhbHVlMikKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTEgKyAiICIgKyB2YWx1ZTI7Cit9CisK
K3ZhciBhcnJheTEgPSBbIDAsIDEsIDIsIDQsIDUsIDYgXTsKK3ZhciBhcnJheTFJdGVyYXRvciA9
IGFycmF5MVtTeW1ib2wuaXRlcmF0b3JdKCk7CisKK3ZhciB2YWx1ZSA9IGFycmF5MUl0ZXJhdG9y
Lm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gMCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIHZhbHVlOwordmFyIHZhbHVlID0gYXJyYXkxSXRlcmF0b3IubmV4dCgpLnZhbHVl
OworaWYgKHZhbHVlICE9PSAxKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFs
dWU7Cit2YXIgdmFsdWUgPSBhcnJheTFJdGVyYXRvci5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUg
IT09IDIpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK3ZhciB2YWx1
ZSA9IGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LmNhbGwoYXJyYXkxSXRlcmF0b3IpLnZhbHVl
OworaWYgKHZhbHVlICE9PSA0KQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFs
dWU7Cit2YXIgdmFsdWUgPSBhcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dC5jYWxsKGFycmF5MUl0
ZXJhdG9yKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gNSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIHZhbHVlOwordmFyIHZhbHVlID0gYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQu
Y2FsbChhcnJheTFJdGVyYXRvcikudmFsdWU7CitpZiAodmFsdWUgIT09IDYpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK3ZhciB2YWx1ZSA9IGFycmF5SXRlcmF0b3JQ
cm90b3R5cGVOZXh0LmNhbGwoYXJyYXkxSXRlcmF0b3IpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1
bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKwordmFy
IHByaW1pdGl2ZXMgPSBbCisgICAgInN0cmluZyIsCisgICAgNDIsCisgICAgMC4wMywKKyAgICBm
YWxzZSwKKyAgICB0cnVlLAorICAgIFN5bWJvbCgiQ29jb2EiKSwKKyAgICBudWxsLAorICAgIHVu
ZGVmaW5lZAorXTsKK2ZvciAodmFyIHByaW1pdGl2ZSBvZiBwcmltaXRpdmVzKSB7CisgICAgdmFy
IGRpZFRocm93ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBhcnJheUl0ZXJhdG9yUHJvdG90
eXBlTmV4dC5jYWxsKHByaW1pdGl2ZSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBkaWRU
aHJvdyA9IGU7CisgICAgfQorICAgIGlmICghZGlkVGhyb3cpCisgICAgICAgIHRocm93ICJFcnJv
cjogbm8gZXJyb3IgdGhyb3duIjsKKyAgICB2YXIgZXhwZWN0ZWRNZXNzYWdlID0gJ1R5cGVFcnJv
cjogJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUg
QXJyYXkgSXRlcmF0b3IgSW5zdGFuY2UnOworICAgIGlmIChwcmltaXRpdmUgPT0gbnVsbCkKKyAg
ICAgICAgZXhwZWN0ZWRNZXNzYWdlID0gJ1R5cGVFcnJvcjogJUFycmF5SXRlcmF0b3JQcm90b3R5
cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgbm90IGJlIG51bGwgb3IgdW5kZWZpbmVkJzsK
KyAgICBpZiAoU3RyaW5nKGRpZFRocm93KSAhPT0gZXhwZWN0ZWRNZXNzYWdlKQorICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246ICIgKyBkaWRUaHJvdzsKK30KKwordmFyIG5v
blJlbGF0ZWRPYmplY3RzID0gWworICAgIHt9LAorICAgIFtdLAorICAgIG5ldyBEYXRlKCksCisg
ICAgbmV3IEVycm9yKCksCisgICAgT2JqZWN0KFN5bWJvbCgpKSwKKyAgICBuZXcgU3RyaW5nKCJD
YXBwdWNjaW5vIiksCisgICAgbmV3IE51bWJlcig0MiksCisgICAgbmV3IEJvb2xlYW4oZmFsc2Up
LAorICAgIGZ1bmN0aW9uICgpIHsgfSwKK107Citmb3IgKHZhciBvYmplY3Qgb2Ygbm9uUmVsYXRl
ZE9iamVjdHMpIHsKKyAgICB2YXIgZGlkVGhyb3cgPSBudWxsOworICAgIHRyeSB7CisgICAgICAg
IGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LmNhbGwob2JqZWN0KTsKKyAgICB9IGNhdGNoIChl
KSB7CisgICAgICAgIGRpZFRocm93ID0gZTsKKyAgICB9CisgICAgaWYgKCFkaWRUaHJvdykKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBubyBlcnJvciB0aHJvd24iOworICAgIGlmIChTdHJpbmcoZGlk
VGhyb3cpICE9PSAnVHlwZUVycm9yOiAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1
aXJlcyB0aGF0IHx0aGlzfCBiZSBBcnJheSBJdGVyYXRvciBJbnN0YW5jZScpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGRpZFRocm93OworfQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4
dC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3Jz
LW5leHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMzM0YzBlNGE5OWRkNjVkZTJiMjFlOTZlMjRkZjcxOGQ1OGNk
OTc3YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvYXJyYXktaXRlcmF0b3JzLW5leHQuanMKQEAgLTAsMCArMSw5MCBAQAorLy8gVGhpcyB0ZXN0
IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGl0ZXJhdG9yLm5leHQgbWV0aG9kcyBvbiBBcnJh
eSBvYmplY3RzCisKK3ZhciB0ZXN0QXJyYXkgPSBbMSwyLDMsNCw1LDZdCit2YXIga2V5cyA9IHRl
c3RBcnJheS5rZXlzKCk7Cit2YXIgaSA9IDA7Cit3aGlsZSAodHJ1ZSkgeworICAgIHZhciB7ZG9u
ZSwgdmFsdWU6IGtleX0gPSBrZXlzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJl
YWs7CisgICAgaWYgKGtleSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6
ICIgKyBrZXk7CisgICAgaSsrOworfQorCitpZiAodGVzdEFycmF5Lmxlbmd0aCAhPT0gaSkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGtleXMubmV4
dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWU6ICIgKyB2YWx1ZTsKKwordmFyIHZhbHVlcyA9IHRlc3RBcnJheVtTeW1ib2wuaXRl
cmF0b3JdKCk7Cit2YXIgaSA9IDA7Cit3aGlsZSAodHJ1ZSkgeworICAgIHZhciB7ZG9uZSwgdmFs
dWV9ID0gdmFsdWVzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAg
aSsrOworICAgIGlmICh2YWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyB2YWx1ZTsKK30KKworaWYgKHRlc3RBcnJheS5sZW5ndGggIT09IGkpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOworCit2YXIgdmFsdWUgPSB2YWx1ZXMubmV4dCgp
LnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWU6ICIgKyB2YWx1ZTsKKwordmFyIGVudHJpZXMgPSB0ZXN0QXJyYXkuZW50cmllcygpOwor
dmFyIGkgPSAwOworZG8geworICAgIHZhciB7ZG9uZSwgdmFsdWU6IGVudHJ5fSA9IGVudHJpZXMu
bmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAgICBicmVhazsKKyAgICB2YXIgW2tleSwgdmFs
dWVdID0gZW50cnk7CisgICAgaWYgKHZhbHVlICE9PSB0ZXN0QXJyYXlba2V5XSkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZSArICIgIiArIHRlc3RBcnJheVtrZXld
OworICAgIGlmIChrZXkgIT09IGkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAi
ICsga2V5OworICAgIGkrKworICAgIGlmICh2YWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZSArICIgIiArIGk7Cit9IHdoaWxlICghZG9uZSk7CisK
K2lmICh0ZXN0QXJyYXkubGVuZ3RoICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
OiAiICsgaTsKKwordmFyIHZhbHVlID0gZW50cmllcy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUg
IT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOwor
Cit2YXIgZW50cmllcyA9IHRlc3RBcnJheS5lbnRyaWVzKCk7Cit2YXIgaSA9IDA7CitkbyB7Cisg
ICAgdmFyIHtkb25lLCB2YWx1ZTogZW50cnl9ID0gZW50cmllcy5uZXh0KCk7CisgICAgaWYgKGRv
bmUpCisgICAgICAgIGJyZWFrOworICAgIHZhciBba2V5LCB2YWx1ZV0gPSBlbnRyeTsKKyAgICBp
ZiAodmFsdWUgIT09IHRlc3RBcnJheVtrZXldKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIHZhbHVlICsgIiAiICsgdGVzdEFycmF5W2tleV07CisgICAgaWYgKGtleSAhPT0g
aSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7CisgICAgaSsrCisg
ICAgaWYgKGkgJSAyID09IDApCisgICAgICAgIHRlc3RBcnJheVtpXSAqPSAyOworICAgIGlmIChp
IDwgNCkKKyAgICAgICAgdGVzdEFycmF5LnB1c2godGVzdEFycmF5Lmxlbmd0aCkKKyAgICBpZiAo
aSA9PSA0KQorICAgICAgICBkZWxldGUgdGVzdEFycmF5WzRdCisgICAgaWYgKGkgPT0gNSkKKyAg
ICAgICAgdGVzdEFycmF5WzRdID0gNQorfSB3aGlsZSAoIWRvbmUpOworCitpZiAodGVzdEFycmF5
Lmxlbmd0aCAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3Zh
ciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQp
CisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY3VzdG9tLWl0ZXJhdG9ycy5qcyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY3VzdG9tLWl0ZXJhdG9ycy5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mZDY0MTNmZTNiNWU5MDNhZmZlMzgwM2ZkMDA0YzBjYjFmMWM2NGYzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jdXN0b20taXRl
cmF0b3JzLmpzCkBAIC0wLDAgKzEsMzIyIEBACisvLyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhh
dmlvciBvZiBjdXN0b20gaXRlcmFibGUgb2JqZWN0cy4KKwordmFyIHJldHVybkNhbGxlZCA9IGZh
bHNlOwordmFyIGl0ZXIgPSB7CisgICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkg
eworICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZG9uZTogdGhpcy5fX2tleSA9PT0gNDIs
CisgICAgICAgICAgICB2YWx1ZTogdGhpcy5fX2tleSsrCisgICAgICAgIH07CisgICAgfSwKKyAg
ICBbU3ltYm9sLml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsK
KyAgICB9LAorICAgIHJldHVybjogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm5DYWxsZWQg
PSB0cnVlOworICAgIH0KK307Cit2YXIgZXhwZWN0ZWQgPSAwOworZm9yICh2YXIgdmFsdWUgb2Yg
aXRlcikgeworICAgIGlmICh2YWx1ZSAhPT0gZXhwZWN0ZWQrKykKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK30KK2lmIChyZXR1cm5DYWxsZWQpCisgICAgdGhy
b3cgIkVycm9yOiByZXR1cm4gaXMgY2FsbGVkLiI7CisKKworCit2YXIgcmV0dXJuQ2FsbGVkID0g
ZmFsc2U7Cit2YXIgaXRlciA9IHsKKyAgICBfX2tleTogMCwKKyAgICBuZXh0OiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0aGlzLl9fa2V5ID09PSA0
MiwKKyAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9fa2V5KysKKyAgICAgICAgfTsKKyAgICB9LAor
ICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlz
OworICAgIH0sCisgICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybkNhbGxl
ZCA9IHRydWU7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0cnVlLAorICAg
ICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZAorICAgICAgICB9OworICAgIH0KK307CisKK3RyeSB7
CisgICAgZm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgICAgICB0aHJvdyAiRXJyb3I6IFRl
cm1pbmF0ZSBpdGVyYXRpb24uIjsKKyAgICB9Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmlu
ZyhlKSAhPT0gIkVycm9yOiBUZXJtaW5hdGUgaXRlcmF0aW9uLiIpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGU7Cit9CitpZiAoIXJldHVybkNhbGxlZCkKKyAg
ICB0aHJvdyAiRXJyb3I6IHJldHVybiBpcyBub3QgY2FsbGVkLiI7CisKKworCit2YXIgcmV0dXJu
Q2FsbGVkID0gZmFsc2U7Cit2YXIgaXRlciA9IHsKKyAgICBfX2tleTogMCwKKyAgICBuZXh0OiBm
dW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0aGlzLl9f
a2V5ID09PSA0MiwKKyAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9fa2V5KysKKyAgICAgICAgfTsK
KyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybiB0aGlzOworICAgIH0sCisgICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJl
dHVybkNhbGxlZCA9IHRydWU7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0
cnVlLAorICAgICAgICAgICAgdmFsdWU6IHVuZGVmaW5lZAorICAgICAgICB9OworICAgIH0KK307
CisKK2ZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsKKyAgICBicmVhazsKK30KK2lmICghcmV0dXJu
Q2FsbGVkKQorICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIG5vdCBjYWxsZWQuIjsKKworCisK
K3ZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKK3ZhciBpdGVyID0geworICAgIF9fa2V5OiAwLAor
ICAgIGdldCBuZXh0KCkgeworICAgICAgICB0aHJvdyAiRXJyb3I6IGxvb2tpbmcgdXAgbmV4dC4i
OworICAgIH0sCisgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICByZXR1cm46IGZ1bmN0aW9uICgpIHsKKyAgICAgICAg
cmV0dXJuQ2FsbGVkID0gdHJ1ZTsKKyAgICB9Cit9OwordHJ5IHsKKyAgICBmb3IgKHZhciB2YWx1
ZSBvZiBpdGVyKSB7CisgICAgICAgIHRocm93ICJFcnJvcjogSXRlcmF0aW9uIHNob3VsZCBub3Qg
b2NjdXIuIjsKKyAgICB9Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAhPT0gIkVy
cm9yOiBsb29raW5nIHVwIG5leHQuIikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3Ig
dGhyb3duOiAiICsgZTsKK30KK2lmIChyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cgIkVycm9yOiBy
ZXR1cm4gaXMgY2FsbGVkLiI7CisKKworCit2YXIgaXRlciA9IHsKKyAgICBfX2tleTogMCwKKyAg
ICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25l
OiB0aGlzLl9fa2V5ID09PSA0MiwKKyAgICAgICAgICAgIHZhbHVlOiB0aGlzLl9fa2V5KysKKyAg
ICAgICAgfTsKKyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7Cisg
ICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisgICAgZ2V0IHJldHVybigpIHsKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBsb29raW5nIHVwIHJldHVybi4iCisgICAgfQorfTsKK3RyeSB7CisgICAg
Zm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgICAgICB0aHJvdyAiRXJyb3I6IFRlcm1pbmF0
ZSBpdGVyYXRpb24uIjsKKyAgICB9Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAh
PT0gIkVycm9yOiBsb29raW5nIHVwIHJldHVybi4iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCBlcnJvciB0aHJvd246ICIgKyBlOworfQorCisKKwordmFyIHJldHVybkNhbGxlZCA9IGZhbHNl
OwordmFyIGl0ZXIgPSB7CisgICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgewor
ICAgICAgICB0aHJvdyAiRXJyb3I6IG5leHQgaXMgY2FsbGVkLiIKKyAgICB9LAorICAgIFtTeW1i
b2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0s
CisgICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7
CisgICAgICAgIHJldHVybiB7CisgICAgICAgICAgICBkb25lOiB0cnVlLAorICAgICAgICAgICAg
dmFsdWU6IHVuZGVmaW5lZAorICAgICAgICB9OworICAgIH0KK307CisKK3RyeSB7CisgICAgZm9y
ICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgICAgICB0aHJvdyAiRXJyb3I6IFRlcm1pbmF0ZSBp
dGVyYXRpb24uIjsKKyAgICB9Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAhPT0g
IkVycm9yOiBuZXh0IGlzIGNhbGxlZC4iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJv
ciB0aHJvd246ICIgKyBlOworfQoraWYgKHJldHVybkNhbGxlZCkKKyAgICB0aHJvdyAiRXJyb3I6
IHJldHVybiBpcyBjYWxsZWQuIjsKKworCisKK3ZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKK3Zh
ciBpdGVyID0geworICAgIF9fa2V5OiAwLAorICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiA0MiB9OworICAgIH0sCisgICAgW1N5bWJv
bC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwK
KyAgICByZXR1cm46IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsK
KyAgICAgICAgdGhyb3cgIkVycm9yOiByZXR1cm4gaXMgY2FsbGVkLiI7CisgICAgfQorfTsKKwor
dHJ5IHsKKyAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVyKSB7CisgICAgICAgIHRocm93ICJFcnJv
cjogVGVybWluYXRlIGl0ZXJhdGlvbi4iOworICAgIH0KK30gY2F0Y2ggKGUpIHsKKyAgICBpZiAo
U3RyaW5nKGUpICE9PSAiRXJyb3I6IFRlcm1pbmF0ZSBpdGVyYXRpb24uIikKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3duOiAiICsgZTsKK30KK2lmICghcmV0dXJuQ2FsbGVk
KQorICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIG5vdCBjYWxsZWQuIjsKKworCit2YXIgcmV0
dXJuQ2FsbGVkID0gZmFsc2U7Cit2YXIgaXRlciA9IHsKKyAgICBfX2tleTogMCwKKyAgICBuZXh0
OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogNDIg
fTsKKyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybiB0aGlzOworICAgIH0sCisgICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAg
IHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIGNh
bGxlZC4iOworICAgIH0KK307Cit0cnkgeworICAgIGZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorfSBjYXRjaCAoZSkgeworICAgIGlmIChTdHJpbmcoZSkg
IT09ICJFcnJvcjogcmV0dXJuIGlzIGNhbGxlZC4iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCBlcnJvciB0aHJvd246ICIgKyBlOworfQoraWYgKCFyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cg
IkVycm9yOiByZXR1cm4gaXMgbm90IGNhbGxlZC4iOworCisKK3ZhciBwcmltaXRpdmVzID0gWwor
ICAgIHVuZGVmaW5lZCwKKyAgICBudWxsLAorICAgIDQyLAorICAgICJzdHJpbmciLAorICAgIHRy
dWUsCisgICAgU3ltYm9sKCJDb2NvYSIpCitdOworCitmdW5jdGlvbiBpdGVyYXRvckludGVyZmFj
ZUVycm9yVGVzdChub3RJdGVyYXRvclJlc3VsdCkgeworICAgIHZhciByZXR1cm5DYWxsZWQgPSBm
YWxzZTsKKyAgICB2YXIgaXRlciA9IHsKKyAgICAgICAgX19rZXk6IDAsCisgICAgICAgIG5leHQ6
IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBub3RJdGVyYXRvclJlc3VsdDsKKyAg
ICAgICAgfSwKKyAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorICAgICAgICByZXR1cm46IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gdW5kZWZpbmVkOworICAgICAgICB9CisgICAgfTsKKyAgICB0cnkgeworICAgICAgICBmb3Ig
KHZhciB2YWx1ZSBvZiBpdGVyKSB7CisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IEl0ZXJhdGlv
biBzaG91bGQgbm90IG9jY3VyLiI7CisgICAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAg
ICAgIGlmIChTdHJpbmcoZSkgIT09ICJUeXBlRXJyb3I6IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZh
Y2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJy
b3IgdGhyb3duOiAiICsgZTsKKyAgICB9CisgICAgaWYgKHJldHVybkNhbGxlZCkKKyAgICAgICAg
dGhyb3cgIkVycm9yOiByZXR1cm4gaXMgY2FsbGVkLiI7Cit9CisKK2Z1bmN0aW9uIGl0ZXJhdG9y
SW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuKG5vdEl0ZXJhdG9yUmVzdWx0KSB7CisgICAgdmFyIHJl
dHVybkNhbGxlZCA9IGZhbHNlOworICAgIHZhciBpdGVyID0geworICAgICAgICBfX2tleTogMCwK
KyAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTog
ZmFsc2UsIHZhbHVlOiA0MiB9OworICAgICAgICB9LAorICAgICAgICBbU3ltYm9sLml0ZXJhdG9y
XTogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisg
ICAgICAgIHJldHVybjogZnVuY3Rpb24gKCkgeworICAgICAgICAgICAgcmV0dXJuQ2FsbGVkID0g
dHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBub3RJdGVyYXRvclJlc3VsdDsKKyAgICAgICAgfQor
ICAgIH07CisgICAgdHJ5IHsKKyAgICAgICAgZm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBUZXJtaW5hdGUgaXRlcmF0aW9uLiI7CisgICAgICAgIH0K
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGlmIChTdHJpbmcoZSkgIT09ICJFcnJvcjogVGVy
bWluYXRlIGl0ZXJhdGlvbi4iKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3Ig
dGhyb3duOiAiICsgZTsKKyAgICB9CisgICAgaWYgKCFyZXR1cm5DYWxsZWQpCisgICAgICAgIHRo
cm93ICJFcnJvcjogcmV0dXJuIGlzIG5vdCBjYWxsZWQuIjsKK30KKworcHJpbWl0aXZlcy5mb3JF
YWNoKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0KTsKK3ByaW1pdGl2ZXMuZm9yRWFjaChpdGVy
YXRvckludGVyZmFjZUVycm9yVGVzdFJldHVybik7CisKKworZnVuY3Rpb24gaXRlcmF0b3JJbnRl
cmZhY2VCcmVha1Rlc3RSZXR1cm4obm90SXRlcmF0b3JSZXN1bHQpIHsKKyAgICB2YXIgcmV0dXJu
Q2FsbGVkID0gZmFsc2U7CisgICAgdmFyIGl0ZXIgPSB7CisgICAgICAgIF9fa2V5OiAwLAorICAg
ICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4geyBkb25lOiBmYWxz
ZSwgdmFsdWU6IDQyIH07CisgICAgICAgIH0sCisgICAgICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBm
dW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAgICAgICAgfSwKKyAgICAg
ICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVl
OworICAgICAgICAgICAgcmV0dXJuIG5vdEl0ZXJhdG9yUmVzdWx0OworICAgICAgICB9CisgICAg
fTsKKyAgICB0cnkgeworICAgICAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVyKSB7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgaWYgKFN0
cmluZyhlKSAhPT0gIlR5cGVFcnJvcjogSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3Qg
YW4gb2JqZWN0LiIpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246
ICIgKyBlOworICAgIH0KKyAgICBpZiAoIXJldHVybkNhbGxlZCkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiByZXR1cm4gaXMgbm90IGNhbGxlZC4iOworfQorCitwcmltaXRpdmVzLmZvckVhY2goaXRl
cmF0b3JJbnRlcmZhY2VCcmVha1Rlc3RSZXR1cm4pOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pdGVyYXRvcnMtc2hhcGUuanMgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2l0ZXJhdG9ycy1zaGFwZS5qcwpuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lYWE1
Nzk5OGY2MjdjNWEzYWM4MWRjNGMzOGQwOGRiYmRlZDJmMzZmCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pdGVyYXRvcnMtc2hhcGUuanMKQEAg
LTAsMCArMSw1MCBAQAorLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGUgc2hhcGUgb2YgYnVpbHRpbiBp
dGVyYXRvcnMuCisKK3ZhciBhcnJheSA9IFsnQ29jb2EnLCAnQ2FwcHVjY2lubycsICdUaGUgZGVz
IEFsaXplcycsICdNYXRjaGEnLCAnS2lsaW1hbmphcm8nXTsKKworZnVuY3Rpb24gaXRlcmF0b3JT
aGFwZShpdGVyKSB7CisgICAgaWYgKGl0ZXIuaGFzT3duUHJvcGVydHkoJ25leHQnKSkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBpdGVyYXRvciBzaG91bGQgbm90IGhhdmUgbmV4dCBtZXRob2QuIjsK
KyAgICBpZiAoIWl0ZXIuX19wcm90b19fLmhhc093blByb3BlcnR5KCduZXh0JykpCisgICAgICAg
IHRocm93ICJFcnJvcjogaXRlcmF0b3IgcHJvdG90eXBlIHNob3VsZCBoYXZlIG5leHQgbWV0aG9k
LiI7CisgICAgaWYgKHR5cGVvZiBpdGVyLl9fcHJvdG9fXy5uZXh0ICE9PSAiZnVuY3Rpb24iKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGl0ZXJhdG9yIHByb3RvdHlwZSBzaG91bGQgaGF2ZSBuZXh0
IG1ldGhvZC4iOworfQorCit2YXIgdmFsdWVJdGVyYXRvciA9IGFycmF5W1N5bWJvbC5pdGVyYXRv
cl0oKTsKK2l0ZXJhdG9yU2hhcGUodmFsdWVJdGVyYXRvcik7CisKK3ZhciBrZXlJdGVyYXRvciA9
IGFycmF5LmtleXMoKTsKK2l0ZXJhdG9yU2hhcGUoa2V5SXRlcmF0b3IpOworCit2YXIga2V5VmFs
dWVJdGVyYXRvciA9IGFycmF5LmVudHJpZXMoKTsKK2l0ZXJhdG9yU2hhcGUoa2V5VmFsdWVJdGVy
YXRvcik7CisKK3ZhciBzZXQgPSBuZXcgU2V0KFsnQ29jb2EnLCAnQ2FwcHVjY2lubycsICdUaGUg
ZGVzIEFsaXplcycsICdNYXRjaGEnLCAnS2lsaW1hbmphcm8nXSk7Cit2YXIgdmFsdWVJdGVyYXRv
ciA9IHNldFtTeW1ib2wuaXRlcmF0b3JdKCk7CitpdGVyYXRvclNoYXBlKHZhbHVlSXRlcmF0b3Ip
OworCit2YXIga2V5SXRlcmF0b3IgPSBzZXQua2V5cygpOworaXRlcmF0b3JTaGFwZShrZXlJdGVy
YXRvcik7CisKK3ZhciBrZXlWYWx1ZUl0ZXJhdG9yID0gc2V0LmVudHJpZXMoKTsKK2l0ZXJhdG9y
U2hhcGUoa2V5VmFsdWVJdGVyYXRvcik7CisKK3ZhciBtYXAgPSBuZXcgTWFwKCk7CitbCisgICAg
WyAnQ29jb2EnLCAyLCBdLAorICAgIFsgJ0NhcHB1Y2Npbm8nLCAwIF0sCisgICAgWyAnVGhlIGRl
cyBBbGl6ZXMnLCAzIF0sCisgICAgWyAnTWF0Y2hhJywgMiBdLAorICAgIFsgJ0tpbGltYW5qYXJv
JywgMV0KK10uZm9yRWFjaChmdW5jdGlvbiAoWyBrZXksIHZhbHVlIF0pIHsKKyAgICBtYXAuc2V0
KGtleSwgdmFsdWUpOworfSk7Cit2YXIgdmFsdWVJdGVyYXRvciA9IG1hcFtTeW1ib2wuaXRlcmF0
b3JdKCk7CitpdGVyYXRvclNoYXBlKHZhbHVlSXRlcmF0b3IpOworCit2YXIga2V5SXRlcmF0b3Ig
PSBtYXAua2V5cygpOworaXRlcmF0b3JTaGFwZShrZXlJdGVyYXRvcik7CisKK3ZhciBrZXlWYWx1
ZUl0ZXJhdG9yID0gbWFwLmVudHJpZXMoKTsKK2l0ZXJhdG9yU2hhcGUoa2V5VmFsdWVJdGVyYXRv
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hcC1p
dGVyYXRvcnMtbmV4dC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWFw
LWl0ZXJhdG9ycy1uZXh0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzMjllYWUxNzMzMjFhNTRiOTFjNWVlZDVm
YTZmNjQzNTFhOTU5YTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL21hcC1pdGVyYXRvcnMtbmV4dC5qcwpAQCAtMCwwICsxLDExMyBAQAorLy8g
VGhpcyB0ZXN0IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2YgdGhlIGl0ZXJhdG9yLm5leHQgbWV0aG9k
cyBvbiBNYXAgb2JqZWN0cworCit2YXIgdGVzdEFycmF5ID0gWzEsMiwzLDQsNSw2XQordmFyIHRl
c3RNYXAgPSBuZXcgTWFwKCk7Citmb3IgKHZhciBba2V5LCB2YWx1ZV0gb2YgdGVzdEFycmF5LmVu
dHJpZXMoKSkgeworICAgIHRlc3RNYXAuc2V0KGtleSwgdmFsdWUpOworfQordmFyIGtleXMgPSB0
ZXN0TWFwLmtleXMoKTsKK3ZhciBpID0gMDsKK3doaWxlICh0cnVlKSB7CisgICAgdmFyIHtkb25l
LCB2YWx1ZToga2V5fSA9IGtleXMubmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAgICBicmVh
azsKKyAgICBpZiAoa2V5ID49IHRlc3RBcnJheS5sZW5ndGgpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlOiAiICsga2V5OworICAgIGkrKzsKK30KKworaWYgKHRlc3RNYXAuc2l6ZSAh
PT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9
IGtleXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKworLy8gVE9ETzogTWFwLnByb3RvdHlwZS52
YWx1ZXMoKSBpcyBub3QgZXhwb3NlZC4KKy8vCisvLyB2YXIgdmFsdWVzID0gdGVzdE1hcC52YWx1
ZXMoKTsKKy8vIHZhciBpID0gMDsKKy8vIHdoaWxlICh0cnVlKSB7CisvLyAgICAgdmFyIHtkb25l
LCB2YWx1ZX0gPSB2YWx1ZXMubmV4dCgpOworLy8gICAgIGlmIChkb25lKQorLy8gICAgICAgICBi
cmVhazsKKy8vICAgICBpKys7CisvLyAgICAgaWYgKHRlc3RBcnJheS5pbmRleE9mKHZhbHVlKSA9
PT0gLTEpCisvLyAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7Cisv
LyB9CisvLworLy8gaWYgKHRlc3RNYXAuc2l6ZSAhPT0gaSkKKy8vICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZTogIiArIGk7CisvLworLy8gdmFyIHZhbHVlID0gdmFsdWVzLm5leHQoKS52YWx1
ZTsKKy8vIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorLy8gICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlOiAiICsgdmFsdWU7CisKK3ZhciBlbnRyaWVzID0gdGVzdE1hcC5lbnRyaWVzKCk7Cit2
YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1ZTogZW50cnl9ID0gZW50cmllcy5u
ZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIHZhciBba2V5LCB2YWx1
ZV0gPSBlbnRyeTsKKyAgICBpZiAodmFsdWUgIT09IHRlc3RNYXAuZ2V0KGtleSkpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWUgKyAiICIgKyB0ZXN0TWFwLmdldChr
ZXkpOworICAgIGlmIChrZXkgPj0gdGVzdEFycmF5Lmxlbmd0aCkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7CisgICAgaSsrOworICAgIGlmICh0ZXN0QXJyYXkuaW5k
ZXhPZih2YWx1ZSkgPT09IC0xKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiAr
IHZhbHVlICsgIiAiICsgaTsKK30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RNYXAuc2l6ZSAh
PT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9
IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKwordmFyIGVudHJpZXMgPSB0ZXN0TWFw
LmVudHJpZXMoKTsKK3ZhciBpID0gMDsKK2RvIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBlbnRy
eX0gPSBlbnRyaWVzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAg
dmFyIFtrZXksIHZhbHVlXSA9IGVudHJ5OworICAgIGlmICh2YWx1ZSAhPT0gdGVzdE1hcC5nZXQo
a2V5KSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZSArICIgIiAr
IHRlc3RNYXAuZ2V0KGtleSk7CisgICAgaSsrOworICAgIGlmIChpICUgNCA9PT0gMCkKKyAgICAg
ICAgdGVzdE1hcC5zZXQoMTAwMDAwICsgaSwgaSk7Cit9IHdoaWxlICghZG9uZSk7CisKK2lmICh0
ZXN0TWFwLnNpemUgIT09IGkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOwor
Cit2YXIgdmFsdWUgPSBlbnRyaWVzLm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZp
bmVkKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisKK2Z1bmN0aW9u
IG90aGVyS2V5KGtleSkgeworICAgIHJldHVybiAoa2V5ICsgMSkgJSB0ZXN0QXJyYXkubGVuZ3Ro
OworfQorCit2YXIgZW50cmllcyA9IHRlc3RNYXAuZW50cmllcygpOwordmFyIGkgPSAwOworZG8g
eworICAgIHZhciB7ZG9uZSwgdmFsdWU6IGVudHJ5fSA9IGVudHJpZXMubmV4dCgpOworICAgIGlm
IChkb25lKQorICAgICAgICBicmVhazsKKyAgICB2YXIgW2tleSwgdmFsdWVdID0gZW50cnk7Cisg
ICAgaWYgKHZhbHVlICE9PSB0ZXN0TWFwLmdldChrZXkpKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCB2YWx1ZTogIiArIHZhbHVlICsgIiAiICsgdGVzdE1hcC5nZXQoa2V5KTsKKyAgICBpKys7
CisgICAgaWYgKGkgJSA0ID09PSAwKQorICAgICAgICB0ZXN0TWFwLmRlbGV0ZShvdGhlcktleShr
ZXkpKTsKK30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RNYXAuc2l6ZSAhPT0gaSkKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4
dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBi
YWQgdmFsdWU6ICIgKyB2YWx1ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3Mvc2V0LWl0ZXJhdG9ycy1uZXh0LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9zZXQtaXRlcmF0b3JzLW5leHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODcxZGM3ZTQy
MTgxZGE5MjFmZTQ3NTEyODY0MGM0MDk1MGM0Mjk0NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2V0LWl0ZXJhdG9ycy1uZXh0LmpzCkBAIC0w
LDAgKzEsMTE3IEBACisvLyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiB0aGUgaXRl
cmF0b3IubmV4dCBtZXRob2RzIG9uIFNldCBvYmplY3RzCisKK3ZhciB0ZXN0QXJyYXkgPSBbMSwy
LDMsNCw1LDZdCit2YXIgdGVzdFNldCA9IG5ldyBTZXQoKTsKK2ZvciAodmFyIFtrZXksIHZhbHVl
XSBvZiB0ZXN0QXJyYXkuZW50cmllcygpKSB7CisgICAgdGVzdFNldC5hZGQodmFsdWUpOworfQor
dmFyIGtleXMgPSB0ZXN0U2V0LmtleXMoKTsKK3ZhciBpID0gMDsKK3doaWxlICh0cnVlKSB7Cisg
ICAgdmFyIHtkb25lLCB2YWx1ZToga2V5fSA9IGtleXMubmV4dCgpOworICAgIGlmIChkb25lKQor
ICAgICAgICBicmVhazsKKyAgICBpZiAodGVzdEFycmF5LmluZGV4T2Yoa2V5KSA9PT0gLTEpCisg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsga2V5OworICAgIGkrKzsKK30KKwor
aWYgKHRlc3RTZXQuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiAr
IGk7CisKK3ZhciB2YWx1ZSA9IGtleXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRl
ZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKworLy8gVE9E
TzogU2V0LnByb3RvdHlwZS52YWx1ZXMoKSBpcyBub3QgZXhwb3NlZC4KKy8vCisvLyB2YXIgdmFs
dWVzID0gdGVzdFNldC52YWx1ZXMoKTsKKy8vIHZhciBpID0gMDsKKy8vIHdoaWxlICh0cnVlKSB7
CisvLyAgICAgdmFyIHtkb25lLCB2YWx1ZX0gPSB2YWx1ZXMubmV4dCgpOworLy8gICAgIGlmIChk
b25lKQorLy8gICAgICAgICBicmVhazsKKy8vICAgICBpKys7CisvLyAgICAgaWYgKHRlc3RBcnJh
eS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpCisvLyAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZh
bHVlOiAiICsgdmFsdWU7CisvLyB9CisvLworLy8gaWYgKHRlc3RTZXQuc2l6ZSAhPT0gaSkKKy8v
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisvLworLy8gdmFyIHZhbHVlID0g
dmFsdWVzLm5leHQoKS52YWx1ZTsKKy8vIGlmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorLy8gICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisKK3ZhciBlbnRyaWVzID0gdGVz
dFNldC5lbnRyaWVzKCk7Cit2YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1ZTog
ZW50cnl9ID0gZW50cmllcy5uZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOwor
ICAgIHZhciBba2V5LCB2YWx1ZV0gPSBlbnRyeTsKKyAgICBpZiAoa2V5ICE9PSB2YWx1ZSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXkgKyAiICIgKyB2YWx1ZTsKKyAg
ICBpZiAoIXRlc3RTZXQuaGFzKHZhbHVlKSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyB2YWx1ZTsKKyAgICBpZiAoIXRlc3RTZXQuaGFzKGtleSkpCisgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHZhbHVlOiAiICsga2V5OworICAgIGkrKzsKKyAgICBpZiAodGVzdEFycmF5
LmluZGV4T2YodmFsdWUpID09PSAtMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6
ICIgKyB2YWx1ZSArICIgIiArIGk7Cit9IHdoaWxlICghZG9uZSk7CisKK2lmICh0ZXN0U2V0LnNp
emUgIT09IGkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOworCit2YXIgdmFs
dWUgPSBlbnRyaWVzLm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisKK3ZhciBlbnRyaWVzID0gdGVz
dFNldC5lbnRyaWVzKCk7Cit2YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1ZTog
ZW50cnl9ID0gZW50cmllcy5uZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOwor
ICAgIHZhciBba2V5LCB2YWx1ZV0gPSBlbnRyeTsKKyAgICBpZiAoa2V5ICE9PSB2YWx1ZSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXkgKyAiICIgKyB2YWx1ZTsKKyAg
ICBpZiAoIXRlc3RTZXQuaGFzKGtleSkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
OiAiICsgdmFsdWU7CisgICAgaSsrOworICAgIGlmIChpICUgNCA9PT0gMCkKKyAgICAgICAgdGVz
dFNldC5hZGQoMTAwMDAwICsgaSk7Cit9IHdoaWxlICghZG9uZSk7CisKK2lmICh0ZXN0U2V0LnNp
emUgIT09IGkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOworCit2YXIgdmFs
dWUgPSBlbnRyaWVzLm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisKK2Z1bmN0aW9uIG90aGVyS2V5
KGtleSkgeworICAgIHJldHVybiAoa2V5ICsgMSkgJSB0ZXN0QXJyYXkubGVuZ3RoOworfQorCit2
YXIgZW50cmllcyA9IHRlc3RTZXQuZW50cmllcygpOwordmFyIGkgPSAwOworZG8geworICAgIHZh
ciB7ZG9uZSwgdmFsdWU6IGVudHJ5fSA9IGVudHJpZXMubmV4dCgpOworICAgIGlmIChkb25lKQor
ICAgICAgICBicmVhazsKKyAgICB2YXIgW2tleSwgdmFsdWVdID0gZW50cnk7CisgICAgaWYgKCF0
ZXN0U2V0LmhhcyhrZXkpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZh
bHVlICsgIiAiICsgdGVzdFNldC5nZXQoa2V5KTsKKyAgICBpKys7CisgICAgaWYgKGkgJSA0ID09
PSAwKQorICAgICAgICB0ZXN0U2V0LmRlbGV0ZShvdGhlcktleShrZXkpKTsKK30gd2hpbGUgKCFk
b25lKTsKKworaWYgKHRlc3RTZXQuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZh
bHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1
ZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>247746</attachid>
            <date>2015-03-02 21:17:40 -0800</date>
            <delta_ts>2015-03-04 20:09:34 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141351-20150303141721.patch</filename>
            <type>text/plain</type>
            <size>101648</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwOTA3CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MWVkNmFkM2I4MWNhZjEyNWNmOTlhMDZiNDU5ZTcwNTc0NWI1ZGJiLi43NjY2ODU0OTNmN2E0NWU2
YWFlZWU0MTY0ZmEyZTU0ZGMzNTExZjA5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNDUgQEAKKzIwMTUtMDMtMDIgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFp
bC5jb20+CisKKyAgICAgICAgVXBncmFkZSBFUzYgSXRlcmF0b3IgaW50ZXJmYWNlcworICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQxMzUxCisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCB1cGdy
YWRlcyB0aGUgZXhpc2luZyBFUzYgaXRlcmF0b3IgdG8gYWxpZ24gdGhlIGxhdGVzdCBzcGVjLgor
ICAgICAgICBJbiB0aGUgbGF0ZXN0IHNwZWMsCisgICAgICAgIDEuIGBJdGVyYXRvci5uZXh0YCBy
ZXR1cm5zIG9iamVjdCB0aGF0IGltcGxlbWVudHMgSXRlcmF0b3JSZXN1bHQgaW50ZXJmYWNlIHsg
dmFsdWU6IHZhbHVlLCBkb25lLCBib29sZWFuIH0uCisgICAgICAgIDIuIGBJdGVyYXRvci5yZXR1
cm5gIGlzIGludHJvZHVjZWQuIFdoZW4gdGhlIGl0ZXJhdGlvbiBpcyB0ZXJtaW5hdGVkIGJ5IHRo
ZSBhYnJ1cHQgY29tcGxldGlvbiwKKyAgICAgICAgaXQgaXMgY2FsbGVkIHRvIGNsb3NlIGl0ZXJh
dG9yIHN0YXRlLgorICAgICAgICAzLiBJdGVyYXRvci5uZXh0IG9mIEFycmF5IGlzIG1vdmVkIGZy
b20gYW4gaXRlcmF0b3Igb2JqZWN0IHRvIGAlQXJyYXlJdGVyYXRvclByb3RvdHlwZSVgLgorCisg
ICAgICAgIFRvIHVwZ3JhZGUgaXQsIHdlIGNoYW5nZXMgdGhlIGJ5dGVjb2RlIHRoYXQgcmVwcmVz
ZW50cyBmb3Itb2YgbG9vcHMuCisgICAgICAgIEFuZCB0byBlbWJvZHkgdGhlIGVmZmljaWVudCBp
dGVyYXRpb24gd2l0aCBhbiBpdGVyYXRvciBvYmplY3QsCisgICAgICAgIHdlIGltcGxlbWVudGVk
ICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IGluIEphdmFTY3JpcHQgYW5kCisgICAgICAg
IGl0IGlzIGxvY2F0ZWQgaW4gYnVpbHRpbnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMuCisg
ICAgICAgIEltcGxlbWVudGluZyBpdCBpbiBKYXZhU2NyaXB0IGVuY291cmFnZXMgaW5saW5pbmcg
YW5kCisgICAgICAgIHV0aWxpemVzIGVzY2FwZSBhbmFseXNpcyBmb3IgYW4gaXRlcmF0b3IgcmVz
dWx0IG9iamVjdCBpbiBERkcgSklULgorICAgICAgICBBbmQgd2UgZHJvcHBlZCB0aGUgaW50cmlu
c2ljIHZlcnNpb24gb2YgJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQuCisKKyAgICAgICAg
QW5kIHdlIGludHJvZHVjZWQgSXRlcmF0b3JPcGVyYXRpb25zIHRoYXQgaXMgZGVmaW5lZCBpbiB0
aGUgc3BlYy4KKyAgICAgICAgSXQgYWxpZ25zIHRoZSBpdGVyYXRpb24gaW4gdGhlIHJ1bnRpbWUg
dG8gdGhlIGxhdGVzdCBzcGVjLgorICAgICAgICBDdXJyZW50bHksIFByb21pc2UuYWxsIGFuZCBQ
cm9taXNlLnJhY2UgdXNlcyBhbiBpdGVyYWJsZSBvYmplY3QuCisgICAgICAgIEhvd2V2ZXIsIFBy
b21pc2UuYWxsIGFuZCBQcm9taXNlLnJhY2UgaW1wbGVtZW50YXRpb24gaXMgYWxzbyBiYXNlZCBv
biB0aGUgb2xkIHNwZWMuCisgICAgICAgIFN1YnNlcXVlbnQgcGF0Y2hlcyB3aWxsIHVwZ3JhZGUg
aXQuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBEZXJpdmVkU291cmNl
cy5tYWtlOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUu
dmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVyczoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qOgorICAgICAgICAqIGJ1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJvdG90eXBl
LmpzOiBDb3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJh
dG9yUHJvdG90eXBlLmguCisgICAgICAgIChuZXh0KToKKyAgICAgICAgKiBieXRlY29tcGlsZXIv
Qnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJldHVybik6CisgICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0VGhyb3dU
eXBlRXJyb3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVudW1lcmF0
aW9uKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRJc09iamVjdCk6Cisg
ICAgICAgIChKU0M6OkJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNVbmRlZmluZWQpOgorICAgICAg
ICAqIGJ5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5oOgorICAgICAgICAqIGppdC9UaHVu
a0dlbmVyYXRvcnMuY3BwOgorICAgICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFRodW5rR2Vu
ZXJhdG9yKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXlUaHVu
a0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0VmFs
dWVUaHVua0dlbmVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgICogaml0L1RodW5rR2VuZXJhdG9y
cy5oOgorICAgICAgICAqIHJ1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuY3BwOgor
ICAgICAgICAoSlNDOjpBcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24p
OgorICAgICAgICAoSlNDOjphcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToKKyAg
ICAgICAgKiBydW50aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlND
OjpBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkFycmF5SXRlcmF0b3JQcm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdCk6CisgICAgICAgIChK
U0M6OmFycmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRvcik6CisgICAgICAgIChKU0M6OmFycmF5
SXRlcmF0b3JQcm90b3R5cGVJdGVyYXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL0Fy
cmF5SXRlcmF0b3JQcm90b3R5cGUuaDoKKyAgICAgICAgKiBydW50aW1lL0NvbW1vbklkZW50aWZp
ZXJzLmg6CisgICAgICAgICogcnVudGltZS9JbnRyaW5zaWMuaDoKKyAgICAgICAgKiBydW50aW1l
L0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjppdGVyYXRvck5l
eHQpOgorICAgICAgICAoSlNDOjppdGVyYXRvclZhbHVlKToKKyAgICAgICAgKEpTQzo6aXRlcmF0
b3JDb21wbGV0ZSk6CisgICAgICAgIChKU0M6Oml0ZXJhdG9yU3RlcCk6CisgICAgICAgIChKU0M6
Oml0ZXJhdG9yQ2xvc2UpOgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyUmVzdWx0T2JqZWN0KToK
KyAgICAgICAgKiBydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5oOiBDb3BpZWQgZnJvbSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmNwcC4KKyAg
ICAgICAgKiBydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHA6CisgICAgICAgIChKU0M6OkpTQXJy
YXlJdGVyYXRvcjo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0
b3I6OnZpc2l0Q2hpbGRyZW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpjcmVhdGVJdGVyYXRv
clJlc3VsdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OmFycmF5SXRlcmF0b3JOZXh0KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6YXJyYXlJdGVyYXRvck5leHRLZXkpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjphcnJheUl0ZXJhdG9yTmV4dFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpT
Qzo6YXJyYXlJdGVyYXRvck5leHRHZW5lcmljKTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1l
L0pTQXJyYXlJdGVyYXRvci5oOgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6OkpTQXJy
YXlJdGVyYXRvcik6CisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6aXRlcmF0aW9uS2lu
ZCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6aXRlcmF0ZWRPYmpl
Y3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6Om5leHRJbmRleCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6c2V0TmV4dEluZGV4KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6SlNBcnJheUl0ZXJhdG9yOjpmaW5pc2gpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0aW9uS2luZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRl
ZE9iamVjdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0
T2ZOZXh0SW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
Y3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6aW5pdCk6CisgICAgICAgICogcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OnBlcmZvcm1Qcm9t
aXNlUmFjZUxvb3ApOgorICAgICAgICAoSlNDOjpKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSYWNl
KToKKyAgICAgICAgKEpTQzo6cGVyZm9ybVByb21pc2VBbGwpOgorICAgICAgICAoSlNDOjpKU1By
b21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwpOgorICAgICAgICAqIHJ1bnRpbWUvTWFwSXRlcmF0b3JQ
cm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZTo6ZmluaXNo
Q3JlYXRpb24pOgorICAgICAgICAoSlNDOjpNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KToK
KyAgICAgICAgKiBydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBlLmNwcDoKKyAgICAgICAgKEpT
Qzo6U2V0SXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6
U2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jTmV4dCk6CisgICAgICAgICogcnVudGltZS9WTS5jcHA6
CisgICAgICAgIChKU0M6OnRodW5rR2VuZXJhdG9yRm9ySW50cmluc2ljKToKKyAgICAgICAgKiB0
ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3JzLW5leHQtd2l0aC1jYWxsLmpzOiBBZGRlZC4KKyAg
ICAgICAgKGluY3JlbWVudCk6CisgICAgICAgIChmb3IpOgorICAgICAgICAqIHRlc3RzL3N0cmVz
cy9hcnJheS1pdGVyYXRvcnMtbmV4dC5qczogQWRkZWQuCisKKyAgICAgICAgUmV2aXZlIHRoZSBv
bGRlciBBcnJheSBpdGVyYXRvciB0ZXN0cyB0aGF0IG1hbnVhbGx5IGNhbGwgJ25leHQnIG1ldGhv
ZC4KKworICAgICAgICAqIHRlc3RzL3N0cmVzcy9jdXN0b20taXRlcmF0b3JzLmpzOiBBZGRlZC4K
KyAgICAgICAgKGl0ZXIubmV4dCk6CisgICAgICAgIChpdGVyLlN5bWJvbC5pdGVyYXRvcik6Cisg
ICAgICAgIChpdGVyLnJldHVybik6CisgICAgICAgIChpdGVyLmdldCBuZXh0KToKKyAgICAgICAg
KGl0ZXIuZ2V0IHJldHVybik6CisgICAgICAgIChpdGVyYXRvckludGVyZmFjZUVycm9yVGVzdC5p
dGVyLm5leHQpOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuaXRlci5TeW1i
b2wuaXRlcmF0b3IpOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QuaXRlci5y
ZXR1cm4pOgorICAgICAgICAoaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3QpOgorICAgICAgICAo
aXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3RSZXR1cm4uaXRlci5uZXh0KToKKyAgICAgICAgKGl0
ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuLml0ZXIuU3ltYm9sLml0ZXJhdG9yKToKKyAg
ICAgICAgKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuLml0ZXIucmV0dXJuKToKKyAg
ICAgICAgKGl0ZXJhdG9ySW50ZXJmYWNlRXJyb3JUZXN0UmV0dXJuKToKKyAgICAgICAgKGl0ZXJh
dG9ySW50ZXJmYWNlQnJlYWtUZXN0UmV0dXJuLml0ZXIubmV4dCk6CisgICAgICAgIChpdGVyYXRv
ckludGVyZmFjZUJyZWFrVGVzdFJldHVybi5pdGVyLlN5bWJvbC5pdGVyYXRvcik6CisgICAgICAg
IChpdGVyYXRvckludGVyZmFjZUJyZWFrVGVzdFJldHVybi5pdGVyLnJldHVybik6CisgICAgICAg
IChpdGVyYXRvckludGVyZmFjZUJyZWFrVGVzdFJldHVybik6CisKKyAgICAgICAgVGhpcyB0ZXN0
cyB0aGUgYmVoYXZpb3Igb2YgY3VzdG9tIGl0ZXJhdG9ycy4KKyAgICAgICAgJ25leHQnIGFuZCAn
cmV0dXJuJyBvZiBpdGVyYXRvciB3b3JrIHdpdGggZm9yLW9mLgorCisgICAgICAgICogdGVzdHMv
c3RyZXNzL2l0ZXJhdG9ycy1zaGFwZS5qczogQWRkZWQuCisgICAgICAgIChpdGVyYXRvclNoYXBl
KToKKyAgICAgICAgKHNhbWVOZXh0TWV0aG9kcyk6CisgICAgICAgIChzZXQgdmFyKToKKworICAg
ICAgICBUaGlzIHRlc3RzIHRoZSBzaGFwZSBvZiBpdGVyYXRvcnM7IGl0ZXJhdG9ycyBvZiBBcnJh
eSBoYXZlICduZXh0JyBtZXRob2QgaW4gJUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLgorCisgICAg
ICAgICogdGVzdHMvc3RyZXNzL21hcC1pdGVyYXRvcnMtbmV4dC5qczogQWRkZWQuCisgICAgICAg
IChzZXQgdmFyKToKKyAgICAgICAgKC5nZXQgaWYpOgorICAgICAgICAob3RoZXJLZXkpOgorICAg
ICAgICAqIHRlc3RzL3N0cmVzcy9zZXQtaXRlcmF0b3JzLW5leHQuanM6IEFkZGVkLgorICAgICAg
ICAob3RoZXJLZXkpOgorCiAyMDE1LTAzLTAyICBNYXJrIExhbSAgPG1hcmsubGFtQGFwcGxlLmNv
bT4KIAogICAgICAgICBFeGNlcHRpb24gc3RhY2sgdW53aW5kaW5nIGluIEpTQyBoYW5ncyB3aGls
ZSB0aGUgVGltZWxpbmUgUHJvZmlsZXIgaXMgZW5hYmxlZC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAppbmRleCBmOWNiZGRjY2ZmZmVhYTMwMDIxNDkwYWExZjc5OWI1NjRlMjAxYWQ0
Li5lNzU0YzZlYTYyM2E5ZDg4OTIyMmI1MTg2YjdhNjk3N2QxMjI0N2VmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC00MzgsNyArNDM4LDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvRXJyb3JJbnN0YW5jZS5jcHAKICAgICBy
dW50aW1lL0Vycm9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvRXhjZXB0aW9uRnV6ei5jcHAK
LSAgICBydW50aW1lL0V4Y2VwdGlvbkhlbHBlcnMuY3BwIAorICAgIHJ1bnRpbWUvRXhjZXB0aW9u
SGVscGVycy5jcHAKICAgICBydW50aW1lL0V4ZWN1dGFibGUuY3BwCiAgICAgcnVudGltZS9GdW5j
dGlvbkNvbnN0cnVjdG9yLmNwcAogICAgIHJ1bnRpbWUvRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5j
cHAKQEAgLTQ1MCw2ICs0NTAsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfUlVOVElNRV9TT1VSQ0VT
CiAgICAgcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZW5k
ZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCisg
ICAgcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuY3BwCiAgICAgcnVudGltZS9KU0FQSVZhbHVl
V3JhcHBlci5jcHAKICAgICBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAogICAgIHJ1
bnRpbWUvSlNBcmd1bWVudHNJdGVyYXRvci5jcHAKQEAgLTU3OSw2ICs1ODAsNyBAQCBsaXN0KEFQ
UEVORCBKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAKIHNldChKYXZhU2NyaXB0Q29yZV9MVVRfRklM
RVMKICAgICBydW50aW1lL0FycmF5Q29uc3RydWN0b3IuY3BwCisgICAgcnVudGltZS9BcnJheUl0
ZXJhdG9yUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvQXJyYXlQcm90b3R5cGUuY3BwCiAgICAg
cnVudGltZS9Cb29sZWFuUHJvdG90eXBlLmNwcAogICAgIHJ1bnRpbWUvRGF0ZUNvbnN0cnVjdG9y
LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0Rlcml2ZWRTb3VyY2VzLm1h
a2UgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQppbmRleCA0YTI2
MjNlZjVjOWM3NTZkNWRhNTQ3ZjFkM2Q2NWNlYTlhMTc2OTVhLi40ZGIwOWJkNDc3MmI0ZDFjOWYw
YzYxYzAyYWU2ZDM5NWI2NTQxZTdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
RGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvRGVyaXZlZFNv
dXJjZXMubWFrZQpAQCAtMzYsNiArMzYsNyBAQCBWUEFUSCA9IFwKIC5QSE9OWSA6IGFsbAogYWxs
IDogXAogICAgIEFycmF5Q29uc3RydWN0b3IubHV0LmggXAorICAgIEFycmF5SXRlcmF0b3JQcm90
b3R5cGUubHV0LmggXAogICAgIEFycmF5UHJvdG90eXBlLmx1dC5oIFwKICAgICBCb29sZWFuUHJv
dG90eXBlLmx1dC5oIFwKICAgICBEYXRlQ29uc3RydWN0b3IubHV0LmggXApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvaiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oKaW5kZXggODMxMDcwY2MyNmQzMTE2YjIwZTNkODhjOTIz
M2UzNzk4ZGRmZjY5MS4uZDI3YzNmZGI4ODUxMjIzOTc3ZDU2MzBlYWI3ZjZlMDk2NDE0YzhmNiAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ov
SmF2YVNjcmlwdENvcmUudmN4cHJvagorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCkBAIC03MTgsNiArNzE4LDcg
QEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSXRlcmF0b3JPcGVyYXRpb25zLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XHJ1bnRpbWVcSlNBUElWYWx1ZVdyYXBwZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5ccnVudGltZVxKU0xleGljYWxFbnZpcm9ubWVudC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJndW1lbnRzSXRlcmF0b3IuY3BwIiAvPgpAQCAtODU0
LDYgKzg1NSw3IEBACiAgIDwvSXRlbUdyb3VwPgogICA8SXRlbUdyb3VwPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVpbGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRl
Y3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRTb3VyY2VzXEFycmF5Q29uc3RydWN0b3IubHV0
LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWlsZERpcilc
b2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNvdXJjZXNc
QXJyYXlJdGVyYXRvclByb3RvdHlwZS5sdXQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9
IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0ZWN0dXJlKVwkKFBy
b2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xBcnJheVByb3RvdHlwZS5sdXQuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3Jt
QXJjaGl0ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xCb29sZWFuUHJvdG90
eXBlLmx1dC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iJChDb25maWd1cmF0aW9uQnVp
bGREaXIpXG9iaiQoUGxhdGZvcm1BcmNoaXRlY3R1cmUpXCQoUHJvamVjdE5hbWUpXERlcml2ZWRT
b3VyY2VzXERhdGVDb25zdHJ1Y3Rvci5sdXQuaCIgLz4KQEAgLTE0OTIsNiArMTQ5NCw3IEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hhaW4u
aCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxGdW5jdGlv
bi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRyaW5zaWMuaCIg
Lz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSXRlcmF0b3JPcGVyYXRpb25z
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQVBJVmFsdWVXcmFw
cGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTGV4aWNhbEVu
dmlyb25tZW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTQXJn
dW1lbnRzSXRlcmF0b3IuaCIgLz4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwppbmRleCBmZmY3MjBjODFkMDI2NDRjZWQ0NzVmMTBkY2ZiYzBkMGNi
MjZmOTkzLi5hYjYyMTg4NDQ2MmZkMzU4OWNhNjc4ZmU0ZjU3M2NkMGUwZDIxYzEzIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCkBAIC02MzAs
NiArNjMwLDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW50ZXJuYWxG
dW5jdGlvbi5jcHAiPgogICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CiAgICAgPC9DbENv
bXBpbGU+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEl0ZXJhdG9yT3BlcmF0
aW9ucy5jcHAiPgorICAgICAgPEZpbHRlcj5ydW50aW1lPC9GaWx0ZXI+CisgICAgPC9DbENvbXBp
bGU+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEpTTGV4aWNhbEVudmlyb25t
ZW50LmNwcCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGls
ZT4KQEAgLTI2NjEsNiArMjY2NCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEludHJpbnNpYy5oIj4KICAgICAgIDxGaWx0ZXI+cnVudGltZTwvRmlsdGVyPgogICAgIDwv
Q2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJdGVyYXRvck9w
ZXJhdGlvbnMuaCI+CisgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KKyAgICA8L0NsSW5j
bHVkZT4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSlNMZXhpY2FsRW52aXJv
bm1lbnQuaCI+CiAgICAgICA8RmlsdGVyPnJ1bnRpbWU8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVk
ZT4KQEAgLTMwNjQsNiArMzA3MCw5IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZp
Z3VyYXRpb25CdWlsZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFt
ZSlcRGVyaXZlZFNvdXJjZXNcU3RyaW5nQ29uc3RydWN0b3IubHV0LmgiPgogICAgICAgPEZpbHRl
cj5EZXJpdmVkIFNvdXJjZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KKyAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9IiQoQ29uZmlndXJhdGlvbkJ1aWxkRGlyKVxvYmokKFBsYXRmb3JtQXJjaGl0
ZWN0dXJlKVwkKFByb2plY3ROYW1lKVxEZXJpdmVkU291cmNlc1xBcnJheUl0ZXJhdG9yUHJvdG90
eXBlLmx1dC5oIj4KKyAgICAgIDxGaWx0ZXI+RGVyaXZlZCBTb3VyY2VzPC9GaWx0ZXI+CisgICAg
PC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIkKENvbmZpZ3VyYXRpb25CdWls
ZERpcilcb2JqJChQbGF0Zm9ybUFyY2hpdGVjdHVyZSlcJChQcm9qZWN0TmFtZSlcRGVyaXZlZFNv
dXJjZXNcQXJyYXlQcm90b3R5cGUubHV0LmgiPgogICAgICAgPEZpbHRlcj5EZXJpdmVkIFNvdXJj
ZXM8L0ZpbHRlcj4KICAgICA8L0NsSW5jbHVkZT4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
aW5kZXggNmE4NDU2NThhMjc0YjJlMzNlOWU5ZDc0ODdmMWUxOTMxZGEwMjE0MC4uYTAxODA0YTZh
OTc3N2JhN2VjZTU3NzQxOGQ1ZjQ3ZWViODJlOWFkMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTk0Myw2ICs5NDMsOCBAQAogCQk2NUMwMjg1RDE3MTc5NjY4MDAzNTFFMzUgLyog
QVJNdjdET3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA2NUMwMjg1QjE3MTc5NjY4MDAzNTFFMzUgLyogQVJNdjdET3Bjb2RlLmggKi87IH07CiAJ
CTY1RkI1MTE3MTg0RUVFNzAwMEMxMkI3MCAvKiBQcm90b0NhbGxGcmFtZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NUZCNTExNjE4NEVFOUJDMDBD
MTJCNzAgLyogUHJvdG9DYWxsRnJhbWUuY3BwICovOyB9OwogCQk2QUQyQ0I0RDE5QjkxNDAxMDAw
NjU3MTkgLyogRGVidWdnZXJFdmFsRW5hYmxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNkFEMkNCNEMxOUI5MTQwMTAwMDY1NzE5IC8qIERlYnVnZ2Vy
RXZhbEVuYWJsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk3MDExM0Q0QjFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcwMTEzRDQ5
MUE4REIwOTMwMDM4NDhDNCAvKiBJdGVyYXRvck9wZXJhdGlvbnMuY3BwICovOyB9OworCQk3MDEx
M0Q0QzFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDExM0Q0QTFBOERCMDkzMDAzODQ4
QzQgLyogSXRlcmF0b3JPcGVyYXRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzA1QjQxQUIxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDVCNDFB
MzFBNkU1MDFFMDA3MTY3NTcgLyogU3ltYm9sLmNwcCAqLzsgfTsKIAkJNzA1QjQxQUMxQTZFNTAx
RTAwNzE2NzU3IC8qIFN5bWJvbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gNzA1QjQxQTQxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcwNUI0MUFEMUE2RTUw
MUUwMDcxNjc1NyAvKiBTeW1ib2xDb25zdHJ1Y3Rvci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MDVCNDFBNTFBNkU1MDFFMDA3MTY3NTcgLyogU3lt
Ym9sQ29uc3RydWN0b3IuY3BwICovOyB9OwpAQCAtMjYyMiw2ICsyNjI0LDggQEAKIAkJNjVGQjUx
MTUxODRFRThGODAwQzEyQjcwIC8qIFByb3RvQ2FsbEZyYW1lLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFByb3RvQ2FsbEZyYW1lLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTY1RkI1MTE2MTg0RUU5QkMwMEMxMkI3MCAvKiBQcm90b0NhbGxGcmFtZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBQcm90b0NhbGxGcmFtZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTZBRDJDQjRDMTlCOTE0MDEwMDA2NTcxOSAvKiBE
ZWJ1Z2dlckV2YWxFbmFibGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERl
YnVnZ2VyRXZhbEVuYWJsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzAxMTNE
NDkxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJdGVyYXRvck9wZXJhdGlvbnMuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQk3MDExM0Q0QTFBOERCMDkzMDAzODQ4QzQgLyogSXRlcmF0
b3JPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEl0ZXJhdG9y
T3BlcmF0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDRGRDM1MzA1Njk3
RTZEMDAzREJFRDkgLyogQm9vbGVhbk9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBCb29sZWFuT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJNzA1QjQxQTMxQTZFNTAxRTAwNzE2NzU3IC8q
IFN5bWJvbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBTeW1ib2wu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MDVCNDFBNDFBNkU1MDFFMDA3MTY3
NTcgLyogU3ltYm9sLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFN5bWJvbC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDMzMSw2ICs0MzM1LDggQEAKIAkJCQlC
QzlCQjk1QjBFMTk2ODA2MDBERjg4NTUgLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgKi8sCiAJCQkJ
QkMxMTY2N0EwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rpb24uaCAqLywKIAkJCQk4
NkJGNjQyQTE0OERCMkI1MDA0REUzNkEgLyogSW50cmluc2ljLmggKi8sCisJCQkJNzAxMTNENDkx
QThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5jcHAgKi8sCisJCQkJNzAxMTNE
NEExQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oICovLAogCQkJCUE3NjE0
MENCMTgyOTgyQ0IwMDc1MDYyNCAvKiBKU0FyZ3VtZW50c0l0ZXJhdG9yLmNwcCAqLywKIAkJCQlB
NzYxNDBDQzE4Mjk4MkNCMDA3NTA2MjQgLyogSlNBcmd1bWVudHNJdGVyYXRvci5oICovLAogCQkJ
CTkzQURGQ0U2MENDQkQ3QUMwMEQzMEIwOCAvKiBKU0FycmF5LmNwcCAqLywKQEAgLTU4NzgsNiAr
NTg4NCw3IEBACiAJCQkJQkMxMTY2N0IwRTE5OUMwNTAwODA2NkREIC8qIEludGVybmFsRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTE0MjlENzdDMEVEMjBENzMwMEI4OTYxOSAvKiBJbnRl
cnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODYwQkQ4MDExNDhFQTZGMjAwMTEyQjJGIC8q
IEludHJpbnNpYy5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzAxMTNENEMxQThEQjA5MzAwMzg0OEM0
IC8qIEl0ZXJhdG9yT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MTMwRTE2
RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI5Q0Y1
MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0UHJvcGVydHlWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTUwM0ZBMUExODhFMEZCMDAwMTEwRjE0IC8qIEphdmFTY3JpcHRDYWxsRnJhbWUuaCBp
biBIZWFkZXJzICovLApAQCAtNzA4Myw2ICs3MDkwLDcgQEAKIAkJCQlBNzg4NTNGOTE3OTcyNjI5
MDAxNDQwRTQgLyogSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQkxNDdGMzlDRjEwN0VDMzc2MDA0MjdBNDggLyogSW50ZXJuYWxGdW5jdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDI5RDdENDBFRDIxMjgyMDBCODk2MTkgLyogSW50ZXJwcmV0ZXIuY3Bw
IGluIFNvdXJjZXMgKi8sCisJCQkJNzAxMTNENEIxQThEQjA5MzAwMzg0OEM0IC8qIEl0ZXJhdG9y
T3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNTAzRkExOTE4OEUwRkIwMDAxMTBG
MTQgLyogSmF2YVNjcmlwdENhbGxGcmFtZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDI5RDky
RjBFRDIyRDcwMDBCODk2MTkgLyogSklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QTkwRUQw
MEVFN0Q1MUYwMEFCMzUwRCAvKiBKSVRBcml0aG1ldGljLmNwcCBpbiBTb3VyY2VzICovLApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3IucHJv
dG90eXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J1aWx0aW5zL0FycmF5SXRlcmF0b3Iu
cHJvdG90eXBlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk3NmJjYjI1ZmE2YzEwM2UzNTQ4YzhmMjg5MmYzYmJh
NzNhMmMyNzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnVpbHRp
bnMvQXJyYXlJdGVyYXRvci5wcm90b3R5cGUuanMKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+Lgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCitmdW5jdGlvbiBuZXh0
KCkgeworICAgICJ1c2Ugc3RyaWN0IjsKKworICAgIGlmICh0aGlzID09IG51bGwpCisgICAgICAg
IHRocm93IG5ldyBAVHlwZUVycm9yKCIlQXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCByZXF1
aXJlcyB0aGF0IHx0aGlzfCBub3QgYmUgbnVsbCBvciB1bmRlZmluZWQiKTsKKworICAgIHZhciBp
dGVtS2luZCA9IHRoaXMuQGFycmF5SXRlcmF0aW9uS2luZDsKKyAgICBpZiAoaXRlbUtpbmQgPT09
IHVuZGVmaW5lZCkKKyAgICAgICAgdGhyb3cgbmV3IEBUeXBlRXJyb3IoIiVBcnJheUl0ZXJhdG9y
UHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIEFycmF5IEl0ZXJhdG9yIElu
c3RhbmNlIik7CisKKyAgICB2YXIgZG9uZSA9IHRydWU7CisgICAgdmFyIHZhbHVlID0gdW5kZWZp
bmVkOworCisgICAgdmFyIGFycmF5ID0gdGhpcy5AaXRlcmF0ZWRPYmplY3Q7CisgICAgaWYgKGFy
cmF5ICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgdmFyIGluZGV4ID0gdGhpcy5AYXJyYXlJdGVy
YXRvck5leHRJbmRleDsKKyAgICAgICAgdmFyIGxlbmd0aCA9IGFycmF5Lmxlbmd0aCA+Pj4gMDsK
KyAgICAgICAgaWYgKGluZGV4ID49IGxlbmd0aCkgeworICAgICAgICAgICAgdGhpcy5AaXRlcmF0
ZWRPYmplY3QgPSB1bmRlZmluZWQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0aGlz
LkBhcnJheUl0ZXJhdG9yTmV4dEluZGV4ID0gaW5kZXggKyAxOworICAgICAgICAgICAgZG9uZSA9
IGZhbHNlOworICAgICAgICAgICAgaWYgKGl0ZW1LaW5kID09PSBAYXJyYXlJdGVyYXRpb25LaW5k
S2V5KSB7CisgICAgICAgICAgICAgICAgdmFsdWUgPSBpbmRleDsKKyAgICAgICAgICAgIH0gZWxz
ZSBpZiAoaXRlbUtpbmQgPT09IEBhcnJheUl0ZXJhdGlvbktpbmRWYWx1ZSkgeworICAgICAgICAg
ICAgICAgIHZhbHVlID0gYXJyYXlbaW5kZXhdOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgICAgICB2YWx1ZSA9IFsgaW5kZXgsIGFycmF5W2luZGV4XSBdOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIHsKKyAgICAgICAgZG9uZTogZG9uZSwK
KyAgICAgICAgdmFsdWU6IHZhbHVlCisgICAgfTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKaW5kZXggMDgx
NzhlNDA1NzNmMjQyOTYzN2FjNzIzMzdmYmQzOWNiYmJhNDc0ZC4uZmY1OTI4ZmZlOTk1MmJjZjQ4
NjliNzc5ZjcyMmYzMDcyNGUyNTE0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKQEAgLTE5MDUsMTYgKzE5
MDUsOCBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJldHVybihSZWdpc3Rl
cklEKiBzcmMpCiAKICAgICBpZiAoaXNDb25zdHJ1Y3RvcigpICYmIHNyYy0+aW5kZXgoKSAhPSBt
X3RoaXNSZWdpc3Rlci5pbmRleCgpKSB7CiAgICAgICAgIFJlZlB0cjxMYWJlbD4gaXNPYmplY3RM
YWJlbCA9IG5ld0xhYmVsKCk7Ci0gICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBpc09iamVjdFJl
Z2lzdGVyID0gbmV3VGVtcG9yYXJ5KCk7CiAKLSAgICAgICAgZW1pdE9wY29kZShvcF9pc19vYmpl
Y3QpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoaXNPYmplY3RSZWdpc3Rlci0+aW5k
ZXgoKSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOwotCi0g
ICAgICAgIHNpemVfdCBiZWdpbiA9IGluc3RydWN0aW9ucygpLnNpemUoKTsKLSAgICAgICAgZW1p
dE9wY29kZShvcF9qdHJ1ZSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChpc09iamVj
dFJlZ2lzdGVyLT5pbmRleCgpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGlzT2Jq
ZWN0TGFiZWwtPmJpbmQoYmVnaW4sIGluc3RydWN0aW9ucygpLnNpemUoKSkpOworICAgICAgICBl
bWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHNyYyksIGlzT2JqZWN0
TGFiZWwuZ2V0KCkpOwogCiAgICAgICAgIGVtaXRVbmFyeU5vRHN0T3Aob3BfcmV0LCAmbV90aGlz
UmVnaXN0ZXIpOwogCkBAIC0yMzUyLDYgKzIzNDQsMTMgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdFRocm93UmVmZXJlbmNlRXJyb3IoY29uc3QgU3RyaW5nJiBtZXNzYWdlKQogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCh0cnVlKTsKIH0KIAordm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFRocm93VHlwZUVycm9yKGNvbnN0IFN0cmluZyYgbWVzc2FnZSkKK3sKKyAgICBlbWl0T3Bj
b2RlKG9wX3Rocm93X3N0YXRpY19lcnJvcik7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFk
ZENvbnN0YW50VmFsdWUoYWRkU3RyaW5nQ29uc3RhbnQoSWRlbnRpZmllcihtX3ZtLCBtZXNzYWdl
KSkpLT5pbmRleCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmFsc2UpOworfQorCiB2
b2lkIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKQogewogICAgIGVtaXRPcGNvZGUob3BfcHVzaF9uYW1lX3Njb3Bl
KTsKQEAgLTI1NTEsMjggKzI1NTAsODEgQEAgdm9pZCBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdEVu
dW1lcmF0aW9uKFRocm93YWJsZUV4cHJlc3Npb25EYXRhKiBub2RlLCBFeHByZXNzaW8KICAgICBl
bWl0Tm9kZShzdWJqZWN0LmdldCgpLCBzdWJqZWN0Tm9kZSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGl0ZXJhdG9yID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIHN1YmplY3QuZ2V0KCks
IHByb3BlcnR5TmFtZXMoKS5pdGVyYXRvclByaXZhdGVOYW1lKTsKICAgICB7Ci0gICAgICAgIENh
bGxBcmd1bWVudHMgYXJncygqdGhpcywgMCk7CisgICAgICAgIENhbGxBcmd1bWVudHMgYXJncygq
dGhpcywgbnVsbHB0cik7CiAgICAgICAgIGVtaXRNb3ZlKGFyZ3MudGhpc1JlZ2lzdGVyKCksIHN1
YmplY3QuZ2V0KCkpOwogICAgICAgICBlbWl0Q2FsbChpdGVyYXRvci5nZXQoKSwgaXRlcmF0b3Iu
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgYXJncywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2
b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKICAgICB9Ci0gICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGl0ZXJhdG9yTmV4dCA9IGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCBpdGVyYXRvci5n
ZXQoKSwgcHJvcGVydHlOYW1lcygpLml0ZXJhdG9yTmV4dFByaXZhdGVOYW1lKTsKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBuZXdUZW1wb3JhcnkoKTsKICAgICBlbWl0TG9hZCh2YWx1
ZS5nZXQoKSwganNVbmRlZmluZWQoKSk7CiAgICAgCiAgICAgZW1pdEp1bXAoc2NvcGUtPmNvbnRp
bnVlVGFyZ2V0KCkpOwogICAgIAogICAgIFJlZlB0cjxMYWJlbD4gbG9vcFN0YXJ0ID0gbmV3TGFi
ZWwoKTsKKyAgICBSZWZQdHI8TGFiZWw+IGl0ZXJhdG9yRG9uZSA9IG5ld0xhYmVsKCk7CiAgICAg
ZW1pdExhYmVsKGxvb3BTdGFydC5nZXQoKSk7CiAgICAgZW1pdExvb3BIaW50KCk7CisKKyAgICBS
ZWZQdHI8TGFiZWw+IHRyeVN0YXJ0TGFiZWwgPSBuZXdMYWJlbCgpOworICAgIGVtaXRMYWJlbCh0
cnlTdGFydExhYmVsLmdldCgpKTsKKyAgICBUcnlEYXRhKiB0cnlEYXRhID0gcHVzaFRyeSh0cnlT
dGFydExhYmVsLmdldCgpKTsKICAgICBjYWxsQmFjaygqdGhpcywgdmFsdWUuZ2V0KCkpOworICAg
IFJlZlB0cjxMYWJlbD4gY2F0Y2hIZXJlID0gZW1pdExhYmVsKG5ld0xhYmVsKCkuZ2V0KCkpOwor
CiAgICAgZW1pdExhYmVsKHNjb3BlLT5jb250aW51ZVRhcmdldCgpKTsKLSAgICBDYWxsQXJndW1l
bnRzIG5leHRBcmd1bWVudHMoKnRoaXMsIDAsIDEpOwotICAgIGVtaXRNb3ZlKG5leHRBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIGl0ZXJhdG9yLmdldCgpKTsKLSAgICBlbWl0TW92ZShuZXh0QXJn
dW1lbnRzLmFyZ3VtZW50UmVnaXN0ZXIoMCksIHZhbHVlLmdldCgpKTsKLSAgICBlbWl0Q2FsbCh2
YWx1ZS5nZXQoKSwgaXRlcmF0b3JOZXh0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRB
cmd1bWVudHMsIG5vZGUtPmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RF
bmQoKSk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlc3VsdCA9IG5ld1RlbXBvcmFyeSgpOwot
ICAgIGVtaXRKdW1wSWZGYWxzZShlbWl0RXF1YWxpdHlPcChvcF9zdHJpY3RlcSwgcmVzdWx0Lmdl
dCgpLCB2YWx1ZS5nZXQoKSwgZW1pdExvYWQoMCwgSlNWYWx1ZSh2bSgpLT5pdGVyYXRpb25UZXJt
aW5hdG9yLmdldCgpKSkpLCBsb29wU3RhcnQuZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklE
PiBuZXh0ID0gZW1pdEdldEJ5SWQobmV3VGVtcG9yYXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9w
ZXJ0eU5hbWVzKCkubmV4dCk7CisgICAgeworICAgICAgICBDYWxsQXJndW1lbnRzIG5leHRBcmd1
bWVudHMoKnRoaXMsIG51bGxwdHIpOworICAgICAgICBlbWl0TW92ZShuZXh0QXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBpdGVyYXRvci5nZXQoKSk7CisgICAgICAgIGVtaXRDYWxsKHZhbHVlLmdl
dCgpLCBuZXh0LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIG5leHRBcmd1bWVudHMsIG5vZGUt
PmRpdm90KCksIG5vZGUtPmRpdm90U3RhcnQoKSwgbm9kZS0+ZGl2b3RFbmQoKSk7CisgICAgfQor
ICAgIHsKKyAgICAgICAgUmVmUHRyPExhYmVsPiB0eXBlSXNPYmplY3QgPSBuZXdMYWJlbCgpOwor
ICAgICAgICBlbWl0SnVtcElmVHJ1ZShlbWl0SXNPYmplY3QobmV3VGVtcG9yYXJ5KCksIHZhbHVl
LmdldCgpKSwgdHlwZUlzT2JqZWN0LmdldCgpKTsKKyAgICAgICAgZW1pdFRocm93VHlwZUVycm9y
KEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0
LiIpKTsKKyAgICAgICAgZW1pdExhYmVsKHR5cGVJc09iamVjdC5nZXQoKSk7CisgICAgfQorICAg
IGVtaXRKdW1wSWZUcnVlKGVtaXRHZXRCeUlkKG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwg
cHJvcGVydHlOYW1lcygpLmRvbmUpLCBpdGVyYXRvckRvbmUuZ2V0KCkpOworICAgIGVtaXRHZXRC
eUlkKHZhbHVlLmdldCgpLCB2YWx1ZS5nZXQoKSwgcHJvcGVydHlOYW1lcygpLnZhbHVlKTsKKyAg
ICBlbWl0SnVtcChsb29wU3RhcnQuZ2V0KCkpOworCisgICAgLy8gSXRlcmF0b3JDbG9zZSBzZXF1
ZW5jZSBmb3IgdGhyb3ctZWQgY29udHJvbCBmbG93LgorICAgIHsKKyAgICAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGV4Y2VwdGlvblJlZ2lzdGVyID0gcG9wVHJ5QW5kRW1pdENhdGNoKHRyeURhdGEs
IG5ld1RlbXBvcmFyeSgpLCBjYXRjaEhlcmUuZ2V0KCkpOworICAgICAgICBSZWZQdHI8TGFiZWw+
IHJldGhyb3cgPSBuZXdMYWJlbCgpOworCisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1
cm5NZXRob2QgPSBlbWl0R2V0QnlJZChuZXdUZW1wb3JhcnkoKSwgaXRlcmF0b3IuZ2V0KCksIHBy
b3BlcnR5TmFtZXMoKS5yZXR1cm5LZXl3b3JkKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1p
dElzVW5kZWZpbmVkKG5ld1RlbXBvcmFyeSgpLCByZXR1cm5NZXRob2QuZ2V0KCkpLCByZXRocm93
LmdldCgpKTsKKworICAgICAgICBSZWZQdHI8TGFiZWw+IHJldHVybkNhbGxUcnlTdGFydCA9IG5l
d0xhYmVsKCk7CisgICAgICAgIGVtaXRMYWJlbChyZXR1cm5DYWxsVHJ5U3RhcnQuZ2V0KCkpOwor
ICAgICAgICBUcnlEYXRhKiByZXR1cm5DYWxsVHJ5RGF0YSA9IHB1c2hUcnkocmV0dXJuQ2FsbFRy
eVN0YXJ0LmdldCgpKTsKKworICAgICAgICBDYWxsQXJndW1lbnRzIHJldHVybkFyZ3VtZW50cygq
dGhpcywgbnVsbHB0cik7CisgICAgICAgIGVtaXRNb3ZlKHJldHVybkFyZ3VtZW50cy50aGlzUmVn
aXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOworICAgICAgICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwg
cmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIHJldHVybkFyZ3VtZW50cywg
bm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgpLCBub2RlLT5kaXZvdEVuZCgpKTsKKwor
ICAgICAgICBSZWZQdHI8TGFiZWw+IHJldHVybkNhbGxDYXRjaEhlcmUgPSBlbWl0TGFiZWwobmV3
TGFiZWwoKS5nZXQoKSk7CisgICAgICAgIGVtaXRKdW1wKHJldGhyb3cuZ2V0KCkpOworCisgICAg
ICAgIHBvcFRyeUFuZEVtaXRDYXRjaChyZXR1cm5DYWxsVHJ5RGF0YSwgbmV3VGVtcG9yYXJ5KCks
IHJldHVybkNhbGxDYXRjaEhlcmUuZ2V0KCkpOworICAgICAgICBlbWl0TGFiZWwocmV0aHJvdy5n
ZXQoKSk7CisgICAgICAgIGVtaXRUaHJvdyhleGNlcHRpb25SZWdpc3Rlci5nZXQoKSk7CisgICAg
fQorCisgICAgLy8gSXRlcmF0b3JDbG9zZSBzZXF1ZW5jZSBmb3IgYnJlYWstZWQgY29udHJvbCBm
bG93LgogICAgIGVtaXRMYWJlbChzY29wZS0+YnJlYWtUYXJnZXQoKSk7CisgICAgeworICAgICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuTWV0aG9kID0gZW1pdEdldEJ5SWQobmV3VGVtcG9y
YXJ5KCksIGl0ZXJhdG9yLmdldCgpLCBwcm9wZXJ0eU5hbWVzKCkucmV0dXJuS2V5d29yZCk7Cisg
ICAgICAgIGVtaXRKdW1wSWZUcnVlKGVtaXRJc1VuZGVmaW5lZChuZXdUZW1wb3JhcnkoKSwgcmV0
dXJuTWV0aG9kLmdldCgpKSwgaXRlcmF0b3JEb25lLmdldCgpKTsKKworICAgICAgICBDYWxsQXJn
dW1lbnRzIHJldHVybkFyZ3VtZW50cygqdGhpcywgbnVsbHB0cik7CisgICAgICAgIGVtaXRNb3Zl
KHJldHVybkFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgaXRlcmF0b3IuZ2V0KCkpOworICAgICAg
ICBlbWl0Q2FsbCh2YWx1ZS5nZXQoKSwgcmV0dXJuTWV0aG9kLmdldCgpLCBOb0V4cGVjdGVkRnVu
Y3Rpb24sIHJldHVybkFyZ3VtZW50cywgbm9kZS0+ZGl2b3QoKSwgbm9kZS0+ZGl2b3RTdGFydCgp
LCBub2RlLT5kaXZvdEVuZCgpKTsKKyAgICAgICAgZW1pdEp1bXBJZlRydWUoZW1pdElzT2JqZWN0
KG5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSksIGl0ZXJhdG9yRG9uZS5nZXQoKSk7CisgICAg
ICAgIGVtaXRUaHJvd1R5cGVFcnJvcihBU0NJSUxpdGVyYWwoIkl0ZXJhdG9yIHJlc3VsdCBpbnRl
cmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKSk7CisgICAgfQorCisgICAgZW1pdExhYmVsKGl0ZXJh
dG9yRG9uZS5nZXQoKSk7CiB9CiAKIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
R2V0RW51bWVyYWJsZUxlbmd0aChSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGJhc2UpCkBA
IC0yNjQ5LDYgKzI3MDEsMjMgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRU
b0luZGV4U3RyaW5nKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJRCogaW4KICAgICByZXR1cm4g
ZHN0OwogfQogCisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNPYmplY3Qo
UmVnaXN0ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCit7CisgICAgZW1pdE9wY29kZShvcF9p
c19vYmplY3QpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9
CisKK1JlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0SXNVbmRlZmluZWQoUmVnaXN0
ZXJJRCogZHN0LCBSZWdpc3RlcklEKiBzcmMpCit7CisgICAgZW1pdE9wY29kZShvcF9pc191bmRl
ZmluZWQpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChzcmMtPmluZGV4KCkpOworICAgIHJldHVybiBkc3Q7Cit9CisK
IHZvaWQgQnl0ZWNvZGVHZW5lcmF0b3I6OnB1c2hJbmRleGVkRm9ySW5TY29wZShSZWdpc3RlcklE
KiBsb2NhbFJlZ2lzdGVyLCBSZWdpc3RlcklEKiBpbmRleFJlZ2lzdGVyKQogewogICAgIGlmICgh
bG9jYWxSZWdpc3RlcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA1YzgzMjNhYzBjZjY1NmRlZjkzY2VhYjE1
OGJmMmYwNmFlYWYwMzg5Li5mYjA4MzYzZjY1YTBhOWFiNzQ0MWMxMjNmMTA0OTk1M2M0NWRhMmEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5oCkBAIC01MjksNiArNTI5LDkgQEAKICAgICAgICAgUmVnaXN0ZXJJRCog
ZW1pdE5leHRFbnVtZXJhdG9yUHJvcGVydHlOYW1lKFJlZ2lzdGVySUQqIGRzdCwgUmVnaXN0ZXJJ
RCogZW51bWVyYXRvciwgUmVnaXN0ZXJJRCogaW5kZXgpOwogICAgICAgICBSZWdpc3RlcklEKiBl
bWl0VG9JbmRleFN0cmluZyhSZWdpc3RlcklEKiBkc3QsIFJlZ2lzdGVySUQqIGluZGV4KTsKIAor
ICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNPYmplY3QoUmVnaXN0ZXJJRCogZHN0LCBSZWdpc3Rl
cklEKiBzcmMpOworICAgICAgICBSZWdpc3RlcklEKiBlbWl0SXNVbmRlZmluZWQoUmVnaXN0ZXJJ
RCogZHN0LCBSZWdpc3RlcklEKiBzcmMpOworCiAgICAgICAgIHZvaWQgZW1pdFJlYWRPbmx5RXhj
ZXB0aW9uSWZOZWVkZWQoKTsKIAogICAgICAgICAvLyBTdGFydCBhIHRyeSBibG9jay4gJ3N0YXJ0
JyBtdXN0IGhhdmUgYmVlbiBlbWl0dGVkLgpAQCAtNTQzLDYgKzU0Niw3IEBACiAgICAgICAgIH0K
IAogICAgICAgICB2b2lkIGVtaXRUaHJvd1JlZmVyZW5jZUVycm9yKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7CisgICAgICAgIHZvaWQgZW1pdFRocm93VHlwZUVycm9yKGNvbnN0IFN0cmluZyYgbWVz
c2FnZSk7CiAKICAgICAgICAgdm9pZCBlbWl0UHVzaEZ1bmN0aW9uTmFtZVNjb3BlKFJlZ2lzdGVy
SUQqIGRzdCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHksIFJlZ2lzdGVySUQqIHZhbHVlLCB1
bnNpZ25lZCBhdHRyaWJ1dGVzKTsKICAgICAgICAgdm9pZCBlbWl0UHVzaENhdGNoU2NvcGUoUmVn
aXN0ZXJJRCogZHN0LCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eSwgUmVnaXN0ZXJJRCogdmFs
dWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9U
aHVua0dlbmVyYXRvcnMuY3BwCmluZGV4IDdiMGNkYTY4NmNjNDcyN2VjZjI4YWY3YTU3YTVlMDc1
MTEzNWMzYTUuLjEwMDdkMmQ2N2M5NzU3YTQxYjNiMDM3MGQxMDk0MWNhYTE1ZTlkNDEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvVGh1bmtHZW5lcmF0b3JzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9ycy5jcHAKQEAgLTEwNDQs
MTA3ICsxMDQ0LDYgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGltdWxUaHVua0dlbmVyYXRvcihW
TSogdm0pCiAgICAgcmV0dXJuIGppdC5maW5hbGl6ZSh2bS0+aml0U3R1YnMtPmN0aU5hdGl2ZVRh
aWxDYWxsKHZtKSwgImltdWwiKTsKIH0KIAotc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBh
cnJheUl0ZXJhdG9yTmV4dFRodW5rR2VuZXJhdG9yKFZNKiB2bSwgQXJyYXlJdGVyYXRpb25LaW5k
IGtpbmQpCi17Ci0gICAgdHlwZWRlZiBTcGVjaWFsaXplZFRodW5rSklUOjpUcnVzdGVkSW1tMzIg
VHJ1c3RlZEltbTMyOwotICAgIHR5cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VHJ1c3RlZElt
bVB0ciBUcnVzdGVkSW1tUHRyOwotICAgIHR5cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6QWRk
cmVzcyBBZGRyZXNzOwotICAgIHR5cGVkZWYgU3BlY2lhbGl6ZWRUaHVua0pJVDo6QmFzZUluZGV4
IEJhc2VJbmRleDsKLSAgICB0eXBlZGVmIFNwZWNpYWxpemVkVGh1bmtKSVQ6Okp1bXAgSnVtcDsK
LSAgICAKLSAgICBTcGVjaWFsaXplZFRodW5rSklUIGppdCh2bSk7Ci0gICAgLy8gTWFrZSBzdXJl
IHdlJ3JlIGJlaW5nIGNhbGxlZCBvbiBhbiBhcnJheSBpdGVyYXRvciwgYW5kIGxvYWQgbV9pdGVy
YXRlZE9iamVjdCwgYW5kIG1fbmV4dEluZGV4IGludG8gcmVnVDAgYW5kIHJlZ1QxIHJlc3BlY3Rp
dmVseQotICAgIGppdC5sb2FkQXJndW1lbnRXaXRoU3BlY2lmaWNDbGFzcyhKU0FycmF5SXRlcmF0
b3I6OmluZm8oKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGhpc0FyZ3VtZW50LCBTcGVjaWFsaXpl
ZFRodW5rSklUOjpyZWdUNCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwotCi0gICAgLy8g
RWFybHkgZXhpdCBpZiB3ZSBkb24ndCBoYXZlIGEgdGh1bmsgZm9yIHRoaXMgZm9ybSBvZiBpdGVy
YXRpb24KLSAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoMzIoU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6QWJvdmVPckVxdWFsLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBK
U0FycmF5SXRlcmF0b3I6Om9mZnNldE9mSXRlcmF0aW9uS2luZCgpKSwgVHJ1c3RlZEltbTMyKEFy
cmF5SXRlcmF0ZUtleVZhbHVlKSkpOwotICAgIAotICAgIGppdC5sb2FkUHRyKEFkZHJlc3MoU3Bl
Y2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZJdGVyYXRl
ZE9iamVjdCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIAotICAgIGppdC5s
b2FkMzIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUNCwgSlNBcnJheUl0ZXJhdG9y
OjpvZmZzZXRPZk5leHRJbmRleCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEpOwotICAg
IAotICAgIC8vIFB1bGwgb3V0IHRoZSBidXR0ZXJmbHkgZnJvbSBpdGVyYXRlZE9iamVjdAotICAg
IGppdC5sb2FkOChBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU0NlbGw6Omlu
ZGV4aW5nVHlwZU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMpOwotICAgIGpp
dC5sb2FkUHRyKEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIEpTT2JqZWN0Ojpi
dXR0ZXJmbHlPZmZzZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyKTsKLSAgICBKdW1w
IG51bGxCdXR0ZXJmbHkgPSBqaXQuYnJhbmNoVGVzdFB0cihTcGVjaWFsaXplZFRodW5rSklUOjpa
ZXJvLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7Ci0gICAgCi0gICAgSnVtcCBub3REb25l
ID0gaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6OkJlbG93LCBTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMSwgQWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgQnV0dGVy
Zmx5OjpvZmZzZXRPZlB1YmxpY0xlbmd0aCgpKSk7Ci0KLSAgICBudWxsQnV0dGVyZmx5Lmxpbmso
JmppdCk7Ci0KLSAgICAvLyBSZXR1cm4gdGhlIHRlcm1pbmF0aW9uIHNpZ25hbCB0byBpbmRpY2F0
ZSB0aGF0IHdlJ3ZlIGZpbmlzaGVkCi0gICAgaml0Lm1vdmUoVHJ1c3RlZEltbVB0cih2bS0+aXRl
cmF0aW9uVGVybWluYXRvci5nZXQoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAg
ICBqaXQucmV0dXJuSlNDZWxsKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICAKLSAg
ICBub3REb25lLmxpbmsoJmppdCk7Ci0gICAgCi0gICAgaWYgKGtpbmQgPT0gQXJyYXlJdGVyYXRl
S2V5KSB7Ci0gICAgICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgo
KSkpOwotICAgICAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEp
OwotICAgICAgICByZXR1cm4gaml0LmZpbmFsaXplKHZtLT5qaXRTdHVicy0+Y3RpTmF0aXZlVGFp
bENhbGwodm0pLCAiYXJyYXktaXRlcmF0b3ItbmV4dC1rZXkiKTsKLSAgICAgICAgCi0gICAgfQot
ICAgIEFTU0VSVChraW5kID09IEFycmF5SXRlcmF0ZVZhbHVlKTsKLSAgICAKLSAgICAvLyBPa2F5
LCBub3cgd2UncmUgcmV0dXJuaW5nIGEgdmFsdWUgc28gbWFrZSBzdXJlIHdlJ3JlIGluc2lkZSB0
aGUgdmVjdG9yIHNpemUKLSAgICBqaXQuYXBwZW5kRmFpbHVyZShqaXQuYnJhbmNoMzIoU3BlY2lh
bGl6ZWRUaHVua0pJVDo6QWJvdmVPckVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwg
QWRkcmVzcyhTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgQnV0dGVyZmx5OjpvZmZzZXRPZlZl
Y3Rvckxlbmd0aCgpKSkpOwotICAgIAotICAgIC8vIFNvIG5vdyB3ZSBwZXJmb3JtIGlubGluZSBs
b2FkcyBmb3IgaW50MzIsIHZhbHVlL3VuZGVjaWRlZCwgYW5kIGRvdWJsZSBzdG9yYWdlCi0gICAg
SnVtcCB1bmRlY2lkZWRTdG9yYWdlID0gaml0LmJyYW5jaDMyKFNwZWNpYWxpemVkVGh1bmtKSVQ6
OkVxdWFsLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMywgVHJ1c3RlZEltbTMyKEFycmF5V2l0
aFVuZGVjaWRlZCkpOwotICAgIEp1bXAgbm90Q29udGlndW91c1N0b3JhZ2UgPSBqaXQuYnJhbmNo
MzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6Tm90RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1QzLCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoQ29udGlndW91cykpOwotICAgIAotICAgIHVuZGVj
aWRlZFN0b3JhZ2UubGluaygmaml0KTsKLSAgICAKLSAgICBqaXQubG9hZFB0cihBZGRyZXNzKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkpLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7Ci0gICAgCi0jaWYgVVNFKEpTVkFMVUU2NCkKLSAg
ICBqaXQubG9hZDY0KEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lh
bGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQpLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0gICAgSnVtcCBub3RIb2xlID0gaml0LmJyYW5j
aFRlc3Q2NChTcGVjaWFsaXplZFRodW5rSklUOjpOb25aZXJvLCBTcGVjaWFsaXplZFRodW5rSklU
OjpyZWdUMCk7Ci0gICAgaml0Lm1vdmUoSlNJbnRlcmZhY2VKSVQ6OlRydXN0ZWRJbW02NChWYWx1
ZVVuZGVmaW5lZCksIEpTSW50ZXJmYWNlSklUOjpyZWdUMCk7Ci0gICAgbm90SG9sZS5saW5rKCZq
aXQpOwotICAgIGppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKFNwZWNpYWxpemVk
VGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpKTsK
LSAgICBqaXQucmV0dXJuSlNWYWx1ZShTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMCk7Ci0jZWxz
ZQotICAgIGppdC5sb2FkMzIoQmFzZUluZGV4KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QyLCBT
cGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6VGltZXNFaWdo
dCwgSlNWYWx1ZTo6b2Zmc2V0T2ZUYWcoKSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzKTsK
LSAgICBKdW1wIG5vdEhvbGUgPSBqaXQuYnJhbmNoMzIoU3BlY2lhbGl6ZWRUaHVua0pJVDo6Tm90
RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
RW1wdHlWYWx1ZVRhZykpOwotICAgIGppdC5tb3ZlKEpTSW50ZXJmYWNlSklUOjpUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSwgSlNJbnRlcmZhY2VKSVQ6OnJlZ1QxKTsKLSAgICBq
aXQubW92ZShKU0ludGVyZmFjZUpJVDo6VHJ1c3RlZEltbTMyKDApLCBKU0ludGVyZmFjZUpJVDo6
cmVnVDApOwotICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDQsIEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkp
OwotICAgIGppdC5yZXR1cm5KU1ZhbHVlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU0lu
dGVyZmFjZUpJVDo6cmVnVDEpOwotICAgIG5vdEhvbGUubGluaygmaml0KTsKLSAgICBqaXQubG9h
ZDMyKEJhc2VJbmRleChTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OlRpbWVzRWlnaHQsIEpTVmFsdWU6Om9m
ZnNldE9mUGF5bG9hZCgpKSwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIGppdC5h
ZGQzMihUcnVzdGVkSW1tMzIoMSksIEFkZHJlc3MoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDQs
IEpTQXJyYXlJdGVyYXRvcjo6b2Zmc2V0T2ZOZXh0SW5kZXgoKSkpOwotICAgIGppdC5tb3ZlKFNw
ZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QzLCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMSk7Ci0g
ICAgaml0LnJldHVybkpTVmFsdWUoU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDAsIFNwZWNpYWxp
emVkVGh1bmtKSVQ6OnJlZ1QxKTsKLSNlbmRpZgotICAgIG5vdENvbnRpZ3VvdXNTdG9yYWdlLmxp
bmsoJmppdCk7Ci0gICAgCi0gICAgSnVtcCBub3RJbnQzMlN0b3JhZ2UgPSBqaXQuYnJhbmNoMzIo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6Tm90RXF1YWwsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Qz
LCBUcnVzdGVkSW1tMzIoQXJyYXlXaXRoSW50MzIpKTsKLSAgICBqaXQubG9hZFB0cihBZGRyZXNz
KFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwLCBKU09iamVjdDo6YnV0dGVyZmx5T2Zmc2V0KCkp
LCBTcGVjaWFsaXplZFRodW5rSklUOjpyZWdUMik7Ci0gICAgaml0LmxvYWQzMihCYXNlSW5kZXgo
U3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDIsIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QxLCBT
cGVjaWFsaXplZFRodW5rSklUOjpUaW1lc0VpZ2h0LCBKU1ZhbHVlOjpvZmZzZXRPZlBheWxvYWQo
KSksIFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1QwKTsKLSAgICBqaXQuYWRkMzIoVHJ1c3RlZElt
bTMyKDEpLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJlZ1Q0LCBKU0FycmF5SXRlcmF0
b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpKTsKLSAgICBqaXQucmV0dXJuSW50MzIoU3BlY2lhbGl6
ZWRUaHVua0pJVDo6cmVnVDApOwotICAgIG5vdEludDMyU3RvcmFnZS5saW5rKCZqaXQpOwotICAg
IAotICAgIGppdC5hcHBlbmRGYWlsdXJlKGppdC5icmFuY2gzMihTcGVjaWFsaXplZFRodW5rSklU
OjpOb3RFcXVhbCwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDMsIFRydXN0ZWRJbW0zMihBcnJh
eVdpdGhEb3VibGUpKSk7Ci0gICAgaml0LmxvYWRQdHIoQWRkcmVzcyhTcGVjaWFsaXplZFRodW5r
SklUOjpyZWdUMCwgSlNPYmplY3Q6OmJ1dHRlcmZseU9mZnNldCgpKSwgU3BlY2lhbGl6ZWRUaHVu
a0pJVDo6cmVnVDIpOwotICAgIGppdC5sb2FkRG91YmxlKEJhc2VJbmRleChTcGVjaWFsaXplZFRo
dW5rSklUOjpyZWdUMiwgU3BlY2lhbGl6ZWRUaHVua0pJVDo6cmVnVDEsIFNwZWNpYWxpemVkVGh1
bmtKSVQ6OlRpbWVzRWlnaHQpLCBTcGVjaWFsaXplZFRodW5rSklUOjpmcFJlZ1QwKTsKLSAgICBq
aXQuYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCBBZGRyZXNzKFNwZWNpYWxpemVkVGh1bmtKSVQ6OnJl
Z1Q0LCBKU0FycmF5SXRlcmF0b3I6Om9mZnNldE9mTmV4dEluZGV4KCkpKTsKLSAgICBqaXQucmV0
dXJuRG91YmxlKFNwZWNpYWxpemVkVGh1bmtKSVQ6OmZwUmVnVDApOwotICAgIAotICAgIHJldHVy
biBqaXQuZmluYWxpemUodm0tPmppdFN0dWJzLT5jdGlOYXRpdmVUYWlsQ2FsbCh2bSksICJhcnJh
eS1pdGVyYXRvci1uZXh0LXZhbHVlIik7Ci19Ci0KLU1hY3JvQXNzZW1ibGVyQ29kZVJlZiBhcnJh
eUl0ZXJhdG9yTmV4dEtleVRodW5rR2VuZXJhdG9yKFZNKiB2bSkKLXsKLSAgICByZXR1cm4gYXJy
YXlJdGVyYXRvck5leHRUaHVua0dlbmVyYXRvcih2bSwgQXJyYXlJdGVyYXRlS2V5KTsKLX0KLQot
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0VmFsdWVUaHVua0dlbmVyYXRv
cihWTSogdm0pCi17Ci0gICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0VGh1bmtHZW5lcmF0b3Io
dm0sIEFycmF5SXRlcmF0ZVZhbHVlKTsKLX0KLSAgICAKIH0KIAogI2VuZGlmIC8vIEVOQUJMRShK
SVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1RodW5rR2VuZXJhdG9y
cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9UaHVua0dlbmVyYXRvcnMuaAppbmRleCAy
NDZkYTJlYTY0NTRiOWUzMDI3NmFkMjE3NzRiNTVjMjUzZDQxMGM2Li5mZGIwMGNmODJhZTZiMTBk
Y2IzYTAzOTM2YmM3MGE4YTNkYjNiOWE3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1RodW5rR2VuZXJhdG9ycy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
VGh1bmtHZW5lcmF0b3JzLmgKQEAgLTEzMCw4ICsxMzAsNiBAQCBpbmxpbmUgVGh1bmtHZW5lcmF0
b3IgdmlydHVhbFRodW5rR2VuZXJhdG9yRm9yKAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHNxcnRU
aHVua0dlbmVyYXRvcihWTSopOwogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHBvd1RodW5rR2VuZXJh
dG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgaW11bFRodW5rR2VuZXJhdG9yKFZNKik7
Ci1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgYXJyYXlJdGVyYXRvck5leHRLZXlUaHVua0dlbmVyYXRv
cihWTSopOwotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGFycmF5SXRlcmF0b3JOZXh0VmFsdWVUaHVu
a0dlbmVyYXRvcihWTSopOwogCiB9CiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBl
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0FyZ3VtZW50c0l0ZXJhdG9yUHJv
dG90eXBlLmNwcAppbmRleCBkNzljYzUyZTA5MmJjNmU5MGI0MWJiZTc5OThjMmFiNzA3YWEzZDJj
Li5hZDhiNzU5MGQ4NWU2NTZhOTEyYjRhYTk5MTc2MGZhZDM2MzA2MGJmIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJndW1lbnRzSXRlcmF0b3JQ
cm90b3R5cGUuY3BwCkBAIC0yNiw2ICsyNiw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5j
bHVkZSAiQXJndW1lbnRzSXRlcmF0b3JQcm90b3R5cGUuaCIKIAorI2luY2x1ZGUgIkl0ZXJhdG9y
T3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkpTQXJndW1lbnRzSXRlcmF0b3IuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAKQEAgLTQzLDcgKzQ0LDcgQEAgdm9pZCBBcmd1bWVudHNJdGVyYXRv
clByb3RvdHlwZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2IKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90eXBlKHRoaXMpOwogCiAgICAgSlNDX05B
VElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcmd1
bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvciwgRG9udEVudW0sIDApOwotICAgIEpT
Q19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5h
bWUsIGFyZ3VtZW50c0l0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVtLCAwKTsKKyAg
ICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPm5leHQsIGFyZ3VtZW50c0l0
ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVtLCAwKTsKIH0KIAogRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBhcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvcihD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU1LDggKzU2LDggQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBhcmd1bWVudHNJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0KENhbGxGcmFtZSog
Y2FsbEYKIHsKICAgICBKU1ZhbHVlIHJlc3VsdDsKICAgICBpZiAoanNDYXN0PEpTQXJndW1lbnRz
SXRlcmF0b3IqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKS0+bmV4dChjYWxsRnJhbWUsIHJlc3Vs
dCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dm0oKS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgp
KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVhdGVJdGVyUmVzdWx0T2JqZWN0
KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
Y3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxsRnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsK
IH0KIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJ
dGVyYXRvclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJh
eUl0ZXJhdG9yUHJvdG90eXBlLmNwcAppbmRleCBjODgwMGUzY2RjYTYyNTJlYWI5OGZkMDIxMTg2
MWUxZDBkYmVjMTEyLi5mNzY4NjhjMDNlYTUzMzgwMTBhMmI3YjA2MWZmMGQ0MjkwODU0YmMyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJhdG9yUHJv
dG90eXBlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9BcnJheUl0ZXJh
dG9yUHJvdG90eXBlLmNwcApAQCAtMjAsMTMgKzIwLDIzIEBACiAgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCiAgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKICAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJBcnJheUl0ZXJhdG9yUHJvdG90eXBl
LmgiCiAKK25hbWVzcGFjZSBKU0MgeworCitzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheUl0ZXJhdG9yUHJvdG9GdW5jSXRlcmF0b3IoRXhlY1N0YXRlKik7CisKK30KKwor
I2luY2x1ZGUgIkFycmF5SXRlcmF0b3JQcm90b3R5cGUubHV0LmgiCisKKyNpbmNsdWRlICJJdGVy
YXRvck9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0FycmF5SXRlcmF0b3IuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRl
ICJKU0NlbGxJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKQEAgLTM1LDIy
ICs0NSwzMyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotY29uc3QgQ2xhc3NJbmZvIEFycmF5SXRl
cmF0b3JQcm90b3R5cGU6OnNfaW5mbyA9IHsgIkFycmF5IEl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5m
bywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShBcnJheUl0ZXJhdG9yUHJvdG90eXBlKSB9OwogCi1z
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJhdG9yUHJvdG90eXBl
SXRlcmF0ZShFeGVjU3RhdGUqKTsKK2NvbnN0IENsYXNzSW5mbyBBcnJheUl0ZXJhdG9yUHJvdG90
eXBlOjpzX2luZm8gPSB7ICJBcnJheSBJdGVyYXRvciIsICZCYXNlOjpzX2luZm8sICZhcnJheUl0
ZXJhdG9yUHJvdG90eXBlVGFibGUsIENSRUFURV9NRVRIT0RfVEFCTEUoQXJyYXlJdGVyYXRvclBy
b3RvdHlwZSkgfTsKKworLyogU291cmNlIGZvciBBcnJheUl0ZXJhdG9yUHJvdG90eXBlLmx1dC5o
CitAYmVnaW4gYXJyYXlJdGVyYXRvclByb3RvdHlwZVRhYmxlCisgIG5leHQgICAgICBhcnJheUl0
ZXJhdG9yUHJvdG9GdW5jTmV4dCAgRG9udEVudW18RnVuY3Rpb24gMAorQGVuZAorKi8KIAogdm9p
ZCBBcnJheUl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFs
T2JqZWN0KiBnbG9iYWxPYmplY3QpCiB7CiAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwog
ICAgIEFTU0VSVChpbmhlcml0cyhpbmZvKCkpKTsKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJv
dG90eXBlKHRoaXMpOwotCi0gICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVz
LT5pdGVyYXRvclByaXZhdGVOYW1lLCBhcnJheUl0ZXJhdG9yUHJvdG90eXBlSXRlcmF0ZSwgRG9u
dEVudW0sIDApOworICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRl
cmF0b3JQcml2YXRlTmFtZSwgYXJyYXlJdGVyYXRvclByb3RvRnVuY0l0ZXJhdG9yLCBEb250RW51
bSwgMCk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvclBy
b3RvdHlwZUl0ZXJhdGUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCitib29sIEFycmF5SXRlcmF0b3JQ
cm90b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChKU09iamVjdCogb2JqZWN0LCBFeGVjU3RhdGUq
IGV4ZWMsIFByb3BlcnR5TmFtZSBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKIHsK
LSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOworICAg
IHJldHVybiBnZXRTdGF0aWNGdW5jdGlvblNsb3Q8QmFzZT4oZXhlYywgYXJyYXlJdGVyYXRvclBy
b3RvdHlwZVRhYmxlLCBqc0Nhc3Q8QXJyYXlJdGVyYXRvclByb3RvdHlwZSo+KG9iamVjdCksIHBy
b3BlcnR5TmFtZSwgc2xvdCk7CiB9CiAKKy8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBBcnJheSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JQcm90b0Z1bmNJdGVyYXRvcihFeGVj
U3RhdGUqIGV4ZWMpCit7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShleGVjLT50aGlzVmFs
dWUoKSk7CiB9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQXJyYXlJdGVyYXRvclByb3RvdHlwZS5oCmluZGV4IDEwZWU5YTZh
MjY3NmQ5OWQxOTM3ZDM4Yzg3ODEyOTU4NDRmYTBiNWQuLjU0N2UzMzI3MmQyZTRjMTM1Njk0MGI5
OTNlNDNlYWNmYzAyYzYyOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0FycmF5SXRlcmF0b3JQcm90b3R5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9BcnJheUl0ZXJhdG9yUHJvdG90eXBlLmgKQEAgLTQ4LDEyICs0OCwxNyBAQCBjbGFz
cyBBcnJheUl0ZXJhdG9yUHJvdG90eXBlIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewogICAg
ICAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBl
LCBUeXBlSW5mbyhPYmplY3RUeXBlLCBTdHJ1Y3R1cmVGbGFncyksIGluZm8oKSk7CiAgICAgfQog
Citwcm90ZWN0ZWQ6CisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0g
T3ZlcnJpZGVzR2V0T3duUHJvcGVydHlTbG90IHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CisKIHBy
aXZhdGU6CiAgICAgQXJyYXlJdGVyYXRvclByb3RvdHlwZShWTSYgdm0sIFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQogICAgICAgICA6IEJhc2Uodm0sIHN0cnVjdHVyZSkKICAgICB7CiAgICAgfQorCiAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTR2xvYmFsT2JqZWN0Kik7CisgICAgc3RhdGlj
IGJvb2wgZ2V0T3duUHJvcGVydHlTbG90KEpTT2JqZWN0KiwgRXhlY1N0YXRlKiwgUHJvcGVydHlO
YW1lLCBQcm9wZXJ0eVNsb3QmKTsKIH07CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vbklkZW50aWZpZXJzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25JZGVudGlmaWVycy5oCmluZGV4IGYxMTE3NzNmMTA1NTc0OTgxZTk2
ODc3YzQ3OTNlNGU5NWFkYjU4NTguLjM4NmY1NDNiOWY0NmZjNmY3NWNkYmI1ZDQ0NjAyMWI4MTUw
NjBlYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vbklk
ZW50aWZpZXJzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uSWRl
bnRpZmllcnMuaApAQCAtMjM1LDcgKzIzNSwxMiBAQAogCiAjZGVmaW5lIEpTQ19DT01NT05fUFJJ
VkFURV9JREVOVElGSUVSU19FQUNIX1BST1BFUlRZX05BTUUobWFjcm8pIFwKICAgICBKU0NfQ09N
TU9OX1BSSVZBVEVfSURFTlRJRklFUlNfRUFDSF9XRUxMX0tOT1dOX1NZTUJPTChtYWNybykgXAot
ICAgIG1hY3JvKGl0ZXJhdG9yTmV4dCkgXAorICAgIG1hY3JvKGl0ZXJhdGVkT2JqZWN0KSBcCisg
ICAgbWFjcm8oYXJyYXlJdGVyYXRvck5leHRJbmRleCkgXAorICAgIG1hY3JvKGFycmF5SXRlcmF0
aW9uS2luZCkgXAorICAgIG1hY3JvKGFycmF5SXRlcmF0aW9uS2luZEtleSkgXAorICAgIG1hY3Jv
KGFycmF5SXRlcmF0aW9uS2luZFZhbHVlKSBcCisgICAgbWFjcm8oYXJyYXlJdGVyYXRpb25LaW5k
S2V5VmFsdWUpIFwKICAgICBtYWNybyhyZXNvbHZlKSBcCiAgICAgbWFjcm8ocmVqZWN0KSBcCiAg
ICAgbWFjcm8ocHJvbWlzZSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW50cmluc2ljLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5z
aWMuaAppbmRleCA1MzhiMzI4NGMyNGMxMzM2NDBmYTQ3ZTNlNDI3YmRkNjU3OWFjNGE5Li5mODI4
MzM2OTUwMWUwOTQ1MzA3MTQwOWY0MDZmODlhMjA2ODlhNjBkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9JbnRyaW5zaWMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JbnRyaW5zaWMuaApAQCAtNTIsMTAgKzUyLDcgQEAgZW51bSBJbnRyaW5z
aWMgewogICAgIFN0cmluZ1Byb3RvdHlwZVZhbHVlT2ZJbnRyaW5zaWMsCiAgICAgSU11bEludHJp
bnNpYywKICAgICBGUm91bmRJbnRyaW5zaWMsCi0gICAgQXJyYXlJdGVyYXRvck5leHRWYWx1ZUlu
dHJpbnNpYywKLSAgICBBcnJheUl0ZXJhdG9yTmV4dEtleUludHJpbnNpYywKLSAgICBBcnJheUl0
ZXJhdG9yTmV4dEdlbmVyaWNJbnRyaW5zaWMsCi0gICAgCisKICAgICAvLyBEZWJ1Z2dpbmcgaW50
cmluc2ljcy4gVGhlc2UgYXJlIG1lYW50IHRvIGJlIHVzZWQgYXMgdGVzdGluZyBoYWNrcyB3aXRo
aW4KICAgICAvLyBqc2MuY3BwIGFuZCBzaG91bGQgbmV2ZXIgYmUgZXhwb3NlZCB0byB1c2Vycy4K
ICAgICBERkdUcnVlSW50cmluc2ljLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjAxZDMzZDYxY2U2MDE1
NWNkYjI3ZjA3ODcxNDg4Y2EzZTk2M2I0YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0l0ZXJhdG9yT3BlcmF0aW9ucy5jcHAKQEAgLTAsMCArMSwxNDIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFA
Z21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkl0ZXJhdG9yT3BlcmF0aW9ucy5oIgorCisj
aW5jbHVkZSAiRXJyb3IuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiT2Jq
ZWN0Q29uc3RydWN0b3IuaCIKKwordXNpbmcgbmFtZXNwYWNlIFdURjsKKworbmFtZXNwYWNlIEpT
QyB7CisKK0pTVmFsdWUgaXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVy
YXRvciwgSlNWYWx1ZSB2YWx1ZSkKK3sKKyAgICBKU1ZhbHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJh
dG9yLmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPm5leHQpOworICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CisKKyAg
ICBDYWxsRGF0YSBuZXh0RnVuY3Rpb25DYWxsRGF0YTsKKyAgICBDYWxsVHlwZSBuZXh0RnVuY3Rp
b25DYWxsVHlwZSA9IGdldENhbGxEYXRhKG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbERh
dGEpOworICAgIGlmIChuZXh0RnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpCisgICAg
ICAgIHJldHVybiB0aHJvd1R5cGVFcnJvcihleGVjKTsKKworICAgIE1hcmtlZEFyZ3VtZW50QnVm
ZmVyIG5leHRGdW5jdGlvbkFyZ3VtZW50czsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkKKyAg
ICAgICAgbmV4dEZ1bmN0aW9uQXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CisgICAgSlNWYWx1ZSBy
ZXN1bHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5l
eHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4dEZ1bmN0aW9uQXJndW1lbnRzKTsKKyAg
ICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgp
OworCisgICAgaWYgKCFyZXN1bHQuaXNPYmplY3QoKSkKKyAgICAgICAgcmV0dXJuIHRocm93VHlw
ZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgiSXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBu
b3QgYW4gb2JqZWN0LiIpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0pTVmFsdWUgaXRl
cmF0b3JOZXh0KEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKK3sKKyAgICByZXR1
cm4gaXRlcmF0b3JOZXh0KGV4ZWMsIGl0ZXJhdG9yLCBKU1ZhbHVlKCkpOworfQorCitKU1ZhbHVl
IGl0ZXJhdG9yVmFsdWUoRXhlY1N0YXRlKiBleGVjLCBKU1ZhbHVlIGl0ZXJSZXN1bHQpCit7Cisg
ICAgcmV0dXJuIGl0ZXJSZXN1bHQuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+
dmFsdWUpOworfQorCitib29sIGl0ZXJhdG9yQ29tcGxldGUoRXhlY1N0YXRlKiBleGVjLCBKU1Zh
bHVlIGl0ZXJSZXN1bHQpCit7CisgICAgSlNWYWx1ZSBkb25lID0gaXRlclJlc3VsdC5nZXQoZXhl
YywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5kb25lKTsKKyAgICByZXR1cm4gZG9uZS50b0Jv
b2xlYW4oZXhlYyk7Cit9CisKK0pTVmFsdWUgaXRlcmF0b3JTdGVwKEV4ZWNTdGF0ZSogZXhlYywg
SlNWYWx1ZSBpdGVyYXRvcikKK3sKKyAgICBKU1ZhbHVlIHJlc3VsdCA9IGl0ZXJhdG9yTmV4dChl
eGVjLCBpdGVyYXRvcik7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICBy
ZXR1cm4ganNVbmRlZmluZWQoKTsKKyAgICBib29sIGRvbmUgPSBpdGVyYXRvckNvbXBsZXRlKGV4
ZWMsIHJlc3VsdCk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1
cm4ganNVbmRlZmluZWQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgcmV0dXJuIGpzQm9vbGVh
bihmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBpdGVyYXRvckNsb3NlKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvcikKK3sKKyAgICBKU1ZhbHVlIGV4Y2VwdGlv
bjsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpIHsKKyAgICAgICAgZXhjZXB0aW9uID0g
ZXhlYy0+ZXhjZXB0aW9uKCk7CisgICAgICAgIGV4ZWMtPmNsZWFyRXhjZXB0aW9uKCk7CisgICAg
fQorICAgIEpTVmFsdWUgcmV0dXJuRnVuY3Rpb24gPSBpdGVyYXRvci5nZXQoZXhlYywgZXhlYy0+
dm0oKS5wcm9wZXJ0eU5hbWVzLT5yZXR1cm5LZXl3b3JkKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChyZXR1cm5GdW5jdGlvbi5pc1Vu
ZGVmaW5lZCgpKSB7CisgICAgICAgIGlmICghZXhjZXB0aW9uLmlzRW1wdHkoKSkKKyAgICAgICAg
ICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhlYywgZXhjZXB0aW9uKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIENhbGxEYXRhIHJldHVybkZ1bmN0aW9uQ2FsbERhdGE7Cisg
ICAgQ2FsbFR5cGUgcmV0dXJuRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKHJldHVybkZ1
bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxEYXRhKTsKKyAgICBpZiAocmV0dXJuRnVuY3Rpb25D
YWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgaWYgKCFleGNlcHRpb24uaXNFbXB0
eSgpKQorICAgICAgICAgICAgZXhlYy0+dm0oKS50aHJvd0V4Y2VwdGlvbihleGVjLCBleGNlcHRp
b24pOworICAgICAgICBlbHNlCisgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIE1hcmtlZEFyZ3VtZW50QnVmZmVyIHJldHVybkZ1
bmN0aW9uQXJndW1lbnRzOworICAgIEpTVmFsdWUgaW5uZXJSZXN1bHQgPSBjYWxsKGV4ZWMsIHJl
dHVybkZ1bmN0aW9uLCByZXR1cm5GdW5jdGlvbkNhbGxUeXBlLCByZXR1cm5GdW5jdGlvbkNhbGxE
YXRhLCBpdGVyYXRvciwgcmV0dXJuRnVuY3Rpb25Bcmd1bWVudHMpOworCisgICAgaWYgKCFleGNl
cHRpb24uaXNFbXB0eSgpKSB7CisgICAgICAgIGV4ZWMtPnZtKCkudGhyb3dFeGNlcHRpb24oZXhl
YywgZXhjZXB0aW9uKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFpbm5lclJlc3VsdC5p
c09iamVjdCgpKSB7CisgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIEFTQ0lJTGl0ZXJhbCgi
SXRlcmF0b3IgcmVzdWx0IGludGVyZmFjZSBpcyBub3QgYW4gb2JqZWN0LiIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KK30KKworSlNPYmplY3QqIGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoRXhl
Y1N0YXRlKiBleGVjLCBKU1ZhbHVlIHZhbHVlLCBib29sIGRvbmUpCit7CisgICAgSlNPYmplY3Qq
IHJlc3VsdE9iamVjdCA9IGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMpOworICAgIHJlc3VsdE9i
amVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCksIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5kb25lLCBq
c0Jvb2xlYW4oZG9uZSkpOworICAgIHJlc3VsdE9iamVjdC0+cHV0RGlyZWN0KGV4ZWMtPnZtKCks
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZSwgdmFsdWUpOworICAgIHJldHVybiByZXN1bHRP
YmplY3Q7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9JdGVyYXRvck9wZXJhdGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YmVmMzg4MzVh
YWVlZWZhZWMxMmM4MGE5NWViMTMzYjc4ZGFkZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSXRlcmF0b3JPcGVyYXRpb25zLmgKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaWZuZGVmIEl0ZXJhdG9yT3BlcmF0aW9uc19oCisjZGVmaW5lIEl0ZXJhdG9yT3BlcmF0aW9u
c19oCisKKyNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiSlNPYmplY3QuaCIKKwor
bmFtZXNwYWNlIEpTQyB7CisKK0pTVmFsdWUgaXRlcmF0b3JOZXh0KEV4ZWNTdGF0ZSosIEpTVmFs
dWUgaXRlcmF0b3IsIEpTVmFsdWUpOworSlNWYWx1ZSBpdGVyYXRvck5leHQoRXhlY1N0YXRlKiwg
SlNWYWx1ZSBpdGVyYXRvcik7CitKU1ZhbHVlIGl0ZXJhdG9yVmFsdWUoRXhlY1N0YXRlKiwgSlNW
YWx1ZSBpdGVyUmVzdWx0KTsKK2Jvb2wgaXRlcmF0b3JDb21wbGV0ZShFeGVjU3RhdGUqLCBKU1Zh
bHVlIGl0ZXJSZXN1bHQpOworSlNWYWx1ZSBpdGVyYXRvclN0ZXAoRXhlY1N0YXRlKiwgSlNWYWx1
ZSBpdGVyYXRvcik7Cit2b2lkIGl0ZXJhdG9yQ2xvc2UoRXhlY1N0YXRlKiwgSlNWYWx1ZSBpdGVy
YXRvcik7CitKU09iamVjdCogY3JlYXRlSXRlclJlc3VsdE9iamVjdChFeGVjU3RhdGUqLCBKU1Zh
bHVlLCBib29sIGRvbmUpOworCit9CisKKyNlbmRpZiAvLyAhZGVmaW5lZChJdGVyYXRvck9wZXJh
dGlvbnNfaCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJy
YXlJdGVyYXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0FycmF5SXRl
cmF0b3IuY3BwCmluZGV4IDMzYmFiNzFiNjc5MDI4ODk2Nzk1MjYzYTRmYzU5YTNlYzhkYzNkYmYu
LmRhYzU2MmIxZDlkOTNjZmM1NzZjZDdiMTc5N2MzMmUwMDJjNWVmYTQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQXJyYXlJdGVyYXRvci5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmNwcApAQCAtMzUsMTMy
ICszNSwxNCBAQAogCiBjb25zdCBDbGFzc0luZm8gSlNBcnJheUl0ZXJhdG9yOjpzX2luZm8gPSB7
ICJBcnJheUl0ZXJhdG9yIiwgJkJhc2U6OnNfaW5mbywgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShK
U0FycmF5SXRlcmF0b3IpIH07CiAKLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IGFycmF5SXRlcmF0b3JOZXh0S2V5KEV4ZWNTdGF0ZSopOwotc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgYXJyYXlJdGVyYXRvck5leHRWYWx1ZShFeGVjU3RhdGUqKTsKLXN0YXRp
YyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0R2VuZXJpYyhF
eGVjU3RhdGUqKTsKLQotdm9pZCBKU0FycmF5SXRlcmF0b3I6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQs
IEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCkKK3ZvaWQgSlNBcnJheUl0ZXJhdG9yOjpmaW5pc2hD
cmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiwgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQs
IEpTT2JqZWN0KiBpdGVyYXRlZE9iamVjdCkKIHsKICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2
bSk7CiAgICAgQVNTRVJUKGluaGVyaXRzKGluZm8oKSkpOwotICAgIG1faXRlcmF0aW9uS2luZCA9
IGtpbmQ7Ci0gICAgbV9pdGVyYXRlZE9iamVjdC5zZXQodm0sIHRoaXMsIGl0ZXJhdGVkT2JqZWN0
KTsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIEFycmF5SXRlcmF0ZUtleToKLSAgICAg
ICAgSlNDX05BVElWRV9JTlRSSU5TSUNfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0
b3JOZXh0UHJpdmF0ZU5hbWUsIGFycmF5SXRlcmF0b3JOZXh0S2V5LCBEb250RW51bSwgMCwgQXJy
YXlJdGVyYXRvck5leHRLZXlJbnRyaW5zaWMpOwotICAgICAgICBicmVhazsKLSAgICBjYXNlIEFy
cmF5SXRlcmF0ZVZhbHVlOgotICAgICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJQ19GVU5DVElPTih2
bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgYXJyYXlJdGVyYXRvck5l
eHRWYWx1ZSwgRG9udEVudW0sIDAsIEFycmF5SXRlcmF0b3JOZXh0VmFsdWVJbnRyaW5zaWMpOwot
ICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAgICBKU0NfTkFUSVZFX0lOVFJJTlNJ
Q19GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRvck5leHRQcml2YXRlTmFtZSwgYXJy
YXlJdGVyYXRvck5leHRHZW5lcmljLCBEb250RW51bSwgMCwgQXJyYXlJdGVyYXRvck5leHRHZW5l
cmljSW50cmluc2ljKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotCi19Ci0gICAgCi0gICAgCi12
b2lkIEpTQXJyYXlJdGVyYXRvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNp
dG9yJiB2aXNpdG9yKQotewotICAgIEpTQXJyYXlJdGVyYXRvciogdGhpc09iamVjdCA9IGpzQ2Fz
dDxKU0FycmF5SXRlcmF0b3IqPihjZWxsKTsKLSAgICBBU1NFUlRfR0NfT0JKRUNUX0lOSEVSSVRT
KHRoaXNPYmplY3QsIGluZm8oKSk7Ci0gICAgQmFzZTo6dmlzaXRDaGlsZHJlbih0aGlzT2JqZWN0
LCB2aXNpdG9yKTsKLSAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9pdGVyYXRlZE9i
amVjdCk7Ci19Ci0KLXN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBjcmVhdGVJdGVyYXRvclJlc3VsdChD
YWxsRnJhbWUqIGNhbGxGcmFtZSwgQXJyYXlJdGVyYXRpb25LaW5kIGtpbmQsIHNpemVfdCBpbmRl
eCwgSlNWYWx1ZSByZXN1bHQsIGJvb2wgZG9uZSkKLXsKLSAgICBpZiAoZG9uZSkKLSAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsRnJhbWUtPnZtKCkuaXRlcmF0aW9uVGVybWluYXRv
ci5nZXQoKSk7Ci0gICAgCi0gICAgc3dpdGNoIChraW5kICYgfkFycmF5SXRlcmF0ZVNwYXJzZVRh
ZykgewotICAgIGNhc2UgQXJyYXlJdGVyYXRlS2V5OgotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGluZGV4KSk7Ci0gICAgICAgIAotICAgIGNhc2UgQXJyYXlJdGVyYXRl
VmFsdWU6Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKLSAgICAgICAg
Ci0gICAgY2FzZSBBcnJheUl0ZXJhdGVLZXlWYWx1ZTogewotICAgICAgICBNYXJrZWRBcmd1bWVu
dEJ1ZmZlciBhcmdzOwotICAgICAgICBhcmdzLmFwcGVuZChqc051bWJlcihpbmRleCkpOwotICAg
ICAgICBhcmdzLmFwcGVuZChyZXN1bHQpOwotICAgICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0ID0gY2FsbEZyYW1lLT5jYWxsZWUoKS0+Z2xvYmFsT2JqZWN0KCk7Ci0gICAgICAgIHJl
dHVybiBKU1ZhbHVlOjplbmNvZGUoY29uc3RydWN0QXJyYXkoY2FsbEZyYW1lLCAwLCBnbG9iYWxP
YmplY3QsIGFyZ3MpKTsKLSAgICAgICAgCi0gICAgfQotICAgIGRlZmF1bHQ6Ci0gICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgfQotICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNWYWx1ZSgpKTsKLX0KIAotc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBKU0Nf
SE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0KENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAg
IEpTQXJyYXlJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTQXJyYXlJdGVyYXRv
cio+KGNhbGxGcmFtZS0+dGhpc1ZhbHVlKCkpOwotICAgIGlmICghaXRlcmF0b3IpIHsKLSAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
dGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBBU0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIEFycmF5
SXRlcmF0b3IubmV4dCgpIG9uIGEgbm9uLUFycmF5SXRlcmF0b3Igb2JqZWN0IikpKTsKLSAgICB9
Ci0gICAgSlNPYmplY3QqIGl0ZXJhdGVkT2JqZWN0ID0gaXRlcmF0b3ItPml0ZXJhdGVkT2JqZWN0
KCk7Ci0gICAgc2l6ZV90IGluZGV4ID0gaXRlcmF0b3ItPm5leHRJbmRleCgpOwotICAgIEFycmF5
SXRlcmF0aW9uS2luZCBraW5kID0gaXRlcmF0b3ItPml0ZXJhdGlvbktpbmQoKTsKLSAgICBKU1Zh
bHVlIGpzTGVuZ3RoID0gSlNWYWx1ZShpdGVyYXRlZE9iamVjdCkuZ2V0KGNhbGxGcmFtZSwgY2Fs
bEZyYW1lLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoKTsKLSAgICBpZiAoY2FsbEZyYW1lLT5oYWRF
eGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc051bGwoKSk7Ci0g
ICAgCi0gICAgc2l6ZV90IGxlbmd0aCA9IGpzTGVuZ3RoLnRvVUludDMyKGNhbGxGcmFtZSk7Ci0g
ICAgaWYgKGNhbGxGcmFtZS0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVl
OjplbmNvZGUoanNOdWxsKCkpOwotICAgIAotICAgIGlmIChpbmRleCA+PSBsZW5ndGgpIHsKLSAg
ICAgICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgICAgICByZXR1cm4gY3JlYXRlSXRlcmF0b3JS
ZXN1bHQoY2FsbEZyYW1lLCBraW5kLCBpbmRleCwganNVbmRlZmluZWQoKSwgdHJ1ZSk7Ci0gICAg
fQotICAgIGlmIChKU1ZhbHVlIHJlc3VsdCA9IGl0ZXJhdGVkT2JqZWN0LT50cnlHZXRJbmRleFF1
aWNrbHkoaW5kZXgpKSB7Ci0gICAgICAgIGl0ZXJhdG9yLT5zZXROZXh0SW5kZXgoaW5kZXggKyAx
KTsKLSAgICAgICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KGNhbGxGcmFtZSwga2luZCwg
aW5kZXgsIHJlc3VsdCwgZmFsc2UpOwotICAgIH0KLSAgICAKLSAgICBKU1ZhbHVlIHJlc3VsdCA9
IGpzVW5kZWZpbmVkKCk7Ci0gICAgUHJvcGVydHlTbG90IHNsb3QoaXRlcmF0ZWRPYmplY3QpOwot
ICAgIGlmIChraW5kID4gQXJyYXlJdGVyYXRlU3BhcnNlVGFnKSB7Ci0gICAgICAgIC8vIFdlIGFz
c3VtZSB0aGF0IHRoZSBpbmRleGVkIHByb3BlcnR5IHdpbGwgYmUgYW4gb3duIHByb3BlcnR5IHNv
IGNhY2hlIHRoZSBnZXRPd25Qcm9wZXJ0eQotICAgICAgICAvLyBtZXRob2QgbG9jYWxseQotICAg
ICAgICBhdXRvIGdldE93blByb3BlcnR5U2xvdEJ5SW5kZXggPSBpdGVyYXRlZE9iamVjdC0+bWV0
aG9kVGFibGUoKS0+Z2V0T3duUHJvcGVydHlTbG90QnlJbmRleDsKLSAgICAgICAgd2hpbGUgKGlu
ZGV4IDwgbGVuZ3RoKSB7Ci0gICAgICAgICAgICBpZiAoZ2V0T3duUHJvcGVydHlTbG90QnlJbmRl
eChpdGVyYXRlZE9iamVjdCwgY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpIHsKLSAgICAgICAgICAg
ICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYgKGl0ZXJhdGVkT2Jq
ZWN0LT5nZXRQcm9wZXJ0eVNsb3QoY2FsbEZyYW1lLCBpbmRleCwgc2xvdCkpIHsKLSAgICAgICAg
ICAgICAgICByZXN1bHQgPSBzbG90LmdldFZhbHVlKGNhbGxGcmFtZSwgaW5kZXgpOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgaW5kZXgrKzsKLSAg
ICAgICAgfQotICAgIH0gZWxzZSBpZiAoaXRlcmF0ZWRPYmplY3QtPmdldFByb3BlcnR5U2xvdChj
YWxsRnJhbWUsIGluZGV4LCBzbG90KSkKLSAgICAgICAgcmVzdWx0ID0gc2xvdC5nZXRWYWx1ZShj
YWxsRnJhbWUsIGluZGV4KTsKLSAgICAKLSAgICBpZiAoaW5kZXggPT0gbGVuZ3RoKQotICAgICAg
ICBpdGVyYXRvci0+ZmluaXNoKCk7Ci0gICAgZWxzZQotICAgICAgICBpdGVyYXRvci0+c2V0TmV4
dEluZGV4KGluZGV4ICsgMSk7Ci0gICAgcmV0dXJuIGNyZWF0ZUl0ZXJhdG9yUmVzdWx0KGNhbGxG
cmFtZSwga2luZCwgaW5kZXgsIGpzVW5kZWZpbmVkKCksIGluZGV4ID09IGxlbmd0aCk7Ci19Ci0g
ICAgCi1FbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGFycmF5SXRlcmF0b3JOZXh0S2V5KENh
bGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dChjYWxs
RnJhbWUpOwotfQotICAgIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBhcnJheUl0ZXJh
dG9yTmV4dFZhbHVlKENhbGxGcmFtZSogY2FsbEZyYW1lKQotewotICAgIHJldHVybiBhcnJheUl0
ZXJhdG9yTmV4dChjYWxsRnJhbWUpOwotfQotICAgIAotRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1Rf
Q0FMTCBhcnJheUl0ZXJhdG9yTmV4dEdlbmVyaWMoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCi17Ci0g
ICAgcmV0dXJuIGFycmF5SXRlcmF0b3JOZXh0KGNhbGxGcmFtZSk7CisgICAgcHV0RGlyZWN0KHZt
LCB2bS5wcm9wZXJ0eU5hbWVzLT5pdGVyYXRlZE9iamVjdFByaXZhdGVOYW1lLCBpdGVyYXRlZE9i
amVjdCk7CisgICAgcHV0RGlyZWN0KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5hcnJheUl0ZXJhdG9y
TmV4dEluZGV4UHJpdmF0ZU5hbWUsIGpzTnVtYmVyKDApKTsKKyAgICBwdXREaXJlY3Qodm0sIHZt
LnByb3BlcnR5TmFtZXMtPmFycmF5SXRlcmF0aW9uS2luZFByaXZhdGVOYW1lLCBqc051bWJlcihr
aW5kKSk7CiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTQXJyYXlJdGVyYXRvci5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJh
eUl0ZXJhdG9yLmgKaW5kZXggN2JiMGZjNWQzNjljYzA3NDEyMzY3YjZiOTg1OWNhOTViNjUxZDY4
Yy4uMmU5NzZiZTQ1ODhhMmM4M2FjYjdlMDMyZDE1ODgyZGMyYTBhMWI0OCAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNBcnJheUl0ZXJhdG9yLmgKQEAgLTMzLDExICsz
Myw3IEBACiBlbnVtIEFycmF5SXRlcmF0aW9uS2luZCA6IHVpbnQzMl90IHsKICAgICBBcnJheUl0
ZXJhdGVLZXksCiAgICAgQXJyYXlJdGVyYXRlVmFsdWUsCi0gICAgQXJyYXlJdGVyYXRlS2V5VmFs
dWUsCi0gICAgQXJyYXlJdGVyYXRlU3BhcnNlVGFnID0gNCwKLSAgICBBcnJheUl0ZXJhdGVTcGFy
c2VLZXksCi0gICAgQXJyYXlJdGVyYXRlU3BhcnNlVmFsdWUsCi0gICAgQXJyYXlJdGVyYXRlU3Bh
cnNlS2V5VmFsdWUKKyAgICBBcnJheUl0ZXJhdGVLZXlWYWx1ZQogfTsKIAogY2xhc3MgSlNBcnJh
eUl0ZXJhdG9yIDogcHVibGljIEpTTm9uRmluYWxPYmplY3QgewpAQCAtNTksMzAgKzU1LDE0IEBA
IGNsYXNzIEpTQXJyYXlJdGVyYXRvciA6IHB1YmxpYyBKU05vbkZpbmFsT2JqZWN0IHsKICAgICAg
ICAgcmV0dXJuIGluc3RhbmNlOwogICAgIH0KIAotICAgIEFycmF5SXRlcmF0aW9uS2luZCBpdGVy
YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRpb25LaW5kOyB9Ci0gICAgSlNPYmpl
Y3QqIGl0ZXJhdGVkT2JqZWN0KCkgY29uc3QgeyByZXR1cm4gbV9pdGVyYXRlZE9iamVjdC5nZXQo
KTsgfQotICAgIHNpemVfdCBuZXh0SW5kZXgoKSBjb25zdCB7IHJldHVybiBtX25leHRJbmRleDsg
fQotICAgIHZvaWQgc2V0TmV4dEluZGV4KHNpemVfdCBuZXh0SW5kZXgpIHsgbV9uZXh0SW5kZXgg
PSBuZXh0SW5kZXg7IH0KLSAgICB2b2lkIGZpbmlzaCgpIHsgbV9uZXh0SW5kZXggPSBzdGQ6Om51
bWVyaWNfbGltaXRzPHVpbnQzMl90Pjo6bWF4KCk7IH0KLSAgICAKICAgICB1c2luZyBKU05vbkZp
bmFsT2JqZWN0OjphcnJheVN0b3JhZ2VPck51bGw7Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkl0ZXJhdGlvbktpbmQoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNBcnJheUl0ZXJh
dG9yLCBtX2l0ZXJhdGlvbktpbmQpOyB9Ci0gICAgc3RhdGljIHB0cmRpZmZfdCBvZmZzZXRPZkl0
ZXJhdGVkT2JqZWN0KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlJdGVyYXRvciwg
bV9pdGVyYXRlZE9iamVjdCk7IH0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mTmV4dElu
ZGV4KCkgeyByZXR1cm4gT0JKRUNUX09GRlNFVE9GKEpTQXJyYXlJdGVyYXRvciwgbV9uZXh0SW5k
ZXgpOyB9Ci0KIHByaXZhdGU6CiAgICAgSlNBcnJheUl0ZXJhdG9yKFZNJiB2bSwgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJlKQotICAgICAgICAsIG1f
bmV4dEluZGV4KDApCiAgICAgewogICAgIH0KIAogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0m
LCBKU0dsb2JhbE9iamVjdCosIEFycmF5SXRlcmF0aW9uS2luZCwgSlNPYmplY3QqIGl0ZXJhdGVk
T2JqZWN0KTsKLSAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNp
dG9yJik7Ci0gICAgCi0gICAgQXJyYXlJdGVyYXRpb25LaW5kIG1faXRlcmF0aW9uS2luZDsKLSAg
ICBXcml0ZUJhcnJpZXI8SlNPYmplY3Q+IG1faXRlcmF0ZWRPYmplY3Q7Ci0gICAgdWludDMyX3Qg
bV9uZXh0SW5kZXg7CiB9OwogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKaW5kZXggNmJhOTIyZjc1MDEzMTk4M2M1ZWMxMTlkODc5Mzcy
NzI0MzA3OTZhMC4uMDVhZTIyYjhhYWQ5Y2JjYmM5MjhlMjE5Y2I1ZmE5ZTU4MjdmYTVkZSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcApA
QCAtNDI3LDYgKzQyNyw5IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmluaXQoVk0mIHZtKQogICAg
ICAgICBHbG9iYWxQcm9wZXJ0eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YWJzUHJpdmF0ZU5hbWUs
IHByaXZhdGVGdW5jQWJzLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAgICAg
ICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5mbG9vclByaXZhdGVOYW1l
LCBwcml2YXRlRnVuY0Zsb29yLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSksCiAg
ICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5pc0Zpbml0ZVByaXZh
dGVOYW1lLCBwcml2YXRlRnVuY0lzRmluaXRlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFk
T25seSksCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5hcnJh
eUl0ZXJhdGlvbktpbmRLZXlQcml2YXRlTmFtZSwganNOdW1iZXIoQXJyYXlJdGVyYXRlS2V5KSwg
RG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpLAorICAgICAgICBHbG9iYWxQcm9wZXJ0
eUluZm8odm0ucHJvcGVydHlOYW1lcy0+YXJyYXlJdGVyYXRpb25LaW5kVmFsdWVQcml2YXRlTmFt
ZSwganNOdW1iZXIoQXJyYXlJdGVyYXRlVmFsdWUpLCBEb250RW51bSB8IERvbnREZWxldGUgfCBS
ZWFkT25seSksCisgICAgICAgIEdsb2JhbFByb3BlcnR5SW5mbyh2bS5wcm9wZXJ0eU5hbWVzLT5h
cnJheUl0ZXJhdGlvbktpbmRLZXlWYWx1ZVByaXZhdGVOYW1lLCBqc051bWJlcihBcnJheUl0ZXJh
dGVLZXlWYWx1ZSksIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KSwKICAgICB9Owog
ICAgIGFkZFN0YXRpY0dsb2JhbHMoc3RhdGljR2xvYmFscywgV1RGX0FSUkFZX0xFTkdUSChzdGF0
aWNHbG9iYWxzKSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1Byb21pc2VDb25zdHJ1Y3Rvci5jcHAKaW5kZXggZjFhMmU1NjJmOWFiZjQwMmFiNjM4
ZGMwOWM2ZWZjMzgwZDFjNWI0ZC4uYWZkZmMyN2QyMGE4NjVhMzQzYWYyMWQ1Yzc0ODhkYzQzNjVi
MTcxNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9taXNl
Q29uc3RydWN0b3IuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJv
bWlzZUNvbnN0cnVjdG9yLmNwcApAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShQUk9NSVNF
UykKIAogI2luY2x1ZGUgIkVycm9yLmgiCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25zLmgi
CiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiSlNQcm9taXNlLmgiCkBAIC0yMzIsMTA0ICsyMzMsNTcgQEAgRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNSZWplY3QoRXhl
Y1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGVmZXJyZWQtPnByb21p
c2UoKSk7CiB9CiAKLUVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3Ry
dWN0b3JGdW5jUmFjZShFeGVjU3RhdGUqIGV4ZWMpCitzdGF0aWMgdm9pZCBwZXJmb3JtUHJvbWlz
ZVJhY2VMb29wKEV4ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvciwgSlNQcm9taXNlRGVm
ZXJyZWQqIGRlZmVycmVkLCBKU1ZhbHVlIEMpCiB7Ci0gICAgLy8gLS0gUHJvbWlzZS5yYWNlKGl0
ZXJhYmxlKSAtLQotICAgIEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKLSAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwotCi0gICAgLy8gMS4gTGV0ICdDJyBiZSB0aGUgdGhpcyB2
YWx1ZS4KLSAgICBKU1ZhbHVlIEMgPSBleGVjLT50aGlzVmFsdWUoKTsKLQotICAgIC8vIDIuIExl
dCAnZGVmZXJyZWQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBHZXREZWZlcnJlZChDKS4KLSAg
ICBKU1ZhbHVlIGRlZmVycmVkVmFsdWUgPSBjcmVhdGVKU1Byb21pc2VEZWZlcnJlZEZyb21Db25z
dHJ1Y3RvcihleGVjLCBDKTsKLQotICAgIC8vIDMuIFJldHVybklmQWJydXB0KGRlZmVycmVkKS4K
LSAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNVbmRlZmluZWQoKSk7Ci0KLSAgICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQg
PSBqc0Nhc3Q8SlNQcm9taXNlRGVmZXJyZWQqPihkZWZlcnJlZFZhbHVlKTsKLQotICAgIC8vIDQu
IExldCAnaXRlcmF0b3InIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBHZXRJdGVyYXRvcihpdGVy
YWJsZSkuCi0gICAgSlNWYWx1ZSBpdGVyYXRvckZ1bmN0aW9uID0gaXRlcmFibGUuZ2V0KGV4ZWMs
IHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yUHJpdmF0ZU5hbWUpOwotICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWpl
Y3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLQotICAgIENhbGxEYXRhIGl0ZXJhdG9yRnVuY3Rpb25D
YWxsRGF0YTsKLSAgICBDYWxsVHlwZSBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxs
RGF0YShpdGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbERhdGEpOwotICAgIGlm
IChpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5cGVOb25lKSB7Ci0gICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVw
dFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotICAgIH0KLQotICAgIEFyZ0xpc3QgaXRlcmF0
b3JGdW5jdGlvbkFyZ3VtZW50czsKLSAgICBKU1ZhbHVlIGl0ZXJhdG9yID0gY2FsbChleGVjLCBp
dGVyYXRvckZ1bmN0aW9uLCBpdGVyYXRvckZ1bmN0aW9uQ2FsbFR5cGUsIGl0ZXJhdG9yRnVuY3Rp
b25DYWxsRGF0YSwgaXRlcmFibGUsIGl0ZXJhdG9yRnVuY3Rpb25Bcmd1bWVudHMpOwotCi0gICAg
Ly8gNS4gUmVqZWN0SWZBYnJ1cHQoaXRlcmF0b3IsIGRlZmVycmVkKS4KLSAgICBpZiAoZXhlYy0+
aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVq
ZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7Ci0KICAgICAvLyA2LiBSZXBlYXQKICAgICBkbyB7CiAg
ICAgICAgIC8vIGkuIExldCAnbmV4dCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEl0ZXJhdG9y
U3RlcChpdGVyYXRvcikuCi0gICAgICAgIEpTVmFsdWUgbmV4dEZ1bmN0aW9uID0gaXRlcmF0b3Iu
Z2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JOZXh0UHJpdmF0ZU5h
bWUpOwotICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwotCi0g
ICAgICAgIENhbGxEYXRhIG5leHRGdW5jdGlvbkNhbGxEYXRhOwotICAgICAgICBDYWxsVHlwZSBu
ZXh0RnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKG5leHRGdW5jdGlvbiwgbmV4dEZ1bmN0
aW9uQ2FsbERhdGEpOwotICAgICAgICBpZiAobmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPT0gQ2FsbFR5
cGVOb25lKSB7Ci0gICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjKTsKLSAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7
Ci0gICAgICAgIH0KKyAgICAgICAgSlNWYWx1ZSBuZXh0ID0gaXRlcmF0b3JTdGVwKGV4ZWMsIGl0
ZXJhdG9yKTsKIAotICAgICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciBuZXh0RnVuY3Rpb25Bcmd1
bWVudHM7Ci0gICAgICAgIG5leHRGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQoanNVbmRlZmluZWQo
KSk7Ci0gICAgICAgIEpTVmFsdWUgbmV4dCA9IGNhbGwoZXhlYywgbmV4dEZ1bmN0aW9uLCBuZXh0
RnVuY3Rpb25DYWxsVHlwZSwgbmV4dEZ1bmN0aW9uQ2FsbERhdGEsIGl0ZXJhdG9yLCBuZXh0RnVu
Y3Rpb25Bcmd1bWVudHMpOwotICAgICAgICAKICAgICAgICAgLy8gaWkuIFJlamVjdElmQWJydXB0
KG5leHQsIGRlZmVycmVkKS4KICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVm
ZXJyZWQpKTsKLSAgICAKKyAgICAgICAgICAgIHJldHVybjsKKwogICAgICAgICAvLyBpaWkuIElm
ICduZXh0JyBpcyBmYWxzZSwgcmV0dXJuIGRlZmVycmVkLltbUHJvbWlzZV1dLgotICAgICAgICAv
LyBOb3RlOiBXZSBpbXBsZW1lbnQgdGhpcyBhcyBhbiBpdGVyYXRpb25UZXJtaW5hdG9yCi0gICAg
ICAgIGlmIChuZXh0ID09IHZtLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkpCi0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGRlZmVycmVkLT5wcm9taXNlKCkpOwotICAgICAgICAK
KyAgICAgICAgaWYgKG5leHQuaXNGYWxzZSgpKQorICAgICAgICAgICAgcmV0dXJuOworCiAgICAg
ICAgIC8vIGl2LiBMZXQgJ25leHRWYWx1ZScgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEl0ZXJh
dG9yVmFsdWUobmV4dCkuCiAgICAgICAgIC8vIHYuIFJlamVjdElmQWJydXB0KG5leHRWYWx1ZSwg
ZGVmZXJyZWQpLgotICAgICAgICAvLyBOb3RlOiAnbmV4dCcgaXMgYWxyZWFkeSB0aGUgdmFsdWUs
IHNvIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8gaGVyZS4KKyAgICAgICAgSlNWYWx1ZSBuZXh0VmFs
dWUgPSBpdGVyYXRvclZhbHVlKGV4ZWMsIG5leHQpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgLy8gdmkuIExldCAnbmV4
dFByb21pc2UnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJbnZva2UoQywgInJlc29sdmUiLCAo
bmV4dFZhbHVlKSkuCi0gICAgICAgIEpTVmFsdWUgcmVzb2x2ZUZ1bmN0aW9uID0gQy5nZXQoZXhl
Yywgdm0ucHJvcGVydHlOYW1lcy0+cmVzb2x2ZSk7CisgICAgICAgIEpTVmFsdWUgcmVzb2x2ZUZ1
bmN0aW9uID0gQy5nZXQoZXhlYywgZXhlYy0+dm0oKS5wcm9wZXJ0eU5hbWVzLT5yZXNvbHZlKTsK
ICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAgICAg
ICAgIHJldHVybjsKIAogICAgICAgICBDYWxsRGF0YSByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YTsK
ICAgICAgICAgQ2FsbFR5cGUgcmVzb2x2ZUZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShy
ZXNvbHZlRnVuY3Rpb24sIHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhKTsKICAgICAgICAgaWYgKHJl
c29sdmVGdW5jdGlvbkNhbGxUeXBlID09IENhbGxUeXBlTm9uZSkgewogICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFi
cnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKICAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgcmVzb2x2ZUZ1bmN0aW9uQXJn
dW1lbnRzOwotICAgICAgICByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKG5leHQpOwor
ICAgICAgICByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKG5leHRWYWx1ZSk7CiAgICAg
ICAgIEpTVmFsdWUgbmV4dFByb21pc2UgPSBjYWxsKGV4ZWMsIHJlc29sdmVGdW5jdGlvbiwgcmVz
b2x2ZUZ1bmN0aW9uQ2FsbFR5cGUsIHJlc29sdmVGdW5jdGlvbkNhbGxEYXRhLCBDLCByZXNvbHZl
RnVuY3Rpb25Bcmd1bWVudHMpOwogCiAgICAgICAgIC8vIHZpaS4gUmVqZWN0SWZBYnJ1cHQobmV4
dFByb21pc2UsIGRlZmVycmVkKS4KICAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQot
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywg
ZGVmZXJyZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyB2aWlpLiBMZXQg
J3Jlc3VsdCcgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEludm9rZShuZXh0UHJvbWlzZSwgInRo
ZW4iLCAoZGVmZXJyZWQuW1tSZXNvbHZlXV0sIGRlZmVycmVkLltbUmVqZWN0XV0pKS4KLSAgICAg
ICAgSlNWYWx1ZSB0aGVuRnVuY3Rpb24gPSBuZXh0UHJvbWlzZS5nZXQoZXhlYywgdm0ucHJvcGVy
dHlOYW1lcy0+dGhlbik7CisgICAgICAgIEpTVmFsdWUgdGhlbkZ1bmN0aW9uID0gbmV4dFByb21p
c2UuZ2V0KGV4ZWMsIGV4ZWMtPnZtKCkucHJvcGVydHlOYW1lcy0+dGhlbik7CiAgICAgICAgIGlm
IChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgQ2FsbERhdGEgdGhlbkZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxU
eXBlIHRoZW5GdW5jdGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodGhlbkZ1bmN0aW9uLCB0aGVu
RnVuY3Rpb25DYWxsRGF0YSk7CiAgICAgICAgIGlmICh0aGVuRnVuY3Rpb25DYWxsVHlwZSA9PSBD
YWxsVHlwZU5vbmUpIHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAg
ICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJy
ZWQpKTsKKyAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCiAgICAgICAgIE1hcmtlZEFy
Z3VtZW50QnVmZmVyIHRoZW5GdW5jdGlvbkFyZ3VtZW50czsKQEAgLTM0MCwxNCArMjk0LDEzIEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jUmFj
ZShFeGVjU3RhdGUqIGV4ZWMpCiAKICAgICAgICAgLy8gaXguIFJlamVjdElmQWJydXB0KHJlc3Vs
dCwgZGVmZXJyZWQpLgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJl
ZCkpOworICAgICAgICAgICAgcmV0dXJuOwogICAgIH0gd2hpbGUgKHRydWUpOwogfQogCi1FbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVj
U3RhdGUqIGV4ZWMpCitFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJvbWlzZUNvbnN0
cnVjdG9yRnVuY1JhY2UoRXhlY1N0YXRlKiBleGVjKQogewotICAgIC8vIC0tIFByb21pc2UuYWxs
KGl0ZXJhYmxlKSAtLQotCisgICAgLy8gLS0gUHJvbWlzZS5yYWNlKGl0ZXJhYmxlKSAtLQogICAg
IEpTVmFsdWUgaXRlcmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKICAgICBWTSYgdm0gPSBleGVj
LT52bSgpOwogCkBAIC0zNjEsOSArMzE0LDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FM
TCBKU1Byb21pc2VDb25zdHJ1Y3RvckZ1bmNBbGwoRXhlY1N0YXRlKiBleGVjKQogICAgIGlmIChl
eGVjLT5oYWRFeGNlcHRpb24oKSkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1Vu
ZGVmaW5lZCgpKTsKIAotICAgIC8vIE5PVEU6IEEgbm9uLWFicnVwdCBjb21wbGV0aW9uIG9mIGNy
ZWF0ZUpTUHJvbWlzZURlZmVycmVkRnJvbUNvbnN0cnVjdG9yIGltcGxpZXMgdGhhdAotICAgIC8v
IEMgYW5kIGRlZmVycmVkVmFsdWUgYXJlIG9iamVjdHMuCi0gICAgSlNPYmplY3QqIHRoaXNPYmpl
Y3QgPSBhc09iamVjdChDKTsKICAgICBKU1Byb21pc2VEZWZlcnJlZCogZGVmZXJyZWQgPSBqc0Nh
c3Q8SlNQcm9taXNlRGVmZXJyZWQqPihkZWZlcnJlZFZhbHVlKTsKIAogICAgIC8vIDQuIExldCAn
aXRlcmF0b3InIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBHZXRJdGVyYXRvcihpdGVyYWJsZSku
CkBAIC0zODUsNDAgKzMzNSwzNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIEpTUHJv
bWlzZUNvbnN0cnVjdG9yRnVuY0FsbChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQogICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVj
dGlvbihleGVjLCBkZWZlcnJlZCkpOwogCisgICAgcGVyZm9ybVByb21pc2VSYWNlTG9vcChleGVj
LCBpdGVyYXRvciwgZGVmZXJyZWQsIEMpOworICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkK
KyAgICAgICAgaXRlcmF0b3JDbG9zZShleGVjLCBpdGVyYXRvcik7CisgICAgaWYgKGV4ZWMtPmhh
ZEV4Y2VwdGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVj
dGlvbihleGVjLCBkZWZlcnJlZCkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoZGVmZXJy
ZWQtPnByb21pc2UoKSk7Cit9CisKK3N0YXRpYyBKU1ZhbHVlIHBlcmZvcm1Qcm9taXNlQWxsKEV4
ZWNTdGF0ZSogZXhlYywgSlNWYWx1ZSBpdGVyYXRvciwgSlNWYWx1ZSBDLCBKU1Byb21pc2VEZWZl
cnJlZCogZGVmZXJyZWQpCit7CisgICAgSlNPYmplY3QqIHRoaXNPYmplY3QgPSBhc09iamVjdChD
KTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworCiAgICAgLy8gNi4gTGV0ICd2YWx1ZXMnIGJl
IHRoZSByZXN1bHQgb2YgY2FsbGluZyBBcnJheUNyZWF0ZSgwKS4KICAgICBKU0FycmF5KiB2YWx1
ZXMgPSBjb25zdHJ1Y3RFbXB0eUFycmF5KGV4ZWMsIG51bGxwdHIsIHRoaXNPYmplY3QtPmdsb2Jh
bE9iamVjdCgpKTsKLSAgICAKKwogICAgIC8vIDcuIExldCAnY291bnRkb3duSG9sZGVyJyBiZSBS
ZWNvcmQgeyBbW0NvdW50ZG93bl1dOiAwIH0uCiAgICAgTnVtYmVyT2JqZWN0KiBjb3VudGRvd25I
b2xkZXIgPSBjb25zdHJ1Y3ROdW1iZXIoZXhlYywgdGhpc09iamVjdC0+Z2xvYmFsT2JqZWN0KCks
IEpTVmFsdWUoMCkpOwotICAgIAorCiAgICAgLy8gOC4gTGV0ICdpbmRleCcgYmUgMC4KICAgICB1
bnNpZ25lZCBpbmRleCA9IDA7Ci0gICAgCisKICAgICAvLyA5LiBSZXBlYXQuCiAgICAgZG8gewog
ICAgICAgICAvLyBpLiBMZXQgJ25leHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJdGVyYXRv
clN0ZXAoaXRlcmF0b3IpLgotICAgICAgICBKU1ZhbHVlIG5leHRGdW5jdGlvbiA9IGl0ZXJhdG9y
LmdldChleGVjLCBleGVjLT52bSgpLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4dFByaXZhdGVO
YW1lKTsKLSAgICAgICAgaWYgKGV4ZWMtPmhhZEV4Y2VwdGlvbigpKQotICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKLQot
ICAgICAgICBDYWxsRGF0YSBuZXh0RnVuY3Rpb25DYWxsRGF0YTsKLSAgICAgICAgQ2FsbFR5cGUg
bmV4dEZ1bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShuZXh0RnVuY3Rpb24sIG5leHRGdW5j
dGlvbkNhbGxEYXRhKTsKLSAgICAgICAgaWYgKG5leHRGdW5jdGlvbkNhbGxUeXBlID09IENhbGxU
eXBlTm9uZSkgewotICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkp
OwotICAgICAgICB9Ci0KLSAgICAgICAgTWFya2VkQXJndW1lbnRCdWZmZXIgbmV4dEZ1bmN0aW9u
QXJndW1lbnRzOwotICAgICAgICBuZXh0RnVuY3Rpb25Bcmd1bWVudHMuYXBwZW5kKGpzVW5kZWZp
bmVkKCkpOwotICAgICAgICBKU1ZhbHVlIG5leHQgPSBjYWxsKGV4ZWMsIG5leHRGdW5jdGlvbiwg
bmV4dEZ1bmN0aW9uQ2FsbFR5cGUsIG5leHRGdW5jdGlvbkNhbGxEYXRhLCBpdGVyYXRvciwgbmV4
dEZ1bmN0aW9uQXJndW1lbnRzKTsKLSAgICAgICAgCi0gICAgICAgIC8vIGlpLiBSZWplY3RJZkFi
cnVwdChuZXh0LCBkZWZlcnJlZCkuCisgICAgICAgIEpTVmFsdWUgbmV4dCA9IGl0ZXJhdG9yU3Rl
cChleGVjLCBpdGVyYXRvcik7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRl
ZmVycmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICAv
LyBpaWkuIElmICduZXh0JyBpcyBmYWxzZSwKLSAgICAgICAgLy8gTm90ZTogV2UgaW1wbGVtZW50
IHRoaXMgYXMgYW4gaXRlcmF0aW9uVGVybWluYXRvcgotICAgICAgICBpZiAobmV4dCA9PSB2bS5p
dGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKSB7CisgICAgICAgIGlmIChuZXh0LmlzRmFsc2UoKSkg
ewogICAgICAgICAgICAgLy8gYS4gSWYgJ2luZGV4JyBpcyAwLAogICAgICAgICAgICAgaWYgKCFp
bmRleCkgewogICAgICAgICAgICAgICAgIC8vIGEuIExldCAncmVzb2x2ZVJlc3VsdCcgYmUgdGhl
IHJlc3VsdCBvZiBjYWxsaW5nIHRoZSBbW0NhbGxdXSBpbnRlcm5hbCBtZXRob2QKQEAgLTQyOCw0
MCArMzc1LDQ0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3Ry
dWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICAgICAgICAgIC8vIGIuIFJl
dHVybklmQWJydXB0KHJlc29sdmVSZXN1bHQpLgogICAgICAgICAgICAgICAgIGlmIChleGVjLT5o
YWRFeGNlcHRpb24oKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVk
KCk7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gYi4gUmV0
dXJuIGRlZmVycmVkLltbUHJvbWlzZV1dLgotICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShkZWZlcnJlZC0+cHJvbWlzZSgpKTsKKyAgICAgICAgICAgIHJldHVybiBkZWZlcnJlZC0+
cHJvbWlzZSgpOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIC8vIGl2LiBMZXQgJ25l
eHRWYWx1ZScgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEl0ZXJhdG9yVmFsdWUobmV4dCkuCiAg
ICAgICAgIC8vIHYuIFJlamVjdElmQWJydXB0KG5leHRWYWx1ZSwgZGVmZXJyZWQpLgotICAgICAg
ICAvLyBOb3RlOiAnbmV4dCcgaXMgYWxyZWFkeSB0aGUgdmFsdWUsIHNvIHRoZXJlIGlzIG5vdGhp
bmcgdG8gZG8gaGVyZS4KKyAgICAgICAgSlNWYWx1ZSBuZXh0VmFsdWUgPSBpdGVyYXRvclZhbHVl
KGV4ZWMsIG5leHQpOworICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKKworICAgICAgICB2YWx1ZXMtPnB1c2goZXhlYywg
anNVbmRlZmluZWQoKSk7CiAKICAgICAgICAgLy8gdmkuIExldCAnbmV4dFByb21pc2UnIGJlIHRo
ZSByZXN1bHQgb2YgY2FsbGluZyBJbnZva2UoQywgInJlc29sdmUiLCAobmV4dFZhbHVlKSkuCiAg
ICAgICAgIEpTVmFsdWUgcmVzb2x2ZUZ1bmN0aW9uID0gQy5nZXQoZXhlYywgdm0ucHJvcGVydHlO
YW1lcy0+cmVzb2x2ZSk7CiAgICAgICAgIGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKLSAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVy
cmVkKSk7CisgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKIAogICAgICAgICBDYWxs
RGF0YSByZXNvbHZlRnVuY3Rpb25DYWxsRGF0YTsKICAgICAgICAgQ2FsbFR5cGUgcmVzb2x2ZUZ1
bmN0aW9uQ2FsbFR5cGUgPSBnZXRDYWxsRGF0YShyZXNvbHZlRnVuY3Rpb24sIHJlc29sdmVGdW5j
dGlvbkNhbGxEYXRhKTsKICAgICAgICAgaWYgKHJlc29sdmVGdW5jdGlvbkNhbGxUeXBlID09IENh
bGxUeXBlTm9uZSkgewogICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYyk7Ci0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJl
ZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAgICAgICAgIH0KIAogICAg
ICAgICBNYXJrZWRBcmd1bWVudEJ1ZmZlciByZXNvbHZlRnVuY3Rpb25Bcmd1bWVudHM7Ci0gICAg
ICAgIHJlc29sdmVGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQobmV4dCk7CisgICAgICAgIHJlc29s
dmVGdW5jdGlvbkFyZ3VtZW50cy5hcHBlbmQobmV4dFZhbHVlKTsKICAgICAgICAgSlNWYWx1ZSBu
ZXh0UHJvbWlzZSA9IGNhbGwoZXhlYywgcmVzb2x2ZUZ1bmN0aW9uLCByZXNvbHZlRnVuY3Rpb25D
YWxsVHlwZSwgcmVzb2x2ZUZ1bmN0aW9uQ2FsbERhdGEsIEMsIHJlc29sdmVGdW5jdGlvbkFyZ3Vt
ZW50cyk7CiAKICAgICAgICAgLy8gdmlpLiBSZWplY3RJZkFicnVwdChuZXh0UHJvbWlzZSwgZGVm
ZXJyZWQpLgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAgICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJlZCkpOwor
ICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgLy8gdmlpaS4gTGV0
ICdjb3VudGRvd25GdW5jdGlvbicgYmUgYSBuZXcgYnVpbHQtaW4gZnVuY3Rpb24gb2JqZWN0IGFz
IGRlZmluZWQgaW4gUHJvbWlzZS5hbGwgQ291bnRkb3duIEZ1bmN0aW9ucy4KICAgICAgICAgSlNG
dW5jdGlvbiogY291bnRkb3duRnVuY3Rpb24gPSBjcmVhdGVQcm9taXNlQWxsQ291bnRkb3duRnVu
Y3Rpb24odm0sIHRoaXNPYmplY3QtPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgCisKICAgICAg
ICAgLy8gaXguIFNldCB0aGUgW1tJbmRleF1dIGludGVybmFsIHNsb3Qgb2YgJ2NvdW50ZG93bkZ1
bmN0aW9uJyB0byAnaW5kZXgnLgogICAgICAgICBjb3VudGRvd25GdW5jdGlvbi0+cHV0RGlyZWN0
KHZtLCB2bS5wcm9wZXJ0eU5hbWVzLT5pbmRleFByaXZhdGVOYW1lLCBKU1ZhbHVlKGluZGV4KSk7
CiAKQEAgLTQ3NywxMyArNDI4LDEzIEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQ
cm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgLy8geGlp
aS4gTGV0ICdyZXN1bHQnIGJlIHRoZSByZXN1bHQgb2YgY2FsbGluZyBJbnZva2UobmV4dFByb21p
c2UsICJ0aGVuIiwgKGNvdW50ZG93bkZ1bmN0aW9uLCBkZWZlcnJlZC5bW1JlamVjdF1dKSkuCiAg
ICAgICAgIEpTVmFsdWUgdGhlbkZ1bmN0aW9uID0gbmV4dFByb21pc2UuZ2V0KGV4ZWMsIHZtLnBy
b3BlcnR5TmFtZXMtPnRoZW4pOwogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0g
ICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBk
ZWZlcnJlZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAg
Q2FsbERhdGEgdGhlbkZ1bmN0aW9uQ2FsbERhdGE7CiAgICAgICAgIENhbGxUeXBlIHRoZW5GdW5j
dGlvbkNhbGxUeXBlID0gZ2V0Q2FsbERhdGEodGhlbkZ1bmN0aW9uLCB0aGVuRnVuY3Rpb25DYWxs
RGF0YSk7CiAgICAgICAgIGlmICh0aGVuRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUp
IHsKICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMpOwotICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24oZXhlYywgZGVmZXJyZWQpKTsKKyAgICAg
ICAgICAgIHJldHVybiBqc1VuZGVmaW5lZCgpOwogICAgICAgICB9CiAKICAgICAgICAgTWFya2Vk
QXJndW1lbnRCdWZmZXIgdGhlbkZ1bmN0aW9uQXJndW1lbnRzOwpAQCAtNDk0LDcgKzQ0NSw3IEBA
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxs
KEV4ZWNTdGF0ZSogZXhlYykKIAogICAgICAgICAvLyB4aXYuIFJlamVjdElmQWJydXB0KHJlc3Vs
dCwgZGVmZXJyZWQpLgogICAgICAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9uKCkpCi0gICAgICAg
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihleGVjLCBkZWZlcnJl
ZCkpOworICAgICAgICAgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7CiAKICAgICAgICAgLy8geHYu
IFNldCBpbmRleCB0byBpbmRleCArIDEuCiAgICAgICAgIGluZGV4Kys7CkBAIC01MDMsNiArNDU0
LDU3IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JG
dW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgdWludDMyX3QgbmV3Q291bnRkb3duVmFs
dWUgPSBjb3VudGRvd25Ib2xkZXItPmludGVybmFsVmFsdWUoKS5hc1VJbnQzMigpICsgMTsKICAg
ICAgICAgY291bnRkb3duSG9sZGVyLT5zZXRJbnRlcm5hbFZhbHVlKHZtLCBKU1ZhbHVlKG5ld0Nv
dW50ZG93blZhbHVlKSk7CiAgICAgfSB3aGlsZSAodHJ1ZSk7CisgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIGpzVW5kZWZpbmVkKCk7Cit9CisKK0VuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwgSlNQcm9taXNlQ29uc3RydWN0b3JGdW5jQWxsKEV4ZWNTdGF0ZSogZXhlYykK
K3sKKyAgICAvLyAtLSBQcm9taXNlLmFsbChpdGVyYWJsZSkgLS0KKworICAgIEpTVmFsdWUgaXRl
cmFibGUgPSBleGVjLT5hcmd1bWVudCgwKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworCisg
ICAgLy8gMS4gTGV0ICdDJyBiZSB0aGUgdGhpcyB2YWx1ZS4KKyAgICBKU1ZhbHVlIEMgPSBleGVj
LT50aGlzVmFsdWUoKTsKKworICAgIC8vIDIuIExldCAnZGVmZXJyZWQnIGJlIHRoZSByZXN1bHQg
b2YgY2FsbGluZyBHZXREZWZlcnJlZChDKS4KKyAgICBKU1ZhbHVlIGRlZmVycmVkVmFsdWUgPSBj
cmVhdGVKU1Byb21pc2VEZWZlcnJlZEZyb21Db25zdHJ1Y3RvcihleGVjLCBDKTsKKworICAgIC8v
IDMuIFJldHVybklmQWJydXB0KGRlZmVycmVkKS4KKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0aW9u
KCkpCisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7CisKKyAg
ICAvLyBOT1RFOiBBIG5vbi1hYnJ1cHQgY29tcGxldGlvbiBvZiBjcmVhdGVKU1Byb21pc2VEZWZl
cnJlZEZyb21Db25zdHJ1Y3RvciBpbXBsaWVzIHRoYXQKKyAgICAvLyBDIGFuZCBkZWZlcnJlZFZh
bHVlIGFyZSBvYmplY3RzLgorICAgIEpTUHJvbWlzZURlZmVycmVkKiBkZWZlcnJlZCA9IGpzQ2Fz
dDxKU1Byb21pc2VEZWZlcnJlZCo+KGRlZmVycmVkVmFsdWUpOworCisgICAgLy8gNC4gTGV0ICdp
dGVyYXRvcicgYmUgdGhlIHJlc3VsdCBvZiBjYWxsaW5nIEdldEl0ZXJhdG9yKGl0ZXJhYmxlKS4K
KyAgICBKU1ZhbHVlIGl0ZXJhdG9yRnVuY3Rpb24gPSBpdGVyYWJsZS5nZXQoZXhlYywgdm0ucHJv
cGVydHlOYW1lcy0+aXRlcmF0b3JQcml2YXRlTmFtZSk7CisgICAgaWYgKGV4ZWMtPmhhZEV4Y2Vw
dGlvbigpKQorICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGFicnVwdFJlamVjdGlvbihl
eGVjLCBkZWZlcnJlZCkpOworCisgICAgQ2FsbERhdGEgaXRlcmF0b3JGdW5jdGlvbkNhbGxEYXRh
OworICAgIENhbGxUeXBlIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSA9IGdldENhbGxEYXRhKGl0
ZXJhdG9yRnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsRGF0YSk7CisgICAgaWYgKGl0ZXJh
dG9yRnVuY3Rpb25DYWxsVHlwZSA9PSBDYWxsVHlwZU5vbmUpIHsKKyAgICAgICAgdGhyb3dUeXBl
RXJyb3IoZXhlYyk7CisgICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoYWJydXB0UmVqZWN0
aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgfQorCisgICAgQXJnTGlzdCBpdGVyYXRvckZ1bmN0
aW9uQXJndW1lbnRzOworICAgIEpTVmFsdWUgaXRlcmF0b3IgPSBjYWxsKGV4ZWMsIGl0ZXJhdG9y
RnVuY3Rpb24sIGl0ZXJhdG9yRnVuY3Rpb25DYWxsVHlwZSwgaXRlcmF0b3JGdW5jdGlvbkNhbGxE
YXRhLCBpdGVyYWJsZSwgaXRlcmF0b3JGdW5jdGlvbkFyZ3VtZW50cyk7CisKKyAgICAvLyA1LiBS
ZWplY3RJZkFicnVwdChpdGVyYXRvciwgZGVmZXJyZWQpLgorICAgIGlmIChleGVjLT5oYWRFeGNl
cHRpb24oKSkKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShhYnJ1cHRSZWplY3Rpb24o
ZXhlYywgZGVmZXJyZWQpKTsKKworICAgIEpTVmFsdWUgcmVzdWx0ID0gcGVyZm9ybVByb21pc2VB
bGwoZXhlYywgaXRlcmF0b3IsIEMsIGRlZmVycmVkKTsKKyAgICBpZiAoZXhlYy0+aGFkRXhjZXB0
aW9uKCkpIHsKKyAgICAgICAgaXRlcmF0b3JDbG9zZShleGVjLCBpdGVyYXRvcik7CisgICAgICAg
IGlmIChleGVjLT5oYWRFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoYWJydXB0UmVqZWN0aW9uKGV4ZWMsIGRlZmVycmVkKSk7CisgICAgfQorICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUocmVzdWx0KTsKIH0KIAogSlNQcm9taXNlKiBjb25zdHJ1Y3RQcm9t
aXNlKEV4ZWNTdGF0ZSogZXhlYywgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNGdW5j
dGlvbiogcmVzb2x2ZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9NYXBJdGVyYXRvclByb3RvdHlwZS5jcHAKaW5kZXggYjIyMGI5ODc1ODg1YzQyZjljZTYzOGYz
MjIyNDc5MmMzMjc2MTAxNy4uODA2N2NiMjBmMGMzN2Q2NmE3NzhiZTlkMWVmNmFmZGIzYzZkZTgy
OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWFwSXRlcmF0b3JQ
cm90b3R5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hcEl0ZXJh
dG9yUHJvdG90eXBlLmNwcApAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIk1hcEl0ZXJhdG9yUHJvdG90eXBlLmgiCiAKKyNpbmNsdWRlICJJdGVyYXRvck9w
ZXJhdGlvbnMuaCIKICNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgogI2luY2x1ZGUgIkpT
Q2VsbElubGluZXMuaCIKICNpbmNsdWRlICJKU01hcEl0ZXJhdG9yLmgiCkBAIC00Niw3ICs0Nyw3
IEBAIHZvaWQgTWFwSXRlcmF0b3JQcm90b3R5cGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2bSwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKICAgICB2bS5wcm90b3R5cGVNYXAuYWRkUHJvdG90
eXBlKHRoaXMpOwogCiAgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5p
dGVyYXRvclByaXZhdGVOYW1lLCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvciwgRG9u
dEVudW0sIDApOwotICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRl
cmF0b3JOZXh0UHJpdmF0ZU5hbWUsIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRF
bnVtLCAwKTsKKyAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPm5leHQs
IE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQsIERvbnRFbnVtLCAwKTsKIH0KIAogRW5jb2Rl
ZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBNYXBJdGVyYXRvclByb3RvdHlwZUZ1bmNJdGVyYXRvcihD
YWxsRnJhbWUqIGNhbGxGcmFtZSkKQEAgLTU5LDEyICs2MCwxMiBAQCBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIE1hcEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUpCiAgICAgSlNNYXBJdGVyYXRvciogaXRlcmF0b3IgPSBqc0R5bmFtaWNDYXN0PEpTTWFw
SXRlcmF0b3IqPihjYWxsRnJhbWUtPnRoaXNWYWx1ZSgpKTsKICAgICBpZiAoIWl0ZXJhdG9yKQog
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93VHlwZUVycm9yKGNhbGxGcmFtZSwg
QVNDSUlMaXRlcmFsKCJDYW5ub3QgY2FsbCBNYXBJdGVyYXRvci5uZXh0KCkgb24gYSBub24tTWFw
SXRlcmF0b3Igb2JqZWN0IikpKTsKLSAgICAKKwogICAgIEpTVmFsdWUgcmVzdWx0OwogICAgIGlm
IChpdGVyYXRvci0+bmV4dChjYWxsRnJhbWUsIHJlc3VsdCkpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlOjplbmNvZGUocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjcmVh
dGVJdGVyUmVzdWx0T2JqZWN0KGNhbGxGcmFtZSwgcmVzdWx0LCBmYWxzZSkpOwogICAgIGl0ZXJh
dG9yLT5maW5pc2goKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNhbGxGcmFtZS0+dm0o
KS5pdGVyYXRpb25UZXJtaW5hdG9yLmdldCgpKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1lLCBqc1VuZGVmaW5lZCgpLCB0cnVlKSk7
CiB9CiAKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRl
cmF0b3JQcm90b3R5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2V0SXRl
cmF0b3JQcm90b3R5cGUuY3BwCmluZGV4IDU3M2FjZmE1Y2Q3NjRiMDllZTc1NDNiMzQ3YjQ5YTUx
MTFlNzA1MzcuLjUyNjFiZjNjYWNjMWQ0ZTBlNDU3NTUxYTAyMmRlNjdjOTE5NGRmZjkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1NldEl0ZXJhdG9yUHJvdG90eXBl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TZXRJdGVyYXRvclByb3Rv
dHlwZS5jcHAKQEAgLTI2LDYgKzI2LDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJTZXRJdGVyYXRvclByb3RvdHlwZS5oIgogCisjaW5jbHVkZSAiSXRlcmF0b3JPcGVyYXRpb25z
LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJKU0NlbGxJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNTZXRJdGVyYXRvci5oIgpAQCAtNDYsNyArNDcsNyBAQCB2b2lk
IFNldEl0ZXJhdG9yUHJvdG90eXBlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0sIEpTR2xvYmFsT2Jq
ZWN0KiBnbG9iYWxPYmplY3QpCiAgICAgdm0ucHJvdG90eXBlTWFwLmFkZFByb3RvdHlwZSh0aGlz
KTsKIAogICAgIEpTQ19OQVRJVkVfRlVOQ1RJT04odm0ucHJvcGVydHlOYW1lcy0+aXRlcmF0b3JQ
cml2YXRlTmFtZSwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IsIERvbnRFbnVtLCAw
KTsKLSAgICBKU0NfTkFUSVZFX0ZVTkNUSU9OKHZtLnByb3BlcnR5TmFtZXMtPml0ZXJhdG9yTmV4
dFByaXZhdGVOYW1lLCBTZXRJdGVyYXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7
CisgICAgSlNDX05BVElWRV9GVU5DVElPTih2bS5wcm9wZXJ0eU5hbWVzLT5uZXh0LCBTZXRJdGVy
YXRvclByb3RvdHlwZUZ1bmNOZXh0LCBEb250RW51bSwgMCk7CiB9CiAKIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgU2V0SXRlcmF0b3JQcm90b3R5cGVGdW5jSXRlcmF0b3IoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUpCkBAIC02MiwxMCArNjMsOSBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIFNldEl0ZXJhdG9yUHJvdG90eXBlRnVuY05leHQoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUodGhyb3dUeXBlRXJyb3IoY2FsbEZyYW1lLCBB
U0NJSUxpdGVyYWwoIkNhbm5vdCBjYWxsIFNldEl0ZXJhdG9yLm5leHQoKSBvbiBhIG5vbi1TZXRJ
dGVyYXRvciBvYmplY3QiKSkpOwogCiAgICAgaWYgKGl0ZXJhdG9yLT5uZXh0KGNhbGxGcmFtZSwg
cmVzdWx0KSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShyZXN1bHQpOworICAgICAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QoY2FsbEZyYW1l
LCByZXN1bHQsIGZhbHNlKSk7CiAgICAgaXRlcmF0b3ItPmZpbmlzaCgpOwotICAgIHJldHVybiBK
U1ZhbHVlOjplbmNvZGUoY2FsbEZyYW1lLT52bSgpLml0ZXJhdGlvblRlcm1pbmF0b3IuZ2V0KCkp
OworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoY3JlYXRlSXRlclJlc3VsdE9iamVjdChjYWxs
RnJhbWUsIGpzVW5kZWZpbmVkKCksIHRydWUpKTsKIH0KIAotCiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9WTS5jcHAKaW5kZXggMGY3MzU0MGY0MzU5NmE3MjQ2ZTI5NDI0MmJlMDUyYTFkNDU2
NmRmOC4uNGU3MjU5OWQ4ZDI3ZWY1YzM4NzRmYjEyNTY3MzAyMzk0M2MxNDFhNyAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcApAQCAtMzk2LDEwICszOTYsNiBAQCBzdGF0aWMgVGh1
bmtHZW5lcmF0b3IgdGh1bmtHZW5lcmF0b3JGb3JJbnRyaW5zaWMoSW50cmluc2ljIGludHJpbnNp
YykKICAgICAgICAgcmV0dXJuIGxvZ1RodW5rR2VuZXJhdG9yOwogICAgIGNhc2UgSU11bEludHJp
bnNpYzoKICAgICAgICAgcmV0dXJuIGltdWxUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIEFycmF5
SXRlcmF0b3JOZXh0S2V5SW50cmluc2ljOgotICAgICAgICByZXR1cm4gYXJyYXlJdGVyYXRvck5l
eHRLZXlUaHVua0dlbmVyYXRvcjsKLSAgICBjYXNlIEFycmF5SXRlcmF0b3JOZXh0VmFsdWVJbnRy
aW5zaWM6Ci0gICAgICAgIHJldHVybiBhcnJheUl0ZXJhdG9yTmV4dFZhbHVlVGh1bmtHZW5lcmF0
b3I7CiAgICAgZGVmYXVsdDoKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4dC13
aXRoLWNhbGwuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWl0
ZXJhdG9ycy1uZXh0LXdpdGgtY2FsbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNTc1ZGRlYjQxODVlZjAxZWU5
NWMyNDczYTUzNjgzNzIyYzIwYjMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9hcnJheS1pdGVyYXRvcnMtbmV4dC13aXRoLWNhbGwuanMKQEAg
LTAsMCArMSwxMTUgQEAKKy8vIFRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9mIHRoZSAl
QXJyYXlJdGVyYXRvclByb3RvdHlwZSUubmV4dCBtZXRob2RzIHdpdGggY2FsbC4KKwordmFyIGFy
cmF5ID0gWzAsIDEsIDIsIDMsIDRdOwordmFyIGFycmF5SXRlcmF0b3IgPSBhcnJheVtTeW1ib2wu
aXRlcmF0b3JdKCk7Cit2YXIgYXJyYXlJdGVyYXRvclByb3RvdHlwZSA9IGFycmF5SXRlcmF0b3Iu
X19wcm90b19fOwordmFyIGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0ID0gYXJyYXlJdGVyYXRv
clByb3RvdHlwZS5uZXh0OworCitpZiAoYXJyYXlJdGVyYXRvci5oYXNPd25Qcm9wZXJ0eSgnbmV4
dCcpKQorICAgIHRocm93ICJuZXh0IG1ldGhvZCBzaG91bGQgZXhpc3RzIG9uICVBcnJheUl0ZXJh
dG9yUHJvdG90eXBlJSI7CitpZiAoIWFycmF5SXRlcmF0b3JQcm90b3R5cGUuaGFzT3duUHJvcGVy
dHkoJ25leHQnKSkKKyAgICB0aHJvdyAibmV4dCBtZXRob2Qgc2hvdWxkIGV4aXN0cyBvbiAlQXJy
YXlJdGVyYXRvclByb3RvdHlwZSUiOworCit2YXIgYXJyYXkxID0gWzQyLCA0MywgNDFdOwordmFy
IGFycmF5MUl0ZXJhdG9yID0gYXJyYXkxW1N5bWJvbC5pdGVyYXRvcl0oKTsKK3ZhciBpbmRleCA9
IDA7Cit3aGlsZSAodHJ1ZSkgeworICAgIHZhciByZXN1bHQgPSBhcnJheUl0ZXJhdG9yUHJvdG90
eXBlTmV4dC5jYWxsKGFycmF5MUl0ZXJhdG9yKTsKKyAgICB2YXIgdmFsdWUgPSByZXN1bHQudmFs
dWU7CisgICAgaWYgKHJlc3VsdC5kb25lKSB7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBp
ZiAodmFsdWUgIT09IGFycmF5MVtpbmRleCsrXSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
dmFsdWU6ICIgKyB2YWx1ZTsKK30KK2lmIChpbmRleCAhPT0gMykKKyAgICB0aHJvdyAiRXJyb3I6
IGJhZCBpbmRleDogIiArIGluZGV4OworCitmdW5jdGlvbiBpbmNyZW1lbnQoaXRlcikgeworICAg
IHJldHVybiBhcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dC5jYWxsKGl0ZXIpOworfQordmFyIGFy
cmF5MSA9IFs0MiwgNDMsIC0yMF07Cit2YXIgYXJyYXkyID0gWzQyLCA0MywgLTIwXTsKK3ZhciBh
cnJheTFJdGVyYXRvciA9IGFycmF5MVtTeW1ib2wuaXRlcmF0b3JdKCk7Cit2YXIgYXJyYXkySXRl
cmF0b3IgPSBhcnJheTJbU3ltYm9sLml0ZXJhdG9yXSgpOworZm9yICh2YXIgaSA9IDA7IGkgPCAz
OyArK2kpIHsKKyAgICB2YXIgdmFsdWUxID0gaW5jcmVtZW50KGFycmF5MUl0ZXJhdG9yKS52YWx1
ZTsKKyAgICB2YXIgdmFsdWUyID0gaW5jcmVtZW50KGFycmF5Mkl0ZXJhdG9yKS52YWx1ZTsKKyAg
ICBpZiAodmFsdWUxICE9PSB2YWx1ZTIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
OiAiICsgdmFsdWUxICsgIiAiICsgdmFsdWUyOworfQorCit2YXIgYXJyYXkxID0gWyAwLCAxLCAy
LCA0LCA1LCA2IF07Cit2YXIgYXJyYXkxSXRlcmF0b3IgPSBhcnJheTFbU3ltYm9sLml0ZXJhdG9y
XSgpOworCit2YXIgdmFsdWUgPSBhcnJheTFJdGVyYXRvci5uZXh0KCkudmFsdWU7CitpZiAodmFs
dWUgIT09IDApCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK3ZhciB2
YWx1ZSA9IGFycmF5MUl0ZXJhdG9yLm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gMSkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOwordmFyIHZhbHVlID0gYXJyYXkx
SXRlcmF0b3IubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSAyKQorICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlOiAiICsgdmFsdWU7Cit2YXIgdmFsdWUgPSBhcnJheUl0ZXJhdG9yUHJvdG90
eXBlTmV4dC5jYWxsKGFycmF5MUl0ZXJhdG9yKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gNCkKKyAg
ICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOwordmFyIHZhbHVlID0gYXJyYXlJ
dGVyYXRvclByb3RvdHlwZU5leHQuY2FsbChhcnJheTFJdGVyYXRvcikudmFsdWU7CitpZiAodmFs
dWUgIT09IDUpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKK3ZhciB2
YWx1ZSA9IGFycmF5SXRlcmF0b3JQcm90b3R5cGVOZXh0LmNhbGwoYXJyYXkxSXRlcmF0b3IpLnZh
bHVlOworaWYgKHZhbHVlICE9PSA2KQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsg
dmFsdWU7Cit2YXIgdmFsdWUgPSBhcnJheUl0ZXJhdG9yUHJvdG90eXBlTmV4dC5jYWxsKGFycmF5
MUl0ZXJhdG9yKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAgIHRocm93ICJF
cnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisKK3ZhciBwcmltaXRpdmVzID0gWworICAgICJz
dHJpbmciLAorICAgIDQyLAorICAgIDAuMDMsCisgICAgZmFsc2UsCisgICAgdHJ1ZSwKKyAgICBT
eW1ib2woIkNvY29hIiksCisgICAgbnVsbCwKKyAgICB1bmRlZmluZWQKK107Citmb3IgKHZhciBw
cmltaXRpdmUgb2YgcHJpbWl0aXZlcykgeworICAgIHZhciBkaWRUaHJvdyA9IG51bGw7CisgICAg
dHJ5IHsKKyAgICAgICAgYXJyYXlJdGVyYXRvclByb3RvdHlwZU5leHQuY2FsbChwcmltaXRpdmUp
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZGlkVGhyb3cgPSBlOworICAgIH0KKyAgICBp
ZiAoIWRpZFRocm93KQorICAgICAgICB0aHJvdyAiRXJyb3I6IG5vIGVycm9yIHRocm93biI7Cisg
ICAgdmFyIGV4cGVjdGVkTWVzc2FnZSA9ICdUeXBlRXJyb3I6ICVBcnJheUl0ZXJhdG9yUHJvdG90
eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQgfHRoaXN8IGJlIEFycmF5IEl0ZXJhdG9yIEluc3RhbmNl
JzsKKyAgICBpZiAocHJpbWl0aXZlID09IG51bGwpCisgICAgICAgIGV4cGVjdGVkTWVzc2FnZSA9
ICdUeXBlRXJyb3I6ICVBcnJheUl0ZXJhdG9yUHJvdG90eXBlJS5uZXh0IHJlcXVpcmVzIHRoYXQg
fHRoaXN8IG5vdCBiZSBudWxsIG9yIHVuZGVmaW5lZCc7CisgICAgaWYgKFN0cmluZyhkaWRUaHJv
dykgIT09IGV4cGVjdGVkTWVzc2FnZSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3Ig
dGhyb3duOiAiICsgZGlkVGhyb3c7Cit9CisKK3ZhciBub25SZWxhdGVkT2JqZWN0cyA9IFsKKyAg
ICB7fSwKKyAgICBbXSwKKyAgICBuZXcgRGF0ZSgpLAorICAgIG5ldyBFcnJvcigpLAorICAgIE9i
amVjdChTeW1ib2woKSksCisgICAgbmV3IFN0cmluZygiQ2FwcHVjY2lubyIpLAorICAgIG5ldyBO
dW1iZXIoNDIpLAorICAgIG5ldyBCb29sZWFuKGZhbHNlKSwKKyAgICBmdW5jdGlvbiAoKSB7IH0s
CitdOworZm9yICh2YXIgb2JqZWN0IG9mIG5vblJlbGF0ZWRPYmplY3RzKSB7CisgICAgdmFyIGRp
ZFRocm93ID0gbnVsbDsKKyAgICB0cnkgeworICAgICAgICBhcnJheUl0ZXJhdG9yUHJvdG90eXBl
TmV4dC5jYWxsKG9iamVjdCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBkaWRUaHJvdyA9
IGU7CisgICAgfQorICAgIGlmICghZGlkVGhyb3cpCisgICAgICAgIHRocm93ICJFcnJvcjogbm8g
ZXJyb3IgdGhyb3duIjsKKyAgICBpZiAoU3RyaW5nKGRpZFRocm93KSAhPT0gJ1R5cGVFcnJvcjog
JUFycmF5SXRlcmF0b3JQcm90b3R5cGUlLm5leHQgcmVxdWlyZXMgdGhhdCB8dGhpc3wgYmUgQXJy
YXkgSXRlcmF0b3IgSW5zdGFuY2UnKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0
aHJvd246ICIgKyBkaWRUaHJvdzsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvYXJyYXktaXRlcmF0b3JzLW5leHQuanMgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWl0ZXJhdG9ycy1uZXh0LmpzCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMz
NGMwZTRhOTlkZDY1ZGUyYjIxZTk2ZTI0ZGY3MThkNThjZDk3N2EKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2FycmF5LWl0ZXJhdG9ycy1uZXh0
LmpzCkBAIC0wLDAgKzEsOTAgQEAKKy8vIFRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2aW9yIG9m
IHRoZSBpdGVyYXRvci5uZXh0IG1ldGhvZHMgb24gQXJyYXkgb2JqZWN0cworCit2YXIgdGVzdEFy
cmF5ID0gWzEsMiwzLDQsNSw2XQordmFyIGtleXMgPSB0ZXN0QXJyYXkua2V5cygpOwordmFyIGkg
PSAwOword2hpbGUgKHRydWUpIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBrZXl9ID0ga2V5cy5u
ZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIGlmIChrZXkgIT09IGkp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsga2V5OworICAgIGkrKzsKK30K
KworaWYgKHRlc3RBcnJheS5sZW5ndGggIT09IGkpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFs
dWU6ICIgKyBpOworCit2YXIgdmFsdWUgPSBrZXlzLm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAh
PT0gdW5kZWZpbmVkKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisK
K3ZhciB2YWx1ZXMgPSB0ZXN0QXJyYXlbU3ltYm9sLml0ZXJhdG9yXSgpOwordmFyIGkgPSAwOwor
d2hpbGUgKHRydWUpIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlfSA9IHZhbHVlcy5uZXh0KCk7Cisg
ICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIGkrKzsKKyAgICBpZiAodmFsdWUgIT09
IGkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7Cit9CisKK2lm
ICh0ZXN0QXJyYXkubGVuZ3RoICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAi
ICsgaTsKKwordmFyIHZhbHVlID0gdmFsdWVzLm5leHQoKS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0g
dW5kZWZpbmVkKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWU7CisKK3Zh
ciBlbnRyaWVzID0gdGVzdEFycmF5LmVudHJpZXMoKTsKK3ZhciBpID0gMDsKK2RvIHsKKyAgICB2
YXIge2RvbmUsIHZhbHVlOiBlbnRyeX0gPSBlbnRyaWVzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkK
KyAgICAgICAgYnJlYWs7CisgICAgdmFyIFtrZXksIHZhbHVlXSA9IGVudHJ5OworICAgIGlmICh2
YWx1ZSAhPT0gdGVzdEFycmF5W2tleV0pCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVl
OiAiICsgdmFsdWUgKyAiICIgKyB0ZXN0QXJyYXlba2V5XTsKKyAgICBpZiAoa2V5ICE9PSBpKQor
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGtleTsKKyAgICBpKysKKyAgICBp
ZiAodmFsdWUgIT09IGkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFs
dWUgKyAiICIgKyBpOworfSB3aGlsZSAoIWRvbmUpOworCitpZiAodGVzdEFycmF5Lmxlbmd0aCAh
PT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9
IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKwordmFyIGVudHJpZXMgPSB0ZXN0QXJy
YXkuZW50cmllcygpOwordmFyIGkgPSAwOworZG8geworICAgIHZhciB7ZG9uZSwgdmFsdWU6IGVu
dHJ5fSA9IGVudHJpZXMubmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAgICBicmVhazsKKyAg
ICB2YXIgW2tleSwgdmFsdWVdID0gZW50cnk7CisgICAgaWYgKHZhbHVlICE9PSB0ZXN0QXJyYXlb
a2V5XSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZSArICIgIiAr
IHRlc3RBcnJheVtrZXldOworICAgIGlmIChrZXkgIT09IGkpCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHZhbHVlOiAiICsga2V5OworICAgIGkrKworICAgIGlmIChpICUgMiA9PSAwKQorICAg
ICAgICB0ZXN0QXJyYXlbaV0gKj0gMjsKKyAgICBpZiAoaSA8IDQpCisgICAgICAgIHRlc3RBcnJh
eS5wdXNoKHRlc3RBcnJheS5sZW5ndGgpCisgICAgaWYgKGkgPT0gNCkKKyAgICAgICAgZGVsZXRl
IHRlc3RBcnJheVs0XQorICAgIGlmIChpID09IDUpCisgICAgICAgIHRlc3RBcnJheVs0XSA9IDUK
K30gd2hpbGUgKCFkb25lKTsKKworaWYgKHRlc3RBcnJheS5sZW5ndGggIT09IGkpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBpOworCit2YXIgdmFsdWUgPSBlbnRyaWVzLm5leHQo
KS52YWx1ZTsKK2lmICh2YWx1ZSAhPT0gdW5kZWZpbmVkKQorICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlOiAiICsgdmFsdWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2N1c3RvbS1pdGVyYXRvcnMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL2N1c3RvbS1pdGVyYXRvcnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmQ2NDEzZmUzYjVlOTAz
YWZmZTM4MDNmZDAwNGMwY2IxZjFjNjRmMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvY3VzdG9tLWl0ZXJhdG9ycy5qcwpAQCAtMCwwICsxLDMy
MiBAQAorLy8gVGhpcyB0ZXN0IGNoZWNrcyB0aGUgYmVoYXZpb3Igb2YgY3VzdG9tIGl0ZXJhYmxl
IG9iamVjdHMuCisKK3ZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKK3ZhciBpdGVyID0geworICAg
IF9fa2V5OiAwLAorICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHsKKyAg
ICAgICAgICAgIGRvbmU6IHRoaXMuX19rZXkgPT09IDQyLAorICAgICAgICAgICAgdmFsdWU6IHRo
aXMuX19rZXkrKworICAgICAgICB9OworICAgIH0sCisgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuIHRoaXM7CisgICAgfSwKKyAgICByZXR1cm46IGZ1
bmN0aW9uICgpIHsKKyAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsKKyAgICB9Cit9OwordmFy
IGV4cGVjdGVkID0gMDsKK2ZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsKKyAgICBpZiAodmFsdWUg
IT09IGV4cGVjdGVkKyspCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFs
dWU7Cit9CitpZiAocmV0dXJuQ2FsbGVkKQorICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIGNh
bGxlZC4iOworCisKKwordmFyIHJldHVybkNhbGxlZCA9IGZhbHNlOwordmFyIGl0ZXIgPSB7Cisg
ICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gewor
ICAgICAgICAgICAgZG9uZTogdGhpcy5fX2tleSA9PT0gNDIsCisgICAgICAgICAgICB2YWx1ZTog
dGhpcy5fX2tleSsrCisgICAgICAgIH07CisgICAgfSwKKyAgICBbU3ltYm9sLml0ZXJhdG9yXTog
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAgIHJldHVybjog
ZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOworICAgICAgICByZXR1
cm4geworICAgICAgICAgICAgZG9uZTogdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlOiB1bmRlZmlu
ZWQKKyAgICAgICAgfTsKKyAgICB9Cit9OworCit0cnkgeworICAgIGZvciAodmFyIHZhbHVlIG9m
IGl0ZXIpIHsKKyAgICAgICAgdGhyb3cgIkVycm9yOiBUZXJtaW5hdGUgaXRlcmF0aW9uLiI7Cisg
ICAgfQorfSBjYXRjaCAoZSkgeworICAgIGlmIChTdHJpbmcoZSkgIT09ICJFcnJvcjogVGVybWlu
YXRlIGl0ZXJhdGlvbi4iKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBlcnJvciB0aHJvd246
ICIgKyBlOworfQoraWYgKCFyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cgIkVycm9yOiByZXR1cm4g
aXMgbm90IGNhbGxlZC4iOworCisKKwordmFyIHJldHVybkNhbGxlZCA9IGZhbHNlOwordmFyIGl0
ZXIgPSB7CisgICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAgICBy
ZXR1cm4geworICAgICAgICAgICAgZG9uZTogdGhpcy5fX2tleSA9PT0gNDIsCisgICAgICAgICAg
ICB2YWx1ZTogdGhpcy5fX2tleSsrCisgICAgICAgIH07CisgICAgfSwKKyAgICBbU3ltYm9sLml0
ZXJhdG9yXTogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAg
IHJldHVybjogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOworICAg
ICAgICByZXR1cm4geworICAgICAgICAgICAgZG9uZTogdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVl
OiB1bmRlZmluZWQKKyAgICAgICAgfTsKKyAgICB9Cit9OworCitmb3IgKHZhciB2YWx1ZSBvZiBp
dGVyKSB7CisgICAgYnJlYWs7Cit9CitpZiAoIXJldHVybkNhbGxlZCkKKyAgICB0aHJvdyAiRXJy
b3I6IHJldHVybiBpcyBub3QgY2FsbGVkLiI7CisKKworCit2YXIgcmV0dXJuQ2FsbGVkID0gZmFs
c2U7Cit2YXIgaXRlciA9IHsKKyAgICBfX2tleTogMCwKKyAgICBnZXQgbmV4dCgpIHsKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBsb29raW5nIHVwIG5leHQuIjsKKyAgICB9LAorICAgIFtTeW1ib2wu
aXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisg
ICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7Cisg
ICAgfQorfTsKK3RyeSB7CisgICAgZm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgICAgICB0
aHJvdyAiRXJyb3I6IEl0ZXJhdGlvbiBzaG91bGQgbm90IG9jY3VyLiI7CisgICAgfQorfSBjYXRj
aCAoZSkgeworICAgIGlmIChTdHJpbmcoZSkgIT09ICJFcnJvcjogbG9va2luZyB1cCBuZXh0LiIp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGU7Cit9CitpZiAo
cmV0dXJuQ2FsbGVkKQorICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIGNhbGxlZC4iOworCisK
KwordmFyIGl0ZXIgPSB7CisgICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgewor
ICAgICAgICByZXR1cm4geworICAgICAgICAgICAgZG9uZTogdGhpcy5fX2tleSA9PT0gNDIsCisg
ICAgICAgICAgICB2YWx1ZTogdGhpcy5fX2tleSsrCisgICAgICAgIH07CisgICAgfSwKKyAgICBb
U3ltYm9sLml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICB9LAorICAgIGdldCByZXR1cm4oKSB7CisgICAgICAgIHRocm93ICJFcnJvcjogbG9va2luZyB1
cCByZXR1cm4uIgorICAgIH0KK307Cit0cnkgeworICAgIGZvciAodmFyIHZhbHVlIG9mIGl0ZXIp
IHsKKyAgICAgICAgdGhyb3cgIkVycm9yOiBUZXJtaW5hdGUgaXRlcmF0aW9uLiI7CisgICAgfQor
fSBjYXRjaCAoZSkgeworICAgIGlmIChTdHJpbmcoZSkgIT09ICJFcnJvcjogbG9va2luZyB1cCBy
ZXR1cm4uIikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3duOiAiICsgZTsK
K30KKworCisKK3ZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKK3ZhciBpdGVyID0geworICAgIF9f
a2V5OiAwLAorICAgIG5leHQ6IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgdGhyb3cgIkVycm9yOiBu
ZXh0IGlzIGNhbGxlZC4iCisgICAgfSwKKyAgICBbU3ltYm9sLml0ZXJhdG9yXTogZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAorICAgIHJldHVybjogZnVuY3Rpb24g
KCkgeworICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOworICAgICAgICByZXR1cm4geworICAg
ICAgICAgICAgZG9uZTogdHJ1ZSwKKyAgICAgICAgICAgIHZhbHVlOiB1bmRlZmluZWQKKyAgICAg
ICAgfTsKKyAgICB9Cit9OworCit0cnkgeworICAgIGZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBUZXJtaW5hdGUgaXRlcmF0aW9uLiI7CisgICAgfQorfSBj
YXRjaCAoZSkgeworICAgIGlmIChTdHJpbmcoZSkgIT09ICJFcnJvcjogbmV4dCBpcyBjYWxsZWQu
IikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3duOiAiICsgZTsKK30KK2lm
IChyZXR1cm5DYWxsZWQpCisgICAgdGhyb3cgIkVycm9yOiByZXR1cm4gaXMgY2FsbGVkLiI7CisK
KworCit2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7Cit2YXIgaXRlciA9IHsKKyAgICBfX2tleTog
MCwKKyAgICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNl
LCB2YWx1ZTogNDIgfTsKKyAgICB9LAorICAgIFtTeW1ib2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybiB0aGlzOworICAgIH0sCisgICAgcmV0dXJuOiBmdW5jdGlvbiAo
KSB7CisgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgICAgIHRocm93ICJFcnJvcjog
cmV0dXJuIGlzIGNhbGxlZC4iOworICAgIH0KK307CisKK3RyeSB7CisgICAgZm9yICh2YXIgdmFs
dWUgb2YgaXRlcikgeworICAgICAgICB0aHJvdyAiRXJyb3I6IFRlcm1pbmF0ZSBpdGVyYXRpb24u
IjsKKyAgICB9Cit9IGNhdGNoIChlKSB7CisgICAgaWYgKFN0cmluZyhlKSAhPT0gIkVycm9yOiBU
ZXJtaW5hdGUgaXRlcmF0aW9uLiIpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRo
cm93bjogIiArIGU7Cit9CitpZiAoIXJldHVybkNhbGxlZCkKKyAgICB0aHJvdyAiRXJyb3I6IHJl
dHVybiBpcyBub3QgY2FsbGVkLiI7CisKKwordmFyIHJldHVybkNhbGxlZCA9IGZhbHNlOwordmFy
IGl0ZXIgPSB7CisgICAgX19rZXk6IDAsCisgICAgbmV4dDogZnVuY3Rpb24gKCkgeworICAgICAg
ICByZXR1cm4geyBkb25lOiBmYWxzZSwgdmFsdWU6IDQyIH07CisgICAgfSwKKyAgICBbU3ltYm9s
Lml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm4gdGhpczsKKyAgICB9LAor
ICAgIHJldHVybjogZnVuY3Rpb24gKCkgeworICAgICAgICByZXR1cm5DYWxsZWQgPSB0cnVlOwor
ICAgICAgICB0aHJvdyAiRXJyb3I6IHJldHVybiBpcyBjYWxsZWQuIjsKKyAgICB9Cit9OwordHJ5
IHsKKyAgICBmb3IgKHZhciB2YWx1ZSBvZiBpdGVyKSB7CisgICAgICAgIGJyZWFrOworICAgIH0K
K30gY2F0Y2ggKGUpIHsKKyAgICBpZiAoU3RyaW5nKGUpICE9PSAiRXJyb3I6IHJldHVybiBpcyBj
YWxsZWQuIikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3duOiAiICsgZTsK
K30KK2lmICghcmV0dXJuQ2FsbGVkKQorICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIG5vdCBj
YWxsZWQuIjsKKworCit2YXIgcHJpbWl0aXZlcyA9IFsKKyAgICB1bmRlZmluZWQsCisgICAgbnVs
bCwKKyAgICA0MiwKKyAgICAic3RyaW5nIiwKKyAgICB0cnVlLAorICAgIFN5bWJvbCgiQ29jb2Ei
KQorXTsKKworZnVuY3Rpb24gaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3Qobm90SXRlcmF0b3JS
ZXN1bHQpIHsKKyAgICB2YXIgcmV0dXJuQ2FsbGVkID0gZmFsc2U7CisgICAgdmFyIGl0ZXIgPSB7
CisgICAgICAgIF9fa2V5OiAwLAorICAgICAgICBuZXh0OiBmdW5jdGlvbiAoKSB7CisgICAgICAg
ICAgICByZXR1cm4gbm90SXRlcmF0b3JSZXN1bHQ7CisgICAgICAgIH0sCisgICAgICAgIFtTeW1i
b2wuaXRlcmF0b3JdOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1cm4gdGhpczsKKyAg
ICAgICAgfSwKKyAgICAgICAgcmV0dXJuOiBmdW5jdGlvbiAoKSB7CisgICAgICAgICAgICByZXR1
cm5DYWxsZWQgPSB0cnVlOworICAgICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKKyAgICAgICAg
fQorICAgIH07CisgICAgdHJ5IHsKKyAgICAgICAgZm9yICh2YXIgdmFsdWUgb2YgaXRlcikgewor
ICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBJdGVyYXRpb24gc2hvdWxkIG5vdCBvY2N1ci4iOwor
ICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBpZiAoU3RyaW5nKGUpICE9PSAi
VHlwZUVycm9yOiBJdGVyYXRvciByZXN1bHQgaW50ZXJmYWNlIGlzIG5vdCBhbiBvYmplY3QuIikK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGU7CisgICAg
fQorICAgIGlmIChyZXR1cm5DYWxsZWQpCisgICAgICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlz
IGNhbGxlZC4iOworfQorCitmdW5jdGlvbiBpdGVyYXRvckludGVyZmFjZUVycm9yVGVzdFJldHVy
bihub3RJdGVyYXRvclJlc3VsdCkgeworICAgIHZhciByZXR1cm5DYWxsZWQgPSBmYWxzZTsKKyAg
ICB2YXIgaXRlciA9IHsKKyAgICAgICAgX19rZXk6IDAsCisgICAgICAgIG5leHQ6IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybiB7IGRvbmU6IGZhbHNlLCB2YWx1ZTogNDIgfTsKKyAg
ICAgICAgfSwKKyAgICAgICAgW1N5bWJvbC5pdGVyYXRvcl06IGZ1bmN0aW9uICgpIHsKKyAgICAg
ICAgICAgIHJldHVybiB0aGlzOworICAgICAgICB9LAorICAgICAgICByZXR1cm46IGZ1bmN0aW9u
ICgpIHsKKyAgICAgICAgICAgIHJldHVybkNhbGxlZCA9IHRydWU7CisgICAgICAgICAgICByZXR1
cm4gbm90SXRlcmF0b3JSZXN1bHQ7CisgICAgICAgIH0KKyAgICB9OworICAgIHRyeSB7CisgICAg
ICAgIGZvciAodmFyIHZhbHVlIG9mIGl0ZXIpIHsKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
VGVybWluYXRlIGl0ZXJhdGlvbi4iOworICAgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAg
ICAgICBpZiAoU3RyaW5nKGUpICE9PSAiRXJyb3I6IFRlcm1pbmF0ZSBpdGVyYXRpb24uIikKKyAg
ICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIGVycm9yIHRocm93bjogIiArIGU7CisgICAgfQor
ICAgIGlmICghcmV0dXJuQ2FsbGVkKQorICAgICAgICB0aHJvdyAiRXJyb3I6IHJldHVybiBpcyBu
b3QgY2FsbGVkLiI7Cit9CisKK3ByaW1pdGl2ZXMuZm9yRWFjaChpdGVyYXRvckludGVyZmFjZUVy
cm9yVGVzdCk7CitwcmltaXRpdmVzLmZvckVhY2goaXRlcmF0b3JJbnRlcmZhY2VFcnJvclRlc3RS
ZXR1cm4pOworCisKK2Z1bmN0aW9uIGl0ZXJhdG9ySW50ZXJmYWNlQnJlYWtUZXN0UmV0dXJuKG5v
dEl0ZXJhdG9yUmVzdWx0KSB7CisgICAgdmFyIHJldHVybkNhbGxlZCA9IGZhbHNlOworICAgIHZh
ciBpdGVyID0geworICAgICAgICBfX2tleTogMCwKKyAgICAgICAgbmV4dDogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuIHsgZG9uZTogZmFsc2UsIHZhbHVlOiA0MiB9OworICAgICAg
ICB9LAorICAgICAgICBbU3ltYm9sLml0ZXJhdG9yXTogZnVuY3Rpb24gKCkgeworICAgICAgICAg
ICAgcmV0dXJuIHRoaXM7CisgICAgICAgIH0sCisgICAgICAgIHJldHVybjogZnVuY3Rpb24gKCkg
eworICAgICAgICAgICAgcmV0dXJuQ2FsbGVkID0gdHJ1ZTsKKyAgICAgICAgICAgIHJldHVybiBu
b3RJdGVyYXRvclJlc3VsdDsKKyAgICAgICAgfQorICAgIH07CisgICAgdHJ5IHsKKyAgICAgICAg
Zm9yICh2YXIgdmFsdWUgb2YgaXRlcikgeworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGlmIChTdHJpbmcoZSkgIT09ICJUeXBlRXJyb3I6
IEl0ZXJhdG9yIHJlc3VsdCBpbnRlcmZhY2UgaXMgbm90IGFuIG9iamVjdC4iKQorICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgZXJyb3IgdGhyb3duOiAiICsgZTsKKyAgICB9CisgICAgaWYg
KCFyZXR1cm5DYWxsZWQpCisgICAgICAgIHRocm93ICJFcnJvcjogcmV0dXJuIGlzIG5vdCBjYWxs
ZWQuIjsKK30KKworcHJpbWl0aXZlcy5mb3JFYWNoKGl0ZXJhdG9ySW50ZXJmYWNlQnJlYWtUZXN0
UmV0dXJuKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
aXRlcmF0b3JzLXNoYXBlLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9p
dGVyYXRvcnMtc2hhcGUuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjI3MThiMjY2ZDBkNGUzMzBiNjViY2EwZDVm
NjI1ODc5YWU4OTE3MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvaXRlcmF0b3JzLXNoYXBlLmpzCkBAIC0wLDAgKzEsNjMgQEAKKy8vIFRoaXMg
dGVzdCBjaGVja3MgdGhlIHNoYXBlIG9mIGJ1aWx0aW4gaXRlcmF0b3JzLgorCitmdW5jdGlvbiBp
dGVyYXRvclNoYXBlKGl0ZXIpIHsKKyAgICBpZiAoaXRlci5oYXNPd25Qcm9wZXJ0eSgnbmV4dCcp
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGl0ZXJhdG9yIHNob3VsZCBub3QgaGF2ZSBuZXh0IG1l
dGhvZC4iOworICAgIGlmICghaXRlci5fX3Byb3RvX18uaGFzT3duUHJvcGVydHkoJ25leHQnKSkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBpdGVyYXRvciBwcm90b3R5cGUgc2hvdWxkIGhhdmUgbmV4
dCBtZXRob2QuIjsKKyAgICBpZiAodHlwZW9mIGl0ZXIuX19wcm90b19fLm5leHQgIT09ICJmdW5j
dGlvbiIpCisgICAgICAgIHRocm93ICJFcnJvcjogaXRlcmF0b3IgcHJvdG90eXBlIHNob3VsZCBo
YXZlIG5leHQgbWV0aG9kLiI7Cit9CisKK2Z1bmN0aW9uIHNhbWVOZXh0TWV0aG9kcyhpdGVyYXRv
cnMpIHsKKyAgICB2YXIgaXRlcmF0b3IgPSBpdGVyYXRvcnNbMF07CisgICAgZm9yICh2YXIgaSA9
IDE7IGkgPCBpdGVyYXRvcnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgaWYgKGl0ZXJhdG9yLm5l
eHQgIT09IGl0ZXJhdG9yc1tpXS5uZXh0KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBuZXh0
IG1ldGhvZCBpcyBub3QgdGhlIHNhbWUuIjsKKyAgICB9Cit9CisKK3ZhciBhcnJheSA9IFsnQ29j
b2EnLCAnQ2FwcHVjY2lubycsICdUaGUgZGVzIEFsaXplcycsICdNYXRjaGEnLCAnS2lsaW1hbmph
cm8nXTsKK3ZhciBpdGVyYXRvciA9IGFycmF5W1N5bWJvbC5pdGVyYXRvcl0oKTsKK2l0ZXJhdG9y
U2hhcGUoaXRlcmF0b3IpOworCit2YXIga2V5SXRlcmF0b3IgPSBhcnJheS5rZXlzKCk7CitpdGVy
YXRvclNoYXBlKGtleUl0ZXJhdG9yKTsKKwordmFyIGtleVZhbHVlSXRlcmF0b3IgPSBhcnJheS5l
bnRyaWVzKCk7CitpdGVyYXRvclNoYXBlKGtleVZhbHVlSXRlcmF0b3IpOworCitzYW1lTmV4dE1l
dGhvZHMoW2FycmF5W1N5bWJvbC5pdGVyYXRvcl0oKSwgYXJyYXkua2V5cygpLCBhcnJheS5lbnRy
aWVzKCldKTsKKwordmFyIHNldCA9IG5ldyBTZXQoWydDb2NvYScsICdDYXBwdWNjaW5vJywgJ1Ro
ZSBkZXMgQWxpemVzJywgJ01hdGNoYScsICdLaWxpbWFuamFybyddKTsKK3ZhciBpdGVyYXRvciA9
IHNldFtTeW1ib2wuaXRlcmF0b3JdKCk7CitpdGVyYXRvclNoYXBlKGl0ZXJhdG9yKTsKKwordmFy
IGtleUl0ZXJhdG9yID0gc2V0LmtleXMoKTsKK2l0ZXJhdG9yU2hhcGUoa2V5SXRlcmF0b3IpOwor
Cit2YXIga2V5VmFsdWVJdGVyYXRvciA9IHNldC5lbnRyaWVzKCk7CitpdGVyYXRvclNoYXBlKGtl
eVZhbHVlSXRlcmF0b3IpOworCitzYW1lTmV4dE1ldGhvZHMoW3NldFtTeW1ib2wuaXRlcmF0b3Jd
KCksIHNldC5rZXlzKCksIHNldC5lbnRyaWVzKCldKTsKKwordmFyIG1hcCA9IG5ldyBNYXAoKTsK
K1sKKyAgICBbICdDb2NvYScsIDIsIF0sCisgICAgWyAnQ2FwcHVjY2lubycsIDAgXSwKKyAgICBb
ICdUaGUgZGVzIEFsaXplcycsIDMgXSwKKyAgICBbICdNYXRjaGEnLCAyIF0sCisgICAgWyAnS2ls
aW1hbmphcm8nLCAxXQorXS5mb3JFYWNoKGZ1bmN0aW9uIChbIGtleSwgdmFsdWUgXSkgeworICAg
IG1hcC5zZXQoa2V5LCB2YWx1ZSk7Cit9KTsKK3ZhciBpdGVyYXRvciA9IG1hcFtTeW1ib2wuaXRl
cmF0b3JdKCk7CitpdGVyYXRvclNoYXBlKGl0ZXJhdG9yKTsKKwordmFyIGtleUl0ZXJhdG9yID0g
bWFwLmtleXMoKTsKK2l0ZXJhdG9yU2hhcGUoa2V5SXRlcmF0b3IpOworCit2YXIga2V5VmFsdWVJ
dGVyYXRvciA9IG1hcC5lbnRyaWVzKCk7CitpdGVyYXRvclNoYXBlKGtleVZhbHVlSXRlcmF0b3Ip
OworCitzYW1lTmV4dE1ldGhvZHMoW21hcFtTeW1ib2wuaXRlcmF0b3JdKCksIG1hcC5rZXlzKCks
IG1hcC5lbnRyaWVzKCldKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvbWFwLWl0ZXJhdG9ycy1uZXh0LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9tYXAtaXRlcmF0b3JzLW5leHQuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTMyOWVhZTE3MzMy
MWE1NGI5MWM1ZWVkNWZhNmY2NDM1MWE5NTlhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWFwLWl0ZXJhdG9ycy1uZXh0LmpzCkBAIC0wLDAg
KzEsMTEzIEBACisvLyBUaGlzIHRlc3QgY2hlY2tzIHRoZSBiZWhhdmlvciBvZiB0aGUgaXRlcmF0
b3IubmV4dCBtZXRob2RzIG9uIE1hcCBvYmplY3RzCisKK3ZhciB0ZXN0QXJyYXkgPSBbMSwyLDMs
NCw1LDZdCit2YXIgdGVzdE1hcCA9IG5ldyBNYXAoKTsKK2ZvciAodmFyIFtrZXksIHZhbHVlXSBv
ZiB0ZXN0QXJyYXkuZW50cmllcygpKSB7CisgICAgdGVzdE1hcC5zZXQoa2V5LCB2YWx1ZSk7Cit9
Cit2YXIga2V5cyA9IHRlc3RNYXAua2V5cygpOwordmFyIGkgPSAwOword2hpbGUgKHRydWUpIHsK
KyAgICB2YXIge2RvbmUsIHZhbHVlOiBrZXl9ID0ga2V5cy5uZXh0KCk7CisgICAgaWYgKGRvbmUp
CisgICAgICAgIGJyZWFrOworICAgIGlmIChrZXkgPj0gdGVzdEFycmF5Lmxlbmd0aCkKKyAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7CisgICAgaSsrOworfQorCitpZiAo
dGVzdE1hcC5zaXplICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsK
KwordmFyIHZhbHVlID0ga2V5cy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09IHVuZGVmaW5l
ZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworCisvLyBUT0RPOiBN
YXAucHJvdG90eXBlLnZhbHVlcygpIGlzIG5vdCBleHBvc2VkLgorLy8KKy8vIHZhciB2YWx1ZXMg
PSB0ZXN0TWFwLnZhbHVlcygpOworLy8gdmFyIGkgPSAwOworLy8gd2hpbGUgKHRydWUpIHsKKy8v
ICAgICB2YXIge2RvbmUsIHZhbHVlfSA9IHZhbHVlcy5uZXh0KCk7CisvLyAgICAgaWYgKGRvbmUp
CisvLyAgICAgICAgIGJyZWFrOworLy8gICAgIGkrKzsKKy8vICAgICBpZiAodGVzdEFycmF5Lmlu
ZGV4T2YodmFsdWUpID09PSAtMSkKKy8vICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6
ICIgKyB2YWx1ZTsKKy8vIH0KKy8vCisvLyBpZiAodGVzdE1hcC5zaXplICE9PSBpKQorLy8gICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKy8vCisvLyB2YXIgdmFsdWUgPSB2YWx1
ZXMubmV4dCgpLnZhbHVlOworLy8gaWYgKHZhbHVlICE9PSB1bmRlZmluZWQpCisvLyAgICAgdGhy
b3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKwordmFyIGVudHJpZXMgPSB0ZXN0TWFw
LmVudHJpZXMoKTsKK3ZhciBpID0gMDsKK2RvIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBlbnRy
eX0gPSBlbnRyaWVzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAgICAgICAgYnJlYWs7CisgICAg
dmFyIFtrZXksIHZhbHVlXSA9IGVudHJ5OworICAgIGlmICh2YWx1ZSAhPT0gdGVzdE1hcC5nZXQo
a2V5KSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZSArICIgIiAr
IHRlc3RNYXAuZ2V0KGtleSk7CisgICAgaWYgKGtleSA+PSB0ZXN0QXJyYXkubGVuZ3RoKQorICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGtleTsKKyAgICBpKys7CisgICAgaWYg
KHRlc3RBcnJheS5pbmRleE9mKHZhbHVlKSA9PT0gLTEpCisgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlOiAiICsgdmFsdWUgKyAiICIgKyBpOworfSB3aGlsZSAoIWRvbmUpOworCitpZiAo
dGVzdE1hcC5zaXplICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsK
KwordmFyIHZhbHVlID0gZW50cmllcy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09IHVuZGVm
aW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworCit2YXIgZW50
cmllcyA9IHRlc3RNYXAuZW50cmllcygpOwordmFyIGkgPSAwOworZG8geworICAgIHZhciB7ZG9u
ZSwgdmFsdWU6IGVudHJ5fSA9IGVudHJpZXMubmV4dCgpOworICAgIGlmIChkb25lKQorICAgICAg
ICBicmVhazsKKyAgICB2YXIgW2tleSwgdmFsdWVdID0gZW50cnk7CisgICAgaWYgKHZhbHVlICE9
PSB0ZXN0TWFwLmdldChrZXkpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiAr
IHZhbHVlICsgIiAiICsgdGVzdE1hcC5nZXQoa2V5KTsKKyAgICBpKys7CisgICAgaWYgKGkgJSA0
ID09PSAwKQorICAgICAgICB0ZXN0TWFwLnNldCgxMDAwMDAgKyBpLCBpKTsKK30gd2hpbGUgKCFk
b25lKTsKKworaWYgKHRlc3RNYXAuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZh
bHVlICE9PSB1bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1
ZTsKKworZnVuY3Rpb24gb3RoZXJLZXkoa2V5KSB7CisgICAgcmV0dXJuIChrZXkgKyAxKSAlIHRl
c3RBcnJheS5sZW5ndGg7Cit9CisKK3ZhciBlbnRyaWVzID0gdGVzdE1hcC5lbnRyaWVzKCk7Cit2
YXIgaSA9IDA7CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1ZTogZW50cnl9ID0gZW50cmllcy5u
ZXh0KCk7CisgICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIHZhciBba2V5LCB2YWx1
ZV0gPSBlbnRyeTsKKyAgICBpZiAodmFsdWUgIT09IHRlc3RNYXAuZ2V0KGtleSkpCisgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgdmFsdWUgKyAiICIgKyB0ZXN0TWFwLmdldChr
ZXkpOworICAgIGkrKzsKKyAgICBpZiAoaSAlIDQgPT09IDApCisgICAgICAgIHRlc3RNYXAuZGVs
ZXRlKG90aGVyS2V5KGtleSkpOworfSB3aGlsZSAoIWRvbmUpOworCitpZiAodGVzdE1hcC5zaXpl
ICE9PSBpKQorICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZhbHVl
ID0gZW50cmllcy5uZXh0KCkudmFsdWU7CitpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAgICB0
aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zZXQtaXRlcmF0b3JzLW5leHQuanMgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NldC1pdGVyYXRvcnMtbmV4dC5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi44NzFkYzdlNDIxODFkYTkyMWZlNDc1MTI4NjQwYzQwOTUwYzQyOTQ1Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zZXQtaXRlcmF0b3Jz
LW5leHQuanMKQEAgLTAsMCArMSwxMTcgQEAKKy8vIFRoaXMgdGVzdCBjaGVja3MgdGhlIGJlaGF2
aW9yIG9mIHRoZSBpdGVyYXRvci5uZXh0IG1ldGhvZHMgb24gU2V0IG9iamVjdHMKKwordmFyIHRl
c3RBcnJheSA9IFsxLDIsMyw0LDUsNl0KK3ZhciB0ZXN0U2V0ID0gbmV3IFNldCgpOworZm9yICh2
YXIgW2tleSwgdmFsdWVdIG9mIHRlc3RBcnJheS5lbnRyaWVzKCkpIHsKKyAgICB0ZXN0U2V0LmFk
ZCh2YWx1ZSk7Cit9Cit2YXIga2V5cyA9IHRlc3RTZXQua2V5cygpOwordmFyIGkgPSAwOword2hp
bGUgKHRydWUpIHsKKyAgICB2YXIge2RvbmUsIHZhbHVlOiBrZXl9ID0ga2V5cy5uZXh0KCk7Cisg
ICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIGlmICh0ZXN0QXJyYXkuaW5kZXhPZihr
ZXkpID09PSAtMSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7Cisg
ICAgaSsrOworfQorCitpZiAodGVzdFNldC5zaXplICE9PSBpKQorICAgIHRocm93ICJFcnJvcjog
YmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZhbHVlID0ga2V5cy5uZXh0KCkudmFsdWU7CitpZiAo
dmFsdWUgIT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIHZh
bHVlOworCisvLyBUT0RPOiBTZXQucHJvdG90eXBlLnZhbHVlcygpIGlzIG5vdCBleHBvc2VkLgor
Ly8KKy8vIHZhciB2YWx1ZXMgPSB0ZXN0U2V0LnZhbHVlcygpOworLy8gdmFyIGkgPSAwOworLy8g
d2hpbGUgKHRydWUpIHsKKy8vICAgICB2YXIge2RvbmUsIHZhbHVlfSA9IHZhbHVlcy5uZXh0KCk7
CisvLyAgICAgaWYgKGRvbmUpCisvLyAgICAgICAgIGJyZWFrOworLy8gICAgIGkrKzsKKy8vICAg
ICBpZiAodGVzdEFycmF5LmluZGV4T2YodmFsdWUpID09PSAtMSkKKy8vICAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKy8vIH0KKy8vCisvLyBpZiAodGVzdFNldC5z
aXplICE9PSBpKQorLy8gICAgIHRocm93ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKy8vCisv
LyB2YXIgdmFsdWUgPSB2YWx1ZXMubmV4dCgpLnZhbHVlOworLy8gaWYgKHZhbHVlICE9PSB1bmRl
ZmluZWQpCisvLyAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKwordmFy
IGVudHJpZXMgPSB0ZXN0U2V0LmVudHJpZXMoKTsKK3ZhciBpID0gMDsKK2RvIHsKKyAgICB2YXIg
e2RvbmUsIHZhbHVlOiBlbnRyeX0gPSBlbnRyaWVzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAg
ICAgICAgYnJlYWs7CisgICAgdmFyIFtrZXksIHZhbHVlXSA9IGVudHJ5OworICAgIGlmIChrZXkg
IT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGtleSArICIg
IiArIHZhbHVlOworICAgIGlmICghdGVzdFNldC5oYXModmFsdWUpKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlOworICAgIGlmICghdGVzdFNldC5oYXMoa2V5KSkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyBrZXk7CisgICAgaSsrOworICAg
IGlmICh0ZXN0QXJyYXkuaW5kZXhPZih2YWx1ZSkgPT09IC0xKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCB2YWx1ZTogIiArIHZhbHVlICsgIiAiICsgaTsKK30gd2hpbGUgKCFkb25lKTsKKwor
aWYgKHRlc3RTZXQuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiAr
IGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1
bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKwordmFy
IGVudHJpZXMgPSB0ZXN0U2V0LmVudHJpZXMoKTsKK3ZhciBpID0gMDsKK2RvIHsKKyAgICB2YXIg
e2RvbmUsIHZhbHVlOiBlbnRyeX0gPSBlbnRyaWVzLm5leHQoKTsKKyAgICBpZiAoZG9uZSkKKyAg
ICAgICAgYnJlYWs7CisgICAgdmFyIFtrZXksIHZhbHVlXSA9IGVudHJ5OworICAgIGlmIChrZXkg
IT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiArIGtleSArICIg
IiArIHZhbHVlOworICAgIGlmICghdGVzdFNldC5oYXMoa2V5KSkKKyAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKyAgICBpKys7CisgICAgaWYgKGkgJSA0ID09PSAw
KQorICAgICAgICB0ZXN0U2V0LmFkZCgxMDAwMDAgKyBpKTsKK30gd2hpbGUgKCFkb25lKTsKKwor
aWYgKHRlc3RTZXQuc2l6ZSAhPT0gaSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2YWx1ZTogIiAr
IGk7CisKK3ZhciB2YWx1ZSA9IGVudHJpZXMubmV4dCgpLnZhbHVlOworaWYgKHZhbHVlICE9PSB1
bmRlZmluZWQpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgdmFsdWU6ICIgKyB2YWx1ZTsKKworZnVu
Y3Rpb24gb3RoZXJLZXkoa2V5KSB7CisgICAgcmV0dXJuIChrZXkgKyAxKSAlIHRlc3RBcnJheS5s
ZW5ndGg7Cit9CisKK3ZhciBlbnRyaWVzID0gdGVzdFNldC5lbnRyaWVzKCk7Cit2YXIgaSA9IDA7
CitkbyB7CisgICAgdmFyIHtkb25lLCB2YWx1ZTogZW50cnl9ID0gZW50cmllcy5uZXh0KCk7Cisg
ICAgaWYgKGRvbmUpCisgICAgICAgIGJyZWFrOworICAgIHZhciBba2V5LCB2YWx1ZV0gPSBlbnRy
eTsKKyAgICBpZiAoIXRlc3RTZXQuaGFzKGtleSkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHZhbHVlOiAiICsgdmFsdWUgKyAiICIgKyB0ZXN0U2V0LmdldChrZXkpOworICAgIGkrKzsKKyAg
ICBpZiAoaSAlIDQgPT09IDApCisgICAgICAgIHRlc3RTZXQuZGVsZXRlKG90aGVyS2V5KGtleSkp
OworfSB3aGlsZSAoIWRvbmUpOworCitpZiAodGVzdFNldC5zaXplICE9PSBpKQorICAgIHRocm93
ICJFcnJvcjogYmFkIHZhbHVlOiAiICsgaTsKKwordmFyIHZhbHVlID0gZW50cmllcy5uZXh0KCku
dmFsdWU7CitpZiAodmFsdWUgIT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCB2
YWx1ZTogIiArIHZhbHVlOwo=
</data>
<flag name="review"
          id="272652"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>