<?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>141540</bug_id>
          
          <creation_ts>2015-02-12 15:09:47 -0800</creation_ts>
          <short_desc>Add a DFG node for the Pow Intrinsic</short_desc>
          <delta_ts>2015-02-18 17:32:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>141618</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ossy</cc>
    
    <cc>vlad</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1068765</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-12 15:09:47 -0800</bug_when>
    <thetext>Add a DFG node for the Pow Intrinsics</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068771</commentid>
    <comment_count>1</comment_count>
      <attachid>246481</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-12 15:27:13 -0800</bug_when>
    <thetext>Created attachment 246481
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068772</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-12 15:30:11 -0800</bug_when>
    <thetext>Attachment 246481 did not pass style-queue:


ERROR: Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:726:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 27 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1068787</commentid>
    <comment_count>3</comment_count>
      <attachid>246481</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-12 16:31:47 -0800</bug_when>
    <thetext>Comment on attachment 246481
Patch

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

I think this is pretty good!  You have a register allocation bug, and I your prediction propagation and abstract interpretation might be a bit unrefined, but it&apos;s very close to perfect.

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        With this patch I get the following changes on benchmarks:

I would call out that by changes you mean progressions.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:726
&gt; +            if (childY.asNumber() == 0) {

!childY.asNumber()

:-)

I never liked this style, but we do follow it, so we might as well keep it up.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:737
&gt; +        forNode(node).setType(SpecFullDouble);

Will it ever create signaling NaN?  Seems like it won&apos;t.  Maybe this should be SpecDoubleReal | SpecDoublePureNaN.

I recommend using the style of other arithmetics, see things like typeOfDoubleSum in SpeculatedType.h|cpp.  It&apos;s fine if this is a dumb stub for now that returns SpecDoubleReal | SpecDoublePureNaN.

The reason why this is useful is that we have to purify NaN on store into typed arrays.  So having a proof that pow doesn&apos;t return signaling NaN would be important.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:1860
&gt; -        
&gt; +

Revert!

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:343
&gt; +            if (node-&gt;child1()-&gt;shouldSpeculateNumber() &amp;&amp; node-&gt;child2()-&gt;shouldSpeculateInt32()) {

Why not just &quot;if (node-&gt;child2()-&gt;shouldSpeculateInt32OrBooleanForArithmetic())&quot;?  The check for child1 is not meaningful.  As written, this means that if the first child had some non-numeric stuff sometimes flowing into it then it would prevent integer speculation for the second child.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:344
&gt; +                fixEdge&lt;DoubleRepUse&gt;(node-&gt;child1());

Why not fixDoubleOrBooleanEdge?

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:345
&gt; +                fixEdge&lt;Int32Use&gt;(node-&gt;child2());

Why not fixIntOrBooleanEdge?

&gt; Source/JavaScriptCore/dfg/DFGNode.h:573
&gt; +
&gt; +    void convertToArithSqrt()
&gt; +    {
&gt; +        ASSERT(m_op == ArithPow);
&gt; +        m_op = ArithSqrt;
&gt; +    }

Ordinarily conversion nodes that involve having different children will shuffle the children around or clear them appropriately.  So, this should probably also do:

child2() = Edge();

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:329
&gt; +            // FIXME: is that right? The native pow() can return an impoure NaN.
&gt; +            // But so can sqrt() above and it&apos;s type is SpecBytecodeDouble, what am I missing.
&gt; +            changed |= setPrediction(SpecFullDouble);
&gt; +            break;

If the native pow() can return impure NaN then maybe we should have the call to pow() do the NaN sanitization.  This would make sense because the fast path of pow() uses your integer exponent math, which cannot create an impure NaN.  Does pow sometimes return signaling NaN even if passed non-signaling NaN or real inputs?

Can sqrt() return impure NaN if it is passed a real number or pure NaN as input?  Or is it just that it returns impure NaN if passed impure NaN?  In AbstractInterpreter, ArithSqrt uses typeOfDoubleUnaryOp() which I believe does the right things: returns pure NaN or real if the input is pure NaN or real, but may pass through impure NaN.  PredictionPropagation should probably also call the same thing, but it doesn&apos;t really matter.  It&apos;s OK for PredictionPropagation to underestimate the set of types returned by a node.  PredictionPropagation does not need to be sound, for the compiler to generate sound code.  The predicted types deduced here are used only to decide how to speculate.  Worst case is that someone might choose to speculate that the output of ArithSqrt is never an impure NaN because PredictionPropagation says that it&apos;s always a bytecode double.  To my knowledge, this won&apos;t actually happen, because we never speculate that something is not impure NaN (though we do speculate that something is not NaN, which is a different thing).

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:339
&gt; -            
&gt; +

Revert!

&gt; Source/JavaScriptCore/dfg/DFGPredictionPropagationPhase.cpp:790
&gt; -                
&gt; +

Revert!

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3584
&gt; +    if (!m_jit.supportsFloatingPoint()) {
&gt; +        SpeculateDoubleOperand xOperand(this, node-&gt;child1());
&gt; +        SpeculateDoubleOperand yOperand(this, node-&gt;child2());
&gt; +        FPRReg xOperandfpr = xOperand.fpr();
&gt; +        FPRReg yOperandfpr = yOperand.fpr();
&gt; +
&gt; +        FPRTemporary result(this);
&gt; +        callOperation(operationMathPow, result.fpr(), xOperandfpr, yOperandfpr);
&gt; +        doubleResult(result.fpr(), node);
&gt; +        return;
&gt; +    }
&gt; +

This is dead code.  We don&apos;t go into the DFG if floating point isn&apos;t supported.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3604
&gt; +        callOperation(operationMathPow, result.fpr(), xOperandfpr, yOperandfpr.fpr());

How rare is this slow path?  If it&apos;s less than 10% likely, then instead of flushing registers above, you should put this inside a slow path generator.  That will put the call out-of-line and it will put spilling/refilling around the call, so that we don&apos;t spill everything on the fast path.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3626
&gt; +    m_jit.branchConvertDoubleToInt32(yOperandfpr, yOperandInteger.gpr(), failedExponentConversionToInteger, scratch.fpr(), false);
&gt; +
&gt; +    m_jit.moveDouble(xOperandfpr, xOperandCopy.fpr());

Two comments:

1) Super dangerous to call gpr() and fpr() after you&apos;ve already started doing control flow without having first called them prior to that control flow.  Both methods may invoke register allocation fill/spill routines.  Those routines expect to be generated in straight-line code, not inside code that is guarded by control flow.  You should just make sure that for all of those temporaries, you get their fprs/gprs before doing anything else.

2) Did you consider doing the &gt;=1000 check merged with the conversion-succeeded check?  Seems like it would be worthwhile to do that as part of this patch, if we are to do it at all.

&gt; Source/JavaScriptCore/dfg/DFGSpeculativeJIT.cpp:3630
&gt; +    callOperation(operationMathPow, result.fpr(), xOperandfpr, yOperandfpr);

Ditto about putting this in a slow path generator, if you think that this will be taken less than 1/10 of the time.

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:139
&gt; +                if (yOperandValue == 1) {

I&apos;m surprised you didn&apos;t do Math.pow(x, -1) as well. :-)  Is that feasible?

&gt; Source/JavaScriptCore/dfg/DFGStrengthReductionPhase.cpp:143
&gt; +                if (MacroAssembler::supportsFloatingPointSqrt()) {

As I mentioned before, this condition doesn&apos;t make sense.  Consider what happens on a machine that doesn&apos;t support sqrt() directly.  Either the sqrt() function is faster than the pow() function, or it&apos;s not.  If it is, then of course we still want to do this optimization.  If it&apos;s not, then we want ArithSqrt implemented using a call to pow(), in which case it would still make sense to do this optimization.  It would then be a canonicalization and not an optimization, but still, we would want to do it.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1640
&gt; +            LValue oneBaseInfiniteExponent = m_out.bitAnd(absoluteExponentIsInfinity, absoluteBaseIsOne);

Don&apos;t do this.  LLVM generates very bad code for bitAnd over conditionals.  You should split this into two branches and an extra basic block in between.

Oddly, LLVM will sometimes convert such a control flow structure into code using bitAnd anyway, but we are loudly lobbying for this &quot;optimization&quot; to be ripped out because it almost always causes a slow-down.

&gt; Source/JavaScriptCore/jit/JITOperations.h:343
&gt; +

Revert!

&gt; Source/JavaScriptCore/tests/stress/math-pow-basics.js:157
&gt; +function test6(x, y, expected1, expected2) {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDouble6(x, y);
&gt; +        if (!valuesAreClose(result, expected1))
&gt; +            throw &quot;Error: bad result, mathPowDoubleDouble6(&quot; + x + &quot;, &quot; + y + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected1;
&gt; +    }
&gt; +    var integerY = y | 0;
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleInt6(x, integerY);
&gt; +        if (!valuesAreClose(result, expected2))
&gt; +            throw &quot;Error: bad result, mathPowDoubleInt6(&quot; + x + &quot;, &quot; + integerY + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected2;
&gt; +    }
&gt; +}
&gt; +noInline(test6);

~10000 executions of a straight-line noInline function should be enough!  Our no-cjit test runs are run with thresholds explicitly set to guarantee that 10000 always hits the FTL.

&gt; Source/JavaScriptCore/tests/stress/math-pow-basics.js:180
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDouble7(x, y);
&gt; +        if (!valuesAreClose(result, expected1))
&gt; +            throw &quot;Error: bad result, mathPowDoubleDouble7(&quot; + x + &quot;, &quot; + y + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected1;
&gt; +    }
&gt; +    var integerY = y | 0;
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDouble7(x, integerY);
&gt; +        if (!valuesAreClose(result, expected2))
&gt; +            throw &quot;Error: bad result, mathPowDoubleDouble7(&quot; + x + &quot;, &quot; + integerY + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected2;

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-basics.js:206
&gt; +function test8(x, y, expected1, expected2) {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDouble8(x, y);
&gt; +        if (!valuesAreClose(result, expected1))
&gt; +            throw &quot;Error: bad result, mathPowDoubleDouble8(&quot; + x + &quot;, &quot; + y + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected1;
&gt; +    }
&gt; +    var integerY = y | 0;
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleInt8(x, integerY);
&gt; +        if (!valuesAreClose(result, expected2))
&gt; +            throw &quot;Error: bad result, mathPowDoubleInt8(&quot; + x + &quot;, &quot; + integerY + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected2;

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-basics.js:232
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDouble9(x, y);
&gt; +        if (!valuesAreClose(result, expected1))
&gt; +            throw &quot;Error: bad result, mathPowDoubleDouble9(&quot; + x + &quot;, &quot; + y + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected1;
&gt; +    }
&gt; +    var integerY = y | 0;
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleInt9(x, integerY);
&gt; +        if (!valuesAreClose(result, expected2))
&gt; +            throw &quot;Error: bad result, mathPowDoubleInt9(&quot; + x + &quot;, &quot; + integerY + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected2;
&gt; +    }

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-basics.js:258
&gt; +function test10(x, y, expected1, expected2) {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDouble10(x, y);
&gt; +        if (!valuesAreClose(result, expected1))
&gt; +            throw &quot;Error: bad result, mathPowDoubleDouble(&quot; + x + &quot;, &quot; + y + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected1;
&gt; +    }
&gt; +    var integerY = y | 0;
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleInt10(x, integerY);
&gt; +        if (!valuesAreClose(result, expected2))
&gt; +            throw &quot;Error: bad result, mathPowDoubleInt(&quot; + x + &quot;, &quot; + integerY + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected2;
&gt; +    }

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-basics.js:282
&gt; +function test11(x, y, expected1, expected2) {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDouble11(x, y);
&gt; +        if (!valuesAreClose(result, expected1))
&gt; +            throw &quot;Error: bad result, mathPowDoubleDouble(&quot; + x + &quot;, &quot; + y + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected1;
&gt; +    }
&gt; +    var integerY = y | 0;
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleInt11(x, integerY);
&gt; +        if (!valuesAreClose(result, expected2))
&gt; +            throw &quot;Error: bad result, mathPowDoubleInt(&quot; + x + &quot;, &quot; + integerY + &quot;) = &quot; + result + &quot; expected a value close to &quot; + expected2;

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-integer-exponent-fastpath.js:27
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDoubleTestExponentFifty(x, y);
&gt; +        if (!valuesAreClose(result, expected))
&gt; +            throw &quot;Error: bad result, Math.pow(&quot; + x + &quot;, &quot; + y + &quot;) = &quot; + result + &quot; expected value close to &quot; + expected;
&gt; +    }
&gt; +    var integerY = y | 0;
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleIntTestExponentFifty(x, integerY);
&gt; +        if (!valuesAreClose(result, expected))
&gt; +            throw &quot;Error: bad result, Math.pow(&quot; + x + &quot;, &quot; + integerY + &quot;) = &quot; + result + &quot; expected value close to &quot; + expected;
&gt; +    }
&gt; +}

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-integer-exponent-fastpath.js:51
&gt; +function testExponentTenThousands(x, y, expected) {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleDoubleTestExponentTenThousands(x, y);
&gt; +        if (!valuesAreClose(result, expected))
&gt; +            throw &quot;Error: bad result, Math.pow(&quot; + x + &quot;, &quot; + y + &quot;) = &quot; + result + &quot; expected value close to &quot; + expected;
&gt; +    }
&gt; +    var integerY = y | 0;
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = mathPowDoubleIntTestExponentTenThousands(x, integerY);
&gt; +        if (!valuesAreClose(result, expected))
&gt; +            throw &quot;Error: bad result, Math.pow(&quot; + x + &quot;, &quot; + integerY + &quot;) = &quot; + result + &quot; expected value close to &quot; + expected;

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-nan-behaviors.js:11
&gt; +function testIntegerBaseWithNaNExponent() {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(5, NaN);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(5, NaN) = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(i, NaN);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(i, NaN) = &quot; + result + &quot; with i = &quot; + i;

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-nan-behaviors.js:27
&gt; +function testFloatingPointBaseWithNaNExponent() {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(5.5, NaN);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(5.5, NaN) = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(i + 1, NaN);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(i + 0.5, NaN) = &quot; + result + &quot; with i = &quot; + i;
&gt; +    }

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-nan-behaviors.js:56
&gt; +function testNaNBase() {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(NaN, i + 1);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(NaN, i + 1) = &quot; + result + &quot; with i = &quot; + i;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(NaN, i + 1.5);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(NaN, i + 1.5) = &quot; + result + &quot; with i = &quot; + i;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(NaN, 0);
&gt; +        if (result !== 1)
&gt; +            throw &quot;Error: bad result, Math.pow(NaN, 0) = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(NaN, -0);
&gt; +        if (result !== 1)
&gt; +            throw &quot;Error: bad result, Math.pow(NaN, -0) = &quot; + result;
&gt; +    }
&gt; +}

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-nan-behaviors.js:82
&gt; +function infiniteExponents() {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(1, Number.POSITIVE_INFINITY);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(1, Number.POSITIVE_INFINITY) = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(-1, Number.POSITIVE_INFINITY);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(-1, Number.POSITIVE_INFINITY) = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(1, Number.NEGATIVE_INFINITY);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(1, Number.NEGATIVE_INFINITY) = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = Math.pow(-1, Number.NEGATIVE_INFINITY);
&gt; +        if (!isNaN(result))
&gt; +            throw &quot;Error: bad result, Math.pow(-1, Number.NEGATIVE_INFINITY) = &quot; + result;
&gt; +    }

#document

&gt; Source/JavaScriptCore/tests/stress/math-pow-with-constants.js:15
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = exponentIsZero(5);
&gt; +        if (result !== 1)
&gt; +            throw &quot;Error: zeroExponent(5) should be 1, was = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = exponentIsZero(5.5);
&gt; +        if (result !== 1)
&gt; +            throw &quot;Error: zeroExponent(5.5) should be 1, was = &quot; + result;

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-with-constants.js:34
&gt; +function testExponentIsOne() {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = exponentIsOne(5);
&gt; +        if (result !== 5)
&gt; +            throw &quot;Error: exponentIsOne(5) should be 5, was = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = exponentIsOne(5.5);
&gt; +        if (result !== 5.5)

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-with-constants.js:55
&gt; +function testPowUsedAsSqrt() {
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = powUsedAsSqrt(4);
&gt; +        if (result !== Math.sqrt(4))
&gt; +            throw &quot;Error: powUsedAsSqrt(4) should be 2, was = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = powUsedAsSqrt(4.4);
&gt; +        if (result !== Math.sqrt(4.4))
&gt;              throw &quot;Error: powUsedAsSqrt(4) should be &quot; + Math.sqrt(4.4) + &quot;, was = &quot; + result;

Ditto.

&gt; Source/JavaScriptCore/tests/stress/math-pow-with-constants.js:113
&gt; +{
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = intIntConstantsSmallNumbers();
&gt; +        if (result !== 74088)
&gt; +            throw &quot;Error: intIntConstantsSmallNumbers() should be 74088, was = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = intIntConstantsLargeNumbers();
&gt; +        if (result !== 1.5013093754529656e+68)
&gt; +            throw &quot;Error: intIntConstantsLargeNumbers() should be 1.5013093754529656e+68, was = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = intDoubleConstants();
&gt; +        if (result !== 5.1338303882015765e+48)
&gt; +            throw &quot;Error: intDoubleConstants() should be 5.1338303882015765e+48, was = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = doubleDoubleConstants();
&gt; +        if (result !== 1.0944228729647829e+48)
&gt; +            throw &quot;Error: doubleDoubleConstants() should be 1.0944228729647829e+48, was = &quot; + result;
&gt; +    }
&gt; +    for (var i = 0; i &lt; 1000000; ++i) {
&gt; +        var result = doubleIntConstants();
&gt; +        if (result !== 5.989022735311158e+58)
&gt; +            throw &quot;Error: doubleIntConstants() should be 5.989022735311158e+58, was = &quot; + result;
&gt; +    }

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069070</commentid>
    <comment_count>4</comment_count>
      <attachid>246560</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-13 17:30:45 -0800</bug_when>
    <thetext>Created attachment 246560
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069071</commentid>
    <comment_count>5</comment_count>
      <attachid>246560</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-13 17:35:08 -0800</bug_when>
    <thetext>Comment on attachment 246560
Patch

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

Almost there!

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:737
&gt; +        forNode(node).setType(typeOfDoubleUnaryOp(forNode(node-&gt;child1()).m_type));

I think you want typeOfDoubleBinaryOp and pass the types of both inputs.

&gt; Source/JavaScriptCore/dfg/DFGFixupPhase.cpp:343
&gt; +            if (node-&gt;child2()-&gt;shouldSpeculateInt32()) {

shouldSpeculateInt32OrBooleanForArithmetic :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069080</commentid>
    <comment_count>6</comment_count>
      <attachid>246564</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-13 18:16:56 -0800</bug_when>
    <thetext>Created attachment 246564
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069088</commentid>
    <comment_count>7</comment_count>
      <attachid>246567</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-13 19:15:57 -0800</bug_when>
    <thetext>Created attachment 246567
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069089</commentid>
    <comment_count>8</comment_count>
      <attachid>246568</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-13 19:21:01 -0800</bug_when>
    <thetext>Created attachment 246568
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069093</commentid>
    <comment_count>9</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-13 19:29:59 -0800</bug_when>
    <thetext>Hopefully I got the type right this time:
1) If the exponent is any NaN, we know that the result is a pure NaN.
2) Otherwise, business as usual.

SpeculatedType typeOfDoublePow(SpeculatedType xValue, SpeculatedType yValue)
{
    // Math.pow() always return NaN if the exponent is NaN, unlike std::pow().
    // We always set a pure NaN in that case.
    if (yValue &amp; SpecDoubleNaN)
        xValue |= SpecDoublePureNaN;
    return polluteDouble(xValue);
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069095</commentid>
    <comment_count>10</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-02-13 19:35:04 -0800</bug_when>
    <thetext>Attachment 246568 did not pass style-queue:

ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1294:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1295:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1296:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1329:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1331:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1331:  Extra space between int and k  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1335:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1335:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1336:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1336:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1336:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1340:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1342:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1342:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1344:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1344:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1346:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1346:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1349:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1350:  Else clause should never be on same line as else (use 2 lines)  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1350:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1353:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1359:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1360:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1361:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1362:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1363:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1365:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1365:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1366:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1367:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1368:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1371:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1371:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1371:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1371:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1374:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1374:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1374:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1374:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1375:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1375:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1375:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1384:  Missing spaces around &lt;  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1384:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1385:  Missing spaces around &gt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1385:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1385:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1386:  Missing spaces around &gt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1386:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1388:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1390:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1390:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1390:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1391:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1391:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1391:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1393:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1393:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1393:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1399:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1399:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1399:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1400:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1401:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1401:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1401:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1402:  Extra space between return and y  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1404:  Missing spaces around &gt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1406:  Missing spaces around &lt;  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1408:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1408:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1409:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1409:  Else clause should never be on same line as else (use 2 lines)  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1409:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1409:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1409:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1410:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1411:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1411:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1411:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1412:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1412:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1413:  Missing spaces around &gt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1413:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1420:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1420:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1420:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1421:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1421:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1421:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1421:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1423:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1423:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1423:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1424:  Missing spaces around &lt;  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1424:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1425:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1425:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1425:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1426:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1427:  Missing spaces around ==  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1427:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1437:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1437:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1437:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1437:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1440:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1440:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1440:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1440:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1443:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1444:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1444:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1445:  Missing spaces around &lt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1445:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1445:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1446:  Missing spaces around &gt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1446:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1446:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1449:  Missing spaces around &lt;  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1449:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1449:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1450:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1450:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1461:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1461:  s_l is incorrectly named. Don&apos;t use the single letter &apos;l&apos; as an identifier name.  [readability/naming] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1464:  Missing spaces around &lt;  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1464:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1465:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1469:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp
:1470:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1470:  Missing spaces around &lt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1470:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1470:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1471:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1471:  Missing spaces around &lt;  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1471:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1471:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1472:  More than one command on the same line  [whitespace/newline] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1472:  Missing spaces around =  [whitespace/operators] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1472:  Missing spaces around +=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1477:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1483:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1518:  Missing spaces around &gt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1519:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1519:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1519:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1522:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1522:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1523:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1524:  Missing spaces around &gt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1524:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1524:  Extra space before ) in if  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1525:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1525:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1525:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1528:  Missing spaces around &lt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1528:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1528:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1529:  One line control clauses should not use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1537:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1542:  Missing spaces around |  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1543:  Missing spaces around &lt;  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1543:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1543:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1554:  Missing spaces around /  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1558:  Missing spaces around &lt;=  [whitespace/operators] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1558:  Missing space before ( in if(  [whitespace/parens] [5]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1558:  More than one command on the same line in if  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1558:  Missing space after ,  [whitespace/comma] [3]
ERROR: Source/JavaScriptCore/jit/JITOperations.cpp:1559:  Else clause should never be on same line as else (use 2 lines)  [whitespace/newline] [4]
Total errors found: 172 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069106</commentid>
    <comment_count>11</comment_count>
      <attachid>246568</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-02-13 20:16:14 -0800</bug_when>
    <thetext>Comment on attachment 246568
Patch

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

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:1633
&gt; +            // FIXME: shouldn&apos;t we only check that if the type of child2() might have NaN?

Yup. :-)  An idiom that I like to use for this is:

LValue exponentIsNaN;
if (forNode(child2).m_type &amp; SpecDoubleNaN)
    exponentIsNaN = m_out.doubleNotEqualOrUnordered(exponent, exponent);
else
    exponentIsNaN = m_out.booleanFalse;

You don&apos;t have to do this in this patch.

&gt; Source/JavaScriptCore/jit/JITOperations.cpp:1238
&gt; +#if PLATFORM(IOS) &amp;&amp; CPU(ARM_THUMB2)
&gt; +
&gt; +// The following code is taken from netlib.org:
&gt; +//   http://www.netlib.org/fdlibm/fdlibm.h
&gt; +//   http://www.netlib.org/fdlibm/e_pow.c
&gt; +//   http://www.netlib.org/fdlibm/s_scalbn.c
&gt; +//
&gt; +// And was originally distributed under the following license:
&gt; +
&gt; +/*
&gt; + * ====================================================
&gt; + * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
&gt; + *
&gt; + * Developed at SunSoft, a Sun Microsystems, Inc. business.
&gt; + * Permission to use, copy, modify, and distribute this
&gt; + * software is freely granted, provided that this notice 
&gt; + * is preserved.
&gt; + * ====================================================
&gt; + */
&gt; +/*
&gt; + * ====================================================
&gt; + * Copyright (C) 2004 by Sun Microsystems, Inc. All rights reserved.
&gt; + *

It really feels like this code should belong in its own directory, like even an fdlibm directory.  Maybe we should do that in a future patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069107</commentid>
    <comment_count>12</comment_count>
      <attachid>246568</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-13 20:20:25 -0800</bug_when>
    <thetext>Comment on attachment 246568
Patch

Clearing flags on attachment: 246568

Committed r180098: &lt;http://trac.webkit.org/changeset/180098&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069108</commentid>
    <comment_count>13</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-13 20:20:31 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069163</commentid>
    <comment_count>14</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-02-13 22:53:28 -0800</bug_when>
    <thetext>(In reply to comment #12)
&gt; Comment on attachment 246568 [details]
&gt; Patch
&gt; 
&gt; Clearing flags on attachment: 246568
&gt; 
&gt; Committed r180098: &lt;http://trac.webkit.org/changeset/180098&gt;

It broke the cloop build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1069293</commentid>
    <comment_count>15</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-02-15 00:15:37 -0800</bug_when>
    <thetext>just a note: new bug report for buildfix - bug141618</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1070293</commentid>
    <comment_count>16</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-02-18 17:32:30 -0800</bug_when>
    <thetext>*** Bug 118560 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246481</attachid>
            <date>2015-02-12 15:27:13 -0800</date>
            <delta_ts>2015-02-13 17:30:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141540-20150212152711.patch</filename>
            <type>text/plain</type>
            <size>53305</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMDEzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZGY2ZWRhM2I2OWIxNzdkYmEwOGI3ZDY4NGI5OTA4MDFlOWQyMzgyLi5kMDRjOWVmZDNhZDU5ZmJm
MDM2NDhkZTFjNWViNmVkZmY0MzJmYzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxNS0wMi0xMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBERkcgbm9kZSBmb3IgdGhlIFBvdyBJbnRyaW5zaWNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1NDAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBERkcg
Tm9kZSBmb3IgUG93SW50cmluc2ljLiBUaGlzIHBhdGNoIGNvdmVycyB0aGUgYmFzaWMgY2FzZXMK
KyAgICAgICAgbmVlZCB0byBhdm9pZCBtYXNzaXZlIHJlZ3Jlc3Npb24uIEkgd2lsbCBpdGVyYXRl
IG92ZXIgdGhlIG5vZGUgdG8gY292ZXIKKyAgICAgICAgdGhlIG1pc3NpbmcgdHlwZXMuCisKKyAg
ICAgICAgV2l0aCB0aGlzIHBhdGNoIEkgZ2V0IHRoZSBmb2xsb3dpbmcgY2hhbmdlcyBvbiBiZW5j
aG1hcmtzOgorICAgICAgICAtTG9uZ1NwaWRlcidzIG1hdGgtcGFydGlhbC1zdW1zOiArNSUuCisg
ICAgICAgIC1LcmFrZW4ncyBpbWFnaW5nLWRhcmtyb29tOiArMTclCisgICAgICAgIC1Bc21CZW5j
aCdzIGNyYXkuYzogKzYuNiUKKyAgICAgICAgLUNvbXByZXNzaW9uQmVuY2g6ICsyLjIlIGdsb2Jh
bGx5LgorCisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgQ292ZXIgYSBjb3VwbGUgb2YgdHJpdmlhbCBjYXNl
czoKKyAgICAgICAgLUlmIHRoZSBleHBvbmVudCBpcyB6ZXJvLCB0aGUgcmVzdWx0IGlzIGFsd2F5
cyBvbmUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGJhc2UuCisgICAgICAgIC1JZiBib3RoIGFyZ3VtZW50
cyBhcmUgY29uc3RhbnRzLCBjb21wdXRlIHRoZSByZXN1bHQgYXQgY29tcGlsZSB0aW1lLgorCisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKiBkZmcvREZHQ2xvYmJl
cml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2JiZXJpemUpOgorICAgICAgICAqIGRmZy9E
RkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmRvZXNHQyk6CisKKyAgICAgICAgKiBk
ZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6Zml4
dXBOb2RlKToKKyAgICAgICAgV2Ugb25seSBzdXBwb3J0IDIgYmFzaWMgY2FzZXMgYXQgdGhpcyB0
aW1lOgorICAgICAgICAtTWF0aC5wb3coZG91YmxlLCBpbnQpCisgICAgICAgIC1NYXRoLnBvdyhk
b3VibGUsIGRvdWJsZSkuCisKKyAgICAgICAgSSdsbCBjb3ZlciBNYXRoLnBvdyhpbnQsIGludCkg
aW4gYSBmb2xsb3cgdXAuCisKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlND
OjpERkc6Ok5vZGU6OmNvbnZlcnRUb0FyaXRoU3FydCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6YXJpdGhOb2RlRmxhZ3MpOgorICAgICAgICAqIGRmZy9ERkdOb2RlVHlwZS5oOgorICAgICAg
ICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3BhZ2F0ZSk6CisgICAgICAgIChK
U0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OmRvRG91YmxlVm90aW5nKToKKyAg
ICAgICAgKiBkZmcvREZHU2FmZVRvRXhlY3V0ZS5oOgorICAgICAgICAoSlNDOjpERkc6OnNhZmVU
b0V4ZWN1dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6Y29tcGlsZUFyaXRoUG93SW50ZWdlckZhc3RQYXRoKToKKyAgICAgICAgKEpT
Qzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUFyaXRoUG93KToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1N0cmVuZ3RoUmVkdWN0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlN0cmVuZ3RoUmVkdWN0aW9uUGhhc2U6
OmhhbmRsZU5vZGUpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0
aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwv
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExW
TS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb2RlKToK
KyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUFyaXRoUG93KToKKyAg
ICAgICAgKiBmdGwvRlRMT3V0cHV0Lmg6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3Vi
bGVQb3cpOgorICAgICAgICAoSlNDOjpGVEw6Ok91dHB1dDo6ZG91YmxlUG93aSk6CisgICAgICAg
ICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6
CisgICAgICAgICogcnVudGltZS9NYXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6bWF0aFBy
b3RvRnVuY1Bvdyk6CisgICAgICAgIChKU0M6OmlzRGVub3JtYWwpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjppc0VkZ2VDYXNlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6bWF0aFBvdyk6IERl
bGV0ZWQuCisKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbWF0aC1wb3ctYmFzaWNzLmpzOiBBZGRl
ZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbWF0aC1wb3ctaW50ZWdlci1leHBvbmVudC1mYXN0
cGF0aC5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL21hdGgtcG93LW5hbi1iZWhh
dmlvcnMuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy13aXRoLWNv
bnN0YW50cy5qczogQWRkZWQuCisgICAgICAgIFN0YXJ0IHNvbWUgYmFzaWMgdGVzdGluZyBvZiBN
YXRoLnBvdygpLgorICAgICAgICBEdWUgdG8gdGhlIHZhcmlvdXMgdHJhbnNmb3JtLCB0aGUgdmFs
dWUgY2hhbmdlIHdoZW4gdGhlIGNvZGUgdGllcnMgdXAsCisgICAgICAgIEkgY292ZXJlZCB0aGlz
IGJ5IGNoZWNraW5nIGZvciBhcHByb3hpbWF0ZSB2YWx1ZXMuCisKIDIwMTUtMDItMTIgIEJlbmph
bWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIFNpbXBsaWZ5IHRo
ZSBpbml0aWFsaXphdGlvbiBvZiBCeXRlY29kZUdlbmVyYXRvciBhIGJpdApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5o
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oCmluZGV4IGQ3YjViMGY3Mjk0NWVkODI2MWZhNDUwNTdkYmMxNmY3NDc0Zjg0MTQuLjZhZmQ2
YmVhODNiYmQ5NTIxMzcxYmM0ZjZlYTJiNzk2ZjM3NTYxOWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
QEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVyLmgiCiAj
aW5jbHVkZSAiR2V0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkdldHRlclNldHRlci5oIgorI2lu
Y2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVk
ZSAiUHV0QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIlN0cmluZ09iamVjdC5oIgpAQCAtNzE4LDYg
KzcxOSwyNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+Ojpl
eGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVyTGltaQogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KKworICAgIGNhc2UgQXJpdGhQb3c6IHsKKyAgICAgICAgSlNWYWx1ZSBjaGls
ZFkgPSBmb3JOb2RlKG5vZGUtPmNoaWxkMigpKS52YWx1ZSgpOworICAgICAgICBpZiAoY2hpbGRZ
ICYmIGNoaWxkWS5pc051bWJlcigpKSB7CisgICAgICAgICAgICBpZiAoY2hpbGRZLmFzTnVtYmVy
KCkgPT0gMCkgeworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91YmxlTnVt
YmVyKDEpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgSlNWYWx1ZSBjaGlsZFggPSBmb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwor
ICAgICAgICAgICAgaWYgKGNoaWxkWCAmJiBjaGlsZFguaXNOdW1iZXIoKSkgeworICAgICAgICAg
ICAgICAgIHNldENvbnN0YW50KG5vZGUsIGpzRG91YmxlTnVtYmVyKG9wZXJhdGlvbk1hdGhQb3co
Y2hpbGRYLmFzTnVtYmVyKCksIGNoaWxkWS5hc051bWJlcigpKSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZShTcGVjRnVsbERvdWJsZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAg
ICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JO
b2RlKG5vZGUtPmNoaWxkMSgpKS52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCBhMTA4ODliYzYyMmJkMGJkMGM0MTZiMTEx
ZGNhYzY2YzRmNjM3MTlmLi4zMWUxMTVhMTUwNTk4ZDZkOWJhNDM5NGI4MDhlNDNjMmY2NjU3MDhi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cApAQCAtMTY4Nyw2ICsxNjg3LDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50CiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBjYXNlIFBvd0ludHJp
bnNpYzogeworICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKSB7Cisg
ICAgICAgICAgICAvLyBNYXRoLnBvdygpIGFuZCBNYXRoLnBvdyh4KSByZXR1cm4gTmFOLgorICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChK
U0NvbnN0YW50LCBPcEluZm8obV9jb25zdGFudE5hTikpKTsKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICB9CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB4T3BlcmFuZCA9IHZpcnR1
YWxSZWdpc3RlckZvckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHlPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0
ZXJPZmZzZXQpOworICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBh
ZGRUb0dyYXBoKEFyaXRoUG93LCBnZXQoeE9wZXJhbmQpLCBnZXQoeU9wZXJhbmQpKSk7CisgICAg
ICAgIHJldHVybiB0cnVlOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2hJbnRy
aW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCkBA
IC0xODQ1LDcgKzE4NTcsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
aW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludAogICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgZ2V0KG9wZXJhbmQpKTsKICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAgICAgICAKKwogICAgIGRlZmF1bHQ6CiAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCmluZGV4IGFjNmI4Zjc5MmJjM2I0MjVlNWI0YzkzODI5YmMxYjhlYWU2YmE0ZDguLmRj
ZGI3ZGI0ODQ2NmY5ZTM2NWY5OWI4OWQyNzk3ZDVkYTFhNGNmZmIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0xMjIsNiArMTIyLDcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQs
IGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAg
ICAgY2FzZSBBcml0aE1heDoKKyAgICBjYXNlIEFyaXRoUG93OgogICAgIGNhc2UgQXJpdGhTcXJ0
OgogICAgIGNhc2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCBjNmZlYWZkZDNkOGVlNzBkOGIwZDRmNjRl
ZDhkMmNjNjYzNTNkYzE2Li41ZGNhZDQzYmNhN2YxMGZiNDRlZmI4ZjExMTdkM2NmNDg2ZTk0Y2E3
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCkBAIC04MSw2ICs4MSw3
IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIEFyaXRo
QWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKKyAgICBjYXNlIEFy
aXRoUG93OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNhc2UgQXJpdGhGUm91bmQ6CiAgICAg
Y2FzZSBBcml0aFNpbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCmluZGV4IGUzMWE1NGQzZTNkMjIwOWZmNTk4N2RhMTE3N2NiMzE4NGVjMDk1OTYuLjlmMWEw
NjhmYzJlY2Y1MGFmNDQ3MWY2Y2ZlNGRlNTc5YmZjZWM0ZjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMzM3LDYgKzMzNywxOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgbm9kZS0+c2V0UmVzdWx0KE5vZGVSZXN1bHREb3VibGUpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBjYXNlIEFyaXRoUG93OiB7CisgICAg
ICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdERvdWJsZSk7CisgICAgICAgICAgICBp
ZiAobm9kZS0+Y2hpbGQxKCktPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpICYmIG5vZGUtPmNoaWxk
MigpLT5zaG91bGRTcGVjdWxhdGVJbnQzMigpKSB7CisgICAgICAgICAgICAgICAgZml4RWRnZTxE
b3VibGVSZXBVc2U+KG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICBmaXhFZGdlPElu
dDMyVXNlPihub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICB9CisKKyAgICAgICAgICAgIGZpeERvdWJsZU9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICAgICAgZml4RG91YmxlT3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDIoKSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgIGNh
c2UgQXJpdGhTcXJ0OgogICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAppbmRleCBiZmZiODY2MGNkZDAxMDc2ZGY3MTMzYTEyY2YzYmIxYmYxYWFk
ZTdhLi45NjliMmVmNzljYjU1ZjY5NWRiNWJkMTI2NjI3YWNhMjA1MDVlZDI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTY1LDYgKzU2NSwxMiBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgICAgIEFTU0VSVChtX29wID09IFRvUHJpbWl0aXZlKTsKICAgICAgICAgbV9vcCA9IFRv
U3RyaW5nOwogICAgIH0KKworICAgIHZvaWQgY29udmVydFRvQXJpdGhTcXJ0KCkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChtX29wID09IEFyaXRoUG93KTsKKyAgICAgICAgbV9vcCA9IEFyaXRoU3Fy
dDsKKyAgICB9CiAgICAgCiAgICAgSlNWYWx1ZSBhc0pTVmFsdWUoKQogICAgIHsKQEAgLTc3NSw3
ICs3ODEsNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgTm9kZUZsYWdzIGFyaXRoTm9kZUZsYWdzKCkK
ICAgICB7CiAgICAgICAgIE5vZGVGbGFncyByZXN1bHQgPSBtX2ZsYWdzICYgTm9kZUFyaXRoRmxh
Z3NNYXNrOwotICAgICAgICBpZiAob3AoKSA9PSBBcml0aE11bCB8fCBvcCgpID09IEFyaXRoRGl2
IHx8IG9wKCkgPT0gQXJpdGhNb2QgfHwgb3AoKSA9PSBBcml0aE5lZ2F0ZSB8fCBvcCgpID09IERv
dWJsZUFzSW50MzIpCisgICAgICAgIGlmIChvcCgpID09IEFyaXRoTXVsIHx8IG9wKCkgPT0gQXJp
dGhEaXYgfHwgb3AoKSA9PSBBcml0aE1vZCB8fCBvcCgpID09IEFyaXRoTmVnYXRlIHx8IG9wKCkg
PT0gQXJpdGhQb3cgfHwgb3AoKSA9PSBEb3VibGVBc0ludDMyKQogICAgICAgICAgICAgcmV0dXJu
IHJlc3VsdDsKICAgICAgICAgcmV0dXJuIHJlc3VsdCAmIH5Ob2RlQnl0ZWNvZGVOZWVkc05lZ1pl
cm87CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2Rl
VHlwZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCmluZGV4IDY1
Y2IzOTlmMWIwNWQxZWE3YjZhNThhNWEyNjZlOTcxZjljZDY5MjAuLjhhMGVhODFhNjJkYmRhNTUw
ZTkzZmJmMWM4Mzk2MTZkYzI4NmM1ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05v
ZGVUeXBlLmgKQEAgLTEzNCw2ICsxMzQsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAgICAgbWFjcm8oQXJpdGhNaW4sIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhB
cml0aE1heCwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIG1hY3JvKEFyaXRoRlJvdW5kLCBOb2Rl
UmVzdWx0TnVtYmVyKSBcCisgICAgbWFjcm8oQXJpdGhQb3csIE5vZGVSZXN1bHROdW1iZXIpIFwK
ICAgICBtYWNybyhBcml0aFNxcnQsIE5vZGVSZXN1bHROdW1iZXIpIFwKICAgICBtYWNybyhBcml0
aFNpbiwgTm9kZVJlc3VsdE51bWJlcikgXAogICAgIG1hY3JvKEFyaXRoQ29zLCBOb2RlUmVzdWx0
TnVtYmVyKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IGQxYTZlNGRjZDNlZGFlYjY3M2Fh
YzI0Y2U4ZDEzNjViNjk2OTk5ZWEuLjcwMzIxZjhkMDFjMGIzYjBmOWM0ZDE1ZTJlMTMwYjhiYWFk
NTMwNTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0zMjEsNyArMzIxLDE0IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAg
ICAgICAgCisKKyAgICAgICAgY2FzZSBBcml0aFBvdzogeworICAgICAgICAgICAgLy8gRklYTUU6
IGlzIHRoYXQgcmlnaHQ/IFRoZSBuYXRpdmUgcG93KCkgY2FuIHJldHVybiBhbiBpbXBvdXJlIE5h
Ti4KKyAgICAgICAgICAgIC8vIEJ1dCBzbyBjYW4gc3FydCgpIGFib3ZlIGFuZCBpdCdzIHR5cGUg
aXMgU3BlY0J5dGVjb2RlRG91YmxlLCB3aGF0IGFtIEkgbWlzc2luZy4KKyAgICAgICAgICAgIGNo
YW5nZWQgfD0gc2V0UHJlZGljdGlvbihTcGVjRnVsbERvdWJsZSk7CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgfQorCiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICBjYXNlIEFy
aXRoRlJvdW5kOgogICAgICAgICBjYXNlIEFyaXRoU2luOgpAQCAtMzI5LDcgKzMzNiw3IEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICBjaGFuZ2VkIHw9IHNldFByZWRpY3Rpb24oU3BlY0J5dGVjb2Rl
RG91YmxlKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwog
ICAgICAgICBjYXNlIEFyaXRoQWJzOiB7CiAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBjaGls
ZCA9IG5vZGUtPmNoaWxkMSgpLT5wcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICBpZiAoaXNJbnQz
Mk9yQm9vbGVhblNwZWN1bGF0aW9uRm9yQXJpdGhtZXRpYyhjaGlsZCkKQEAgLTc4MCw3ICs3ODcs
NyBAQCBwcml2YXRlOgogICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgIG1fZ3JhcGgu
dm90ZU5vZGUobm9kZS0+Y2hpbGQxKCksIFZvdGVWYWx1ZSwgd2VpZ2h0KTsKICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIAorCiAgICAgICAgIGNhc2UgU2V0TG9jYWw6IHsKICAg
ICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBub2RlLT5jaGlsZDEoKS0+cHJl
ZGljdGlvbigpOwogICAgICAgICAgICAgaWYgKGlzRG91YmxlU3BlY3VsYXRpb24ocHJlZGljdGlv
bikpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1
dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCmluZGV4
IDhlOGFlMDc3ZDYzYjBlNjAwZTY4NjZkY2FhMjcxZWZhYmM4NzM3ODEuLmM4NDUxM2FkOGE3YmM4
NzJjNmIxMTc0MGQ3M2Q2Zjk1Yjk3NDg5ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0xNTAsNiArMTUwLDcgQEAgYm9vbCBzYWZlVG9FeGVj
dXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQog
ICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4
OgorICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgY2FzZSBBcml0
aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoU2luOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBiNGNkOTExMDg4ZWFjNGJkY2RiNWI1Yzg5
MjU2YTQ2NmY1MTRiOTg1Li43YTIwYjRmOWM0Yjk5N2M1ZTZhZjZlYmNiNWI1ZTU5MjE2ZmFhNzM2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cApAQCAtMzU0Myw2ICszNTQzLDk1IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0
aE1vZChOb2RlKiBub2RlKQogICAgIH0KIH0KIAorLy8gRm9yIHNtYWxsIHBvc2l0aXZlIGludGVn
ZXJzICwgaXQgaXMgd29ydGggZG9pbmcgYSB0aW55IGlubGluZSBsb29wIHRvIGV4cG9uZW50aWF0
ZSB0aGUgYmFzZS4KKy8vIEV2ZXJ5IHJlZ2lzdGVyIGlzIGNsb2JiZXJlZCBieSB0aGlzIGhlbHBl
ci4KK3N0YXRpYyBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFz
dFBhdGgoSklUQ29tcGlsZXImIGFzc2VtYmxlciwgRlBSUmVnIHhPcGVyYW5kLCBHUFJSZWcgeU9w
ZXJhbmQsIEZQUlJlZyByZXN1bHQpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0IHNr
aXBGYXN0UGF0aDsKKyAgICBza2lwRmFzdFBhdGguYXBwZW5kKGFzc2VtYmxlci5icmFuY2gzMihN
YWNyb0Fzc2VtYmxlcjo6TGVzc1RoYW4sIHlPcGVyYW5kLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDApKSk7CisgICAgc2tpcEZhc3RQYXRoLmFwcGVuZChhc3NlbWJsZXIuYnJhbmNoMzIo
TWFjcm9Bc3NlbWJsZXI6OkdyZWF0ZXJUaGFuLCB5T3BlcmFuZCwgTWFjcm9Bc3NlbWJsZXI6OlRy
dXN0ZWRJbW0zMigxMDAwKSkpOworCisgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmVDb25zdGFu
dCA9IDEuMDsKKyAgICBhc3NlbWJsZXIubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbVB0cigmb25lQ29uc3RhbnQpLCByZXN1bHQpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okxh
YmVsIHN0YXJ0TG9vcChhc3NlbWJsZXIubGFiZWwoKSk7CisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1
bXAgZXhwb25lbnRJc0V2ZW4gPSBhc3NlbWJsZXIuYnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVy
OjpaZXJvLCB5T3BlcmFuZCwgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigxKSk7CisgICAg
YXNzZW1ibGVyLm11bERvdWJsZSh4T3BlcmFuZCwgcmVzdWx0KTsKKyAgICBleHBvbmVudElzRXZl
bi5saW5rKCZhc3NlbWJsZXIpOworICAgIGFzc2VtYmxlci5tdWxEb3VibGUoeE9wZXJhbmQsIHhP
cGVyYW5kKTsKKyAgICBhc3NlbWJsZXIucnNoaWZ0MzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMigxKSwgeU9wZXJhbmQpOworICAgIGFzc2VtYmxlci5icmFuY2hUZXN0MzIoTWFjcm9Bc3Nl
bWJsZXI6Ok5vblplcm8sIHlPcGVyYW5kKS5saW5rVG8oc3RhcnRMb29wLCAmYXNzZW1ibGVyKTsK
KworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNraXBTbG93UGF0aCA9IGFzc2VtYmxlci5qdW1w
KCk7CisgICAgc2tpcEZhc3RQYXRoLmxpbmsoJmFzc2VtYmxlcik7CisKKyAgICByZXR1cm4gc2tp
cFNsb3dQYXRoOworfQorCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhQb3coTm9k
ZSogbm9kZSkKK3sKKyAgICBpZiAoIW1faml0LnN1cHBvcnRzRmxvYXRpbmdQb2ludCgpKSB7Cisg
ICAgICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgeE9wZXJhbmQodGhpcywgbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHlPcGVyYW5kKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKKyAgICAgICAgRlBSUmVnIHhPcGVyYW5kZnByID0geE9wZXJhbmQuZnByKCk7
CisgICAgICAgIEZQUlJlZyB5T3BlcmFuZGZwciA9IHlPcGVyYW5kLmZwcigpOworCisgICAgICAg
IEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTWF0aFBvdywgcmVzdWx0LmZwcigpLCB4T3BlcmFuZGZwciwgeU9wZXJhbmRmcHIpOworICAg
ICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGlmIChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gSW50MzJVc2UpIHsK
KyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB4T3BlcmFuZCh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCB5T3BlcmFuZCh0aGlzLCBub2Rl
LT5jaGlsZDIoKSk7CisgICAgICAgIEZQUlJlZyB4T3BlcmFuZGZwciA9IHhPcGVyYW5kLmZwcigp
OworICAgICAgICBHUFJSZWcgeU9wZXJhbmRHcHIgPSB5T3BlcmFuZC5ncHIoKTsKKyAgICAgICAg
RlBSVGVtcG9yYXJ5IHlPcGVyYW5kZnByKHRoaXMpOworCisgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHhPcGVyYW5kQ29weSh0aGlzKTsKKyAgICAgICAg
bV9qaXQubW92ZURvdWJsZSh4T3BlcmFuZGZwciwgeE9wZXJhbmRDb3B5LmZwcigpKTsKKworICAg
ICAgICBHUFJUZW1wb3JhcnkgY291bnRlcih0aGlzKTsKKyAgICAgICAgbV9qaXQubW92ZSh5T3Bl
cmFuZEdwciwgY291bnRlci5ncHIoKSk7CisKKyAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0
aGlzKTsKKworICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lwRmFsbGJhY2sgPSBjb21w
aWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgobV9qaXQsIHhPcGVyYW5kQ29weS5mcHIoKSwgY291
bnRlci5ncHIoKSwgcmVzdWx0LmZwcigpKTsKKyAgICAgICAgbV9qaXQuY29udmVydEludDMyVG9E
b3VibGUoeU9wZXJhbmRHcHIsIHlPcGVyYW5kZnByLmZwcigpKTsKKyAgICAgICAgY2FsbE9wZXJh
dGlvbihvcGVyYXRpb25NYXRoUG93LCByZXN1bHQuZnByKCksIHhPcGVyYW5kZnByLCB5T3BlcmFu
ZGZwci5mcHIoKSk7CisKKyAgICAgICAgc2tpcEZhbGxiYWNrLmxpbmsoJm1faml0KTsKKyAgICAg
ICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIoKSwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHhPcGVyYW5kKHRoaXMsIG5vZGUtPmNo
aWxkMSgpKTsKKyAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5kIHlPcGVyYW5kKHRoaXMsIG5vZGUt
PmNoaWxkMigpKTsKKyAgICBGUFJSZWcgeE9wZXJhbmRmcHIgPSB4T3BlcmFuZC5mcHIoKTsKKyAg
ICBGUFJSZWcgeU9wZXJhbmRmcHIgPSB5T3BlcmFuZC5mcHIoKTsKKworICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisKKyAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOworICAgIEZQUlRlbXBvcmFy
eSB4T3BlcmFuZENvcHkodGhpcyk7CisgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7CisK
KyAgICBHUFJUZW1wb3JhcnkgeU9wZXJhbmRJbnRlZ2VyKHRoaXMpOworICAgIE1hY3JvQXNzZW1i
bGVyOjpKdW1wTGlzdCBmYWlsZWRFeHBvbmVudENvbnZlcnNpb25Ub0ludGVnZXI7CisgICAgbV9q
aXQuYnJhbmNoQ29udmVydERvdWJsZVRvSW50MzIoeU9wZXJhbmRmcHIsIHlPcGVyYW5kSW50ZWdl
ci5ncHIoKSwgZmFpbGVkRXhwb25lbnRDb252ZXJzaW9uVG9JbnRlZ2VyLCBzY3JhdGNoLmZwcigp
LCBmYWxzZSk7CisKKyAgICBtX2ppdC5tb3ZlRG91YmxlKHhPcGVyYW5kZnByLCB4T3BlcmFuZENv
cHkuZnByKCkpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIHNraXBGYWxsYmFjayA9IGNvbXBp
bGVBcml0aFBvd0ludGVnZXJGYXN0UGF0aChtX2ppdCwgeE9wZXJhbmRDb3B5LmZwcigpLCB5T3Bl
cmFuZEludGVnZXIuZ3ByKCksIHJlc3VsdC5mcHIoKSk7CisgICAgZmFpbGVkRXhwb25lbnRDb252
ZXJzaW9uVG9JbnRlZ2VyLmxpbmsoJm1faml0KTsKKworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0
aW9uTWF0aFBvdywgcmVzdWx0LmZwcigpLCB4T3BlcmFuZGZwciwgeU9wZXJhbmRmcHIpOworICAg
IHNraXBGYWxsYmFjay5saW5rKCZtX2ppdCk7CisgICAgZG91YmxlUmVzdWx0KHJlc3VsdC5mcHIo
KSwgbm9kZSk7Cit9CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgY29tcGFyZSBpcyBmdXNlZCB3
aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21wYXJlKE5v
ZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbiwg
TWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3VibGVDb25kaXRpb24sIFNfSklUT3Bl
cmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklULmgKaW5kZXggNWViNDc2YzRjNDU5NDkyYmVkNGQzM2ZmYjQxMTUxMWM3
N2YwYTk4NC4uMGQ0ODcxNzc4YzQ5NjA3ZGUzNTNlY2QyMDQ4ZDJlZDUwMTU1NjBlZSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaApAQCAtMjEzNCw2
ICsyMTM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZUFyaXRoTXVsKE5vZGUqKTsKICAg
ICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQXJpdGhNb2Qo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZUFyaXRoUG93KE5vZGUqKTsKICAgICB2b2lkIGNvbXBp
bGVDb25zdGFudFN0b3JhZ2VQb2ludGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRJbmRl
eGVkUHJvcGVydHlTdG9yYWdlKE5vZGUqKTsKICAgICBKSVRDb21waWxlcjo6SnVtcCBqdW1wRm9y
VHlwZWRBcnJheU91dE9mQm91bmRzKE5vZGUqLCBHUFJSZWcgYmFzZUdQUiwgR1BSUmVnIGluZGV4
R1BSKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCmluZGV4IDc2ZWI3YWEwNjUyYmQ4NjNmMDUxOTViMzkwODY2MTgwMzU1NDlk
NTMuLjg3ZjE4MDIzY2MwZGYwODVhYmUyNWUxZjQ2OTNiYjAwOTA1ZDRiNWUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApA
QCAtMTk5Niw2ICsxOTk2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBBcml0aFBvdzogeworICAg
ICAgICBjb21waWxlQXJpdGhQb3cobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAg
IGNhc2UgQXJpdGhBYnM6IHsKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggNTdiMDNmMjMyZTEzMGFjMTk3
NTU5ZmVlMjI2YzllMTM0ZTIwNzFiNS4uMWIzZmY3NzZhYzYwMjg3NDcyNjExMTAxMGQ2NzBkM2Nm
NmRmY2NlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCkBAIC0yMjQwLDYgKzIyNDAsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIH0KKwor
ICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAgIGNvbXBpbGVBcml0aFBvdyhub2RlKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgQXJpdGhTcXJ0OiB7CiAgICAgICAgIFNwZWN1
bGF0ZURvdWJsZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3Bw
CmluZGV4IGNlMWUyOTQ0MDJhZWRlNTUxM2NlZDBiNjQyNmJkM2EwOTM4YWQ0OGUuLjNhNWM5MjYw
YWU4NjU2MDY4YWRkN2IxZWE5OWE2ZTZlOGVjM2RlNGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcApAQCAtMTMy
LDcgKzEzMiwyNSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBBcml0aFBv
dzoKKyAgICAgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLT5pc051bWJlckNvbnN0YW50KCkp
IHsKKyAgICAgICAgICAgICAgICBkb3VibGUgeU9wZXJhbmRWYWx1ZSA9IG1fbm9kZS0+Y2hpbGQy
KCktPmFzTnVtYmVyKCk7CisgICAgICAgICAgICAgICAgaWYgKHlPcGVyYW5kVmFsdWUgPT0gMSkg
eworICAgICAgICAgICAgICAgICAgICBjb252ZXJ0VG9JZGVudGl0eU92ZXJDaGlsZDEoKTsKKyAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIGlmIChNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50U3FydCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGlmICh5T3BlcmFuZFZhbHVlID09IDAuNSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZShtX25vZGVJbmRleCwgU3Bl
Y05vbmUsIFBoYW50b20sIG1fbm9kZS0+b3JpZ2luLCBtX25vZGUtPmNoaWxkcmVuKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y2hpbGRyZW4ucmVtb3ZlRWRnZSgxKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1fbm9kZS0+Y29udmVydFRvQXJpdGhTcXJ0KCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2NoYW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisK
ICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoKICAgICAgICAgICAgIGlmIChKU0FycmF5QnVm
ZmVyVmlldyogdmlldyA9IG1fZ3JhcGgudHJ5R2V0Rm9sZGFibGVWaWV3Rm9yQ2hpbGQxKG1fbm9k
ZSkpCiAgICAgICAgICAgICAgICAgZm9sZFR5cGVkQXJyYXlQcm9wZXJ0eVRvQ29uc3RhbnQodmll
dywganNOdW1iZXIodmlldy0+bGVuZ3RoKCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYWxpZGF0ZS5jcHAKaW5kZXggZDQzOGNmY2E5ZDBlNWEzMDIzM2I0NWI1YWY1ZTEyMmQ1NTll
MGViZS4uN2Q3YjUwNjg1M2E4OGIyODNiOTkwNWViNzBhNjRlNDg2N2RkNTk1YSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKQEAgLTI0MCw2ICsyNDAsNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgY2FzZSBBcml0aE1vZDoKICAgICAgICAgICAgICAgICBj
YXNlIEFyaXRoTWluOgogICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhNYXg6CisgICAgICAgICAg
ICAgICAgY2FzZSBBcml0aFBvdzoKICAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzOgog
ICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3NFcToKICAgICAgICAgICAgICAgICBjYXNl
IENvbXBhcmVHcmVhdGVyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmls
aXRpZXMuY3BwCmluZGV4IDViOWY3YWE1MThjYTI2Y2FiMjBhYjRhNDVkYTM2MWNhNmNlMDhmNzAu
LjI0OGJkZjUyZTc5YTJlM2E1NzRhNTIyMzhiMjUxMTY5OTYyOTQzMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKQEAgLTg5LDYgKzg5LDcgQEAg
aW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5vZGUpCiAgICAgY2FzZSBB
cml0aEFiczoKICAgICBjYXNlIEFyaXRoU2luOgogICAgIGNhc2UgQXJpdGhDb3M6CisgICAgY2Fz
ZSBBcml0aFBvdzoKICAgICBjYXNlIEFyaXRoU3FydDoKICAgICBjYXNlIEFyaXRoRlJvdW5kOgog
ICAgIGNhc2UgQXJpdGhOZWdhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCmluZGV4IGQyMjc3OTIxZmU5M2I1M2FmNDYzN2UwOWI3
NGM0NWZiNGM2Zjg3MWMuLmYyODRlOGQxOGVjYWIzYWQ3YTdmZDU0MTY1ZmZlOThmZjZjOTFiYzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oCkBAIC00MCw2ICs0MCw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
ICAgICBtYWNybyhkb3VibGVBYnMsICJsbHZtLmZhYnMuZjY0IiwgZnVuY3Rpb25UeXBlKGRvdWJs
ZVR5cGUsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFjcm8oZG91YmxlU2luLCAibGx2bS5zaW4uZjY0
IiwgZnVuY3Rpb25UeXBlKGRvdWJsZVR5cGUsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFjcm8oZG91
YmxlQ29zLCAibGx2bS5jb3MuZjY0IiwgZnVuY3Rpb25UeXBlKGRvdWJsZVR5cGUsIGRvdWJsZVR5
cGUpKSBcCisgICAgbWFjcm8oZG91YmxlUG93LCAibGx2bS5wb3cuZjY0IiwgZnVuY3Rpb25UeXBl
KGRvdWJsZVR5cGUsIGRvdWJsZVR5cGUsIGRvdWJsZVR5cGUpKSBcCisgICAgbWFjcm8oZG91Ymxl
UG93aSwgImxsdm0ucG93aS5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlw
ZSwgaW50MzIpKSBcCiAgICAgbWFjcm8oZG91YmxlU3FydCwgImxsdm0uc3FydC5mNjQiLCBmdW5j
dGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKICAgICBtYWNybyhmcmFtZUFkZHJl
c3MsICJsbHZtLmZyYW1lYWRkcmVzcyIsIGZ1bmN0aW9uVHlwZShwb2ludGVyVHlwZShpbnQ4KSwg
aW50MzIpKSBcCiAgICAgbWFjcm8obXVsV2l0aE92ZXJmbG93MzIsICJsbHZtLnNtdWwud2l0aC5v
dmVyZmxvdy5pMzIiLCBmdW5jdGlvblR5cGUoc3RydWN0VHlwZShtX2NvbnRleHQsIGludDMyLCBi
b29sZWFuKSwgaW50MzIsIGludDMyKSkgXApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAppbmRleCBlNTc1MzdjNzkzZjRjYzk1ZTJhYzZjYTYxODlk
NzkyZDU3YWNiYmJhLi43YWM0MjBmNzAzNDVjNWZlNzI5MTQ2NmEwMTFmMGFmN2NjMDA3YzA4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcApA
QCAtNDM2LDYgKzQzNiw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQXJpdGhDb3M6CiAgICAg
ICAgICAgICBjb21waWxlQXJpdGhDb3MoKTsKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIEFyaXRoUG93OgorICAgICAgICAgICAgY29tcGlsZUFyaXRoUG93KCk7CisgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgICAgICAgICBjb21waWxlQXJp
dGhTcXJ0KCk7CiAgICAgICAgICAgICBicmVhazsKQEAgLTE1OTUsNiArMTU5OCw2MiBAQCBwcml2
YXRlOgogCiAgICAgdm9pZCBjb21waWxlQXJpdGhDb3MoKSB7IHNldERvdWJsZShtX291dC5kb3Vi
bGVDb3MobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KIAorICAgIHZvaWQgY29tcGls
ZUFyaXRoUG93KCkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBpbnZlc3RpZ2F0ZSBsbHZtLnBv
d2kgdG8gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIHBlcmZvcm1hbmNlIGNoYXJhY3RlcmlzdGljcy4K
KyAgICAgICAgLy8gSXQgbWlnaHQgYmUgYmV0dGVyIHRvIGhhdmUgdGhlIGlubGluZSBsb29wIGlu
IERGRyB0b28uCisgICAgICAgIGlmIChtX25vZGUtPmNoaWxkMigpLnVzZUtpbmQoKSA9PSBJbnQz
MlVzZSkKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5kb3VibGVQb3dpKGxvd0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpKSwgbG93SW50MzIobV9ub2RlLT5jaGlsZDIoKSkpKTsKKyAgICAgICAg
ZWxzZSB7CisgICAgICAgICAgICAvLyBGSVhNRTogYXNzZXJ0IG9uIHRoZSB1c2VraW5kLgorICAg
ICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAg
ICAgICAgICBMVmFsdWUgZXhwb25lbnQgPSBsb3dEb3VibGUobV9ub2RlLT5jaGlsZDIoKSk7CisK
KyAgICAgICAgICAgIExWYWx1ZSBpbnRlZ2VyRXhwb25lbnQgPSBtX291dC5mcFRvSW50MzIoZXhw
b25lbnQpOworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91
YmxlID0gbV9vdXQuaW50VG9Eb3VibGUoaW50ZWdlckV4cG9uZW50KTsKKyAgICAgICAgICAgIExW
YWx1ZSBleHBvbmVudElzSW50ZWdlciA9IG1fb3V0LmRvdWJsZUVxdWFsKGV4cG9uZW50LCBpbnRl
Z2VyRXhwb25lbnRDb252ZXJ0ZWRUb0RvdWJsZSk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdl
ckV4cG9uZW50QmVsb3cxMDAwID0gbV9vdXQuYmVsb3coaW50ZWdlckV4cG9uZW50LCBtX291dC5j
b25zdEludDMyKDEwMDApKTsKKyAgICAgICAgICAgIExWYWx1ZSBjYW5Hb0ludGVnZXJGYXN0UGF0
aCA9IG1fb3V0LmJpdEFuZChleHBvbmVudElzSW50ZWdlciwgaW50ZWdlckV4cG9uZW50QmVsb3cx
MDAwKTsKKworICAgICAgICAgICAgTEJhc2ljQmxvY2sgaW50ZWdlckV4cG9uZW50UG93QmxvY2sg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBvdyhkb3VibGUsIChpbnQpZG91Ymxl
KS4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVFeHBvbmVudFBvd0Jsb2NrID0g
RlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBwb3coZG91YmxlLCBkb3VibGUpLiIpKTsK
KyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHBvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJBcml0aFBvdyByZWd1bGFyIHBvdyIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIG5hbkV4
Y2VwdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgTmFOIEV4Y2VwdGlvbiIp
KTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgiQXJpdGhQb3cgY29udGludWF0aW9uIikpOworICAgICAgICAgICAgbV9vdXQuYnJh
bmNoKGNhbkdvSW50ZWdlckZhc3RQYXRoLCB1bnN1cmUoaW50ZWdlckV4cG9uZW50UG93QmxvY2sp
LCB1bnN1cmUoZG91YmxlRXhwb25lbnRQb3dCbG9jaykpOworCisgICAgICAgICAgICBMQmFzaWNC
bG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGludGVnZXJFeHBvbmVudFBvd0Jsb2NrLCBk
b3VibGVFeHBvbmVudFBvd0Jsb2NrKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvd0Rv
dWJsZUludFJlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5kb3VibGVQb3dpKGJhc2UsIGludGVn
ZXJFeHBvbmVudCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVFeHBvbmVudFBvd0Jsb2NrLCBwb3dCbG9j
ayk7CisgICAgICAgICAgICAvLyBJZiB5IGlzIE5hTiwgdGhlIHJlc3VsdCBpcyBOYU4uCisgICAg
ICAgICAgICAvLyBGSVhNRTogc2hvdWxkbid0IHdlIG9ubHkgY2hlY2sgdGhhdCBpZiB0aGUgdHlw
ZSBvZiBjaGlsZDIoKSBtaWdodCBoYXZlIE5hTj8KKyAgICAgICAgICAgIExWYWx1ZSBleHBvbmVu
dElzTmFOID0gbV9vdXQuZG91YmxlTm90RXF1YWxPclVub3JkZXJlZChleHBvbmVudCwgZXhwb25l
bnQpOworCisgICAgICAgICAgICAvLyBJZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyAraW5maW5pdHks
IHRoZSByZXN1bHQgaXMgTmFOLgorICAgICAgICAgICAgLy8gSWYgYWJzKHgpIGlzIDEgYW5kIHkg
aXMgLWluZmluaXR5LCB0aGUgcmVzdWx0IGlzIE5hTi4KKyAgICAgICAgICAgIExWYWx1ZSBhYnNv
bHV0ZUV4cG9uZW50ID0gbV9vdXQuZG91YmxlQWJzKGV4cG9uZW50KTsKKyAgICAgICAgICAgIExW
YWx1ZSBhYnNvbHV0ZUV4cG9uZW50SXNJbmZpbml0eSA9IG1fb3V0LmRvdWJsZUVxdWFsKGFic29s
dXRlRXhwb25lbnQsIG1fb3V0LmNvbnN0RG91YmxlKHN0ZDo6bnVtZXJpY19saW1pdHM8ZG91Ymxl
Pjo6aW5maW5pdHkoKSkpOworICAgICAgICAgICAgTFZhbHVlIGFic29sdXRlQmFzZSA9IG1fb3V0
LmRvdWJsZUFicyhiYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSBhYnNvbHV0ZUJhc2VJc09uZSA9
IG1fb3V0LmRvdWJsZUVxdWFsKGFic29sdXRlQmFzZSwgbV9vdXQuY29uc3REb3VibGUoMSkpOwor
ICAgICAgICAgICAgTFZhbHVlIG9uZUJhc2VJbmZpbml0ZUV4cG9uZW50ID0gbV9vdXQuYml0QW5k
KGFic29sdXRlRXhwb25lbnRJc0luZmluaXR5LCBhYnNvbHV0ZUJhc2VJc09uZSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmJyYW5jaChtX291dC5iaXRPcihleHBvbmVudElzTmFOLCBvbmVCYXNlSW5m
aW5pdGVFeHBvbmVudCksIHJhcmVseShuYW5FeGNlcHRpb24pLCB1c3VhbGx5KHBvd0Jsb2NrKSk7
CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHBvd0Jsb2NrLCBuYW5FeGNlcHRpb24pOwor
ICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0
LmRvdWJsZVBvdyhiYXNlLCBleHBvbmVudCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250
aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhuYW5FeGNlcHRpb24sIGNv
bnRpbnVhdGlvbik7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwdXJlTmFuID0gbV9vdXQu
YW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9u
LCBsYXN0TmV4dCk7CisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQucGhpKG1fb3V0LmRvdWJs
ZVR5cGUsIHBvd0RvdWJsZUludFJlc3VsdCwgcG93UmVzdWx0LCBwdXJlTmFuKSk7CisgICAgICAg
IH0KKyAgICB9CisKICAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoKSB7IHNldERvdWJsZShtX291
dC5kb3VibGVTcXJ0KGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlQXJpdGhGUm91bmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExPdXRwdXQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0
LmgKaW5kZXggYzcwZDhjZDk3NmE1NTllYjY4ZjNjNTAyZGY0Yjg5ZDI3MWMxYzcxNS4uYWY4MmNi
ZGQ2NjVhZjVmZGI2ZDA2MjVhOWIyY2MzYTJmZGFlZGY5YyAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTE91dHB1dC5oCkBAIC0xNzcsNiArMTc3LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0
dXJuIGNhbGwoZG91YmxlQ29zSW50cmluc2ljKCksIHZhbHVlKTsKICAgICB9CiAKKyAgICBMVmFs
dWUgZG91YmxlUG93KExWYWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIGNhbGwoZG91YmxlUG93SW50cmluc2ljKCksIHhPcGVyYW5kLCB5T3BlcmFu
ZCk7CisgICAgfQorCisgICAgTFZhbHVlIGRvdWJsZVBvd2koTFZhbHVlIHhPcGVyYW5kLCBMVmFs
dWUgeU9wZXJhbmQpCisgICAgeworICAgICAgICByZXR1cm4gY2FsbChkb3VibGVQb3dpSW50cmlu
c2ljKCksIHhPcGVyYW5kLCB5T3BlcmFuZCk7CisgICAgfQorCiAgICAgTFZhbHVlIGRvdWJsZVNx
cnQoTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgcmV0dXJuIGNhbGwoZG91YmxlU3FydElu
dHJpbnNpYygpLCB2YWx1ZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRp
b25zLmNwcAppbmRleCAyNDRiNGJlOWNjNmUxN2U4YWJlYzc3M2RkMDg3MTkxMTFjNDFkOTU3Li43
MGM1OWRhN2Y1NzgyYmYwYTgzY2JjMjQ3YmFhYzY0NDFkNGQxOGIxIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKQEAgLTEyMTMsNiArMTIxMyw1MiBAQCBT
bG93UGF0aFJldHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShFeGVjU3Rh
dGUqIGV4ZWMsIGludDMyX3QgYnl0ZQogfQogI2VuZGlmCiAKKyNpZiBQTEFURk9STShJT1MpICYm
IENQVShBUk1fVEhVTUIyKQorCitzdGF0aWMgZG91YmxlIGZkbGlibVBvdyhkb3VibGUgeCwgZG91
YmxlIHkpOworCitzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRGVub3JtYWwoZG91YmxlIHgp
Cit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNpZ25iaXQgPSAweDgwMDAwMDAwMDAwMDAw
MDBVTEw7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IG1pbk5vcm1hbCA9IDB4MDAwMTAwMDAw
MDAwMDAwMFVMTDsKKyAgICByZXR1cm4gKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgJiB+c2ln
bmJpdCkgLSAxIDwgbWluTm9ybWFsIC0gMTsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0VkZ2VDYXNlKGRvdWJsZSB4KQoreworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBzaWdu
Yml0ID0gMHg4MDAwMDAwMDAwMDAwMDAwVUxMOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBp
bmZpbml0eSA9IDB4N2ZmZmZmZmZmZmZmZmZmZlVMTDsKKyAgICByZXR1cm4gKGJpdHdpc2VfY2Fz
dDx1aW50NjRfdD4oeCkgJiB+c2lnbmJpdCkgLSAxID49IGluZmluaXR5IC0gMTsKK30KKworc3Rh
dGljIEFMV0FZU19JTkxJTkUgZG91YmxlIG1hdGhQb3dJbnRlcm5hbChkb3VibGUgeCwgZG91Ymxl
IHkpCit7CisgICAgaWYgKCFpc0Rlbm9ybWFsKHgpICYmICFpc0Rlbm9ybWFsKHkpKSB7CisgICAg
ICAgIGRvdWJsZSBsaWJtUmVzdWx0ID0gcG93KHgsIHkpOworICAgICAgICBpZiAobGlibVJlc3Vs
dCB8fCBpc0VkZ2VDYXNlKHgpIHx8IGlzRWRnZUNhc2UoeSkpCisgICAgICAgICAgICByZXR1cm4g
bGlibVJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIGZkbGlibVBvdyh4LCB5KTsKK30KKworI2Vs
c2UKKworQUxXQVlTX0lOTElORSBkb3VibGUgbWF0aFBvd0ludGVybmFsKGRvdWJsZSB4LCBkb3Vi
bGUgeSkKK3sKKyAgICByZXR1cm4gcG93KHgsIHkpOworfQorCisjZW5kaWYKKworZG91YmxlIEpT
Q19IT1NUX0NBTEwgb3BlcmF0aW9uTWF0aFBvdyhkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAg
aWYgKHN0ZDo6aXNuYW4oeSkpCisgICAgICAgIHJldHVybiBQTmFOOworICAgIGlmIChzdGQ6Omlz
aW5mKHkpICYmIGZhYnMoeCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIFBOYU47CisgICAgcmV0dXJu
IG1hdGhQb3dJbnRlcm5hbCh4LCB5KTsKK30KKwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dEJ5SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkQXJyYXlW
YWx1ZSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQogewogICAg
IFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0
aW9ucy5oCmluZGV4IDc2N2VhNWJiNTUyN2RlYzdkZDVlMTBkN2NjZmQyZDYyOTc1MTkzYTMuLmRh
NmEzZTQ3YmM0ODI2MjllOTQ1MmNiN2JmNDk4MjQwNzk0M2U5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yODEsNiArMjgxLDcgQEAgdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbkRlYnVnKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5B
TDsKICNpZiBFTkFCTEUoREZHX0pJVCkKIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvbk9wdGltaXplKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRFUk5BTDsKICNl
bmRpZgorZG91YmxlIEpTQ19IT1NUX0NBTEwgb3BlcmF0aW9uTWF0aFBvdyhkb3VibGUgeCwgZG91
YmxlIHkpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUlu
ZGV4KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7
CiAjaWYgVVNFKEpTVkFMVUU2NCkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRHZXR0
ZXJTZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIElkZW50aWZpZXIqLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKQEAgLTMzOSw2ICszNDAsNyBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVG9JbmRleFN0cmluZyhFeGVjU3RhdGUq
LCBpbnQzMl90KTsKIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblByb2Nlc3NUeXBlUHJv
ZmlsZXJMb2coRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogCisKIH0gLy8gZXh0ZXJuICJDIgog
CiBpbmxpbmUgUF9KSVRPcGVyYXRpb25fRUNsaSBvcGVyYXRpb25MaW5rRm9yKApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAppbmRleCA2NGE1YTdhNmRkN2Zj
YzFhMjE2ZTYzMTgxZTE0MTcxN2RmNjAzZDRiLi42YTk0MmNhNWY0YTdkYmNlZmU3MWMyYTRiNjMw
MGVmMTY4M2I5MzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9N
YXRoT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2Jq
ZWN0LmNwcApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUg
Ik1hdGhPYmplY3QuaCIKIAorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJM
b29rdXAuaCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCkBAIC0yNDIsNDMgKzI0Myw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwg
bWF0aFByb3RvRnVuY01pbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShqc051bWJlcihyZXN1bHQpKTsKIH0KIAotI2lmIFBMQVRGT1JNKElPUykgJiYgQ1BVKEFS
TV9USFVNQjIpCi0KLXN0YXRpYyBkb3VibGUgZmRsaWJtUG93KGRvdWJsZSB4LCBkb3VibGUgeSk7
Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEZW5vcm1hbChkb3VibGUgeCkKLXsKLSAg
ICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNpZ25iaXQgPSAweDgwMDAwMDAwMDAwMDAwMDBV
TEw7Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBtaW5Ob3JtYWwgPSAweDAwMDEwMDAw
MDAwMDAwMDBVTEw7Ci0gICAgICAgIHJldHVybiAoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSAm
IH5zaWduYml0KSAtIDEgPCBtaW5Ob3JtYWwgLSAxOwotfQotCi1zdGF0aWMgQUxXQVlTX0lOTElO
RSBib29sIGlzRWRnZUNhc2UoZG91YmxlIHgpCi17Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBzaWduYml0ID0gMHg4MDAwMDAwMDAwMDAwMDAwVUxMOwotICAgICAgICBzdGF0aWMgY29u
c3QgdWludDY0X3QgaW5maW5pdHkgPSAweDdmZmZmZmZmZmZmZmZmZmZVTEw7Ci0gICAgICAgIHJl
dHVybiAoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSAmIH5zaWduYml0KSAtIDEgPj0gaW5maW5p
dHkgLSAxOwotfQotCi1zdGF0aWMgQUxXQVlTX0lOTElORSBkb3VibGUgbWF0aFBvdyhkb3VibGUg
eCwgZG91YmxlIHkpCi17Ci0gICAgaWYgKCFpc0Rlbm9ybWFsKHgpICYmICFpc0Rlbm9ybWFsKHkp
KSB7Ci0gICAgICAgIGRvdWJsZSBsaWJtUmVzdWx0ID0gcG93KHgseSk7Ci0gICAgICAgIGlmIChs
aWJtUmVzdWx0IHx8IGlzRWRnZUNhc2UoeCkgfHwgaXNFZGdlQ2FzZSh5KSkKLSAgICAgICAgICAg
IHJldHVybiBsaWJtUmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gZmRsaWJtUG93KHgseSk7Ci19
Ci0KLSNlbHNlCi0KLUFMV0FZU19JTkxJTkUgZG91YmxlIG1hdGhQb3coZG91YmxlIHgsIGRvdWJs
ZSB5KQotewotICAgIHJldHVybiBwb3coeCwgeSk7Ci19Ci0KLSNlbmRpZgotCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVjKQogewog
ICAgIC8vIEVDTUEgMTUuOC4yLjEuMTMKQEAgLTI4NiwxMSArMjUwLDcgQEAgRW5jb2RlZEpTVmFs
dWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhlYykKICAgICBk
b3VibGUgYXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7CiAgICAgZG91Ymxl
IGFyZzIgPSBleGVjLT5hcmd1bWVudCgxKS50b051bWJlcihleGVjKTsKIAotICAgIGlmIChzdGQ6
OmlzbmFuKGFyZzIpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwot
ICAgIGlmIChzdGQ6OmlzaW5mKGFyZzIpICYmIGZhYnMoYXJnKSA9PSAxKQotICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIobWF0aFBvdyhhcmcsIGFyZzIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShKU1ZhbHVlKG9wZXJhdGlvbk1hdGhQb3coYXJnLCBhcmcyKSkpOwogfQogCiBFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy1i
YXNpY3MuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LWJh
c2ljcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi43YTY3NWU3NDNmYWQ5NTE4ZjM4Njc2N2E3Njg3YjE2N2Y0MzE5
MDI5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9tYXRoLXBvdy1iYXNpY3MuanMKQEAgLTAsMCArMSwyODYgQEAKK2Z1bmN0aW9uIHZhbHVlc0Fy
ZUNsb3NlKGEsIGIpIHsKKyAgICByZXR1cm4gTWF0aC5hYnMoYSAvIGIpIC0gMSA8IDFlLTEwOwor
fQorCisvLyBTb21lIHJhbmRvbSB2YWx1ZXMuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91Ymxl
MSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93
RG91YmxlRG91YmxlMSk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQxKHgsIHkpIHsKKyAg
ICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQxKTsK
KworZnVuY3Rpb24gdGVzdDEoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0
aFBvd0RvdWJsZURvdWJsZTEoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVz
dWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBt
YXRoUG93RG91YmxlRG91YmxlMSgiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsg
IiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZh
ciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytp
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50MSh4LCBpbnRlZ2VyWSk7
CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50MSgiICsgeCAr
ICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBj
bG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3QxKTsKK3Rlc3Qx
KDM3Ni43NjUyMjc2NDM3NzI5NiwgMTAuODE2OTkyMjYwNTE1NjksIDcuMzMzOTUxOTI5MTA5MjUy
ZSsyNywgNS43NjM3ODk4OTU3NTA4OWUrMjUpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91
YmxlMih4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRo
UG93RG91YmxlRG91YmxlMik7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQyKHgsIHkpIHsK
KyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQy
KTsKK2Z1bmN0aW9uIHRlc3QyKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1h
dGhQb3dEb3VibGVEb3VibGUyKHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJl
c3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwg
bWF0aFBvd0RvdWJsZURvdWJsZTIoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCAr
ICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2
YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsr
aSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDIoeCwgaW50ZWdlclkp
OworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDIoIiArIHgg
KyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUg
Y2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0Mik7Cit0ZXN0
MigzNzYuNzY1MjI3NjQzNzcyOTYsIC01LjgxNjk5MjI2MDUxNTY5LCAxLjAzNTE4MDMzMTE4NzU3
OWUtMTUsIDEuMzE3MTgyNDMxMDQwMDI2NWUtMTMpOworCitmdW5jdGlvbiBtYXRoUG93RG91Ymxl
RG91YmxlMyh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZSht
YXRoUG93RG91YmxlRG91YmxlMyk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQzKHgsIHkp
IHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJ
bnQzKTsKK2Z1bmN0aW9uIHRlc3QzKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IG1hdGhQb3dEb3VibGVEb3VibGUzKHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3Nl
KHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dCwgbWF0aFBvd0RvdWJsZURvdWJsZTMoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3Vs
dCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAg
ICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7
ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDMoeCwgaW50ZWdl
clkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAg
ICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDMoIiAr
IHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFs
dWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0Myk7Cit0
ZXN0MygtMzcuNjc2NTIyNzY0Mzc3Mjk2LCAxMC4wLCA1NzYzNzg5ODk1NzUwODkyLCA1NzYzNzg5
ODk1NzUwODkyKTsKKworLy8gRXhwb25lbnQgemVyby4KK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVE
b3VibGU0KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1h
dGhQb3dEb3VibGVEb3VibGU0KTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludDQoeCwgeSkg
eworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUlu
dDQpOworZnVuY3Rpb24gdGVzdDQoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
bWF0aFBvd0RvdWJsZURvdWJsZTQoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2Uo
cmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
LCBtYXRoUG93RG91YmxlRG91YmxlNCgiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0
ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAg
IHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsg
KytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50NCh4LCBpbnRlZ2Vy
WSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50NCgiICsg
eCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1
ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3Q0KTsKK3Rl
c3Q0KC0zNy42NzY1MjI3NjQzNzcyOTYsIDAsIDEsIDEpOworCisvLyBFeHBvbmVudCBtaW51cyB6
ZXJvLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTUoeCwgeSkgeworICAgIHJldHVybiBN
YXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZTUpOworCitmdW5j
dGlvbiBtYXRoUG93RG91YmxlSW50NSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkp
Cit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50NSk7CitmdW5jdGlvbiB0ZXN0NSh4LCB5LCBl
eHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsg
KytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlNSh4LCB5KTsK
KyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGU1KCIgKyB4
ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2Ug
dG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IG1hdGhQb3dEb3VibGVJbnQ1KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVD
bG9zZShyZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQsIG1hdGhQb3dEb3VibGVJbnQoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIg
KyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAg
ICB9Cit9Citub0lubGluZSh0ZXN0NSk7Cit0ZXN0NSgtMzcuNjc2NTIyNzY0Mzc3Mjk2LCAtMCwg
MSwgMSk7CisKKy8vIEV4cG9uZW50IDEuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlNih4
LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91
YmxlRG91YmxlNik7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ2KHgsIHkpIHsKKyAgICBy
ZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ2KTsKK2Z1
bmN0aW9uIHRlc3Q2KHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dE
b3VibGVEb3VibGU2KHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwg
ZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBv
d0RvdWJsZURvdWJsZTYoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhw
ZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50
ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDYoeCwgaW50ZWdlclkpOworICAg
ICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDYoIiArIHggKyAiLCAi
ICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2Ug
dG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0Nik7Cit0ZXN0NigtMzcu
Njc2NTIyNzY0Mzc3Mjk2LCAxLjAsIC0zNy42NzY1MjI3NjQzNzcyOTYsIC0zNy42NzY1MjI3NjQz
NzcyOTYpOworCisvLyBFeHBvbmVudCAtMS4KK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGU3
KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dE
b3VibGVEb3VibGU3KTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludDcoeCwgeSkgeworICAg
IHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludDcpOwor
ZnVuY3Rpb24gdGVzdDcoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBv
d0RvdWJsZURvdWJsZTcoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0
LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRo
UG93RG91YmxlRG91YmxlNygiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBl
eHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZhciBp
bnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlNyh4LCBpbnRlZ2VyWSk7
CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlNygiICsg
eCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1
ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3Q3KTsKK3Rl
c3Q2KC0zNy42NzY1MjI3NjQzNzcyOTYsIC0xLjAsIC0wLjAyNjU0MTcyNzQ5MDQ1NDI5NiwgLTAu
MDI2NTQxNzI3NDkwNDU0Mjk2KTsKKworLy8gTGV0J3Mgc3F1YXJlIHRoaW5ncy4KK2Z1bmN0aW9u
IG1hdGhQb3dEb3VibGVEb3VibGU4KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkK
K30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGU4KTsKKworZnVuY3Rpb24gbWF0aFBvd0Rv
dWJsZUludDgoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUo
bWF0aFBvd0RvdWJsZUludDgpOworZnVuY3Rpb24gdGVzdDgoeCwgeSwgZXhwZWN0ZWQxLCBleHBl
Y3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAg
ICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTgoeCwgeSk7CisgICAgICAgIGlmICgh
dmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlOCgiICsgeCArICIsICIgKyB5ICsg
IikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3Rl
ZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91Ymxl
SW50OCh4LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBl
eHBlY3RlZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93
RG91YmxlSW50OCgiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIg
ZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5s
aW5lKHRlc3Q4KTsKK3Rlc3Q3KC0zNy42NzY1MjI3NjQzNzcyOTYsIDIuMCwgMTQxOS41MjAzNjc2
MTQ2NDA3LCAxNDE5LjUyMDM2NzYxNDY0MDcpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91
YmxlOSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRo
UG93RG91YmxlRG91YmxlOSk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ5KHgsIHkpIHsK
KyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ5
KTsKK2Z1bmN0aW9uIHRlc3Q5KHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1h
dGhQb3dEb3VibGVEb3VibGU5KHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJl
c3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwg
bWF0aFBvd0RvdWJsZURvdWJsZTkoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCAr
ICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2
YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsr
aSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDkoeCwgaW50ZWdlclkp
OworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDkoIiArIHgg
KyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUg
Y2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0OSk7Cit0ZXN0
OCgzNy42NzY1MjI3NjQzNzcyOTYsIDIuMCwgMTQxOS41MjAzNjc2MTQ2NDA3LCAxNDE5LjUyMDM2
NzYxNDY0MDcpOworCisvLyBMZXQncyBjdWJlIHRoaW5ncy4KK2Z1bmN0aW9uIG1hdGhQb3dEb3Vi
bGVEb3VibGUxMCh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGlu
ZShtYXRoUG93RG91YmxlRG91YmxlMTApOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50MTAo
eCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0Rv
dWJsZUludDEwKTsKK2Z1bmN0aW9uIHRlc3QxMCh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikg
eworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlMTAoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVz
QXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlKCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIg
KyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAg
ICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnQxMCh4
LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3Rl
ZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91Ymxl
SW50KCIgKyB4ICsgIiwgIiArIGludGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3Rl
ZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDI7CisgICAgfQorfQorbm9JbmxpbmUodGVz
dDkpOwordGVzdDkoLTM3LjY3NjUyMjc2NDM3NzI5NiwgMy4wLCAtNTM0ODIuNTkxNDQ0OTMwMjM2
LCAtNTM0ODIuNTkxNDQ0OTMwMjM2KTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTEx
KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dE
b3VibGVEb3VibGUxMSk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQxMSh4LCB5KSB7Cisg
ICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50MTEp
OworZnVuY3Rpb24gdGVzdDExKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1h
dGhQb3dEb3VibGVEb3VibGUxMSh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShy
ZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQs
IG1hdGhQb3dEb3VibGVEb3VibGUoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCAr
ICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2
YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsr
aSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDExKHgsIGludGVnZXJZ
KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMikpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVJbnQoIiArIHgg
KyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUg
Y2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0MTApOwordGVz
dDEwKDM3LjY3NjUyMjc2NDM3NzI5NiwgMy4wLCA1MzQ4Mi41OTE0NDQ5MzAyMzYsIDUzNDgyLjU5
MTQ0NDkzMDIzNik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL21hdGgtcG93LWludGVnZXItZXhwb25lbnQtZmFzdHBhdGguanMgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LWludGVnZXItZXhwb25lbnQtZmFzdHBhdGgu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uMDFkNDhhN2FhYTNkNmM0MTk5MmFmYTk1N2M5YmRhMjUwNTM0Y2UxNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0
aC1wb3ctaW50ZWdlci1leHBvbmVudC1mYXN0cGF0aC5qcwpAQCAtMCwwICsxLDU2IEBACitmdW5j
dGlvbiB2YWx1ZXNBcmVDbG9zZShhLCBiKSB7CisgICAgcmV0dXJuIE1hdGguYWJzKGEgLyBiKSAt
IDEgPCAxZS0xMDsKK30KKworLy8gU21hbGwgZXhwb25lbnQgdmFsdWVzIGFyZSBoYW5kbGVkIHRo
cm91Z2ggYSBzaW1wbGVyIGlubGluZSBsb29wLiBUZXN0IHRoYXQgaXQgaXMgbm90IG9ic2VydmFi
bGUuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlVGVzdEV4cG9uZW50RmlmdHkoeCwgeSkg
eworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURv
dWJsZVRlc3RFeHBvbmVudEZpZnR5KTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludFRlc3RF
eHBvbmVudEZpZnR5KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5s
aW5lKG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25lbnRGaWZ0eSk7CitmdW5jdGlvbiB0ZXN0RXhw
b25lbnRGaWZ0eSh4LCB5LCBleHBlY3RlZCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlVGVz
dEV4cG9uZW50RmlmdHkoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0
LCBleHBlY3RlZCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgu
cG93KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIHZhbHVl
IGNsb3NlIHRvICIgKyBleHBlY3RlZDsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25lbnRGaWZ0eSh4LCBpbnRlZ2VyWSk7Cisg
ICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZCkpCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KCIgKyB4ICsgIiwgIiArIGludGVn
ZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCB2YWx1ZSBjbG9zZSB0byAiICsgZXhw
ZWN0ZWQ7CisgICAgfQorfQorbm9JbmxpbmUodGVzdEV4cG9uZW50RmlmdHkpOwordGVzdEV4cG9u
ZW50RmlmdHkoNTMuNzA5MDExNjQxMzMxMDIsIDUwLjAsIDMuMTc5NDk0MTE4MTIwMTQ0ZSs4Nik7
Cit0ZXN0RXhwb25lbnRGaWZ0eSg1My43MDkwMTE2NDEzMzEwMiwgLTEwLjAsIDUuMDA2NDMyODQy
NjIxMTkyZS0xOCk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGVUZXN0RXhwb25lbnRU
ZW5UaG91c2FuZHMoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9Jbmxp
bmUobWF0aFBvd0RvdWJsZURvdWJsZVRlc3RFeHBvbmVudFRlblRob3VzYW5kcyk7CisKK2Z1bmN0
aW9uIG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25lbnRUZW5UaG91c2FuZHMoeCwgeSkgeworICAg
IHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludFRlc3RF
eHBvbmVudFRlblRob3VzYW5kcyk7CitmdW5jdGlvbiB0ZXN0RXhwb25lbnRUZW5UaG91c2FuZHMo
eCwgeSwgZXhwZWN0ZWQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZVRlc3RFeHBvbmVudFRl
blRob3VzYW5kcyh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4
cGVjdGVkKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3co
IiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgdmFsdWUgY2xv
c2UgdG8gIiArIGV4cGVjdGVkOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gbWF0aFBvd0RvdWJsZUludFRlc3RFeHBvbmVudFRlblRob3VzYW5kcyh4LCBpbnRlZ2VyWSk7
CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZCkpCisgICAgICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KCIgKyB4ICsgIiwgIiArIGlu
dGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCB2YWx1ZSBjbG9zZSB0byAiICsg
ZXhwZWN0ZWQ7CisgICAgfQorfQorbm9JbmxpbmUodGVzdEV4cG9uZW50VGVuVGhvdXNhbmRzKTsK
K3Rlc3RFeHBvbmVudFRlblRob3VzYW5kcygxLjAwMSwgMTAwMDAuMCwgMjE5MTYuNjgxMzM5MDQ4
MzczKTsKK3Rlc3RFeHBvbmVudFRlblRob3VzYW5kcygxLjAwMSwgLTEuMCwgMC45OTkwMDA5OTkw
MDA5OTkxKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LW5hbi1iZWhhdmlvcnMuanMgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LW5hbi1iZWhhdmlvcnMu
anMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZmRmYzg4NDBhOWE5NGZhOTUwZmZiMDgwZDNiZTI0YjMzNjI0ZmU4OAot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0
aC1wb3ctbmFuLWJlaGF2aW9ycy5qcwpAQCAtMCwwICsxLDg1IEBACisvLyBJZiB5IGlzIE5hTiwg
dGhlIHJlc3VsdCBpcyBOYU4uCitmdW5jdGlvbiB0ZXN0SW50ZWdlckJhc2VXaXRoTmFORXhwb25l
bnQoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IE1hdGgucG93KDUsIE5hTik7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coNSwgTmFO
KSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsg
KytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdyhpLCBOYU4pOworICAgICAgICBp
ZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQs
IE1hdGgucG93KGksIE5hTikgPSAiICsgcmVzdWx0ICsgIiB3aXRoIGkgPSAiICsgaTsKKyAgICB9
Cit9Citub0lubGluZSh0ZXN0SW50ZWdlckJhc2VXaXRoTmFORXhwb25lbnQpOwordGVzdEludGVn
ZXJCYXNlV2l0aE5hTkV4cG9uZW50KCk7CisKK2Z1bmN0aW9uIHRlc3RGbG9hdGluZ1BvaW50QmFz
ZVdpdGhOYU5FeHBvbmVudCgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsr
aSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coNS41LCBOYU4pOworICAgICAgICBp
ZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQs
IE1hdGgucG93KDUuNSwgTmFOKSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdyhp
ICsgMSwgTmFOKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdyhpICsgMC41LCBOYU4pID0gIiArIHJlc3Vs
dCArICIgd2l0aCBpID0gIiArIGk7CisgICAgfQorfQorbm9JbmxpbmUodGVzdEZsb2F0aW5nUG9p
bnRCYXNlV2l0aE5hTkV4cG9uZW50KTsKK3Rlc3RGbG9hdGluZ1BvaW50QmFzZVdpdGhOYU5FeHBv
bmVudCgpOworCisvLyBJZiB5IGlzICswLCB0aGUgcmVzdWx0IGlzIDEsIGV2ZW4gaWYgeCBpcyBO
YU4uCisvLyBJZiB5IGlzIOKIkjAsIHRoZSByZXN1bHQgaXMgMSwgZXZlbiBpZiB4IGlzIE5hTi4K
Ky8vIElmIHggaXMgTmFOIGFuZCB5IGlzIG5vbnplcm8sIHRoZSByZXN1bHQgaXMgTmFOLgorZnVu
Y3Rpb24gdGVzdE5hTkJhc2UoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KE5hTiwgaSArIDEpOworICAgICAg
ICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQsIE1hdGgucG93KE5hTiwgaSArIDEpID0gIiArIHJlc3VsdCArICIgd2l0aCBpID0gIiArIGk7
CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBNYXRoLnBvdyhOYU4sIGkgKyAxLjUpOworICAgICAgICBpZiAoIWlzTmFO
KHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93
KE5hTiwgaSArIDEuNSkgPSAiICsgcmVzdWx0ICsgIiB3aXRoIGkgPSAiICsgaTsKKyAgICB9Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IE1hdGgucG93KE5hTiwgMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDEpCisgICAgICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KE5hTiwgMCkgPSAiICsgcmVz
dWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coTmFOLCAtMCk7CisgICAgICAgIGlmIChyZXN1bHQg
IT09IDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KE5h
TiwgLTApID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0TmFOQmFzZSk7Cit0
ZXN0TmFOQmFzZSgpOworCisvLyBJZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyAr4oieLCB0aGUgcmVz
dWx0IGlzIE5hTi4KKy8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzIOKIkuKIniwgdGhlIHJlc3Vs
dCBpcyBOYU4uCitmdW5jdGlvbiBpbmZpbml0ZUV4cG9uZW50cygpIHsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3co
MSwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQp
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygxLCBOdW1i
ZXIuUE9TSVRJVkVfSU5GSU5JVFkpID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93
KC0xLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOworICAgICAgICBpZiAoIWlzTmFOKHJlc3Vs
dCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KC0xLCBO
dW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgu
cG93KDEsIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVz
dWx0KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coMSwg
TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRo
LnBvdygtMSwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKTsKKyAgICAgICAgaWYgKCFpc05hTihy
ZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygt
MSwgTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZKSA9ICIgKyByZXN1bHQ7CisgICAgfQorfQorbm9J
bmxpbmUoaW5maW5pdGVFeHBvbmVudHMpOworaW5maW5pdGVFeHBvbmVudHMoKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctd2l0aC1jb25z
dGFudHMuanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LXdp
dGgtY29uc3RhbnRzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEyYTAyZGM0MzhkYzA2MjJjNDVhMDhiZmZjOTQ1
YzA4NThiY2Q5YTQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL21hdGgtcG93LXdpdGgtY29uc3RhbnRzLmpzCkBAIC0wLDAgKzEsMTE1IEBACitm
dW5jdGlvbiBleHBvbmVudElzWmVybyh4KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIDApOwor
fQorbm9JbmxpbmUoZXhwb25lbnRJc1plcm8pOworCitmdW5jdGlvbiB0ZXN0RXhwb25lbnRJc1pl
cm8oKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDAwOyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IGV4cG9uZW50SXNaZXJvKDUpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAx
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiB6ZXJvRXhwb25lbnQoNSkgc2hvdWxkIGJlIDEs
IHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAw
MDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBleHBvbmVudElzWmVybyg1LjUpOworICAg
ICAgICBpZiAocmVzdWx0ICE9PSAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiB6ZXJvRXhw
b25lbnQoNS41KSBzaG91bGQgYmUgMSwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Cit0ZXN0
RXhwb25lbnRJc1plcm8oKTsKKworCitmdW5jdGlvbiBleHBvbmVudElzT25lKHgpIHsKKyAgICBy
ZXR1cm4gTWF0aC5wb3coeCwgMSk7Cit9Citub0lubGluZShleHBvbmVudElzT25lKTsKKworZnVu
Y3Rpb24gdGVzdEV4cG9uZW50SXNPbmUoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGV4cG9uZW50SXNPbmUoNSk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09IDUpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGV4cG9uZW50
SXNPbmUoNSkgc2hvdWxkIGJlIDUsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBleHBv
bmVudElzT25lKDUuNSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDUuNSkKKyAgICAgICAgICAg
IHRocm93ICJFcnJvcjogZXhwb25lbnRJc09uZSg1LjUpIHNob3VsZCBiZSA1LjUsIHdhcyA9ICIg
KyByZXN1bHQ7CisgICAgfQorfQordGVzdEV4cG9uZW50SXNPbmUoKTsKKworCitmdW5jdGlvbiBw
b3dVc2VkQXNTcXJ0KHgpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgMC41KTsKK30KK25vSW5s
aW5lKHBvd1VzZWRBc1NxcnQpOworCitmdW5jdGlvbiB0ZXN0UG93VXNlZEFzU3FydCgpIHsKKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gcG93VXNlZEFzU3FydCg0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gTWF0aC5zcXJ0KDQp
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBwb3dVc2VkQXNTcXJ0KDQpIHNob3VsZCBiZSAy
LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
MDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gcG93VXNlZEFzU3FydCg0LjQpOworICAg
ICAgICBpZiAocmVzdWx0ICE9PSBNYXRoLnNxcnQoNC40KSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogcG93VXNlZEFzU3FydCg0KSBzaG91bGQgYmUgIiArIE1hdGguc3FydCg0LjQpICsgIiwg
d2FzID0gIiArIHJlc3VsdDsKKyAgICB9CisKK30KK3Rlc3RQb3dVc2VkQXNTcXJ0KCk7CisKKwor
ZnVuY3Rpb24gaW50SW50Q29uc3RhbnRzU21hbGxOdW1iZXJzKCkgeworICAgIHJldHVybiBNYXRo
LnBvdyg0MiwgMyk7Cit9CitmdW5jdGlvbiBpbnRJbnRDb25zdGFudHNMYXJnZU51bWJlcnMoKSB7
CisgICAgLy8gVGhlIHJlc3VsdCBkb2VzIG5vdCBmaXQgaW4gYSBpbnRlZ2VyLgorICAgIHJldHVy
biBNYXRoLnBvdyg0MiwgNDIpOworfQorZnVuY3Rpb24gaW50SW50U21hbGxDb25zdGFudHMoKSB7
CisgICAgcmV0dXJuIE1hdGgucG93KDQyLCAzKTsKK30KK2Z1bmN0aW9uIGludERvdWJsZUNvbnN0
YW50cygpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coMTQsIDQyLjUpOworfQorZnVuY3Rpb24gZG91
YmxlRG91YmxlQ29uc3RhbnRzKCkgeworICAgIHJldHVybiBNYXRoLnBvdygxMy41LCA0Mi41KTsK
K30KK2Z1bmN0aW9uIGRvdWJsZUludENvbnN0YW50cygpIHsKKyAgICByZXR1cm4gTWF0aC5wb3co
MTMuNSwgNTIpOworfQorbm9JbmxpbmUoaW50SW50Q29uc3RhbnRzU21hbGxOdW1iZXJzKTsKK25v
SW5saW5lKGludEludENvbnN0YW50c0xhcmdlTnVtYmVycyk7Citub0lubGluZShpbnREb3VibGVD
b25zdGFudHMpOworbm9JbmxpbmUoZG91YmxlRG91YmxlQ29uc3RhbnRzKTsKK25vSW5saW5lKGRv
dWJsZUludENvbnN0YW50cyk7CisKK2Z1bmN0aW9uIHRlc3RCYXNlQW5kRXhwb25lbnRDb25zdGFu
dExpdGVyYWxzKCkKK3sKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gaW50SW50Q29uc3RhbnRzU21hbGxOdW1iZXJzKCk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09IDc0MDg4KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBpbnRJ
bnRDb25zdGFudHNTbWFsbE51bWJlcnMoKSBzaG91bGQgYmUgNzQwODgsIHdhcyA9ICIgKyByZXN1
bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAg
ICAgIHZhciByZXN1bHQgPSBpbnRJbnRDb25zdGFudHNMYXJnZU51bWJlcnMoKTsKKyAgICAgICAg
aWYgKHJlc3VsdCAhPT0gMS41MDEzMDkzNzU0NTI5NjU2ZSs2OCkKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogaW50SW50Q29uc3RhbnRzTGFyZ2VOdW1iZXJzKCkgc2hvdWxkIGJlIDEuNTAxMzA5
Mzc1NDUyOTY1NmUrNjgsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBpbnREb3VibGVD
b25zdGFudHMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNS4xMzM4MzAzODgyMDE1NzY1ZSs0
OCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogaW50RG91YmxlQ29uc3RhbnRzKCkgc2hvdWxk
IGJlIDUuMTMzODMwMzg4MjAxNTc2NWUrNDgsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBkb3VibGVEb3VibGVDb25zdGFudHMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMS4wOTQ0
MjI4NzI5NjQ3ODI5ZSs0OCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogZG91YmxlRG91Ymxl
Q29uc3RhbnRzKCkgc2hvdWxkIGJlIDEuMDk0NDIyODcyOTY0NzgyOWUrNDgsIHdhcyA9ICIgKyBy
ZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDsgKytpKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBkb3VibGVJbnRDb25zdGFudHMoKTsKKyAgICAgICAgaWYgKHJl
c3VsdCAhPT0gNS45ODkwMjI3MzUzMTExNThlKzU4KQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBkb3VibGVJbnRDb25zdGFudHMoKSBzaG91bGQgYmUgNS45ODkwMjI3MzUzMTExNThlKzU4LCB3
YXMgPSAiICsgcmVzdWx0OworICAgIH0KK30KK3Rlc3RCYXNlQW5kRXhwb25lbnRDb25zdGFudExp
dGVyYWxzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246560</attachid>
            <date>2015-02-13 17:30:45 -0800</date>
            <delta_ts>2015-02-13 18:16:47 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141540-20150213173043.patch</filename>
            <type>text/plain</type>
            <size>51605</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NmEwMjBlM2UwY2E1OGM5YTIxMjkwMWE3MzdjYTVjMWIwN2YxODUwLi5hMDdjMmI3YjdlNzk0NzRi
YTdkMzg3ODUxNWU0NmNiMjczY2ZiMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxNS0wMi0xMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBERkcgbm9kZSBmb3IgdGhlIFBvdyBJbnRyaW5zaWNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1NDAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBERkcg
Tm9kZSBmb3IgUG93SW50cmluc2ljLiBUaGlzIHBhdGNoIGNvdmVycyB0aGUgYmFzaWMgY2FzZXMK
KyAgICAgICAgbmVlZCB0byBhdm9pZCBtYXNzaXZlIHJlZ3Jlc3Npb24uIEkgd2lsbCBpdGVyYXRl
IG92ZXIgdGhlIG5vZGUgdG8gY292ZXIKKyAgICAgICAgdGhlIG1pc3NpbmcgdHlwZXMuCisKKyAg
ICAgICAgV2l0aCB0aGlzIHBhdGNoIEkgZ2V0IHRoZSBmb2xsb3dpbmcgcHJvZ3Jlc3Npb25zIG9u
IGJlbmNobWFya3M6CisgICAgICAgIC1Mb25nU3BpZGVyJ3MgbWF0aC1wYXJ0aWFsLXN1bXM6ICs1
JS4KKyAgICAgICAgLUtyYWtlbidzIGltYWdpbmctZGFya3Jvb206ICsxNyUKKyAgICAgICAgLUFz
bUJlbmNoJ3MgY3JheS5jOiArNi42JQorICAgICAgICAtQ29tcHJlc3Npb25CZW5jaDogKzIuMiUg
Z2xvYmFsbHkuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICBDb3ZlciBhIGNvdXBsZSBvZiB0cml2aWFs
IGNhc2VzOgorICAgICAgICAtSWYgdGhlIGV4cG9uZW50IGlzIHplcm8sIHRoZSByZXN1bHQgaXMg
YWx3YXlzIG9uZSwgcmVnYXJkbGVzcyBvZiB0aGUgYmFzZS4KKyAgICAgICAgLUlmIGJvdGggYXJn
dW1lbnRzIGFyZSBjb25zdGFudHMsIGNvbXB1dGUgdGhlIHJlc3VsdCBhdCBjb21waWxlIHRpbWUu
CisKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKworICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICBXZSBvbmx5IHN1cHBvcnQgMiBiYXNpYyBjYXNlcyBhdCB0
aGlzIHRpbWU6CisgICAgICAgIC1NYXRoLnBvdyhkb3VibGUsIGludCkKKyAgICAgICAgLU1hdGgu
cG93KGRvdWJsZSwgZG91YmxlKS4KKworICAgICAgICBJJ2xsIGNvdmVyIE1hdGgucG93KGludCwg
aW50KSBpbiBhIGZvbGxvdyB1cC4KKworICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvQXJpdGhTcXJ0KToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjphcml0aE5vZGVGbGFncyk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6ZG9Eb3VibGVWb3Rpbmcp
OgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhQb3cpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhQb3cp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmRvdWJsZVBvdyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVQb3dpKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpt
YXRoUHJvdG9GdW5jUG93KToKKyAgICAgICAgKEpTQzo6aXNEZW5vcm1hbCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OmlzRWRnZUNhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjptYXRoUG93
KTogRGVsZXRlZC4KKworICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy1iYXNpY3MuanM6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy1pbnRlZ2VyLWV4cG9uZW50
LWZhc3RwYXRoLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbWF0aC1wb3ctbmFu
LWJlaGF2aW9ycy5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL21hdGgtcG93LXdp
dGgtY29uc3RhbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgU3RhcnQgc29tZSBiYXNpYyB0ZXN0aW5n
IG9mIE1hdGgucG93KCkuCisgICAgICAgIER1ZSB0byB0aGUgdmFyaW91cyB0cmFuc2Zvcm0sIHRo
ZSB2YWx1ZSBjaGFuZ2Ugd2hlbiB0aGUgY29kZSB0aWVycyB1cCwKKyAgICAgICAgSSBjb3ZlcmVk
IHRoaXMgYnkgY2hlY2tpbmcgZm9yIGFwcHJveGltYXRlIHZhbHVlcy4KKwogMjAxNS0wMi0xMyAg
QmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBBcml0aFNx
cnQgc2hvdWxkIG5vdCBiZSBjb25kaXRpb25hbCBvbiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZDdiNWIwZjcyOTQ1ZWQ4MjYxZmE0NTA1N2RiYzE2Zjc0
NzRmODQxNC4uNmFkOTgyNDk2NWMyYzRmOGFlM2E2Njk2NzFhMTAwMGYxYWMwZjU5NiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5s
aW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50
ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0dGVy
U2V0dGVyLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIk9wZXJhdGlv
bnMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0
LmgiCkBAIC03MTgsNiArNzE5LDI0IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQorCisgICAgY2FzZSBBcml0aFBvdzogeworICAgICAg
ICBKU1ZhbHVlIGNoaWxkWSA9IGZvck5vZGUobm9kZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAg
ICAgIGlmIChjaGlsZFkgJiYgY2hpbGRZLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgIGlmICgh
Y2hpbGRZLmFzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBq
c0RvdWJsZU51bWJlcigxKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIEpTVmFsdWUgY2hpbGRYID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
dmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChjaGlsZFggJiYgY2hpbGRYLmlzTnVtYmVyKCkpIHsK
KyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihvcGVyYXRp
b25NYXRoUG93KGNoaWxkWC5hc051bWJlcigpLCBjaGlsZFkuYXNOdW1iZXIoKSkpKTsKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91YmxlVW5hcnlPcChmb3JOb2RlKG5vZGUtPmNoaWxk
MSgpKS5tX3R5cGUpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgICAgICAgICAgCiAgICAg
Y2FzZSBBcml0aFNxcnQ6IHsKICAgICAgICAgSlNWYWx1ZSBjaGlsZCA9IGZvck5vZGUobm9kZS0+
Y2hpbGQxKCkpLnZhbHVlKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGI4MjM3ZWFmZWNiYTMyZjQwYmRmYzk0Mjc5NjQ2MWEwZDFj
ZGE4NTcuLjg1ZTJhMWM3MmU1NGM0MTJmOTlhNDdhNWI0ZmM3Y2YwMTRmYmQyMTUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCkBAIC0xNjg0
LDYgKzE2ODQsMTggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludCBy
ZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKICAgICAgICAgfQogICAgIH0KKworICAgIGNhc2UgUG93SW50cmluc2ljOiB7Cisg
ICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA8IDMpIHsKKyAgICAgICAgICAg
IC8vIE1hdGgucG93KCkgYW5kIE1hdGgucG93KHgpIHJldHVybiBOYU4uCisgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEpTQ29uc3RhbnQs
IE9wSW5mbyhtX2NvbnN0YW50TmFOKSkpOworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIH0KKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHhPcGVyYW5kID0gdmlydHVhbFJlZ2lzdGVy
Rm9yQXJndW1lbnQoMSwgcmVnaXN0ZXJPZmZzZXQpOworICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
eU9wZXJhbmQgPSB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudCgyLCByZWdpc3Rlck9mZnNldCk7
CisgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIocmVzdWx0T3BlcmFuZCksIGFkZFRvR3JhcGgo
QXJpdGhQb3csIGdldCh4T3BlcmFuZCksIGdldCh5T3BlcmFuZCkpKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQogICAgICAgICAKICAgICBjYXNlIEFycmF5UHVzaEludHJpbnNpYzogewog
ICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgIT0gMikKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKaW5kZXggYWM2YjhmNzkyYmMzYjQyNWU1YjRj
OTM4MjliYzFiOGVhZTZiYTRkOC4uZGNkYjdkYjQ4NDY2ZjllMzY1Zjk5Yjg5ZDI3OTdkNWRhMWE0
Y2ZmYiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTEy
Miw2ICsxMjIsNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlLCBj
b25zdCBSZWFkRnVuY3RvciYgcmVhZCwgY29uc3QgV3JpdGVGdQogICAgIGNhc2UgQXJpdGhBYnM6
CiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNlIEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhQ
b3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgY2FzZSBBcml0aEZSb3VuZDoKICAgICBjYXNl
IEFyaXRoU2luOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IGM2
ZmVhZmRkM2Q4ZWU3MGQ4YjBkNGY2NGVkOGQyY2M2NjM1M2RjMTYuLjVkY2FkNDNiY2E3ZjEwZmI0
NGVmYjhmMTExN2QzY2Y0ODZlOTRjYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRG9lc0dDLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rv
ZXNHQy5jcHAKQEAgLTgxLDYgKzgxLDcgQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2Rl
KiBub2RlKQogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aE1pbjoKICAgICBjYXNl
IEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAg
Y2FzZSBBcml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoU2luOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKaW5kZXggZTMxYTU0ZDNlM2QyMjA5ZmY1OTg3ZGEx
MTc3Y2IzMTg0ZWMwOTU5Ni4uYzBmZTU1ZGU4ZWI4N2Q5OGNjMTkzNzdiYjhlMTFkN2ZjN2E5OTkx
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCkBAIC0z
MzcsNiArMzM3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9k
ZVJlc3VsdERvdWJsZSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCisgICAgICAg
IGNhc2UgQXJpdGhQb3c6IHsKKyAgICAgICAgICAgIG5vZGUtPnNldFJlc3VsdChOb2RlUmVzdWx0
RG91YmxlKTsKKyAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDIoKS0+c2hvdWxkU3BlY3VsYXRl
SW50MzIoKSkgeworICAgICAgICAgICAgICAgIGZpeERvdWJsZU9yQm9vbGVhbkVkZ2Uobm9kZS0+
Y2hpbGQxKCkpOworICAgICAgICAgICAgICAgIGZpeEludE9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hp
bGQyKCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmaXhEb3VibGVPckJvb2xlYW5FZGdlKG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgICAg
IGZpeERvdWJsZU9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hpbGQyKCkpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAgICBjYXNlIEFyaXRoU3FydDoKICAg
ICAgICAgY2FzZSBBcml0aEZSb3VuZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKaW5k
ZXggYmZmYjg2NjBjZGQwMTA3NmRmNzEzM2ExMmNmM2JiMWJmMWFhZGU3YS4uMjcxOGI3YjYxODIz
MDcyN2E4ZGQyNzQ5OTNiMmY3ZDM5ZGU4NWU5MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdO
b2RlLmgKQEAgLTU2NSw2ICs1NjUsMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBBU1NFUlQo
bV9vcCA9PSBUb1ByaW1pdGl2ZSk7CiAgICAgICAgIG1fb3AgPSBUb1N0cmluZzsKICAgICB9CisK
KyAgICB2b2lkIGNvbnZlcnRUb0FyaXRoU3FydCgpCisgICAgeworICAgICAgICBBU1NFUlQobV9v
cCA9PSBBcml0aFBvdyk7CisgICAgICAgIGNoaWxkMigpID0gRWRnZSgpOworICAgICAgICBtX29w
ID0gQXJpdGhTcXJ0OworICAgIH0KICAgICAKICAgICBKU1ZhbHVlIGFzSlNWYWx1ZSgpCiAgICAg
ewpAQCAtNzc1LDcgKzc4Miw3IEBAIHN0cnVjdCBOb2RlIHsKICAgICBOb2RlRmxhZ3MgYXJpdGhO
b2RlRmxhZ3MoKQogICAgIHsKICAgICAgICAgTm9kZUZsYWdzIHJlc3VsdCA9IG1fZmxhZ3MgJiBO
b2RlQXJpdGhGbGFnc01hc2s7Ci0gICAgICAgIGlmIChvcCgpID09IEFyaXRoTXVsIHx8IG9wKCkg
PT0gQXJpdGhEaXYgfHwgb3AoKSA9PSBBcml0aE1vZCB8fCBvcCgpID09IEFyaXRoTmVnYXRlIHx8
IG9wKCkgPT0gRG91YmxlQXNJbnQzMikKKyAgICAgICAgaWYgKG9wKCkgPT0gQXJpdGhNdWwgfHwg
b3AoKSA9PSBBcml0aERpdiB8fCBvcCgpID09IEFyaXRoTW9kIHx8IG9wKCkgPT0gQXJpdGhOZWdh
dGUgfHwgb3AoKSA9PSBBcml0aFBvdyB8fCBvcCgpID09IERvdWJsZUFzSW50MzIpCiAgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgICByZXR1cm4gcmVzdWx0ICYgfk5vZGVCeXRlY29k
ZU5lZWRzTmVnWmVybzsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBl
LmgKaW5kZXggNjVjYjM5OWYxYjA1ZDFlYTdiNmE1OGE1YTI2NmU5NzFmOWNkNjkyMC4uOGEwZWE4
MWE2MmRiZGE1NTBlOTNmYmYxYzgzOTYxNmRjMjg2YzVlYiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHTm9kZVR5cGUuaApAQCAtMTM0LDYgKzEzNCw3IEBAIG5hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhBcml0aE1pbiwgTm9kZVJlc3VsdE51bWJlcikgXAog
ICAgIG1hY3JvKEFyaXRoTWF4LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhG
Um91bmQsIE5vZGVSZXN1bHROdW1iZXIpIFwKKyAgICBtYWNybyhBcml0aFBvdywgTm9kZVJlc3Vs
dE51bWJlcikgXAogICAgIG1hY3JvKEFyaXRoU3FydCwgTm9kZVJlc3VsdE51bWJlcikgXAogICAg
IG1hY3JvKEFyaXRoU2luLCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhDb3Ms
IE5vZGVSZXN1bHROdW1iZXIpIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKaW5kZXggZDFhNmU0ZGNk
M2VkYWViNjczYWFjMjRjZThkMTM2NWI2OTY5OTllYS4uZTBjNTQ0NGI3OGVkMzhlMWY4M2NmOTQ0
YjQxMjg0NTllMTE0MTdhMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKQEAgLTMyMSw3ICszMjEs
OCBAQCBwcml2YXRlOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgICAgIAorCisgICAgICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgICAgIGNhc2Ug
QXJpdGhTcXJ0OgogICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgogICAgICAgICBjYXNlIEFyaXRo
U2luOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAppbmRl
eCA4ZThhZTA3N2Q2M2IwZTYwMGU2ODY2ZGNhYTI3MWVmYWJjODczNzgxLi5jODQ1MTNhZDhhN2Jj
ODcyYzZiMTE3NDBkNzNkNmY5NWI5NzQ4OWZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaApAQCAtMTUwLDYgKzE1MCw3IEBAIGJvb2wgc2FmZVRvRXhl
Y3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkK
ICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1h
eDoKKyAgICBjYXNlIEFyaXRoUG93OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNhc2UgQXJp
dGhGUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXggMzhlNjYxNzFkNDYwNjZlYTYzMDdiOGQ0
MzU3Mzc3ZTc2Yzk5Mjc4YS4uNzQ3ODg2NTQ2OTM4MGQ5M2IyMDZiNjFhZDA0MzgyNWVlZjg0ZDQx
YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5j
cHAKQEAgLTM1NjAsNiArMzU2MCw5MiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJp
dGhTcXJ0KE5vZGUqIG5vZGUpCiAgICAgfQogfQogCisvLyBGb3Igc21hbGwgcG9zaXRpdmUgaW50
ZWdlcnMgLCBpdCBpcyB3b3J0aCBkb2luZyBhIHRpbnkgaW5saW5lIGxvb3AgdG8gZXhwb25lbnRp
YXRlIHRoZSBiYXNlLgorLy8gRXZlcnkgcmVnaXN0ZXIgaXMgY2xvYmJlcmVkIGJ5IHRoaXMgaGVs
cGVyLgorc3RhdGljIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGNvbXBpbGVBcml0aFBvd0ludGVnZXJG
YXN0UGF0aChKSVRDb21waWxlciYgYXNzZW1ibGVyLCBGUFJSZWcgeE9wZXJhbmQsIEdQUlJlZyB5
T3BlcmFuZCwgRlBSUmVnIHJlc3VsdCkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qg
c2tpcEZhc3RQYXRoOworICAgIHNraXBGYXN0UGF0aC5hcHBlbmQoYXNzZW1ibGVyLmJyYW5jaDMy
KE1hY3JvQXNzZW1ibGVyOjpMZXNzVGhhbiwgeU9wZXJhbmQsIE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tMzIoMCkpKTsKKyAgICBza2lwRmFzdFBhdGguYXBwZW5kKGFzc2VtYmxlci5icmFuY2gz
MihNYWNyb0Fzc2VtYmxlcjo6R3JlYXRlclRoYW4sIHlPcGVyYW5kLCBNYWNyb0Fzc2VtYmxlcjo6
VHJ1c3RlZEltbTMyKDEwMDApKSk7CisKKyAgICBzdGF0aWMgY29uc3QgZG91YmxlIG9uZUNvbnN0
YW50ID0gMS4wOworICAgIGFzc2VtYmxlci5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKCZvbmVDb25zdGFudCksIHJlc3VsdCk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWwgc3RhcnRMb29wKGFzc2VtYmxlci5sYWJlbCgpKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6
SnVtcCBleHBvbmVudElzRXZlbiA9IGFzc2VtYmxlci5icmFuY2hUZXN0MzIoTWFjcm9Bc3NlbWJs
ZXI6Olplcm8sIHlPcGVyYW5kLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKDEpKTsKKyAg
ICBhc3NlbWJsZXIubXVsRG91YmxlKHhPcGVyYW5kLCByZXN1bHQpOworICAgIGV4cG9uZW50SXNF
dmVuLmxpbmsoJmFzc2VtYmxlcik7CisgICAgYXNzZW1ibGVyLm11bERvdWJsZSh4T3BlcmFuZCwg
eE9wZXJhbmQpOworICAgIGFzc2VtYmxlci5yc2hpZnQzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3Rl
ZEltbTMyKDEpLCB5T3BlcmFuZCk7CisgICAgYXNzZW1ibGVyLmJyYW5jaFRlc3QzMihNYWNyb0Fz
c2VtYmxlcjo6Tm9uWmVybywgeU9wZXJhbmQpLmxpbmtUbyhzdGFydExvb3AsICZhc3NlbWJsZXIp
OworCisgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2tpcFNsb3dQYXRoID0gYXNzZW1ibGVyLmp1
bXAoKTsKKyAgICBza2lwRmFzdFBhdGgubGluaygmYXNzZW1ibGVyKTsKKworICAgIHJldHVybiBz
a2lwU2xvd1BhdGg7Cit9CisKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVBcml0aFBvdyhO
b2RlKiBub2RlKQoreworICAgIGlmIChub2RlLT5jaGlsZDIoKS51c2VLaW5kKCkgPT0gSW50MzJV
c2UpIHsKKyAgICAgICAgU3BlY3VsYXRlRG91YmxlT3BlcmFuZCB4T3BlcmFuZCh0aGlzLCBub2Rl
LT5jaGlsZDEoKSk7CisgICAgICAgIFNwZWN1bGF0ZUludDMyT3BlcmFuZCB5T3BlcmFuZCh0aGlz
LCBub2RlLT5jaGlsZDIoKSk7CisgICAgICAgIEZQUlJlZyB4T3BlcmFuZGZwciA9IHhPcGVyYW5k
LmZwcigpOworICAgICAgICBHUFJSZWcgeU9wZXJhbmRHcHIgPSB5T3BlcmFuZC5ncHIoKTsKKyAg
ICAgICAgRlBSVGVtcG9yYXJ5IHlPcGVyYW5kZnByKHRoaXMpOworCisgICAgICAgIGZsdXNoUmVn
aXN0ZXJzKCk7CisKKyAgICAgICAgRlBSUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgRlBS
UmVnIHJlc3VsdEZwciA9IHJlc3VsdC5mcHIoKTsKKworICAgICAgICBGUFJUZW1wb3JhcnkgeE9w
ZXJhbmRDb3B5KHRoaXMpOworICAgICAgICBGUFJSZWcgeE9wZXJhbmRDb3B5RnByID0geE9wZXJh
bmRDb3B5LmZwcigpOworICAgICAgICBtX2ppdC5tb3ZlRG91YmxlKHhPcGVyYW5kZnByLCB4T3Bl
cmFuZENvcHlGcHIpOworCisgICAgICAgIEdQUlRlbXBvcmFyeSBjb3VudGVyKHRoaXMpOworICAg
ICAgICBHUFJSZWcgY291bnRlckdwciA9IGNvdW50ZXIuZ3ByKCk7CisgICAgICAgIG1faml0Lm1v
dmUoeU9wZXJhbmRHcHIsIGNvdW50ZXJHcHIpOworCisgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpK
dW1wIHNraXBGYWxsYmFjayA9IGNvbXBpbGVBcml0aFBvd0ludGVnZXJGYXN0UGF0aChtX2ppdCwg
eE9wZXJhbmRDb3B5RnByLCBjb3VudGVyR3ByLCByZXN1bHRGcHIpOworICAgICAgICBtX2ppdC5j
b252ZXJ0SW50MzJUb0RvdWJsZSh5T3BlcmFuZEdwciwgeU9wZXJhbmRmcHIuZnByKCkpOworICAg
ICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk1hdGhQb3csIHJlc3VsdEZwciwgeE9wZXJhbmRm
cHIsIHlPcGVyYW5kZnByLmZwcigpKTsKKworICAgICAgICBza2lwRmFsbGJhY2subGluaygmbV9q
aXQpOworICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0RnByLCBub2RlKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgeE9wZXJhbmQodGhpcywg
bm9kZS0+Y2hpbGQxKCkpOworICAgIFNwZWN1bGF0ZURvdWJsZU9wZXJhbmQgeU9wZXJhbmQodGhp
cywgbm9kZS0+Y2hpbGQyKCkpOworICAgIEZQUlJlZyB4T3BlcmFuZGZwciA9IHhPcGVyYW5kLmZw
cigpOworICAgIEZQUlJlZyB5T3BlcmFuZGZwciA9IHlPcGVyYW5kLmZwcigpOworCisgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKworICAgIEZQUlJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgRlBSUmVn
IHJlc3VsdEZwciA9IHJlc3VsdC5mcHIoKTsKKworICAgIEZQUlRlbXBvcmFyeSB4T3BlcmFuZENv
cHkodGhpcyk7CisgICAgRlBSUmVnIHhPcGVyYW5kQ29weUZwciA9IHhPcGVyYW5kQ29weS5mcHIo
KTsKKworICAgIEZQUlRlbXBvcmFyeSBzY3JhdGNoKHRoaXMpOworICAgIEZQUlJlZyBzY3JhdGNo
RnByID0gc2NyYXRjaC5mcHIoKTsKKworICAgIEdQUlRlbXBvcmFyeSB5T3BlcmFuZEludGVnZXIo
dGhpcyk7CisgICAgR1BSUmVnIHlPcGVyYW5kSW50ZWdlckdwciA9IHlPcGVyYW5kSW50ZWdlci5n
cHIoKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QgZmFpbGVkRXhwb25lbnRDb252ZXJz
aW9uVG9JbnRlZ2VyOworICAgIG1faml0LmJyYW5jaENvbnZlcnREb3VibGVUb0ludDMyKHlPcGVy
YW5kZnByLCB5T3BlcmFuZEludGVnZXJHcHIsIGZhaWxlZEV4cG9uZW50Q29udmVyc2lvblRvSW50
ZWdlciwgc2NyYXRjaEZwciwgZmFsc2UpOworCisgICAgbV9qaXQubW92ZURvdWJsZSh4T3BlcmFu
ZGZwciwgeE9wZXJhbmRDb3B5RnByKTsKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lwRmFs
bGJhY2sgPSBjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgobV9qaXQsIHhPcGVyYW5kQ29w
eUZwciwgeU9wZXJhbmRJbnRlZ2VyLmdwcigpLCByZXN1bHRGcHIpOworICAgIGZhaWxlZEV4cG9u
ZW50Q29udmVyc2lvblRvSW50ZWdlci5saW5rKCZtX2ppdCk7CisKKyAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvbk1hdGhQb3csIHJlc3VsdEZwciwgeE9wZXJhbmRmcHIsIHlPcGVyYW5kZnByKTsK
KyAgICBza2lwRmFsbGJhY2subGluaygmbV9qaXQpOworICAgIGRvdWJsZVJlc3VsdChyZXN1bHRG
cHIsIG5vZGUpOworfQorCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhlIGNvbXBhcmUgaXMgZnVzZWQg
d2l0aCBhIHN1YnNlcXVlbnQgYnJhbmNoLgogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGFyZShO
b2RlKiBub2RlLCBNYWNyb0Fzc2VtYmxlcjo6UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24s
IE1hY3JvQXNzZW1ibGVyOjpEb3VibGVDb25kaXRpb24gZG91YmxlQ29uZGl0aW9uLCBTX0pJVE9w
ZXJhdGlvbl9FSkogb3BlcmF0aW9uKQogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5oCmluZGV4IDNiN2M1ZDAwYjc3ODc0ZTQ5NjY0MzllMDZkOTRkZDZk
NmJiYjE1YjUuLjMzYzc3N2U0N2ZjMjVmODNjZTI0ZjRiZjA0M2ZhZGYxMzU5YWU0OGQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKQEAgLTIxMzQs
NiArMjEzNCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVBcml0aE11bChOb2RlKik7CiAg
ICAgdm9pZCBjb21waWxlQXJpdGhEaXYoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUFyaXRoTW9k
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVBcml0aFBvdyhOb2RlKik7CiAgICAgdm9pZCBjb21w
aWxlQXJpdGhTcXJ0KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDb25zdGFudFN0b3JhZ2VQb2lu
dGVyKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVHZXRJbmRleGVkUHJvcGVydHlTdG9yYWdlKE5v
ZGUqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwCmluZGV4IGI4MTA1OTNhNTMyNGU1OTVkZTRjZDk3ZmVmM2Y5YTgwNjAxYzRk
OWMuLjZiZjZiODZmOGMyYjMzMGE3YzFhZWEyMmNiOWVmYjM5MjdmNDdjNDIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApA
QCAtMTk5Niw2ICsxOTk2LDExIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSog
bm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogCisgICAgY2FzZSBBcml0aFBvdzogeworICAg
ICAgICBjb21waWxlQXJpdGhQb3cobm9kZSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKwogICAg
IGNhc2UgQXJpdGhBYnM6IHsKICAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5k
KCkpIHsKICAgICAgICAgY2FzZSBJbnQzMlVzZTogewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKaW5kZXggY2UwNjdhOTk1ZWJjNzc1MTM3
OTk5OWY2M2IwMmZhYmYwNDg3MzA5Zi4uNmIxMjNhNzU3OGMyYWIyMmIxNDQwOGI5OWExOTBmN2Nj
MzRkZDc3MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCkBAIC0yMjQxLDYgKzIyNDEsMTAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBjYXNlIEFy
aXRoUG93OgorICAgICAgICBjb21waWxlQXJpdGhQb3cobm9kZSk7CisgICAgICAgIGJyZWFrOwor
CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgICAgIGNvbXBpbGVBcml0aFNxcnQobm9kZSk7CiAg
ICAgICAgIGJyZWFrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
dHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKaW5kZXggY2UxZTI5NDQwMmFlZGU1NTEzY2VkMGI2
NDI2YmQzYTA5MzhhZDQ4ZS4uNWUzMGRmZTNiN2UyZTIwMjJjN2IzNThjYzNkMjQ1MDAzZjNjYzNm
NyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVj
dGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3Ro
UmVkdWN0aW9uUGhhc2UuY3BwCkBAIC0xMzIsNyArMTMyLDIwIEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAKKworICAgICAgICBjYXNlIEFyaXRoUG93OgorICAgICAgICAgICAgaWYgKG1fbm9kZS0+Y2hp
bGQyKCktPmlzTnVtYmVyQ29uc3RhbnQoKSkgeworICAgICAgICAgICAgICAgIGRvdWJsZSB5T3Bl
cmFuZFZhbHVlID0gbV9ub2RlLT5jaGlsZDIoKS0+YXNOdW1iZXIoKTsKKyAgICAgICAgICAgICAg
ICBpZiAoeU9wZXJhbmRWYWx1ZSA9PSAxKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnZlcnRU
b0lkZW50aXR5T3ZlckNoaWxkMSgpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoeU9wZXJh
bmRWYWx1ZSA9PSAwLjUpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5z
ZXJ0Tm9kZShtX25vZGVJbmRleCwgU3BlY05vbmUsIFBoYW50b20sIG1fbm9kZS0+b3JpZ2luLCBt
X25vZGUtPmNoaWxkcmVuKTsKKyAgICAgICAgICAgICAgICAgICAgbV9ub2RlLT5jb252ZXJ0VG9B
cml0aFNxcnQoKTsKKyAgICAgICAgICAgICAgICAgICAgbV9jaGFuZ2VkID0gdHJ1ZTsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwogICAgICAg
ICBjYXNlIEdldEFycmF5TGVuZ3RoOgogICAgICAgICAgICAgaWYgKEpTQXJyYXlCdWZmZXJWaWV3
KiB2aWV3ID0gbV9ncmFwaC50cnlHZXRGb2xkYWJsZVZpZXdGb3JDaGlsZDEobV9ub2RlKSkKICAg
ICAgICAgICAgICAgICBmb2xkVHlwZWRBcnJheVByb3BlcnR5VG9Db25zdGFudCh2aWV3LCBqc051
bWJlcih2aWV3LT5sZW5ndGgoKSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlk
YXRlLmNwcAppbmRleCBkNDM4Y2ZjYTlkMGU1YTMwMjMzYjQ1YjVhZjVlMTIyZDU1OWUwZWJlLi43
ZDdiNTA2ODUzYTg4YjI4M2I5OTA1ZWI3MGE2NGU0ODY3ZGQ1OTVhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAtMjQwLDYgKzI0MCw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgICAgICBjYXNlIEFyaXRoTW9kOgogICAgICAgICAgICAgICAgIGNhc2UgQXJp
dGhNaW46CiAgICAgICAgICAgICAgICAgY2FzZSBBcml0aE1heDoKKyAgICAgICAgICAgICAgICBj
YXNlIEFyaXRoUG93OgogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFyZUxlc3M6CiAgICAgICAg
ICAgICAgICAgY2FzZSBDb21wYXJlTGVzc0VxOgogICAgICAgICAgICAgICAgIGNhc2UgQ29tcGFy
ZUdyZWF0ZXI6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFi
aWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5j
cHAKaW5kZXggNWI5ZjdhYTUxOGNhMjZjYWIyMGFiNGE0NWRhMzYxY2E2Y2UwOGY3MC4uMjQ4YmRm
NTJlNzlhMmUzYTU3NGE1MjIzOGIyNTExNjk5NjI5NDMwYSAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtODksNiArODksNyBAQCBpbmxpbmUg
Q2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoTm9kZSogbm9kZSkKICAgICBjYXNlIEFyaXRoQWJz
OgogICAgIGNhc2UgQXJpdGhTaW46CiAgICAgY2FzZSBBcml0aENvczoKKyAgICBjYXNlIEFyaXRo
UG93OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNhc2UgQXJpdGhGUm91bmQ6CiAgICAgY2Fz
ZSBBcml0aE5lZ2F0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRy
aW5zaWNSZXBvc2l0b3J5LmgKaW5kZXggZDIyNzc5MjFmZTkzYjUzYWY0NjM3ZTA5Yjc0YzQ1ZmI0
YzZmODcxYy4uZjI4NGU4ZDE4ZWNhYjNhZDdhN2ZkNTQxNjVmZmU5OGZmNmM5MWJjNiAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgK
QEAgLTQwLDYgKzQwLDggQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1h
Y3JvKGRvdWJsZUFicywgImxsdm0uZmFicy5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwg
ZG91YmxlVHlwZSkpIFwKICAgICBtYWNybyhkb3VibGVTaW4sICJsbHZtLnNpbi5mNjQiLCBmdW5j
dGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKICAgICBtYWNybyhkb3VibGVDb3Ms
ICJsbHZtLmNvcy5mNjQiLCBmdW5jdGlvblR5cGUoZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwK
KyAgICBtYWNybyhkb3VibGVQb3csICJsbHZtLnBvdy5mNjQiLCBmdW5jdGlvblR5cGUoZG91Ymxl
VHlwZSwgZG91YmxlVHlwZSwgZG91YmxlVHlwZSkpIFwKKyAgICBtYWNybyhkb3VibGVQb3dpLCAi
bGx2bS5wb3dpLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlLCBpbnQz
MikpIFwKICAgICBtYWNybyhkb3VibGVTcXJ0LCAibGx2bS5zcXJ0LmY2NCIsIGZ1bmN0aW9uVHlw
ZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAogICAgIG1hY3JvKGZyYW1lQWRkcmVzcywgImxs
dm0uZnJhbWVhZGRyZXNzIiwgZnVuY3Rpb25UeXBlKHBvaW50ZXJUeXBlKGludDgpLCBpbnQzMikp
IFwKICAgICBtYWNybyhtdWxXaXRoT3ZlcmZsb3czMiwgImxsdm0uc211bC53aXRoLm92ZXJmbG93
LmkzMiIsIGZ1bmN0aW9uVHlwZShzdHJ1Y3RUeXBlKG1fY29udGV4dCwgaW50MzIsIGJvb2xlYW4p
LCBpbnQzMiwgaW50MzIpKSBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCmluZGV4IGU1NzUzN2M3OTNmNGNjOTVlMmFjNmNhNjE4OWQ3OTJkNTdh
Y2JiYmEuLjYyYzIwNzQxNTM0ZjExZDEyMmJhMmFmYzNlM2Q5Nzg1NDUxZDhjYzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCkBAIC00MzYs
NiArNDM2LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBBcml0aENvczoKICAgICAgICAgICAg
IGNvbXBpbGVBcml0aENvcygpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQXJp
dGhQb3c6CisgICAgICAgICAgICBjb21waWxlQXJpdGhQb3coKTsKKyAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICBjYXNlIEFyaXRoU3FydDoKICAgICAgICAgICAgIGNvbXBpbGVBcml0aFNxcnQo
KTsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTU5NSw2ICsxNTk4LDY0IEBAIHByaXZhdGU6CiAK
ICAgICB2b2lkIGNvbXBpbGVBcml0aENvcygpIHsgc2V0RG91YmxlKG1fb3V0LmRvdWJsZUNvcyhs
b3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSkpKTsgfQogCisgICAgdm9pZCBjb21waWxlQXJpdGhQ
b3coKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGludmVzdGlnYXRlIGxsdm0ucG93aSB0byBi
ZXR0ZXIgdW5kZXJzdGFuZCBpdHMgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLgorICAgICAg
ICAvLyBJdCBtaWdodCBiZSBiZXR0ZXIgdG8gaGF2ZSB0aGUgaW5saW5lIGxvb3AgaW4gREZHIHRv
by4KKyAgICAgICAgaWYgKG1fbm9kZS0+Y2hpbGQyKCkudXNlS2luZCgpID09IEludDMyVXNlKQor
ICAgICAgICAgICAgc2V0RG91YmxlKG1fb3V0LmRvdWJsZVBvd2kobG93RG91YmxlKG1fbm9kZS0+
Y2hpbGQxKCkpLCBsb3dJbnQzMihtX25vZGUtPmNoaWxkMigpKSkpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIExWYWx1ZSBiYXNlID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpOwor
ICAgICAgICAgICAgTFZhbHVlIGV4cG9uZW50ID0gbG93RG91YmxlKG1fbm9kZS0+Y2hpbGQyKCkp
OworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBpbnRlZ2VyRXhwb25lbnRJc1NtYWxsQmxvY2sg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHRlc3QgaW50ZWdlciBleHBvbmVudCBp
cyBzbWFsbC4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBpbnRlZ2VyRXhwb25lbnRQb3dC
bG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgcG93KGRvdWJsZSwgKGludClk
b3VibGUpLiIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUV4cG9uZW50UG93Qmxv
Y2sgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IHBvdyhkb3VibGUsIGRvdWJsZSku
IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgcG93QmxvY2sgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIkFyaXRoUG93IHJlZ3VsYXIgcG93IikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
bmFuRXhjZXB0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBvdyBOYU4gRXhjZXB0
aW9uIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJBcml0aFBvdyBjb250aW51YXRpb24iKSk7CisKKyAgICAgICAgICAgIExW
YWx1ZSBpbnRlZ2VyRXhwb25lbnQgPSBtX291dC5mcFRvSW50MzIoZXhwb25lbnQpOworICAgICAg
ICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91YmxlID0gbV9vdXQuaW50
VG9Eb3VibGUoaW50ZWdlckV4cG9uZW50KTsKKyAgICAgICAgICAgIExWYWx1ZSBleHBvbmVudElz
SW50ZWdlciA9IG1fb3V0LmRvdWJsZUVxdWFsKGV4cG9uZW50LCBpbnRlZ2VyRXhwb25lbnRDb252
ZXJ0ZWRUb0RvdWJsZSk7CisgICAgICAgICAgICBtX291dC5icmFuY2goZXhwb25lbnRJc0ludGVn
ZXIsIHVuc3VyZShpbnRlZ2VyRXhwb25lbnRJc1NtYWxsQmxvY2spLCB1bnN1cmUoZG91YmxlRXhw
b25lbnRQb3dCbG9jaykpOworCisgICAgICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGludGVnZXJFeHBvbmVudElzU21hbGxCbG9jaywgaW50ZWdlckV4cG9uZW50
UG93QmxvY2spOworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudEJlbG93MTAwMCA9
IG1fb3V0LmJlbG93KGludGVnZXJFeHBvbmVudCwgbV9vdXQuY29uc3RJbnQzMigxMDAwKSk7Cisg
ICAgICAgICAgICBtX291dC5icmFuY2goaW50ZWdlckV4cG9uZW50QmVsb3cxMDAwLCB1c3VhbGx5
KGludGVnZXJFeHBvbmVudFBvd0Jsb2NrKSwgcmFyZWx5KGRvdWJsZUV4cG9uZW50UG93QmxvY2sp
KTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50UG93QmxvY2ss
IGRvdWJsZUV4cG9uZW50UG93QmxvY2spOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgcG93
RG91YmxlSW50UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0LmRvdWJsZVBvd2koYmFzZSwgaW50
ZWdlckV4cG9uZW50KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUV4cG9uZW50UG93QmxvY2ssIHBvd0Js
b2NrKTsKKyAgICAgICAgICAgIC8vIElmIHkgaXMgTmFOLCB0aGUgcmVzdWx0IGlzIE5hTi4KKyAg
ICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGRuJ3Qgd2Ugb25seSBjaGVjayB0aGF0IGlmIHRoZSB0
eXBlIG9mIGNoaWxkMigpIG1pZ2h0IGhhdmUgTmFOPworICAgICAgICAgICAgTFZhbHVlIGV4cG9u
ZW50SXNOYU4gPSBtX291dC5kb3VibGVOb3RFcXVhbE9yVW5vcmRlcmVkKGV4cG9uZW50LCBleHBv
bmVudCk7CisKKyAgICAgICAgICAgIC8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzICtpbmZpbml0
eSwgdGhlIHJlc3VsdCBpcyBOYU4uCisgICAgICAgICAgICAvLyBJZiBhYnMoeCkgaXMgMSBhbmQg
eSBpcyAtaW5maW5pdHksIHRoZSByZXN1bHQgaXMgTmFOLgorICAgICAgICAgICAgTFZhbHVlIGFi
c29sdXRlRXhwb25lbnQgPSBtX291dC5kb3VibGVBYnMoZXhwb25lbnQpOworICAgICAgICAgICAg
TFZhbHVlIGFic29sdXRlRXhwb25lbnRJc0luZmluaXR5ID0gbV9vdXQuZG91YmxlRXF1YWwoYWJz
b2x1dGVFeHBvbmVudCwgbV9vdXQuY29uc3REb3VibGUoc3RkOjpudW1lcmljX2xpbWl0czxkb3Vi
bGU+OjppbmZpbml0eSgpKSk7CisgICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVCYXNlID0gbV9v
dXQuZG91YmxlQWJzKGJhc2UpOworICAgICAgICAgICAgTFZhbHVlIGFic29sdXRlQmFzZUlzT25l
ID0gbV9vdXQuZG91YmxlRXF1YWwoYWJzb2x1dGVCYXNlLCBtX291dC5jb25zdERvdWJsZSgxKSk7
CisgICAgICAgICAgICBMVmFsdWUgb25lQmFzZUluZmluaXRlRXhwb25lbnQgPSBtX291dC5iaXRB
bmQoYWJzb2x1dGVFeHBvbmVudElzSW5maW5pdHksIGFic29sdXRlQmFzZUlzT25lKTsKKworICAg
ICAgICAgICAgbV9vdXQuYnJhbmNoKG1fb3V0LmJpdE9yKGV4cG9uZW50SXNOYU4sIG9uZUJhc2VJ
bmZpbml0ZUV4cG9uZW50KSwgcmFyZWx5KG5hbkV4Y2VwdGlvbiksIHVzdWFsbHkocG93QmxvY2sp
KTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8ocG93QmxvY2ssIG5hbkV4Y2VwdGlvbik7
CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBwb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9v
dXQuZG91YmxlUG93KGJhc2UsIGV4cG9uZW50KSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5hbkV4Y2VwdGlvbiwg
Y29udGludWF0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHB1cmVOYW4gPSBtX291
dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5hTikpOworICAgICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHNldERvdWJsZShtX291dC5waGkobV9vdXQuZG91
YmxlVHlwZSwgcG93RG91YmxlSW50UmVzdWx0LCBwb3dSZXN1bHQsIHB1cmVOYW4pKTsKKyAgICAg
ICAgfQorICAgIH0KKwogICAgIHZvaWQgY29tcGlsZUFyaXRoU3FydCgpIHsgc2V0RG91YmxlKG1f
b3V0LmRvdWJsZVNxcnQobG93RG91YmxlKG1fbm9kZS0+Y2hpbGQxKCkpKSk7IH0KICAgICAKICAg
ICB2b2lkIGNvbXBpbGVBcml0aEZSb3VuZCgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE91dHB1dC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRw
dXQuaAppbmRleCBjNzBkOGNkOTc2YTU1OWViNjhmM2M1MDJkZjRiODlkMjcxYzFjNzE1Li5hZjgy
Y2JkZDY2NWFmNWZkYjZkMDYyNWE5YjJjYzNhMmZkYWVkZjljIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMT3V0cHV0LmgKQEAgLTE3Nyw2ICsxNzcsMTYgQEAgcHVibGljOgogICAgICAgICBy
ZXR1cm4gY2FsbChkb3VibGVDb3NJbnRyaW5zaWMoKSwgdmFsdWUpOwogICAgIH0KIAorICAgIExW
YWx1ZSBkb3VibGVQb3coTFZhbHVlIHhPcGVyYW5kLCBMVmFsdWUgeU9wZXJhbmQpCisgICAgewor
ICAgICAgICByZXR1cm4gY2FsbChkb3VibGVQb3dJbnRyaW5zaWMoKSwgeE9wZXJhbmQsIHlPcGVy
YW5kKTsKKyAgICB9CisKKyAgICBMVmFsdWUgZG91YmxlUG93aShMVmFsdWUgeE9wZXJhbmQsIExW
YWx1ZSB5T3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsKGRvdWJsZVBvd2lJbnRy
aW5zaWMoKSwgeE9wZXJhbmQsIHlPcGVyYW5kKTsKKyAgICB9CisKICAgICBMVmFsdWUgZG91Ymxl
U3FydChMVmFsdWUgdmFsdWUpCiAgICAgewogICAgICAgICByZXR1cm4gY2FsbChkb3VibGVTcXJ0
SW50cmluc2ljKCksIHZhbHVlKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3BlcmF0aW9ucy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJh
dGlvbnMuY3BwCmluZGV4IDI0NGI0YmU5Y2M2ZTE3ZThhYmVjNzczZGQwODcxOTExMWM0MWQ5NTcu
LjcwYzU5ZGE3ZjU3ODJiZjBhODNjYmMyNDdiYWFjNjQ0MWQ0ZDE4YjEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcApAQCAtMTIxMyw2ICsxMjEzLDUyIEBA
IFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKEV4ZWNT
dGF0ZSogZXhlYywgaW50MzJfdCBieXRlCiB9CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKElPUykg
JiYgQ1BVKEFSTV9USFVNQjIpCisKK3N0YXRpYyBkb3VibGUgZmRsaWJtUG93KGRvdWJsZSB4LCBk
b3VibGUgeSk7CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEZW5vcm1hbChkb3VibGUg
eCkKK3sKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qgc2lnbmJpdCA9IDB4ODAwMDAwMDAwMDAw
MDAwMFVMTDsKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgbWluTm9ybWFsID0gMHgwMDAxMDAw
MDAwMDAwMDAwVUxMOworICAgIHJldHVybiAoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSAmIH5z
aWduYml0KSAtIDEgPCBtaW5Ob3JtYWwgLSAxOworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBi
b29sIGlzRWRnZUNhc2UoZG91YmxlIHgpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNp
Z25iaXQgPSAweDgwMDAwMDAwMDAwMDAwMDBVTEw7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90
IGluZmluaXR5ID0gMHg3ZmZmZmZmZmZmZmZmZmZmVUxMOworICAgIHJldHVybiAoYml0d2lzZV9j
YXN0PHVpbnQ2NF90Pih4KSAmIH5zaWduYml0KSAtIDEgPj0gaW5maW5pdHkgLSAxOworfQorCitz
dGF0aWMgQUxXQVlTX0lOTElORSBkb3VibGUgbWF0aFBvd0ludGVybmFsKGRvdWJsZSB4LCBkb3Vi
bGUgeSkKK3sKKyAgICBpZiAoIWlzRGVub3JtYWwoeCkgJiYgIWlzRGVub3JtYWwoeSkpIHsKKyAg
ICAgICAgZG91YmxlIGxpYm1SZXN1bHQgPSBwb3coeCwgeSk7CisgICAgICAgIGlmIChsaWJtUmVz
dWx0IHx8IGlzRWRnZUNhc2UoeCkgfHwgaXNFZGdlQ2FzZSh5KSkKKyAgICAgICAgICAgIHJldHVy
biBsaWJtUmVzdWx0OworICAgIH0KKyAgICByZXR1cm4gZmRsaWJtUG93KHgsIHkpOworfQorCisj
ZWxzZQorCitBTFdBWVNfSU5MSU5FIGRvdWJsZSBtYXRoUG93SW50ZXJuYWwoZG91YmxlIHgsIGRv
dWJsZSB5KQoreworICAgIHJldHVybiBwb3coeCwgeSk7Cit9CisKKyNlbmRpZgorCitkb3VibGUg
SlNDX0hPU1RfQ0FMTCBvcGVyYXRpb25NYXRoUG93KGRvdWJsZSB4LCBkb3VibGUgeSkKK3sKKyAg
ICBpZiAoc3RkOjppc25hbih5KSkKKyAgICAgICAgcmV0dXJuIFBOYU47CisgICAgaWYgKHN0ZDo6
aXNpbmYoeSkgJiYgZmFicyh4KSA9PSAxKQorICAgICAgICByZXR1cm4gUE5hTjsKKyAgICByZXR1
cm4gbWF0aFBvd0ludGVybmFsKHgsIHkpOworfQorCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqIGV4ZWMsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRBcnJh
eVZhbHVlLCBpbnQzMl90IGluZGV4LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCiB7CiAg
ICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3BlcmF0aW9ucy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmgKaW5kZXggNzY3ZWE1YmI1NTI3ZGVjN2RkNWUxMGQ3Y2NmZDJkNjI5NzUxOTNhMy4u
ZDRlYzZhMWEzZjI3YTFlNjhhZjMyZDBhZTMxNjVkYWUxMjdiZWIxMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKQEAgLTI4MSw2ICsyODEsNyBAQCB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uRGVidWcoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVS
TkFMOwogI2lmIEVOQUJMRShERkdfSklUKQogU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uT3B0aW1pemUoRXhlY1N0YXRlKiwgaW50MzJfdCkgV1RGX0lOVEVSTkFMOwog
I2VuZGlmCitkb3VibGUgSlNDX0hPU1RfQ0FMTCBvcGVyYXRpb25NYXRoUG93KGRvdWJsZSB4LCBk
b3VibGUgeSkgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEJ5
SW5kZXgoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIEVuY29kZWRKU1ZhbHVl
KTsKICNpZiBVU0UoSlNWQUxVRTY0KQogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dEdl
dHRlclNldHRlcihFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgSWRlbnRpZmllciosIEVuY29k
ZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSkgV1RGX0lOVEVSTkFMOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcAppbmRleCA2NGE1YTdhNmRkN2ZjYzFhMjE2
ZTYzMTgxZTE0MTcxN2RmNjAzZDRiLi42YTk0MmNhNWY0YTdkYmNlZmU3MWMyYTRiNjMwMGVmMTY4
M2I5MzYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2Jq
ZWN0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNw
cApAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIk1hdGhP
YmplY3QuaCIKIAorI2luY2x1ZGUgIkpJVE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJMb29rdXAu
aCIKICNpbmNsdWRlICJPYmplY3RQcm90b3R5cGUuaCIKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CkBAIC0yNDIsNDMgKzI0Myw2IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY01pbihFeGVjU3RhdGUqIGV4ZWMpCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShq
c051bWJlcihyZXN1bHQpKTsKIH0KIAotI2lmIFBMQVRGT1JNKElPUykgJiYgQ1BVKEFSTV9USFVN
QjIpCi0KLXN0YXRpYyBkb3VibGUgZmRsaWJtUG93KGRvdWJsZSB4LCBkb3VibGUgeSk7Ci0KLXN0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNEZW5vcm1hbChkb3VibGUgeCkKLXsKLSAgICAgICAg
c3RhdGljIGNvbnN0IHVpbnQ2NF90IHNpZ25iaXQgPSAweDgwMDAwMDAwMDAwMDAwMDBVTEw7Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBtaW5Ob3JtYWwgPSAweDAwMDEwMDAwMDAwMDAw
MDBVTEw7Ci0gICAgICAgIHJldHVybiAoYml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSAmIH5zaWdu
Yml0KSAtIDEgPCBtaW5Ob3JtYWwgLSAxOwotfQotCi1zdGF0aWMgQUxXQVlTX0lOTElORSBib29s
IGlzRWRnZUNhc2UoZG91YmxlIHgpCi17Ci0gICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBz
aWduYml0ID0gMHg4MDAwMDAwMDAwMDAwMDAwVUxMOwotICAgICAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3QgaW5maW5pdHkgPSAweDdmZmZmZmZmZmZmZmZmZmZVTEw7Ci0gICAgICAgIHJldHVybiAo
Yml0d2lzZV9jYXN0PHVpbnQ2NF90Pih4KSAmIH5zaWduYml0KSAtIDEgPj0gaW5maW5pdHkgLSAx
OwotfQotCi1zdGF0aWMgQUxXQVlTX0lOTElORSBkb3VibGUgbWF0aFBvdyhkb3VibGUgeCwgZG91
YmxlIHkpCi17Ci0gICAgaWYgKCFpc0Rlbm9ybWFsKHgpICYmICFpc0Rlbm9ybWFsKHkpKSB7Ci0g
ICAgICAgIGRvdWJsZSBsaWJtUmVzdWx0ID0gcG93KHgseSk7Ci0gICAgICAgIGlmIChsaWJtUmVz
dWx0IHx8IGlzRWRnZUNhc2UoeCkgfHwgaXNFZGdlQ2FzZSh5KSkKLSAgICAgICAgICAgIHJldHVy
biBsaWJtUmVzdWx0OwotICAgIH0KLSAgICByZXR1cm4gZmRsaWJtUG93KHgseSk7Ci19Ci0KLSNl
bHNlCi0KLUFMV0FZU19JTkxJTkUgZG91YmxlIG1hdGhQb3coZG91YmxlIHgsIGRvdWJsZSB5KQot
ewotICAgIHJldHVybiBwb3coeCwgeSk7Ci19Ci0KLSNlbmRpZgotCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVjKQogewogICAgIC8v
IEVDTUEgMTUuOC4yLjEuMTMKQEAgLTI4NiwxMSArMjUwLDcgQEAgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhlYykKICAgICBkb3VibGUg
YXJnID0gZXhlYy0+YXJndW1lbnQoMCkudG9OdW1iZXIoZXhlYyk7CiAgICAgZG91YmxlIGFyZzIg
PSBleGVjLT5hcmd1bWVudCgxKS50b051bWJlcihleGVjKTsKIAotICAgIGlmIChzdGQ6OmlzbmFu
KGFyZzIpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIGlm
IChzdGQ6OmlzaW5mKGFyZzIpICYmIGZhYnMoYXJnKSA9PSAxKQotICAgICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTmFOKCkpOwotICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOdW1i
ZXIobWF0aFBvdyhhcmcsIGFyZzIpKSk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU1Zh
bHVlKG9wZXJhdGlvbk1hdGhQb3coYXJnLCBhcmcyKSkpOwogfQogCiBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNSYW5kb20oRXhlY1N0YXRlKiBleGVjKQpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy1iYXNpY3Mu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LWJhc2ljcy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZGYxOTg4NDQwN2U4NjJmNTgzMmFlM2E0NDg4ZDMyNWE2Y2Q3ZmIzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRo
LXBvdy1iYXNpY3MuanMKQEAgLTAsMCArMSwyODYgQEAKK2Z1bmN0aW9uIHZhbHVlc0FyZUNsb3Nl
KGEsIGIpIHsKKyAgICByZXR1cm4gTWF0aC5hYnMoYSAvIGIpIC0gMSA8IDFlLTEwOworfQorCisv
LyBTb21lIHJhbmRvbSB2YWx1ZXMuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlMSh4LCB5
KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91Ymxl
RG91YmxlMSk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQxKHgsIHkpIHsKKyAgICByZXR1
cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQxKTsKKworZnVu
Y3Rpb24gdGVzdDEoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3Vi
bGVEb3VibGUxKHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhw
ZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0Rv
dWJsZURvdWJsZTEoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0
ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdl
clkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnQxKHgsIGludGVnZXJZKTsKKyAgICAgICAg
aWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVJbnQxKCIgKyB4ICsgIiwgIiArIGlu
dGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIg
KyBleHBlY3RlZDI7CisgICAgfQorfQorbm9JbmxpbmUodGVzdDEpOwordGVzdDEoMzc2Ljc2NTIy
NzY0Mzc3Mjk2LCAxMC44MTY5OTIyNjA1MTU2OSwgNy4zMzM5NTE5MjkxMDkyNTJlKzI3LCA1Ljc2
Mzc4OTg5NTc1MDg5ZSsyNSk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGUyKHgsIHkp
IHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVE
b3VibGUyKTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludDIoeCwgeSkgeworICAgIHJldHVy
biBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludDIpOworZnVuY3Rp
b24gdGVzdDIoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVE
b3VibGUyKHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0
ZWQxKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJs
ZURvdWJsZTIoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQg
YSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkg
PSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnQyKHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYg
KCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVJbnQyKCIgKyB4ICsgIiwgIiArIGludGVn
ZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBl
eHBlY3RlZDI7CisgICAgfQorfQorbm9JbmxpbmUodGVzdDIpOwordGVzdDIoMzc2Ljc2NTIyNzY0
Mzc3Mjk2LCAtNS44MTY5OTIyNjA1MTU2OSwgMS4wMzUxODAzMzExODc1NzllLTE1LCAxLjMxNzE4
MjQzMTA0MDAyNjVlLTEzKTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTMoeCwgeSkg
eworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURv
dWJsZTMpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50Myh4LCB5KSB7CisgICAgcmV0dXJu
IE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50Myk7CitmdW5jdGlv
biB0ZXN0Myh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURv
dWJsZTMoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3Rl
ZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91Ymxl
RG91YmxlMygiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBh
IHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9
IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2
YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDMoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAo
IXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDMoIiArIHggKyAiLCAiICsgaW50ZWdl
clkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4
cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0Myk7Cit0ZXN0MygtMzcuNjc2NTIyNzY0
Mzc3Mjk2LCAxMC4wLCA1NzYzNzg5ODk1NzUwODkyLCA1NzYzNzg5ODk1NzUwODkyKTsKKworLy8g
RXhwb25lbnQgemVyby4KK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGU0KHgsIHkpIHsKKyAg
ICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGU0
KTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludDQoeCwgeSkgeworICAgIHJldHVybiBNYXRo
LnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludDQpOworZnVuY3Rpb24gdGVz
dDQoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGU0
KHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJs
ZTQoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1
ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwg
MDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IG1hdGhQb3dEb3VibGVJbnQ0KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1
ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVJbnQ0KCIgKyB4ICsgIiwgIiArIGludGVnZXJZICsg
IikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3Rl
ZDI7CisgICAgfQorfQorbm9JbmxpbmUodGVzdDQpOwordGVzdDQoLTM3LjY3NjUyMjc2NDM3NzI5
NiwgMCwgMSwgMSk7CisKKy8vIEV4cG9uZW50IG1pbnVzIHplcm8uCitmdW5jdGlvbiBtYXRoUG93
RG91YmxlRG91YmxlNSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lu
bGluZShtYXRoUG93RG91YmxlRG91YmxlNSk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ1
KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dE
b3VibGVJbnQ1KTsKK2Z1bmN0aW9uIHRlc3Q1KHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBtYXRoUG93RG91YmxlRG91YmxlNSh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVD
bG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGU1KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyBy
ZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9
CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50NSh4LCBpbnRl
Z2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQor
ICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50KCIg
KyB4ICsgIiwgIiArIGludGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZh
bHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDI7CisgICAgfQorfQorbm9JbmxpbmUodGVzdDUpOwor
dGVzdDUoLTM3LjY3NjUyMjc2NDM3NzI5NiwgLTAsIDEsIDEpOworCisvLyBFeHBvbmVudCAxLgor
ZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTYoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBv
dyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZTYpOworCitmdW5jdGlvbiBt
YXRoUG93RG91YmxlSW50Nih4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citu
b0lubGluZShtYXRoUG93RG91YmxlSW50Nik7CitmdW5jdGlvbiB0ZXN0Nih4LCB5LCBleHBlY3Rl
ZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTYoeCwgeSk7CisgICAgICAg
IGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlNigiICsgeCArICIsICIg
KyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBl
eHBlY3RlZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0Rv
dWJsZUludDYoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3Vs
dCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0
aFBvd0RvdWJsZUludDYoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQg
KyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citu
b0lubGluZSh0ZXN0Nik7Cit0ZXN0NigtMzcuNjc2NTIyNzY0Mzc3Mjk2LCAxLjAsIC0zNy42NzY1
MjI3NjQzNzcyOTYsIC0zNy42NzY1MjI3NjQzNzcyOTYpOworCisvLyBFeHBvbmVudCAtMS4KK2Z1
bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGU3KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3co
eCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGU3KTsKKworZnVuY3Rpb24gbWF0
aFBvd0RvdWJsZUludDcoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9J
bmxpbmUobWF0aFBvd0RvdWJsZUludDcpOworZnVuY3Rpb24gdGVzdDcoeCwgeSwgZXhwZWN0ZWQx
LCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGU3KHgsIHkpOworICAgICAgICBp
ZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZTcoIiArIHggKyAiLCAiICsg
eSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhw
ZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3Vi
bGVEb3VibGU3KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1
bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1h
dGhQb3dEb3VibGVEb3VibGU3KCIgKyB4ICsgIiwgIiArIGludGVnZXJZICsgIikgPSAiICsgcmVz
dWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDI7CisgICAgfQor
fQorbm9JbmxpbmUodGVzdDcpOwordGVzdDYoLTM3LjY3NjUyMjc2NDM3NzI5NiwgLTEuMCwgLTAu
MDI2NTQxNzI3NDkwNDU0Mjk2LCAtMC4wMjY1NDE3Mjc0OTA0NTQyOTYpOworCisvLyBMZXQncyBz
cXVhcmUgdGhpbmdzLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTgoeCwgeSkgeworICAg
IHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZTgp
OworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50OCh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgu
cG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50OCk7CitmdW5jdGlvbiB0ZXN0
OCh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTgo
eCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQor
ICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91Ymxl
OCgiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVl
IGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVz
dWx0ID0gbWF0aFBvd0RvdWJsZUludDgoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVl
c0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDgoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAi
KSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVk
MjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0OCk7Cit0ZXN0NygtMzcuNjc2NTIyNzY0Mzc3Mjk2
LCAyLjAsIDE0MTkuNTIwMzY3NjE0NjQwNywgMTQxOS41MjAzNjc2MTQ2NDA3KTsKKworZnVuY3Rp
b24gbWF0aFBvd0RvdWJsZURvdWJsZTkoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5
KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZTkpOworCitmdW5jdGlvbiBtYXRoUG93
RG91YmxlSW50OSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGlu
ZShtYXRoUG93RG91YmxlSW50OSk7CitmdW5jdGlvbiB0ZXN0OSh4LCB5LCBleHBlY3RlZDEsIGV4
cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAg
ICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTkoeCwgeSk7CisgICAgICAgIGlmICgh
dmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlOSgiICsgeCArICIsICIgKyB5ICsg
IikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3Rl
ZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUlu
dDkoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhw
ZWN0ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0Rv
dWJsZUludDkoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4
cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGlu
ZSh0ZXN0OSk7Cit0ZXN0OCgzNy42NzY1MjI3NjQzNzcyOTYsIDIuMCwgMTQxOS41MjAzNjc2MTQ2
NDA3LCAxNDE5LjUyMDM2NzYxNDY0MDcpOworCisvLyBMZXQncyBjdWJlIHRoaW5ncy4KK2Z1bmN0
aW9uIG1hdGhQb3dEb3VibGVEb3VibGUxMCh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgs
IHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlMTApOworCitmdW5jdGlvbiBtYXRo
UG93RG91YmxlSW50MTAoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9J
bmxpbmUobWF0aFBvd0RvdWJsZUludDEwKTsKK2Z1bmN0aW9uIHRlc3QxMCh4LCB5LCBleHBlY3Rl
ZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTEwKHgsIHkpOworICAgICAg
ICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZSgiICsgeCArICIsICIg
KyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBl
eHBlY3RlZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0Rv
dWJsZUludDEwKHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1
bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1h
dGhQb3dEb3VibGVJbnQoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQg
KyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citu
b0lubGluZSh0ZXN0OSk7Cit0ZXN0OSgtMzcuNjc2NTIyNzY0Mzc3Mjk2LCAzLjAsIC01MzQ4Mi41
OTE0NDQ5MzAyMzYsIC01MzQ4Mi41OTE0NDQ5MzAyMzYpOworCitmdW5jdGlvbiBtYXRoUG93RG91
YmxlRG91YmxlMTEoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9Jbmxp
bmUobWF0aFBvd0RvdWJsZURvdWJsZTExKTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludDEx
KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dE
b3VibGVJbnQxMSk7CitmdW5jdGlvbiB0ZXN0MTEoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIp
IHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGUxMSh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNB
cmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJh
ZCByZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGUoIiArIHggKyAiLCAiICsgeSArICIpID0gIiAr
IHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAg
IH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnQxMSh4LCBp
bnRlZ2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIp
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50
KCIgKyB4ICsgIiwgIiArIGludGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBh
IHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDI7CisgICAgfQorfQorbm9JbmxpbmUodGVzdDEw
KTsKK3Rlc3QxMCgzNy42NzY1MjI3NjQzNzcyOTYsIDMuMCwgNTM0ODIuNTkxNDQ0OTMwMjM2LCA1
MzQ4Mi41OTE0NDQ5MzAyMzYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9tYXRoLXBvdy1pbnRlZ2VyLWV4cG9uZW50LWZhc3RwYXRoLmpzIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy1pbnRlZ2VyLWV4cG9uZW50LWZh
c3RwYXRoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2MDZjNDRmOTUyNTU4N2IxMDVlNmViNmE3MjViMjE2Y2Mx
ZjM3OTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL21hdGgtcG93LWludGVnZXItZXhwb25lbnQtZmFzdHBhdGguanMKQEAgLTAsMCArMSw1NiBA
QAorZnVuY3Rpb24gdmFsdWVzQXJlQ2xvc2UoYSwgYikgeworICAgIHJldHVybiBNYXRoLmFicyhh
IC8gYikgLSAxIDwgMWUtMTA7Cit9CisKKy8vIFNtYWxsIGV4cG9uZW50IHZhbHVlcyBhcmUgaGFu
ZGxlZCB0aHJvdWdoIGEgc2ltcGxlciBpbmxpbmUgbG9vcC4gVGVzdCB0aGF0IGl0IGlzIG5vdCBv
YnNlcnZhYmxlLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZVRlc3RFeHBvbmVudEZpZnR5
KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dE
b3VibGVEb3VibGVUZXN0RXhwb25lbnRGaWZ0eSk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJ
bnRUZXN0RXhwb25lbnRGaWZ0eSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9
Citub0lubGluZShtYXRoUG93RG91YmxlSW50VGVzdEV4cG9uZW50RmlmdHkpOworZnVuY3Rpb24g
dGVzdEV4cG9uZW50RmlmdHkoeCwgeSwgZXhwZWN0ZWQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3Vi
bGVUZXN0RXhwb25lbnRGaWZ0eSh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShy
ZXN1bHQsIGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwg
TWF0aC5wb3coIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQg
dmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5
IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25lbnRGaWZ0eSh4LCBpbnRlZ2VyWSk7
CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZCkpCisgICAgICAg
ICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KCIgKyB4ICsgIiwgIiArIGlu
dGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCB2YWx1ZSBjbG9zZSB0byAiICsg
ZXhwZWN0ZWQ7CisgICAgfQorfQorbm9JbmxpbmUodGVzdEV4cG9uZW50RmlmdHkpOwordGVzdEV4
cG9uZW50RmlmdHkoNTMuNzA5MDExNjQxMzMxMDIsIDUwLjAsIDMuMTc5NDk0MTE4MTIwMTQ0ZSs4
Nik7Cit0ZXN0RXhwb25lbnRGaWZ0eSg1My43MDkwMTE2NDEzMzEwMiwgLTEwLjAsIDUuMDA2NDMy
ODQyNjIxMTkyZS0xOCk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGVUZXN0RXhwb25l
bnRUZW5UaG91c2FuZHMoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9J
bmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZVRlc3RFeHBvbmVudFRlblRob3VzYW5kcyk7CisKK2Z1
bmN0aW9uIG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25lbnRUZW5UaG91c2FuZHMoeCwgeSkgewor
ICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludFRl
c3RFeHBvbmVudFRlblRob3VzYW5kcyk7CitmdW5jdGlvbiB0ZXN0RXhwb25lbnRUZW5UaG91c2Fu
ZHMoeCwgeSwgZXhwZWN0ZWQpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGVUZXN0RXhwb25lbnRU
ZW5UaG91c2FuZHMoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBl
eHBlY3RlZCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93
KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIHZhbHVlIGNs
b3NlIHRvICIgKyBleHBlY3RlZDsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBtYXRoUG93RG91YmxlSW50VGVzdEV4cG9uZW50VGVuVGhvdXNhbmRzKHgsIGludGVnZXJZKTsK
KyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkKSkKKyAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coIiArIHggKyAiLCAiICsgaW50
ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIHZhbHVlIGNsb3NlIHRvICIgKyBl
eHBlY3RlZDsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0RXhwb25lbnRUZW5UaG91c2FuZHMpOwor
dGVzdEV4cG9uZW50VGVuVGhvdXNhbmRzKDEuMDAxLCAxMDAwMC4wLCAyMTkxNi42ODEzMzkwNDgz
NzMpOwordGVzdEV4cG9uZW50VGVuVGhvdXNhbmRzKDEuMDAxLCAtMS4wLCAwLjk5OTAwMDk5OTAw
MDk5OTEpOwpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctbmFuLWJlaGF2aW9ycy5qcyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctbmFuLWJlaGF2aW9ycy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kYTdkZDQ0Njc4MDlmYmMwNmIyYmYzNGUxOTVmMGEzMTEyMDk4YzRlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRo
LXBvdy1uYW4tYmVoYXZpb3JzLmpzCkBAIC0wLDAgKzEsODUgQEAKKy8vIElmIHkgaXMgTmFOLCB0
aGUgcmVzdWx0IGlzIE5hTi4KK2Z1bmN0aW9uIHRlc3RJbnRlZ2VyQmFzZVdpdGhOYU5FeHBvbmVu
dCgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IE1hdGgucG93KDUsIE5hTik7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coNSwgTmFOKSA9
ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coaSwgTmFOKTsKKyAgICAgICAgaWYgKCFp
c05hTihyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRo
LnBvdyhpLCBOYU4pID0gIiArIHJlc3VsdCArICIgd2l0aCBpID0gIiArIGk7CisgICAgfQorfQor
bm9JbmxpbmUodGVzdEludGVnZXJCYXNlV2l0aE5hTkV4cG9uZW50KTsKK3Rlc3RJbnRlZ2VyQmFz
ZVdpdGhOYU5FeHBvbmVudCgpOworCitmdW5jdGlvbiB0ZXN0RmxvYXRpbmdQb2ludEJhc2VXaXRo
TmFORXhwb25lbnQoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdyg1LjUsIE5hTik7CisgICAgICAgIGlmICghaXNO
YU4ocmVzdWx0KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5w
b3coNS41LCBOYU4pID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdyhpICsgMSwgTmFO
KTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0LCBNYXRoLnBvdyhpICsgMC41LCBOYU4pID0gIiArIHJlc3VsdCArICIgd2l0
aCBpID0gIiArIGk7CisgICAgfQorfQorbm9JbmxpbmUodGVzdEZsb2F0aW5nUG9pbnRCYXNlV2l0
aE5hTkV4cG9uZW50KTsKK3Rlc3RGbG9hdGluZ1BvaW50QmFzZVdpdGhOYU5FeHBvbmVudCgpOwor
CisvLyBJZiB5IGlzICswLCB0aGUgcmVzdWx0IGlzIDEsIGV2ZW4gaWYgeCBpcyBOYU4uCisvLyBJ
ZiB5IGlzIOKIkjAsIHRoZSByZXN1bHQgaXMgMSwgZXZlbiBpZiB4IGlzIE5hTi4KKy8vIElmIHgg
aXMgTmFOIGFuZCB5IGlzIG5vbnplcm8sIHRoZSByZXN1bHQgaXMgTmFOLgorZnVuY3Rpb24gdGVz
dE5hTkJhc2UoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAg
ICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdyhOYU4sIGkgKyAxKTsKKyAgICAgICAgaWYgKCFpc05h
TihyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBv
dyhOYU4sIGkgKyAxKSA9ICIgKyByZXN1bHQgKyAiIHdpdGggaSA9ICIgKyBpOworICAgIH0KKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IE1hdGgucG93KE5hTiwgaSArIDEuNSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkKKyAg
ICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coTmFOLCBpICsgMS41
KSA9ICIgKyByZXN1bHQgKyAiIHdpdGggaSA9ICIgKyBpOworICAgIH0KKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KE5h
TiwgMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDEpCisgICAgICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQsIE1hdGgucG93KE5hTiwgMCkgPSAiICsgcmVzdWx0OworICAgIH0KKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IE1hdGgucG93KE5hTiwgLTApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAxKQorICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdyhOYU4sIC0wKSA9ICIgKyByZXN1
bHQ7CisgICAgfQorfQorbm9JbmxpbmUodGVzdE5hTkJhc2UpOwordGVzdE5hTkJhc2UoKTsKKwor
Ly8gSWYgYWJzKHgpIGlzIDEgYW5kIHkgaXMgK+KIniwgdGhlIHJlc3VsdCBpcyBOYU4uCisvLyBJ
ZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyDiiJLiiJ4sIHRoZSByZXN1bHQgaXMgTmFOLgorZnVuY3Rp
b24gaW5maW5pdGVFeHBvbmVudHMoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdygxLCBOdW1iZXIuUE9TSVRJVkVf
SU5GSU5JVFkpOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KDEsIE51bWJlci5QT1NJVElWRV9JTkZJTklU
WSkgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KC0xLCBOdW1iZXIuUE9TSVRJVkVf
SU5GSU5JVFkpOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KC0xLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5J
VFkpID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdygxLCBOdW1iZXIuTkVHQVRJVkVf
SU5GSU5JVFkpOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KDEsIE51bWJlci5ORUdBVElWRV9JTkZJTklU
WSkgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KC0xLCBOdW1iZXIuTkVHQVRJVkVf
SU5GSU5JVFkpOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KC0xLCBOdW1iZXIuTkVHQVRJVkVfSU5GSU5J
VFkpID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Citub0lubGluZShpbmZpbml0ZUV4cG9uZW50cyk7
CitpbmZpbml0ZUV4cG9uZW50cygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy13aXRoLWNvbnN0YW50cy5qcyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctd2l0aC1jb25zdGFudHMuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYTRjMTA4Y2JkMThjMTY3ZjY5YmJlYTRkM2U5ZGIyODI2ZDAzMGVjMwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctd2l0aC1j
b25zdGFudHMuanMKQEAgLTAsMCArMSwxMTUgQEAKK2Z1bmN0aW9uIGV4cG9uZW50SXNaZXJvKHgp
IHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgMCk7Cit9Citub0lubGluZShleHBvbmVudElzWmVy
byk7CisKK2Z1bmN0aW9uIHRlc3RFeHBvbmVudElzWmVybygpIHsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGV4cG9uZW50SXNaZXJv
KDUpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiB6ZXJvRXhwb25lbnQoNSkgc2hvdWxkIGJlIDEsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gZXhwb25lbnRJc1plcm8oNS41KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogemVyb0V4cG9uZW50KDUuNSkgc2hvdWxkIGJlIDEsIHdhcyA9
ICIgKyByZXN1bHQ7CisgICAgfQorfQordGVzdEV4cG9uZW50SXNaZXJvKCk7CisKKworZnVuY3Rp
b24gZXhwb25lbnRJc09uZSh4KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIDEpOworfQorbm9J
bmxpbmUoZXhwb25lbnRJc09uZSk7CisKK2Z1bmN0aW9uIHRlc3RFeHBvbmVudElzT25lKCkgewor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gZXhwb25lbnRJc09uZSg1KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNSkKKyAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogZXhwb25lbnRJc09uZSg1KSBzaG91bGQgYmUgNSwgd2FzID0gIiAr
IHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBleHBvbmVudElzT25lKDUuNSk7CisgICAgICAgIGlmIChyZXN1
bHQgIT09IDUuNSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogZXhwb25lbnRJc09uZSg1LjUp
IHNob3VsZCBiZSA1LjUsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorfQordGVzdEV4cG9uZW50
SXNPbmUoKTsKKworCitmdW5jdGlvbiBwb3dVc2VkQXNTcXJ0KHgpIHsKKyAgICByZXR1cm4gTWF0
aC5wb3coeCwgMC41KTsKK30KK25vSW5saW5lKHBvd1VzZWRBc1NxcnQpOworCitmdW5jdGlvbiB0
ZXN0UG93VXNlZEFzU3FydCgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IHBvd1VzZWRBc1NxcnQoNCk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT09IE1hdGguc3FydCg0KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogcG93VXNl
ZEFzU3FydCg0KSBzaG91bGQgYmUgMiwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBwb3dV
c2VkQXNTcXJ0KDQuNCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IE1hdGguc3FydCg0LjQpKQor
ICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBwb3dVc2VkQXNTcXJ0KDQpIHNob3VsZCBiZSAiICsg
TWF0aC5zcXJ0KDQuNCkgKyAiLCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KKworfQordGVzdFBv
d1VzZWRBc1NxcnQoKTsKKworCitmdW5jdGlvbiBpbnRJbnRDb25zdGFudHNTbWFsbE51bWJlcnMo
KSB7CisgICAgcmV0dXJuIE1hdGgucG93KDQyLCAzKTsKK30KK2Z1bmN0aW9uIGludEludENvbnN0
YW50c0xhcmdlTnVtYmVycygpIHsKKyAgICAvLyBUaGUgcmVzdWx0IGRvZXMgbm90IGZpdCBpbiBh
IGludGVnZXIuCisgICAgcmV0dXJuIE1hdGgucG93KDQyLCA0Mik7Cit9CitmdW5jdGlvbiBpbnRJ
bnRTbWFsbENvbnN0YW50cygpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coNDIsIDMpOworfQorZnVu
Y3Rpb24gaW50RG91YmxlQ29uc3RhbnRzKCkgeworICAgIHJldHVybiBNYXRoLnBvdygxNCwgNDIu
NSk7Cit9CitmdW5jdGlvbiBkb3VibGVEb3VibGVDb25zdGFudHMoKSB7CisgICAgcmV0dXJuIE1h
dGgucG93KDEzLjUsIDQyLjUpOworfQorZnVuY3Rpb24gZG91YmxlSW50Q29uc3RhbnRzKCkgewor
ICAgIHJldHVybiBNYXRoLnBvdygxMy41LCA1Mik7Cit9Citub0lubGluZShpbnRJbnRDb25zdGFu
dHNTbWFsbE51bWJlcnMpOworbm9JbmxpbmUoaW50SW50Q29uc3RhbnRzTGFyZ2VOdW1iZXJzKTsK
K25vSW5saW5lKGludERvdWJsZUNvbnN0YW50cyk7Citub0lubGluZShkb3VibGVEb3VibGVDb25z
dGFudHMpOworbm9JbmxpbmUoZG91YmxlSW50Q29uc3RhbnRzKTsKKworZnVuY3Rpb24gdGVzdEJh
c2VBbmRFeHBvbmVudENvbnN0YW50TGl0ZXJhbHMoKQoreworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gaW50SW50Q29uc3RhbnRzU21h
bGxOdW1iZXJzKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDc0MDg4KQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBpbnRJbnRDb25zdGFudHNTbWFsbE51bWJlcnMoKSBzaG91bGQgYmUgNzQw
ODgsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gaW50SW50Q29uc3RhbnRzTGFyZ2VOdW1i
ZXJzKCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDEuNTAxMzA5Mzc1NDUyOTY1NmUrNjgpCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGludEludENvbnN0YW50c0xhcmdlTnVtYmVycygpIHNo
b3VsZCBiZSAxLjUwMTMwOTM3NTQ1Mjk2NTZlKzY4LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0K
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGludERvdWJsZUNvbnN0YW50cygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1LjEzMzgz
MDM4ODIwMTU3NjVlKzQ4KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBpbnREb3VibGVDb25z
dGFudHMoKSBzaG91bGQgYmUgNS4xMzM4MzAzODgyMDE1NzY1ZSs0OCwgd2FzID0gIiArIHJlc3Vs
dDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBkb3VibGVEb3VibGVDb25zdGFudHMoKTsKKyAgICAgICAgaWYgKHJlc3Vs
dCAhPT0gMS4wOTQ0MjI4NzI5NjQ3ODI5ZSs0OCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
ZG91YmxlRG91YmxlQ29uc3RhbnRzKCkgc2hvdWxkIGJlIDEuMDk0NDIyODcyOTY0NzgyOWUrNDgs
IHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gZG91YmxlSW50Q29uc3RhbnRzKCk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT09IDUuOTg5MDIyNzM1MzExMTU4ZSs1OCkKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogZG91YmxlSW50Q29uc3RhbnRzKCkgc2hvdWxkIGJlIDUuOTg5MDIyNzM1MzEx
MTU4ZSs1OCwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Cit0ZXN0QmFzZUFuZEV4cG9uZW50
Q29uc3RhbnRMaXRlcmFscygpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246564</attachid>
            <date>2015-02-13 18:16:56 -0800</date>
            <delta_ts>2015-02-13 19:15:53 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141540-20150213181653.patch</filename>
            <type>text/plain</type>
            <size>53278</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NmEwMjBlM2UwY2E1OGM5YTIxMjkwMWE3MzdjYTVjMWIwN2YxODUwLi5hMDdjMmI3YjdlNzk0NzRi
YTdkMzg3ODUxNWU0NmNiMjczY2ZiMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxNS0wMi0xMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBERkcgbm9kZSBmb3IgdGhlIFBvdyBJbnRyaW5zaWNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1NDAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBERkcg
Tm9kZSBmb3IgUG93SW50cmluc2ljLiBUaGlzIHBhdGNoIGNvdmVycyB0aGUgYmFzaWMgY2FzZXMK
KyAgICAgICAgbmVlZCB0byBhdm9pZCBtYXNzaXZlIHJlZ3Jlc3Npb24uIEkgd2lsbCBpdGVyYXRl
IG92ZXIgdGhlIG5vZGUgdG8gY292ZXIKKyAgICAgICAgdGhlIG1pc3NpbmcgdHlwZXMuCisKKyAg
ICAgICAgV2l0aCB0aGlzIHBhdGNoIEkgZ2V0IHRoZSBmb2xsb3dpbmcgcHJvZ3Jlc3Npb25zIG9u
IGJlbmNobWFya3M6CisgICAgICAgIC1Mb25nU3BpZGVyJ3MgbWF0aC1wYXJ0aWFsLXN1bXM6ICs1
JS4KKyAgICAgICAgLUtyYWtlbidzIGltYWdpbmctZGFya3Jvb206ICsxNyUKKyAgICAgICAgLUFz
bUJlbmNoJ3MgY3JheS5jOiArNi42JQorICAgICAgICAtQ29tcHJlc3Npb25CZW5jaDogKzIuMiUg
Z2xvYmFsbHkuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICBDb3ZlciBhIGNvdXBsZSBvZiB0cml2aWFs
IGNhc2VzOgorICAgICAgICAtSWYgdGhlIGV4cG9uZW50IGlzIHplcm8sIHRoZSByZXN1bHQgaXMg
YWx3YXlzIG9uZSwgcmVnYXJkbGVzcyBvZiB0aGUgYmFzZS4KKyAgICAgICAgLUlmIGJvdGggYXJn
dW1lbnRzIGFyZSBjb25zdGFudHMsIGNvbXB1dGUgdGhlIHJlc3VsdCBhdCBjb21waWxlIHRpbWUu
CisKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKworICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICBXZSBvbmx5IHN1cHBvcnQgMiBiYXNpYyBjYXNlcyBhdCB0
aGlzIHRpbWU6CisgICAgICAgIC1NYXRoLnBvdyhkb3VibGUsIGludCkKKyAgICAgICAgLU1hdGgu
cG93KGRvdWJsZSwgZG91YmxlKS4KKworICAgICAgICBJJ2xsIGNvdmVyIE1hdGgucG93KGludCwg
aW50KSBpbiBhIGZvbGxvdyB1cC4KKworICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvQXJpdGhTcXJ0KToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjphcml0aE5vZGVGbGFncyk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6ZG9Eb3VibGVWb3Rpbmcp
OgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhQb3cpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhQb3cp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmRvdWJsZVBvdyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVQb3dpKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpt
YXRoUHJvdG9GdW5jUG93KToKKyAgICAgICAgKEpTQzo6aXNEZW5vcm1hbCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OmlzRWRnZUNhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjptYXRoUG93
KTogRGVsZXRlZC4KKworICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy1iYXNpY3MuanM6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy1pbnRlZ2VyLWV4cG9uZW50
LWZhc3RwYXRoLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbWF0aC1wb3ctbmFu
LWJlaGF2aW9ycy5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL21hdGgtcG93LXdp
dGgtY29uc3RhbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgU3RhcnQgc29tZSBiYXNpYyB0ZXN0aW5n
IG9mIE1hdGgucG93KCkuCisgICAgICAgIER1ZSB0byB0aGUgdmFyaW91cyB0cmFuc2Zvcm0sIHRo
ZSB2YWx1ZSBjaGFuZ2Ugd2hlbiB0aGUgY29kZSB0aWVycyB1cCwKKyAgICAgICAgSSBjb3ZlcmVk
IHRoaXMgYnkgY2hlY2tpbmcgZm9yIGFwcHJveGltYXRlIHZhbHVlcy4KKwogMjAxNS0wMi0xMyAg
QmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBBcml0aFNx
cnQgc2hvdWxkIG5vdCBiZSBjb25kaXRpb25hbCBvbiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAppbmRleCAxOWFlYWI3MTliNjM0NzIyZjkzMmM5NGMzMGZiNmNhMDZlMmRmNzUxLi40OGQxZmZh
Y2M3YmNiNjA4ZTdiOTUwZWRkYjZlZWNhNDAwMmRmY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTUwOCw2ICs1MDgsMTUg
QEAgU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlRlJvdW5kKFNwZWN1bGF0ZWRUeXBlIHZhbHVl
KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUG93
KFNwZWN1bGF0ZWRUeXBlIHhWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgeVZhbHVlKQoreworICAgIC8v
IE1hdGgucG93KCkgYWx3YXlzIHJldHVybiBOYU4gaWYgdGhlIGV4cG9uZW50IGlzIE5hTiwgdW5s
aWtlIHN0ZDo6cG93KCkuCisgICAgLy8gV2UgYWx3YXlzIHNldCBhIHB1cmUgTmFOIGluIHRoYXQg
Y2FzZS4KKyAgICBpZiAoeVZhbHVlICYgU3BlY0RvdWJsZU5hTikKKyAgICAgICAgeFZhbHVlIHw9
IFNwZWNEb3VibGVQdXJlTmFOOworICAgIHJldHVybiBwb2xsdXRlRG91YmxlKHhWYWx1ZSk7Cit9
CisKIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZUJpbmFyeU9wKFNwZWN1bGF0ZWRUeXBlIGEs
IFNwZWN1bGF0ZWRUeXBlIGIpCiB7CiAgICAgcmV0dXJuIHBvbGx1dGVEb3VibGUoYSB8IGIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAppbmRl
eCBiMDBmMjk3M2Y2MzU0MjA3NDIzZDNlMzE4YTNjNzk0MGQwMDc4OWM4Li5mNzNjMmE0MTEwNTMy
YjQ1MzNlNzhlYWRmNGU2NDkxMDhlMWRhOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaApAQCAtNDE2LDYgKzQxNiw3IEBAIFNwZWN1bGF0
ZWRUeXBlIHR5cGVPZkRvdWJsZU1pbk1heChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRlZFR5cGUp
OwogU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlTmVnYXRpb24oU3BlY3VsYXRlZFR5cGUpOwog
U3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlQWJzKFNwZWN1bGF0ZWRUeXBlKTsKIFNwZWN1bGF0
ZWRUeXBlIHR5cGVPZkRvdWJsZUZSb3VuZChTcGVjdWxhdGVkVHlwZSk7CitTcGVjdWxhdGVkVHlw
ZSB0eXBlT2ZEb3VibGVQb3coU3BlY3VsYXRlZFR5cGUsIFNwZWN1bGF0ZWRUeXBlKTsKIAogLy8g
VGhpcyBjb25zZXJ2YXRpdmVseSBtb2RlbHMgdGhlIGJlaGF2aW9yIG9mIGFyYml0cmFyeSBkb3Vi
bGUgb3BlcmF0aW9ucy4KIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZUJpbmFyeU9wKFNwZWN1
bGF0ZWRUeXBlLCBTcGVjdWxhdGVkVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZDdiNWIw
ZjcyOTQ1ZWQ4MjYxZmE0NTA1N2RiYzE2Zjc0NzRmODQxNC4uYmY3ZDA0MWU2NGZkNDQxYWIxODVl
ODQ2ZDJiYmUxNTNhOGIzMjA0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJHZXRCeUlk
U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVz
LmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCkBAIC03MTgsNiArNzE5LDI0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgY2FzZSBBcml0aFBvdzogeworICAgICAgICBKU1ZhbHVlIGNoaWxkWSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChjaGlsZFkgJiYgY2hpbGRZLmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgICAgIGlmICghY2hpbGRZLmFzTnVtYmVyKCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcigxKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTVmFsdWUgY2hpbGRY
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChjaGls
ZFggJiYgY2hpbGRYLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBqc0RvdWJsZU51bWJlcihvcGVyYXRpb25NYXRoUG93KGNoaWxkWC5hc051bWJlcigpLCBj
aGlsZFkuYXNOdW1iZXIoKSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91Ymxl
UG93KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkubV90eXBlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgQXJpdGhTcXJ0OiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAppbmRleCBiODIzN2VhZmVjYmEzMmY0MGJkZmM5NDI3OTY0NjFhMGQxY2Rh
ODU3Li44NWUyYTFjNzJlNTRjNDEyZjk5YTQ3YTViNGZjN2NmMDE0ZmJkMjE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTY4NCw2
ICsxNjg0LDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVz
dWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBjYXNlIFBvd0ludHJpbnNpYzogeworICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKSB7CisgICAgICAgICAgICAv
LyBNYXRoLnBvdygpIGFuZCBNYXRoLnBvdyh4KSByZXR1cm4gTmFOLgorICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE5hTikpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHlP
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpOwor
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFy
aXRoUG93LCBnZXQoeE9wZXJhbmQpLCBnZXQoeU9wZXJhbmQpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2hJbnRyaW5zaWM6IHsKICAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IGFjNmI4Zjc5MmJjM2I0MjVlNWI0Yzkz
ODI5YmMxYjhlYWU2YmE0ZDguLmRjZGI3ZGI0ODQ2NmY5ZTM2NWY5OWI4OWQyNzk3ZDVkYTFhNGNm
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0xMjIs
NiArMTIyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEFyaXRoQWJzOgog
ICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKKyAgICBjYXNlIEFyaXRoUG93
OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNhc2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBB
cml0aFNpbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCBjNmZl
YWZkZDNkOGVlNzBkOGIwZDRmNjRlZDhkMmNjNjYzNTNkYzE2Li41ZGNhZDQzYmNhN2YxMGZiNDRl
ZmI4ZjExMTdkM2NmNDg2ZTk0Y2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCkBAIC04MSw2ICs4MSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBB
cml0aE1heDoKKyAgICBjYXNlIEFyaXRoUG93OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNh
c2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGUzMWE1NGQzZTNkMjIwOWZmNTk4N2RhMTE3
N2NiMzE4NGVjMDk1OTYuLmM4MmI1ZmIxNDZiM2I5YjM2ZGJjMjU5Yjk1MWQxOGFhMmZlYmQ5YTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMzM3
LDYgKzMzNywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbm9kZS0+c2V0UmVzdWx0KE5vZGVS
ZXN1bHREb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBj
YXNlIEFyaXRoUG93OiB7CisgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdERv
dWJsZSk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUlu
dDMyT3JCb29sZWFuRm9yQXJpdGhtZXRpYygpKSB7CisgICAgICAgICAgICAgICAgZml4RG91Ymxl
T3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4SW50T3JC
b29sZWFuRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZpeERvdWJsZU9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlT3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAppbmRleCBiZmZiODY2MGNkZDAxMDc2ZGY3MTMzYTEyY2YzYmIxYmYx
YWFkZTdhLi4yNzE4YjdiNjE4MjMwNzI3YThkZDI3NDk5M2IyZjdkMzlkZTg1ZTkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTY1LDYgKzU2NSwxMyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFRvUHJpbWl0aXZlKTsKICAgICAgICAgbV9vcCA9
IFRvU3RyaW5nOwogICAgIH0KKworICAgIHZvaWQgY29udmVydFRvQXJpdGhTcXJ0KCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX29wID09IEFyaXRoUG93KTsKKyAgICAgICAgY2hpbGQyKCkgPSBF
ZGdlKCk7CisgICAgICAgIG1fb3AgPSBBcml0aFNxcnQ7CisgICAgfQogICAgIAogICAgIEpTVmFs
dWUgYXNKU1ZhbHVlKCkKICAgICB7CkBAIC03NzUsNyArNzgyLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgIE5vZGVGbGFncyBhcml0aE5vZGVGbGFncygpCiAgICAgewogICAgICAgICBOb2RlRmxhZ3Mg
cmVzdWx0ID0gbV9mbGFncyAmIE5vZGVBcml0aEZsYWdzTWFzazsKLSAgICAgICAgaWYgKG9wKCkg
PT0gQXJpdGhNdWwgfHwgb3AoKSA9PSBBcml0aERpdiB8fCBvcCgpID09IEFyaXRoTW9kIHx8IG9w
KCkgPT0gQXJpdGhOZWdhdGUgfHwgb3AoKSA9PSBEb3VibGVBc0ludDMyKQorICAgICAgICBpZiAo
b3AoKSA9PSBBcml0aE11bCB8fCBvcCgpID09IEFyaXRoRGl2IHx8IG9wKCkgPT0gQXJpdGhNb2Qg
fHwgb3AoKSA9PSBBcml0aE5lZ2F0ZSB8fCBvcCgpID09IEFyaXRoUG93IHx8IG9wKCkgPT0gRG91
YmxlQXNJbnQzMikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQgJiB+Tm9kZUJ5dGVjb2RlTmVlZHNOZWdaZXJvOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA2NWNiMzk5ZjFiMDVkMWVhN2I2YTU4YTVhMjY2
ZTk3MWY5Y2Q2OTIwLi44YTBlYTgxYTYyZGJkYTU1MGU5M2ZiZjFjODM5NjE2ZGMyODZjNWViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC0xMzQsNiArMTM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEFyaXRoTWluLCBO
b2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhNYXgsIE5vZGVSZXN1bHROdW1iZXIp
IFwKICAgICBtYWNybyhBcml0aEZSb3VuZCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3Jv
KEFyaXRoUG93LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhTcXJ0LCBOb2Rl
UmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhTaW4sIE5vZGVSZXN1bHROdW1iZXIpIFwK
ICAgICBtYWNybyhBcml0aENvcywgTm9kZVJlc3VsdE51bWJlcikgXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAppbmRleCBkMWE2ZTRkY2QzZWRhZWI2NzNhYWMyNGNlOGQxMzY1YjY5Njk5OWVhLi5lMGM1
NDQ0Yjc4ZWQzOGUxZjgzY2Y5NDRiNDEyODQ1OWUxMTQxN2EyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcApAQCAtMzIxLDcgKzMyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBBcml0
aFBvdzoKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6
CiAgICAgICAgIGNhc2UgQXJpdGhTaW46CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCmluZGV4IDhlOGFlMDc3ZDYzYjBlNjAwZTY4NjZkY2FhMjcxZWZhYmM4
NzM3ODEuLmM4NDUxM2FkOGE3YmM4NzJjNmIxMTc0MGQ3M2Q2Zjk1Yjk3NDg5ZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0xNTAsNiArMTUw
LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aE1p
bjoKICAgICBjYXNlIEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0
aFNxcnQ6CiAgICAgY2FzZSBBcml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoU2luOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCAzOGU2
NjE3MWQ0NjA2NmVhNjMwN2I4ZDQzNTczNzdlNzZjOTkyNzhhLi43NDc4ODY1NDY5MzgwZDkzYjIw
NmI2MWFkMDQzODI1ZWVmODRkNDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzU2MCw2ICszNTYwLDkyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aFNxcnQoTm9kZSogbm9kZSkKICAgICB9CiB9CiAKKy8vIEZv
ciBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyAsIGl0IGlzIHdvcnRoIGRvaW5nIGEgdGlueSBpbmxp
bmUgbG9vcCB0byBleHBvbmVudGlhdGUgdGhlIGJhc2UuCisvLyBFdmVyeSByZWdpc3RlciBpcyBj
bG9iYmVyZWQgYnkgdGhpcyBoZWxwZXIuCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY29t
cGlsZUFyaXRoUG93SW50ZWdlckZhc3RQYXRoKEpJVENvbXBpbGVyJiBhc3NlbWJsZXIsIEZQUlJl
ZyB4T3BlcmFuZCwgR1BSUmVnIHlPcGVyYW5kLCBGUFJSZWcgcmVzdWx0KQoreworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBza2lwRmFzdFBhdGg7CisgICAgc2tpcEZhc3RQYXRoLmFwcGVu
ZChhc3NlbWJsZXIuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCB5T3BlcmFuZCwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworICAgIHNraXBGYXN0UGF0aC5hcHBl
bmQoYXNzZW1ibGVyLmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgeU9wZXJh
bmQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMTAwMCkpKTsKKworICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CisgICAgYXNzZW1ibGVyLmxvYWREb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJm9uZUNvbnN0YW50KSwgcmVzdWx0KTsKKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzdGFydExvb3AoYXNzZW1ibGVyLmxhYmVsKCkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4cG9uZW50SXNFdmVuID0gYXNzZW1ibGVyLmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgeU9wZXJhbmQsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSkpOworICAgIGFzc2VtYmxlci5tdWxEb3VibGUoeE9wZXJhbmQsIHJlc3Vs
dCk7CisgICAgZXhwb25lbnRJc0V2ZW4ubGluaygmYXNzZW1ibGVyKTsKKyAgICBhc3NlbWJsZXIu
bXVsRG91YmxlKHhPcGVyYW5kLCB4T3BlcmFuZCk7CisgICAgYXNzZW1ibGVyLnJzaGlmdDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHlPcGVyYW5kKTsKKyAgICBhc3NlbWJsZXIu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB5T3BlcmFuZCkubGlua1RvKHN0
YXJ0TG9vcCwgJmFzc2VtYmxlcik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lwU2xv
d1BhdGggPSBhc3NlbWJsZXIuanVtcCgpOworICAgIHNraXBGYXN0UGF0aC5saW5rKCZhc3NlbWJs
ZXIpOworCisgICAgcmV0dXJuIHNraXBTbG93UGF0aDsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoUG93KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmNoaWxkMigp
LnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkgeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IHhPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIHlPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSUmVnIHhP
cGVyYW5kZnByID0geE9wZXJhbmQuZnByKCk7CisgICAgICAgIEdQUlJlZyB5T3BlcmFuZEdwciA9
IHlPcGVyYW5kLmdwcigpOworICAgICAgICBGUFJUZW1wb3JhcnkgeU9wZXJhbmRmcHIodGhpcyk7
CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBGUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgICAgICBGUFJSZWcgcmVzdWx0RnByID0gcmVzdWx0LmZwcigpOworCisgICAg
ICAgIEZQUlRlbXBvcmFyeSB4T3BlcmFuZENvcHkodGhpcyk7CisgICAgICAgIEZQUlJlZyB4T3Bl
cmFuZENvcHlGcHIgPSB4T3BlcmFuZENvcHkuZnByKCk7CisgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUoeE9wZXJhbmRmcHIsIHhPcGVyYW5kQ29weUZwcik7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IGNvdW50ZXIodGhpcyk7CisgICAgICAgIEdQUlJlZyBjb3VudGVyR3ByID0gY291bnRlci5ncHIo
KTsKKyAgICAgICAgbV9qaXQubW92ZSh5T3BlcmFuZEdwciwgY291bnRlckdwcik7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2tpcEZhbGxiYWNrID0gY29tcGlsZUFyaXRoUG93SW50
ZWdlckZhc3RQYXRoKG1faml0LCB4T3BlcmFuZENvcHlGcHIsIGNvdW50ZXJHcHIsIHJlc3VsdEZw
cik7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHlPcGVyYW5kR3ByLCB5T3Bl
cmFuZGZwci5mcHIoKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWF0aFBvdywg
cmVzdWx0RnByLCB4T3BlcmFuZGZwciwgeU9wZXJhbmRmcHIuZnByKCkpOworCisgICAgICAgIHNr
aXBGYWxsYmFjay5saW5rKCZtX2ppdCk7CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGcHIs
IG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCB4T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCB5T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgRlBSUmVnIHhPcGVy
YW5kZnByID0geE9wZXJhbmQuZnByKCk7CisgICAgRlBSUmVnIHlPcGVyYW5kZnByID0geU9wZXJh
bmQuZnByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgRlBSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICBGUFJSZWcgcmVzdWx0RnByID0gcmVzdWx0LmZwcigpOworCisgICAgRlBS
VGVtcG9yYXJ5IHhPcGVyYW5kQ29weSh0aGlzKTsKKyAgICBGUFJSZWcgeE9wZXJhbmRDb3B5RnBy
ID0geE9wZXJhbmRDb3B5LmZwcigpOworCisgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CisgICAgRlBSUmVnIHNjcmF0Y2hGcHIgPSBzY3JhdGNoLmZwcigpOworCisgICAgR1BSVGVtcG9y
YXJ5IHlPcGVyYW5kSW50ZWdlcih0aGlzKTsKKyAgICBHUFJSZWcgeU9wZXJhbmRJbnRlZ2VyR3By
ID0geU9wZXJhbmRJbnRlZ2VyLmdwcigpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsZWRFeHBvbmVudENvbnZlcnNpb25Ub0ludGVnZXI7CisgICAgbV9qaXQuYnJhbmNoQ29udmVy
dERvdWJsZVRvSW50MzIoeU9wZXJhbmRmcHIsIHlPcGVyYW5kSW50ZWdlckdwciwgZmFpbGVkRXhw
b25lbnRDb252ZXJzaW9uVG9JbnRlZ2VyLCBzY3JhdGNoRnByLCBmYWxzZSk7CisKKyAgICBtX2pp
dC5tb3ZlRG91YmxlKHhPcGVyYW5kZnByLCB4T3BlcmFuZENvcHlGcHIpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNraXBGYWxsYmFjayA9IGNvbXBpbGVBcml0aFBvd0ludGVnZXJGYXN0UGF0
aChtX2ppdCwgeE9wZXJhbmRDb3B5RnByLCB5T3BlcmFuZEludGVnZXIuZ3ByKCksIHJlc3VsdEZw
cik7CisgICAgZmFpbGVkRXhwb25lbnRDb252ZXJzaW9uVG9JbnRlZ2VyLmxpbmsoJm1faml0KTsK
KworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWF0aFBvdywgcmVzdWx0RnByLCB4T3BlcmFu
ZGZwciwgeU9wZXJhbmRmcHIpOworICAgIHNraXBGYWxsYmFjay5saW5rKCZtX2ppdCk7CisgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdEZwciwgbm9kZSk7Cit9CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCiBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggM2I3YzVkMDBiNzc4
NzRlNDk2NjQzOWUwNmQ5NGRkNmQ2YmJiMTViNS4uMzNjNzc3ZTQ3ZmMyNWY4M2NlMjRmNGJmMDQz
ZmFkZjEzNTlhZTQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaApAQCAtMjEzNCw2ICsyMTM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGls
ZUFyaXRoTXVsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUFyaXRoUG93KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggYjgxMDU5M2E1MzI0ZTU5NWRl
NGNkOTdmZWYzZjlhODA2MDFjNGQ5Yy4uNmJmNmI4NmY4YzJiMzMwYTdjMWFlYTIyY2I5ZWZiMzky
N2Y0N2M0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0xOTk2LDYgKzE5OTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBj
YXNlIEFyaXRoUG93OiB7CisgICAgICAgIGNvbXBpbGVBcml0aFBvdyhub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBBcml0aEFiczogewogICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIEludDMyVXNlOiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRl
eCBjZTA2N2E5OTVlYmM3NzUxMzc5OTk5ZjYzYjAyZmFiZjA0ODczMDlmLi42YjEyM2E3NTc4YzJh
YjIyYjE0NDA4Yjk5YTE5MGY3Y2MzNGRkNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTIyNDEsNiArMjI0MSwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAgIGNvbXBpbGVBcml0aFBvdyhub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEFyaXRoU3FydDoKICAgICAgICAgY29tcGls
ZUFyaXRoU3FydChub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAppbmRleCBjZTFl
Mjk0NDAyYWVkZTU1MTNjZWQwYjY0MjZiZDNhMDkzOGFkNDhlLi41ZTMwZGZlM2I3ZTJlMjAyMmM3
YjM1OGNjM2QyNDUwMDNmM2NjM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTEzMiw3ICsxMzIsMjAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAorCisgICAgICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAg
ICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aXNOdW1iZXJDb25zdGFudCgpKSB7CisgICAgICAg
ICAgICAgICAgZG91YmxlIHlPcGVyYW5kVmFsdWUgPSBtX25vZGUtPmNoaWxkMigpLT5hc051bWJl
cigpOworICAgICAgICAgICAgICAgIGlmICh5T3BlcmFuZFZhbHVlID09IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQxKCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICh5T3BlcmFuZFZhbHVlID09IDAuNSkgeworICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG1fbm9kZUluZGV4LCBTcGVjTm9uZSwgUGhhbnRv
bSwgbV9ub2RlLT5vcmlnaW4sIG1fbm9kZS0+Y2hpbGRyZW4pOworICAgICAgICAgICAgICAgICAg
ICBtX25vZGUtPmNvbnZlcnRUb0FyaXRoU3FydCgpOworICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgICAgICBp
ZiAoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBtX2dyYXBoLnRyeUdldEZvbGRhYmxlVmlld0Zv
ckNoaWxkMShtX25vZGUpKQogICAgICAgICAgICAgICAgIGZvbGRUeXBlZEFycmF5UHJvcGVydHlU
b0NvbnN0YW50KHZpZXcsIGpzTnVtYmVyKHZpZXctPmxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IGQ0MzhjZmNhOWQwZTVhMzAyMzNiNDVi
NWFmNWUxMjJkNTU5ZTBlYmUuLjdkN2I1MDY4NTNhODhiMjgzYjk5MDVlYjcwYTY0ZTQ4NjdkZDU5
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC0yNDAs
NiArMjQwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAg
ICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4
OgorICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgICAgICAgICAgICAgY2FzZSBD
b21wYXJlTGVzczoKICAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAg
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA1YjlmN2FhNTE4Y2EyNmNhYjIwYWI0YTQ1ZGEz
NjFjYTZjZTA4ZjcwLi4yNDhiZGY1MmU3OWEyZTNhNTc0YTUyMjM4YjI1MTE2OTk2Mjk0MzBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC04
OSw2ICs4OSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNlIEFyaXRo
Q29zOgorICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgY2FzZSBB
cml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoTmVnYXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAppbmRleCBkMjI3NzkyMWZlOTNi
NTNhZjQ2MzdlMDliNzRjNDVmYjRjNmY4NzFjLi5mMjg0ZThkMThlY2FiM2FkN2E3ZmQ1NDE2NWZm
ZTk4ZmY2YzkxYmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaApAQCAtNDAsNiArNDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oZG91YmxlQWJzLCAibGx2bS5mYWJzLmY2NCIsIGZ1bmN0
aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAogICAgIG1hY3JvKGRvdWJsZVNpbiwg
Imxsdm0uc2luLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAog
ICAgIG1hY3JvKGRvdWJsZUNvcywgImxsdm0uY29zLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVU
eXBlLCBkb3VibGVUeXBlKSkgXAorICAgIG1hY3JvKGRvdWJsZVBvdywgImxsdm0ucG93LmY2NCIs
IGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAorICAg
IG1hY3JvKGRvdWJsZVBvd2ksICJsbHZtLnBvd2kuZjY0IiwgZnVuY3Rpb25UeXBlKGRvdWJsZVR5
cGUsIGRvdWJsZVR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKGRvdWJsZVNxcnQsICJsbHZtLnNx
cnQuZjY0IiwgZnVuY3Rpb25UeXBlKGRvdWJsZVR5cGUsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFj
cm8oZnJhbWVBZGRyZXNzLCAibGx2bS5mcmFtZWFkZHJlc3MiLCBmdW5jdGlvblR5cGUocG9pbnRl
clR5cGUoaW50OCksIGludDMyKSkgXAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzMyLCAibGx2
bS5zbXVsLndpdGgub3ZlcmZsb3cuaTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250
ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGludDMyLCBpbnQzMikpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKaW5kZXggZTU3NTM3Yzc5M2Y0Y2M5
NWUyYWM2Y2E2MTg5ZDc5MmQ1N2FjYmJiYS4uNjJjMjA3NDE1MzRmMTFkMTIyYmEyYWZjM2UzZDk3
ODU0NTFkOGNjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKQEAgLTQzNiw2ICs0MzYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFy
aXRoQ29zOgogICAgICAgICAgICAgY29tcGlsZUFyaXRoQ29zKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcml0aFBvdzoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0aFBvdygp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICAg
ICAgY29tcGlsZUFyaXRoU3FydCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTk1LDYgKzE1
OTgsNjQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZUFyaXRoQ29zKCkgeyBzZXREb3Vi
bGUobV9vdXQuZG91YmxlQ29zKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9CiAKKyAg
ICB2b2lkIGNvbXBpbGVBcml0aFBvdygpCisgICAgeworICAgICAgICAvLyBGSVhNRTogaW52ZXN0
aWdhdGUgbGx2bS5wb3dpIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyBwZXJmb3JtYW5jZSBjaGFy
YWN0ZXJpc3RpY3MuCisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0byBoYXZlIHRoZSBp
bmxpbmUgbG9vcCBpbiBERkcgdG9vLgorICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UpCisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlUG93
aShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25lbnQgPSBsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludGVnZXJF
eHBvbmVudElzU21hbGxCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgdGVz
dCBpbnRlZ2VyIGV4cG9uZW50IGlzIHNtYWxsLiIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGludGVnZXJFeHBvbmVudFBvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBv
dyBwb3coZG91YmxlLCAoaW50KWRvdWJsZSkuIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
ZG91YmxlRXhwb25lbnRQb3dCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cg
cG93KGRvdWJsZSwgZG91YmxlKS4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBwb3dCbG9j
ayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgcmVndWxhciBwb3ciKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBuYW5FeGNlcHRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFyaXRoUG93IE5hTiBFeGNlcHRpb24iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudCA9IG1fb3V0LmZwVG9JbnQz
MihleHBvbmVudCk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4cG9uZW50Q29udmVydGVk
VG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2VyRXhwb25lbnQpOworICAgICAgICAg
ICAgTFZhbHVlIGV4cG9uZW50SXNJbnRlZ2VyID0gbV9vdXQuZG91YmxlRXF1YWwoZXhwb25lbnQs
IGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91YmxlKTsKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChleHBvbmVudElzSW50ZWdlciwgdW5zdXJlKGludGVnZXJFeHBvbmVudElzU21hbGxCbG9j
ayksIHVuc3VyZShkb3VibGVFeHBvbmVudFBvd0Jsb2NrKSk7CisKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50SXNTbWFsbEJs
b2NrLCBpbnRlZ2VyRXhwb25lbnRQb3dCbG9jayk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdl
ckV4cG9uZW50QmVsb3cxMDAwID0gbV9vdXQuYmVsb3coaW50ZWdlckV4cG9uZW50LCBtX291dC5j
b25zdEludDMyKDEwMDApKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpbnRlZ2VyRXhwb25l
bnRCZWxvdzEwMDAsIHVzdWFsbHkoaW50ZWdlckV4cG9uZW50UG93QmxvY2spLCByYXJlbHkoZG91
YmxlRXhwb25lbnRQb3dCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbnRl
Z2VyRXhwb25lbnRQb3dCbG9jaywgZG91YmxlRXhwb25lbnRQb3dCbG9jayk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBwb3dEb3VibGVJbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
ZG91YmxlUG93aShiYXNlLCBpbnRlZ2VyRXhwb25lbnQpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlRXhw
b25lbnRQb3dCbG9jaywgcG93QmxvY2spOworICAgICAgICAgICAgLy8gSWYgeSBpcyBOYU4sIHRo
ZSByZXN1bHQgaXMgTmFOLgorICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZG4ndCB3ZSBvbmx5
IGNoZWNrIHRoYXQgaWYgdGhlIHR5cGUgb2YgY2hpbGQyKCkgbWlnaHQgaGF2ZSBOYU4/CisgICAg
ICAgICAgICBMVmFsdWUgZXhwb25lbnRJc05hTiA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQoZXhwb25lbnQsIGV4cG9uZW50KTsKKworICAgICAgICAgICAgLy8gSWYgYWJzKHgpIGlz
IDEgYW5kIHkgaXMgK2luZmluaXR5LCB0aGUgcmVzdWx0IGlzIE5hTi4KKyAgICAgICAgICAgIC8v
IElmIGFicyh4KSBpcyAxIGFuZCB5IGlzIC1pbmZpbml0eSwgdGhlIHJlc3VsdCBpcyBOYU4uCisg
ICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudCA9IG1fb3V0LmRvdWJsZUFicyhleHBv
bmVudCk7CisgICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudElzSW5maW5pdHkgPSBt
X291dC5kb3VibGVFcXVhbChhYnNvbHV0ZUV4cG9uZW50LCBtX291dC5jb25zdERvdWJsZShzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBhYnNvbHV0ZUJhc2UgPSBtX291dC5kb3VibGVBYnMoYmFzZSk7CisgICAgICAgICAgICBMVmFs
dWUgYWJzb2x1dGVCYXNlSXNPbmUgPSBtX291dC5kb3VibGVFcXVhbChhYnNvbHV0ZUJhc2UsIG1f
b3V0LmNvbnN0RG91YmxlKDEpKTsKKyAgICAgICAgICAgIExWYWx1ZSBvbmVCYXNlSW5maW5pdGVF
eHBvbmVudCA9IG1fb3V0LmJpdEFuZChhYnNvbHV0ZUV4cG9uZW50SXNJbmZpbml0eSwgYWJzb2x1
dGVCYXNlSXNPbmUpOworCisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYml0T3IoZXhw
b25lbnRJc05hTiwgb25lQmFzZUluZmluaXRlRXhwb25lbnQpLCByYXJlbHkobmFuRXhjZXB0aW9u
KSwgdXN1YWxseShwb3dCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhwb3dC
bG9jaywgbmFuRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcihtX291dC5kb3VibGVQb3coYmFzZSwgZXhwb25lbnQpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obmFuRXhjZXB0aW9uLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgcHVyZU5hbiA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZShQTmFOKSk7Cisg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBwb3dEb3VibGVJbnRSZXN1bHQsIHBvd1Jlc3Vs
dCwgcHVyZU5hbikpOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlQXJpdGhT
cXJ0KCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlU3FydChsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSkpKTsgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUFyaXRoRlJvdW5kKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM3MGQ4Y2Q5NzZhNTU5ZWI2OGYzYzUwMmRm
NGI4OWQyNzFjMWM3MTUuLmFmODJjYmRkNjY1YWY1ZmRiNmQwNjI1YTliMmNjM2EyZmRhZWRmOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMTc3LDYgKzE3NywxNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjYWxsKGRvdWJsZUNvc0ludHJpbnNpYygpLCB2YWx1
ZSk7CiAgICAgfQogCisgICAgTFZhbHVlIGRvdWJsZVBvdyhMVmFsdWUgeE9wZXJhbmQsIExWYWx1
ZSB5T3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsKGRvdWJsZVBvd0ludHJpbnNp
YygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOworICAgIH0KKworICAgIExWYWx1ZSBkb3VibGVQb3dp
KExWYWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNhbGwoZG91YmxlUG93aUludHJpbnNpYygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOworICAgIH0K
KwogICAgIExWYWx1ZSBkb3VibGVTcXJ0KExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBjYWxsKGRvdWJsZVNxcnRJbnRyaW5zaWMoKSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMjQ0YjRiZTljYzZlMTdlOGFiZWM3
NzNkZDA4NzE5MTExYzQxZDk1Ny4uNzBjNTlkYTdmNTc4MmJmMGE4M2NiYzI0N2JhYWM2NDQxZDRk
MThiMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC0xMjEzLDYgKzEyMTMsNTIgQEAgU2xvd1BhdGhSZXR1cm5UeXBlIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uT3B0aW1pemUoRXhlY1N0YXRlKiBleGVjLCBpbnQzMl90IGJ5dGUKIH0KICNlbmRpZgog
CisjaWYgUExBVEZPUk0oSU9TKSAmJiBDUFUoQVJNX1RIVU1CMikKKworc3RhdGljIGRvdWJsZSBm
ZGxpYm1Qb3coZG91YmxlIHgsIGRvdWJsZSB5KTsKKworc3RhdGljIEFMV0FZU19JTkxJTkUgYm9v
bCBpc0Rlbm9ybWFsKGRvdWJsZSB4KQoreworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBzaWdu
Yml0ID0gMHg4MDAwMDAwMDAwMDAwMDAwVUxMOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBt
aW5Ob3JtYWwgPSAweDAwMDEwMDAwMDAwMDAwMDBVTEw7CisgICAgcmV0dXJuIChiaXR3aXNlX2Nh
c3Q8dWludDY0X3Q+KHgpICYgfnNpZ25iaXQpIC0gMSA8IG1pbk5vcm1hbCAtIDE7Cit9CisKK3N0
YXRpYyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFZGdlQ2FzZShkb3VibGUgeCkKK3sKKyAgICBzdGF0
aWMgY29uc3QgdWludDY0X3Qgc2lnbmJpdCA9IDB4ODAwMDAwMDAwMDAwMDAwMFVMTDsKKyAgICBz
dGF0aWMgY29uc3QgdWludDY0X3QgaW5maW5pdHkgPSAweDdmZmZmZmZmZmZmZmZmZmZVTEw7Cisg
ICAgcmV0dXJuIChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpICYgfnNpZ25iaXQpIC0gMSA+PSBp
bmZpbml0eSAtIDE7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGRvdWJsZSBtYXRoUG93SW50
ZXJuYWwoZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIGlmICghaXNEZW5vcm1hbCh4KSAmJiAh
aXNEZW5vcm1hbCh5KSkgeworICAgICAgICBkb3VibGUgbGlibVJlc3VsdCA9IHBvdyh4LCB5KTsK
KyAgICAgICAgaWYgKGxpYm1SZXN1bHQgfHwgaXNFZGdlQ2FzZSh4KSB8fCBpc0VkZ2VDYXNlKHkp
KQorICAgICAgICAgICAgcmV0dXJuIGxpYm1SZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBmZGxp
Ym1Qb3coeCwgeSk7Cit9CisKKyNlbHNlCisKK0FMV0FZU19JTkxJTkUgZG91YmxlIG1hdGhQb3dJ
bnRlcm5hbChkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgcmV0dXJuIHBvdyh4LCB5KTsKK30K
KworI2VuZGlmCisKK2RvdWJsZSBKU0NfSE9TVF9DQUxMIG9wZXJhdGlvbk1hdGhQb3coZG91Ymxl
IHgsIGRvdWJsZSB5KQoreworICAgIGlmIChzdGQ6OmlzbmFuKHkpKQorICAgICAgICByZXR1cm4g
UE5hTjsKKyAgICBpZiAoc3RkOjppc2luZih5KSAmJiBmYWJzKHgpID09IDEpCisgICAgICAgIHJl
dHVybiBQTmFOOworICAgIHJldHVybiBtYXRoUG93SW50ZXJuYWwoeCwgeSk7Cit9CisKIHZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRCeUluZGV4KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZEFycmF5VmFsdWUsIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVl
IGVuY29kZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCA3NjdlYTViYjU1MjdkZWM3ZGQ1ZTEw
ZDdjY2ZkMmQ2Mjk3NTE5M2EzLi5kNGVjNmExYTNmMjdhMWU2OGFmMzJkMGFlMzE2NWRhZTEyN2Jl
YjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMu
aAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjgx
LDYgKzI4MSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWJ1ZyhFeGVjU3RhdGUq
LCBpbnQzMl90KSBXVEZfSU5URVJOQUw7CiAjaWYgRU5BQkxFKERGR19KSVQpCiBTbG93UGF0aFJl
dHVyblR5cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShFeGVjU3RhdGUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7CiAjZW5kaWYKK2RvdWJsZSBKU0NfSE9TVF9DQUxMIG9wZXJhdGlv
bk1hdGhQb3coZG91YmxlIHgsIGRvdWJsZSB5KSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50
MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBJZGVudGlmaWVyKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJO
QUw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCmluZGV4
IDY0YTVhN2E2ZGQ3ZmNjMWEyMTZlNjMxODFlMTQxNzE3ZGY2MDNkNGIuLjZhOTQyY2E1ZjRhN2Ri
Y2VmZTcxYzJhNGI2MzAwZWYxNjgzYjkzNjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hdGhPYmplY3QuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiTWF0aE9iamVjdC5oIgogCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5o
IgogI2luY2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2lu
Y2x1ZGUgIkpTQ0lubGluZXMuaCIKQEAgLTI0Miw0MyArMjQzLDYgQEAgRW5jb2RlZEpTVmFsdWUg
SlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1
cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdCkpOwogfQogCi0jaWYgUExBVEZPUk0o
SU9TKSAmJiBDUFUoQVJNX1RIVU1CMikKLQotc3RhdGljIGRvdWJsZSBmZGxpYm1Qb3coZG91Ymxl
IHgsIGRvdWJsZSB5KTsKLQotc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Rlbm9ybWFsKGRv
dWJsZSB4KQotewotICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qgc2lnbmJpdCA9IDB4ODAw
MDAwMDAwMDAwMDAwMFVMTDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IG1pbk5vcm1h
bCA9IDB4MDAwMTAwMDAwMDAwMDAwMFVMTDsKLSAgICAgICAgcmV0dXJuIChiaXR3aXNlX2Nhc3Q8
dWludDY0X3Q+KHgpICYgfnNpZ25iaXQpIC0gMSA8IG1pbk5vcm1hbCAtIDE7Ci19Ci0KLXN0YXRp
YyBBTFdBWVNfSU5MSU5FIGJvb2wgaXNFZGdlQ2FzZShkb3VibGUgeCkKLXsKLSAgICAgICAgc3Rh
dGljIGNvbnN0IHVpbnQ2NF90IHNpZ25iaXQgPSAweDgwMDAwMDAwMDAwMDAwMDBVTEw7Ci0gICAg
ICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBpbmZpbml0eSA9IDB4N2ZmZmZmZmZmZmZmZmZmZlVM
TDsKLSAgICAgICAgcmV0dXJuIChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpICYgfnNpZ25iaXQp
IC0gMSA+PSBpbmZpbml0eSAtIDE7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGRvdWJsZSBt
YXRoUG93KGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLSAgICBpZiAoIWlzRGVub3JtYWwoeCkgJiYg
IWlzRGVub3JtYWwoeSkpIHsKLSAgICAgICAgZG91YmxlIGxpYm1SZXN1bHQgPSBwb3coeCx5KTsK
LSAgICAgICAgaWYgKGxpYm1SZXN1bHQgfHwgaXNFZGdlQ2FzZSh4KSB8fCBpc0VkZ2VDYXNlKHkp
KQotICAgICAgICAgICAgcmV0dXJuIGxpYm1SZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBmZGxp
Ym1Qb3coeCx5KTsKLX0KLQotI2Vsc2UKLQotQUxXQVlTX0lOTElORSBkb3VibGUgbWF0aFBvdyhk
b3VibGUgeCwgZG91YmxlIHkpCi17Ci0gICAgcmV0dXJuIHBvdyh4LCB5KTsKLX0KLQotI2VuZGlm
Ci0KIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1BvdyhFeGVjU3Rh
dGUqIGV4ZWMpCiB7CiAgICAgLy8gRUNNQSAxNS44LjIuMS4xMwpAQCAtMjg2LDExICsyNTAsNyBA
QCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRl
KiBleGVjKQogICAgIGRvdWJsZSBhcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVj
KTsKICAgICBkb3VibGUgYXJnMiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpOwog
Ci0gICAgaWYgKHN0ZDo6aXNuYW4oYXJnMikpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoanNOYU4oKSk7Ci0gICAgaWYgKHN0ZDo6aXNpbmYoYXJnMikgJiYgZmFicyhhcmcpID09IDEp
Ci0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc051bWJlcihtYXRoUG93KGFyZywgYXJnMikpKTsKKyAgICByZXR1cm4g
SlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUob3BlcmF0aW9uTWF0aFBvdyhhcmcsIGFyZzIpKSk7CiB9
CiAKIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVj
U3RhdGUqIGV4ZWMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL21hdGgtcG93LWJhc2ljcy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvbWF0aC1wb3ctYmFzaWNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkZjE5ODg0NDA3ZTg2MmY1ODMyYWUz
YTQ0ODhkMzI1YTZjZDdmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LWJhc2ljcy5qcwpAQCAtMCwwICsxLDI4NiBAQAorZnVu
Y3Rpb24gdmFsdWVzQXJlQ2xvc2UoYSwgYikgeworICAgIHJldHVybiBNYXRoLmFicyhhIC8gYikg
LSAxIDwgMWUtMTA7Cit9CisKKy8vIFNvbWUgcmFuZG9tIHZhbHVlcy4KK2Z1bmN0aW9uIG1hdGhQ
b3dEb3VibGVEb3VibGUxKHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25v
SW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGUxKTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUlu
dDEoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBv
d0RvdWJsZUludDEpOworCitmdW5jdGlvbiB0ZXN0MSh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVk
MikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTEoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVz
QXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlMSgiICsgeCArICIsICIgKyB5ICsgIikgPSAi
ICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7Cisg
ICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDEoeCwg
aW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQy
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUlu
dDEoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVk
IGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0
MSk7Cit0ZXN0MSgzNzYuNzY1MjI3NjQzNzcyOTYsIDEwLjgxNjk5MjI2MDUxNTY5LCA3LjMzMzk1
MTkyOTEwOTI1MmUrMjcsIDUuNzYzNzg5ODk1NzUwODllKzI1KTsKKworZnVuY3Rpb24gbWF0aFBv
d0RvdWJsZURvdWJsZTIoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9J
bmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZTIpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50
Mih4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93
RG91YmxlSW50Mik7CitmdW5jdGlvbiB0ZXN0Mih4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikg
eworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVz
dWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTIoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJl
Q2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlMigiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsg
cmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAg
fQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDIoeCwgaW50
ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkK
KyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDIo
IiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEg
dmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0Mik7
Cit0ZXN0MigzNzYuNzY1MjI3NjQzNzcyOTYsIC01LjgxNjk5MjI2MDUxNTY5LCAxLjAzNTE4MDMz
MTE4NzU3OWUtMTUsIDEuMzE3MTgyNDMxMDQwMDI2NWUtMTMpOworCitmdW5jdGlvbiBtYXRoUG93
RG91YmxlRG91YmxlMyh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lu
bGluZShtYXRoUG93RG91YmxlRG91YmxlMyk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQz
KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dE
b3VibGVJbnQzKTsKK2Z1bmN0aW9uIHRlc3QzKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBtYXRoUG93RG91YmxlRG91YmxlMyh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVD
bG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGUzKCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyBy
ZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9
CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50Myh4LCBpbnRl
Z2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQor
ICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50Mygi
ICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2
YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3QzKTsK
K3Rlc3QzKC0zNy42NzY1MjI3NjQzNzcyOTYsIDEwLjAsIDU3NjM3ODk4OTU3NTA4OTIsIDU3NjM3
ODk4OTU3NTA4OTIpOworCisvLyBFeHBvbmVudCB6ZXJvLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJs
ZURvdWJsZTQoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUo
bWF0aFBvd0RvdWJsZURvdWJsZTQpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50NCh4LCB5
KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91Ymxl
SW50NCk7CitmdW5jdGlvbiB0ZXN0NCh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
bWF0aFBvd0RvdWJsZURvdWJsZTQoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2Uo
cmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
LCBtYXRoUG93RG91YmxlRG91YmxlNCgiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0
ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAg
IHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDQoeCwgaW50ZWdlclkp
OworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDQoIiArIHgg
KyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUg
Y2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0NCk7Cit0ZXN0
NCgtMzcuNjc2NTIyNzY0Mzc3Mjk2LCAwLCAxLCAxKTsKKworLy8gRXhwb25lbnQgbWludXMgemVy
by4KK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGU1KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0
aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGU1KTsKKworZnVuY3Rp
b24gbWF0aFBvd0RvdWJsZUludDUoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQor
fQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludDUpOworZnVuY3Rpb24gdGVzdDUoeCwgeSwgZXhw
ZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGU1KHgsIHkpOworICAg
ICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZTUoIiArIHggKyAi
LCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAi
ICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQ
b3dEb3VibGVJbnQ1KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShy
ZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQs
IG1hdGhQb3dEb3VibGVJbnQoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1
bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9
Citub0lubGluZSh0ZXN0NSk7Cit0ZXN0NSgtMzcuNjc2NTIyNzY0Mzc3Mjk2LCAtMCwgMSwgMSk7
CisKKy8vIEV4cG9uZW50IDEuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlNih4LCB5KSB7
CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91
YmxlNik7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ2KHgsIHkpIHsKKyAgICByZXR1cm4g
TWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ2KTsKK2Z1bmN0aW9u
IHRlc3Q2KHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91
YmxlNih4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVk
MSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVE
b3VibGU2KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEg
dmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0g
eSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50Nih4LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICgh
dmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50NigiICsgeCArICIsICIgKyBpbnRlZ2Vy
WSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhw
ZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3Q2KTsKK3Rlc3Q2KC0zNy42NzY1MjI3NjQz
NzcyOTYsIDEuMCwgLTM3LjY3NjUyMjc2NDM3NzI5NiwgLTM3LjY3NjUyMjc2NDM3NzI5Nik7CisK
Ky8vIEV4cG9uZW50IC0xLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTcoeCwgeSkgewor
ICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJs
ZTcpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50Nyh4LCB5KSB7CisgICAgcmV0dXJuIE1h
dGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50Nyk7CitmdW5jdGlvbiB0
ZXN0Nyh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJs
ZTcoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEp
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91
YmxlNygiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZh
bHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkg
fCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTcoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAo
IXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZTcoIiArIHggKyAiLCAiICsgaW50
ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiAr
IGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0Nyk7Cit0ZXN0NigtMzcuNjc2NTIy
NzY0Mzc3Mjk2LCAtMS4wLCAtMC4wMjY1NDE3Mjc0OTA0NTQyOTYsIC0wLjAyNjU0MTcyNzQ5MDQ1
NDI5Nik7CisKKy8vIExldCdzIHNxdWFyZSB0aGluZ3MuCitmdW5jdGlvbiBtYXRoUG93RG91Ymxl
RG91YmxlOCh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZSht
YXRoUG93RG91YmxlRG91YmxlOCk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ4KHgsIHkp
IHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJ
bnQ4KTsKK2Z1bmN0aW9uIHRlc3Q4KHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBt
YXRoUG93RG91YmxlRG91YmxlOCh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShy
ZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQs
IG1hdGhQb3dEb3VibGVEb3VibGU4KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQg
KyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAg
dmFyIGludGVnZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50OCh4LCBpbnRlZ2VyWSk7
CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50OCgiICsgeCAr
ICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBj
bG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3Q4KTsKK3Rlc3Q3
KC0zNy42NzY1MjI3NjQzNzcyOTYsIDIuMCwgMTQxOS41MjAzNjc2MTQ2NDA3LCAxNDE5LjUyMDM2
NzYxNDY0MDcpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlOSh4LCB5KSB7CisgICAg
cmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlOSk7
CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ5KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5w
b3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ5KTsKK2Z1bmN0aW9uIHRlc3Q5
KHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlOSh4
LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGU5
KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUg
Y2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBtYXRoUG93RG91YmxlSW50OSh4LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICghdmFsdWVz
QXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50OSgiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIp
ID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQy
OworICAgIH0KK30KK25vSW5saW5lKHRlc3Q5KTsKK3Rlc3Q4KDM3LjY3NjUyMjc2NDM3NzI5Niwg
Mi4wLCAxNDE5LjUyMDM2NzYxNDY0MDcsIDE0MTkuNTIwMzY3NjE0NjQwNyk7CisKKy8vIExldCdz
IGN1YmUgdGhpbmdzLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTEwKHgsIHkpIHsKKyAg
ICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGUx
MCk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQxMCh4LCB5KSB7CisgICAgcmV0dXJuIE1h
dGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50MTApOworZnVuY3Rpb24g
dGVzdDEwKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91
YmxlMTAoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3Rl
ZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91Ymxl
RG91YmxlKCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEg
dmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0g
eSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50MTAoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAo
IXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludCgiICsgeCArICIsICIgKyBpbnRlZ2Vy
WSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhw
ZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3Q5KTsKK3Rlc3Q5KC0zNy42NzY1MjI3NjQz
NzcyOTYsIDMuMCwgLTUzNDgyLjU5MTQ0NDkzMDIzNiwgLTUzNDgyLjU5MTQ0NDkzMDIzNik7CisK
K2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGUxMSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgu
cG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlMTEpOworCitmdW5jdGlv
biBtYXRoUG93RG91YmxlSW50MTEoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQor
fQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludDExKTsKK2Z1bmN0aW9uIHRlc3QxMSh4LCB5LCBl
eHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTExKHgsIHkpOwor
ICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZSgiICsgeCAr
ICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRv
ICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0
aFBvd0RvdWJsZUludDExKHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9z
ZShyZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQsIG1hdGhQb3dEb3VibGVJbnQoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyBy
ZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9
Cit9Citub0lubGluZSh0ZXN0MTApOwordGVzdDEwKDM3LjY3NjUyMjc2NDM3NzI5NiwgMy4wLCA1
MzQ4Mi41OTE0NDQ5MzAyMzYsIDUzNDgyLjU5MTQ0NDkzMDIzNik7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LWludGVnZXItZXhwb25lbnQt
ZmFzdHBhdGguanMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93
LWludGVnZXItZXhwb25lbnQtZmFzdHBhdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDYwNmM0NGY5NTI1NTg3
YjEwNWU2ZWI2YTcyNWIyMTZjYzFmMzc5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctaW50ZWdlci1leHBvbmVudC1mYXN0cGF0
aC5qcwpAQCAtMCwwICsxLDU2IEBACitmdW5jdGlvbiB2YWx1ZXNBcmVDbG9zZShhLCBiKSB7Cisg
ICAgcmV0dXJuIE1hdGguYWJzKGEgLyBiKSAtIDEgPCAxZS0xMDsKK30KKworLy8gU21hbGwgZXhw
b25lbnQgdmFsdWVzIGFyZSBoYW5kbGVkIHRocm91Z2ggYSBzaW1wbGVyIGlubGluZSBsb29wLiBU
ZXN0IHRoYXQgaXQgaXMgbm90IG9ic2VydmFibGUuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91
YmxlVGVzdEV4cG9uZW50RmlmdHkoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQor
fQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZVRlc3RFeHBvbmVudEZpZnR5KTsKKworZnVu
Y3Rpb24gbWF0aFBvd0RvdWJsZUludFRlc3RFeHBvbmVudEZpZnR5KHgsIHkpIHsKKyAgICByZXR1
cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25l
bnRGaWZ0eSk7CitmdW5jdGlvbiB0ZXN0RXhwb25lbnRGaWZ0eSh4LCB5LCBleHBlY3RlZCkgewor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0
ID0gbWF0aFBvd0RvdWJsZURvdWJsZVRlc3RFeHBvbmVudEZpZnR5KHgsIHkpOworICAgICAgICBp
ZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQpKQorICAgICAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsg
cmVzdWx0ICsgIiBleHBlY3RlZCB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQ7CisgICAgfQor
ICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludFRlc3RFeHBvbmVu
dEZpZnR5KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQs
IGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5w
b3coIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVk
IHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0RXhw
b25lbnRGaWZ0eSk7Cit0ZXN0RXhwb25lbnRGaWZ0eSg1My43MDkwMTE2NDEzMzEwMiwgNTAuMCwg
My4xNzk0OTQxMTgxMjAxNDRlKzg2KTsKK3Rlc3RFeHBvbmVudEZpZnR5KDUzLjcwOTAxMTY0MTMz
MTAyLCAtMTAuMCwgNS4wMDY0MzI4NDI2MjExOTJlLTE4KTsKKworZnVuY3Rpb24gbWF0aFBvd0Rv
dWJsZURvdWJsZVRlc3RFeHBvbmVudFRlblRob3VzYW5kcyh4LCB5KSB7CisgICAgcmV0dXJuIE1h
dGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlVGVzdEV4cG9uZW50
VGVuVGhvdXNhbmRzKTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludFRlc3RFeHBvbmVudFRl
blRob3VzYW5kcyh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGlu
ZShtYXRoUG93RG91YmxlSW50VGVzdEV4cG9uZW50VGVuVGhvdXNhbmRzKTsKK2Z1bmN0aW9uIHRl
c3RFeHBvbmVudFRlblRob3VzYW5kcyh4LCB5LCBleHBlY3RlZCkgeworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJs
ZURvdWJsZVRlc3RFeHBvbmVudFRlblRob3VzYW5kcyh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1
ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdCwgTWF0aC5wb3coIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCAr
ICIgZXhwZWN0ZWQgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkOworICAgIH0KKyAgICB2YXIg
aW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25lbnRUZW5UaG91
c2FuZHMoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwg
ZXhwZWN0ZWQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBv
dygiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQg
dmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkOworICAgIH0KK30KK25vSW5saW5lKHRlc3RFeHBv
bmVudFRlblRob3VzYW5kcyk7Cit0ZXN0RXhwb25lbnRUZW5UaG91c2FuZHMoMS4wMDEsIDEwMDAw
LjAsIDIxOTE2LjY4MTMzOTA0ODM3Myk7Cit0ZXN0RXhwb25lbnRUZW5UaG91c2FuZHMoMS4wMDEs
IC0xLjAsIDAuOTk5MDAwOTk5MDAwOTk5MSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy1u
YW4tYmVoYXZpb3JzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRo
LXBvdy1uYW4tYmVoYXZpb3JzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhN2RkNDQ2NzgwOWZiYzA2YjJiZjM0
ZTE5NWYwYTMxMTIwOThjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LW5hbi1iZWhhdmlvcnMuanMKQEAgLTAsMCArMSw4NSBA
QAorLy8gSWYgeSBpcyBOYU4sIHRoZSByZXN1bHQgaXMgTmFOLgorZnVuY3Rpb24gdGVzdEludGVn
ZXJCYXNlV2l0aE5hTkV4cG9uZW50KCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coNSwgTmFOKTsKKyAgICAgICAg
aWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
LCBNYXRoLnBvdyg1LCBOYU4pID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdyhpLCBO
YU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQsIE1hdGgucG93KGksIE5hTikgPSAiICsgcmVzdWx0ICsgIiB3aXRoIGkg
PSAiICsgaTsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0SW50ZWdlckJhc2VXaXRoTmFORXhwb25l
bnQpOwordGVzdEludGVnZXJCYXNlV2l0aE5hTkV4cG9uZW50KCk7CisKK2Z1bmN0aW9uIHRlc3RG
bG9hdGluZ1BvaW50QmFzZVdpdGhOYU5FeHBvbmVudCgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KDUuNSwgTmFO
KTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0LCBNYXRoLnBvdyg1LjUsIE5hTikgPSAiICsgcmVzdWx0OworICAgIH0KKyAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9
IE1hdGgucG93KGkgKyAxLCBOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KGkgKyAwLjUsIE5hTikg
PSAiICsgcmVzdWx0ICsgIiB3aXRoIGkgPSAiICsgaTsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0
RmxvYXRpbmdQb2ludEJhc2VXaXRoTmFORXhwb25lbnQpOwordGVzdEZsb2F0aW5nUG9pbnRCYXNl
V2l0aE5hTkV4cG9uZW50KCk7CisKKy8vIElmIHkgaXMgKzAsIHRoZSByZXN1bHQgaXMgMSwgZXZl
biBpZiB4IGlzIE5hTi4KKy8vIElmIHkgaXMg4oiSMCwgdGhlIHJlc3VsdCBpcyAxLCBldmVuIGlm
IHggaXMgTmFOLgorLy8gSWYgeCBpcyBOYU4gYW5kIHkgaXMgbm9uemVybywgdGhlIHJlc3VsdCBp
cyBOYU4uCitmdW5jdGlvbiB0ZXN0TmFOQmFzZSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KE5hTiwgaSArIDEp
OworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQsIE1hdGgucG93KE5hTiwgaSArIDEpID0gIiArIHJlc3VsdCArICIgd2l0aCBp
ID0gIiArIGk7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coTmFOLCBpICsgMS41KTsKKyAgICAgICAgaWYg
KCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBN
YXRoLnBvdyhOYU4sIGkgKyAxLjUpID0gIiArIHJlc3VsdCArICIgd2l0aCBpID0gIiArIGk7Cisg
ICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gTWF0aC5wb3coTmFOLCAwKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMSkKKyAg
ICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coTmFOLCAwKSA9ICIg
KyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coTmFOLCAtMCk7CisgICAgICAgIGlmIChyZXN1
bHQgIT09IDEpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93
KE5hTiwgLTApID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0TmFOQmFzZSk7
Cit0ZXN0TmFOQmFzZSgpOworCisvLyBJZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyAr4oieLCB0aGUg
cmVzdWx0IGlzIE5hTi4KKy8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzIOKIkuKIniwgdGhlIHJl
c3VsdCBpcyBOYU4uCitmdW5jdGlvbiBpbmZpbml0ZUV4cG9uZW50cygpIHsKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93
KDEsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coMSwgTnVt
YmVyLlBPU0lUSVZFX0lORklOSVRZKSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3co
LTEsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coLTEsIE51
bWJlci5QT1NJVElWRV9JTkZJTklUWSkgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93
KDEsIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coMSwgTnVt
YmVyLk5FR0FUSVZFX0lORklOSVRZKSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3co
LTEsIE51bWJlci5ORUdBVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coLTEsIE51
bWJlci5ORUdBVElWRV9JTkZJTklUWSkgPSAiICsgcmVzdWx0OworICAgIH0KK30KK25vSW5saW5l
KGluZmluaXRlRXhwb25lbnRzKTsKK2luZmluaXRlRXhwb25lbnRzKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LXdpdGgtY29uc3RhbnRz
LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy13aXRoLWNv
bnN0YW50cy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hNGMxMDhjYmQxOGMxNjdmNjliYmVhNGQzZTlkYjI4MjZk
MDMwZWMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9tYXRoLXBvdy13aXRoLWNvbnN0YW50cy5qcwpAQCAtMCwwICsxLDExNSBAQAorZnVuY3Rp
b24gZXhwb25lbnRJc1plcm8oeCkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCAwKTsKK30KK25v
SW5saW5lKGV4cG9uZW50SXNaZXJvKTsKKworZnVuY3Rpb24gdGVzdEV4cG9uZW50SXNaZXJvKCkg
eworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVz
dWx0ID0gZXhwb25lbnRJc1plcm8oNSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDEpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IHplcm9FeHBvbmVudCg1KSBzaG91bGQgYmUgMSwgd2FzID0g
IiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBleHBvbmVudElzWmVybyg1LjUpOworICAgICAgICBpZiAo
cmVzdWx0ICE9PSAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiB6ZXJvRXhwb25lbnQoNS41
KSBzaG91bGQgYmUgMSwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Cit0ZXN0RXhwb25lbnRJ
c1plcm8oKTsKKworCitmdW5jdGlvbiBleHBvbmVudElzT25lKHgpIHsKKyAgICByZXR1cm4gTWF0
aC5wb3coeCwgMSk7Cit9Citub0lubGluZShleHBvbmVudElzT25lKTsKKworZnVuY3Rpb24gdGVz
dEV4cG9uZW50SXNPbmUoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBleHBvbmVudElzT25lKDUpOworICAgICAgICBpZiAocmVz
dWx0ICE9PSA1KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBleHBvbmVudElzT25lKDUpIHNo
b3VsZCBiZSA1LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGV4cG9uZW50SXNPbmUoNS41
KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNS41KQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBleHBvbmVudElzT25lKDUuNSkgc2hvdWxkIGJlIDUuNSwgd2FzID0gIiArIHJlc3VsdDsKKyAg
ICB9Cit9Cit0ZXN0RXhwb25lbnRJc09uZSgpOworCisKK2Z1bmN0aW9uIHBvd1VzZWRBc1NxcnQo
eCkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCAwLjUpOworfQorbm9JbmxpbmUocG93VXNlZEFz
U3FydCk7CisKK2Z1bmN0aW9uIHRlc3RQb3dVc2VkQXNTcXJ0KCkgeworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gcG93VXNlZEFzU3Fy
dCg0KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gTWF0aC5zcXJ0KDQpKQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBwb3dVc2VkQXNTcXJ0KDQpIHNob3VsZCBiZSAyLCB3YXMgPSAiICsgcmVz
dWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IHBvd1VzZWRBc1NxcnQoNC40KTsKKyAgICAgICAgaWYgKHJlc3VsdCAh
PT0gTWF0aC5zcXJ0KDQuNCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IHBvd1VzZWRBc1Nx
cnQoNCkgc2hvdWxkIGJlICIgKyBNYXRoLnNxcnQoNC40KSArICIsIHdhcyA9ICIgKyByZXN1bHQ7
CisgICAgfQorCit9Cit0ZXN0UG93VXNlZEFzU3FydCgpOworCisKK2Z1bmN0aW9uIGludEludENv
bnN0YW50c1NtYWxsTnVtYmVycygpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coNDIsIDMpOworfQor
ZnVuY3Rpb24gaW50SW50Q29uc3RhbnRzTGFyZ2VOdW1iZXJzKCkgeworICAgIC8vIFRoZSByZXN1
bHQgZG9lcyBub3QgZml0IGluIGEgaW50ZWdlci4KKyAgICByZXR1cm4gTWF0aC5wb3coNDIsIDQy
KTsKK30KK2Z1bmN0aW9uIGludEludFNtYWxsQ29uc3RhbnRzKCkgeworICAgIHJldHVybiBNYXRo
LnBvdyg0MiwgMyk7Cit9CitmdW5jdGlvbiBpbnREb3VibGVDb25zdGFudHMoKSB7CisgICAgcmV0
dXJuIE1hdGgucG93KDE0LCA0Mi41KTsKK30KK2Z1bmN0aW9uIGRvdWJsZURvdWJsZUNvbnN0YW50
cygpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coMTMuNSwgNDIuNSk7Cit9CitmdW5jdGlvbiBkb3Vi
bGVJbnRDb25zdGFudHMoKSB7CisgICAgcmV0dXJuIE1hdGgucG93KDEzLjUsIDUyKTsKK30KK25v
SW5saW5lKGludEludENvbnN0YW50c1NtYWxsTnVtYmVycyk7Citub0lubGluZShpbnRJbnRDb25z
dGFudHNMYXJnZU51bWJlcnMpOworbm9JbmxpbmUoaW50RG91YmxlQ29uc3RhbnRzKTsKK25vSW5s
aW5lKGRvdWJsZURvdWJsZUNvbnN0YW50cyk7Citub0lubGluZShkb3VibGVJbnRDb25zdGFudHMp
OworCitmdW5jdGlvbiB0ZXN0QmFzZUFuZEV4cG9uZW50Q29uc3RhbnRMaXRlcmFscygpCit7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBpbnRJbnRDb25zdGFudHNTbWFsbE51bWJlcnMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0g
NzQwODgpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGludEludENvbnN0YW50c1NtYWxsTnVt
YmVycygpIHNob3VsZCBiZSA3NDA4OCwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBpbnRJ
bnRDb25zdGFudHNMYXJnZU51bWJlcnMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMS41MDEz
MDkzNzU0NTI5NjU2ZSs2OCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogaW50SW50Q29uc3Rh
bnRzTGFyZ2VOdW1iZXJzKCkgc2hvdWxkIGJlIDEuNTAxMzA5Mzc1NDUyOTY1NmUrNjgsIHdhcyA9
ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gaW50RG91YmxlQ29uc3RhbnRzKCk7CisgICAgICAgIGlm
IChyZXN1bHQgIT09IDUuMTMzODMwMzg4MjAxNTc2NWUrNDgpCisgICAgICAgICAgICB0aHJvdyAi
RXJyb3I6IGludERvdWJsZUNvbnN0YW50cygpIHNob3VsZCBiZSA1LjEzMzgzMDM4ODIwMTU3NjVl
KzQ4LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGRvdWJsZURvdWJsZUNvbnN0YW50cygp
OworICAgICAgICBpZiAocmVzdWx0ICE9PSAxLjA5NDQyMjg3Mjk2NDc4MjllKzQ4KQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBkb3VibGVEb3VibGVDb25zdGFudHMoKSBzaG91bGQgYmUgMS4w
OTQ0MjI4NzI5NjQ3ODI5ZSs0OCwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBkb3VibGVJ
bnRDb25zdGFudHMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNS45ODkwMjI3MzUzMTExNThl
KzU4KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBkb3VibGVJbnRDb25zdGFudHMoKSBzaG91
bGQgYmUgNS45ODkwMjI3MzUzMTExNThlKzU4LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KK30K
K3Rlc3RCYXNlQW5kRXhwb25lbnRDb25zdGFudExpdGVyYWxzKCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246567</attachid>
            <date>2015-02-13 19:15:57 -0800</date>
            <delta_ts>2015-02-13 19:20:57 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141540-20150213191554.patch</filename>
            <type>text/plain</type>
            <size>78741</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NmEwMjBlM2UwY2E1OGM5YTIxMjkwMWE3MzdjYTVjMWIwN2YxODUwLi5hMDdjMmI3YjdlNzk0NzRi
YTdkMzg3ODUxNWU0NmNiMjczY2ZiMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxNS0wMi0xMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBERkcgbm9kZSBmb3IgdGhlIFBvdyBJbnRyaW5zaWNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1NDAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBERkcg
Tm9kZSBmb3IgUG93SW50cmluc2ljLiBUaGlzIHBhdGNoIGNvdmVycyB0aGUgYmFzaWMgY2FzZXMK
KyAgICAgICAgbmVlZCB0byBhdm9pZCBtYXNzaXZlIHJlZ3Jlc3Npb24uIEkgd2lsbCBpdGVyYXRl
IG92ZXIgdGhlIG5vZGUgdG8gY292ZXIKKyAgICAgICAgdGhlIG1pc3NpbmcgdHlwZXMuCisKKyAg
ICAgICAgV2l0aCB0aGlzIHBhdGNoIEkgZ2V0IHRoZSBmb2xsb3dpbmcgcHJvZ3Jlc3Npb25zIG9u
IGJlbmNobWFya3M6CisgICAgICAgIC1Mb25nU3BpZGVyJ3MgbWF0aC1wYXJ0aWFsLXN1bXM6ICs1
JS4KKyAgICAgICAgLUtyYWtlbidzIGltYWdpbmctZGFya3Jvb206ICsxNyUKKyAgICAgICAgLUFz
bUJlbmNoJ3MgY3JheS5jOiArNi42JQorICAgICAgICAtQ29tcHJlc3Npb25CZW5jaDogKzIuMiUg
Z2xvYmFsbHkuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICBDb3ZlciBhIGNvdXBsZSBvZiB0cml2aWFs
IGNhc2VzOgorICAgICAgICAtSWYgdGhlIGV4cG9uZW50IGlzIHplcm8sIHRoZSByZXN1bHQgaXMg
YWx3YXlzIG9uZSwgcmVnYXJkbGVzcyBvZiB0aGUgYmFzZS4KKyAgICAgICAgLUlmIGJvdGggYXJn
dW1lbnRzIGFyZSBjb25zdGFudHMsIGNvbXB1dGUgdGhlIHJlc3VsdCBhdCBjb21waWxlIHRpbWUu
CisKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKworICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICBXZSBvbmx5IHN1cHBvcnQgMiBiYXNpYyBjYXNlcyBhdCB0
aGlzIHRpbWU6CisgICAgICAgIC1NYXRoLnBvdyhkb3VibGUsIGludCkKKyAgICAgICAgLU1hdGgu
cG93KGRvdWJsZSwgZG91YmxlKS4KKworICAgICAgICBJJ2xsIGNvdmVyIE1hdGgucG93KGludCwg
aW50KSBpbiBhIGZvbGxvdyB1cC4KKworICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvQXJpdGhTcXJ0KToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjphcml0aE5vZGVGbGFncyk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6ZG9Eb3VibGVWb3Rpbmcp
OgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhQb3cpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhQb3cp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmRvdWJsZVBvdyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVQb3dpKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpt
YXRoUHJvdG9GdW5jUG93KToKKyAgICAgICAgKEpTQzo6aXNEZW5vcm1hbCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OmlzRWRnZUNhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjptYXRoUG93
KTogRGVsZXRlZC4KKworICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy1iYXNpY3MuanM6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy1pbnRlZ2VyLWV4cG9uZW50
LWZhc3RwYXRoLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbWF0aC1wb3ctbmFu
LWJlaGF2aW9ycy5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL21hdGgtcG93LXdp
dGgtY29uc3RhbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgU3RhcnQgc29tZSBiYXNpYyB0ZXN0aW5n
IG9mIE1hdGgucG93KCkuCisgICAgICAgIER1ZSB0byB0aGUgdmFyaW91cyB0cmFuc2Zvcm0sIHRo
ZSB2YWx1ZSBjaGFuZ2Ugd2hlbiB0aGUgY29kZSB0aWVycyB1cCwKKyAgICAgICAgSSBjb3ZlcmVk
IHRoaXMgYnkgY2hlY2tpbmcgZm9yIGFwcHJveGltYXRlIHZhbHVlcy4KKwogMjAxNS0wMi0xMyAg
QmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBBcml0aFNx
cnQgc2hvdWxkIG5vdCBiZSBjb25kaXRpb25hbCBvbiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAppbmRleCAxOWFlYWI3MTliNjM0NzIyZjkzMmM5NGMzMGZiNmNhMDZlMmRmNzUxLi40OGQxZmZh
Y2M3YmNiNjA4ZTdiOTUwZWRkYjZlZWNhNDAwMmRmY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTUwOCw2ICs1MDgsMTUg
QEAgU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlRlJvdW5kKFNwZWN1bGF0ZWRUeXBlIHZhbHVl
KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUG93
KFNwZWN1bGF0ZWRUeXBlIHhWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgeVZhbHVlKQoreworICAgIC8v
IE1hdGgucG93KCkgYWx3YXlzIHJldHVybiBOYU4gaWYgdGhlIGV4cG9uZW50IGlzIE5hTiwgdW5s
aWtlIHN0ZDo6cG93KCkuCisgICAgLy8gV2UgYWx3YXlzIHNldCBhIHB1cmUgTmFOIGluIHRoYXQg
Y2FzZS4KKyAgICBpZiAoeVZhbHVlICYgU3BlY0RvdWJsZU5hTikKKyAgICAgICAgeFZhbHVlIHw9
IFNwZWNEb3VibGVQdXJlTmFOOworICAgIHJldHVybiBwb2xsdXRlRG91YmxlKHhWYWx1ZSk7Cit9
CisKIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZUJpbmFyeU9wKFNwZWN1bGF0ZWRUeXBlIGEs
IFNwZWN1bGF0ZWRUeXBlIGIpCiB7CiAgICAgcmV0dXJuIHBvbGx1dGVEb3VibGUoYSB8IGIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAppbmRl
eCBiMDBmMjk3M2Y2MzU0MjA3NDIzZDNlMzE4YTNjNzk0MGQwMDc4OWM4Li5mNzNjMmE0MTEwNTMy
YjQ1MzNlNzhlYWRmNGU2NDkxMDhlMWRhOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaApAQCAtNDE2LDYgKzQxNiw3IEBAIFNwZWN1bGF0
ZWRUeXBlIHR5cGVPZkRvdWJsZU1pbk1heChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRlZFR5cGUp
OwogU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlTmVnYXRpb24oU3BlY3VsYXRlZFR5cGUpOwog
U3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlQWJzKFNwZWN1bGF0ZWRUeXBlKTsKIFNwZWN1bGF0
ZWRUeXBlIHR5cGVPZkRvdWJsZUZSb3VuZChTcGVjdWxhdGVkVHlwZSk7CitTcGVjdWxhdGVkVHlw
ZSB0eXBlT2ZEb3VibGVQb3coU3BlY3VsYXRlZFR5cGUsIFNwZWN1bGF0ZWRUeXBlKTsKIAogLy8g
VGhpcyBjb25zZXJ2YXRpdmVseSBtb2RlbHMgdGhlIGJlaGF2aW9yIG9mIGFyYml0cmFyeSBkb3Vi
bGUgb3BlcmF0aW9ucy4KIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZUJpbmFyeU9wKFNwZWN1
bGF0ZWRUeXBlLCBTcGVjdWxhdGVkVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZDdiNWIw
ZjcyOTQ1ZWQ4MjYxZmE0NTA1N2RiYzE2Zjc0NzRmODQxNC4uYmY3ZDA0MWU2NGZkNDQxYWIxODVl
ODQ2ZDJiYmUxNTNhOGIzMjA0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJHZXRCeUlk
U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVz
LmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCkBAIC03MTgsNiArNzE5LDI0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgY2FzZSBBcml0aFBvdzogeworICAgICAgICBKU1ZhbHVlIGNoaWxkWSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChjaGlsZFkgJiYgY2hpbGRZLmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgICAgIGlmICghY2hpbGRZLmFzTnVtYmVyKCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcigxKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTVmFsdWUgY2hpbGRY
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChjaGls
ZFggJiYgY2hpbGRYLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBqc0RvdWJsZU51bWJlcihvcGVyYXRpb25NYXRoUG93KGNoaWxkWC5hc051bWJlcigpLCBj
aGlsZFkuYXNOdW1iZXIoKSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91Ymxl
UG93KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkubV90eXBlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgQXJpdGhTcXJ0OiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAppbmRleCBiODIzN2VhZmVjYmEzMmY0MGJkZmM5NDI3OTY0NjFhMGQxY2Rh
ODU3Li44NWUyYTFjNzJlNTRjNDEyZjk5YTQ3YTViNGZjN2NmMDE0ZmJkMjE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTY4NCw2
ICsxNjg0LDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVz
dWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBjYXNlIFBvd0ludHJpbnNpYzogeworICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKSB7CisgICAgICAgICAgICAv
LyBNYXRoLnBvdygpIGFuZCBNYXRoLnBvdyh4KSByZXR1cm4gTmFOLgorICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE5hTikpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHlP
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpOwor
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFy
aXRoUG93LCBnZXQoeE9wZXJhbmQpLCBnZXQoeU9wZXJhbmQpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2hJbnRyaW5zaWM6IHsKICAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IGFjNmI4Zjc5MmJjM2I0MjVlNWI0Yzkz
ODI5YmMxYjhlYWU2YmE0ZDguLmRjZGI3ZGI0ODQ2NmY5ZTM2NWY5OWI4OWQyNzk3ZDVkYTFhNGNm
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0xMjIs
NiArMTIyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEFyaXRoQWJzOgog
ICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKKyAgICBjYXNlIEFyaXRoUG93
OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNhc2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBB
cml0aFNpbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCBjNmZl
YWZkZDNkOGVlNzBkOGIwZDRmNjRlZDhkMmNjNjYzNTNkYzE2Li41ZGNhZDQzYmNhN2YxMGZiNDRl
ZmI4ZjExMTdkM2NmNDg2ZTk0Y2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCkBAIC04MSw2ICs4MSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBB
cml0aE1heDoKKyAgICBjYXNlIEFyaXRoUG93OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNh
c2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGUzMWE1NGQzZTNkMjIwOWZmNTk4N2RhMTE3
N2NiMzE4NGVjMDk1OTYuLmM4MmI1ZmIxNDZiM2I5YjM2ZGJjMjU5Yjk1MWQxOGFhMmZlYmQ5YTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMzM3
LDYgKzMzNywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbm9kZS0+c2V0UmVzdWx0KE5vZGVS
ZXN1bHREb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBj
YXNlIEFyaXRoUG93OiB7CisgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdERv
dWJsZSk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUlu
dDMyT3JCb29sZWFuRm9yQXJpdGhtZXRpYygpKSB7CisgICAgICAgICAgICAgICAgZml4RG91Ymxl
T3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4SW50T3JC
b29sZWFuRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZpeERvdWJsZU9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlT3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAppbmRleCBiZmZiODY2MGNkZDAxMDc2ZGY3MTMzYTEyY2YzYmIxYmYx
YWFkZTdhLi4yNzE4YjdiNjE4MjMwNzI3YThkZDI3NDk5M2IyZjdkMzlkZTg1ZTkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTY1LDYgKzU2NSwxMyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFRvUHJpbWl0aXZlKTsKICAgICAgICAgbV9vcCA9
IFRvU3RyaW5nOwogICAgIH0KKworICAgIHZvaWQgY29udmVydFRvQXJpdGhTcXJ0KCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX29wID09IEFyaXRoUG93KTsKKyAgICAgICAgY2hpbGQyKCkgPSBF
ZGdlKCk7CisgICAgICAgIG1fb3AgPSBBcml0aFNxcnQ7CisgICAgfQogICAgIAogICAgIEpTVmFs
dWUgYXNKU1ZhbHVlKCkKICAgICB7CkBAIC03NzUsNyArNzgyLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgIE5vZGVGbGFncyBhcml0aE5vZGVGbGFncygpCiAgICAgewogICAgICAgICBOb2RlRmxhZ3Mg
cmVzdWx0ID0gbV9mbGFncyAmIE5vZGVBcml0aEZsYWdzTWFzazsKLSAgICAgICAgaWYgKG9wKCkg
PT0gQXJpdGhNdWwgfHwgb3AoKSA9PSBBcml0aERpdiB8fCBvcCgpID09IEFyaXRoTW9kIHx8IG9w
KCkgPT0gQXJpdGhOZWdhdGUgfHwgb3AoKSA9PSBEb3VibGVBc0ludDMyKQorICAgICAgICBpZiAo
b3AoKSA9PSBBcml0aE11bCB8fCBvcCgpID09IEFyaXRoRGl2IHx8IG9wKCkgPT0gQXJpdGhNb2Qg
fHwgb3AoKSA9PSBBcml0aE5lZ2F0ZSB8fCBvcCgpID09IEFyaXRoUG93IHx8IG9wKCkgPT0gRG91
YmxlQXNJbnQzMikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQgJiB+Tm9kZUJ5dGVjb2RlTmVlZHNOZWdaZXJvOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA2NWNiMzk5ZjFiMDVkMWVhN2I2YTU4YTVhMjY2
ZTk3MWY5Y2Q2OTIwLi44YTBlYTgxYTYyZGJkYTU1MGU5M2ZiZjFjODM5NjE2ZGMyODZjNWViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC0xMzQsNiArMTM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEFyaXRoTWluLCBO
b2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhNYXgsIE5vZGVSZXN1bHROdW1iZXIp
IFwKICAgICBtYWNybyhBcml0aEZSb3VuZCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3Jv
KEFyaXRoUG93LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhTcXJ0LCBOb2Rl
UmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhTaW4sIE5vZGVSZXN1bHROdW1iZXIpIFwK
ICAgICBtYWNybyhBcml0aENvcywgTm9kZVJlc3VsdE51bWJlcikgXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAppbmRleCBkMWE2ZTRkY2QzZWRhZWI2NzNhYWMyNGNlOGQxMzY1YjY5Njk5OWVhLi5lMGM1
NDQ0Yjc4ZWQzOGUxZjgzY2Y5NDRiNDEyODQ1OWUxMTQxN2EyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcApAQCAtMzIxLDcgKzMyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBBcml0
aFBvdzoKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6
CiAgICAgICAgIGNhc2UgQXJpdGhTaW46CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCmluZGV4IDhlOGFlMDc3ZDYzYjBlNjAwZTY4NjZkY2FhMjcxZWZhYmM4
NzM3ODEuLmM4NDUxM2FkOGE3YmM4NzJjNmIxMTc0MGQ3M2Q2Zjk1Yjk3NDg5ZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0xNTAsNiArMTUw
LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aE1p
bjoKICAgICBjYXNlIEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0
aFNxcnQ6CiAgICAgY2FzZSBBcml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoU2luOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCAzOGU2
NjE3MWQ0NjA2NmVhNjMwN2I4ZDQzNTczNzdlNzZjOTkyNzhhLi43NDc4ODY1NDY5MzgwZDkzYjIw
NmI2MWFkMDQzODI1ZWVmODRkNDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzU2MCw2ICszNTYwLDkyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aFNxcnQoTm9kZSogbm9kZSkKICAgICB9CiB9CiAKKy8vIEZv
ciBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyAsIGl0IGlzIHdvcnRoIGRvaW5nIGEgdGlueSBpbmxp
bmUgbG9vcCB0byBleHBvbmVudGlhdGUgdGhlIGJhc2UuCisvLyBFdmVyeSByZWdpc3RlciBpcyBj
bG9iYmVyZWQgYnkgdGhpcyBoZWxwZXIuCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY29t
cGlsZUFyaXRoUG93SW50ZWdlckZhc3RQYXRoKEpJVENvbXBpbGVyJiBhc3NlbWJsZXIsIEZQUlJl
ZyB4T3BlcmFuZCwgR1BSUmVnIHlPcGVyYW5kLCBGUFJSZWcgcmVzdWx0KQoreworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBza2lwRmFzdFBhdGg7CisgICAgc2tpcEZhc3RQYXRoLmFwcGVu
ZChhc3NlbWJsZXIuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCB5T3BlcmFuZCwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworICAgIHNraXBGYXN0UGF0aC5hcHBl
bmQoYXNzZW1ibGVyLmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgeU9wZXJh
bmQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMTAwMCkpKTsKKworICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CisgICAgYXNzZW1ibGVyLmxvYWREb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJm9uZUNvbnN0YW50KSwgcmVzdWx0KTsKKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzdGFydExvb3AoYXNzZW1ibGVyLmxhYmVsKCkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4cG9uZW50SXNFdmVuID0gYXNzZW1ibGVyLmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgeU9wZXJhbmQsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSkpOworICAgIGFzc2VtYmxlci5tdWxEb3VibGUoeE9wZXJhbmQsIHJlc3Vs
dCk7CisgICAgZXhwb25lbnRJc0V2ZW4ubGluaygmYXNzZW1ibGVyKTsKKyAgICBhc3NlbWJsZXIu
bXVsRG91YmxlKHhPcGVyYW5kLCB4T3BlcmFuZCk7CisgICAgYXNzZW1ibGVyLnJzaGlmdDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHlPcGVyYW5kKTsKKyAgICBhc3NlbWJsZXIu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB5T3BlcmFuZCkubGlua1RvKHN0
YXJ0TG9vcCwgJmFzc2VtYmxlcik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lwU2xv
d1BhdGggPSBhc3NlbWJsZXIuanVtcCgpOworICAgIHNraXBGYXN0UGF0aC5saW5rKCZhc3NlbWJs
ZXIpOworCisgICAgcmV0dXJuIHNraXBTbG93UGF0aDsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoUG93KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmNoaWxkMigp
LnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkgeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IHhPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIHlPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSUmVnIHhP
cGVyYW5kZnByID0geE9wZXJhbmQuZnByKCk7CisgICAgICAgIEdQUlJlZyB5T3BlcmFuZEdwciA9
IHlPcGVyYW5kLmdwcigpOworICAgICAgICBGUFJUZW1wb3JhcnkgeU9wZXJhbmRmcHIodGhpcyk7
CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBGUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgICAgICBGUFJSZWcgcmVzdWx0RnByID0gcmVzdWx0LmZwcigpOworCisgICAg
ICAgIEZQUlRlbXBvcmFyeSB4T3BlcmFuZENvcHkodGhpcyk7CisgICAgICAgIEZQUlJlZyB4T3Bl
cmFuZENvcHlGcHIgPSB4T3BlcmFuZENvcHkuZnByKCk7CisgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUoeE9wZXJhbmRmcHIsIHhPcGVyYW5kQ29weUZwcik7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IGNvdW50ZXIodGhpcyk7CisgICAgICAgIEdQUlJlZyBjb3VudGVyR3ByID0gY291bnRlci5ncHIo
KTsKKyAgICAgICAgbV9qaXQubW92ZSh5T3BlcmFuZEdwciwgY291bnRlckdwcik7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2tpcEZhbGxiYWNrID0gY29tcGlsZUFyaXRoUG93SW50
ZWdlckZhc3RQYXRoKG1faml0LCB4T3BlcmFuZENvcHlGcHIsIGNvdW50ZXJHcHIsIHJlc3VsdEZw
cik7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHlPcGVyYW5kR3ByLCB5T3Bl
cmFuZGZwci5mcHIoKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWF0aFBvdywg
cmVzdWx0RnByLCB4T3BlcmFuZGZwciwgeU9wZXJhbmRmcHIuZnByKCkpOworCisgICAgICAgIHNr
aXBGYWxsYmFjay5saW5rKCZtX2ppdCk7CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGcHIs
IG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCB4T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCB5T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgRlBSUmVnIHhPcGVy
YW5kZnByID0geE9wZXJhbmQuZnByKCk7CisgICAgRlBSUmVnIHlPcGVyYW5kZnByID0geU9wZXJh
bmQuZnByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgRlBSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICBGUFJSZWcgcmVzdWx0RnByID0gcmVzdWx0LmZwcigpOworCisgICAgRlBS
VGVtcG9yYXJ5IHhPcGVyYW5kQ29weSh0aGlzKTsKKyAgICBGUFJSZWcgeE9wZXJhbmRDb3B5RnBy
ID0geE9wZXJhbmRDb3B5LmZwcigpOworCisgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CisgICAgRlBSUmVnIHNjcmF0Y2hGcHIgPSBzY3JhdGNoLmZwcigpOworCisgICAgR1BSVGVtcG9y
YXJ5IHlPcGVyYW5kSW50ZWdlcih0aGlzKTsKKyAgICBHUFJSZWcgeU9wZXJhbmRJbnRlZ2VyR3By
ID0geU9wZXJhbmRJbnRlZ2VyLmdwcigpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsZWRFeHBvbmVudENvbnZlcnNpb25Ub0ludGVnZXI7CisgICAgbV9qaXQuYnJhbmNoQ29udmVy
dERvdWJsZVRvSW50MzIoeU9wZXJhbmRmcHIsIHlPcGVyYW5kSW50ZWdlckdwciwgZmFpbGVkRXhw
b25lbnRDb252ZXJzaW9uVG9JbnRlZ2VyLCBzY3JhdGNoRnByLCBmYWxzZSk7CisKKyAgICBtX2pp
dC5tb3ZlRG91YmxlKHhPcGVyYW5kZnByLCB4T3BlcmFuZENvcHlGcHIpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNraXBGYWxsYmFjayA9IGNvbXBpbGVBcml0aFBvd0ludGVnZXJGYXN0UGF0
aChtX2ppdCwgeE9wZXJhbmRDb3B5RnByLCB5T3BlcmFuZEludGVnZXIuZ3ByKCksIHJlc3VsdEZw
cik7CisgICAgZmFpbGVkRXhwb25lbnRDb252ZXJzaW9uVG9JbnRlZ2VyLmxpbmsoJm1faml0KTsK
KworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWF0aFBvdywgcmVzdWx0RnByLCB4T3BlcmFu
ZGZwciwgeU9wZXJhbmRmcHIpOworICAgIHNraXBGYWxsYmFjay5saW5rKCZtX2ppdCk7CisgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdEZwciwgbm9kZSk7Cit9CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCiBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggM2I3YzVkMDBiNzc4
NzRlNDk2NjQzOWUwNmQ5NGRkNmQ2YmJiMTViNS4uMzNjNzc3ZTQ3ZmMyNWY4M2NlMjRmNGJmMDQz
ZmFkZjEzNTlhZTQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaApAQCAtMjEzNCw2ICsyMTM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGls
ZUFyaXRoTXVsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUFyaXRoUG93KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggYjgxMDU5M2E1MzI0ZTU5NWRl
NGNkOTdmZWYzZjlhODA2MDFjNGQ5Yy4uNmJmNmI4NmY4YzJiMzMwYTdjMWFlYTIyY2I5ZWZiMzky
N2Y0N2M0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0xOTk2LDYgKzE5OTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBj
YXNlIEFyaXRoUG93OiB7CisgICAgICAgIGNvbXBpbGVBcml0aFBvdyhub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBBcml0aEFiczogewogICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIEludDMyVXNlOiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRl
eCBjZTA2N2E5OTVlYmM3NzUxMzc5OTk5ZjYzYjAyZmFiZjA0ODczMDlmLi42YjEyM2E3NTc4YzJh
YjIyYjE0NDA4Yjk5YTE5MGY3Y2MzNGRkNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTIyNDEsNiArMjI0MSwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAgIGNvbXBpbGVBcml0aFBvdyhub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEFyaXRoU3FydDoKICAgICAgICAgY29tcGls
ZUFyaXRoU3FydChub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAppbmRleCBjZTFl
Mjk0NDAyYWVkZTU1MTNjZWQwYjY0MjZiZDNhMDkzOGFkNDhlLi41ZTMwZGZlM2I3ZTJlMjAyMmM3
YjM1OGNjM2QyNDUwMDNmM2NjM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTEzMiw3ICsxMzIsMjAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAorCisgICAgICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAg
ICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aXNOdW1iZXJDb25zdGFudCgpKSB7CisgICAgICAg
ICAgICAgICAgZG91YmxlIHlPcGVyYW5kVmFsdWUgPSBtX25vZGUtPmNoaWxkMigpLT5hc051bWJl
cigpOworICAgICAgICAgICAgICAgIGlmICh5T3BlcmFuZFZhbHVlID09IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQxKCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICh5T3BlcmFuZFZhbHVlID09IDAuNSkgeworICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG1fbm9kZUluZGV4LCBTcGVjTm9uZSwgUGhhbnRv
bSwgbV9ub2RlLT5vcmlnaW4sIG1fbm9kZS0+Y2hpbGRyZW4pOworICAgICAgICAgICAgICAgICAg
ICBtX25vZGUtPmNvbnZlcnRUb0FyaXRoU3FydCgpOworICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgICAgICBp
ZiAoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBtX2dyYXBoLnRyeUdldEZvbGRhYmxlVmlld0Zv
ckNoaWxkMShtX25vZGUpKQogICAgICAgICAgICAgICAgIGZvbGRUeXBlZEFycmF5UHJvcGVydHlU
b0NvbnN0YW50KHZpZXcsIGpzTnVtYmVyKHZpZXctPmxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IGQ0MzhjZmNhOWQwZTVhMzAyMzNiNDVi
NWFmNWUxMjJkNTU5ZTBlYmUuLjdkN2I1MDY4NTNhODhiMjgzYjk5MDVlYjcwYTY0ZTQ4NjdkZDU5
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC0yNDAs
NiArMjQwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAg
ICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4
OgorICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgICAgICAgICAgICAgY2FzZSBD
b21wYXJlTGVzczoKICAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAg
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA1YjlmN2FhNTE4Y2EyNmNhYjIwYWI0YTQ1ZGEz
NjFjYTZjZTA4ZjcwLi4yNDhiZGY1MmU3OWEyZTNhNTc0YTUyMjM4YjI1MTE2OTk2Mjk0MzBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC04
OSw2ICs4OSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNlIEFyaXRo
Q29zOgorICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgY2FzZSBB
cml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoTmVnYXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAppbmRleCBkMjI3NzkyMWZlOTNi
NTNhZjQ2MzdlMDliNzRjNDVmYjRjNmY4NzFjLi5mMjg0ZThkMThlY2FiM2FkN2E3ZmQ1NDE2NWZm
ZTk4ZmY2YzkxYmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaApAQCAtNDAsNiArNDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oZG91YmxlQWJzLCAibGx2bS5mYWJzLmY2NCIsIGZ1bmN0
aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAogICAgIG1hY3JvKGRvdWJsZVNpbiwg
Imxsdm0uc2luLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAog
ICAgIG1hY3JvKGRvdWJsZUNvcywgImxsdm0uY29zLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVU
eXBlLCBkb3VibGVUeXBlKSkgXAorICAgIG1hY3JvKGRvdWJsZVBvdywgImxsdm0ucG93LmY2NCIs
IGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAorICAg
IG1hY3JvKGRvdWJsZVBvd2ksICJsbHZtLnBvd2kuZjY0IiwgZnVuY3Rpb25UeXBlKGRvdWJsZVR5
cGUsIGRvdWJsZVR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKGRvdWJsZVNxcnQsICJsbHZtLnNx
cnQuZjY0IiwgZnVuY3Rpb25UeXBlKGRvdWJsZVR5cGUsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFj
cm8oZnJhbWVBZGRyZXNzLCAibGx2bS5mcmFtZWFkZHJlc3MiLCBmdW5jdGlvblR5cGUocG9pbnRl
clR5cGUoaW50OCksIGludDMyKSkgXAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzMyLCAibGx2
bS5zbXVsLndpdGgub3ZlcmZsb3cuaTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250
ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGludDMyLCBpbnQzMikpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKaW5kZXggZTU3NTM3Yzc5M2Y0Y2M5
NWUyYWM2Y2E2MTg5ZDc5MmQ1N2FjYmJiYS4uNjJjMjA3NDE1MzRmMTFkMTIyYmEyYWZjM2UzZDk3
ODU0NTFkOGNjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKQEAgLTQzNiw2ICs0MzYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFy
aXRoQ29zOgogICAgICAgICAgICAgY29tcGlsZUFyaXRoQ29zKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcml0aFBvdzoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0aFBvdygp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICAg
ICAgY29tcGlsZUFyaXRoU3FydCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTk1LDYgKzE1
OTgsNjQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZUFyaXRoQ29zKCkgeyBzZXREb3Vi
bGUobV9vdXQuZG91YmxlQ29zKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9CiAKKyAg
ICB2b2lkIGNvbXBpbGVBcml0aFBvdygpCisgICAgeworICAgICAgICAvLyBGSVhNRTogaW52ZXN0
aWdhdGUgbGx2bS5wb3dpIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyBwZXJmb3JtYW5jZSBjaGFy
YWN0ZXJpc3RpY3MuCisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0byBoYXZlIHRoZSBp
bmxpbmUgbG9vcCBpbiBERkcgdG9vLgorICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UpCisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlUG93
aShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25lbnQgPSBsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludGVnZXJF
eHBvbmVudElzU21hbGxCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgdGVz
dCBpbnRlZ2VyIGV4cG9uZW50IGlzIHNtYWxsLiIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGludGVnZXJFeHBvbmVudFBvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBv
dyBwb3coZG91YmxlLCAoaW50KWRvdWJsZSkuIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
ZG91YmxlRXhwb25lbnRQb3dCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cg
cG93KGRvdWJsZSwgZG91YmxlKS4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBwb3dCbG9j
ayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgcmVndWxhciBwb3ciKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBuYW5FeGNlcHRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFyaXRoUG93IE5hTiBFeGNlcHRpb24iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudCA9IG1fb3V0LmZwVG9JbnQz
MihleHBvbmVudCk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4cG9uZW50Q29udmVydGVk
VG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2VyRXhwb25lbnQpOworICAgICAgICAg
ICAgTFZhbHVlIGV4cG9uZW50SXNJbnRlZ2VyID0gbV9vdXQuZG91YmxlRXF1YWwoZXhwb25lbnQs
IGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91YmxlKTsKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChleHBvbmVudElzSW50ZWdlciwgdW5zdXJlKGludGVnZXJFeHBvbmVudElzU21hbGxCbG9j
ayksIHVuc3VyZShkb3VibGVFeHBvbmVudFBvd0Jsb2NrKSk7CisKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50SXNTbWFsbEJs
b2NrLCBpbnRlZ2VyRXhwb25lbnRQb3dCbG9jayk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdl
ckV4cG9uZW50QmVsb3cxMDAwID0gbV9vdXQuYmVsb3coaW50ZWdlckV4cG9uZW50LCBtX291dC5j
b25zdEludDMyKDEwMDApKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpbnRlZ2VyRXhwb25l
bnRCZWxvdzEwMDAsIHVzdWFsbHkoaW50ZWdlckV4cG9uZW50UG93QmxvY2spLCByYXJlbHkoZG91
YmxlRXhwb25lbnRQb3dCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbnRl
Z2VyRXhwb25lbnRQb3dCbG9jaywgZG91YmxlRXhwb25lbnRQb3dCbG9jayk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBwb3dEb3VibGVJbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
ZG91YmxlUG93aShiYXNlLCBpbnRlZ2VyRXhwb25lbnQpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlRXhw
b25lbnRQb3dCbG9jaywgcG93QmxvY2spOworICAgICAgICAgICAgLy8gSWYgeSBpcyBOYU4sIHRo
ZSByZXN1bHQgaXMgTmFOLgorICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZG4ndCB3ZSBvbmx5
IGNoZWNrIHRoYXQgaWYgdGhlIHR5cGUgb2YgY2hpbGQyKCkgbWlnaHQgaGF2ZSBOYU4/CisgICAg
ICAgICAgICBMVmFsdWUgZXhwb25lbnRJc05hTiA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQoZXhwb25lbnQsIGV4cG9uZW50KTsKKworICAgICAgICAgICAgLy8gSWYgYWJzKHgpIGlz
IDEgYW5kIHkgaXMgK2luZmluaXR5LCB0aGUgcmVzdWx0IGlzIE5hTi4KKyAgICAgICAgICAgIC8v
IElmIGFicyh4KSBpcyAxIGFuZCB5IGlzIC1pbmZpbml0eSwgdGhlIHJlc3VsdCBpcyBOYU4uCisg
ICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudCA9IG1fb3V0LmRvdWJsZUFicyhleHBv
bmVudCk7CisgICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudElzSW5maW5pdHkgPSBt
X291dC5kb3VibGVFcXVhbChhYnNvbHV0ZUV4cG9uZW50LCBtX291dC5jb25zdERvdWJsZShzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBhYnNvbHV0ZUJhc2UgPSBtX291dC5kb3VibGVBYnMoYmFzZSk7CisgICAgICAgICAgICBMVmFs
dWUgYWJzb2x1dGVCYXNlSXNPbmUgPSBtX291dC5kb3VibGVFcXVhbChhYnNvbHV0ZUJhc2UsIG1f
b3V0LmNvbnN0RG91YmxlKDEpKTsKKyAgICAgICAgICAgIExWYWx1ZSBvbmVCYXNlSW5maW5pdGVF
eHBvbmVudCA9IG1fb3V0LmJpdEFuZChhYnNvbHV0ZUV4cG9uZW50SXNJbmZpbml0eSwgYWJzb2x1
dGVCYXNlSXNPbmUpOworCisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYml0T3IoZXhw
b25lbnRJc05hTiwgb25lQmFzZUluZmluaXRlRXhwb25lbnQpLCByYXJlbHkobmFuRXhjZXB0aW9u
KSwgdXN1YWxseShwb3dCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhwb3dC
bG9jaywgbmFuRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcihtX291dC5kb3VibGVQb3coYmFzZSwgZXhwb25lbnQpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obmFuRXhjZXB0aW9uLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgcHVyZU5hbiA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZShQTmFOKSk7Cisg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBwb3dEb3VibGVJbnRSZXN1bHQsIHBvd1Jlc3Vs
dCwgcHVyZU5hbikpOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlQXJpdGhT
cXJ0KCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlU3FydChsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSkpKTsgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUFyaXRoRlJvdW5kKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM3MGQ4Y2Q5NzZhNTU5ZWI2OGYzYzUwMmRm
NGI4OWQyNzFjMWM3MTUuLmFmODJjYmRkNjY1YWY1ZmRiNmQwNjI1YTliMmNjM2EyZmRhZWRmOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMTc3LDYgKzE3NywxNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjYWxsKGRvdWJsZUNvc0ludHJpbnNpYygpLCB2YWx1
ZSk7CiAgICAgfQogCisgICAgTFZhbHVlIGRvdWJsZVBvdyhMVmFsdWUgeE9wZXJhbmQsIExWYWx1
ZSB5T3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsKGRvdWJsZVBvd0ludHJpbnNp
YygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOworICAgIH0KKworICAgIExWYWx1ZSBkb3VibGVQb3dp
KExWYWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNhbGwoZG91YmxlUG93aUludHJpbnNpYygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOworICAgIH0K
KwogICAgIExWYWx1ZSBkb3VibGVTcXJ0KExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBjYWxsKGRvdWJsZVNxcnRJbnRyaW5zaWMoKSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMjQ0YjRiZTljYzZlMTdlOGFiZWM3
NzNkZDA4NzE5MTExYzQxZDk1Ny4uYjIyOTM5ZmNlNjMyNWY0Nzc3MzA0NjBjNjBmNTRhMjAwNGFl
NTgwMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC0xMjEzLDYgKzEyMTMsMzk1IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBieXRlCiB9CiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKElPUykgJiYgQ1BVKEFSTV9USFVNQjIpCisKKy8vIFRoZSBmb2xsb3dp
bmcgY29kZSBpcyB0YWtlbiBmcm9tIG5ldGxpYi5vcmc6CisvLyAgIGh0dHA6Ly93d3cubmV0bGli
Lm9yZy9mZGxpYm0vZmRsaWJtLmgKKy8vICAgaHR0cDovL3d3dy5uZXRsaWIub3JnL2ZkbGlibS9l
X3Bvdy5jCisvLyAgIGh0dHA6Ly93d3cubmV0bGliLm9yZy9mZGxpYm0vc19zY2FsYm4uYworLy8K
Ky8vIEFuZCB3YXMgb3JpZ2luYWxseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxp
Y2Vuc2U6CisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBh
IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkg
Z3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAq
LworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm
eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHBy
b3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyogX19p
ZWVlNzU0X3Bvdyh4LHkpIHJldHVybiB4Kip5CisgKgorICogICAgICAgICAgICAgIG4KKyAqIE1l
dGhvZDogIExldCB4ID0gIDIgICAqICgxK2YpCisgKiAgICAxLiBDb21wdXRlIGFuZCByZXR1cm4g
bG9nMih4KSBpbiB0d28gcGllY2VzOgorICogICAgICAgIGxvZzIoeCkgPSB3MSArIHcyLAorICog
ICAgICAgd2hlcmUgdzEgaGFzIDUzLTI0ID0gMjkgYml0IHRyYWlsaW5nIHplcm9zLgorICogICAg
Mi4gUGVyZm9ybSB5KmxvZzIoeCkgPSBuK3knIGJ5IHNpbXVsYXRpbmcgbXV0aS1wcmVjaXNpb24g
CisgKiAgICAgICBhcml0aG1ldGljLCB3aGVyZSB8eSd8PD0wLjUuCisgKiAgICAzLiBSZXR1cm4g
eCoqeSA9IDIqKm4qZXhwKHknKmxvZzIpCisgKgorICogU3BlY2lhbCBjYXNlczoKKyAqICAgIDEu
ICAoYW55dGhpbmcpICoqIDAgIGlzIDEKKyAqICAgIDIuICAoYW55dGhpbmcpICoqIDEgIGlzIGl0
c2VsZgorICogICAgMy4gIChhbnl0aGluZykgKiogTkFOIGlzIE5BTgorICogICAgNC4gIE5BTiAq
KiAoYW55dGhpbmcgZXhjZXB0IDApIGlzIE5BTgorICogICAgNS4gICstKHx4fCA+IDEpICoqICAr
SU5GIGlzICtJTkYKKyAqICAgIDYuICArLSh8eHwgPiAxKSAqKiAgLUlORiBpcyArMAorICogICAg
Ny4gICstKHx4fCA8IDEpICoqICArSU5GIGlzICswCisgKiAgICA4LiAgKy0ofHh8IDwgMSkgKiog
IC1JTkYgaXMgK0lORgorICogICAgOS4gICstMSAgICAgICAgICoqICstSU5GIGlzIE5BTgorICog
ICAgMTAuICswICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTikgICAgICAgICAgICAgICBpcyAr
MAorICogICAgMTEuIC0wICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTiwgb2RkIGludGVnZXIp
ICBpcyArMAorICogICAgMTIuICswICoqICgtYW55dGhpbmcgZXhjZXB0IDAsIE5BTikgICAgICAg
ICAgICAgICBpcyArSU5GCisgKiAgICAxMy4gLTAgKiogKC1hbnl0aGluZyBleGNlcHQgMCwgTkFO
LCBvZGQgaW50ZWdlcikgIGlzICtJTkYKKyAqICAgIDE0LiAtMCAqKiAob2RkIGludGVnZXIpID0g
LSggKzAgKiogKG9kZCBpbnRlZ2VyKSApCisgKiAgICAxNS4gK0lORiAqKiAoK2FueXRoaW5nIGV4
Y2VwdCAwLE5BTikgaXMgK0lORgorICogICAgMTYuICtJTkYgKiogKC1hbnl0aGluZyBleGNlcHQg
MCxOQU4pIGlzICswCisgKiAgICAxNy4gLUlORiAqKiAoYW55dGhpbmcpICA9IC0wICoqICgtYW55
dGhpbmcpCisgKiAgICAxOC4gKC1hbnl0aGluZykgKiogKGludGVnZXIpIGlzICgtMSkqKihpbnRl
Z2VyKSooK2FueXRoaW5nKippbnRlZ2VyKQorICogICAgMTkuICgtYW55dGhpbmcgZXhjZXB0IDAg
YW5kIGluZikgKiogKG5vbi1pbnRlZ2VyKSBpcyBOQU4KKyAqCisgKiBBY2N1cmFjeToKKyAqICAg
IHBvdyh4LHkpIHJldHVybnMgeCoqeSBuZWFybHkgcm91bmRlZC4gSW4gcGFydGljdWxhcgorICog
ICAgICAgICAgICBwb3coaW50ZWdlcixpbnRlZ2VyKQorICogICAgYWx3YXlzIHJldHVybnMgdGhl
IGNvcnJlY3QgaW50ZWdlciBwcm92aWRlZCBpdCBpcyAKKyAqICAgIHJlcHJlc2VudGFibGUuCisg
KgorICogQ29uc3RhbnRzIDoKKyAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRl
bmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAorICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2
YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAorICogY29tcGlsZXIgd2lsbCBj
b252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2ggCisgKiB0byBw
cm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCisgKi8KKworI2RlZmluZSBfX0hJ
KHgpICooMSsoaW50KikmeCkKKyNkZWZpbmUgX19MTyh4KSAqKGludCopJngKKworc3RhdGljIGNv
bnN0IGRvdWJsZQorYnBbXSA9IHsxLjAsIDEuNSx9LAorZHBfaFtdID0geyAwLjAsIDUuODQ5NjI0
ODcyMjA3NjQxNjAxNTZlLTAxLH0sIC8qIDB4M0ZFMkI4MDMsIDB4NDAwMDAwMDAgKi8KK2RwX2xb
XSA9IHsgMC4wLCAxLjM1MDAzOTIwMjEyOTc0ODk3MTI4ZS0wOCx9LCAvKiAweDNFNENGREVCLCAw
eDQzQ0ZEMDA2ICovCit6ZXJvICAgID0gIDAuMCwKK29uZSAgICA9ICAxLjAsCit0d28gICAgPSAg
Mi4wLAordHdvNTMgICAgPSAgOTAwNzE5OTI1NDc0MDk5Mi4wLCAgICAvKiAweDQzNDAwMDAwLCAw
eDAwMDAwMDAwICovCitodWdlICAgID0gIDEuMGUzMDAsCit0aW55ICAgID0gIDEuMGUtMzAwLAor
ICAgICAgICAvKiBmb3Igc2NhbGJuICovCit0d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAw
MDBlKzE2LCAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCit0d29tNTQgID0gIDUuNTUxMTE1
MTIzMTI1NzgyNzAyMTJlLTE3LCAvKiAweDNDOTAwMDAwLCAweDAwMDAwMDAwICovCisgICAgLyog
cG9seSBjb2VmcyBmb3IgKDMvMikqKGxvZyh4KS0ycy0yLzMqcyoqMyAqLworTDEgID0gIDUuOTk5
OTk5OTk5OTk5OTQ2NDg3MjVlLTAxLCAvKiAweDNGRTMzMzMzLCAweDMzMzMzMzAzICovCitMMiAg
PSAgNC4yODU3MTQyODU3ODU1MDE4NDI1MmUtMDEsIC8qIDB4M0ZEQjZEQjYsIDB4REI2RkFCRkYg
Ki8KK0wzICA9ICAzLjMzMzMzMzI5ODE4Mzc3NDMyOTE4ZS0wMSwgLyogMHgzRkQ1NTU1NSwgMHg1
MThGMjY0RCAqLworTDQgID0gIDIuNzI3MjgxMjM4MDg1MzQwMDY0ODllLTAxLCAvKiAweDNGRDE3
NDYwLCAweEE5MUQ0MTAxICovCitMNSAgPSAgMi4zMDY2MDc0NTc3NTU2MTc1NDA2N2UtMDEsIC8q
IDB4M0ZDRDg2NEEsIDB4OTNDOURCNjUgKi8KK0w2ICA9ICAyLjA2OTc1MDE3ODAwMzM4NDE3Nzg0
ZS0wMSwgLyogMHgzRkNBN0UyOCwgMHg0QTQ1NEVFRiAqLworUDEgICA9ICAxLjY2NjY2NjY2NjY2
NjY2MDE5MDM3ZS0wMSwgLyogMHgzRkM1NTU1NSwgMHg1NTU1NTUzRSAqLworUDIgICA9IC0yLjc3
Nzc3Nzc3NzcwMTU1OTMzODQyZS0wMywgLyogMHhCRjY2QzE2QywgMHgxNkJFQkQ5MyAqLworUDMg
ICA9ICA2LjYxMzc1NjMyMTQzNzkzNDM2MTE3ZS0wNSwgLyogMHgzRjExNTY2QSwgMHhBRjI1REUy
QyAqLworUDQgICA9IC0xLjY1MzM5MDIyMDU0NjUyNTE1MzkwZS0wNiwgLyogMHhCRUJCQkQ0MSwg
MHhDNUQyNkJGMSAqLworUDUgICA9ICA0LjEzODEzNjc5NzA1NzIzODQ2MDM5ZS0wOCwgLyogMHgz
RTY2Mzc2OSwgMHg3MkJFQTREMCAqLworbGcyICA9ICA2LjkzMTQ3MTgwNTU5OTQ1Mjg2MjI3ZS0w
MSwgLyogMHgzRkU2MkU0MiwgMHhGRUZBMzlFRiAqLworbGcyX2ggID0gIDYuOTMxNDcxODI0NjQ1
OTk2MDkzNzVlLTAxLCAvKiAweDNGRTYyRTQzLCAweDAwMDAwMDAwICovCitsZzJfbCAgPSAtMS45
MDQ2NTQyOTk5NTc3NjgwNDUyNWUtMDksIC8qIDB4QkUyMDVDNjEsIDB4MENBODZDMzkgKi8KK292
dCA9ICA4LjAwODU2NjI1OTUzNzI5NDQzNzJlLTAwMTcsIC8qIC0oMTAyNC1sb2cyKG92ZmwrLjV1
bHApKSAqLworY3AgICAgPSAgOS42MTc5NjY5MzkyNTk3NTU1NDMyOWUtMDEsIC8qIDB4M0ZFRUM3
MDksIDB4REMzQTAzRkQgPTIvKDNsbjIpICovCitjcF9oICA9ICA5LjYxNzk2NzAwOTU0NDM3MjU1
ODU5ZS0wMSwgLyogMHgzRkVFQzcwOSwgMHhFMDAwMDAwMCA9KGZsb2F0KWNwICovCitjcF9sICA9
IC03LjAyODQ2MTY1MDk1Mjc1ODI2NTE2ZS0wOSwgLyogMHhCRTNFMkZFMCwgMHgxNDVCMDFGNSA9
dGFpbCBvZiBjcF9oKi8KK2l2bG4yICAgID0gIDEuNDQyNjk1MDQwODg4OTYzMzg3MDBlKzAwLCAv
KiAweDNGRjcxNTQ3LCAweDY1MkI4MkZFID0xL2xuMiAqLworaXZsbjJfaCAgPSAgMS40NDI2OTUw
MjE2MjkzMzM0OTYwOWUrMDAsIC8qIDB4M0ZGNzE1NDcsIDB4NjAwMDAwMDAgPTI0YiAxL2xuMiov
CitpdmxuMl9sICA9ICAxLjkyNTk2Mjk5MTEyNjYxNzQ2ODg3ZS0wODsgLyogMHgzRTU0QUUwQiwg
MHhGODVEREY0NCA9MS9sbjIgdGFpbCovCisKK2lubGluZSBkb3VibGUgZmRsaWJtU2NhbGJuIChk
b3VibGUgeCwgaW50IG4pCit7CisgICAgaW50ICBrLGh4LGx4OworICAgIGh4ID0gX19ISSh4KTsK
KyAgICBseCA9IF9fTE8oeCk7CisgICAgICAgIGsgPSAoaHgmMHg3ZmYwMDAwMCk+PjIwOyAgICAg
ICAgLyogZXh0cmFjdCBleHBvbmVudCAqLworICAgICAgICBpZiAoaz09MCkgeyAgICAgICAgICAg
ICAgICAvKiAwIG9yIHN1Ym5vcm1hbCB4ICovCisgICAgICAgICAgICBpZiAoKGx4fChoeCYweDdm
ZmZmZmZmKSk9PTApIHJldHVybiB4OyAvKiArLTAgKi8KKyAgICAgICAgeCAqPSB0d281NDsgCisg
ICAgICAgIGh4ID0gX19ISSh4KTsKKyAgICAgICAgayA9ICgoaHgmMHg3ZmYwMDAwMCk+PjIwKSAt
IDU0OyAKKyAgICAgICAgICAgIGlmIChuPCAtNTAwMDApIHJldHVybiB0aW55Kng7ICAgICAvKnVu
ZGVyZmxvdyovCisgICAgICAgIH0KKyAgICAgICAgaWYgKGs9PTB4N2ZmKSByZXR1cm4geCt4OyAg
ICAgICAgLyogTmFOIG9yIEluZiAqLworICAgICAgICBrID0gaytuOyAKKyAgICAgICAgaWYgKGsg
PiAgMHg3ZmUpIHJldHVybiBodWdlKmNvcHlzaWduKGh1Z2UseCk7IC8qIG92ZXJmbG93ICAqLwor
ICAgICAgICBpZiAoayA+IDApICAgICAgICAgICAgICAgICAvKiBub3JtYWwgcmVzdWx0ICovCisg
ICAgICAgIHtfX0hJKHgpID0gKGh4JjB4ODAwZmZmZmYpfChrPDwyMCk7IHJldHVybiB4O30KKyAg
ICAgICAgaWYgKGsgPD0gLTU0KSB7CisgICAgICAgICAgICBpZiAobiA+IDUwMDAwKSAgICAgLyog
aW4gY2FzZSBpbnRlZ2VyIG92ZXJmbG93IGluIG4rayAqLworICAgICAgICByZXR1cm4gaHVnZSpj
b3B5c2lnbihodWdlLHgpOyAgICAvKm92ZXJmbG93Ki8KKyAgICAgICAgZWxzZSByZXR1cm4gdGlu
eSpjb3B5c2lnbih0aW55LHgpOyAgICAgLyp1bmRlcmZsb3cqLworICAgICAgICB9CisgICAgICAg
IGsgKz0gNTQ7ICAgICAgICAgICAgICAgIC8qIHN1Ym5vcm1hbCByZXN1bHQgKi8KKyAgICAgICAg
X19ISSh4KSA9IChoeCYweDgwMGZmZmZmKXwoazw8MjApOworICAgICAgICByZXR1cm4geCp0d29t
NTQ7Cit9CisKK2RvdWJsZSBmZGxpYm1Qb3coZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIGRv
dWJsZSB6LGF4LHpfaCx6X2wscF9oLHBfbDsKKyAgICBkb3VibGUgeTEsdDEsdDIscixzLHQsdSx2
LHc7CisgICAgaW50IGkwLGkxLGksaixrLHlpc2ludCxuOworICAgIGludCBoeCxoeSxpeCxpeTsK
KyAgICB1bnNpZ25lZCBseCxseTsKKworICAgIGkwID0gKCgqKGludCopJm9uZSk+PjI5KV4xOyBp
MT0xLWkwOworICAgIGh4ID0gX19ISSh4KTsgbHggPSBfX0xPKHgpOworICAgIGh5ID0gX19ISSh5
KTsgbHkgPSBfX0xPKHkpOworICAgIGl4ID0gaHgmMHg3ZmZmZmZmZjsgIGl5ID0gaHkmMHg3ZmZm
ZmZmZjsKKworICAgIC8qIHk9PXplcm86IHgqKjAgPSAxICovCisgICAgaWYoKGl5fGx5KT09MCkg
cmV0dXJuIG9uZTsgICAgIAorCisgICAgLyogKy1OYU4gcmV0dXJuIHgreSAqLworICAgIGlmKGl4
ID4gMHg3ZmYwMDAwMCB8fCAoKGl4PT0weDdmZjAwMDAwKSYmKGx4IT0wKSkgfHwKKyAgICAgICBp
eSA+IDB4N2ZmMDAwMDAgfHwgKChpeT09MHg3ZmYwMDAwMCkmJihseSE9MCkpKSAKKyAgICAgICAg
cmV0dXJuIHgreTsgICAgCisKKyAgICAvKiBkZXRlcm1pbmUgaWYgeSBpcyBhbiBvZGQgaW50IHdo
ZW4geCA8IDAKKyAgICAgKiB5aXNpbnQgPSAwICAgIC4uLiB5IGlzIG5vdCBhbiBpbnRlZ2VyCisg
ICAgICogeWlzaW50ID0gMSAgICAuLi4geSBpcyBhbiBvZGQgaW50CisgICAgICogeWlzaW50ID0g
MiAgICAuLi4geSBpcyBhbiBldmVuIGludAorICAgICAqLworICAgIHlpc2ludCAgPSAwOworICAg
IGlmKGh4PDApIHsgICAgCisgICAgICAgIGlmKGl5Pj0weDQzNDAwMDAwKSB5aXNpbnQgPSAyOyAv
KiBldmVuIGludGVnZXIgeSAqLworICAgICAgICBlbHNlIGlmKGl5Pj0weDNmZjAwMDAwKSB7Cisg
ICAgICAgIGsgPSAoaXk+PjIwKS0weDNmZjsgICAgICAgLyogZXhwb25lbnQgKi8KKyAgICAgICAg
aWYoaz4yMCkgeworICAgICAgICAgICAgaiA9IGx5Pj4oNTItayk7CisgICAgICAgICAgICBpZihz
dGF0aWNfY2FzdDx1bnNpZ25lZD4oajw8KDUyLWspKT09bHkpIHlpc2ludCA9IDItKGomMSk7Cisg
ICAgICAgIH0gZWxzZSBpZihseT09MCkgeworICAgICAgICAgICAgaiA9IGl5Pj4oMjAtayk7Cisg
ICAgICAgICAgICBpZigoajw8KDIwLWspKT09aXkpIHlpc2ludCA9IDItKGomMSk7CisgICAgICAg
IH0KKyAgICAgICAgfSAgICAgICAgCisgICAgfSAKKworICAgIC8qIHNwZWNpYWwgdmFsdWUgb2Yg
eSAqLworICAgIGlmKGx5PT0wKSB7ICAgICAKKyAgICAgICAgaWYgKGl5PT0weDdmZjAwMDAwKSB7
ICAgIC8qIHkgaXMgKy1pbmYgKi8KKyAgICAgICAgICAgIGlmKCgoaXgtMHgzZmYwMDAwMCl8bHgp
PT0wKQorICAgICAgICAgICAgcmV0dXJuICB5IC0geTsgICAgLyogaW5mKiorLTEgaXMgTmFOICov
CisgICAgICAgICAgICBlbHNlIGlmIChpeCA+PSAweDNmZjAwMDAwKS8qICh8eHw+MSkqKistaW5m
ID0gaW5mLDAgKi8KKyAgICAgICAgICAgIHJldHVybiAoaHk+PTApPyB5OiB6ZXJvOworICAgICAg
ICAgICAgZWxzZSAgICAgICAgICAgIC8qICh8eHw8MSkqKi0sK2luZiA9IGluZiwwICovCisgICAg
ICAgICAgICByZXR1cm4gKGh5PDApPy15OiB6ZXJvOworICAgICAgICB9IAorICAgICAgICBpZihp
eT09MHgzZmYwMDAwMCkgeyAgICAvKiB5IGlzICArLTEgKi8KKyAgICAgICAgaWYoaHk8MCkgcmV0
dXJuIG9uZS94OyBlbHNlIHJldHVybiB4OworICAgICAgICB9CisgICAgICAgIGlmKGh5PT0weDQw
MDAwMDAwKSByZXR1cm4geCp4OyAvKiB5IGlzICAyICovCisgICAgICAgIGlmKGh5PT0weDNmZTAw
MDAwKSB7ICAgIC8qIHkgaXMgIDAuNSAqLworICAgICAgICBpZihoeD49MCkgICAgLyogeCA+PSAr
MCAqLworICAgICAgICByZXR1cm4gc3FydCh4KTsgICAgCisgICAgICAgIH0KKyAgICB9CisKKyAg
ICBheCAgID0gZmFicyh4KTsKKyAgICAvKiBzcGVjaWFsIHZhbHVlIG9mIHggKi8KKyAgICBpZihs
eD09MCkgeworICAgICAgICBpZihpeD09MHg3ZmYwMDAwMHx8aXg9PTB8fGl4PT0weDNmZjAwMDAw
KXsKKyAgICAgICAgeiA9IGF4OyAgICAgICAgICAgIC8qeCBpcyArLTAsKy1pbmYsKy0xKi8KKyAg
ICAgICAgaWYoaHk8MCkgeiA9IG9uZS96OyAgICAvKiB6ID0gKDEvfHh8KSAqLworICAgICAgICBp
ZihoeDwwKSB7CisgICAgICAgICAgICBpZigoKGl4LTB4M2ZmMDAwMDApfHlpc2ludCk9PTApIHsK
KyAgICAgICAgICAgIHogPSAoei16KS8oei16KTsgLyogKC0xKSoqbm9uLWludCBpcyBOYU4gKi8K
KyAgICAgICAgICAgIH0gZWxzZSBpZih5aXNpbnQ9PTEpIAorICAgICAgICAgICAgeiA9IC16OyAg
ICAgICAgLyogKHg8MCkqKm9kZCA9IC0ofHh8KipvZGQpICovCisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHo7CisgICAgICAgIH0KKyAgICB9CisgICAgCisgICAgbiA9IChoeD4+MzEpKzE7CisK
KyAgICAvKiAoeDwwKSoqKG5vbi1pbnQpIGlzIE5hTiAqLworICAgIGlmKChufHlpc2ludCk9PTAp
IHJldHVybiAoeC14KS8oeC14KTsKKworICAgIHMgPSBvbmU7IC8qIHMgKHNpZ24gb2YgcmVzdWx0
IC12ZSoqb2RkKSA9IC0xIGVsc2UgPSAxICovCisgICAgaWYoKG58KHlpc2ludC0xKSk9PTApIHMg
PSAtb25lOy8qICgtdmUpKioob2RkIGludCkgKi8KKworICAgIC8qIHx5fCBpcyBodWdlICovCisg
ICAgaWYoaXk+MHg0MWUwMDAwMCkgeyAvKiBpZiB8eXwgPiAyKiozMSAqLworICAgICAgICBpZihp
eT4weDQzZjAwMDAwKXsgICAgLyogaWYgfHl8ID4gMioqNjQsIG11c3Qgby91ZmxvdyAqLworICAg
ICAgICBpZihpeDw9MHgzZmVmZmZmZikgcmV0dXJuIChoeTwwKT8gaHVnZSpodWdlOnRpbnkqdGlu
eTsKKyAgICAgICAgaWYoaXg+PTB4M2ZmMDAwMDApIHJldHVybiAoaHk+MCk/IGh1Z2UqaHVnZTp0
aW55KnRpbnk7CisgICAgICAgIH0KKyAgICAvKiBvdmVyL3VuZGVyZmxvdyBpZiB4IGlzIG5vdCBj
bG9zZSB0byBvbmUgKi8KKyAgICAgICAgaWYoaXg8MHgzZmVmZmZmZikgcmV0dXJuIChoeTwwKT8g
cypodWdlKmh1Z2U6cyp0aW55KnRpbnk7CisgICAgICAgIGlmKGl4PjB4M2ZmMDAwMDApIHJldHVy
biAoaHk+MCk/IHMqaHVnZSpodWdlOnMqdGlueSp0aW55OworICAgIC8qIG5vdyB8MS14fCBpcyB0
aW55IDw9IDIqKi0yMCwgc3VmZmljZSB0byBjb21wdXRlIAorICAgICAgIGxvZyh4KSBieSB4LXhe
Mi8yK3heMy8zLXheNC80ICovCisgICAgICAgIHQgPSBheC1vbmU7ICAgICAgICAvKiB0IGhhcyAy
MCB0cmFpbGluZyB6ZXJvcyAqLworICAgICAgICB3ID0gKHQqdCkqKDAuNS10KigwLjMzMzMzMzMz
MzMzMzMzMzMzMzMzMzMtdCowLjI1KSk7CisgICAgICAgIHUgPSBpdmxuMl9oKnQ7ICAgIC8qIGl2
bG4yX2ggaGFzIDIxIHNpZy4gYml0cyAqLworICAgICAgICB2ID0gdCppdmxuMl9sLXcqaXZsbjI7
CisgICAgICAgIHQxID0gdSt2OworICAgICAgICBfX0xPKHQxKSA9IDA7CisgICAgICAgIHQyID0g
di0odDEtdSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZG91YmxlIHNzLHMyLHNfaCxzX2wsdF9o
LHRfbDsKKyAgICAgICAgbiA9IDA7CisgICAgLyogdGFrZSBjYXJlIHN1Ym5vcm1hbCBudW1iZXIg
Ki8KKyAgICAgICAgaWYoaXg8MHgwMDEwMDAwMCkKKyAgICAgICAge2F4ICo9IHR3bzUzOyBuIC09
IDUzOyBpeCA9IF9fSEkoYXgpOyB9CisgICAgICAgIG4gICs9ICgoaXgpPj4yMCktMHgzZmY7Cisg
ICAgICAgIGogID0gaXgmMHgwMDBmZmZmZjsKKyAgICAvKiBkZXRlcm1pbmUgaW50ZXJ2YWwgKi8K
KyAgICAgICAgaXggPSBqfDB4M2ZmMDAwMDA7ICAgICAgICAvKiBub3JtYWxpemUgaXggKi8KKyAg
ICAgICAgaWYoajw9MHgzOTg4RSkgaz0wOyAgICAgICAgLyogfHh8PHNxcnQoMy8yKSAqLworICAg
ICAgICBlbHNlIGlmKGo8MHhCQjY3QSkgaz0xOyAgICAvKiB8eHw8c3FydCgzKSAgICovCisgICAg
ICAgIGVsc2Uge2s9MDtuKz0xO2l4IC09IDB4MDAxMDAwMDA7fQorICAgICAgICBfX0hJKGF4KSA9
IGl4OworCisgICAgLyogY29tcHV0ZSBzcyA9IHNfaCtzX2wgPSAoeC0xKS8oeCsxKSBvciAoeC0x
LjUpLyh4KzEuNSkgKi8KKyAgICAgICAgdSA9IGF4LWJwW2tdOyAgICAgICAgLyogYnBbMF09MS4w
LCBicFsxXT0xLjUgKi8KKyAgICAgICAgdiA9IG9uZS8oYXgrYnBba10pOworICAgICAgICBzcyA9
IHUqdjsKKyAgICAgICAgc19oID0gc3M7CisgICAgICAgIF9fTE8oc19oKSA9IDA7CisgICAgLyog
dF9oPWF4K2JwW2tdIEhpZ2ggKi8KKyAgICAgICAgdF9oID0gemVybzsKKyAgICAgICAgX19ISSh0
X2gpPSgoaXg+PjEpfDB4MjAwMDAwMDApKzB4MDAwODAwMDArKGs8PDE4KTsgCisgICAgICAgIHRf
bCA9IGF4IC0gKHRfaC1icFtrXSk7CisgICAgICAgIHNfbCA9IHYqKCh1LXNfaCp0X2gpLXNfaCp0
X2wpOworICAgIC8qIGNvbXB1dGUgbG9nKGF4KSAqLworICAgICAgICBzMiA9IHNzKnNzOworICAg
ICAgICByID0gczIqczIqKEwxK3MyKihMMitzMiooTDMrczIqKEw0K3MyKihMNStzMipMNikpKSkp
OworICAgICAgICByICs9IHNfbCooc19oK3NzKTsKKyAgICAgICAgczIgID0gc19oKnNfaDsKKyAg
ICAgICAgdF9oID0gMy4wK3MyK3I7CisgICAgICAgIF9fTE8odF9oKSA9IDA7CisgICAgICAgIHRf
bCA9IHItKCh0X2gtMy4wKS1zMik7CisgICAgLyogdSt2ID0gc3MqKDErLi4uKSAqLworICAgICAg
ICB1ID0gc19oKnRfaDsKKyAgICAgICAgdiA9IHNfbCp0X2grdF9sKnNzOworICAgIC8qIDIvKDNs
b2cyKSooc3MrLi4uKSAqLworICAgICAgICBwX2ggPSB1K3Y7CisgICAgICAgIF9fTE8ocF9oKSA9
IDA7CisgICAgICAgIHBfbCA9IHYtKHBfaC11KTsKKyAgICAgICAgel9oID0gY3BfaCpwX2g7ICAg
ICAgICAvKiBjcF9oK2NwX2wgPSAyLygzKmxvZzIpICovCisgICAgICAgIHpfbCA9IGNwX2wqcF9o
K3BfbCpjcCtkcF9sW2tdOworICAgIC8qIGxvZzIoYXgpID0gKHNzKy4uKSoyLygzKmxvZzIpID0g
biArIGRwX2ggKyB6X2ggKyB6X2wgKi8KKyAgICAgICAgdCA9IChkb3VibGUpbjsKKyAgICAgICAg
dDEgPSAoKCh6X2grel9sKStkcF9oW2tdKSt0KTsKKyAgICAgICAgX19MTyh0MSkgPSAwOworICAg
ICAgICB0MiA9IHpfbC0oKCh0MS10KS1kcF9oW2tdKS16X2gpOworICAgIH0KKworICAgIC8qIHNw
bGl0IHVwIHkgaW50byB5MSt5MiBhbmQgY29tcHV0ZSAoeTEreTIpKih0MSt0MikgKi8KKyAgICB5
MSAgPSB5OworICAgIF9fTE8oeTEpID0gMDsKKyAgICBwX2wgPSAoeS15MSkqdDEreSp0MjsKKyAg
ICBwX2ggPSB5MSp0MTsKKyAgICB6ID0gcF9sK3BfaDsKKyAgICBqID0gX19ISSh6KTsKKyAgICBp
ID0gX19MTyh6KTsKKyAgICBpZiAoaj49MHg0MDkwMDAwMCkgeyAgICAgICAgICAgICAgICAvKiB6
ID49IDEwMjQgKi8KKyAgICAgICAgaWYoKChqLTB4NDA5MDAwMDApfGkpIT0wKSAgICAgICAgICAg
IC8qIGlmIHogPiAxMDI0ICovCisgICAgICAgIHJldHVybiBzKmh1Z2UqaHVnZTsgICAgICAgICAg
ICAvKiBvdmVyZmxvdyAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYocF9sK292dD56LXBf
aCkgcmV0dXJuIHMqaHVnZSpodWdlOyAgICAvKiBvdmVyZmxvdyAqLworICAgICAgICB9CisgICAg
fSBlbHNlIGlmKChqJjB4N2ZmZmZmZmYpPj0weDQwOTBjYzAwICkgeyAgICAvKiB6IDw9IC0xMDc1
ICovCisgICAgICAgIGlmKCgoai0weGMwOTBjYzAwKXxpKSE9MCkgICAgICAgICAvKiB6IDwgLTEw
NzUgKi8KKyAgICAgICAgcmV0dXJuIHMqdGlueSp0aW55OyAgICAgICAgLyogdW5kZXJmbG93ICov
CisgICAgICAgIGVsc2UgeworICAgICAgICBpZihwX2w8PXotcF9oKSByZXR1cm4gcyp0aW55KnRp
bnk7ICAgIC8qIHVuZGVyZmxvdyAqLworICAgICAgICB9CisgICAgfQorICAgIC8qCisgICAgICog
Y29tcHV0ZSAyKioocF9oK3BfbCkKKyAgICAgKi8KKyAgICBpID0gaiYweDdmZmZmZmZmOworICAg
IGsgPSAoaT4+MjApLTB4M2ZmOworICAgIG4gPSAwOworICAgIGlmKGk+MHgzZmUwMDAwMCkgeyAg
ICAgICAgLyogaWYgfHp8ID4gMC41LCBzZXQgbiA9IFt6KzAuNV0gKi8KKyAgICAgICAgbiA9IGor
KDB4MDAxMDAwMDA+PihrKzEpKTsKKyAgICAgICAgayA9ICgobiYweDdmZmZmZmZmKT4+MjApLTB4
M2ZmOyAgICAvKiBuZXcgayBmb3IgbiAqLworICAgICAgICB0ID0gemVybzsKKyAgICAgICAgX19I
SSh0KSA9IChuJn4oMHgwMDBmZmZmZj4+aykpOworICAgICAgICBuID0gKChuJjB4MDAwZmZmZmYp
fDB4MDAxMDAwMDApPj4oMjAtayk7CisgICAgICAgIGlmKGo8MCkgbiA9IC1uOworICAgICAgICBw
X2ggLT0gdDsKKyAgICB9IAorICAgIHQgPSBwX2wrcF9oOworICAgIF9fTE8odCkgPSAwOworICAg
IHUgPSB0KmxnMl9oOworICAgIHYgPSAocF9sLSh0LXBfaCkpKmxnMit0KmxnMl9sOworICAgIHog
PSB1K3Y7CisgICAgdyA9IHYtKHotdSk7CisgICAgdCAgPSB6Kno7CisgICAgdDEgID0geiAtIHQq
KFAxK3QqKFAyK3QqKFAzK3QqKFA0K3QqUDUpKSkpOworICAgIHIgID0gKHoqdDEpLyh0MS10d28p
LSh3K3oqdyk7CisgICAgeiAgPSBvbmUtKHIteik7CisgICAgaiAgPSBfX0hJKHopOworICAgIGog
Kz0gKG48PDIwKTsKKyAgICBpZigoaj4+MjApPD0wKSB6ID0gZmRsaWJtU2NhbGJuKHosbik7ICAg
IC8qIHN1Ym5vcm1hbCBvdXRwdXQgKi8KKyAgICBlbHNlIF9fSEkoeikgKz0gKG48PDIwKTsKKyAg
ICByZXR1cm4gcyp6OworfQorCitzdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRGVub3JtYWwo
ZG91YmxlIHgpCit7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IHNpZ25iaXQgPSAweDgwMDAw
MDAwMDAwMDAwMDBVTEw7CisgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IG1pbk5vcm1hbCA9IDB4
MDAwMTAwMDAwMDAwMDAwMFVMTDsKKyAgICByZXR1cm4gKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4o
eCkgJiB+c2lnbmJpdCkgLSAxIDwgbWluTm9ybWFsIC0gMTsKK30KKworc3RhdGljIEFMV0FZU19J
TkxJTkUgYm9vbCBpc0VkZ2VDYXNlKGRvdWJsZSB4KQoreworICAgIHN0YXRpYyBjb25zdCB1aW50
NjRfdCBzaWduYml0ID0gMHg4MDAwMDAwMDAwMDAwMDAwVUxMOworICAgIHN0YXRpYyBjb25zdCB1
aW50NjRfdCBpbmZpbml0eSA9IDB4N2ZmZmZmZmZmZmZmZmZmZlVMTDsKKyAgICByZXR1cm4gKGJp
dHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgJiB+c2lnbmJpdCkgLSAxID49IGluZmluaXR5IC0gMTsK
K30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgZG91YmxlIG1hdGhQb3dJbnRlcm5hbChkb3VibGUg
eCwgZG91YmxlIHkpCit7CisgICAgaWYgKCFpc0Rlbm9ybWFsKHgpICYmICFpc0Rlbm9ybWFsKHkp
KSB7CisgICAgICAgIGRvdWJsZSBsaWJtUmVzdWx0ID0gcG93KHgsIHkpOworICAgICAgICBpZiAo
bGlibVJlc3VsdCB8fCBpc0VkZ2VDYXNlKHgpIHx8IGlzRWRnZUNhc2UoeSkpCisgICAgICAgICAg
ICByZXR1cm4gbGlibVJlc3VsdDsKKyAgICB9CisgICAgcmV0dXJuIGZkbGlibVBvdyh4LCB5KTsK
K30KKworI2Vsc2UKKworQUxXQVlTX0lOTElORSBkb3VibGUgbWF0aFBvd0ludGVybmFsKGRvdWJs
ZSB4LCBkb3VibGUgeSkKK3sKKyAgICByZXR1cm4gcG93KHgsIHkpOworfQorCisjZW5kaWYKKwor
ZG91YmxlIEpTQ19IT1NUX0NBTEwgb3BlcmF0aW9uTWF0aFBvdyhkb3VibGUgeCwgZG91YmxlIHkp
Cit7CisgICAgaWYgKHN0ZDo6aXNuYW4oeSkpCisgICAgICAgIHJldHVybiBQTmFOOworICAgIGlm
IChzdGQ6OmlzaW5mKHkpICYmIGZhYnMoeCkgPT0gMSkKKyAgICAgICAgcmV0dXJuIFBOYU47Cisg
ICAgcmV0dXJuIG1hdGhQb3dJbnRlcm5hbCh4LCB5KTsKK30KKwogdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dEJ5SW5kZXgoRXhlY1N0YXRlKiBleGVjLCBFbmNvZGVkSlNWYWx1ZSBlbmNv
ZGVkQXJyYXlWYWx1ZSwgaW50MzJfdCBpbmRleCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVl
KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5oCmluZGV4IDc2N2VhNWJiNTUyN2RlYzdkZDVlMTBkN2NjZmQyZDYyOTc1
MTkzYTMuLmQ0ZWM2YTFhM2YyN2ExZTY4YWYzMmQwYWUzMTY1ZGFlMTI3YmViMTAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCkBAIC0yODEsNiArMjgxLDcgQEAg
dm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkRlYnVnKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdU
Rl9JTlRFUk5BTDsKICNpZiBFTkFCTEUoREZHX0pJVCkKIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk9wdGltaXplKEV4ZWNTdGF0ZSosIGludDMyX3QpIFdURl9JTlRF
Uk5BTDsKICNlbmRpZgorZG91YmxlIEpTQ19IT1NUX0NBTEwgb3BlcmF0aW9uTWF0aFBvdyhkb3Vi
bGUgeCwgZG91YmxlIHkpIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRCeUluZGV4KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBFbmNvZGVk
SlNWYWx1ZSk7CiAjaWYgVVNFKEpTVkFMVUU2NCkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25QdXRHZXR0ZXJTZXR0ZXIoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIElkZW50aWZpZXIq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpIFdURl9JTlRFUk5BTDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9iamVjdC5jcHAKaW5kZXggNjRhNWE3YTZkZDdm
Y2MxYTIxNmU2MzE4MWUxNDE3MTdkZjYwM2Q0Yi4uMDM4ZDU1M2FhNTEzOTA3NDBiZjcyZTA5MGJi
MjgwMDIxMjhmYTBhMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
TWF0aE9iamVjdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvTWF0aE9i
amVjdC5jcHAKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJNYXRoT2JqZWN0LmgiCiAKKyNpbmNsdWRlICJKSVRPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAi
TG9va3VwLmgiCiAjaW5jbHVkZSAiT2JqZWN0UHJvdG90eXBlLmgiCiAjaW5jbHVkZSAiSlNDSW5s
aW5lcy5oIgpAQCAtMjQyLDQzICsyNDMsNiBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNNaW4oRXhlY1N0YXRlKiBleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoanNOdW1iZXIocmVzdWx0KSk7CiB9CiAKLSNpZiBQTEFURk9STShJT1MpICYmIENQVShB
Uk1fVEhVTUIyKQotCi1zdGF0aWMgZG91YmxlIGZkbGlibVBvdyhkb3VibGUgeCwgZG91YmxlIHkp
OwotCi1zdGF0aWMgQUxXQVlTX0lOTElORSBib29sIGlzRGVub3JtYWwoZG91YmxlIHgpCi17Ci0g
ICAgICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBzaWduYml0ID0gMHg4MDAwMDAwMDAwMDAwMDAw
VUxMOwotICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgbWluTm9ybWFsID0gMHgwMDAxMDAw
MDAwMDAwMDAwVUxMOwotICAgICAgICByZXR1cm4gKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkg
JiB+c2lnbmJpdCkgLSAxIDwgbWluTm9ybWFsIC0gMTsKLX0KLQotc3RhdGljIEFMV0FZU19JTkxJ
TkUgYm9vbCBpc0VkZ2VDYXNlKGRvdWJsZSB4KQotewotICAgICAgICBzdGF0aWMgY29uc3QgdWlu
dDY0X3Qgc2lnbmJpdCA9IDB4ODAwMDAwMDAwMDAwMDAwMFVMTDsKLSAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IGluZmluaXR5ID0gMHg3ZmZmZmZmZmZmZmZmZmZmVUxMOwotICAgICAgICBy
ZXR1cm4gKGJpdHdpc2VfY2FzdDx1aW50NjRfdD4oeCkgJiB+c2lnbmJpdCkgLSAxID49IGluZmlu
aXR5IC0gMTsKLX0KLQotc3RhdGljIEFMV0FZU19JTkxJTkUgZG91YmxlIG1hdGhQb3coZG91Ymxl
IHgsIGRvdWJsZSB5KQotewotICAgIGlmICghaXNEZW5vcm1hbCh4KSAmJiAhaXNEZW5vcm1hbCh5
KSkgewotICAgICAgICBkb3VibGUgbGlibVJlc3VsdCA9IHBvdyh4LHkpOwotICAgICAgICBpZiAo
bGlibVJlc3VsdCB8fCBpc0VkZ2VDYXNlKHgpIHx8IGlzRWRnZUNhc2UoeSkpCi0gICAgICAgICAg
ICByZXR1cm4gbGlibVJlc3VsdDsKLSAgICB9Ci0gICAgcmV0dXJuIGZkbGlibVBvdyh4LHkpOwot
fQotCi0jZWxzZQotCi1BTFdBWVNfSU5MSU5FIGRvdWJsZSBtYXRoUG93KGRvdWJsZSB4LCBkb3Vi
bGUgeSkKLXsKLSAgICByZXR1cm4gcG93KHgsIHkpOwotfQotCi0jZW5kaWYKLQogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUG93KEV4ZWNTdGF0ZSogZXhlYykKIHsK
ICAgICAvLyBFQ01BIDE1LjguMi4xLjEzCkBAIC0yODYsMTEgKzI1MCw3IEBAIEVuY29kZWRKU1Zh
bHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4ZWMpCiAgICAg
ZG91YmxlIGFyZyA9IGV4ZWMtPmFyZ3VtZW50KDApLnRvTnVtYmVyKGV4ZWMpOwogICAgIGRvdWJs
ZSBhcmcyID0gZXhlYy0+YXJndW1lbnQoMSkudG9OdW1iZXIoZXhlYyk7CiAKLSAgICBpZiAoc3Rk
Ojppc25hbihhcmcyKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsK
LSAgICBpZiAoc3RkOjppc2luZihhcmcyKSAmJiBmYWJzKGFyZykgPT0gMSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShqc05hTigpKTsKLSAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KGpzTnVtYmVyKG1hdGhQb3coYXJnLCBhcmcyKSkpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoSlNWYWx1ZShvcGVyYXRpb25NYXRoUG93KGFyZywgYXJnMikpKTsKIH0KIAogRW5jb2RlZEpT
VmFsdWUgSlNDX0hPU1RfQ0FMTCBtYXRoUHJvdG9GdW5jUmFuZG9tKEV4ZWNTdGF0ZSogZXhlYykK
QEAgLTQwNywzNTQgKzM2Nyw0IEBAIEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFBy
b3RvRnVuY1RydW5jKEV4ZWNTdGF0ZSpleGVjKQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUo
anNOdW1iZXIoZXhlYy0+YXJndW1lbnQoMCkudG9JbnRlZ2VyUHJlc2VydmVOYU4oZXhlYykpKTsK
IH0KIAotCi0jaWYgUExBVEZPUk0oSU9TKSAmJiBDUFUoQVJNX1RIVU1CMikKLQotLy8gVGhlIGZv
bGxvd2luZyBjb2RlIGlzIHRha2VuIGZyb20gbmV0bGliLm9yZzoKLS8vICAgaHR0cDovL3d3dy5u
ZXRsaWIub3JnL2ZkbGlibS9mZGxpYm0uaAotLy8gICBodHRwOi8vd3d3Lm5ldGxpYi5vcmcvZmRs
aWJtL2VfcG93LmMKLS8vICAgaHR0cDovL3d3dy5uZXRsaWIub3JnL2ZkbGlibS9zX3NjYWxibi5j
Ci0vLwotLy8gQW5kIHdhcyBvcmlnaW5hbGx5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBmb2xsb3dp
bmcgbGljZW5zZToKLQotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMTk5MyBieSBTdW4gTWljcm9zeXN0
ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogRGV2ZWxvcGVkIGF0IFN1blNv
ZnQsIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KLSAqIFBlcm1pc3Npb24gdG8g
dXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKLSAqIHNvZnR3YXJlIGlzIGZy
ZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIAotICogaXMgcHJlc2VydmVk
LgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotICovCi0vKgotICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotICogQ29weXJpZ2h0IChDKSAyMDA0IGJ5IFN1biBNaWNyb3N5c3RlbXMsIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwg
bW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRl
ZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHByZXNlcnZlZC4KLSAqID09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLSAqLwotCi0v
KiBfX2llZWU3NTRfcG93KHgseSkgcmV0dXJuIHgqKnkKLSAqCi0gKiAgICAgICAgICAgICAgbgot
ICogTWV0aG9kOiAgTGV0IHggPSAgMiAgICogKDErZikKLSAqICAgIDEuIENvbXB1dGUgYW5kIHJl
dHVybiBsb2cyKHgpIGluIHR3byBwaWVjZXM6Ci0gKiAgICAgICAgbG9nMih4KSA9IHcxICsgdzIs
Ci0gKiAgICAgICB3aGVyZSB3MSBoYXMgNTMtMjQgPSAyOSBiaXQgdHJhaWxpbmcgemVyb3MuCi0g
KiAgICAyLiBQZXJmb3JtIHkqbG9nMih4KSA9IG4reScgYnkgc2ltdWxhdGluZyBtdXRpLXByZWNp
c2lvbiAKLSAqICAgICAgIGFyaXRobWV0aWMsIHdoZXJlIHx5J3w8PTAuNS4KLSAqICAgIDMuIFJl
dHVybiB4Kip5ID0gMioqbipleHAoeScqbG9nMikKLSAqCi0gKiBTcGVjaWFsIGNhc2VzOgotICog
ICAgMS4gIChhbnl0aGluZykgKiogMCAgaXMgMQotICogICAgMi4gIChhbnl0aGluZykgKiogMSAg
aXMgaXRzZWxmCi0gKiAgICAzLiAgKGFueXRoaW5nKSAqKiBOQU4gaXMgTkFOCi0gKiAgICA0LiAg
TkFOICoqIChhbnl0aGluZyBleGNlcHQgMCkgaXMgTkFOCi0gKiAgICA1LiAgKy0ofHh8ID4gMSkg
KiogICtJTkYgaXMgK0lORgotICogICAgNi4gICstKHx4fCA+IDEpICoqICAtSU5GIGlzICswCi0g
KiAgICA3LiAgKy0ofHh8IDwgMSkgKiogICtJTkYgaXMgKzAKLSAqICAgIDguICArLSh8eHwgPCAx
KSAqKiAgLUlORiBpcyArSU5GCi0gKiAgICA5LiAgKy0xICAgICAgICAgKiogKy1JTkYgaXMgTkFO
Ci0gKiAgICAxMC4gKzAgKiogKCthbnl0aGluZyBleGNlcHQgMCwgTkFOKSAgICAgICAgICAgICAg
IGlzICswCi0gKiAgICAxMS4gLTAgKiogKCthbnl0aGluZyBleGNlcHQgMCwgTkFOLCBvZGQgaW50
ZWdlcikgIGlzICswCi0gKiAgICAxMi4gKzAgKiogKC1hbnl0aGluZyBleGNlcHQgMCwgTkFOKSAg
ICAgICAgICAgICAgIGlzICtJTkYKLSAqICAgIDEzLiAtMCAqKiAoLWFueXRoaW5nIGV4Y2VwdCAw
LCBOQU4sIG9kZCBpbnRlZ2VyKSAgaXMgK0lORgotICogICAgMTQuIC0wICoqIChvZGQgaW50ZWdl
cikgPSAtKCArMCAqKiAob2RkIGludGVnZXIpICkKLSAqICAgIDE1LiArSU5GICoqICgrYW55dGhp
bmcgZXhjZXB0IDAsTkFOKSBpcyArSU5GCi0gKiAgICAxNi4gK0lORiAqKiAoLWFueXRoaW5nIGV4
Y2VwdCAwLE5BTikgaXMgKzAKLSAqICAgIDE3LiAtSU5GICoqIChhbnl0aGluZykgID0gLTAgKiog
KC1hbnl0aGluZykKLSAqICAgIDE4LiAoLWFueXRoaW5nKSAqKiAoaW50ZWdlcikgaXMgKC0xKSoq
KGludGVnZXIpKigrYW55dGhpbmcqKmludGVnZXIpCi0gKiAgICAxOS4gKC1hbnl0aGluZyBleGNl
cHQgMCBhbmQgaW5mKSAqKiAobm9uLWludGVnZXIpIGlzIE5BTgotICoKLSAqIEFjY3VyYWN5Ogot
ICogICAgcG93KHgseSkgcmV0dXJucyB4Kip5IG5lYXJseSByb3VuZGVkLiBJbiBwYXJ0aWN1bGFy
Ci0gKiAgICAgICAgICAgIHBvdyhpbnRlZ2VyLGludGVnZXIpCi0gKiAgICBhbHdheXMgcmV0dXJu
cyB0aGUgY29ycmVjdCBpbnRlZ2VyIHByb3ZpZGVkIGl0IGlzIAotICogICAgcmVwcmVzZW50YWJs
ZS4KLSAqCi0gKiBDb25zdGFudHMgOgotICogVGhlIGhleGFkZWNpbWFsIHZhbHVlcyBhcmUgdGhl
IGludGVuZGVkIG9uZXMgZm9yIHRoZSBmb2xsb3dpbmcgCi0gKiBjb25zdGFudHMuIFRoZSBkZWNp
bWFsIHZhbHVlcyBtYXkgYmUgdXNlZCwgcHJvdmlkZWQgdGhhdCB0aGUgCi0gKiBjb21waWxlciB3
aWxsIGNvbnZlcnQgZnJvbSBkZWNpbWFsIHRvIGJpbmFyeSBhY2N1cmF0ZWx5IGVub3VnaCAKLSAq
IHRvIHByb2R1Y2UgdGhlIGhleGFkZWNpbWFsIHZhbHVlcyBzaG93bi4KLSAqLwotCi0jZGVmaW5l
IF9fSEkoeCkgKigxKyhpbnQqKSZ4KQotI2RlZmluZSBfX0xPKHgpICooaW50KikmeAotCi1zdGF0
aWMgY29uc3QgZG91YmxlCi1icFtdID0gezEuMCwgMS41LH0sCi1kcF9oW10gPSB7IDAuMCwgNS44
NDk2MjQ4NzIyMDc2NDE2MDE1NmUtMDEsfSwgLyogMHgzRkUyQjgwMywgMHg0MDAwMDAwMCAqLwot
ZHBfbFtdID0geyAwLjAsIDEuMzUwMDM5MjAyMTI5NzQ4OTcxMjhlLTA4LH0sIC8qIDB4M0U0Q0ZE
RUIsIDB4NDNDRkQwMDYgKi8KLXplcm8gICAgPSAgMC4wLAotb25lICAgID0gIDEuMCwKLXR3byAg
ICA9ICAyLjAsCi10d281MyAgICA9ICA5MDA3MTk5MjU0NzQwOTkyLjAsICAgIC8qIDB4NDM0MDAw
MDAsIDB4MDAwMDAwMDAgKi8KLWh1Z2UgICAgPSAgMS4wZTMwMCwKLXRpbnkgICAgPSAgMS4wZS0z
MDAsCi0gICAgICAgIC8qIGZvciBzY2FsYm4gKi8KLXR3bzU0ICAgPSAgMS44MDE0Mzk4NTA5NDgx
OTg0MDAwMGUrMTYsIC8qIDB4NDM1MDAwMDAsIDB4MDAwMDAwMDAgKi8KLXR3b201NCAgPSAgNS41
NTExMTUxMjMxMjU3ODI3MDIxMmUtMTcsIC8qIDB4M0M5MDAwMDAsIDB4MDAwMDAwMDAgKi8KLSAg
ICAvKiBwb2x5IGNvZWZzIGZvciAoMy8yKSoobG9nKHgpLTJzLTIvMypzKiozICovCi1MMSAgPSAg
NS45OTk5OTk5OTk5OTk5NDY0ODcyNWUtMDEsIC8qIDB4M0ZFMzMzMzMsIDB4MzMzMzMzMDMgKi8K
LUwyICA9ICA0LjI4NTcxNDI4NTc4NTUwMTg0MjUyZS0wMSwgLyogMHgzRkRCNkRCNiwgMHhEQjZG
QUJGRiAqLwotTDMgID0gIDMuMzMzMzMzMjk4MTgzNzc0MzI5MThlLTAxLCAvKiAweDNGRDU1NTU1
LCAweDUxOEYyNjREICovCi1MNCAgPSAgMi43MjcyODEyMzgwODUzNDAwNjQ4OWUtMDEsIC8qIDB4
M0ZEMTc0NjAsIDB4QTkxRDQxMDEgKi8KLUw1ICA9ICAyLjMwNjYwNzQ1Nzc1NTYxNzU0MDY3ZS0w
MSwgLyogMHgzRkNEODY0QSwgMHg5M0M5REI2NSAqLwotTDYgID0gIDIuMDY5NzUwMTc4MDAzMzg0
MTc3ODRlLTAxLCAvKiAweDNGQ0E3RTI4LCAweDRBNDU0RUVGICovCi1QMSAgID0gIDEuNjY2NjY2
NjY2NjY2NjYwMTkwMzdlLTAxLCAvKiAweDNGQzU1NTU1LCAweDU1NTU1NTNFICovCi1QMiAgID0g
LTIuNzc3Nzc3Nzc3NzAxNTU5MzM4NDJlLTAzLCAvKiAweEJGNjZDMTZDLCAweDE2QkVCRDkzICov
Ci1QMyAgID0gIDYuNjEzNzU2MzIxNDM3OTM0MzYxMTdlLTA1LCAvKiAweDNGMTE1NjZBLCAweEFG
MjVERTJDICovCi1QNCAgID0gLTEuNjUzMzkwMjIwNTQ2NTI1MTUzOTBlLTA2LCAvKiAweEJFQkJC
RDQxLCAweEM1RDI2QkYxICovCi1QNSAgID0gIDQuMTM4MTM2Nzk3MDU3MjM4NDYwMzllLTA4LCAv
KiAweDNFNjYzNzY5LCAweDcyQkVBNEQwICovCi1sZzIgID0gIDYuOTMxNDcxODA1NTk5NDUyODYy
MjdlLTAxLCAvKiAweDNGRTYyRTQyLCAweEZFRkEzOUVGICovCi1sZzJfaCAgPSAgNi45MzE0NzE4
MjQ2NDU5OTYwOTM3NWUtMDEsIC8qIDB4M0ZFNjJFNDMsIDB4MDAwMDAwMDAgKi8KLWxnMl9sICA9
IC0xLjkwNDY1NDI5OTk1Nzc2ODA0NTI1ZS0wOSwgLyogMHhCRTIwNUM2MSwgMHgwQ0E4NkMzOSAq
Lwotb3Z0ID0gIDguMDA4NTY2MjU5NTM3Mjk0NDM3MmUtMDAxNywgLyogLSgxMDI0LWxvZzIob3Zm
bCsuNXVscCkpICovCi1jcCAgICA9ICA5LjYxNzk2NjkzOTI1OTc1NTU0MzI5ZS0wMSwgLyogMHgz
RkVFQzcwOSwgMHhEQzNBMDNGRCA9Mi8oM2xuMikgKi8KLWNwX2ggID0gIDkuNjE3OTY3MDA5NTQ0
MzcyNTU4NTllLTAxLCAvKiAweDNGRUVDNzA5LCAweEUwMDAwMDAwID0oZmxvYXQpY3AgKi8KLWNw
X2wgID0gLTcuMDI4NDYxNjUwOTUyNzU4MjY1MTZlLTA5LCAvKiAweEJFM0UyRkUwLCAweDE0NUIw
MUY1ID10YWlsIG9mIGNwX2gqLwotaXZsbjIgICAgPSAgMS40NDI2OTUwNDA4ODg5NjMzODcwMGUr
MDAsIC8qIDB4M0ZGNzE1NDcsIDB4NjUyQjgyRkUgPTEvbG4yICovCi1pdmxuMl9oICA9ICAxLjQ0
MjY5NTAyMTYyOTMzMzQ5NjA5ZSswMCwgLyogMHgzRkY3MTU0NywgMHg2MDAwMDAwMCA9MjRiIDEv
bG4yKi8KLWl2bG4yX2wgID0gIDEuOTI1OTYyOTkxMTI2NjE3NDY4ODdlLTA4OyAvKiAweDNFNTRB
RTBCLCAweEY4NURERjQ0ID0xL2xuMiB0YWlsKi8KLQotaW5saW5lIGRvdWJsZSBmZGxpYm1TY2Fs
Ym4gKGRvdWJsZSB4LCBpbnQgbikKLXsKLSAgICBpbnQgIGssaHgsbHg7Ci0gICAgaHggPSBfX0hJ
KHgpOwotICAgIGx4ID0gX19MTyh4KTsKLSAgICAgICAgayA9IChoeCYweDdmZjAwMDAwKT4+MjA7
ICAgICAgICAvKiBleHRyYWN0IGV4cG9uZW50ICovCi0gICAgICAgIGlmIChrPT0wKSB7ICAgICAg
ICAgICAgICAgIC8qIDAgb3Igc3Vibm9ybWFsIHggKi8KLSAgICAgICAgICAgIGlmICgobHh8KGh4
JjB4N2ZmZmZmZmYpKT09MCkgcmV0dXJuIHg7IC8qICstMCAqLwotICAgICAgICB4ICo9IHR3bzU0
OyAKLSAgICAgICAgaHggPSBfX0hJKHgpOwotICAgICAgICBrID0gKChoeCYweDdmZjAwMDAwKT4+
MjApIC0gNTQ7IAotICAgICAgICAgICAgaWYgKG48IC01MDAwMCkgcmV0dXJuIHRpbnkqeDsgICAg
IC8qdW5kZXJmbG93Ki8KLSAgICAgICAgfQotICAgICAgICBpZiAoaz09MHg3ZmYpIHJldHVybiB4
K3g7ICAgICAgICAvKiBOYU4gb3IgSW5mICovCi0gICAgICAgIGsgPSBrK247IAotICAgICAgICBp
ZiAoayA+ICAweDdmZSkgcmV0dXJuIGh1Z2UqY29weXNpZ24oaHVnZSx4KTsgLyogb3ZlcmZsb3cg
ICovCi0gICAgICAgIGlmIChrID4gMCkgICAgICAgICAgICAgICAgIC8qIG5vcm1hbCByZXN1bHQg
Ki8KLSAgICAgICAge19fSEkoeCkgPSAoaHgmMHg4MDBmZmZmZil8KGs8PDIwKTsgcmV0dXJuIHg7
fQotICAgICAgICBpZiAoayA8PSAtNTQpIHsKLSAgICAgICAgICAgIGlmIChuID4gNTAwMDApICAg
ICAvKiBpbiBjYXNlIGludGVnZXIgb3ZlcmZsb3cgaW4gbitrICovCi0gICAgICAgIHJldHVybiBo
dWdlKmNvcHlzaWduKGh1Z2UseCk7ICAgIC8qb3ZlcmZsb3cqLwotICAgICAgICBlbHNlIHJldHVy
biB0aW55KmNvcHlzaWduKHRpbnkseCk7ICAgICAvKnVuZGVyZmxvdyovCi0gICAgICAgIH0KLSAg
ICAgICAgayArPSA1NDsgICAgICAgICAgICAgICAgLyogc3Vibm9ybWFsIHJlc3VsdCAqLwotICAg
ICAgICBfX0hJKHgpID0gKGh4JjB4ODAwZmZmZmYpfChrPDwyMCk7Ci0gICAgICAgIHJldHVybiB4
KnR3b201NDsKLX0KLQotZG91YmxlIGZkbGlibVBvdyhkb3VibGUgeCwgZG91YmxlIHkpCi17Ci0g
ICAgZG91YmxlIHosYXgsel9oLHpfbCxwX2gscF9sOwotICAgIGRvdWJsZSB5MSx0MSx0MixyLHMs
dCx1LHYsdzsKLSAgICBpbnQgaTAsaTEsaSxqLGsseWlzaW50LG47Ci0gICAgaW50IGh4LGh5LGl4
LGl5OwotICAgIHVuc2lnbmVkIGx4LGx5OwotCi0gICAgaTAgPSAoKCooaW50Kikmb25lKT4+Mjkp
XjE7IGkxPTEtaTA7Ci0gICAgaHggPSBfX0hJKHgpOyBseCA9IF9fTE8oeCk7Ci0gICAgaHkgPSBf
X0hJKHkpOyBseSA9IF9fTE8oeSk7Ci0gICAgaXggPSBoeCYweDdmZmZmZmZmOyAgaXkgPSBoeSYw
eDdmZmZmZmZmOwotCi0gICAgLyogeT09emVybzogeCoqMCA9IDEgKi8KLSAgICBpZigoaXl8bHkp
PT0wKSByZXR1cm4gb25lOyAgICAgCi0KLSAgICAvKiArLU5hTiByZXR1cm4geCt5ICovCi0gICAg
aWYoaXggPiAweDdmZjAwMDAwIHx8ICgoaXg9PTB4N2ZmMDAwMDApJiYobHghPTApKSB8fAotICAg
ICAgIGl5ID4gMHg3ZmYwMDAwMCB8fCAoKGl5PT0weDdmZjAwMDAwKSYmKGx5IT0wKSkpIAotICAg
ICAgICByZXR1cm4geCt5OyAgICAKLQotICAgIC8qIGRldGVybWluZSBpZiB5IGlzIGFuIG9kZCBp
bnQgd2hlbiB4IDwgMAotICAgICAqIHlpc2ludCA9IDAgICAgLi4uIHkgaXMgbm90IGFuIGludGVn
ZXIKLSAgICAgKiB5aXNpbnQgPSAxICAgIC4uLiB5IGlzIGFuIG9kZCBpbnQKLSAgICAgKiB5aXNp
bnQgPSAyICAgIC4uLiB5IGlzIGFuIGV2ZW4gaW50Ci0gICAgICovCi0gICAgeWlzaW50ICA9IDA7
Ci0gICAgaWYoaHg8MCkgeyAgICAKLSAgICAgICAgaWYoaXk+PTB4NDM0MDAwMDApIHlpc2ludCA9
IDI7IC8qIGV2ZW4gaW50ZWdlciB5ICovCi0gICAgICAgIGVsc2UgaWYoaXk+PTB4M2ZmMDAwMDAp
IHsKLSAgICAgICAgayA9IChpeT4+MjApLTB4M2ZmOyAgICAgICAvKiBleHBvbmVudCAqLwotICAg
ICAgICBpZihrPjIwKSB7Ci0gICAgICAgICAgICBqID0gbHk+Pig1Mi1rKTsKLSAgICAgICAgICAg
IGlmKHN0YXRpY19jYXN0PHVuc2lnbmVkPihqPDwoNTItaykpPT1seSkgeWlzaW50ID0gMi0oaiYx
KTsKLSAgICAgICAgfSBlbHNlIGlmKGx5PT0wKSB7Ci0gICAgICAgICAgICBqID0gaXk+PigyMC1r
KTsKLSAgICAgICAgICAgIGlmKChqPDwoMjAtaykpPT1peSkgeWlzaW50ID0gMi0oaiYxKTsKLSAg
ICAgICAgfQotICAgICAgICB9ICAgICAgICAKLSAgICB9IAotCi0gICAgLyogc3BlY2lhbCB2YWx1
ZSBvZiB5ICovCi0gICAgaWYobHk9PTApIHsgICAgIAotICAgICAgICBpZiAoaXk9PTB4N2ZmMDAw
MDApIHsgICAgLyogeSBpcyArLWluZiAqLwotICAgICAgICAgICAgaWYoKChpeC0weDNmZjAwMDAw
KXxseCk9PTApCi0gICAgICAgICAgICByZXR1cm4gIHkgLSB5OyAgICAvKiBpbmYqKistMSBpcyBO
YU4gKi8KLSAgICAgICAgICAgIGVsc2UgaWYgKGl4ID49IDB4M2ZmMDAwMDApLyogKHx4fD4xKSoq
Ky1pbmYgPSBpbmYsMCAqLwotICAgICAgICAgICAgcmV0dXJuIChoeT49MCk/IHk6IHplcm87Ci0g
ICAgICAgICAgICBlbHNlICAgICAgICAgICAgLyogKHx4fDwxKSoqLSwraW5mID0gaW5mLDAgKi8K
LSAgICAgICAgICAgIHJldHVybiAoaHk8MCk/LXk6IHplcm87Ci0gICAgICAgIH0gCi0gICAgICAg
IGlmKGl5PT0weDNmZjAwMDAwKSB7ICAgIC8qIHkgaXMgICstMSAqLwotICAgICAgICBpZihoeTww
KSByZXR1cm4gb25lL3g7IGVsc2UgcmV0dXJuIHg7Ci0gICAgICAgIH0KLSAgICAgICAgaWYoaHk9
PTB4NDAwMDAwMDApIHJldHVybiB4Kng7IC8qIHkgaXMgIDIgKi8KLSAgICAgICAgaWYoaHk9PTB4
M2ZlMDAwMDApIHsgICAgLyogeSBpcyAgMC41ICovCi0gICAgICAgIGlmKGh4Pj0wKSAgICAvKiB4
ID49ICswICovCi0gICAgICAgIHJldHVybiBzcXJ0KHgpOyAgICAKLSAgICAgICAgfQotICAgIH0K
LQotICAgIGF4ICAgPSBmYWJzKHgpOwotICAgIC8qIHNwZWNpYWwgdmFsdWUgb2YgeCAqLwotICAg
IGlmKGx4PT0wKSB7Ci0gICAgICAgIGlmKGl4PT0weDdmZjAwMDAwfHxpeD09MHx8aXg9PTB4M2Zm
MDAwMDApewotICAgICAgICB6ID0gYXg7ICAgICAgICAgICAgLyp4IGlzICstMCwrLWluZiwrLTEq
LwotICAgICAgICBpZihoeTwwKSB6ID0gb25lL3o7ICAgIC8qIHogPSAoMS98eHwpICovCi0gICAg
ICAgIGlmKGh4PDApIHsKLSAgICAgICAgICAgIGlmKCgoaXgtMHgzZmYwMDAwMCl8eWlzaW50KT09
MCkgewotICAgICAgICAgICAgeiA9ICh6LXopLyh6LXopOyAvKiAoLTEpKipub24taW50IGlzIE5h
TiAqLwotICAgICAgICAgICAgfSBlbHNlIGlmKHlpc2ludD09MSkgCi0gICAgICAgICAgICB6ID0g
LXo7ICAgICAgICAvKiAoeDwwKSoqb2RkID0gLSh8eHwqKm9kZCkgKi8KLSAgICAgICAgfQotICAg
ICAgICByZXR1cm4gejsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBuID0gKGh4Pj4zMSkr
MTsKLQotICAgIC8qICh4PDApKioobm9uLWludCkgaXMgTmFOICovCi0gICAgaWYoKG58eWlzaW50
KT09MCkgcmV0dXJuICh4LXgpLyh4LXgpOwotCi0gICAgcyA9IG9uZTsgLyogcyAoc2lnbiBvZiBy
ZXN1bHQgLXZlKipvZGQpID0gLTEgZWxzZSA9IDEgKi8KLSAgICBpZigobnwoeWlzaW50LTEpKT09
MCkgcyA9IC1vbmU7LyogKC12ZSkqKihvZGQgaW50KSAqLwotCi0gICAgLyogfHl8IGlzIGh1Z2Ug
Ki8KLSAgICBpZihpeT4weDQxZTAwMDAwKSB7IC8qIGlmIHx5fCA+IDIqKjMxICovCi0gICAgICAg
IGlmKGl5PjB4NDNmMDAwMDApeyAgICAvKiBpZiB8eXwgPiAyKio2NCwgbXVzdCBvL3VmbG93ICov
Ci0gICAgICAgIGlmKGl4PD0weDNmZWZmZmZmKSByZXR1cm4gKGh5PDApPyBodWdlKmh1Z2U6dGlu
eSp0aW55OwotICAgICAgICBpZihpeD49MHgzZmYwMDAwMCkgcmV0dXJuIChoeT4wKT8gaHVnZSpo
dWdlOnRpbnkqdGlueTsKLSAgICAgICAgfQotICAgIC8qIG92ZXIvdW5kZXJmbG93IGlmIHggaXMg
bm90IGNsb3NlIHRvIG9uZSAqLwotICAgICAgICBpZihpeDwweDNmZWZmZmZmKSByZXR1cm4gKGh5
PDApPyBzKmh1Z2UqaHVnZTpzKnRpbnkqdGlueTsKLSAgICAgICAgaWYoaXg+MHgzZmYwMDAwMCkg
cmV0dXJuIChoeT4wKT8gcypodWdlKmh1Z2U6cyp0aW55KnRpbnk7Ci0gICAgLyogbm93IHwxLXh8
IGlzIHRpbnkgPD0gMioqLTIwLCBzdWZmaWNlIHRvIGNvbXB1dGUgCi0gICAgICAgbG9nKHgpIGJ5
IHgteF4yLzIreF4zLzMteF40LzQgKi8KLSAgICAgICAgdCA9IGF4LW9uZTsgICAgICAgIC8qIHQg
aGFzIDIwIHRyYWlsaW5nIHplcm9zICovCi0gICAgICAgIHcgPSAodCp0KSooMC41LXQqKDAuMzMz
MzMzMzMzMzMzMzMzMzMzMzMzMy10KjAuMjUpKTsKLSAgICAgICAgdSA9IGl2bG4yX2gqdDsgICAg
LyogaXZsbjJfaCBoYXMgMjEgc2lnLiBiaXRzICovCi0gICAgICAgIHYgPSB0Kml2bG4yX2wtdypp
dmxuMjsKLSAgICAgICAgdDEgPSB1K3Y7Ci0gICAgICAgIF9fTE8odDEpID0gMDsKLSAgICAgICAg
dDIgPSB2LSh0MS11KTsKLSAgICB9IGVsc2UgewotICAgICAgICBkb3VibGUgc3MsczIsc19oLHNf
bCx0X2gsdF9sOwotICAgICAgICBuID0gMDsKLSAgICAvKiB0YWtlIGNhcmUgc3Vibm9ybWFsIG51
bWJlciAqLwotICAgICAgICBpZihpeDwweDAwMTAwMDAwKQotICAgICAgICB7YXggKj0gdHdvNTM7
IG4gLT0gNTM7IGl4ID0gX19ISShheCk7IH0KLSAgICAgICAgbiAgKz0gKChpeCk+PjIwKS0weDNm
ZjsKLSAgICAgICAgaiAgPSBpeCYweDAwMGZmZmZmOwotICAgIC8qIGRldGVybWluZSBpbnRlcnZh
bCAqLwotICAgICAgICBpeCA9IGp8MHgzZmYwMDAwMDsgICAgICAgIC8qIG5vcm1hbGl6ZSBpeCAq
LwotICAgICAgICBpZihqPD0weDM5ODhFKSBrPTA7ICAgICAgICAvKiB8eHw8c3FydCgzLzIpICov
Ci0gICAgICAgIGVsc2UgaWYoajwweEJCNjdBKSBrPTE7ICAgIC8qIHx4fDxzcXJ0KDMpICAgKi8K
LSAgICAgICAgZWxzZSB7az0wO24rPTE7aXggLT0gMHgwMDEwMDAwMDt9Ci0gICAgICAgIF9fSEko
YXgpID0gaXg7Ci0KLSAgICAvKiBjb21wdXRlIHNzID0gc19oK3NfbCA9ICh4LTEpLyh4KzEpIG9y
ICh4LTEuNSkvKHgrMS41KSAqLwotICAgICAgICB1ID0gYXgtYnBba107ICAgICAgICAvKiBicFsw
XT0xLjAsIGJwWzFdPTEuNSAqLwotICAgICAgICB2ID0gb25lLyhheCticFtrXSk7Ci0gICAgICAg
IHNzID0gdSp2OwotICAgICAgICBzX2ggPSBzczsKLSAgICAgICAgX19MTyhzX2gpID0gMDsKLSAg
ICAvKiB0X2g9YXgrYnBba10gSGlnaCAqLwotICAgICAgICB0X2ggPSB6ZXJvOwotICAgICAgICBf
X0hJKHRfaCk9KChpeD4+MSl8MHgyMDAwMDAwMCkrMHgwMDA4MDAwMCsoazw8MTgpOyAKLSAgICAg
ICAgdF9sID0gYXggLSAodF9oLWJwW2tdKTsKLSAgICAgICAgc19sID0gdiooKHUtc19oKnRfaCkt
c19oKnRfbCk7Ci0gICAgLyogY29tcHV0ZSBsb2coYXgpICovCi0gICAgICAgIHMyID0gc3Mqc3M7
Ci0gICAgICAgIHIgPSBzMipzMiooTDErczIqKEwyK3MyKihMMytzMiooTDQrczIqKEw1K3MyKkw2
KSkpKSk7Ci0gICAgICAgIHIgKz0gc19sKihzX2grc3MpOwotICAgICAgICBzMiAgPSBzX2gqc19o
OwotICAgICAgICB0X2ggPSAzLjArczIrcjsKLSAgICAgICAgX19MTyh0X2gpID0gMDsKLSAgICAg
ICAgdF9sID0gci0oKHRfaC0zLjApLXMyKTsKLSAgICAvKiB1K3YgPSBzcyooMSsuLi4pICovCi0g
ICAgICAgIHUgPSBzX2gqdF9oOwotICAgICAgICB2ID0gc19sKnRfaCt0X2wqc3M7Ci0gICAgLyog
Mi8oM2xvZzIpKihzcysuLi4pICovCi0gICAgICAgIHBfaCA9IHUrdjsKLSAgICAgICAgX19MTyhw
X2gpID0gMDsKLSAgICAgICAgcF9sID0gdi0ocF9oLXUpOwotICAgICAgICB6X2ggPSBjcF9oKnBf
aDsgICAgICAgIC8qIGNwX2grY3BfbCA9IDIvKDMqbG9nMikgKi8KLSAgICAgICAgel9sID0gY3Bf
bCpwX2grcF9sKmNwK2RwX2xba107Ci0gICAgLyogbG9nMihheCkgPSAoc3MrLi4pKjIvKDMqbG9n
MikgPSBuICsgZHBfaCArIHpfaCArIHpfbCAqLwotICAgICAgICB0ID0gKGRvdWJsZSluOwotICAg
ICAgICB0MSA9ICgoKHpfaCt6X2wpK2RwX2hba10pK3QpOwotICAgICAgICBfX0xPKHQxKSA9IDA7
Ci0gICAgICAgIHQyID0gel9sLSgoKHQxLXQpLWRwX2hba10pLXpfaCk7Ci0gICAgfQotCi0gICAg
Lyogc3BsaXQgdXAgeSBpbnRvIHkxK3kyIGFuZCBjb21wdXRlICh5MSt5MikqKHQxK3QyKSAqLwot
ICAgIHkxICA9IHk7Ci0gICAgX19MTyh5MSkgPSAwOwotICAgIHBfbCA9ICh5LXkxKSp0MSt5KnQy
OwotICAgIHBfaCA9IHkxKnQxOwotICAgIHogPSBwX2wrcF9oOwotICAgIGogPSBfX0hJKHopOwot
ICAgIGkgPSBfX0xPKHopOwotICAgIGlmIChqPj0weDQwOTAwMDAwKSB7ICAgICAgICAgICAgICAg
IC8qIHogPj0gMTAyNCAqLwotICAgICAgICBpZigoKGotMHg0MDkwMDAwMCl8aSkhPTApICAgICAg
ICAgICAgLyogaWYgeiA+IDEwMjQgKi8KLSAgICAgICAgcmV0dXJuIHMqaHVnZSpodWdlOyAgICAg
ICAgICAgIC8qIG92ZXJmbG93ICovCi0gICAgICAgIGVsc2UgewotICAgICAgICBpZihwX2wrb3Z0
PnotcF9oKSByZXR1cm4gcypodWdlKmh1Z2U7ICAgIC8qIG92ZXJmbG93ICovCi0gICAgICAgIH0K
LSAgICB9IGVsc2UgaWYoKGomMHg3ZmZmZmZmZik+PTB4NDA5MGNjMDAgKSB7ICAgIC8qIHogPD0g
LTEwNzUgKi8KLSAgICAgICAgaWYoKChqLTB4YzA5MGNjMDApfGkpIT0wKSAgICAgICAgIC8qIHog
PCAtMTA3NSAqLwotICAgICAgICByZXR1cm4gcyp0aW55KnRpbnk7ICAgICAgICAvKiB1bmRlcmZs
b3cgKi8KLSAgICAgICAgZWxzZSB7Ci0gICAgICAgIGlmKHBfbDw9ei1wX2gpIHJldHVybiBzKnRp
bnkqdGlueTsgICAgLyogdW5kZXJmbG93ICovCi0gICAgICAgIH0KLSAgICB9Ci0gICAgLyoKLSAg
ICAgKiBjb21wdXRlIDIqKihwX2grcF9sKQotICAgICAqLwotICAgIGkgPSBqJjB4N2ZmZmZmZmY7
Ci0gICAgayA9IChpPj4yMCktMHgzZmY7Ci0gICAgbiA9IDA7Ci0gICAgaWYoaT4weDNmZTAwMDAw
KSB7ICAgICAgICAvKiBpZiB8enwgPiAwLjUsIHNldCBuID0gW3orMC41XSAqLwotICAgICAgICBu
ID0gaisoMHgwMDEwMDAwMD4+KGsrMSkpOwotICAgICAgICBrID0gKChuJjB4N2ZmZmZmZmYpPj4y
MCktMHgzZmY7ICAgIC8qIG5ldyBrIGZvciBuICovCi0gICAgICAgIHQgPSB6ZXJvOwotICAgICAg
ICBfX0hJKHQpID0gKG4mfigweDAwMGZmZmZmPj5rKSk7Ci0gICAgICAgIG4gPSAoKG4mMHgwMDBm
ZmZmZil8MHgwMDEwMDAwMCk+PigyMC1rKTsKLSAgICAgICAgaWYoajwwKSBuID0gLW47Ci0gICAg
ICAgIHBfaCAtPSB0OwotICAgIH0gCi0gICAgdCA9IHBfbCtwX2g7Ci0gICAgX19MTyh0KSA9IDA7
Ci0gICAgdSA9IHQqbGcyX2g7Ci0gICAgdiA9IChwX2wtKHQtcF9oKSkqbGcyK3QqbGcyX2w7Ci0g
ICAgeiA9IHUrdjsKLSAgICB3ID0gdi0oei11KTsKLSAgICB0ICA9IHoqejsKLSAgICB0MSAgPSB6
IC0gdCooUDErdCooUDIrdCooUDMrdCooUDQrdCpQNSkpKSk7Ci0gICAgciAgPSAoeip0MSkvKHQx
LXR3byktKHcreip3KTsKLSAgICB6ICA9IG9uZS0oci16KTsKLSAgICBqICA9IF9fSEkoeik7Ci0g
ICAgaiArPSAobjw8MjApOwotICAgIGlmKChqPj4yMCk8PTApIHogPSBmZGxpYm1TY2FsYm4oeixu
KTsgICAgLyogc3Vibm9ybWFsIG91dHB1dCAqLwotICAgIGVsc2UgX19ISSh6KSArPSAobjw8MjAp
OwotICAgIHJldHVybiBzKno7Ci19Ci0KLSNlbmRpZgotCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctYmFz
aWNzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy1iYXNp
Y3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGRmMTk4ODQ0MDdlODYyZjU4MzJhZTNhNDQ4OGQzMjVhNmNkN2Zi
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
bWF0aC1wb3ctYmFzaWNzLmpzCkBAIC0wLDAgKzEsMjg2IEBACitmdW5jdGlvbiB2YWx1ZXNBcmVD
bG9zZShhLCBiKSB7CisgICAgcmV0dXJuIE1hdGguYWJzKGEgLyBiKSAtIDEgPCAxZS0xMDsKK30K
KworLy8gU29tZSByYW5kb20gdmFsdWVzLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTEo
eCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0Rv
dWJsZURvdWJsZTEpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50MSh4LCB5KSB7CisgICAg
cmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50MSk7CisK
K2Z1bmN0aW9uIHRlc3QxKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93
RG91YmxlRG91YmxlMSh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQs
IGV4cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQ
b3dEb3VibGVEb3VibGUxKCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4
cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGlu
dGVnZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Cisg
ICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50MSh4LCBpbnRlZ2VyWSk7CisgICAg
ICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50MSgiICsgeCArICIsICIg
KyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0
byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3QxKTsKK3Rlc3QxKDM3Ni43
NjUyMjc2NDM3NzI5NiwgMTAuODE2OTkyMjYwNTE1NjksIDcuMzMzOTUxOTI5MTA5MjUyZSsyNywg
NS43NjM3ODk4OTU3NTA4OWUrMjUpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlMih4
LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91
YmxlRG91YmxlMik7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQyKHgsIHkpIHsKKyAgICBy
ZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQyKTsKK2Z1
bmN0aW9uIHRlc3QyKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91
YmxlRG91YmxlMih4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4
cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dE
b3VibGVEb3VibGUyKCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVj
dGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVn
ZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAg
ICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50Mih4LCBpbnRlZ2VyWSk7CisgICAgICAg
IGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50MigiICsgeCArICIsICIgKyBp
bnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAi
ICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3QyKTsKK3Rlc3QyKDM3Ni43NjUy
Mjc2NDM3NzI5NiwgLTUuODE2OTkyMjYwNTE1NjksIDEuMDM1MTgwMzMxMTg3NTc5ZS0xNSwgMS4z
MTcxODI0MzEwNDAwMjY1ZS0xMyk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGUzKHgs
IHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3Vi
bGVEb3VibGUzKTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludDMoeCwgeSkgeworICAgIHJl
dHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludDMpOworZnVu
Y3Rpb24gdGVzdDMoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3Vi
bGVEb3VibGUzKHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhw
ZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0Rv
dWJsZURvdWJsZTMoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0
ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdl
clkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnQzKHgsIGludGVnZXJZKTsKKyAgICAgICAg
aWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVJbnQzKCIgKyB4ICsgIiwgIiArIGlu
dGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIg
KyBleHBlY3RlZDI7CisgICAgfQorfQorbm9JbmxpbmUodGVzdDMpOwordGVzdDMoLTM3LjY3NjUy
Mjc2NDM3NzI5NiwgMTAuMCwgNTc2Mzc4OTg5NTc1MDg5MiwgNTc2Mzc4OTg5NTc1MDg5Mik7CisK
Ky8vIEV4cG9uZW50IHplcm8uCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlNCh4LCB5KSB7
CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91
YmxlNCk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ0KHgsIHkpIHsKKyAgICByZXR1cm4g
TWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ0KTsKK2Z1bmN0aW9u
IHRlc3Q0KHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91
YmxlNCh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVk
MSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVE
b3VibGU0KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEg
dmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0g
eSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50NCh4LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICgh
dmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50NCgiICsgeCArICIsICIgKyBpbnRlZ2Vy
WSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhw
ZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3Q0KTsKK3Rlc3Q0KC0zNy42NzY1MjI3NjQz
NzcyOTYsIDAsIDEsIDEpOworCisvLyBFeHBvbmVudCBtaW51cyB6ZXJvLgorZnVuY3Rpb24gbWF0
aFBvd0RvdWJsZURvdWJsZTUoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQor
bm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZTUpOworCitmdW5jdGlvbiBtYXRoUG93RG91Ymxl
SW50NSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRo
UG93RG91YmxlSW50NSk7CitmdW5jdGlvbiB0ZXN0NSh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVk
MikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIg
cmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTUoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVz
QXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlNSgiICsgeCArICIsICIgKyB5ICsgIikgPSAi
ICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7Cisg
ICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDUoeCwg
aW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQy
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUlu
dCgiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQg
YSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3Q1
KTsKK3Rlc3Q1KC0zNy42NzY1MjI3NjQzNzcyOTYsIC0wLCAxLCAxKTsKKworLy8gRXhwb25lbnQg
MS4KK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGU2KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0
aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGU2KTsKKworZnVuY3Rp
b24gbWF0aFBvd0RvdWJsZUludDYoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQor
fQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludDYpOworZnVuY3Rpb24gdGVzdDYoeCwgeSwgZXhw
ZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGU2KHgsIHkpOworICAg
ICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZTYoIiArIHggKyAi
LCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAi
ICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQ
b3dEb3VibGVJbnQ2KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShy
ZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQs
IG1hdGhQb3dEb3VibGVJbnQ2KCIgKyB4ICsgIiwgIiArIGludGVnZXJZICsgIikgPSAiICsgcmVz
dWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDI7CisgICAgfQor
fQorbm9JbmxpbmUodGVzdDYpOwordGVzdDYoLTM3LjY3NjUyMjc2NDM3NzI5NiwgMS4wLCAtMzcu
Njc2NTIyNzY0Mzc3Mjk2LCAtMzcuNjc2NTIyNzY0Mzc3Mjk2KTsKKworLy8gRXhwb25lbnQgLTEu
CitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlNyh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgu
cG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlNyk7CisKK2Z1bmN0aW9u
IG1hdGhQb3dEb3VibGVJbnQ3KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30K
K25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ3KTsKK2Z1bmN0aW9uIHRlc3Q3KHgsIHksIGV4cGVj
dGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlNyh4LCB5KTsKKyAgICAg
ICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGU3KCIgKyB4ICsgIiwg
IiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiAr
IGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93
RG91YmxlRG91YmxlNyh4LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2Uo
cmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
LCBtYXRoUG93RG91YmxlRG91YmxlNygiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiAr
IHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAg
IH0KK30KK25vSW5saW5lKHRlc3Q3KTsKK3Rlc3Q2KC0zNy42NzY1MjI3NjQzNzcyOTYsIC0xLjAs
IC0wLjAyNjU0MTcyNzQ5MDQ1NDI5NiwgLTAuMDI2NTQxNzI3NDkwNDU0Mjk2KTsKKworLy8gTGV0
J3Mgc3F1YXJlIHRoaW5ncy4KK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGU4KHgsIHkpIHsK
KyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3Vi
bGU4KTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludDgoeCwgeSkgeworICAgIHJldHVybiBN
YXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludDgpOworZnVuY3Rpb24g
dGVzdDgoeCwgeSwgZXhwZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3Vi
bGU4KHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQx
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURv
dWJsZTgoIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2
YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5
IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFy
IHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnQ4KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2
YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVJbnQ4KCIgKyB4ICsgIiwgIiArIGludGVnZXJZ
ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBl
Y3RlZDI7CisgICAgfQorfQorbm9JbmxpbmUodGVzdDgpOwordGVzdDcoLTM3LjY3NjUyMjc2NDM3
NzI5NiwgMi4wLCAxNDE5LjUyMDM2NzYxNDY0MDcsIDE0MTkuNTIwMzY3NjE0NjQwNyk7CisKK2Z1
bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGU5KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3co
eCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGU5KTsKKworZnVuY3Rpb24gbWF0
aFBvd0RvdWJsZUludDkoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9J
bmxpbmUobWF0aFBvd0RvdWJsZUludDkpOworZnVuY3Rpb24gdGVzdDkoeCwgeSwgZXhwZWN0ZWQx
LCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAg
ICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGU5KHgsIHkpOworICAgICAgICBp
ZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZTkoIiArIHggKyAiLCAiICsg
eSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhw
ZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3Vi
bGVJbnQ5KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQs
IGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQ
b3dEb3VibGVJbnQ5KCIgKyB4ICsgIiwgIiArIGludGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsg
IiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDI7CisgICAgfQorfQorbm9J
bmxpbmUodGVzdDkpOwordGVzdDgoMzcuNjc2NTIyNzY0Mzc3Mjk2LCAyLjAsIDE0MTkuNTIwMzY3
NjE0NjQwNywgMTQxOS41MjAzNjc2MTQ2NDA3KTsKKworLy8gTGV0J3MgY3ViZSB0aGluZ3MuCitm
dW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlMTAoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBv
dyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZTEwKTsKKworZnVuY3Rpb24g
bWF0aFBvd0RvdWJsZUludDEwKHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30K
K25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQxMCk7CitmdW5jdGlvbiB0ZXN0MTAoeCwgeSwgZXhw
ZWN0ZWQxLCBleHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGUxMCh4LCB5KTsKKyAg
ICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGUoIiArIHggKyAi
LCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAi
ICsgZXhwZWN0ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQ
b3dEb3VibGVJbnQxMCh4LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2Uo
cmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
LCBtYXRoUG93RG91YmxlSW50KCIgKyB4ICsgIiwgIiArIGludGVnZXJZICsgIikgPSAiICsgcmVz
dWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDI7CisgICAgfQor
fQorbm9JbmxpbmUodGVzdDkpOwordGVzdDkoLTM3LjY3NjUyMjc2NDM3NzI5NiwgMy4wLCAtNTM0
ODIuNTkxNDQ0OTMwMjM2LCAtNTM0ODIuNTkxNDQ0OTMwMjM2KTsKKworZnVuY3Rpb24gbWF0aFBv
d0RvdWJsZURvdWJsZTExKHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25v
SW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGUxMSk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJ
bnQxMSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRo
UG93RG91YmxlSW50MTEpOworZnVuY3Rpb24gdGVzdDExKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0
ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlMTEoeCwgeSk7CisgICAgICAgIGlmICghdmFs
dWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlKCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9
ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsK
KyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50MTEo
eCwgaW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0
ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJs
ZUludCgiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0
ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRl
c3QxMCk7Cit0ZXN0MTAoMzcuNjc2NTIyNzY0Mzc3Mjk2LCAzLjAsIDUzNDgyLjU5MTQ0NDkzMDIz
NiwgNTM0ODIuNTkxNDQ0OTMwMjM2KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctaW50ZWdlci1leHBvbmVudC1mYXN0cGF0aC5qcyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctaW50ZWdlci1leHBvbmVu
dC1mYXN0cGF0aC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNjA2YzQ0Zjk1MjU1ODdiMTA1ZTZlYjZhNzI1YjIx
NmNjMWYzNzkwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9tYXRoLXBvdy1pbnRlZ2VyLWV4cG9uZW50LWZhc3RwYXRoLmpzCkBAIC0wLDAgKzEs
NTYgQEAKK2Z1bmN0aW9uIHZhbHVlc0FyZUNsb3NlKGEsIGIpIHsKKyAgICByZXR1cm4gTWF0aC5h
YnMoYSAvIGIpIC0gMSA8IDFlLTEwOworfQorCisvLyBTbWFsbCBleHBvbmVudCB2YWx1ZXMgYXJl
IGhhbmRsZWQgdGhyb3VnaCBhIHNpbXBsZXIgaW5saW5lIGxvb3AuIFRlc3QgdGhhdCBpdCBpcyBu
b3Qgb2JzZXJ2YWJsZS4KK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVEb3VibGVUZXN0RXhwb25lbnRG
aWZ0eSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRo
UG93RG91YmxlRG91YmxlVGVzdEV4cG9uZW50RmlmdHkpOworCitmdW5jdGlvbiBtYXRoUG93RG91
YmxlSW50VGVzdEV4cG9uZW50RmlmdHkoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5
KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUludFRlc3RFeHBvbmVudEZpZnR5KTsKK2Z1bmN0
aW9uIHRlc3RFeHBvbmVudEZpZnR5KHgsIHksIGV4cGVjdGVkKSB7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91Ymxl
RG91YmxlVGVzdEV4cG9uZW50RmlmdHkoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xv
c2UocmVzdWx0LCBleHBlY3RlZCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQsIE1hdGgucG93KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVj
dGVkIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDsKKyAgICB9CisgICAgdmFyIGludGVnZXJZ
ID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50VGVzdEV4cG9uZW50RmlmdHkoeCwgaW50ZWdl
clkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQpKQorICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygiICsgeCArICIsICIg
KyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgdmFsdWUgY2xvc2UgdG8g
IiArIGV4cGVjdGVkOworICAgIH0KK30KK25vSW5saW5lKHRlc3RFeHBvbmVudEZpZnR5KTsKK3Rl
c3RFeHBvbmVudEZpZnR5KDUzLjcwOTAxMTY0MTMzMTAyLCA1MC4wLCAzLjE3OTQ5NDExODEyMDE0
NGUrODYpOwordGVzdEV4cG9uZW50RmlmdHkoNTMuNzA5MDExNjQxMzMxMDIsIC0xMC4wLCA1LjAw
NjQzMjg0MjYyMTE5MmUtMTgpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlVGVzdEV4
cG9uZW50VGVuVGhvdXNhbmRzKHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30K
K25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGVUZXN0RXhwb25lbnRUZW5UaG91c2FuZHMpOwor
CitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50VGVzdEV4cG9uZW50VGVuVGhvdXNhbmRzKHgsIHkp
IHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJ
bnRUZXN0RXhwb25lbnRUZW5UaG91c2FuZHMpOworZnVuY3Rpb24gdGVzdEV4cG9uZW50VGVuVGhv
dXNhbmRzKHgsIHksIGV4cGVjdGVkKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlVGVzdEV4cG9u
ZW50VGVuVGhvdXNhbmRzKHgsIHkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3Vs
dCwgZXhwZWN0ZWQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRo
LnBvdygiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCB2YWx1
ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQ7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAw
OworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVz
dWx0ID0gbWF0aFBvd0RvdWJsZUludFRlc3RFeHBvbmVudFRlblRob3VzYW5kcyh4LCBpbnRlZ2Vy
WSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZCkpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KCIgKyB4ICsgIiwgIiAr
IGludGVnZXJZICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCB2YWx1ZSBjbG9zZSB0byAi
ICsgZXhwZWN0ZWQ7CisgICAgfQorfQorbm9JbmxpbmUodGVzdEV4cG9uZW50VGVuVGhvdXNhbmRz
KTsKK3Rlc3RFeHBvbmVudFRlblRob3VzYW5kcygxLjAwMSwgMTAwMDAuMCwgMjE5MTYuNjgxMzM5
MDQ4MzczKTsKK3Rlc3RFeHBvbmVudFRlblRob3VzYW5kcygxLjAwMSwgLTEuMCwgMC45OTkwMDA5
OTkwMDA5OTkxKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LW5hbi1iZWhhdmlvcnMuanMg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LW5hbi1iZWhhdmlv
cnMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGE3ZGQ0NDY3ODA5ZmJjMDZiMmJmMzRlMTk1ZjBhMzExMjA5OGM0
ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
bWF0aC1wb3ctbmFuLWJlaGF2aW9ycy5qcwpAQCAtMCwwICsxLDg1IEBACisvLyBJZiB5IGlzIE5h
TiwgdGhlIHJlc3VsdCBpcyBOYU4uCitmdW5jdGlvbiB0ZXN0SW50ZWdlckJhc2VXaXRoTmFORXhw
b25lbnQoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBNYXRoLnBvdyg1LCBOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3Vs
dCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KDUsIE5h
TikgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KGksIE5hTik7CisgICAgICAgIGlm
ICghaXNOYU4ocmVzdWx0KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwg
TWF0aC5wb3coaSwgTmFOKSA9ICIgKyByZXN1bHQgKyAiIHdpdGggaSA9ICIgKyBpOworICAgIH0K
K30KK25vSW5saW5lKHRlc3RJbnRlZ2VyQmFzZVdpdGhOYU5FeHBvbmVudCk7Cit0ZXN0SW50ZWdl
ckJhc2VXaXRoTmFORXhwb25lbnQoKTsKKworZnVuY3Rpb24gdGVzdEZsb2F0aW5nUG9pbnRCYXNl
V2l0aE5hTkV4cG9uZW50KCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coNS41LCBOYU4pOworICAgICAgICBpZiAo
IWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1h
dGgucG93KDUuNSwgTmFOKSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coaSArIDEs
IE5hTik7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coaSArIDAuNSwgTmFOKSA9ICIgKyByZXN1bHQgKyAi
IHdpdGggaSA9ICIgKyBpOworICAgIH0KK30KK25vSW5saW5lKHRlc3RGbG9hdGluZ1BvaW50QmFz
ZVdpdGhOYU5FeHBvbmVudCk7Cit0ZXN0RmxvYXRpbmdQb2ludEJhc2VXaXRoTmFORXhwb25lbnQo
KTsKKworLy8gSWYgeSBpcyArMCwgdGhlIHJlc3VsdCBpcyAxLCBldmVuIGlmIHggaXMgTmFOLgor
Ly8gSWYgeSBpcyDiiJIwLCB0aGUgcmVzdWx0IGlzIDEsIGV2ZW4gaWYgeCBpcyBOYU4uCisvLyBJ
ZiB4IGlzIE5hTiBhbmQgeSBpcyBub256ZXJvLCB0aGUgcmVzdWx0IGlzIE5hTi4KK2Z1bmN0aW9u
IHRlc3ROYU5CYXNlKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coTmFOLCBpICsgMSk7CisgICAgICAgIGlmICgh
aXNOYU4ocmVzdWx0KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0
aC5wb3coTmFOLCBpICsgMSkgPSAiICsgcmVzdWx0ICsgIiB3aXRoIGkgPSAiICsgaTsKKyAgICB9
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBNYXRoLnBvdyhOYU4sIGkgKyAxLjUpOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkp
CisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KE5hTiwgaSAr
IDEuNSkgPSAiICsgcmVzdWx0ICsgIiB3aXRoIGkgPSAiICsgaTsKKyAgICB9CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBv
dyhOYU4sIDApOworICAgICAgICBpZiAocmVzdWx0ICE9PSAxKQorICAgICAgICAgICAgdGhyb3cg
IkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdyhOYU4sIDApID0gIiArIHJlc3VsdDsKKyAgICB9
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1
bHQgPSBNYXRoLnBvdyhOYU4sIC0wKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coTmFOLCAtMCkgPSAiICsg
cmVzdWx0OworICAgIH0KK30KK25vSW5saW5lKHRlc3ROYU5CYXNlKTsKK3Rlc3ROYU5CYXNlKCk7
CisKKy8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzICviiJ4sIHRoZSByZXN1bHQgaXMgTmFOLgor
Ly8gSWYgYWJzKHgpIGlzIDEgYW5kIHkgaXMg4oiS4oieLCB0aGUgcmVzdWx0IGlzIE5hTi4KK2Z1
bmN0aW9uIGluZmluaXRlRXhwb25lbnRzKCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coMSwgTnVtYmVyLlBPU0lU
SVZFX0lORklOSVRZKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygxLCBOdW1iZXIuUE9TSVRJVkVfSU5G
SU5JVFkpID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdygtMSwgTnVtYmVyLlBPU0lU
SVZFX0lORklOSVRZKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygtMSwgTnVtYmVyLlBPU0lUSVZFX0lO
RklOSVRZKSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coMSwgTnVtYmVyLk5FR0FU
SVZFX0lORklOSVRZKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygxLCBOdW1iZXIuTkVHQVRJVkVfSU5G
SU5JVFkpID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdygtMSwgTnVtYmVyLk5FR0FU
SVZFX0lORklOSVRZKTsKKyAgICAgICAgaWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygtMSwgTnVtYmVyLk5FR0FUSVZFX0lO
RklOSVRZKSA9ICIgKyByZXN1bHQ7CisgICAgfQorfQorbm9JbmxpbmUoaW5maW5pdGVFeHBvbmVu
dHMpOworaW5maW5pdGVFeHBvbmVudHMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctd2l0aC1jb25zdGFudHMuanMgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LXdpdGgtY29uc3RhbnRzLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmE0YzEwOGNiZDE4YzE2N2Y2OWJiZWE0ZDNlOWRiMjgyNmQwMzBlYzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LXdp
dGgtY29uc3RhbnRzLmpzCkBAIC0wLDAgKzEsMTE1IEBACitmdW5jdGlvbiBleHBvbmVudElzWmVy
byh4KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIDApOworfQorbm9JbmxpbmUoZXhwb25lbnRJ
c1plcm8pOworCitmdW5jdGlvbiB0ZXN0RXhwb25lbnRJc1plcm8oKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBleHBvbmVudElz
WmVybyg1KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogemVyb0V4cG9uZW50KDUpIHNob3VsZCBiZSAxLCB3YXMgPSAiICsgcmVzdWx0OworICAg
IH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGV4cG9uZW50SXNaZXJvKDUuNSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDEpCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IHplcm9FeHBvbmVudCg1LjUpIHNob3VsZCBiZSAxLCB3
YXMgPSAiICsgcmVzdWx0OworICAgIH0KK30KK3Rlc3RFeHBvbmVudElzWmVybygpOworCisKK2Z1
bmN0aW9uIGV4cG9uZW50SXNPbmUoeCkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCAxKTsKK30K
K25vSW5saW5lKGV4cG9uZW50SXNPbmUpOworCitmdW5jdGlvbiB0ZXN0RXhwb25lbnRJc09uZSgp
IHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGV4cG9uZW50SXNPbmUoNSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDUpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGV4cG9uZW50SXNPbmUoNSkgc2hvdWxkIGJlIDUsIHdhcyA9
ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gZXhwb25lbnRJc09uZSg1LjUpOworICAgICAgICBpZiAo
cmVzdWx0ICE9PSA1LjUpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGV4cG9uZW50SXNPbmUo
NS41KSBzaG91bGQgYmUgNS41LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KK30KK3Rlc3RFeHBv
bmVudElzT25lKCk7CisKKworZnVuY3Rpb24gcG93VXNlZEFzU3FydCh4KSB7CisgICAgcmV0dXJu
IE1hdGgucG93KHgsIDAuNSk7Cit9Citub0lubGluZShwb3dVc2VkQXNTcXJ0KTsKKworZnVuY3Rp
b24gdGVzdFBvd1VzZWRBc1NxcnQoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBwb3dVc2VkQXNTcXJ0KDQpOworICAgICAgICBp
ZiAocmVzdWx0ICE9PSBNYXRoLnNxcnQoNCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IHBv
d1VzZWRBc1NxcnQoNCkgc2hvdWxkIGJlIDIsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
cG93VXNlZEFzU3FydCg0LjQpOworICAgICAgICBpZiAocmVzdWx0ICE9PSBNYXRoLnNxcnQoNC40
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogcG93VXNlZEFzU3FydCg0KSBzaG91bGQgYmUg
IiArIE1hdGguc3FydCg0LjQpICsgIiwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9CisKK30KK3Rl
c3RQb3dVc2VkQXNTcXJ0KCk7CisKKworZnVuY3Rpb24gaW50SW50Q29uc3RhbnRzU21hbGxOdW1i
ZXJzKCkgeworICAgIHJldHVybiBNYXRoLnBvdyg0MiwgMyk7Cit9CitmdW5jdGlvbiBpbnRJbnRD
b25zdGFudHNMYXJnZU51bWJlcnMoKSB7CisgICAgLy8gVGhlIHJlc3VsdCBkb2VzIG5vdCBmaXQg
aW4gYSBpbnRlZ2VyLgorICAgIHJldHVybiBNYXRoLnBvdyg0MiwgNDIpOworfQorZnVuY3Rpb24g
aW50SW50U21hbGxDb25zdGFudHMoKSB7CisgICAgcmV0dXJuIE1hdGgucG93KDQyLCAzKTsKK30K
K2Z1bmN0aW9uIGludERvdWJsZUNvbnN0YW50cygpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coMTQs
IDQyLjUpOworfQorZnVuY3Rpb24gZG91YmxlRG91YmxlQ29uc3RhbnRzKCkgeworICAgIHJldHVy
biBNYXRoLnBvdygxMy41LCA0Mi41KTsKK30KK2Z1bmN0aW9uIGRvdWJsZUludENvbnN0YW50cygp
IHsKKyAgICByZXR1cm4gTWF0aC5wb3coMTMuNSwgNTIpOworfQorbm9JbmxpbmUoaW50SW50Q29u
c3RhbnRzU21hbGxOdW1iZXJzKTsKK25vSW5saW5lKGludEludENvbnN0YW50c0xhcmdlTnVtYmVy
cyk7Citub0lubGluZShpbnREb3VibGVDb25zdGFudHMpOworbm9JbmxpbmUoZG91YmxlRG91Ymxl
Q29uc3RhbnRzKTsKK25vSW5saW5lKGRvdWJsZUludENvbnN0YW50cyk7CisKK2Z1bmN0aW9uIHRl
c3RCYXNlQW5kRXhwb25lbnRDb25zdGFudExpdGVyYWxzKCkKK3sKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGludEludENvbnN0YW50
c1NtYWxsTnVtYmVycygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA3NDA4OCkKKyAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogaW50SW50Q29uc3RhbnRzU21hbGxOdW1iZXJzKCkgc2hvdWxkIGJl
IDc0MDg4LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGludEludENvbnN0YW50c0xhcmdl
TnVtYmVycygpOworICAgICAgICBpZiAocmVzdWx0ICE9PSAxLjUwMTMwOTM3NTQ1Mjk2NTZlKzY4
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBpbnRJbnRDb25zdGFudHNMYXJnZU51bWJlcnMo
KSBzaG91bGQgYmUgMS41MDEzMDkzNzU0NTI5NjU2ZSs2OCwgd2FzID0gIiArIHJlc3VsdDsKKyAg
ICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciBy
ZXN1bHQgPSBpbnREb3VibGVDb25zdGFudHMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNS4x
MzM4MzAzODgyMDE1NzY1ZSs0OCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogaW50RG91Ymxl
Q29uc3RhbnRzKCkgc2hvdWxkIGJlIDUuMTMzODMwMzg4MjAxNTc2NWUrNDgsIHdhcyA9ICIgKyBy
ZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gZG91YmxlRG91YmxlQ29uc3RhbnRzKCk7CisgICAgICAgIGlmIChy
ZXN1bHQgIT09IDEuMDk0NDIyODcyOTY0NzgyOWUrNDgpCisgICAgICAgICAgICB0aHJvdyAiRXJy
b3I6IGRvdWJsZURvdWJsZUNvbnN0YW50cygpIHNob3VsZCBiZSAxLjA5NDQyMjg3Mjk2NDc4Mjll
KzQ4LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGRvdWJsZUludENvbnN0YW50cygpOwor
ICAgICAgICBpZiAocmVzdWx0ICE9PSA1Ljk4OTAyMjczNTMxMTE1OGUrNTgpCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGRvdWJsZUludENvbnN0YW50cygpIHNob3VsZCBiZSA1Ljk4OTAyMjcz
NTMxMTE1OGUrNTgsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQorfQordGVzdEJhc2VBbmRFeHBv
bmVudENvbnN0YW50TGl0ZXJhbHMoKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>246568</attachid>
            <date>2015-02-13 19:21:01 -0800</date>
            <delta_ts>2015-02-13 20:20:25 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-141540-20150213192058.patch</filename>
            <type>text/plain</type>
            <size>78748</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTgwMDg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
NmEwMjBlM2UwY2E1OGM5YTIxMjkwMWE3MzdjYTVjMWIwN2YxODUwLi5hMDdjMmI3YjdlNzk0NzRi
YTdkMzg3ODUxNWU0NmNiMjczY2ZiMTEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4NyBAQAorMjAxNS0wMi0xMiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBBZGQgYSBERkcgbm9kZSBmb3IgdGhlIFBvdyBJbnRyaW5zaWNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDE1NDAKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgYSBERkcg
Tm9kZSBmb3IgUG93SW50cmluc2ljLiBUaGlzIHBhdGNoIGNvdmVycyB0aGUgYmFzaWMgY2FzZXMK
KyAgICAgICAgbmVlZCB0byBhdm9pZCBtYXNzaXZlIHJlZ3Jlc3Npb24uIEkgd2lsbCBpdGVyYXRl
IG92ZXIgdGhlIG5vZGUgdG8gY292ZXIKKyAgICAgICAgdGhlIG1pc3NpbmcgdHlwZXMuCisKKyAg
ICAgICAgV2l0aCB0aGlzIHBhdGNoIEkgZ2V0IHRoZSBmb2xsb3dpbmcgcHJvZ3Jlc3Npb25zIG9u
IGJlbmNobWFya3M6CisgICAgICAgIC1Mb25nU3BpZGVyJ3MgbWF0aC1wYXJ0aWFsLXN1bXM6ICs1
JS4KKyAgICAgICAgLUtyYWtlbidzIGltYWdpbmctZGFya3Jvb206ICsxNyUKKyAgICAgICAgLUFz
bUJlbmNoJ3MgY3JheS5jOiArNi42JQorICAgICAgICAtQ29tcHJlc3Npb25CZW5jaDogKzIuMiUg
Z2xvYmFsbHkuCisKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVU
eXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICBDb3ZlciBhIGNvdXBsZSBvZiB0cml2aWFs
IGNhc2VzOgorICAgICAgICAtSWYgdGhlIGV4cG9uZW50IGlzIHplcm8sIHRoZSByZXN1bHQgaXMg
YWx3YXlzIG9uZSwgcmVnYXJkbGVzcyBvZiB0aGUgYmFzZS4KKyAgICAgICAgLUlmIGJvdGggYXJn
dW1lbnRzIGFyZSBjb25zdGFudHMsIGNvbXB1dGUgdGhlIHJlc3VsdCBhdCBjb21waWxlIHRpbWUu
CisKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKworICAgICAg
ICAqIGRmZy9ERkdGaXh1cFBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpGaXh1cFBoYXNl
OjpmaXh1cE5vZGUpOgorICAgICAgICBXZSBvbmx5IHN1cHBvcnQgMiBiYXNpYyBjYXNlcyBhdCB0
aGlzIHRpbWU6CisgICAgICAgIC1NYXRoLnBvdyhkb3VibGUsIGludCkKKyAgICAgICAgLU1hdGgu
cG93KGRvdWJsZSwgZG91YmxlKS4KKworICAgICAgICBJJ2xsIGNvdmVyIE1hdGgucG93KGludCwg
aW50KSBpbiBhIGZvbGxvdyB1cC4KKworICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6Tm9kZTo6Y29udmVydFRvQXJpdGhTcXJ0KToKKyAgICAgICAgKEpTQzo6REZH
OjpOb2RlOjphcml0aE5vZGVGbGFncyk6CisgICAgICAgICogZGZnL0RGR05vZGVUeXBlLmg6Cisg
ICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAg
ICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6ZG9Eb3VibGVWb3Rpbmcp
OgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6
c2FmZVRvRXhlY3V0ZSk6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpjb21waWxlQXJpdGhQb3dJbnRlZ2VyRmFzdFBhdGgpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlQXJpdGhQb3cpOgorICAgICAgICAq
IGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6
CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3RyZW5ndGhS
ZWR1Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3RyZW5ndGhSZWR1Y3Rpb25Q
aGFzZTo6aGFuZGxlTm9kZSk6CisgICAgICAgICogZGZnL0RGR1ZhbGlkYXRlLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpWYWxpZGF0ZTo6dmFsaWRhdGUpOgorICAgICAgICAqIGZ0bC9GVExDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAq
IGZ0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5v
ZGUpOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlQXJpdGhQb3cp
OgorICAgICAgICAqIGZ0bC9GVExPdXRwdXQuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6
OmRvdWJsZVBvdyk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0Ojpkb3VibGVQb3dpKToKKyAg
ICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBydW50aW1lL01hdGhPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpt
YXRoUHJvdG9GdW5jUG93KToKKyAgICAgICAgKEpTQzo6aXNEZW5vcm1hbCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OmlzRWRnZUNhc2UpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjptYXRoUG93
KTogRGVsZXRlZC4KKworICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy1iYXNpY3MuanM6
IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9tYXRoLXBvdy1pbnRlZ2VyLWV4cG9uZW50
LWZhc3RwYXRoLmpzOiBBZGRlZC4KKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvbWF0aC1wb3ctbmFu
LWJlaGF2aW9ycy5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL21hdGgtcG93LXdp
dGgtY29uc3RhbnRzLmpzOiBBZGRlZC4KKyAgICAgICAgU3RhcnQgc29tZSBiYXNpYyB0ZXN0aW5n
IG9mIE1hdGgucG93KCkuCisgICAgICAgIER1ZSB0byB0aGUgdmFyaW91cyB0cmFuc2Zvcm0sIHRo
ZSB2YWx1ZSBjaGFuZ2Ugd2hlbiB0aGUgY29kZSB0aWVycyB1cCwKKyAgICAgICAgSSBjb3ZlcmVk
IHRoaXMgYnkgY2hlY2tpbmcgZm9yIGFwcHJveGltYXRlIHZhbHVlcy4KKwogMjAxNS0wMi0xMyAg
QmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KIAogICAgICAgICBBcml0aFNx
cnQgc2hvdWxkIG5vdCBiZSBjb25kaXRpb25hbCBvbiBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRTcXJ0
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5
cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cAppbmRleCAxOWFlYWI3MTliNjM0NzIyZjkzMmM5NGMzMGZiNmNhMDZlMmRmNzUxLi40OGQxZmZh
Y2M3YmNiNjA4ZTdiOTUwZWRkYjZlZWNhNDAwMmRmY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAKQEAgLTUwOCw2ICs1MDgsMTUg
QEAgU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlRlJvdW5kKFNwZWN1bGF0ZWRUeXBlIHZhbHVl
KQogICAgIHJldHVybiB2YWx1ZTsKIH0KIAorU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlUG93
KFNwZWN1bGF0ZWRUeXBlIHhWYWx1ZSwgU3BlY3VsYXRlZFR5cGUgeVZhbHVlKQoreworICAgIC8v
IE1hdGgucG93KCkgYWx3YXlzIHJldHVybiBOYU4gaWYgdGhlIGV4cG9uZW50IGlzIE5hTiwgdW5s
aWtlIHN0ZDo6cG93KCkuCisgICAgLy8gV2UgYWx3YXlzIHNldCBhIHB1cmUgTmFOIGluIHRoYXQg
Y2FzZS4KKyAgICBpZiAoeVZhbHVlICYgU3BlY0RvdWJsZU5hTikKKyAgICAgICAgeFZhbHVlIHw9
IFNwZWNEb3VibGVQdXJlTmFOOworICAgIHJldHVybiBwb2xsdXRlRG91YmxlKHhWYWx1ZSk7Cit9
CisKIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZUJpbmFyeU9wKFNwZWN1bGF0ZWRUeXBlIGEs
IFNwZWN1bGF0ZWRUeXBlIGIpCiB7CiAgICAgcmV0dXJuIHBvbGx1dGVEb3VibGUoYSB8IGIpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBl
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAppbmRl
eCBiMDBmMjk3M2Y2MzU0MjA3NDIzZDNlMzE4YTNjNzk0MGQwMDc4OWM4Li5mNzNjMmE0MTEwNTMy
YjQ1MzNlNzhlYWRmNGU2NDkxMDhlMWRhOWQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaApAQCAtNDE2LDYgKzQxNiw3IEBAIFNwZWN1bGF0
ZWRUeXBlIHR5cGVPZkRvdWJsZU1pbk1heChTcGVjdWxhdGVkVHlwZSwgU3BlY3VsYXRlZFR5cGUp
OwogU3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlTmVnYXRpb24oU3BlY3VsYXRlZFR5cGUpOwog
U3BlY3VsYXRlZFR5cGUgdHlwZU9mRG91YmxlQWJzKFNwZWN1bGF0ZWRUeXBlKTsKIFNwZWN1bGF0
ZWRUeXBlIHR5cGVPZkRvdWJsZUZSb3VuZChTcGVjdWxhdGVkVHlwZSk7CitTcGVjdWxhdGVkVHlw
ZSB0eXBlT2ZEb3VibGVQb3coU3BlY3VsYXRlZFR5cGUsIFNwZWN1bGF0ZWRUeXBlKTsKIAogLy8g
VGhpcyBjb25zZXJ2YXRpdmVseSBtb2RlbHMgdGhlIGJlaGF2aW9yIG9mIGFyYml0cmFyeSBkb3Vi
bGUgb3BlcmF0aW9ucy4KIFNwZWN1bGF0ZWRUeXBlIHR5cGVPZkRvdWJsZUJpbmFyeU9wKFNwZWN1
bGF0ZWRUeXBlLCBTcGVjdWxhdGVkVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggZDdiNWIw
ZjcyOTQ1ZWQ4MjYxZmE0NTA1N2RiYzE2Zjc0NzRmODQxNC4uYmY3ZDA0MWU2NGZkNDQxYWIxODVl
ODQ2ZDJiYmUxNTNhOGIzMjA0NiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJHZXRCeUlk
U3RhdHVzLmgiCiAjaW5jbHVkZSAiR2V0dGVyU2V0dGVyLmgiCisjaW5jbHVkZSAiSklUT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJQdXRCeUlkU3RhdHVz
LmgiCiAjaW5jbHVkZSAiU3RyaW5nT2JqZWN0LmgiCkBAIC03MTgsNiArNzE5LDI0IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVu
c2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAgICAgfQorCisg
ICAgY2FzZSBBcml0aFBvdzogeworICAgICAgICBKU1ZhbHVlIGNoaWxkWSA9IGZvck5vZGUobm9k
ZS0+Y2hpbGQyKCkpLnZhbHVlKCk7CisgICAgICAgIGlmIChjaGlsZFkgJiYgY2hpbGRZLmlzTnVt
YmVyKCkpIHsKKyAgICAgICAgICAgIGlmICghY2hpbGRZLmFzTnVtYmVyKCkpIHsKKyAgICAgICAg
ICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcigxKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEpTVmFsdWUgY2hpbGRY
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkudmFsdWUoKTsKKyAgICAgICAgICAgIGlmIChjaGls
ZFggJiYgY2hpbGRYLmlzTnVtYmVyKCkpIHsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCBqc0RvdWJsZU51bWJlcihvcGVyYXRpb25NYXRoUG93KGNoaWxkWC5hc051bWJlcigpLCBj
aGlsZFkuYXNOdW1iZXIoKSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUodHlwZU9mRG91Ymxl
UG93KGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZSwgZm9yTm9kZShub2RlLT5jaGlsZDIo
KSkubV90eXBlKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KICAgICAgICAgICAgIAogICAgIGNh
c2UgQXJpdGhTcXJ0OiB7CiAgICAgICAgIEpTVmFsdWUgY2hpbGQgPSBmb3JOb2RlKG5vZGUtPmNo
aWxkMSgpKS52YWx1ZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAppbmRleCBiODIzN2VhZmVjYmEzMmY0MGJkZmM5NDI3OTY0NjFhMGQxY2Rh
ODU3Li44NWUyYTFjNzJlNTRjNDEyZjk5YTQ3YTViNGZjN2NmMDE0ZmJkMjE1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTY4NCw2
ICsxNjg0LDE4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVz
dWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50CiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBjYXNlIFBvd0ludHJpbnNpYzogeworICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPCAzKSB7CisgICAgICAgICAgICAv
LyBNYXRoLnBvdygpIGFuZCBNYXRoLnBvdyh4KSByZXR1cm4gTmFOLgorICAgICAgICAgICAgc2V0
KFZpcnR1YWxSZWdpc3RlcihyZXN1bHRPcGVyYW5kKSwgYWRkVG9HcmFwaChKU0NvbnN0YW50LCBP
cEluZm8obV9jb25zdGFudE5hTikpKTsKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICB9CisgICAgICAgIFZpcnR1YWxSZWdpc3RlciB4T3BlcmFuZCA9IHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KDEsIHJlZ2lzdGVyT2Zmc2V0KTsKKyAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHlP
cGVyYW5kID0gdmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoMiwgcmVnaXN0ZXJPZmZzZXQpOwor
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKHJlc3VsdE9wZXJhbmQpLCBhZGRUb0dyYXBoKEFy
aXRoUG93LCBnZXQoeE9wZXJhbmQpLCBnZXQoeU9wZXJhbmQpKSk7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KICAgICAgICAgCiAgICAgY2FzZSBBcnJheVB1c2hJbnRyaW5zaWM6IHsKICAg
ICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9IDIpCmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCmluZGV4IGFjNmI4Zjc5MmJjM2I0MjVlNWI0Yzkz
ODI5YmMxYjhlYWU2YmE0ZDguLmRjZGI3ZGI0ODQ2NmY5ZTM2NWY5OWI4OWQyNzk3ZDVkYTFhNGNm
ZmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCkBAIC0xMjIs
NiArMTIyLDcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29u
c3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNvbnN0IFdyaXRlRnUKICAgICBjYXNlIEFyaXRoQWJzOgog
ICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBBcml0aE1heDoKKyAgICBjYXNlIEFyaXRoUG93
OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNhc2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBB
cml0aFNpbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dD
LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAppbmRleCBjNmZl
YWZkZDNkOGVlNzBkOGIwZDRmNjRlZDhkMmNjNjYzNTNkYzE2Li41ZGNhZDQzYmNhN2YxMGZiNDRl
ZmI4ZjExMTdkM2NmNDg2ZTk0Y2E3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2Vz
R0MuY3BwCkBAIC04MSw2ICs4MSw3IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZSkKICAgICBjYXNlIEFyaXRoQWJzOgogICAgIGNhc2UgQXJpdGhNaW46CiAgICAgY2FzZSBB
cml0aE1heDoKKyAgICBjYXNlIEFyaXRoUG93OgogICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgIGNh
c2UgQXJpdGhGUm91bmQ6CiAgICAgY2FzZSBBcml0aFNpbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IGUzMWE1NGQzZTNkMjIwOWZmNTk4N2RhMTE3
N2NiMzE4NGVjMDk1OTYuLmM4MmI1ZmIxNDZiM2I5YjM2ZGJjMjU5Yjk1MWQxOGFhMmZlYmQ5YTcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMzM3
LDYgKzMzNywxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgbm9kZS0+c2V0UmVzdWx0KE5vZGVS
ZXN1bHREb3VibGUpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KKworICAgICAgICBj
YXNlIEFyaXRoUG93OiB7CisgICAgICAgICAgICBub2RlLT5zZXRSZXN1bHQoTm9kZVJlc3VsdERv
dWJsZSk7CisgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCktPnNob3VsZFNwZWN1bGF0ZUlu
dDMyT3JCb29sZWFuRm9yQXJpdGhtZXRpYygpKSB7CisgICAgICAgICAgICAgICAgZml4RG91Ymxl
T3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICAgICAgZml4SW50T3JC
b29sZWFuRWRnZShub2RlLT5jaGlsZDIoKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIGZpeERvdWJsZU9yQm9vbGVhbkVkZ2Uobm9kZS0+Y2hp
bGQxKCkpOworICAgICAgICAgICAgZml4RG91YmxlT3JCb29sZWFuRWRnZShub2RlLT5jaGlsZDIo
KSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICBjYXNlIEFyaXRoRlJvdW5kOgpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR05vZGUuaAppbmRleCBiZmZiODY2MGNkZDAxMDc2ZGY3MTMzYTEyY2YzYmIxYmYx
YWFkZTdhLi4yNzE4YjdiNjE4MjMwNzI3YThkZDI3NDk5M2IyZjdkMzlkZTg1ZTkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaApAQCAtNTY1LDYgKzU2NSwxMyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAgICAgICAgIEFTU0VSVChtX29wID09IFRvUHJpbWl0aXZlKTsKICAgICAgICAgbV9vcCA9
IFRvU3RyaW5nOwogICAgIH0KKworICAgIHZvaWQgY29udmVydFRvQXJpdGhTcXJ0KCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChtX29wID09IEFyaXRoUG93KTsKKyAgICAgICAgY2hpbGQyKCkgPSBF
ZGdlKCk7CisgICAgICAgIG1fb3AgPSBBcml0aFNxcnQ7CisgICAgfQogICAgIAogICAgIEpTVmFs
dWUgYXNKU1ZhbHVlKCkKICAgICB7CkBAIC03NzUsNyArNzgyLDcgQEAgc3RydWN0IE5vZGUgewog
ICAgIE5vZGVGbGFncyBhcml0aE5vZGVGbGFncygpCiAgICAgewogICAgICAgICBOb2RlRmxhZ3Mg
cmVzdWx0ID0gbV9mbGFncyAmIE5vZGVBcml0aEZsYWdzTWFzazsKLSAgICAgICAgaWYgKG9wKCkg
PT0gQXJpdGhNdWwgfHwgb3AoKSA9PSBBcml0aERpdiB8fCBvcCgpID09IEFyaXRoTW9kIHx8IG9w
KCkgPT0gQXJpdGhOZWdhdGUgfHwgb3AoKSA9PSBEb3VibGVBc0ludDMyKQorICAgICAgICBpZiAo
b3AoKSA9PSBBcml0aE11bCB8fCBvcCgpID09IEFyaXRoRGl2IHx8IG9wKCkgPT0gQXJpdGhNb2Qg
fHwgb3AoKSA9PSBBcml0aE5lZ2F0ZSB8fCBvcCgpID09IEFyaXRoUG93IHx8IG9wKCkgPT0gRG91
YmxlQXNJbnQzMikKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIHJldHVybiBy
ZXN1bHQgJiB+Tm9kZUJ5dGVjb2RlTmVlZHNOZWdaZXJvOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZVR5cGUuaAppbmRleCA2NWNiMzk5ZjFiMDVkMWVhN2I2YTU4YTVhMjY2
ZTk3MWY5Y2Q2OTIwLi44YTBlYTgxYTYyZGJkYTU1MGU5M2ZiZjFjODM5NjE2ZGMyODZjNWViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCkBAIC0xMzQsNiArMTM0LDcg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKEFyaXRoTWluLCBO
b2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhNYXgsIE5vZGVSZXN1bHROdW1iZXIp
IFwKICAgICBtYWNybyhBcml0aEZSb3VuZCwgTm9kZVJlc3VsdE51bWJlcikgXAorICAgIG1hY3Jv
KEFyaXRoUG93LCBOb2RlUmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhTcXJ0LCBOb2Rl
UmVzdWx0TnVtYmVyKSBcCiAgICAgbWFjcm8oQXJpdGhTaW4sIE5vZGVSZXN1bHROdW1iZXIpIFwK
ICAgICBtYWNybyhBcml0aENvcywgTm9kZVJlc3VsdE51bWJlcikgXApkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcAppbmRleCBkMWE2ZTRkY2QzZWRhZWI2NzNhYWMyNGNlOGQxMzY1YjY5Njk5OWVhLi5lMGM1
NDQ0Yjc4ZWQzOGUxZjgzY2Y5NDRiNDEyODQ1OWUxMTQxN2EyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
LmNwcApAQCAtMzIxLDcgKzMyMSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCisKKyAgICAgICAgY2FzZSBBcml0
aFBvdzoKICAgICAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgICAgIGNhc2UgQXJpdGhGUm91bmQ6
CiAgICAgICAgIGNhc2UgQXJpdGhTaW46CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U2FmZVRvRXhlY3V0ZS5oCmluZGV4IDhlOGFlMDc3ZDYzYjBlNjAwZTY4NjZkY2FhMjcxZWZhYmM4
NzM3ODEuLmM4NDUxM2FkOGE3YmM4NzJjNmIxMTc0MGQ3M2Q2Zjk1Yjk3NDg5ZmQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0xNTAsNiArMTUw
LDcgQEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdGF0ZSwgR3JhcGgm
IGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aE1p
bjoKICAgICBjYXNlIEFyaXRoTWF4OgorICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0
aFNxcnQ6CiAgICAgY2FzZSBBcml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoU2luOgpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCAzOGU2
NjE3MWQ0NjA2NmVhNjMwN2I4ZDQzNTczNzdlNzZjOTkyNzhhLi43NDc4ODY1NDY5MzgwZDkzYjIw
NmI2MWFkMDQzODI1ZWVmODRkNDFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMzU2MCw2ICszNTYwLDkyIEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGVBcml0aFNxcnQoTm9kZSogbm9kZSkKICAgICB9CiB9CiAKKy8vIEZv
ciBzbWFsbCBwb3NpdGl2ZSBpbnRlZ2VycyAsIGl0IGlzIHdvcnRoIGRvaW5nIGEgdGlueSBpbmxp
bmUgbG9vcCB0byBleHBvbmVudGlhdGUgdGhlIGJhc2UuCisvLyBFdmVyeSByZWdpc3RlciBpcyBj
bG9iYmVyZWQgYnkgdGhpcyBoZWxwZXIuCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgY29t
cGlsZUFyaXRoUG93SW50ZWdlckZhc3RQYXRoKEpJVENvbXBpbGVyJiBhc3NlbWJsZXIsIEZQUlJl
ZyB4T3BlcmFuZCwgR1BSUmVnIHlPcGVyYW5kLCBGUFJSZWcgcmVzdWx0KQoreworICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCBza2lwRmFzdFBhdGg7CisgICAgc2tpcEZhc3RQYXRoLmFwcGVu
ZChhc3NlbWJsZXIuYnJhbmNoMzIoTWFjcm9Bc3NlbWJsZXI6Okxlc3NUaGFuLCB5T3BlcmFuZCwg
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMigwKSkpOworICAgIHNraXBGYXN0UGF0aC5hcHBl
bmQoYXNzZW1ibGVyLmJyYW5jaDMyKE1hY3JvQXNzZW1ibGVyOjpHcmVhdGVyVGhhbiwgeU9wZXJh
bmQsIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMTAwMCkpKTsKKworICAgIHN0YXRpYyBj
b25zdCBkb3VibGUgb25lQ29uc3RhbnQgPSAxLjA7CisgICAgYXNzZW1ibGVyLmxvYWREb3VibGUo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJm9uZUNvbnN0YW50KSwgcmVzdWx0KTsKKwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpMYWJlbCBzdGFydExvb3AoYXNzZW1ibGVyLmxhYmVsKCkpOwor
ICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4cG9uZW50SXNFdmVuID0gYXNzZW1ibGVyLmJyYW5j
aFRlc3QzMihNYWNyb0Fzc2VtYmxlcjo6WmVybywgeU9wZXJhbmQsIE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIoMSkpOworICAgIGFzc2VtYmxlci5tdWxEb3VibGUoeE9wZXJhbmQsIHJlc3Vs
dCk7CisgICAgZXhwb25lbnRJc0V2ZW4ubGluaygmYXNzZW1ibGVyKTsKKyAgICBhc3NlbWJsZXIu
bXVsRG91YmxlKHhPcGVyYW5kLCB4T3BlcmFuZCk7CisgICAgYXNzZW1ibGVyLnJzaGlmdDMyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIoMSksIHlPcGVyYW5kKTsKKyAgICBhc3NlbWJsZXIu
YnJhbmNoVGVzdDMyKE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCB5T3BlcmFuZCkubGlua1RvKHN0
YXJ0TG9vcCwgJmFzc2VtYmxlcik7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBza2lwU2xv
d1BhdGggPSBhc3NlbWJsZXIuanVtcCgpOworICAgIHNraXBGYXN0UGF0aC5saW5rKCZhc3NlbWJs
ZXIpOworCisgICAgcmV0dXJuIHNraXBTbG93UGF0aDsKK30KKwordm9pZCBTcGVjdWxhdGl2ZUpJ
VDo6Y29tcGlsZUFyaXRoUG93KE5vZGUqIG5vZGUpCit7CisgICAgaWYgKG5vZGUtPmNoaWxkMigp
LnVzZUtpbmQoKSA9PSBJbnQzMlVzZSkgeworICAgICAgICBTcGVjdWxhdGVEb3VibGVPcGVyYW5k
IHhPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIHlPcGVyYW5kKHRoaXMsIG5vZGUtPmNoaWxkMigpKTsKKyAgICAgICAgRlBSUmVnIHhP
cGVyYW5kZnByID0geE9wZXJhbmQuZnByKCk7CisgICAgICAgIEdQUlJlZyB5T3BlcmFuZEdwciA9
IHlPcGVyYW5kLmdwcigpOworICAgICAgICBGUFJUZW1wb3JhcnkgeU9wZXJhbmRmcHIodGhpcyk7
CisKKyAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKworICAgICAgICBGUFJSZXN1bHQgcmVzdWx0
KHRoaXMpOworICAgICAgICBGUFJSZWcgcmVzdWx0RnByID0gcmVzdWx0LmZwcigpOworCisgICAg
ICAgIEZQUlRlbXBvcmFyeSB4T3BlcmFuZENvcHkodGhpcyk7CisgICAgICAgIEZQUlJlZyB4T3Bl
cmFuZENvcHlGcHIgPSB4T3BlcmFuZENvcHkuZnByKCk7CisgICAgICAgIG1faml0Lm1vdmVEb3Vi
bGUoeE9wZXJhbmRmcHIsIHhPcGVyYW5kQ29weUZwcik7CisKKyAgICAgICAgR1BSVGVtcG9yYXJ5
IGNvdW50ZXIodGhpcyk7CisgICAgICAgIEdQUlJlZyBjb3VudGVyR3ByID0gY291bnRlci5ncHIo
KTsKKyAgICAgICAgbV9qaXQubW92ZSh5T3BlcmFuZEdwciwgY291bnRlckdwcik7CisKKyAgICAg
ICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgc2tpcEZhbGxiYWNrID0gY29tcGlsZUFyaXRoUG93SW50
ZWdlckZhc3RQYXRoKG1faml0LCB4T3BlcmFuZENvcHlGcHIsIGNvdW50ZXJHcHIsIHJlc3VsdEZw
cik7CisgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKHlPcGVyYW5kR3ByLCB5T3Bl
cmFuZGZwci5mcHIoKSk7CisgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWF0aFBvdywg
cmVzdWx0RnByLCB4T3BlcmFuZGZwciwgeU9wZXJhbmRmcHIuZnByKCkpOworCisgICAgICAgIHNr
aXBGYWxsYmFjay5saW5rKCZtX2ppdCk7CisgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHRGcHIs
IG5vZGUpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgU3BlY3VsYXRlRG91YmxlT3Bl
cmFuZCB4T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CisgICAgU3BlY3VsYXRlRG91Ymxl
T3BlcmFuZCB5T3BlcmFuZCh0aGlzLCBub2RlLT5jaGlsZDIoKSk7CisgICAgRlBSUmVnIHhPcGVy
YW5kZnByID0geE9wZXJhbmQuZnByKCk7CisgICAgRlBSUmVnIHlPcGVyYW5kZnByID0geU9wZXJh
bmQuZnByKCk7CisKKyAgICBmbHVzaFJlZ2lzdGVycygpOworCisgICAgRlBSUmVzdWx0IHJlc3Vs
dCh0aGlzKTsKKyAgICBGUFJSZWcgcmVzdWx0RnByID0gcmVzdWx0LmZwcigpOworCisgICAgRlBS
VGVtcG9yYXJ5IHhPcGVyYW5kQ29weSh0aGlzKTsKKyAgICBGUFJSZWcgeE9wZXJhbmRDb3B5RnBy
ID0geE9wZXJhbmRDb3B5LmZwcigpOworCisgICAgRlBSVGVtcG9yYXJ5IHNjcmF0Y2godGhpcyk7
CisgICAgRlBSUmVnIHNjcmF0Y2hGcHIgPSBzY3JhdGNoLmZwcigpOworCisgICAgR1BSVGVtcG9y
YXJ5IHlPcGVyYW5kSW50ZWdlcih0aGlzKTsKKyAgICBHUFJSZWcgeU9wZXJhbmRJbnRlZ2VyR3By
ID0geU9wZXJhbmRJbnRlZ2VyLmdwcigpOworICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCBm
YWlsZWRFeHBvbmVudENvbnZlcnNpb25Ub0ludGVnZXI7CisgICAgbV9qaXQuYnJhbmNoQ29udmVy
dERvdWJsZVRvSW50MzIoeU9wZXJhbmRmcHIsIHlPcGVyYW5kSW50ZWdlckdwciwgZmFpbGVkRXhw
b25lbnRDb252ZXJzaW9uVG9JbnRlZ2VyLCBzY3JhdGNoRnByLCBmYWxzZSk7CisKKyAgICBtX2pp
dC5tb3ZlRG91YmxlKHhPcGVyYW5kZnByLCB4T3BlcmFuZENvcHlGcHIpOworICAgIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wIHNraXBGYWxsYmFjayA9IGNvbXBpbGVBcml0aFBvd0ludGVnZXJGYXN0UGF0
aChtX2ppdCwgeE9wZXJhbmRDb3B5RnByLCB5T3BlcmFuZEludGVnZXIuZ3ByKCksIHJlc3VsdEZw
cik7CisgICAgZmFpbGVkRXhwb25lbnRDb252ZXJzaW9uVG9JbnRlZ2VyLmxpbmsoJm1faml0KTsK
KworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uTWF0aFBvdywgcmVzdWx0RnByLCB4T3BlcmFu
ZGZwciwgeU9wZXJhbmRmcHIpOworICAgIHNraXBGYWxsYmFjay5saW5rKCZtX2ppdCk7CisgICAg
ZG91YmxlUmVzdWx0KHJlc3VsdEZwciwgbm9kZSk7Cit9CisKIC8vIFJldHVybnMgdHJ1ZSBpZiB0
aGUgY29tcGFyZSBpcyBmdXNlZCB3aXRoIGEgc3Vic2VxdWVudCBicmFuY2guCiBib29sIFNwZWN1
bGF0aXZlSklUOjpjb21wYXJlKE5vZGUqIG5vZGUsIE1hY3JvQXNzZW1ibGVyOjpSZWxhdGlvbmFs
Q29uZGl0aW9uIGNvbmRpdGlvbiwgTWFjcm9Bc3NlbWJsZXI6OkRvdWJsZUNvbmRpdGlvbiBkb3Vi
bGVDb25kaXRpb24sIFNfSklUT3BlcmF0aW9uX0VKSiBvcGVyYXRpb24pCiB7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgKaW5kZXggM2I3YzVkMDBiNzc4
NzRlNDk2NjQzOWUwNmQ5NGRkNmQ2YmJiMTViNS4uMzNjNzc3ZTQ3ZmMyNWY4M2NlMjRmNGJmMDQz
ZmFkZjEzNTlhZTQ4ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuaApAQCAtMjEzNCw2ICsyMTM0LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGls
ZUFyaXRoTXVsKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aERpdihOb2RlKik7CiAgICAg
dm9pZCBjb21waWxlQXJpdGhNb2QoTm9kZSopOworICAgIHZvaWQgY29tcGlsZUFyaXRoUG93KE5v
ZGUqKTsKICAgICB2b2lkIGNvbXBpbGVBcml0aFNxcnQoTm9kZSopOwogICAgIHZvaWQgY29tcGls
ZUNvbnN0YW50U3RvcmFnZVBvaW50ZXIoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUdldEluZGV4
ZWRQcm9wZXJ0eVN0b3JhZ2UoTm9kZSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKaW5kZXggYjgxMDU5M2E1MzI0ZTU5NWRl
NGNkOTdmZWYzZjlhODA2MDFjNGQ5Yy4uNmJmNmI4NmY4YzJiMzMwYTdjMWFlYTIyY2I5ZWZiMzky
N2Y0N2M0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCkBAIC0xOTk2LDYgKzE5OTYsMTEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAKKyAgICBj
YXNlIEFyaXRoUG93OiB7CisgICAgICAgIGNvbXBpbGVBcml0aFBvdyhub2RlKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBBcml0aEFiczogewogICAgICAgICBzd2l0Y2ggKG5v
ZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgewogICAgICAgICBjYXNlIEludDMyVXNlOiB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRl
eCBjZTA2N2E5OTVlYmM3NzUxMzc5OTk5ZjYzYjAyZmFiZjA0ODczMDlmLi42YjEyM2E3NTc4YzJh
YjIyYjE0NDA4Yjk5YTE5MGY3Y2MzNGRkNzcyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKQEAgLTIyNDEsNiArMjI0MSwxMCBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwog
ICAgIH0KIAorICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAgIGNvbXBpbGVBcml0aFBvdyhub2Rl
KTsKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIEFyaXRoU3FydDoKICAgICAgICAgY29tcGls
ZUFyaXRoU3FydChub2RlKTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTdHJlbmd0aFJlZHVjdGlvblBoYXNlLmNwcAppbmRleCBjZTFl
Mjk0NDAyYWVkZTU1MTNjZWQwYjY0MjZiZDNhMDkzOGFkNDhlLi41ZTMwZGZlM2I3ZTJlMjAyMmM3
YjM1OGNjM2QyNDUwMDNmM2NjM2Y3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1N0cmVuZ3RoUmVkdWN0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3RyZW5ndGhSZWR1Y3Rpb25QaGFzZS5jcHAKQEAgLTEzMiw3ICsxMzIsMjAg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgIAorCisgICAgICAgIGNhc2UgQXJpdGhQb3c6CisgICAgICAg
ICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS0+aXNOdW1iZXJDb25zdGFudCgpKSB7CisgICAgICAg
ICAgICAgICAgZG91YmxlIHlPcGVyYW5kVmFsdWUgPSBtX25vZGUtPmNoaWxkMigpLT5hc051bWJl
cigpOworICAgICAgICAgICAgICAgIGlmICh5T3BlcmFuZFZhbHVlID09IDEpIHsKKyAgICAgICAg
ICAgICAgICAgICAgY29udmVydFRvSWRlbnRpdHlPdmVyQ2hpbGQxKCk7CisgICAgICAgICAgICAg
ICAgfSBlbHNlIGlmICh5T3BlcmFuZFZhbHVlID09IDAuNSkgeworICAgICAgICAgICAgICAgICAg
ICBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKG1fbm9kZUluZGV4LCBTcGVjTm9uZSwgUGhhbnRv
bSwgbV9ub2RlLT5vcmlnaW4sIG1fbm9kZS0+Y2hpbGRyZW4pOworICAgICAgICAgICAgICAgICAg
ICBtX25vZGUtPmNvbnZlcnRUb0FyaXRoU3FydCgpOworICAgICAgICAgICAgICAgICAgICBtX2No
YW5nZWQgPSB0cnVlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGJyZWFrOworCiAgICAgICAgIGNhc2UgR2V0QXJyYXlMZW5ndGg6CiAgICAgICAgICAgICBp
ZiAoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcgPSBtX2dyYXBoLnRyeUdldEZvbGRhYmxlVmlld0Zv
ckNoaWxkMShtX25vZGUpKQogICAgICAgICAgICAgICAgIGZvbGRUeXBlZEFycmF5UHJvcGVydHlU
b0NvbnN0YW50KHZpZXcsIGpzTnVtYmVyKHZpZXctPmxlbmd0aCgpKSk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCmluZGV4IGQ0MzhjZmNhOWQwZTVhMzAyMzNiNDVi
NWFmNWUxMjJkNTU5ZTBlYmUuLjdkN2I1MDY4NTNhODhiMjgzYjk5MDVlYjcwYTY0ZTQ4NjdkZDU5
NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCkBAIC0yNDAs
NiArMjQwLDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhNb2Q6CiAgICAg
ICAgICAgICAgICAgY2FzZSBBcml0aE1pbjoKICAgICAgICAgICAgICAgICBjYXNlIEFyaXRoTWF4
OgorICAgICAgICAgICAgICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgICAgICAgICAgICAgY2FzZSBD
b21wYXJlTGVzczoKICAgICAgICAgICAgICAgICBjYXNlIENvbXBhcmVMZXNzRXE6CiAgICAgICAg
ICAgICAgICAgY2FzZSBDb21wYXJlR3JlYXRlcjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAppbmRleCA1YjlmN2FhNTE4Y2EyNmNhYjIwYWI0YTQ1ZGEz
NjFjYTZjZTA4ZjcwLi4yNDhiZGY1MmU3OWEyZTNhNTc0YTUyMjM4YjI1MTE2OTk2Mjk0MzBhIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC04
OSw2ICs4OSw3IEBAIGlubGluZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiBub2Rl
KQogICAgIGNhc2UgQXJpdGhBYnM6CiAgICAgY2FzZSBBcml0aFNpbjoKICAgICBjYXNlIEFyaXRo
Q29zOgorICAgIGNhc2UgQXJpdGhQb3c6CiAgICAgY2FzZSBBcml0aFNxcnQ6CiAgICAgY2FzZSBB
cml0aEZSb3VuZDoKICAgICBjYXNlIEFyaXRoTmVnYXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAppbmRleCBkMjI3NzkyMWZlOTNi
NTNhZjQ2MzdlMDliNzRjNDVmYjRjNmY4NzFjLi5mMjg0ZThkMThlY2FiM2FkN2E3ZmQ1NDE2NWZm
ZTk4ZmY2YzkxYmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
dHJpbnNpY1JlcG9zaXRvcnkuaApAQCAtNDAsNiArNDAsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oZG91YmxlQWJzLCAibGx2bS5mYWJzLmY2NCIsIGZ1bmN0
aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAogICAgIG1hY3JvKGRvdWJsZVNpbiwg
Imxsdm0uc2luLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAog
ICAgIG1hY3JvKGRvdWJsZUNvcywgImxsdm0uY29zLmY2NCIsIGZ1bmN0aW9uVHlwZShkb3VibGVU
eXBlLCBkb3VibGVUeXBlKSkgXAorICAgIG1hY3JvKGRvdWJsZVBvdywgImxsdm0ucG93LmY2NCIs
IGZ1bmN0aW9uVHlwZShkb3VibGVUeXBlLCBkb3VibGVUeXBlLCBkb3VibGVUeXBlKSkgXAorICAg
IG1hY3JvKGRvdWJsZVBvd2ksICJsbHZtLnBvd2kuZjY0IiwgZnVuY3Rpb25UeXBlKGRvdWJsZVR5
cGUsIGRvdWJsZVR5cGUsIGludDMyKSkgXAogICAgIG1hY3JvKGRvdWJsZVNxcnQsICJsbHZtLnNx
cnQuZjY0IiwgZnVuY3Rpb25UeXBlKGRvdWJsZVR5cGUsIGRvdWJsZVR5cGUpKSBcCiAgICAgbWFj
cm8oZnJhbWVBZGRyZXNzLCAibGx2bS5mcmFtZWFkZHJlc3MiLCBmdW5jdGlvblR5cGUocG9pbnRl
clR5cGUoaW50OCksIGludDMyKSkgXAogICAgIG1hY3JvKG11bFdpdGhPdmVyZmxvdzMyLCAibGx2
bS5zbXVsLndpdGgub3ZlcmZsb3cuaTMyIiwgZnVuY3Rpb25UeXBlKHN0cnVjdFR5cGUobV9jb250
ZXh0LCBpbnQzMiwgYm9vbGVhbiksIGludDMyLCBpbnQzMikpIFwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKaW5kZXggZTU3NTM3Yzc5M2Y0Y2M5
NWUyYWM2Y2E2MTg5ZDc5MmQ1N2FjYmJiYS4uNjJjMjA3NDE1MzRmMTFkMTIyYmEyYWZjM2UzZDk3
ODU0NTFkOGNjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKQEAgLTQzNiw2ICs0MzYsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEFy
aXRoQ29zOgogICAgICAgICAgICAgY29tcGlsZUFyaXRoQ29zKCk7CiAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSBBcml0aFBvdzoKKyAgICAgICAgICAgIGNvbXBpbGVBcml0aFBvdygp
OworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQXJpdGhTcXJ0OgogICAgICAgICAg
ICAgY29tcGlsZUFyaXRoU3FydCgpOwogICAgICAgICAgICAgYnJlYWs7CkBAIC0xNTk1LDYgKzE1
OTgsNjQgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgY29tcGlsZUFyaXRoQ29zKCkgeyBzZXREb3Vi
bGUobV9vdXQuZG91YmxlQ29zKGxvd0RvdWJsZShtX25vZGUtPmNoaWxkMSgpKSkpOyB9CiAKKyAg
ICB2b2lkIGNvbXBpbGVBcml0aFBvdygpCisgICAgeworICAgICAgICAvLyBGSVhNRTogaW52ZXN0
aWdhdGUgbGx2bS5wb3dpIHRvIGJldHRlciB1bmRlcnN0YW5kIGl0cyBwZXJmb3JtYW5jZSBjaGFy
YWN0ZXJpc3RpY3MuCisgICAgICAgIC8vIEl0IG1pZ2h0IGJlIGJldHRlciB0byBoYXZlIHRoZSBp
bmxpbmUgbG9vcCBpbiBERkcgdG9vLgorICAgICAgICBpZiAobV9ub2RlLT5jaGlsZDIoKS51c2VL
aW5kKCkgPT0gSW50MzJVc2UpCisgICAgICAgICAgICBzZXREb3VibGUobV9vdXQuZG91YmxlUG93
aShsb3dEb3VibGUobV9ub2RlLT5jaGlsZDEoKSksIGxvd0ludDMyKG1fbm9kZS0+Y2hpbGQyKCkp
KSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTFZhbHVlIGJhc2UgPSBsb3dEb3VibGUo
bV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgICAgICBMVmFsdWUgZXhwb25lbnQgPSBsb3dEb3Vi
bGUobV9ub2RlLT5jaGlsZDIoKSk7CisKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGludGVnZXJF
eHBvbmVudElzU21hbGxCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgdGVz
dCBpbnRlZ2VyIGV4cG9uZW50IGlzIHNtYWxsLiIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2Nr
IGludGVnZXJFeHBvbmVudFBvd0Jsb2NrID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJBcml0aFBv
dyBwb3coZG91YmxlLCAoaW50KWRvdWJsZSkuIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sg
ZG91YmxlRXhwb25lbnRQb3dCbG9jayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cg
cG93KGRvdWJsZSwgZG91YmxlKS4iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBwb3dCbG9j
ayA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiQXJpdGhQb3cgcmVndWxhciBwb3ciKSk7CisgICAg
ICAgICAgICBMQmFzaWNCbG9jayBuYW5FeGNlcHRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAo
IkFyaXRoUG93IE5hTiBFeGNlcHRpb24iKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkFyaXRoUG93IGNvbnRpbnVhdGlvbiIp
KTsKKworICAgICAgICAgICAgTFZhbHVlIGludGVnZXJFeHBvbmVudCA9IG1fb3V0LmZwVG9JbnQz
MihleHBvbmVudCk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdlckV4cG9uZW50Q29udmVydGVk
VG9Eb3VibGUgPSBtX291dC5pbnRUb0RvdWJsZShpbnRlZ2VyRXhwb25lbnQpOworICAgICAgICAg
ICAgTFZhbHVlIGV4cG9uZW50SXNJbnRlZ2VyID0gbV9vdXQuZG91YmxlRXF1YWwoZXhwb25lbnQs
IGludGVnZXJFeHBvbmVudENvbnZlcnRlZFRvRG91YmxlKTsKKyAgICAgICAgICAgIG1fb3V0LmJy
YW5jaChleHBvbmVudElzSW50ZWdlciwgdW5zdXJlKGludGVnZXJFeHBvbmVudElzU21hbGxCbG9j
ayksIHVuc3VyZShkb3VibGVFeHBvbmVudFBvd0Jsb2NrKSk7CisKKyAgICAgICAgICAgIExCYXNp
Y0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50ZWdlckV4cG9uZW50SXNTbWFsbEJs
b2NrLCBpbnRlZ2VyRXhwb25lbnRQb3dCbG9jayk7CisgICAgICAgICAgICBMVmFsdWUgaW50ZWdl
ckV4cG9uZW50QmVsb3cxMDAwID0gbV9vdXQuYmVsb3coaW50ZWdlckV4cG9uZW50LCBtX291dC5j
b25zdEludDMyKDEwMDApKTsKKyAgICAgICAgICAgIG1fb3V0LmJyYW5jaChpbnRlZ2VyRXhwb25l
bnRCZWxvdzEwMDAsIHVzdWFsbHkoaW50ZWdlckV4cG9uZW50UG93QmxvY2spLCByYXJlbHkoZG91
YmxlRXhwb25lbnRQb3dCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhpbnRl
Z2VyRXhwb25lbnRQb3dCbG9jaywgZG91YmxlRXhwb25lbnRQb3dCbG9jayk7CisgICAgICAgICAg
ICBWYWx1ZUZyb21CbG9jayBwb3dEb3VibGVJbnRSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQu
ZG91YmxlUG93aShiYXNlLCBpbnRlZ2VyRXhwb25lbnQpKTsKKyAgICAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlRXhw
b25lbnRQb3dCbG9jaywgcG93QmxvY2spOworICAgICAgICAgICAgLy8gSWYgeSBpcyBOYU4sIHRo
ZSByZXN1bHQgaXMgTmFOLgorICAgICAgICAgICAgLy8gRklYTUU6IHNob3VsZG4ndCB3ZSBvbmx5
IGNoZWNrIHRoYXQgaWYgdGhlIHR5cGUgb2YgY2hpbGQyKCkgbWlnaHQgaGF2ZSBOYU4/CisgICAg
ICAgICAgICBMVmFsdWUgZXhwb25lbnRJc05hTiA9IG1fb3V0LmRvdWJsZU5vdEVxdWFsT3JVbm9y
ZGVyZWQoZXhwb25lbnQsIGV4cG9uZW50KTsKKworICAgICAgICAgICAgLy8gSWYgYWJzKHgpIGlz
IDEgYW5kIHkgaXMgK2luZmluaXR5LCB0aGUgcmVzdWx0IGlzIE5hTi4KKyAgICAgICAgICAgIC8v
IElmIGFicyh4KSBpcyAxIGFuZCB5IGlzIC1pbmZpbml0eSwgdGhlIHJlc3VsdCBpcyBOYU4uCisg
ICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudCA9IG1fb3V0LmRvdWJsZUFicyhleHBv
bmVudCk7CisgICAgICAgICAgICBMVmFsdWUgYWJzb2x1dGVFeHBvbmVudElzSW5maW5pdHkgPSBt
X291dC5kb3VibGVFcXVhbChhYnNvbHV0ZUV4cG9uZW50LCBtX291dC5jb25zdERvdWJsZShzdGQ6
Om51bWVyaWNfbGltaXRzPGRvdWJsZT46OmluZmluaXR5KCkpKTsKKyAgICAgICAgICAgIExWYWx1
ZSBhYnNvbHV0ZUJhc2UgPSBtX291dC5kb3VibGVBYnMoYmFzZSk7CisgICAgICAgICAgICBMVmFs
dWUgYWJzb2x1dGVCYXNlSXNPbmUgPSBtX291dC5kb3VibGVFcXVhbChhYnNvbHV0ZUJhc2UsIG1f
b3V0LmNvbnN0RG91YmxlKDEpKTsKKyAgICAgICAgICAgIExWYWx1ZSBvbmVCYXNlSW5maW5pdGVF
eHBvbmVudCA9IG1fb3V0LmJpdEFuZChhYnNvbHV0ZUV4cG9uZW50SXNJbmZpbml0eSwgYWJzb2x1
dGVCYXNlSXNPbmUpOworCisgICAgICAgICAgICBtX291dC5icmFuY2gobV9vdXQuYml0T3IoZXhw
b25lbnRJc05hTiwgb25lQmFzZUluZmluaXRlRXhwb25lbnQpLCByYXJlbHkobmFuRXhjZXB0aW9u
KSwgdXN1YWxseShwb3dCbG9jaykpOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhwb3dC
bG9jaywgbmFuRXhjZXB0aW9uKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHBvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcihtX291dC5kb3VibGVQb3coYmFzZSwgZXhwb25lbnQpKTsKKyAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKKworICAgICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8obmFuRXhjZXB0aW9uLCBjb250aW51YXRpb24pOworICAgICAgICAgICAgVmFsdWVGcm9t
QmxvY2sgcHVyZU5hbiA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZShQTmFOKSk7Cisg
ICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOworICAgICAgICAgICAgc2V0RG91Ymxl
KG1fb3V0LnBoaShtX291dC5kb3VibGVUeXBlLCBwb3dEb3VibGVJbnRSZXN1bHQsIHBvd1Jlc3Vs
dCwgcHVyZU5hbikpOworICAgICAgICB9CisgICAgfQorCiAgICAgdm9pZCBjb21waWxlQXJpdGhT
cXJ0KCkgeyBzZXREb3VibGUobV9vdXQuZG91YmxlU3FydChsb3dEb3VibGUobV9ub2RlLT5jaGls
ZDEoKSkpKTsgfQogICAgIAogICAgIHZvaWQgY29tcGlsZUFyaXRoRlJvdW5kKCkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE91dHB1dC5oCmluZGV4IGM3MGQ4Y2Q5NzZhNTU5ZWI2OGYzYzUwMmRm
NGI4OWQyNzFjMWM3MTUuLmFmODJjYmRkNjY1YWY1ZmRiNmQwNjI1YTliMmNjM2EyZmRhZWRmOWMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3V0cHV0LmgKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPdXRwdXQuaApAQCAtMTc3LDYgKzE3NywxNiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBjYWxsKGRvdWJsZUNvc0ludHJpbnNpYygpLCB2YWx1
ZSk7CiAgICAgfQogCisgICAgTFZhbHVlIGRvdWJsZVBvdyhMVmFsdWUgeE9wZXJhbmQsIExWYWx1
ZSB5T3BlcmFuZCkKKyAgICB7CisgICAgICAgIHJldHVybiBjYWxsKGRvdWJsZVBvd0ludHJpbnNp
YygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOworICAgIH0KKworICAgIExWYWx1ZSBkb3VibGVQb3dp
KExWYWx1ZSB4T3BlcmFuZCwgTFZhbHVlIHlPcGVyYW5kKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNhbGwoZG91YmxlUG93aUludHJpbnNpYygpLCB4T3BlcmFuZCwgeU9wZXJhbmQpOworICAgIH0K
KwogICAgIExWYWx1ZSBkb3VibGVTcXJ0KExWYWx1ZSB2YWx1ZSkKICAgICB7CiAgICAgICAgIHJl
dHVybiBjYWxsKGRvdWJsZVNxcnRJbnRyaW5zaWMoKSwgdmFsdWUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKaW5kZXggMjQ0YjRiZTljYzZlMTdlOGFiZWM3
NzNkZDA4NzE5MTExYzQxZDk1Ny4uODA5MDNkYTViMDg2MmFlMDFlZjE4MDE5ZDM4ZjMzZDJlYmQw
YmVlOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCkBA
IC0xMjEzLDYgKzEyMTMsMzk1IEBAIFNsb3dQYXRoUmV0dXJuVHlwZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk9wdGltaXplKEV4ZWNTdGF0ZSogZXhlYywgaW50MzJfdCBieXRlCiB9CiAjZW5kaWYK
IAorI2lmIFBMQVRGT1JNKElPUykgJiYgQ1BVKEFSTV9USFVNQjIpCisKKy8vIFRoZSBmb2xsb3dp
bmcgY29kZSBpcyB0YWtlbiBmcm9tIG5ldGxpYi5vcmc6CisvLyAgIGh0dHA6Ly93d3cubmV0bGli
Lm9yZy9mZGxpYm0vZmRsaWJtLmgKKy8vICAgaHR0cDovL3d3dy5uZXRsaWIub3JnL2ZkbGlibS9l
X3Bvdy5jCisvLyAgIGh0dHA6Ly93d3cubmV0bGliLm9yZy9mZGxpYm0vc19zY2FsYm4uYworLy8K
Ky8vIEFuZCB3YXMgb3JpZ2luYWxseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxp
Y2Vuc2U6CisKKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Tb2Z0LCBh
IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwg
Y29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCisgKiBzb2Z0d2FyZSBpcyBmcmVlbHkg
Z3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKKyAqIGlzIHByZXNlcnZlZC4KKyAq
ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAq
LworLyoKKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KKyAqIENvcHlyaWdodCAoQykgMjAwNCBieSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlm
eSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHBy
b3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworLyogX19p
ZWVlNzU0X3Bvdyh4LHkpIHJldHVybiB4Kip5CisgKgorICogICAgICAgICAgICAgIG4KKyAqIE1l
dGhvZDogIExldCB4ID0gIDIgICAqICgxK2YpCisgKiAgICAxLiBDb21wdXRlIGFuZCByZXR1cm4g
bG9nMih4KSBpbiB0d28gcGllY2VzOgorICogICAgICAgIGxvZzIoeCkgPSB3MSArIHcyLAorICog
ICAgICAgd2hlcmUgdzEgaGFzIDUzLTI0ID0gMjkgYml0IHRyYWlsaW5nIHplcm9zLgorICogICAg
Mi4gUGVyZm9ybSB5KmxvZzIoeCkgPSBuK3knIGJ5IHNpbXVsYXRpbmcgbXV0aS1wcmVjaXNpb24g
CisgKiAgICAgICBhcml0aG1ldGljLCB3aGVyZSB8eSd8PD0wLjUuCisgKiAgICAzLiBSZXR1cm4g
eCoqeSA9IDIqKm4qZXhwKHknKmxvZzIpCisgKgorICogU3BlY2lhbCBjYXNlczoKKyAqICAgIDEu
ICAoYW55dGhpbmcpICoqIDAgIGlzIDEKKyAqICAgIDIuICAoYW55dGhpbmcpICoqIDEgIGlzIGl0
c2VsZgorICogICAgMy4gIChhbnl0aGluZykgKiogTkFOIGlzIE5BTgorICogICAgNC4gIE5BTiAq
KiAoYW55dGhpbmcgZXhjZXB0IDApIGlzIE5BTgorICogICAgNS4gICstKHx4fCA+IDEpICoqICAr
SU5GIGlzICtJTkYKKyAqICAgIDYuICArLSh8eHwgPiAxKSAqKiAgLUlORiBpcyArMAorICogICAg
Ny4gICstKHx4fCA8IDEpICoqICArSU5GIGlzICswCisgKiAgICA4LiAgKy0ofHh8IDwgMSkgKiog
IC1JTkYgaXMgK0lORgorICogICAgOS4gICstMSAgICAgICAgICoqICstSU5GIGlzIE5BTgorICog
ICAgMTAuICswICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTikgICAgICAgICAgICAgICBpcyAr
MAorICogICAgMTEuIC0wICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTiwgb2RkIGludGVnZXIp
ICBpcyArMAorICogICAgMTIuICswICoqICgtYW55dGhpbmcgZXhjZXB0IDAsIE5BTikgICAgICAg
ICAgICAgICBpcyArSU5GCisgKiAgICAxMy4gLTAgKiogKC1hbnl0aGluZyBleGNlcHQgMCwgTkFO
LCBvZGQgaW50ZWdlcikgIGlzICtJTkYKKyAqICAgIDE0LiAtMCAqKiAob2RkIGludGVnZXIpID0g
LSggKzAgKiogKG9kZCBpbnRlZ2VyKSApCisgKiAgICAxNS4gK0lORiAqKiAoK2FueXRoaW5nIGV4
Y2VwdCAwLE5BTikgaXMgK0lORgorICogICAgMTYuICtJTkYgKiogKC1hbnl0aGluZyBleGNlcHQg
MCxOQU4pIGlzICswCisgKiAgICAxNy4gLUlORiAqKiAoYW55dGhpbmcpICA9IC0wICoqICgtYW55
dGhpbmcpCisgKiAgICAxOC4gKC1hbnl0aGluZykgKiogKGludGVnZXIpIGlzICgtMSkqKihpbnRl
Z2VyKSooK2FueXRoaW5nKippbnRlZ2VyKQorICogICAgMTkuICgtYW55dGhpbmcgZXhjZXB0IDAg
YW5kIGluZikgKiogKG5vbi1pbnRlZ2VyKSBpcyBOQU4KKyAqCisgKiBBY2N1cmFjeToKKyAqICAg
IHBvdyh4LHkpIHJldHVybnMgeCoqeSBuZWFybHkgcm91bmRlZC4gSW4gcGFydGljdWxhcgorICog
ICAgICAgICAgICBwb3coaW50ZWdlcixpbnRlZ2VyKQorICogICAgYWx3YXlzIHJldHVybnMgdGhl
IGNvcnJlY3QgaW50ZWdlciBwcm92aWRlZCBpdCBpcyAKKyAqICAgIHJlcHJlc2VudGFibGUuCisg
KgorICogQ29uc3RhbnRzIDoKKyAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgYXJlIHRoZSBpbnRl
bmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAorICogY29uc3RhbnRzLiBUaGUgZGVjaW1hbCB2
YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAorICogY29tcGlsZXIgd2lsbCBj
b252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91Z2ggCisgKiB0byBw
cm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCisgKi8KKworI2RlZmluZSBfX0hJ
KHgpICooMSsoaW50KikmeCkKKyNkZWZpbmUgX19MTyh4KSAqKGludCopJngKKworc3RhdGljIGNv
bnN0IGRvdWJsZQorYnBbXSA9IHsxLjAsIDEuNSx9LAorZHBfaFtdID0geyAwLjAsIDUuODQ5NjI0
ODcyMjA3NjQxNjAxNTZlLTAxLH0sIC8qIDB4M0ZFMkI4MDMsIDB4NDAwMDAwMDAgKi8KK2RwX2xb
XSA9IHsgMC4wLCAxLjM1MDAzOTIwMjEyOTc0ODk3MTI4ZS0wOCx9LCAvKiAweDNFNENGREVCLCAw
eDQzQ0ZEMDA2ICovCit6ZXJvICAgID0gIDAuMCwKK29uZSAgICA9ICAxLjAsCit0d28gICAgPSAg
Mi4wLAordHdvNTMgICAgPSAgOTAwNzE5OTI1NDc0MDk5Mi4wLCAgICAvKiAweDQzNDAwMDAwLCAw
eDAwMDAwMDAwICovCitodWdlICAgID0gIDEuMGUzMDAsCit0aW55ICAgID0gIDEuMGUtMzAwLAor
ICAgICAgICAvKiBmb3Igc2NhbGJuICovCit0d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAw
MDBlKzE2LCAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCit0d29tNTQgID0gIDUuNTUxMTE1
MTIzMTI1NzgyNzAyMTJlLTE3LCAvKiAweDNDOTAwMDAwLCAweDAwMDAwMDAwICovCisgICAgLyog
cG9seSBjb2VmcyBmb3IgKDMvMikqKGxvZyh4KS0ycy0yLzMqcyoqMyAqLworTDEgID0gIDUuOTk5
OTk5OTk5OTk5OTQ2NDg3MjVlLTAxLCAvKiAweDNGRTMzMzMzLCAweDMzMzMzMzAzICovCitMMiAg
PSAgNC4yODU3MTQyODU3ODU1MDE4NDI1MmUtMDEsIC8qIDB4M0ZEQjZEQjYsIDB4REI2RkFCRkYg
Ki8KK0wzICA9ICAzLjMzMzMzMzI5ODE4Mzc3NDMyOTE4ZS0wMSwgLyogMHgzRkQ1NTU1NSwgMHg1
MThGMjY0RCAqLworTDQgID0gIDIuNzI3MjgxMjM4MDg1MzQwMDY0ODllLTAxLCAvKiAweDNGRDE3
NDYwLCAweEE5MUQ0MTAxICovCitMNSAgPSAgMi4zMDY2MDc0NTc3NTU2MTc1NDA2N2UtMDEsIC8q
IDB4M0ZDRDg2NEEsIDB4OTNDOURCNjUgKi8KK0w2ICA9ICAyLjA2OTc1MDE3ODAwMzM4NDE3Nzg0
ZS0wMSwgLyogMHgzRkNBN0UyOCwgMHg0QTQ1NEVFRiAqLworUDEgICA9ICAxLjY2NjY2NjY2NjY2
NjY2MDE5MDM3ZS0wMSwgLyogMHgzRkM1NTU1NSwgMHg1NTU1NTUzRSAqLworUDIgICA9IC0yLjc3
Nzc3Nzc3NzcwMTU1OTMzODQyZS0wMywgLyogMHhCRjY2QzE2QywgMHgxNkJFQkQ5MyAqLworUDMg
ICA9ICA2LjYxMzc1NjMyMTQzNzkzNDM2MTE3ZS0wNSwgLyogMHgzRjExNTY2QSwgMHhBRjI1REUy
QyAqLworUDQgICA9IC0xLjY1MzM5MDIyMDU0NjUyNTE1MzkwZS0wNiwgLyogMHhCRUJCQkQ0MSwg
MHhDNUQyNkJGMSAqLworUDUgICA9ICA0LjEzODEzNjc5NzA1NzIzODQ2MDM5ZS0wOCwgLyogMHgz
RTY2Mzc2OSwgMHg3MkJFQTREMCAqLworbGcyICA9ICA2LjkzMTQ3MTgwNTU5OTQ1Mjg2MjI3ZS0w
MSwgLyogMHgzRkU2MkU0MiwgMHhGRUZBMzlFRiAqLworbGcyX2ggID0gIDYuOTMxNDcxODI0NjQ1
OTk2MDkzNzVlLTAxLCAvKiAweDNGRTYyRTQzLCAweDAwMDAwMDAwICovCitsZzJfbCAgPSAtMS45
MDQ2NTQyOTk5NTc3NjgwNDUyNWUtMDksIC8qIDB4QkUyMDVDNjEsIDB4MENBODZDMzkgKi8KK292
dCA9ICA4LjAwODU2NjI1OTUzNzI5NDQzNzJlLTAwMTcsIC8qIC0oMTAyNC1sb2cyKG92ZmwrLjV1
bHApKSAqLworY3AgICAgPSAgOS42MTc5NjY5MzkyNTk3NTU1NDMyOWUtMDEsIC8qIDB4M0ZFRUM3
MDksIDB4REMzQTAzRkQgPTIvKDNsbjIpICovCitjcF9oICA9ICA5LjYxNzk2NzAwOTU0NDM3MjU1
ODU5ZS0wMSwgLyogMHgzRkVFQzcwOSwgMHhFMDAwMDAwMCA9KGZsb2F0KWNwICovCitjcF9sICA9
IC03LjAyODQ2MTY1MDk1Mjc1ODI2NTE2ZS0wOSwgLyogMHhCRTNFMkZFMCwgMHgxNDVCMDFGNSA9
dGFpbCBvZiBjcF9oKi8KK2l2bG4yICAgID0gIDEuNDQyNjk1MDQwODg4OTYzMzg3MDBlKzAwLCAv
KiAweDNGRjcxNTQ3LCAweDY1MkI4MkZFID0xL2xuMiAqLworaXZsbjJfaCAgPSAgMS40NDI2OTUw
MjE2MjkzMzM0OTYwOWUrMDAsIC8qIDB4M0ZGNzE1NDcsIDB4NjAwMDAwMDAgPTI0YiAxL2xuMiov
CitpdmxuMl9sICA9ICAxLjkyNTk2Mjk5MTEyNjYxNzQ2ODg3ZS0wODsgLyogMHgzRTU0QUUwQiwg
MHhGODVEREY0NCA9MS9sbjIgdGFpbCovCisKK2lubGluZSBkb3VibGUgZmRsaWJtU2NhbGJuIChk
b3VibGUgeCwgaW50IG4pCit7CisgICAgaW50ICBrLGh4LGx4OworICAgIGh4ID0gX19ISSh4KTsK
KyAgICBseCA9IF9fTE8oeCk7CisgICAgICAgIGsgPSAoaHgmMHg3ZmYwMDAwMCk+PjIwOyAgICAg
ICAgLyogZXh0cmFjdCBleHBvbmVudCAqLworICAgICAgICBpZiAoaz09MCkgeyAgICAgICAgICAg
ICAgICAvKiAwIG9yIHN1Ym5vcm1hbCB4ICovCisgICAgICAgICAgICBpZiAoKGx4fChoeCYweDdm
ZmZmZmZmKSk9PTApIHJldHVybiB4OyAvKiArLTAgKi8KKyAgICAgICAgeCAqPSB0d281NDsgCisg
ICAgICAgIGh4ID0gX19ISSh4KTsKKyAgICAgICAgayA9ICgoaHgmMHg3ZmYwMDAwMCk+PjIwKSAt
IDU0OyAKKyAgICAgICAgICAgIGlmIChuPCAtNTAwMDApIHJldHVybiB0aW55Kng7ICAgICAvKnVu
ZGVyZmxvdyovCisgICAgICAgIH0KKyAgICAgICAgaWYgKGs9PTB4N2ZmKSByZXR1cm4geCt4OyAg
ICAgICAgLyogTmFOIG9yIEluZiAqLworICAgICAgICBrID0gaytuOyAKKyAgICAgICAgaWYgKGsg
PiAgMHg3ZmUpIHJldHVybiBodWdlKmNvcHlzaWduKGh1Z2UseCk7IC8qIG92ZXJmbG93ICAqLwor
ICAgICAgICBpZiAoayA+IDApICAgICAgICAgICAgICAgICAvKiBub3JtYWwgcmVzdWx0ICovCisg
ICAgICAgIHtfX0hJKHgpID0gKGh4JjB4ODAwZmZmZmYpfChrPDwyMCk7IHJldHVybiB4O30KKyAg
ICAgICAgaWYgKGsgPD0gLTU0KSB7CisgICAgICAgICAgICBpZiAobiA+IDUwMDAwKSAgICAgLyog
aW4gY2FzZSBpbnRlZ2VyIG92ZXJmbG93IGluIG4rayAqLworICAgICAgICByZXR1cm4gaHVnZSpj
b3B5c2lnbihodWdlLHgpOyAgICAvKm92ZXJmbG93Ki8KKyAgICAgICAgZWxzZSByZXR1cm4gdGlu
eSpjb3B5c2lnbih0aW55LHgpOyAgICAgLyp1bmRlcmZsb3cqLworICAgICAgICB9CisgICAgICAg
IGsgKz0gNTQ7ICAgICAgICAgICAgICAgIC8qIHN1Ym5vcm1hbCByZXN1bHQgKi8KKyAgICAgICAg
X19ISSh4KSA9IChoeCYweDgwMGZmZmZmKXwoazw8MjApOworICAgICAgICByZXR1cm4geCp0d29t
NTQ7Cit9CisKK3N0YXRpYyBkb3VibGUgZmRsaWJtUG93KGRvdWJsZSB4LCBkb3VibGUgeSkKK3sK
KyAgICBkb3VibGUgeixheCx6X2gsel9sLHBfaCxwX2w7CisgICAgZG91YmxlIHkxLHQxLHQyLHIs
cyx0LHUsdix3OworICAgIGludCBpMCxpMSxpLGosayx5aXNpbnQsbjsKKyAgICBpbnQgaHgsaHks
aXgsaXk7CisgICAgdW5zaWduZWQgbHgsbHk7CisKKyAgICBpMCA9ICgoKihpbnQqKSZvbmUpPj4y
OSleMTsgaTE9MS1pMDsKKyAgICBoeCA9IF9fSEkoeCk7IGx4ID0gX19MTyh4KTsKKyAgICBoeSA9
IF9fSEkoeSk7IGx5ID0gX19MTyh5KTsKKyAgICBpeCA9IGh4JjB4N2ZmZmZmZmY7ICBpeSA9IGh5
JjB4N2ZmZmZmZmY7CisKKyAgICAvKiB5PT16ZXJvOiB4KiowID0gMSAqLworICAgIGlmKChpeXxs
eSk9PTApIHJldHVybiBvbmU7ICAgICAKKworICAgIC8qICstTmFOIHJldHVybiB4K3kgKi8KKyAg
ICBpZihpeCA+IDB4N2ZmMDAwMDAgfHwgKChpeD09MHg3ZmYwMDAwMCkmJihseCE9MCkpIHx8Cisg
ICAgICAgaXkgPiAweDdmZjAwMDAwIHx8ICgoaXk9PTB4N2ZmMDAwMDApJiYobHkhPTApKSkgCisg
ICAgICAgIHJldHVybiB4K3k7ICAgIAorCisgICAgLyogZGV0ZXJtaW5lIGlmIHkgaXMgYW4gb2Rk
IGludCB3aGVuIHggPCAwCisgICAgICogeWlzaW50ID0gMCAgICAuLi4geSBpcyBub3QgYW4gaW50
ZWdlcgorICAgICAqIHlpc2ludCA9IDEgICAgLi4uIHkgaXMgYW4gb2RkIGludAorICAgICAqIHlp
c2ludCA9IDIgICAgLi4uIHkgaXMgYW4gZXZlbiBpbnQKKyAgICAgKi8KKyAgICB5aXNpbnQgID0g
MDsKKyAgICBpZihoeDwwKSB7ICAgIAorICAgICAgICBpZihpeT49MHg0MzQwMDAwMCkgeWlzaW50
ID0gMjsgLyogZXZlbiBpbnRlZ2VyIHkgKi8KKyAgICAgICAgZWxzZSBpZihpeT49MHgzZmYwMDAw
MCkgeworICAgICAgICBrID0gKGl5Pj4yMCktMHgzZmY7ICAgICAgIC8qIGV4cG9uZW50ICovCisg
ICAgICAgIGlmKGs+MjApIHsKKyAgICAgICAgICAgIGogPSBseT4+KDUyLWspOworICAgICAgICAg
ICAgaWYoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGo8PCg1Mi1rKSk9PWx5KSB5aXNpbnQgPSAyLShq
JjEpOworICAgICAgICB9IGVsc2UgaWYobHk9PTApIHsKKyAgICAgICAgICAgIGogPSBpeT4+KDIw
LWspOworICAgICAgICAgICAgaWYoKGo8PCgyMC1rKSk9PWl5KSB5aXNpbnQgPSAyLShqJjEpOwor
ICAgICAgICB9CisgICAgICAgIH0gICAgICAgIAorICAgIH0gCisKKyAgICAvKiBzcGVjaWFsIHZh
bHVlIG9mIHkgKi8KKyAgICBpZihseT09MCkgeyAgICAgCisgICAgICAgIGlmIChpeT09MHg3ZmYw
MDAwMCkgeyAgICAvKiB5IGlzICstaW5mICovCisgICAgICAgICAgICBpZigoKGl4LTB4M2ZmMDAw
MDApfGx4KT09MCkKKyAgICAgICAgICAgIHJldHVybiAgeSAtIHk7ICAgIC8qIGluZioqKy0xIGlz
IE5hTiAqLworICAgICAgICAgICAgZWxzZSBpZiAoaXggPj0gMHgzZmYwMDAwMCkvKiAofHh8PjEp
KiorLWluZiA9IGluZiwwICovCisgICAgICAgICAgICByZXR1cm4gKGh5Pj0wKT8geTogemVybzsK
KyAgICAgICAgICAgIGVsc2UgICAgICAgICAgICAvKiAofHh8PDEpKiotLCtpbmYgPSBpbmYsMCAq
LworICAgICAgICAgICAgcmV0dXJuIChoeTwwKT8teTogemVybzsKKyAgICAgICAgfSAKKyAgICAg
ICAgaWYoaXk9PTB4M2ZmMDAwMDApIHsgICAgLyogeSBpcyAgKy0xICovCisgICAgICAgIGlmKGh5
PDApIHJldHVybiBvbmUveDsgZWxzZSByZXR1cm4geDsKKyAgICAgICAgfQorICAgICAgICBpZiho
eT09MHg0MDAwMDAwMCkgcmV0dXJuIHgqeDsgLyogeSBpcyAgMiAqLworICAgICAgICBpZihoeT09
MHgzZmUwMDAwMCkgeyAgICAvKiB5IGlzICAwLjUgKi8KKyAgICAgICAgaWYoaHg+PTApICAgIC8q
IHggPj0gKzAgKi8KKyAgICAgICAgcmV0dXJuIHNxcnQoeCk7ICAgIAorICAgICAgICB9CisgICAg
fQorCisgICAgYXggICA9IGZhYnMoeCk7CisgICAgLyogc3BlY2lhbCB2YWx1ZSBvZiB4ICovCisg
ICAgaWYobHg9PTApIHsKKyAgICAgICAgaWYoaXg9PTB4N2ZmMDAwMDB8fGl4PT0wfHxpeD09MHgz
ZmYwMDAwMCl7CisgICAgICAgIHogPSBheDsgICAgICAgICAgICAvKnggaXMgKy0wLCstaW5mLCst
MSovCisgICAgICAgIGlmKGh5PDApIHogPSBvbmUvejsgICAgLyogeiA9ICgxL3x4fCkgKi8KKyAg
ICAgICAgaWYoaHg8MCkgeworICAgICAgICAgICAgaWYoKChpeC0weDNmZjAwMDAwKXx5aXNpbnQp
PT0wKSB7CisgICAgICAgICAgICB6ID0gKHoteikvKHoteik7IC8qICgtMSkqKm5vbi1pbnQgaXMg
TmFOICovCisgICAgICAgICAgICB9IGVsc2UgaWYoeWlzaW50PT0xKSAKKyAgICAgICAgICAgIHog
PSAtejsgICAgICAgIC8qICh4PDApKipvZGQgPSAtKHx4fCoqb2RkKSAqLworICAgICAgICB9Cisg
ICAgICAgIHJldHVybiB6OworICAgICAgICB9CisgICAgfQorICAgIAorICAgIG4gPSAoaHg+PjMx
KSsxOworCisgICAgLyogKHg8MCkqKihub24taW50KSBpcyBOYU4gKi8KKyAgICBpZigobnx5aXNp
bnQpPT0wKSByZXR1cm4gKHgteCkvKHgteCk7CisKKyAgICBzID0gb25lOyAvKiBzIChzaWduIG9m
IHJlc3VsdCAtdmUqKm9kZCkgPSAtMSBlbHNlID0gMSAqLworICAgIGlmKChufCh5aXNpbnQtMSkp
PT0wKSBzID0gLW9uZTsvKiAoLXZlKSoqKG9kZCBpbnQpICovCisKKyAgICAvKiB8eXwgaXMgaHVn
ZSAqLworICAgIGlmKGl5PjB4NDFlMDAwMDApIHsgLyogaWYgfHl8ID4gMioqMzEgKi8KKyAgICAg
ICAgaWYoaXk+MHg0M2YwMDAwMCl7ICAgIC8qIGlmIHx5fCA+IDIqKjY0LCBtdXN0IG8vdWZsb3cg
Ki8KKyAgICAgICAgaWYoaXg8PTB4M2ZlZmZmZmYpIHJldHVybiAoaHk8MCk/IGh1Z2UqaHVnZTp0
aW55KnRpbnk7CisgICAgICAgIGlmKGl4Pj0weDNmZjAwMDAwKSByZXR1cm4gKGh5PjApPyBodWdl
Kmh1Z2U6dGlueSp0aW55OworICAgICAgICB9CisgICAgLyogb3Zlci91bmRlcmZsb3cgaWYgeCBp
cyBub3QgY2xvc2UgdG8gb25lICovCisgICAgICAgIGlmKGl4PDB4M2ZlZmZmZmYpIHJldHVybiAo
aHk8MCk/IHMqaHVnZSpodWdlOnMqdGlueSp0aW55OworICAgICAgICBpZihpeD4weDNmZjAwMDAw
KSByZXR1cm4gKGh5PjApPyBzKmh1Z2UqaHVnZTpzKnRpbnkqdGlueTsKKyAgICAvKiBub3cgfDEt
eHwgaXMgdGlueSA8PSAyKiotMjAsIHN1ZmZpY2UgdG8gY29tcHV0ZSAKKyAgICAgICBsb2coeCkg
YnkgeC14XjIvMit4XjMvMy14XjQvNCAqLworICAgICAgICB0ID0gYXgtb25lOyAgICAgICAgLyog
dCBoYXMgMjAgdHJhaWxpbmcgemVyb3MgKi8KKyAgICAgICAgdyA9ICh0KnQpKigwLjUtdCooMC4z
MzMzMzMzMzMzMzMzMzMzMzMzMzMzLXQqMC4yNSkpOworICAgICAgICB1ID0gaXZsbjJfaCp0OyAg
ICAvKiBpdmxuMl9oIGhhcyAyMSBzaWcuIGJpdHMgKi8KKyAgICAgICAgdiA9IHQqaXZsbjJfbC13
Kml2bG4yOworICAgICAgICB0MSA9IHUrdjsKKyAgICAgICAgX19MTyh0MSkgPSAwOworICAgICAg
ICB0MiA9IHYtKHQxLXUpOworICAgIH0gZWxzZSB7CisgICAgICAgIGRvdWJsZSBzcyxzMixzX2gs
c19sLHRfaCx0X2w7CisgICAgICAgIG4gPSAwOworICAgIC8qIHRha2UgY2FyZSBzdWJub3JtYWwg
bnVtYmVyICovCisgICAgICAgIGlmKGl4PDB4MDAxMDAwMDApCisgICAgICAgIHtheCAqPSB0d281
MzsgbiAtPSA1MzsgaXggPSBfX0hJKGF4KTsgfQorICAgICAgICBuICArPSAoKGl4KT4+MjApLTB4
M2ZmOworICAgICAgICBqICA9IGl4JjB4MDAwZmZmZmY7CisgICAgLyogZGV0ZXJtaW5lIGludGVy
dmFsICovCisgICAgICAgIGl4ID0ganwweDNmZjAwMDAwOyAgICAgICAgLyogbm9ybWFsaXplIGl4
ICovCisgICAgICAgIGlmKGo8PTB4Mzk4OEUpIGs9MDsgICAgICAgIC8qIHx4fDxzcXJ0KDMvMikg
Ki8KKyAgICAgICAgZWxzZSBpZihqPDB4QkI2N0EpIGs9MTsgICAgLyogfHh8PHNxcnQoMykgICAq
LworICAgICAgICBlbHNlIHtrPTA7bis9MTtpeCAtPSAweDAwMTAwMDAwO30KKyAgICAgICAgX19I
SShheCkgPSBpeDsKKworICAgIC8qIGNvbXB1dGUgc3MgPSBzX2grc19sID0gKHgtMSkvKHgrMSkg
b3IgKHgtMS41KS8oeCsxLjUpICovCisgICAgICAgIHUgPSBheC1icFtrXTsgICAgICAgIC8qIGJw
WzBdPTEuMCwgYnBbMV09MS41ICovCisgICAgICAgIHYgPSBvbmUvKGF4K2JwW2tdKTsKKyAgICAg
ICAgc3MgPSB1KnY7CisgICAgICAgIHNfaCA9IHNzOworICAgICAgICBfX0xPKHNfaCkgPSAwOwor
ICAgIC8qIHRfaD1heCticFtrXSBIaWdoICovCisgICAgICAgIHRfaCA9IHplcm87CisgICAgICAg
IF9fSEkodF9oKT0oKGl4Pj4xKXwweDIwMDAwMDAwKSsweDAwMDgwMDAwKyhrPDwxOCk7IAorICAg
ICAgICB0X2wgPSBheCAtICh0X2gtYnBba10pOworICAgICAgICBzX2wgPSB2KigodS1zX2gqdF9o
KS1zX2gqdF9sKTsKKyAgICAvKiBjb21wdXRlIGxvZyhheCkgKi8KKyAgICAgICAgczIgPSBzcypz
czsKKyAgICAgICAgciA9IHMyKnMyKihMMStzMiooTDIrczIqKEwzK3MyKihMNCtzMiooTDUrczIq
TDYpKSkpKTsKKyAgICAgICAgciArPSBzX2wqKHNfaCtzcyk7CisgICAgICAgIHMyICA9IHNfaCpz
X2g7CisgICAgICAgIHRfaCA9IDMuMCtzMityOworICAgICAgICBfX0xPKHRfaCkgPSAwOworICAg
ICAgICB0X2wgPSByLSgodF9oLTMuMCktczIpOworICAgIC8qIHUrdiA9IHNzKigxKy4uLikgKi8K
KyAgICAgICAgdSA9IHNfaCp0X2g7CisgICAgICAgIHYgPSBzX2wqdF9oK3RfbCpzczsKKyAgICAv
KiAyLygzbG9nMikqKHNzKy4uLikgKi8KKyAgICAgICAgcF9oID0gdSt2OworICAgICAgICBfX0xP
KHBfaCkgPSAwOworICAgICAgICBwX2wgPSB2LShwX2gtdSk7CisgICAgICAgIHpfaCA9IGNwX2gq
cF9oOyAgICAgICAgLyogY3BfaCtjcF9sID0gMi8oMypsb2cyKSAqLworICAgICAgICB6X2wgPSBj
cF9sKnBfaCtwX2wqY3ArZHBfbFtrXTsKKyAgICAvKiBsb2cyKGF4KSA9IChzcysuLikqMi8oMyps
b2cyKSA9IG4gKyBkcF9oICsgel9oICsgel9sICovCisgICAgICAgIHQgPSAoZG91YmxlKW47Cisg
ICAgICAgIHQxID0gKCgoel9oK3pfbCkrZHBfaFtrXSkrdCk7CisgICAgICAgIF9fTE8odDEpID0g
MDsKKyAgICAgICAgdDIgPSB6X2wtKCgodDEtdCktZHBfaFtrXSktel9oKTsKKyAgICB9CisKKyAg
ICAvKiBzcGxpdCB1cCB5IGludG8geTEreTIgYW5kIGNvbXB1dGUgKHkxK3kyKSoodDErdDIpICov
CisgICAgeTEgID0geTsKKyAgICBfX0xPKHkxKSA9IDA7CisgICAgcF9sID0gKHkteTEpKnQxK3kq
dDI7CisgICAgcF9oID0geTEqdDE7CisgICAgeiA9IHBfbCtwX2g7CisgICAgaiA9IF9fSEkoeik7
CisgICAgaSA9IF9fTE8oeik7CisgICAgaWYgKGo+PTB4NDA5MDAwMDApIHsgICAgICAgICAgICAg
ICAgLyogeiA+PSAxMDI0ICovCisgICAgICAgIGlmKCgoai0weDQwOTAwMDAwKXxpKSE9MCkgICAg
ICAgICAgICAvKiBpZiB6ID4gMTAyNCAqLworICAgICAgICByZXR1cm4gcypodWdlKmh1Z2U7ICAg
ICAgICAgICAgLyogb3ZlcmZsb3cgKi8KKyAgICAgICAgZWxzZSB7CisgICAgICAgIGlmKHBfbCtv
dnQ+ei1wX2gpIHJldHVybiBzKmh1Z2UqaHVnZTsgICAgLyogb3ZlcmZsb3cgKi8KKyAgICAgICAg
fQorICAgIH0gZWxzZSBpZigoaiYweDdmZmZmZmZmKT49MHg0MDkwY2MwMCApIHsgICAgLyogeiA8
PSAtMTA3NSAqLworICAgICAgICBpZigoKGotMHhjMDkwY2MwMCl8aSkhPTApICAgICAgICAgLyog
eiA8IC0xMDc1ICovCisgICAgICAgIHJldHVybiBzKnRpbnkqdGlueTsgICAgICAgIC8qIHVuZGVy
ZmxvdyAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgaWYocF9sPD16LXBfaCkgcmV0dXJuIHMq
dGlueSp0aW55OyAgICAvKiB1bmRlcmZsb3cgKi8KKyAgICAgICAgfQorICAgIH0KKyAgICAvKgor
ICAgICAqIGNvbXB1dGUgMioqKHBfaCtwX2wpCisgICAgICovCisgICAgaSA9IGomMHg3ZmZmZmZm
ZjsKKyAgICBrID0gKGk+PjIwKS0weDNmZjsKKyAgICBuID0gMDsKKyAgICBpZihpPjB4M2ZlMDAw
MDApIHsgICAgICAgIC8qIGlmIHx6fCA+IDAuNSwgc2V0IG4gPSBbeiswLjVdICovCisgICAgICAg
IG4gPSBqKygweDAwMTAwMDAwPj4oaysxKSk7CisgICAgICAgIGsgPSAoKG4mMHg3ZmZmZmZmZik+
PjIwKS0weDNmZjsgICAgLyogbmV3IGsgZm9yIG4gKi8KKyAgICAgICAgdCA9IHplcm87CisgICAg
ICAgIF9fSEkodCkgPSAobiZ+KDB4MDAwZmZmZmY+PmspKTsKKyAgICAgICAgbiA9ICgobiYweDAw
MGZmZmZmKXwweDAwMTAwMDAwKT4+KDIwLWspOworICAgICAgICBpZihqPDApIG4gPSAtbjsKKyAg
ICAgICAgcF9oIC09IHQ7CisgICAgfSAKKyAgICB0ID0gcF9sK3BfaDsKKyAgICBfX0xPKHQpID0g
MDsKKyAgICB1ID0gdCpsZzJfaDsKKyAgICB2ID0gKHBfbC0odC1wX2gpKSpsZzIrdCpsZzJfbDsK
KyAgICB6ID0gdSt2OworICAgIHcgPSB2LSh6LXUpOworICAgIHQgID0geip6OworICAgIHQxICA9
IHogLSB0KihQMSt0KihQMit0KihQMyt0KihQNCt0KlA1KSkpKTsKKyAgICByICA9ICh6KnQxKS8o
dDEtdHdvKS0odyt6KncpOworICAgIHogID0gb25lLShyLXopOworICAgIGogID0gX19ISSh6KTsK
KyAgICBqICs9IChuPDwyMCk7CisgICAgaWYoKGo+PjIwKTw9MCkgeiA9IGZkbGlibVNjYWxibih6
LG4pOyAgICAvKiBzdWJub3JtYWwgb3V0cHV0ICovCisgICAgZWxzZSBfX0hJKHopICs9IChuPDwy
MCk7CisgICAgcmV0dXJuIHMqejsKK30KKworc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Rl
bm9ybWFsKGRvdWJsZSB4KQoreworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBzaWduYml0ID0g
MHg4MDAwMDAwMDAwMDAwMDAwVUxMOworICAgIHN0YXRpYyBjb25zdCB1aW50NjRfdCBtaW5Ob3Jt
YWwgPSAweDAwMDEwMDAwMDAwMDAwMDBVTEw7CisgICAgcmV0dXJuIChiaXR3aXNlX2Nhc3Q8dWlu
dDY0X3Q+KHgpICYgfnNpZ25iaXQpIC0gMSA8IG1pbk5vcm1hbCAtIDE7Cit9CisKK3N0YXRpYyBB
TFdBWVNfSU5MSU5FIGJvb2wgaXNFZGdlQ2FzZShkb3VibGUgeCkKK3sKKyAgICBzdGF0aWMgY29u
c3QgdWludDY0X3Qgc2lnbmJpdCA9IDB4ODAwMDAwMDAwMDAwMDAwMFVMTDsKKyAgICBzdGF0aWMg
Y29uc3QgdWludDY0X3QgaW5maW5pdHkgPSAweDdmZmZmZmZmZmZmZmZmZmZVTEw7CisgICAgcmV0
dXJuIChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpICYgfnNpZ25iaXQpIC0gMSA+PSBpbmZpbml0
eSAtIDE7Cit9CisKK3N0YXRpYyBBTFdBWVNfSU5MSU5FIGRvdWJsZSBtYXRoUG93SW50ZXJuYWwo
ZG91YmxlIHgsIGRvdWJsZSB5KQoreworICAgIGlmICghaXNEZW5vcm1hbCh4KSAmJiAhaXNEZW5v
cm1hbCh5KSkgeworICAgICAgICBkb3VibGUgbGlibVJlc3VsdCA9IHBvdyh4LCB5KTsKKyAgICAg
ICAgaWYgKGxpYm1SZXN1bHQgfHwgaXNFZGdlQ2FzZSh4KSB8fCBpc0VkZ2VDYXNlKHkpKQorICAg
ICAgICAgICAgcmV0dXJuIGxpYm1SZXN1bHQ7CisgICAgfQorICAgIHJldHVybiBmZGxpYm1Qb3co
eCwgeSk7Cit9CisKKyNlbHNlCisKK0FMV0FZU19JTkxJTkUgZG91YmxlIG1hdGhQb3dJbnRlcm5h
bChkb3VibGUgeCwgZG91YmxlIHkpCit7CisgICAgcmV0dXJuIHBvdyh4LCB5KTsKK30KKworI2Vu
ZGlmCisKK2RvdWJsZSBKU0NfSE9TVF9DQUxMIG9wZXJhdGlvbk1hdGhQb3coZG91YmxlIHgsIGRv
dWJsZSB5KQoreworICAgIGlmIChzdGQ6OmlzbmFuKHkpKQorICAgICAgICByZXR1cm4gUE5hTjsK
KyAgICBpZiAoc3RkOjppc2luZih5KSAmJiBmYWJzKHgpID09IDEpCisgICAgICAgIHJldHVybiBQ
TmFOOworICAgIHJldHVybiBtYXRoUG93SW50ZXJuYWwoeCwgeSk7Cit9CisKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25QdXRCeUluZGV4KEV4ZWNTdGF0ZSogZXhlYywgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZEFycmF5VmFsdWUsIGludDMyX3QgaW5kZXgsIEVuY29kZWRKU1ZhbHVlIGVuY29k
ZWRWYWx1ZSkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAppbmRleCA3NjdlYTViYjU1MjdkZWM3ZGQ1ZTEwZDdjY2Zk
MmQ2Mjk3NTE5M2EzLi5kNGVjNmExYTNmMjdhMWU2OGFmMzJkMGFlMzE2NWRhZTEyN2JlYjEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaApAQCAtMjgxLDYgKzI4
MSw3IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25EZWJ1ZyhFeGVjU3RhdGUqLCBpbnQz
Ml90KSBXVEZfSU5URVJOQUw7CiAjaWYgRU5BQkxFKERGR19KSVQpCiBTbG93UGF0aFJldHVyblR5
cGUgSklUX09QRVJBVElPTiBvcGVyYXRpb25PcHRpbWl6ZShFeGVjU3RhdGUqLCBpbnQzMl90KSBX
VEZfSU5URVJOQUw7CiAjZW5kaWYKK2RvdWJsZSBKU0NfSE9TVF9DQUxMIG9wZXJhdGlvbk1hdGhQ
b3coZG91YmxlIHgsIGRvdWJsZSB5KSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0QnlJbmRleChFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwg
RW5jb2RlZEpTVmFsdWUpOwogI2lmIFVTRShKU1ZBTFVFNjQpCiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBJZGVu
dGlmaWVyKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlKSBXVEZfSU5URVJOQUw7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9NYXRoT2JqZWN0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL01hdGhPYmplY3QuY3BwCmluZGV4IDY0YTVh
N2E2ZGQ3ZmNjMWEyMTZlNjMxODFlMTQxNzE3ZGY2MDNkNGIuLjAzOGQ1NTNhYTUxMzkwNzQwYmY3
MmUwOTBiYjI4MDAyMTI4ZmEwYTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL01hdGhPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L01hdGhPYmplY3QuY3BwCkBAIC0yMSw2ICsyMSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAj
aW5jbHVkZSAiTWF0aE9iamVjdC5oIgogCisjaW5jbHVkZSAiSklUT3BlcmF0aW9ucy5oIgogI2lu
Y2x1ZGUgIkxvb2t1cC5oIgogI2luY2x1ZGUgIk9iamVjdFByb3RvdHlwZS5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKQEAgLTI0Miw0MyArMjQzLDYgQEAgRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCBtYXRoUHJvdG9GdW5jTWluKEV4ZWNTdGF0ZSogZXhlYykKICAgICByZXR1cm4gSlNW
YWx1ZTo6ZW5jb2RlKGpzTnVtYmVyKHJlc3VsdCkpOwogfQogCi0jaWYgUExBVEZPUk0oSU9TKSAm
JiBDUFUoQVJNX1RIVU1CMikKLQotc3RhdGljIGRvdWJsZSBmZGxpYm1Qb3coZG91YmxlIHgsIGRv
dWJsZSB5KTsKLQotc3RhdGljIEFMV0FZU19JTkxJTkUgYm9vbCBpc0Rlbm9ybWFsKGRvdWJsZSB4
KQotewotICAgICAgICBzdGF0aWMgY29uc3QgdWludDY0X3Qgc2lnbmJpdCA9IDB4ODAwMDAwMDAw
MDAwMDAwMFVMTDsKLSAgICAgICAgc3RhdGljIGNvbnN0IHVpbnQ2NF90IG1pbk5vcm1hbCA9IDB4
MDAwMTAwMDAwMDAwMDAwMFVMTDsKLSAgICAgICAgcmV0dXJuIChiaXR3aXNlX2Nhc3Q8dWludDY0
X3Q+KHgpICYgfnNpZ25iaXQpIC0gMSA8IG1pbk5vcm1hbCAtIDE7Ci19Ci0KLXN0YXRpYyBBTFdB
WVNfSU5MSU5FIGJvb2wgaXNFZGdlQ2FzZShkb3VibGUgeCkKLXsKLSAgICAgICAgc3RhdGljIGNv
bnN0IHVpbnQ2NF90IHNpZ25iaXQgPSAweDgwMDAwMDAwMDAwMDAwMDBVTEw7Ci0gICAgICAgIHN0
YXRpYyBjb25zdCB1aW50NjRfdCBpbmZpbml0eSA9IDB4N2ZmZmZmZmZmZmZmZmZmZlVMTDsKLSAg
ICAgICAgcmV0dXJuIChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHgpICYgfnNpZ25iaXQpIC0gMSA+
PSBpbmZpbml0eSAtIDE7Ci19Ci0KLXN0YXRpYyBBTFdBWVNfSU5MSU5FIGRvdWJsZSBtYXRoUG93
KGRvdWJsZSB4LCBkb3VibGUgeSkKLXsKLSAgICBpZiAoIWlzRGVub3JtYWwoeCkgJiYgIWlzRGVu
b3JtYWwoeSkpIHsKLSAgICAgICAgZG91YmxlIGxpYm1SZXN1bHQgPSBwb3coeCx5KTsKLSAgICAg
ICAgaWYgKGxpYm1SZXN1bHQgfHwgaXNFZGdlQ2FzZSh4KSB8fCBpc0VkZ2VDYXNlKHkpKQotICAg
ICAgICAgICAgcmV0dXJuIGxpYm1SZXN1bHQ7Ci0gICAgfQotICAgIHJldHVybiBmZGxpYm1Qb3co
eCx5KTsKLX0KLQotI2Vsc2UKLQotQUxXQVlTX0lOTElORSBkb3VibGUgbWF0aFBvdyhkb3VibGUg
eCwgZG91YmxlIHkpCi17Ci0gICAgcmV0dXJuIHBvdyh4LCB5KTsKLX0KLQotI2VuZGlmCi0KIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1BvdyhFeGVjU3RhdGUqIGV4
ZWMpCiB7CiAgICAgLy8gRUNNQSAxNS44LjIuMS4xMwpAQCAtMjg2LDExICsyNTAsNyBAQCBFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIG1hdGhQcm90b0Z1bmNQb3coRXhlY1N0YXRlKiBleGVj
KQogICAgIGRvdWJsZSBhcmcgPSBleGVjLT5hcmd1bWVudCgwKS50b051bWJlcihleGVjKTsKICAg
ICBkb3VibGUgYXJnMiA9IGV4ZWMtPmFyZ3VtZW50KDEpLnRvTnVtYmVyKGV4ZWMpOwogCi0gICAg
aWYgKHN0ZDo6aXNuYW4oYXJnMikpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNO
YU4oKSk7Ci0gICAgaWYgKHN0ZDo6aXNpbmYoYXJnMikgJiYgZmFicyhhcmcpID09IDEpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNOYU4oKSk7Ci0gICAgcmV0dXJuIEpTVmFsdWU6
OmVuY29kZShqc051bWJlcihtYXRoUG93KGFyZywgYXJnMikpKTsKKyAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKEpTVmFsdWUob3BlcmF0aW9uTWF0aFBvdyhhcmcsIGFyZzIpKSk7CiB9CiAKIEVu
Y29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgbWF0aFByb3RvRnVuY1JhbmRvbShFeGVjU3RhdGUq
IGV4ZWMpCkBAIC00MDcsMzU0ICszNjcsNCBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxM
IG1hdGhQcm90b0Z1bmNUcnVuYyhFeGVjU3RhdGUqZXhlYykKICAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKGpzTnVtYmVyKGV4ZWMtPmFyZ3VtZW50KDApLnRvSW50ZWdlclByZXNlcnZlTmFOKGV4
ZWMpKSk7CiB9CiAKLQotI2lmIFBMQVRGT1JNKElPUykgJiYgQ1BVKEFSTV9USFVNQjIpCi0KLS8v
IFRoZSBmb2xsb3dpbmcgY29kZSBpcyB0YWtlbiBmcm9tIG5ldGxpYi5vcmc6Ci0vLyAgIGh0dHA6
Ly93d3cubmV0bGliLm9yZy9mZGxpYm0vZmRsaWJtLmgKLS8vICAgaHR0cDovL3d3dy5uZXRsaWIu
b3JnL2ZkbGlibS9lX3Bvdy5jCi0vLyAgIGh0dHA6Ly93d3cubmV0bGliLm9yZy9mZGxpYm0vc19z
Y2FsYm4uYwotLy8KLS8vIEFuZCB3YXMgb3JpZ2luYWxseSBkaXN0cmlidXRlZCB1bmRlciB0aGUg
Zm9sbG93aW5nIGxpY2Vuc2U6Ci0KLS8qCi0gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0gKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1p
Y3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIERldmVsb3BlZCBh
dCBTdW5Tb2Z0LCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCi0gKiBQZXJtaXNz
aW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCi0gKiBzb2Z0d2Fy
ZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKLSAqIGlzIHBy
ZXNlcnZlZC4KLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLSAqLwotLyoKLSAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLSAqIENvcHlyaWdodCAoQykgMjAwNCBieSBTdW4gTWljcm9zeXN0
ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUGVybWlzc2lvbiB0byB1c2Us
IGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcwotICogc29mdHdhcmUgaXMgZnJlZWx5
IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgCi0gKiBpcyBwcmVzZXJ2ZWQuCi0g
KiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0g
Ki8KLQotLyogX19pZWVlNzU0X3Bvdyh4LHkpIHJldHVybiB4Kip5Ci0gKgotICogICAgICAgICAg
ICAgIG4KLSAqIE1ldGhvZDogIExldCB4ID0gIDIgICAqICgxK2YpCi0gKiAgICAxLiBDb21wdXRl
IGFuZCByZXR1cm4gbG9nMih4KSBpbiB0d28gcGllY2VzOgotICogICAgICAgIGxvZzIoeCkgPSB3
MSArIHcyLAotICogICAgICAgd2hlcmUgdzEgaGFzIDUzLTI0ID0gMjkgYml0IHRyYWlsaW5nIHpl
cm9zLgotICogICAgMi4gUGVyZm9ybSB5KmxvZzIoeCkgPSBuK3knIGJ5IHNpbXVsYXRpbmcgbXV0
aS1wcmVjaXNpb24gCi0gKiAgICAgICBhcml0aG1ldGljLCB3aGVyZSB8eSd8PD0wLjUuCi0gKiAg
ICAzLiBSZXR1cm4geCoqeSA9IDIqKm4qZXhwKHknKmxvZzIpCi0gKgotICogU3BlY2lhbCBjYXNl
czoKLSAqICAgIDEuICAoYW55dGhpbmcpICoqIDAgIGlzIDEKLSAqICAgIDIuICAoYW55dGhpbmcp
ICoqIDEgIGlzIGl0c2VsZgotICogICAgMy4gIChhbnl0aGluZykgKiogTkFOIGlzIE5BTgotICog
ICAgNC4gIE5BTiAqKiAoYW55dGhpbmcgZXhjZXB0IDApIGlzIE5BTgotICogICAgNS4gICstKHx4
fCA+IDEpICoqICArSU5GIGlzICtJTkYKLSAqICAgIDYuICArLSh8eHwgPiAxKSAqKiAgLUlORiBp
cyArMAotICogICAgNy4gICstKHx4fCA8IDEpICoqICArSU5GIGlzICswCi0gKiAgICA4LiAgKy0o
fHh8IDwgMSkgKiogIC1JTkYgaXMgK0lORgotICogICAgOS4gICstMSAgICAgICAgICoqICstSU5G
IGlzIE5BTgotICogICAgMTAuICswICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTikgICAgICAg
ICAgICAgICBpcyArMAotICogICAgMTEuIC0wICoqICgrYW55dGhpbmcgZXhjZXB0IDAsIE5BTiwg
b2RkIGludGVnZXIpICBpcyArMAotICogICAgMTIuICswICoqICgtYW55dGhpbmcgZXhjZXB0IDAs
IE5BTikgICAgICAgICAgICAgICBpcyArSU5GCi0gKiAgICAxMy4gLTAgKiogKC1hbnl0aGluZyBl
eGNlcHQgMCwgTkFOLCBvZGQgaW50ZWdlcikgIGlzICtJTkYKLSAqICAgIDE0LiAtMCAqKiAob2Rk
IGludGVnZXIpID0gLSggKzAgKiogKG9kZCBpbnRlZ2VyKSApCi0gKiAgICAxNS4gK0lORiAqKiAo
K2FueXRoaW5nIGV4Y2VwdCAwLE5BTikgaXMgK0lORgotICogICAgMTYuICtJTkYgKiogKC1hbnl0
aGluZyBleGNlcHQgMCxOQU4pIGlzICswCi0gKiAgICAxNy4gLUlORiAqKiAoYW55dGhpbmcpICA9
IC0wICoqICgtYW55dGhpbmcpCi0gKiAgICAxOC4gKC1hbnl0aGluZykgKiogKGludGVnZXIpIGlz
ICgtMSkqKihpbnRlZ2VyKSooK2FueXRoaW5nKippbnRlZ2VyKQotICogICAgMTkuICgtYW55dGhp
bmcgZXhjZXB0IDAgYW5kIGluZikgKiogKG5vbi1pbnRlZ2VyKSBpcyBOQU4KLSAqCi0gKiBBY2N1
cmFjeToKLSAqICAgIHBvdyh4LHkpIHJldHVybnMgeCoqeSBuZWFybHkgcm91bmRlZC4gSW4gcGFy
dGljdWxhcgotICogICAgICAgICAgICBwb3coaW50ZWdlcixpbnRlZ2VyKQotICogICAgYWx3YXlz
IHJldHVybnMgdGhlIGNvcnJlY3QgaW50ZWdlciBwcm92aWRlZCBpdCBpcyAKLSAqICAgIHJlcHJl
c2VudGFibGUuCi0gKgotICogQ29uc3RhbnRzIDoKLSAqIFRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMg
YXJlIHRoZSBpbnRlbmRlZCBvbmVzIGZvciB0aGUgZm9sbG93aW5nIAotICogY29uc3RhbnRzLiBU
aGUgZGVjaW1hbCB2YWx1ZXMgbWF5IGJlIHVzZWQsIHByb3ZpZGVkIHRoYXQgdGhlIAotICogY29t
cGlsZXIgd2lsbCBjb252ZXJ0IGZyb20gZGVjaW1hbCB0byBiaW5hcnkgYWNjdXJhdGVseSBlbm91
Z2ggCi0gKiB0byBwcm9kdWNlIHRoZSBoZXhhZGVjaW1hbCB2YWx1ZXMgc2hvd24uCi0gKi8KLQot
I2RlZmluZSBfX0hJKHgpICooMSsoaW50KikmeCkKLSNkZWZpbmUgX19MTyh4KSAqKGludCopJngK
LQotc3RhdGljIGNvbnN0IGRvdWJsZQotYnBbXSA9IHsxLjAsIDEuNSx9LAotZHBfaFtdID0geyAw
LjAsIDUuODQ5NjI0ODcyMjA3NjQxNjAxNTZlLTAxLH0sIC8qIDB4M0ZFMkI4MDMsIDB4NDAwMDAw
MDAgKi8KLWRwX2xbXSA9IHsgMC4wLCAxLjM1MDAzOTIwMjEyOTc0ODk3MTI4ZS0wOCx9LCAvKiAw
eDNFNENGREVCLCAweDQzQ0ZEMDA2ICovCi16ZXJvICAgID0gIDAuMCwKLW9uZSAgICA9ICAxLjAs
Ci10d28gICAgPSAgMi4wLAotdHdvNTMgICAgPSAgOTAwNzE5OTI1NDc0MDk5Mi4wLCAgICAvKiAw
eDQzNDAwMDAwLCAweDAwMDAwMDAwICovCi1odWdlICAgID0gIDEuMGUzMDAsCi10aW55ICAgID0g
IDEuMGUtMzAwLAotICAgICAgICAvKiBmb3Igc2NhbGJuICovCi10d281NCAgID0gIDEuODAxNDM5
ODUwOTQ4MTk4NDAwMDBlKzE2LCAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCi10d29tNTQg
ID0gIDUuNTUxMTE1MTIzMTI1NzgyNzAyMTJlLTE3LCAvKiAweDNDOTAwMDAwLCAweDAwMDAwMDAw
ICovCi0gICAgLyogcG9seSBjb2VmcyBmb3IgKDMvMikqKGxvZyh4KS0ycy0yLzMqcyoqMyAqLwot
TDEgID0gIDUuOTk5OTk5OTk5OTk5OTQ2NDg3MjVlLTAxLCAvKiAweDNGRTMzMzMzLCAweDMzMzMz
MzAzICovCi1MMiAgPSAgNC4yODU3MTQyODU3ODU1MDE4NDI1MmUtMDEsIC8qIDB4M0ZEQjZEQjYs
IDB4REI2RkFCRkYgKi8KLUwzICA9ICAzLjMzMzMzMzI5ODE4Mzc3NDMyOTE4ZS0wMSwgLyogMHgz
RkQ1NTU1NSwgMHg1MThGMjY0RCAqLwotTDQgID0gIDIuNzI3MjgxMjM4MDg1MzQwMDY0ODllLTAx
LCAvKiAweDNGRDE3NDYwLCAweEE5MUQ0MTAxICovCi1MNSAgPSAgMi4zMDY2MDc0NTc3NTU2MTc1
NDA2N2UtMDEsIC8qIDB4M0ZDRDg2NEEsIDB4OTNDOURCNjUgKi8KLUw2ICA9ICAyLjA2OTc1MDE3
ODAwMzM4NDE3Nzg0ZS0wMSwgLyogMHgzRkNBN0UyOCwgMHg0QTQ1NEVFRiAqLwotUDEgICA9ICAx
LjY2NjY2NjY2NjY2NjY2MDE5MDM3ZS0wMSwgLyogMHgzRkM1NTU1NSwgMHg1NTU1NTUzRSAqLwot
UDIgICA9IC0yLjc3Nzc3Nzc3NzcwMTU1OTMzODQyZS0wMywgLyogMHhCRjY2QzE2QywgMHgxNkJF
QkQ5MyAqLwotUDMgICA9ICA2LjYxMzc1NjMyMTQzNzkzNDM2MTE3ZS0wNSwgLyogMHgzRjExNTY2
QSwgMHhBRjI1REUyQyAqLwotUDQgICA9IC0xLjY1MzM5MDIyMDU0NjUyNTE1MzkwZS0wNiwgLyog
MHhCRUJCQkQ0MSwgMHhDNUQyNkJGMSAqLwotUDUgICA9ICA0LjEzODEzNjc5NzA1NzIzODQ2MDM5
ZS0wOCwgLyogMHgzRTY2Mzc2OSwgMHg3MkJFQTREMCAqLwotbGcyICA9ICA2LjkzMTQ3MTgwNTU5
OTQ1Mjg2MjI3ZS0wMSwgLyogMHgzRkU2MkU0MiwgMHhGRUZBMzlFRiAqLwotbGcyX2ggID0gIDYu
OTMxNDcxODI0NjQ1OTk2MDkzNzVlLTAxLCAvKiAweDNGRTYyRTQzLCAweDAwMDAwMDAwICovCi1s
ZzJfbCAgPSAtMS45MDQ2NTQyOTk5NTc3NjgwNDUyNWUtMDksIC8qIDB4QkUyMDVDNjEsIDB4MENB
ODZDMzkgKi8KLW92dCA9ICA4LjAwODU2NjI1OTUzNzI5NDQzNzJlLTAwMTcsIC8qIC0oMTAyNC1s
b2cyKG92ZmwrLjV1bHApKSAqLwotY3AgICAgPSAgOS42MTc5NjY5MzkyNTk3NTU1NDMyOWUtMDEs
IC8qIDB4M0ZFRUM3MDksIDB4REMzQTAzRkQgPTIvKDNsbjIpICovCi1jcF9oICA9ICA5LjYxNzk2
NzAwOTU0NDM3MjU1ODU5ZS0wMSwgLyogMHgzRkVFQzcwOSwgMHhFMDAwMDAwMCA9KGZsb2F0KWNw
ICovCi1jcF9sICA9IC03LjAyODQ2MTY1MDk1Mjc1ODI2NTE2ZS0wOSwgLyogMHhCRTNFMkZFMCwg
MHgxNDVCMDFGNSA9dGFpbCBvZiBjcF9oKi8KLWl2bG4yICAgID0gIDEuNDQyNjk1MDQwODg4OTYz
Mzg3MDBlKzAwLCAvKiAweDNGRjcxNTQ3LCAweDY1MkI4MkZFID0xL2xuMiAqLwotaXZsbjJfaCAg
PSAgMS40NDI2OTUwMjE2MjkzMzM0OTYwOWUrMDAsIC8qIDB4M0ZGNzE1NDcsIDB4NjAwMDAwMDAg
PTI0YiAxL2xuMiovCi1pdmxuMl9sICA9ICAxLjkyNTk2Mjk5MTEyNjYxNzQ2ODg3ZS0wODsgLyog
MHgzRTU0QUUwQiwgMHhGODVEREY0NCA9MS9sbjIgdGFpbCovCi0KLWlubGluZSBkb3VibGUgZmRs
aWJtU2NhbGJuIChkb3VibGUgeCwgaW50IG4pCi17Ci0gICAgaW50ICBrLGh4LGx4OwotICAgIGh4
ID0gX19ISSh4KTsKLSAgICBseCA9IF9fTE8oeCk7Ci0gICAgICAgIGsgPSAoaHgmMHg3ZmYwMDAw
MCk+PjIwOyAgICAgICAgLyogZXh0cmFjdCBleHBvbmVudCAqLwotICAgICAgICBpZiAoaz09MCkg
eyAgICAgICAgICAgICAgICAvKiAwIG9yIHN1Ym5vcm1hbCB4ICovCi0gICAgICAgICAgICBpZiAo
KGx4fChoeCYweDdmZmZmZmZmKSk9PTApIHJldHVybiB4OyAvKiArLTAgKi8KLSAgICAgICAgeCAq
PSB0d281NDsgCi0gICAgICAgIGh4ID0gX19ISSh4KTsKLSAgICAgICAgayA9ICgoaHgmMHg3ZmYw
MDAwMCk+PjIwKSAtIDU0OyAKLSAgICAgICAgICAgIGlmIChuPCAtNTAwMDApIHJldHVybiB0aW55
Kng7ICAgICAvKnVuZGVyZmxvdyovCi0gICAgICAgIH0KLSAgICAgICAgaWYgKGs9PTB4N2ZmKSBy
ZXR1cm4geCt4OyAgICAgICAgLyogTmFOIG9yIEluZiAqLwotICAgICAgICBrID0gaytuOyAKLSAg
ICAgICAgaWYgKGsgPiAgMHg3ZmUpIHJldHVybiBodWdlKmNvcHlzaWduKGh1Z2UseCk7IC8qIG92
ZXJmbG93ICAqLwotICAgICAgICBpZiAoayA+IDApICAgICAgICAgICAgICAgICAvKiBub3JtYWwg
cmVzdWx0ICovCi0gICAgICAgIHtfX0hJKHgpID0gKGh4JjB4ODAwZmZmZmYpfChrPDwyMCk7IHJl
dHVybiB4O30KLSAgICAgICAgaWYgKGsgPD0gLTU0KSB7Ci0gICAgICAgICAgICBpZiAobiA+IDUw
MDAwKSAgICAgLyogaW4gY2FzZSBpbnRlZ2VyIG92ZXJmbG93IGluIG4rayAqLwotICAgICAgICBy
ZXR1cm4gaHVnZSpjb3B5c2lnbihodWdlLHgpOyAgICAvKm92ZXJmbG93Ki8KLSAgICAgICAgZWxz
ZSByZXR1cm4gdGlueSpjb3B5c2lnbih0aW55LHgpOyAgICAgLyp1bmRlcmZsb3cqLwotICAgICAg
ICB9Ci0gICAgICAgIGsgKz0gNTQ7ICAgICAgICAgICAgICAgIC8qIHN1Ym5vcm1hbCByZXN1bHQg
Ki8KLSAgICAgICAgX19ISSh4KSA9IChoeCYweDgwMGZmZmZmKXwoazw8MjApOwotICAgICAgICBy
ZXR1cm4geCp0d29tNTQ7Ci19Ci0KLWRvdWJsZSBmZGxpYm1Qb3coZG91YmxlIHgsIGRvdWJsZSB5
KQotewotICAgIGRvdWJsZSB6LGF4LHpfaCx6X2wscF9oLHBfbDsKLSAgICBkb3VibGUgeTEsdDEs
dDIscixzLHQsdSx2LHc7Ci0gICAgaW50IGkwLGkxLGksaixrLHlpc2ludCxuOwotICAgIGludCBo
eCxoeSxpeCxpeTsKLSAgICB1bnNpZ25lZCBseCxseTsKLQotICAgIGkwID0gKCgqKGludCopJm9u
ZSk+PjI5KV4xOyBpMT0xLWkwOwotICAgIGh4ID0gX19ISSh4KTsgbHggPSBfX0xPKHgpOwotICAg
IGh5ID0gX19ISSh5KTsgbHkgPSBfX0xPKHkpOwotICAgIGl4ID0gaHgmMHg3ZmZmZmZmZjsgIGl5
ID0gaHkmMHg3ZmZmZmZmZjsKLQotICAgIC8qIHk9PXplcm86IHgqKjAgPSAxICovCi0gICAgaWYo
KGl5fGx5KT09MCkgcmV0dXJuIG9uZTsgICAgIAotCi0gICAgLyogKy1OYU4gcmV0dXJuIHgreSAq
LwotICAgIGlmKGl4ID4gMHg3ZmYwMDAwMCB8fCAoKGl4PT0weDdmZjAwMDAwKSYmKGx4IT0wKSkg
fHwKLSAgICAgICBpeSA+IDB4N2ZmMDAwMDAgfHwgKChpeT09MHg3ZmYwMDAwMCkmJihseSE9MCkp
KSAKLSAgICAgICAgcmV0dXJuIHgreTsgICAgCi0KLSAgICAvKiBkZXRlcm1pbmUgaWYgeSBpcyBh
biBvZGQgaW50IHdoZW4geCA8IDAKLSAgICAgKiB5aXNpbnQgPSAwICAgIC4uLiB5IGlzIG5vdCBh
biBpbnRlZ2VyCi0gICAgICogeWlzaW50ID0gMSAgICAuLi4geSBpcyBhbiBvZGQgaW50Ci0gICAg
ICogeWlzaW50ID0gMiAgICAuLi4geSBpcyBhbiBldmVuIGludAotICAgICAqLwotICAgIHlpc2lu
dCAgPSAwOwotICAgIGlmKGh4PDApIHsgICAgCi0gICAgICAgIGlmKGl5Pj0weDQzNDAwMDAwKSB5
aXNpbnQgPSAyOyAvKiBldmVuIGludGVnZXIgeSAqLwotICAgICAgICBlbHNlIGlmKGl5Pj0weDNm
ZjAwMDAwKSB7Ci0gICAgICAgIGsgPSAoaXk+PjIwKS0weDNmZjsgICAgICAgLyogZXhwb25lbnQg
Ki8KLSAgICAgICAgaWYoaz4yMCkgewotICAgICAgICAgICAgaiA9IGx5Pj4oNTItayk7Ci0gICAg
ICAgICAgICBpZihzdGF0aWNfY2FzdDx1bnNpZ25lZD4oajw8KDUyLWspKT09bHkpIHlpc2ludCA9
IDItKGomMSk7Ci0gICAgICAgIH0gZWxzZSBpZihseT09MCkgewotICAgICAgICAgICAgaiA9IGl5
Pj4oMjAtayk7Ci0gICAgICAgICAgICBpZigoajw8KDIwLWspKT09aXkpIHlpc2ludCA9IDItKGom
MSk7Ci0gICAgICAgIH0KLSAgICAgICAgfSAgICAgICAgCi0gICAgfSAKLQotICAgIC8qIHNwZWNp
YWwgdmFsdWUgb2YgeSAqLwotICAgIGlmKGx5PT0wKSB7ICAgICAKLSAgICAgICAgaWYgKGl5PT0w
eDdmZjAwMDAwKSB7ICAgIC8qIHkgaXMgKy1pbmYgKi8KLSAgICAgICAgICAgIGlmKCgoaXgtMHgz
ZmYwMDAwMCl8bHgpPT0wKQotICAgICAgICAgICAgcmV0dXJuICB5IC0geTsgICAgLyogaW5mKior
LTEgaXMgTmFOICovCi0gICAgICAgICAgICBlbHNlIGlmIChpeCA+PSAweDNmZjAwMDAwKS8qICh8
eHw+MSkqKistaW5mID0gaW5mLDAgKi8KLSAgICAgICAgICAgIHJldHVybiAoaHk+PTApPyB5OiB6
ZXJvOwotICAgICAgICAgICAgZWxzZSAgICAgICAgICAgIC8qICh8eHw8MSkqKi0sK2luZiA9IGlu
ZiwwICovCi0gICAgICAgICAgICByZXR1cm4gKGh5PDApPy15OiB6ZXJvOwotICAgICAgICB9IAot
ICAgICAgICBpZihpeT09MHgzZmYwMDAwMCkgeyAgICAvKiB5IGlzICArLTEgKi8KLSAgICAgICAg
aWYoaHk8MCkgcmV0dXJuIG9uZS94OyBlbHNlIHJldHVybiB4OwotICAgICAgICB9Ci0gICAgICAg
IGlmKGh5PT0weDQwMDAwMDAwKSByZXR1cm4geCp4OyAvKiB5IGlzICAyICovCi0gICAgICAgIGlm
KGh5PT0weDNmZTAwMDAwKSB7ICAgIC8qIHkgaXMgIDAuNSAqLwotICAgICAgICBpZihoeD49MCkg
ICAgLyogeCA+PSArMCAqLwotICAgICAgICByZXR1cm4gc3FydCh4KTsgICAgCi0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBheCAgID0gZmFicyh4KTsKLSAgICAvKiBzcGVjaWFsIHZhbHVlIG9mIHgg
Ki8KLSAgICBpZihseD09MCkgewotICAgICAgICBpZihpeD09MHg3ZmYwMDAwMHx8aXg9PTB8fGl4
PT0weDNmZjAwMDAwKXsKLSAgICAgICAgeiA9IGF4OyAgICAgICAgICAgIC8qeCBpcyArLTAsKy1p
bmYsKy0xKi8KLSAgICAgICAgaWYoaHk8MCkgeiA9IG9uZS96OyAgICAvKiB6ID0gKDEvfHh8KSAq
LwotICAgICAgICBpZihoeDwwKSB7Ci0gICAgICAgICAgICBpZigoKGl4LTB4M2ZmMDAwMDApfHlp
c2ludCk9PTApIHsKLSAgICAgICAgICAgIHogPSAoei16KS8oei16KTsgLyogKC0xKSoqbm9uLWlu
dCBpcyBOYU4gKi8KLSAgICAgICAgICAgIH0gZWxzZSBpZih5aXNpbnQ9PTEpIAotICAgICAgICAg
ICAgeiA9IC16OyAgICAgICAgLyogKHg8MCkqKm9kZCA9IC0ofHh8KipvZGQpICovCi0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIHo7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgbiA9ICho
eD4+MzEpKzE7Ci0KLSAgICAvKiAoeDwwKSoqKG5vbi1pbnQpIGlzIE5hTiAqLwotICAgIGlmKChu
fHlpc2ludCk9PTApIHJldHVybiAoeC14KS8oeC14KTsKLQotICAgIHMgPSBvbmU7IC8qIHMgKHNp
Z24gb2YgcmVzdWx0IC12ZSoqb2RkKSA9IC0xIGVsc2UgPSAxICovCi0gICAgaWYoKG58KHlpc2lu
dC0xKSk9PTApIHMgPSAtb25lOy8qICgtdmUpKioob2RkIGludCkgKi8KLQotICAgIC8qIHx5fCBp
cyBodWdlICovCi0gICAgaWYoaXk+MHg0MWUwMDAwMCkgeyAvKiBpZiB8eXwgPiAyKiozMSAqLwot
ICAgICAgICBpZihpeT4weDQzZjAwMDAwKXsgICAgLyogaWYgfHl8ID4gMioqNjQsIG11c3Qgby91
ZmxvdyAqLwotICAgICAgICBpZihpeDw9MHgzZmVmZmZmZikgcmV0dXJuIChoeTwwKT8gaHVnZSpo
dWdlOnRpbnkqdGlueTsKLSAgICAgICAgaWYoaXg+PTB4M2ZmMDAwMDApIHJldHVybiAoaHk+MCk/
IGh1Z2UqaHVnZTp0aW55KnRpbnk7Ci0gICAgICAgIH0KLSAgICAvKiBvdmVyL3VuZGVyZmxvdyBp
ZiB4IGlzIG5vdCBjbG9zZSB0byBvbmUgKi8KLSAgICAgICAgaWYoaXg8MHgzZmVmZmZmZikgcmV0
dXJuIChoeTwwKT8gcypodWdlKmh1Z2U6cyp0aW55KnRpbnk7Ci0gICAgICAgIGlmKGl4PjB4M2Zm
MDAwMDApIHJldHVybiAoaHk+MCk/IHMqaHVnZSpodWdlOnMqdGlueSp0aW55OwotICAgIC8qIG5v
dyB8MS14fCBpcyB0aW55IDw9IDIqKi0yMCwgc3VmZmljZSB0byBjb21wdXRlIAotICAgICAgIGxv
Zyh4KSBieSB4LXheMi8yK3heMy8zLXheNC80ICovCi0gICAgICAgIHQgPSBheC1vbmU7ICAgICAg
ICAvKiB0IGhhcyAyMCB0cmFpbGluZyB6ZXJvcyAqLwotICAgICAgICB3ID0gKHQqdCkqKDAuNS10
KigwLjMzMzMzMzMzMzMzMzMzMzMzMzMzMzMtdCowLjI1KSk7Ci0gICAgICAgIHUgPSBpdmxuMl9o
KnQ7ICAgIC8qIGl2bG4yX2ggaGFzIDIxIHNpZy4gYml0cyAqLwotICAgICAgICB2ID0gdCppdmxu
Ml9sLXcqaXZsbjI7Ci0gICAgICAgIHQxID0gdSt2OwotICAgICAgICBfX0xPKHQxKSA9IDA7Ci0g
ICAgICAgIHQyID0gdi0odDEtdSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG91YmxlIHNzLHMy
LHNfaCxzX2wsdF9oLHRfbDsKLSAgICAgICAgbiA9IDA7Ci0gICAgLyogdGFrZSBjYXJlIHN1Ym5v
cm1hbCBudW1iZXIgKi8KLSAgICAgICAgaWYoaXg8MHgwMDEwMDAwMCkKLSAgICAgICAge2F4ICo9
IHR3bzUzOyBuIC09IDUzOyBpeCA9IF9fSEkoYXgpOyB9Ci0gICAgICAgIG4gICs9ICgoaXgpPj4y
MCktMHgzZmY7Ci0gICAgICAgIGogID0gaXgmMHgwMDBmZmZmZjsKLSAgICAvKiBkZXRlcm1pbmUg
aW50ZXJ2YWwgKi8KLSAgICAgICAgaXggPSBqfDB4M2ZmMDAwMDA7ICAgICAgICAvKiBub3JtYWxp
emUgaXggKi8KLSAgICAgICAgaWYoajw9MHgzOTg4RSkgaz0wOyAgICAgICAgLyogfHh8PHNxcnQo
My8yKSAqLwotICAgICAgICBlbHNlIGlmKGo8MHhCQjY3QSkgaz0xOyAgICAvKiB8eHw8c3FydCgz
KSAgICovCi0gICAgICAgIGVsc2Uge2s9MDtuKz0xO2l4IC09IDB4MDAxMDAwMDA7fQotICAgICAg
ICBfX0hJKGF4KSA9IGl4OwotCi0gICAgLyogY29tcHV0ZSBzcyA9IHNfaCtzX2wgPSAoeC0xKS8o
eCsxKSBvciAoeC0xLjUpLyh4KzEuNSkgKi8KLSAgICAgICAgdSA9IGF4LWJwW2tdOyAgICAgICAg
LyogYnBbMF09MS4wLCBicFsxXT0xLjUgKi8KLSAgICAgICAgdiA9IG9uZS8oYXgrYnBba10pOwot
ICAgICAgICBzcyA9IHUqdjsKLSAgICAgICAgc19oID0gc3M7Ci0gICAgICAgIF9fTE8oc19oKSA9
IDA7Ci0gICAgLyogdF9oPWF4K2JwW2tdIEhpZ2ggKi8KLSAgICAgICAgdF9oID0gemVybzsKLSAg
ICAgICAgX19ISSh0X2gpPSgoaXg+PjEpfDB4MjAwMDAwMDApKzB4MDAwODAwMDArKGs8PDE4KTsg
Ci0gICAgICAgIHRfbCA9IGF4IC0gKHRfaC1icFtrXSk7Ci0gICAgICAgIHNfbCA9IHYqKCh1LXNf
aCp0X2gpLXNfaCp0X2wpOwotICAgIC8qIGNvbXB1dGUgbG9nKGF4KSAqLwotICAgICAgICBzMiA9
IHNzKnNzOwotICAgICAgICByID0gczIqczIqKEwxK3MyKihMMitzMiooTDMrczIqKEw0K3MyKihM
NStzMipMNikpKSkpOwotICAgICAgICByICs9IHNfbCooc19oK3NzKTsKLSAgICAgICAgczIgID0g
c19oKnNfaDsKLSAgICAgICAgdF9oID0gMy4wK3MyK3I7Ci0gICAgICAgIF9fTE8odF9oKSA9IDA7
Ci0gICAgICAgIHRfbCA9IHItKCh0X2gtMy4wKS1zMik7Ci0gICAgLyogdSt2ID0gc3MqKDErLi4u
KSAqLwotICAgICAgICB1ID0gc19oKnRfaDsKLSAgICAgICAgdiA9IHNfbCp0X2grdF9sKnNzOwot
ICAgIC8qIDIvKDNsb2cyKSooc3MrLi4uKSAqLwotICAgICAgICBwX2ggPSB1K3Y7Ci0gICAgICAg
IF9fTE8ocF9oKSA9IDA7Ci0gICAgICAgIHBfbCA9IHYtKHBfaC11KTsKLSAgICAgICAgel9oID0g
Y3BfaCpwX2g7ICAgICAgICAvKiBjcF9oK2NwX2wgPSAyLygzKmxvZzIpICovCi0gICAgICAgIHpf
bCA9IGNwX2wqcF9oK3BfbCpjcCtkcF9sW2tdOwotICAgIC8qIGxvZzIoYXgpID0gKHNzKy4uKSoy
LygzKmxvZzIpID0gbiArIGRwX2ggKyB6X2ggKyB6X2wgKi8KLSAgICAgICAgdCA9IChkb3VibGUp
bjsKLSAgICAgICAgdDEgPSAoKCh6X2grel9sKStkcF9oW2tdKSt0KTsKLSAgICAgICAgX19MTyh0
MSkgPSAwOwotICAgICAgICB0MiA9IHpfbC0oKCh0MS10KS1kcF9oW2tdKS16X2gpOwotICAgIH0K
LQotICAgIC8qIHNwbGl0IHVwIHkgaW50byB5MSt5MiBhbmQgY29tcHV0ZSAoeTEreTIpKih0MSt0
MikgKi8KLSAgICB5MSAgPSB5OwotICAgIF9fTE8oeTEpID0gMDsKLSAgICBwX2wgPSAoeS15MSkq
dDEreSp0MjsKLSAgICBwX2ggPSB5MSp0MTsKLSAgICB6ID0gcF9sK3BfaDsKLSAgICBqID0gX19I
SSh6KTsKLSAgICBpID0gX19MTyh6KTsKLSAgICBpZiAoaj49MHg0MDkwMDAwMCkgeyAgICAgICAg
ICAgICAgICAvKiB6ID49IDEwMjQgKi8KLSAgICAgICAgaWYoKChqLTB4NDA5MDAwMDApfGkpIT0w
KSAgICAgICAgICAgIC8qIGlmIHogPiAxMDI0ICovCi0gICAgICAgIHJldHVybiBzKmh1Z2UqaHVn
ZTsgICAgICAgICAgICAvKiBvdmVyZmxvdyAqLwotICAgICAgICBlbHNlIHsKLSAgICAgICAgaWYo
cF9sK292dD56LXBfaCkgcmV0dXJuIHMqaHVnZSpodWdlOyAgICAvKiBvdmVyZmxvdyAqLwotICAg
ICAgICB9Ci0gICAgfSBlbHNlIGlmKChqJjB4N2ZmZmZmZmYpPj0weDQwOTBjYzAwICkgeyAgICAv
KiB6IDw9IC0xMDc1ICovCi0gICAgICAgIGlmKCgoai0weGMwOTBjYzAwKXxpKSE9MCkgICAgICAg
ICAvKiB6IDwgLTEwNzUgKi8KLSAgICAgICAgcmV0dXJuIHMqdGlueSp0aW55OyAgICAgICAgLyog
dW5kZXJmbG93ICovCi0gICAgICAgIGVsc2UgewotICAgICAgICBpZihwX2w8PXotcF9oKSByZXR1
cm4gcyp0aW55KnRpbnk7ICAgIC8qIHVuZGVyZmxvdyAqLwotICAgICAgICB9Ci0gICAgfQotICAg
IC8qCi0gICAgICogY29tcHV0ZSAyKioocF9oK3BfbCkKLSAgICAgKi8KLSAgICBpID0gaiYweDdm
ZmZmZmZmOwotICAgIGsgPSAoaT4+MjApLTB4M2ZmOwotICAgIG4gPSAwOwotICAgIGlmKGk+MHgz
ZmUwMDAwMCkgeyAgICAgICAgLyogaWYgfHp8ID4gMC41LCBzZXQgbiA9IFt6KzAuNV0gKi8KLSAg
ICAgICAgbiA9IGorKDB4MDAxMDAwMDA+PihrKzEpKTsKLSAgICAgICAgayA9ICgobiYweDdmZmZm
ZmZmKT4+MjApLTB4M2ZmOyAgICAvKiBuZXcgayBmb3IgbiAqLwotICAgICAgICB0ID0gemVybzsK
LSAgICAgICAgX19ISSh0KSA9IChuJn4oMHgwMDBmZmZmZj4+aykpOwotICAgICAgICBuID0gKChu
JjB4MDAwZmZmZmYpfDB4MDAxMDAwMDApPj4oMjAtayk7Ci0gICAgICAgIGlmKGo8MCkgbiA9IC1u
OwotICAgICAgICBwX2ggLT0gdDsKLSAgICB9IAotICAgIHQgPSBwX2wrcF9oOwotICAgIF9fTE8o
dCkgPSAwOwotICAgIHUgPSB0KmxnMl9oOwotICAgIHYgPSAocF9sLSh0LXBfaCkpKmxnMit0Kmxn
Ml9sOwotICAgIHogPSB1K3Y7Ci0gICAgdyA9IHYtKHotdSk7Ci0gICAgdCAgPSB6Kno7Ci0gICAg
dDEgID0geiAtIHQqKFAxK3QqKFAyK3QqKFAzK3QqKFA0K3QqUDUpKSkpOwotICAgIHIgID0gKHoq
dDEpLyh0MS10d28pLSh3K3oqdyk7Ci0gICAgeiAgPSBvbmUtKHIteik7Ci0gICAgaiAgPSBfX0hJ
KHopOwotICAgIGogKz0gKG48PDIwKTsKLSAgICBpZigoaj4+MjApPD0wKSB6ID0gZmRsaWJtU2Nh
bGJuKHosbik7ICAgIC8qIHN1Ym5vcm1hbCBvdXRwdXQgKi8KLSAgICBlbHNlIF9fSEkoeikgKz0g
KG48PDIwKTsKLSAgICByZXR1cm4gcyp6OwotfQotCi0jZW5kaWYKLQogfSAvLyBuYW1lc3BhY2Ug
SlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgt
cG93LWJhc2ljcy5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvbWF0aC1w
b3ctYmFzaWNzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkZjE5ODg0NDA3ZTg2MmY1ODMyYWUzYTQ0ODhkMzI1
YTZjZDdmYjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL21hdGgtcG93LWJhc2ljcy5qcwpAQCAtMCwwICsxLDI4NiBAQAorZnVuY3Rpb24gdmFs
dWVzQXJlQ2xvc2UoYSwgYikgeworICAgIHJldHVybiBNYXRoLmFicyhhIC8gYikgLSAxIDwgMWUt
MTA7Cit9CisKKy8vIFNvbWUgcmFuZG9tIHZhbHVlcy4KK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVE
b3VibGUxKHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1h
dGhQb3dEb3VibGVEb3VibGUxKTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludDEoeCwgeSkg
eworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZUlu
dDEpOworCitmdW5jdGlvbiB0ZXN0MSh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
bWF0aFBvd0RvdWJsZURvdWJsZTEoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2Uo
cmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
LCBtYXRoUG93RG91YmxlRG91YmxlMSgiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0
ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAg
IHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDEoeCwgaW50ZWdlclkp
OworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDEoIiArIHgg
KyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUg
Y2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0MSk7Cit0ZXN0
MSgzNzYuNzY1MjI3NjQzNzcyOTYsIDEwLjgxNjk5MjI2MDUxNTY5LCA3LjMzMzk1MTkyOTEwOTI1
MmUrMjcsIDUuNzYzNzg5ODk1NzUwODllKzI1KTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURv
dWJsZTIoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0
aFBvd0RvdWJsZURvdWJsZTIpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50Mih4LCB5KSB7
CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50
Mik7CitmdW5jdGlvbiB0ZXN0Mih4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0
aFBvd0RvdWJsZURvdWJsZTIoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVz
dWx0LCBleHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBt
YXRoUG93RG91YmxlRG91YmxlMigiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsg
IiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZh
ciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDIoeCwgaW50ZWdlclkpOwor
ICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDIoIiArIHggKyAi
LCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xv
c2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0Mik7Cit0ZXN0Migz
NzYuNzY1MjI3NjQzNzcyOTYsIC01LjgxNjk5MjI2MDUxNTY5LCAxLjAzNTE4MDMzMTE4NzU3OWUt
MTUsIDEuMzE3MTgyNDMxMDQwMDI2NWUtMTMpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91
YmxlMyh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRo
UG93RG91YmxlRG91YmxlMyk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQzKHgsIHkpIHsK
KyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQz
KTsKK2Z1bmN0aW9uIHRlc3QzKHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRo
UG93RG91YmxlRG91YmxlMyh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1
bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1h
dGhQb3dEb3VibGVEb3VibGUzKCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAi
IGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFy
IGludGVnZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7
CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50Myh4LCBpbnRlZ2VyWSk7Cisg
ICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50MygiICsgeCArICIs
ICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9z
ZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3QzKTsKK3Rlc3QzKC0z
Ny42NzY1MjI3NjQzNzcyOTYsIDEwLjAsIDU3NjM3ODk4OTU3NTA4OTIsIDU3NjM3ODk4OTU3NTA4
OTIpOworCisvLyBFeHBvbmVudCB6ZXJvLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTQo
eCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0Rv
dWJsZURvdWJsZTQpOworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlSW50NCh4LCB5KSB7CisgICAg
cmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50NCk7Citm
dW5jdGlvbiB0ZXN0NCh4LCB5LCBleHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0Rv
dWJsZURvdWJsZTQoeCwgeSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBl
eHBlY3RlZDEpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93
RG91YmxlRG91YmxlNCgiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBl
Y3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZhciBpbnRl
Z2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludDQoeCwgaW50ZWdlclkpOworICAgICAg
ICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludDQoIiArIHggKyAiLCAiICsg
aW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8g
IiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0NCk7Cit0ZXN0NCgtMzcuNjc2
NTIyNzY0Mzc3Mjk2LCAwLCAxLCAxKTsKKworLy8gRXhwb25lbnQgbWludXMgemVyby4KK2Z1bmN0
aW9uIG1hdGhQb3dEb3VibGVEb3VibGU1KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwg
eSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGU1KTsKKworZnVuY3Rpb24gbWF0aFBv
d0RvdWJsZUludDUoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9Jbmxp
bmUobWF0aFBvd0RvdWJsZUludDUpOworZnVuY3Rpb24gdGVzdDUoeCwgeSwgZXhwZWN0ZWQxLCBl
eHBlY3RlZDIpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAg
ICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVEb3VibGU1KHgsIHkpOworICAgICAgICBpZiAo
IXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZTUoIiArIHggKyAiLCAiICsgeSAr
ICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0
ZWQxOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkgPSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJ
bnQ1KHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4
cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dE
b3VibGVJbnQoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4
cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lubGlu
ZSh0ZXN0NSk7Cit0ZXN0NSgtMzcuNjc2NTIyNzY0Mzc3Mjk2LCAtMCwgMSwgMSk7CisKKy8vIEV4
cG9uZW50IDEuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlNih4LCB5KSB7CisgICAgcmV0
dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlNik7CisK
K2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ2KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3co
eCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ2KTsKK2Z1bmN0aW9uIHRlc3Q2KHgs
IHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlNih4LCB5
KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisgICAg
ICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGU2KCIg
KyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xv
c2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBtYXRoUG93RG91YmxlSW50Nih4LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJl
Q2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQg
cmVzdWx0LCBtYXRoUG93RG91YmxlSW50NigiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0g
IiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOwor
ICAgIH0KK30KK25vSW5saW5lKHRlc3Q2KTsKK3Rlc3Q2KC0zNy42NzY1MjI3NjQzNzcyOTYsIDEu
MCwgLTM3LjY3NjUyMjc2NDM3NzI5NiwgLTM3LjY3NjUyMjc2NDM3NzI5Nik7CisKKy8vIEV4cG9u
ZW50IC0xLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTcoeCwgeSkgeworICAgIHJldHVy
biBNYXRoLnBvdyh4LCB5KQorfQorbm9JbmxpbmUobWF0aFBvd0RvdWJsZURvdWJsZTcpOworCitm
dW5jdGlvbiBtYXRoUG93RG91YmxlSW50Nyh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgs
IHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50Nyk7CitmdW5jdGlvbiB0ZXN0Nyh4LCB5
LCBleHBlY3RlZDEsIGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7
ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTcoeCwgeSk7
CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlNygiICsg
eCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3Nl
IHRvICIgKyBleHBlY3RlZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
bWF0aFBvd0RvdWJsZURvdWJsZTcoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0Fy
ZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZTcoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAi
KSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVk
MjsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0Nyk7Cit0ZXN0NigtMzcuNjc2NTIyNzY0Mzc3Mjk2
LCAtMS4wLCAtMC4wMjY1NDE3Mjc0OTA0NTQyOTYsIC0wLjAyNjU0MTcyNzQ5MDQ1NDI5Nik7CisK
Ky8vIExldCdzIHNxdWFyZSB0aGluZ3MuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlOCh4
LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91
YmxlRG91YmxlOCk7CisKK2Z1bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQ4KHgsIHkpIHsKKyAgICBy
ZXR1cm4gTWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ4KTsKK2Z1
bmN0aW9uIHRlc3Q4KHgsIHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91
YmxlRG91YmxlOCh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4
cGVjdGVkMSkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dE
b3VibGVEb3VibGU4KCIgKyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVj
dGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVn
ZXJZID0geSB8IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAg
ICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlSW50OCh4LCBpbnRlZ2VyWSk7CisgICAgICAg
IGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlSW50OCgiICsgeCArICIsICIgKyBp
bnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAi
ICsgZXhwZWN0ZWQyOworICAgIH0KK30KK25vSW5saW5lKHRlc3Q4KTsKK3Rlc3Q3KC0zNy42NzY1
MjI3NjQzNzcyOTYsIDIuMCwgMTQxOS41MjAzNjc2MTQ2NDA3LCAxNDE5LjUyMDM2NzYxNDY0MDcp
OworCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlOSh4LCB5KSB7CisgICAgcmV0dXJuIE1h
dGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlOSk7CisKK2Z1bmN0
aW9uIG1hdGhQb3dEb3VibGVJbnQ5KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwgeSkK
K30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnQ5KTsKK2Z1bmN0aW9uIHRlc3Q5KHgsIHksIGV4
cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlOSh4LCB5KTsKKyAg
ICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVkMSkpCisgICAgICAgICAg
ICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQb3dEb3VibGVEb3VibGU5KCIgKyB4ICsg
IiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8g
IiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRo
UG93RG91YmxlSW50OSh4LCBpbnRlZ2VyWSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2Uo
cmVzdWx0LCBleHBlY3RlZDIpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
LCBtYXRoUG93RG91YmxlSW50OSgiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJl
c3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOworICAgIH0K
K30KK25vSW5saW5lKHRlc3Q5KTsKK3Rlc3Q4KDM3LjY3NjUyMjc2NDM3NzI5NiwgMi4wLCAxNDE5
LjUyMDM2NzYxNDY0MDcsIDE0MTkuNTIwMzY3NjE0NjQwNyk7CisKKy8vIExldCdzIGN1YmUgdGhp
bmdzLgorZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJsZTEwKHgsIHkpIHsKKyAgICByZXR1cm4g
TWF0aC5wb3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVEb3VibGUxMCk7CisKK2Z1
bmN0aW9uIG1hdGhQb3dEb3VibGVJbnQxMCh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgs
IHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlSW50MTApOworZnVuY3Rpb24gdGVzdDEwKHgs
IHksIGV4cGVjdGVkMSwgZXhwZWN0ZWQyKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAw
MDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBtYXRoUG93RG91YmxlRG91YmxlMTAoeCwg
eSk7CisgICAgICAgIGlmICghdmFsdWVzQXJlQ2xvc2UocmVzdWx0LCBleHBlY3RlZDEpKQorICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBtYXRoUG93RG91YmxlRG91YmxlKCIg
KyB4ICsgIiwgIiArIHkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIGEgdmFsdWUgY2xv
c2UgdG8gIiArIGV4cGVjdGVkMTsKKyAgICB9CisgICAgdmFyIGludGVnZXJZID0geSB8IDA7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBtYXRoUG93RG91YmxlSW50MTAoeCwgaW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0Fy
ZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQyKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdCwgbWF0aFBvd0RvdWJsZUludCgiICsgeCArICIsICIgKyBpbnRlZ2VyWSArICIpID0g
IiArIHJlc3VsdCArICIgZXhwZWN0ZWQgYSB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQyOwor
ICAgIH0KK30KK25vSW5saW5lKHRlc3Q5KTsKK3Rlc3Q5KC0zNy42NzY1MjI3NjQzNzcyOTYsIDMu
MCwgLTUzNDgyLjU5MTQ0NDkzMDIzNiwgLTUzNDgyLjU5MTQ0NDkzMDIzNik7CisKK2Z1bmN0aW9u
IG1hdGhQb3dEb3VibGVEb3VibGUxMSh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkp
Cit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlMTEpOworCitmdW5jdGlvbiBtYXRoUG93
RG91YmxlSW50MTEoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9Jbmxp
bmUobWF0aFBvd0RvdWJsZUludDExKTsKK2Z1bmN0aW9uIHRlc3QxMSh4LCB5LCBleHBlY3RlZDEs
IGV4cGVjdGVkMikgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAg
ICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZTExKHgsIHkpOworICAgICAgICBp
ZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQxKSkKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdCwgbWF0aFBvd0RvdWJsZURvdWJsZSgiICsgeCArICIsICIgKyB5
ICsgIikgPSAiICsgcmVzdWx0ICsgIiBleHBlY3RlZCBhIHZhbHVlIGNsb3NlIHRvICIgKyBleHBl
Y3RlZDE7CisgICAgfQorICAgIHZhciBpbnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJs
ZUludDExKHgsIGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQs
IGV4cGVjdGVkMikpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIG1hdGhQ
b3dEb3VibGVJbnQoIiArIHggKyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAi
IGV4cGVjdGVkIGEgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkMjsKKyAgICB9Cit9Citub0lu
bGluZSh0ZXN0MTApOwordGVzdDEwKDM3LjY3NjUyMjc2NDM3NzI5NiwgMy4wLCA1MzQ4Mi41OTE0
NDQ5MzAyMzYsIDUzNDgyLjU5MTQ0NDkzMDIzNik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LWludGVnZXItZXhwb25lbnQtZmFzdHBhdGgu
anMgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LWludGVnZXIt
ZXhwb25lbnQtZmFzdHBhdGguanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDYwNmM0NGY5NTI1NTg3YjEwNWU2ZWI2
YTcyNWIyMTZjYzFmMzc5MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3MvbWF0aC1wb3ctaW50ZWdlci1leHBvbmVudC1mYXN0cGF0aC5qcwpAQCAt
MCwwICsxLDU2IEBACitmdW5jdGlvbiB2YWx1ZXNBcmVDbG9zZShhLCBiKSB7CisgICAgcmV0dXJu
IE1hdGguYWJzKGEgLyBiKSAtIDEgPCAxZS0xMDsKK30KKworLy8gU21hbGwgZXhwb25lbnQgdmFs
dWVzIGFyZSBoYW5kbGVkIHRocm91Z2ggYSBzaW1wbGVyIGlubGluZSBsb29wLiBUZXN0IHRoYXQg
aXQgaXMgbm90IG9ic2VydmFibGUuCitmdW5jdGlvbiBtYXRoUG93RG91YmxlRG91YmxlVGVzdEV4
cG9uZW50RmlmdHkoeCwgeSkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCB5KQorfQorbm9Jbmxp
bmUobWF0aFBvd0RvdWJsZURvdWJsZVRlc3RFeHBvbmVudEZpZnR5KTsKKworZnVuY3Rpb24gbWF0
aFBvd0RvdWJsZUludFRlc3RFeHBvbmVudEZpZnR5KHgsIHkpIHsKKyAgICByZXR1cm4gTWF0aC5w
b3coeCwgeSkKK30KK25vSW5saW5lKG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25lbnRGaWZ0eSk7
CitmdW5jdGlvbiB0ZXN0RXhwb25lbnRGaWZ0eSh4LCB5LCBleHBlY3RlZCkgeworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBv
d0RvdWJsZURvdWJsZVRlc3RFeHBvbmVudEZpZnR5KHgsIHkpOworICAgICAgICBpZiAoIXZhbHVl
c0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBi
YWQgcmVzdWx0LCBNYXRoLnBvdygiICsgeCArICIsICIgKyB5ICsgIikgPSAiICsgcmVzdWx0ICsg
IiBleHBlY3RlZCB2YWx1ZSBjbG9zZSB0byAiICsgZXhwZWN0ZWQ7CisgICAgfQorICAgIHZhciBp
bnRlZ2VyWSA9IHkgfCAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZUludFRlc3RFeHBvbmVudEZpZnR5KHgs
IGludGVnZXJZKTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9zZShyZXN1bHQsIGV4cGVjdGVk
KSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coIiArIHgg
KyAiLCAiICsgaW50ZWdlclkgKyAiKSA9ICIgKyByZXN1bHQgKyAiIGV4cGVjdGVkIHZhbHVlIGNs
b3NlIHRvICIgKyBleHBlY3RlZDsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0RXhwb25lbnRGaWZ0
eSk7Cit0ZXN0RXhwb25lbnRGaWZ0eSg1My43MDkwMTE2NDEzMzEwMiwgNTAuMCwgMy4xNzk0OTQx
MTgxMjAxNDRlKzg2KTsKK3Rlc3RFeHBvbmVudEZpZnR5KDUzLjcwOTAxMTY0MTMzMTAyLCAtMTAu
MCwgNS4wMDY0MzI4NDI2MjExOTJlLTE4KTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZURvdWJs
ZVRlc3RFeHBvbmVudFRlblRob3VzYW5kcyh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgs
IHkpCit9Citub0lubGluZShtYXRoUG93RG91YmxlRG91YmxlVGVzdEV4cG9uZW50VGVuVGhvdXNh
bmRzKTsKKworZnVuY3Rpb24gbWF0aFBvd0RvdWJsZUludFRlc3RFeHBvbmVudFRlblRob3VzYW5k
cyh4LCB5KSB7CisgICAgcmV0dXJuIE1hdGgucG93KHgsIHkpCit9Citub0lubGluZShtYXRoUG93
RG91YmxlSW50VGVzdEV4cG9uZW50VGVuVGhvdXNhbmRzKTsKK2Z1bmN0aW9uIHRlc3RFeHBvbmVu
dFRlblRob3VzYW5kcyh4LCB5LCBleHBlY3RlZCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gbWF0aFBvd0RvdWJsZURvdWJsZVRl
c3RFeHBvbmVudFRlblRob3VzYW5kcyh4LCB5KTsKKyAgICAgICAgaWYgKCF2YWx1ZXNBcmVDbG9z
ZShyZXN1bHQsIGV4cGVjdGVkKSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dCwgTWF0aC5wb3coIiArIHggKyAiLCAiICsgeSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0
ZWQgdmFsdWUgY2xvc2UgdG8gIiArIGV4cGVjdGVkOworICAgIH0KKyAgICB2YXIgaW50ZWdlclkg
PSB5IHwgMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAg
dmFyIHJlc3VsdCA9IG1hdGhQb3dEb3VibGVJbnRUZXN0RXhwb25lbnRUZW5UaG91c2FuZHMoeCwg
aW50ZWdlclkpOworICAgICAgICBpZiAoIXZhbHVlc0FyZUNsb3NlKHJlc3VsdCwgZXhwZWN0ZWQp
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdygiICsgeCAr
ICIsICIgKyBpbnRlZ2VyWSArICIpID0gIiArIHJlc3VsdCArICIgZXhwZWN0ZWQgdmFsdWUgY2xv
c2UgdG8gIiArIGV4cGVjdGVkOworICAgIH0KK30KK25vSW5saW5lKHRlc3RFeHBvbmVudFRlblRo
b3VzYW5kcyk7Cit0ZXN0RXhwb25lbnRUZW5UaG91c2FuZHMoMS4wMDEsIDEwMDAwLjAsIDIxOTE2
LjY4MTMzOTA0ODM3Myk7Cit0ZXN0RXhwb25lbnRUZW5UaG91c2FuZHMoMS4wMDEsIC0xLjAsIDAu
OTk5MDAwOTk5MDAwOTk5MSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy1uYW4tYmVoYXZp
b3JzLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy1uYW4t
YmVoYXZpb3JzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRhN2RkNDQ2NzgwOWZiYzA2YjJiZjM0ZTE5NWYwYTMx
MTIwOThjNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL21hdGgtcG93LW5hbi1iZWhhdmlvcnMuanMKQEAgLTAsMCArMSw4NSBAQAorLy8gSWYg
eSBpcyBOYU4sIHRoZSByZXN1bHQgaXMgTmFOLgorZnVuY3Rpb24gdGVzdEludGVnZXJCYXNlV2l0
aE5hTkV4cG9uZW50KCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coNSwgTmFOKTsKKyAgICAgICAgaWYgKCFpc05h
TihyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBv
dyg1LCBOYU4pID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBNYXRoLnBvdyhpLCBOYU4pOworICAg
ICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCBy
ZXN1bHQsIE1hdGgucG93KGksIE5hTikgPSAiICsgcmVzdWx0ICsgIiB3aXRoIGkgPSAiICsgaTsK
KyAgICB9Cit9Citub0lubGluZSh0ZXN0SW50ZWdlckJhc2VXaXRoTmFORXhwb25lbnQpOwordGVz
dEludGVnZXJCYXNlV2l0aE5hTkV4cG9uZW50KCk7CisKK2Z1bmN0aW9uIHRlc3RGbG9hdGluZ1Bv
aW50QmFzZVdpdGhOYU5FeHBvbmVudCgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KDUuNSwgTmFOKTsKKyAgICAg
ICAgaWYgKCFpc05hTihyZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0LCBNYXRoLnBvdyg1LjUsIE5hTikgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93
KGkgKyAxLCBOYU4pOworICAgICAgICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0
aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KGkgKyAwLjUsIE5hTikgPSAiICsgcmVz
dWx0ICsgIiB3aXRoIGkgPSAiICsgaTsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0RmxvYXRpbmdQ
b2ludEJhc2VXaXRoTmFORXhwb25lbnQpOwordGVzdEZsb2F0aW5nUG9pbnRCYXNlV2l0aE5hTkV4
cG9uZW50KCk7CisKKy8vIElmIHkgaXMgKzAsIHRoZSByZXN1bHQgaXMgMSwgZXZlbiBpZiB4IGlz
IE5hTi4KKy8vIElmIHkgaXMg4oiSMCwgdGhlIHJlc3VsdCBpcyAxLCBldmVuIGlmIHggaXMgTmFO
LgorLy8gSWYgeCBpcyBOYU4gYW5kIHkgaXMgbm9uemVybywgdGhlIHJlc3VsdCBpcyBOYU4uCitm
dW5jdGlvbiB0ZXN0TmFOQmFzZSgpIHsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KE5hTiwgaSArIDEpOworICAgICAg
ICBpZiAoIWlzTmFOKHJlc3VsdCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQsIE1hdGgucG93KE5hTiwgaSArIDEpID0gIiArIHJlc3VsdCArICIgd2l0aCBpID0gIiArIGk7
CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2
YXIgcmVzdWx0ID0gTWF0aC5wb3coTmFOLCBpICsgMS41KTsKKyAgICAgICAgaWYgKCFpc05hTihy
ZXN1bHQpKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0LCBNYXRoLnBvdyhO
YU4sIGkgKyAxLjUpID0gIiArIHJlc3VsdCArICIgd2l0aCBpID0gIiArIGk7CisgICAgfQorICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0g
TWF0aC5wb3coTmFOLCAwKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMSkKKyAgICAgICAgICAg
IHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coTmFOLCAwKSA9ICIgKyByZXN1bHQ7
CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2
YXIgcmVzdWx0ID0gTWF0aC5wb3coTmFOLCAtMCk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDEp
CisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQsIE1hdGgucG93KE5hTiwgLTAp
ID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Citub0lubGluZSh0ZXN0TmFOQmFzZSk7Cit0ZXN0TmFO
QmFzZSgpOworCisvLyBJZiBhYnMoeCkgaXMgMSBhbmQgeSBpcyAr4oieLCB0aGUgcmVzdWx0IGlz
IE5hTi4KKy8vIElmIGFicyh4KSBpcyAxIGFuZCB5IGlzIOKIkuKIniwgdGhlIHJlc3VsdCBpcyBO
YU4uCitmdW5jdGlvbiBpbmZpbml0ZUV4cG9uZW50cygpIHsKKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KDEsIE51bWJl
ci5QT1NJVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coMSwgTnVtYmVyLlBPU0lU
SVZFX0lORklOSVRZKSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coLTEsIE51bWJl
ci5QT1NJVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coLTEsIE51bWJlci5QT1NJ
VElWRV9JTkZJTklUWSkgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IE1hdGgucG93KDEsIE51bWJl
ci5ORUdBVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coMSwgTnVtYmVyLk5FR0FU
SVZFX0lORklOSVRZKSA9ICIgKyByZXN1bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gTWF0aC5wb3coLTEsIE51bWJl
ci5ORUdBVElWRV9JTkZJTklUWSk7CisgICAgICAgIGlmICghaXNOYU4ocmVzdWx0KSkKKyAgICAg
ICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCwgTWF0aC5wb3coLTEsIE51bWJlci5ORUdB
VElWRV9JTkZJTklUWSkgPSAiICsgcmVzdWx0OworICAgIH0KK30KK25vSW5saW5lKGluZmluaXRl
RXhwb25lbnRzKTsKK2luZmluaXRlRXhwb25lbnRzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL21hdGgtcG93LXdpdGgtY29uc3RhbnRzLmpzIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRoLXBvdy13aXRoLWNvbnN0YW50cy5q
cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hNGMxMDhjYmQxOGMxNjdmNjliYmVhNGQzZTlkYjI4MjZkMDMwZWMzCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tYXRo
LXBvdy13aXRoLWNvbnN0YW50cy5qcwpAQCAtMCwwICsxLDExNSBAQAorZnVuY3Rpb24gZXhwb25l
bnRJc1plcm8oeCkgeworICAgIHJldHVybiBNYXRoLnBvdyh4LCAwKTsKK30KK25vSW5saW5lKGV4
cG9uZW50SXNaZXJvKTsKKworZnVuY3Rpb24gdGVzdEV4cG9uZW50SXNaZXJvKCkgeworICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gZXhw
b25lbnRJc1plcm8oNSk7CisgICAgICAgIGlmIChyZXN1bHQgIT09IDEpCisgICAgICAgICAgICB0
aHJvdyAiRXJyb3I6IHplcm9FeHBvbmVudCg1KSBzaG91bGQgYmUgMSwgd2FzID0gIiArIHJlc3Vs
dDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBleHBvbmVudElzWmVybyg1LjUpOworICAgICAgICBpZiAocmVzdWx0ICE9
PSAxKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiB6ZXJvRXhwb25lbnQoNS41KSBzaG91bGQg
YmUgMSwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Cit0ZXN0RXhwb25lbnRJc1plcm8oKTsK
KworCitmdW5jdGlvbiBleHBvbmVudElzT25lKHgpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coeCwg
MSk7Cit9Citub0lubGluZShleHBvbmVudElzT25lKTsKKworZnVuY3Rpb24gdGVzdEV4cG9uZW50
SXNPbmUoKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAg
IHZhciByZXN1bHQgPSBleHBvbmVudElzT25lKDUpOworICAgICAgICBpZiAocmVzdWx0ICE9PSA1
KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBleHBvbmVudElzT25lKDUpIHNob3VsZCBiZSA1
LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
OyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGV4cG9uZW50SXNPbmUoNS41KTsKKyAgICAg
ICAgaWYgKHJlc3VsdCAhPT0gNS41KQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBleHBvbmVu
dElzT25lKDUuNSkgc2hvdWxkIGJlIDUuNSwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9Cit9Cit0
ZXN0RXhwb25lbnRJc09uZSgpOworCisKK2Z1bmN0aW9uIHBvd1VzZWRBc1NxcnQoeCkgeworICAg
IHJldHVybiBNYXRoLnBvdyh4LCAwLjUpOworfQorbm9JbmxpbmUocG93VXNlZEFzU3FydCk7CisK
K2Z1bmN0aW9uIHRlc3RQb3dVc2VkQXNTcXJ0KCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gcG93VXNlZEFzU3FydCg0KTsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPT0gTWF0aC5zcXJ0KDQpKQorICAgICAgICAgICAgdGhyb3cgIkVy
cm9yOiBwb3dVc2VkQXNTcXJ0KDQpIHNob3VsZCBiZSAyLCB3YXMgPSAiICsgcmVzdWx0OworICAg
IH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IHBvd1VzZWRBc1NxcnQoNC40KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gTWF0aC5z
cXJ0KDQuNCkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IHBvd1VzZWRBc1NxcnQoNCkgc2hv
dWxkIGJlICIgKyBNYXRoLnNxcnQoNC40KSArICIsIHdhcyA9ICIgKyByZXN1bHQ7CisgICAgfQor
Cit9Cit0ZXN0UG93VXNlZEFzU3FydCgpOworCisKK2Z1bmN0aW9uIGludEludENvbnN0YW50c1Nt
YWxsTnVtYmVycygpIHsKKyAgICByZXR1cm4gTWF0aC5wb3coNDIsIDMpOworfQorZnVuY3Rpb24g
aW50SW50Q29uc3RhbnRzTGFyZ2VOdW1iZXJzKCkgeworICAgIC8vIFRoZSByZXN1bHQgZG9lcyBu
b3QgZml0IGluIGEgaW50ZWdlci4KKyAgICByZXR1cm4gTWF0aC5wb3coNDIsIDQyKTsKK30KK2Z1
bmN0aW9uIGludEludFNtYWxsQ29uc3RhbnRzKCkgeworICAgIHJldHVybiBNYXRoLnBvdyg0Miwg
Myk7Cit9CitmdW5jdGlvbiBpbnREb3VibGVDb25zdGFudHMoKSB7CisgICAgcmV0dXJuIE1hdGgu
cG93KDE0LCA0Mi41KTsKK30KK2Z1bmN0aW9uIGRvdWJsZURvdWJsZUNvbnN0YW50cygpIHsKKyAg
ICByZXR1cm4gTWF0aC5wb3coMTMuNSwgNDIuNSk7Cit9CitmdW5jdGlvbiBkb3VibGVJbnRDb25z
dGFudHMoKSB7CisgICAgcmV0dXJuIE1hdGgucG93KDEzLjUsIDUyKTsKK30KK25vSW5saW5lKGlu
dEludENvbnN0YW50c1NtYWxsTnVtYmVycyk7Citub0lubGluZShpbnRJbnRDb25zdGFudHNMYXJn
ZU51bWJlcnMpOworbm9JbmxpbmUoaW50RG91YmxlQ29uc3RhbnRzKTsKK25vSW5saW5lKGRvdWJs
ZURvdWJsZUNvbnN0YW50cyk7Citub0lubGluZShkb3VibGVJbnRDb25zdGFudHMpOworCitmdW5j
dGlvbiB0ZXN0QmFzZUFuZEV4cG9uZW50Q29uc3RhbnRMaXRlcmFscygpCit7CisgICAgZm9yICh2
YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBpbnRJbnRD
b25zdGFudHNTbWFsbE51bWJlcnMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNzQwODgpCisg
ICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGludEludENvbnN0YW50c1NtYWxsTnVtYmVycygpIHNo
b3VsZCBiZSA3NDA4OCwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBpbnRJbnRDb25zdGFu
dHNMYXJnZU51bWJlcnMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gMS41MDEzMDkzNzU0NTI5
NjU2ZSs2OCkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogaW50SW50Q29uc3RhbnRzTGFyZ2VO
dW1iZXJzKCkgc2hvdWxkIGJlIDEuNTAxMzA5Mzc1NDUyOTY1NmUrNjgsIHdhcyA9ICIgKyByZXN1
bHQ7CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAg
ICB2YXIgcmVzdWx0ID0gaW50RG91YmxlQ29uc3RhbnRzKCk7CisgICAgICAgIGlmIChyZXN1bHQg
IT09IDUuMTMzODMwMzg4MjAxNTc2NWUrNDgpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGlu
dERvdWJsZUNvbnN0YW50cygpIHNob3VsZCBiZSA1LjEzMzgzMDM4ODIwMTU3NjVlKzQ4LCB3YXMg
PSAiICsgcmVzdWx0OworICAgIH0KKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICAgICAgdmFyIHJlc3VsdCA9IGRvdWJsZURvdWJsZUNvbnN0YW50cygpOworICAgICAg
ICBpZiAocmVzdWx0ICE9PSAxLjA5NDQyMjg3Mjk2NDc4MjllKzQ4KQorICAgICAgICAgICAgdGhy
b3cgIkVycm9yOiBkb3VibGVEb3VibGVDb25zdGFudHMoKSBzaG91bGQgYmUgMS4wOTQ0MjI4NzI5
NjQ3ODI5ZSs0OCwgd2FzID0gIiArIHJlc3VsdDsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBkb3VibGVJbnRDb25zdGFu
dHMoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPT0gNS45ODkwMjI3MzUzMTExNThlKzU4KQorICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBkb3VibGVJbnRDb25zdGFudHMoKSBzaG91bGQgYmUgNS45
ODkwMjI3MzUzMTExNThlKzU4LCB3YXMgPSAiICsgcmVzdWx0OworICAgIH0KK30KK3Rlc3RCYXNl
QW5kRXhwb25lbnRDb25zdGFudExpdGVyYWxzKCk7Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>