<?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>145293</bug_id>
          
          <creation_ts>2015-05-21 20:21:49 -0700</creation_ts>
          <short_desc>[JSC] Add undefined-&gt;double conversion to DoubleRep</short_desc>
          <delta_ts>2015-05-28 13:47:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Benjamin Poulain">benjamin</assigned_to>
          <cc>dbates</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1096767</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-21 20:21:49 -0700</bug_when>
    <thetext>[JSC] Add undefined-&gt;double conversion to DoubleRep</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096771</commentid>
    <comment_count>1</comment_count>
      <attachid>253576</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-21 20:38:13 -0700</bug_when>
    <thetext>Created attachment 253576
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096772</commentid>
    <comment_count>2</comment_count>
      <attachid>253576</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 20:55:40 -0700</bug_when>
    <thetext>Comment on attachment 253576
Patch

Did you consider adding a UndefinedToNumber node?  We handle it this way for booleans-and-integers: we don&apos;t add a BooleanOrInt32 use kind but instead we have a node called BooleanToNumber that acts as an identity for non-booleans and converts booleans to integers.  You could do the same here.  I sort of buy that it&apos;s less profitable here since we already have a conversion node.

Also, it&apos;s not super obvious that adding the ability to discern between undefined and null in the type system is necessary for this patch.  I would have been slightly happier with giving DoubleRep the ability to handle NotCellUse, and using that whenever the incoming value is speculated int, double, bool, or other.  It&apos;s clear how to convert booleans and nulls to doubles, and it doesn&apos;t take that much additional code.  The benefit of adding NotCellUse to DoubleRep is that it immediately covers a much wider range of cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096773</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-21 20:56:13 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; Comment on attachment 253576 [details]
&gt; Patch
&gt; 
&gt; Did you consider adding a UndefinedToNumber node?  We handle it this way for
&gt; booleans-and-integers: we don&apos;t add a BooleanOrInt32 use kind but instead we
&gt; have a node called BooleanToNumber that acts as an identity for non-booleans
&gt; and converts booleans to integers.  You could do the same here.  I sort of
&gt; buy that it&apos;s less profitable here since we already have a conversion node.
&gt; 
&gt; Also, it&apos;s not super obvious that adding the ability to discern between
&gt; undefined and null in the type system is necessary for this patch.  I would
&gt; have been slightly happier with giving DoubleRep the ability to handle
&gt; NotCellUse, and using that whenever the incoming value is speculated int,
&gt; double, bool, or other.  It&apos;s clear how to convert booleans and nulls to
&gt; doubles, and it doesn&apos;t take that much additional code.  The benefit of
&gt; adding NotCellUse to DoubleRep is that it immediately covers a much wider
&gt; range of cases.

... and it&apos;s a smaller patch since you don&apos;t need a new UseKind and you don&apos;t need to change the SpeculatedType system.

Also, in the past when I&apos;ve changed the SpeculatedType system, I&apos;ve done that in a separate patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096904</commentid>
    <comment_count>4</comment_count>
      <attachid>253576</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-05-22 11:37:03 -0700</bug_when>
    <thetext>Comment on attachment 253576
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:10
&gt; +        This patch adds unsigned to double conversion to the DoubleRep
&gt; +        node for the cases were we speculate &quot;unsigned&quot; as part of the types
&gt; +        processed.

I think you meant undefined instead of unsigned.

&gt; Source/JavaScriptCore/ChangeLog:20
&gt; +        but the DoubleRep node was unable to convert the unsigned and would exit.

ditto</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096950</commentid>
    <comment_count>5</comment_count>
      <attachid>253606</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-22 14:24:47 -0700</bug_when>
    <thetext>Created attachment 253606
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1096952</commentid>
    <comment_count>6</comment_count>
      <attachid>253606</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-22 14:39:02 -0700</bug_when>
    <thetext>Comment on attachment 253606
Patch

Why are there any changes to SpeculatedType?

Why are you only using NotCellUse when you saw Undefined?  Why not use it if we also saw any kind of non-cell?

I believe that this approach is unsound and not conservative enough.  For example, so long as we don&apos;t remove the DoubleRep, AI will prove that DoubleRep(NotCellUse:) filters to Double|Undefined.  But if we remove it, then we just filter to ~Cell.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097050</commentid>
    <comment_count>7</comment_count>
      <attachid>253633</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-22 21:43:02 -0700</bug_when>
    <thetext>Created attachment 253633
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097118</commentid>
    <comment_count>8</comment_count>
      <attachid>253633</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-23 12:30:10 -0700</bug_when>
    <thetext>Comment on attachment 253633
Patch

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

&gt; Source/JavaScriptCore/ChangeLog:31
&gt; +        * bytecode/SpeculatedType.cpp:
&gt; +        (JSC::dumpSpeculation):
&gt; +        (JSC::speculationFromValue):
&gt; +        * bytecode/SpeculatedType.h:

You didn&apos;t change these files anymore.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:372
&gt; +            type &amp;= SpecBytecodeNumber;
&gt; +            // Undefined is converted to NaN.
&gt; +            type |= SpecDoublePureNaN;
&gt; +            // Null is converted to zero, Booleans are converted to 0/1.
&gt; +            type |= SpecBoolInt32;
&gt; +            break;

This is less precise than it could be.  You could do this like so:

if (type &amp; SpecOther) {
    type &amp;= ~SpecOther;
    type |= SpecDoublePureNaN | SpecBoolInt32; // Null becomes zero, undefined becomes NaN.
}
if (type &amp; SpecBoolean) {
    type &amp;= ~SpecBoolean;
    type |= SpecBoolInt32; // True becomes 1, false becomes 0.
}
DFG_ASSERT(m_graph. node, !(type &amp; ~SpecBytecodeNumber)); // Should have filtered out any non-numbers things.

&gt; Source/JavaScriptCore/dfg/DFGAbstractInterpreterInlines.h:375
&gt; +#if USE(JSVALUE64)

You don&apos;t need this #if.  It&apos;s important to avoid these unless they are absolutely necessary, since they make the code harder to read.  And anyway, we already have enough assertions that Int52 is not allowed in 32-bit mode.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7261
&gt; +            m_out.appendTo(nonDoubleCase, undefinedCase);
&gt; +            LValue valueIsUndefined = m_out.equal(boxedValue, m_out.constInt64(ValueUndefined));
&gt; +            m_out.branch(valueIsUndefined, unsure(undefinedCase), unsure(testNullCase));
&gt; +
&gt; +            m_out.appendTo(undefinedCase, testNullCase);
&gt; +            ValueFromBlock convertedUndefined = m_out.anchor(m_out.constDouble(PNaN));
&gt; +            m_out.jump(continuation);
&gt; +
&gt; +            m_out.appendTo(testNullCase, nullCase);
&gt; +            LValue valueIsNull = m_out.equal(boxedValue, m_out.constInt64(ValueNull));
&gt; +            m_out.branch(valueIsNull, unsure(nullCase), unsure(testBooleanTrueCase));
&gt; +
&gt; +            m_out.appendTo(nullCase, testBooleanTrueCase);
&gt; +            ValueFromBlock convertedNull = m_out.anchor(m_out.constDouble(0));
&gt; +            m_out.jump(continuation);
&gt; +
&gt; +            m_out.appendTo(testBooleanTrueCase, convertBooleanTrueCase);
&gt; +            LValue valueIsBooleanTrue = m_out.equal(boxedValue, m_out.constInt64(ValueTrue));
&gt; +            m_out.branch(valueIsBooleanTrue, unsure(convertBooleanTrueCase), unsure(convertBooleanFalseCase));
&gt; +
&gt; +            m_out.appendTo(convertBooleanTrueCase, convertBooleanFalseCase);
&gt; +            ValueFromBlock convertedTrue = m_out.anchor(m_out.constDouble(1));
&gt; +            m_out.jump(continuation);
&gt; +
&gt; +            m_out.appendTo(convertBooleanFalseCase, continuation);
&gt; +
&gt; +            LValue valueIsNotBooleanFalse = m_out.notEqual(boxedValue, m_out.constInt64(ValueFalse));
&gt; +            FTL_TYPE_CHECK(jsValueValue(boxedValue), edge, ~SpecCell, valueIsNotBooleanFalse);
&gt; +            ValueFromBlock convertedFalse = m_out.anchor(m_out.constDouble(0));
&gt; +            m_out.jump(continuation);

LLVM will convert a lot of these to select anyway.  Why not just do that?  Having a block that just anchors a constant usually implies that select would have been more concise.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097119</commentid>
    <comment_count>9</comment_count>
      <attachid>253633</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-05-23 12:31:05 -0700</bug_when>
    <thetext>Comment on attachment 253633
Patch

R=me.  I include some suggestions.  The only one I really care about is the #if USE(JSVALUE64) in DFGAbstractInterpreterInlines.h that guards Int52RepUse.  Please get rid of that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097453</commentid>
    <comment_count>10</comment_count>
      <attachid>253739</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-26 14:34:47 -0700</bug_when>
    <thetext>Created attachment 253739
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097798</commentid>
    <comment_count>11</comment_count>
      <attachid>253739</attachid>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-27 18:31:11 -0700</bug_when>
    <thetext>Comment on attachment 253739
Patch

Clearing flags on attachment: 253739

Committed r184933: &lt;http://trac.webkit.org/changeset/184933&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097799</commentid>
    <comment_count>12</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-27 18:31:14 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097848</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-05-27 23:07:08 -0700</bug_when>
    <thetext>The test fails on Windows:

https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/builds/66372/steps/jscore-test/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1097942</commentid>
    <comment_count>14</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2015-05-28 13:47:21 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; The test fails on Windows:
&gt; 
&gt; https://build.webkit.org/builders/Apple%20Win%207%20Debug%20%28Tests%29/
&gt; builds/66372/steps/jscore-test/logs/stdio

Thanks for the notice Alexey. It&apos;s the same goddamn mistake I do every time :(

Fixed in http://trac.webkit.org/changeset/184959</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253576</attachid>
            <date>2015-05-21 20:38:13 -0700</date>
            <delta_ts>2015-05-22 14:24:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145293-20150521203808.patch</filename>
            <type>text/plain</type>
            <size>30637</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjkxYWNjMGI5YWM1NzFiZjVlNmNjZjk2MTNkODhlZTg3NmMxYTgwLi4wZWQ4Y2EzMzI2ZTZkOWNk
MzVjMzk0MGMwZjA3MDE4Njk3ZWMzYTVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAxNS0wNS0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgdW5kZWZpbmVkLT5kb3VibGUgY29udmVyc2lvbiB0
byBEb3VibGVSZXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB1bnNpZ25lZCB0byBkb3VibGUgY29udmVyc2lvbiB0byB0aGUg
RG91YmxlUmVwCisgICAgICAgIG5vZGUgZm9yIHRoZSBjYXNlcyB3ZXJlIHdlIHNwZWN1bGF0ZSAi
dW5zaWduZWQiIGFzIHBhcnQgb2YgdGhlIHR5cGVzCisgICAgICAgIHByb2Nlc3NlZC4KKworICAg
ICAgICBUaGUgdXNlIGNhc2UgaXMgZG9pbmcgbWF0aCB3aXRoIGFjY2lkZW50YWwgb3V0LW9mLWJv
dW5kcyBhY2Nlc3MuIEZvciBleGFtcGxlLAorICAgICAgICBzb21ldGhpbmcgbGlrZToKKyAgICAg
ICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDw9IGxlbmd0aDsgKytpKQorICAgICAgICAgICAgICAg
IG91cHRwdXQgKz0gYXJyYXlbaV07CisKKyAgICAgICAgd291bGQgY2F1c2UgdXMgdG8gT1NSIGV4
aXQgZXZlcnkgdGltZSBpID09PSBsZW5ndGguCisKKyAgICAgICAgV2hlbiBoaXR0aW5nIG9uZSBv
ZiB0aG9zZSBjYXNlcywgd2Ugd291bGQgYWxyZWFkeSBzcGVjdWxhdGUgZG91YmxlIG1hdGgsCisg
ICAgICAgIGJ1dCB0aGUgRG91YmxlUmVwIG5vZGUgd2FzIHVuYWJsZSB0byBjb252ZXJ0IHRoZSB1
bnNpZ25lZCBhbmQgd291bGQgZXhpdC4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2ggdGhlIHVz
ZSBraW5kIE51bWJlck9yVW5kZWZpbmVkVXNlIGNvdmVyIHRoaXMgY29udmVyc2lvbiBmb3IgRG91
YmxlUmVwLgorICAgICAgICBJIGhhdmUgYmVlbiBxdWl0ZSBjb25zZXJ2YXRpdmUgc28gaW4gZ2Vu
ZXJhbCB3ZSB3aWxsIG5vdCBmaW5kICJ1bmRlZmluZWQiCisgICAgICAgIHVudGlsIGEgZmV3IHJl
Y29tcGlsZSBidXQgYmVpbmcgb3B0aW1pc3RpYyBzZWVtcyBiZXR0ZXIgc2luY2UgdGhpcyBpcyBh
IGNvcm5lciBjYXNlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaXMgYSA4MCUgcHJvZ3Jlc3Npb24g
b24gV2ViWFBSVCdzIEROQSBTZXF1ZW5jaW5nIHRlc3QuCisKKyAgICAgICAgKiBieXRlY29kZS9T
cGVjdWxhdGVkVHlwZS5jcHA6CisgICAgICAgIChKU0M6OmR1bXBTcGVjdWxhdGlvbik6CisgICAg
ICAgIChKU0M6OnNwZWN1bGF0aW9uRnJvbVZhbHVlKToKKyAgICAgICAgKiBieXRlY29kZS9TcGVj
dWxhdGVkVHlwZS5oOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5l
cy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0
ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVjdFR5cGVDb252ZXJzaW9uc0Zv
ckVkZ2UpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9k
ZTo6c2F3VW5kZWZpbmVkKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNl
Ojpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAg
IChKU0M6OkRGRzo6U2FmZVRvRXhlY3V0ZUVkZ2U6Om9wZXJhdG9yKCkpOgorICAgICAgICAqIGRm
Zy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVEb3VibGVSZXApOgorICAgICAgICAqIGRmZy9ERkdVc2VLaW5kLmNwcDoKKyAg
ICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuaDoK
KyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAgKiBmdGwvRlRMQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAg
KiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlRG91YmxlUmVwKToKKyAgICAgICAgKEpTQzo6RlRMOjpMb3dlckRGR1Rv
TExWTTo6anNWYWx1ZVRvRG91YmxlKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3MvZG91YmxlLXJl
cC13aXRoLXVuZGVmaW5lZC5qczogQWRkZWQuCisgICAgICAgIChhZGRBcmdzTnVtYmVyQW5kVW5k
ZWZpbmVkKToKKyAgICAgICAgKGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCk6CisgICAgICAgICh0
ZXN0RmFsbGJhY2tXaXRoRG91YmxlKToKKyAgICAgICAgKGFkZEFyZ3NEb3VibGVBbmRVbmRlZmlu
ZWQpOgorICAgICAgICAodGVzdEZhbGxiYWNrV2l0aE9iamVjdC4pOgorICAgICAgICAodGVzdEZh
bGxiYWNrV2l0aE9iamVjdCk6CisgICAgICAgIChhZGRBcmdzT25seVVuZGVmaW5lZCk6CisgICAg
ICAgICh0ZXN0RmFsbGJhY2tXaXRoU3RyaW5nKToKKwogMjAxNS0wNS0xOSAgTWljaGFlbCBTYWJv
ZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKDE4Mzc4Nyk6IEpJ
VCBpcyBlbmFibGVkIGZvciBhbGwgYnVpbGRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNwcAppbmRleCBjYTk1MTRjMDExM2RiNjA0YjQyNWE3
ZDA3MTQwN2Y5OGNmMGNkZjI4Li44YmI2MTU4YTllNGFkM2U0MzUwMjA0MjdmNGQ2YTc5MjlhODBm
NmI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRl
ZFR5cGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVk
VHlwZS5jcHAKQEAgLTIwNyw4ICsyMDcsMTMgQEAgdm9pZCBkdW1wU3BlY3VsYXRpb24oUHJpbnRT
dHJlYW0mIG91dCwgU3BlY3VsYXRlZFR5cGUgdmFsdWUpCiAgICAgZWxzZQogICAgICAgICBpc1Rv
cCA9IGZhbHNlOwogICAgIAotICAgIGlmICh2YWx1ZSAmIFNwZWNPdGhlcikKLSAgICAgICAgbXlP
dXQucHJpbnQoIk90aGVyIik7CisgICAgaWYgKHZhbHVlICYgU3BlY1VuZGVmaW5lZCkKKyAgICAg
ICAgbXlPdXQucHJpbnQoIlVuZGVmaW5lZCIpOworICAgIGVsc2UKKyAgICAgICAgaXNUb3AgPSBm
YWxzZTsKKworICAgIGlmICh2YWx1ZSAmIFNwZWNOdWxsKQorICAgICAgICBteU91dC5wcmludCgi
TnVsbCIpOwogICAgIGVsc2UKICAgICAgICAgaXNUb3AgPSBmYWxzZTsKICAgICAKQEAgLTM5Miw3
ICszOTcsOSBAQCBTcGVjdWxhdGVkVHlwZSBzcGVjdWxhdGlvbkZyb21WYWx1ZShKU1ZhbHVlIHZh
bHVlKQogICAgIGlmICh2YWx1ZS5pc0Jvb2xlYW4oKSkKICAgICAgICAgcmV0dXJuIFNwZWNCb29s
ZWFuOwogICAgIEFTU0VSVCh2YWx1ZS5pc1VuZGVmaW5lZE9yTnVsbCgpKTsKLSAgICByZXR1cm4g
U3BlY090aGVyOworICAgIGlmICh2YWx1ZS5pc1VuZGVmaW5lZCgpKQorICAgICAgICByZXR1cm4g
U3BlY1VuZGVmaW5lZDsKKyAgICByZXR1cm4gU3BlY051bGw7CiB9CiAKIFR5cGVkQXJyYXlUeXBl
IHR5cGVkQXJyYXlUeXBlRnJvbVNwZWN1bGF0aW9uKFNwZWN1bGF0ZWRUeXBlIHR5cGUpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvU3BlY3VsYXRlZFR5cGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCmluZGV4IGJk
MDQ1YzNhYzQ0NTcwNmY5YmM4NWQ0ZjViMzgzYzY4OGRjM2RkYzIuLjg4Y2EwNjA5OTRmODlkZmNj
NGE5MjJmZGMwYmExYjNiNjdjZDQyNTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oCkBAIC04MiwxMiArODIsMTQgQEAgc3RhdGljIGNvbnN0
IFNwZWN1bGF0ZWRUeXBlIFNwZWNGdWxsUmVhbE51bWJlciAgICAgPSAweDAxZjAwMDAwOyAvLyBJ
dCdzIGVpdGhlcgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCeXRlY29kZU51bWJl
ciAgICAgPSAweDAzYjAwMDAwOyAvLyBJdCdzIGVpdGhlciBhbiBJbnQzMiBvciBhIERvdWJsZSwg
YW5kIHRoZSBEb3VibGUgY2Fubm90IGJlIGFuIGltcHVyZSBOYU4uCiBzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0Z1bGxOdW1iZXIgICAgICAgICA9IDB4MDdmMDAwMDA7IC8vIEl0J3Mg
ZWl0aGVyIGFuIEludDMyLCBJbnQ1Miwgb3IgYSBEb3VibGUsIGFuZCB0aGUgRG91YmxlIGNhbiBi
ZSBpbXB1cmUgTmFOLgogc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNCb29sZWFuICAg
ICAgICAgICAgPSAweDEwMDAwMDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgYSBCb29sZWFuLgotc3Rh
dGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAweDIwMDAw
MDAwOyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIE51bGwgb3IgVW5kZWZpbmVkLgotc3RhdGlj
IGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNNaXNjICAgICAgICAgICAgICAgPSAweDMwMDAwMDAw
OyAvLyBJdCdzIGRlZmluaXRlbHkgZWl0aGVyIGEgYm9vbGVhbiwgTnVsbCwgb3IgVW5kZWZpbmVk
Lgotc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNIZWFwVG9wICAgICAgICAgICAgPSAw
eDNiYmZmZmZmOyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVj
SW50NTIuCi1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAg
ICA9IDB4NDAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIu
Ci1zdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IDB4
N2JiZmZmZmY7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJ
bnQ1Mi4KLXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbFRvcCAgICAgICAgICAg
ID0gMHg3ZmZmZmZmZjsgLy8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUgcGx1cyBhbnl0aGlu
ZyB0aGUgREZHIGNob29zZXMuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY1VuZGVm
aW5lZCAgICAgICAgICA9IDB4MjAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBVbmRlZmluZWQu
CitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY051bGwgICAgICAgICAgICAgICA9IDB4
NDAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBOdWxsLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0
ZWRUeXBlIFNwZWNPdGhlciAgICAgICAgICAgICAgPSAweDYwMDAwMDAwOyAvLyBJdCdzIGRlZmlu
aXRlbHkgZWl0aGVyIE51bGwgb3IgVW5kZWZpbmVkLgorc3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRU
eXBlIFNwZWNNaXNjICAgICAgICAgICAgICAgPSAweDcwMDAwMDAwOyAvLyBJdCdzIGRlZmluaXRl
bHkgZWl0aGVyIGEgYm9vbGVhbiwgTnVsbCwgb3IgVW5kZWZpbmVkLgorc3RhdGljIGNvbnN0IFNw
ZWN1bGF0ZWRUeXBlIFNwZWNIZWFwVG9wICAgICAgICAgICAgPSAweDdiYmZmZmZmOyAvLyBJdCBj
YW4gYmUgYW55IG9mIHRoZSBhYm92ZSwgZXhjZXB0IGZvciBTcGVjSW50NTIuCitzdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY0VtcHR5ICAgICAgICAgICAgICA9IDB4ODAwMDAwMDA7IC8v
IEl0J3MgZGVmaW5pdGVseSBhbiBlbXB0eSB2YWx1ZSBtYXJrZXIuCitzdGF0aWMgY29uc3QgU3Bl
Y3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlVG9wICAgICAgICA9IDB4ZmJiZmZmZmY7IC8vIEl0IGNh
biBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mi4KK3N0YXRpYyBjb25z
dCBTcGVjdWxhdGVkVHlwZSBTcGVjRnVsbFRvcCAgICAgICAgICAgID0gMHhmZmZmZmZmZjsgLy8g
SXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUgcGx1cyBhbnl0aGluZyB0aGUgREZHIGNob29zZXMu
CiAKIHR5cGVkZWYgYm9vbCAoKlNwZWN1bGF0ZWRUeXBlQ2hlY2tlcikoU3BlY3VsYXRlZFR5cGUp
OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgKaW5kZXggMTdlYWIwOTVjYTllNzJiNmI2YmE5ZDkyY2NiOWU4
M2NmNjJmOTIyNC4uOTYwZmYzZjU4ZWRiODYyOTk5M2E1MGY3NzA1ZWNhOGJhOTYzNDVjNyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRl
cnByZXRlcklubGluZXMuaApAQCAtMzYwLDcgKzM2MCwyNyBAQCBib29sIEFic3RyYWN0SW50ZXJw
cmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyh1bnNpZ25lZCBjbG9iYmVy
TGltaQogICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9kZSwganNEb3VibGVOdW1iZXIoY2hpbGQu
YXNOdW1iZXIoKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgZm9y
Tm9kZShub2RlKS5zZXRUeXBlKG1fZ3JhcGgsIGZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlw
ZSk7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgdHlwZSA9IGZvck5vZGUobm9kZS0+Y2hpbGQx
KCkpLm1fdHlwZTsKKyAgICAgICAgc3dpdGNoIChub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsK
KyAgICAgICAgY2FzZSBOdW1iZXJPclVuZGVmaW5lZFVzZTogeworICAgICAgICAgICAgaWYgKHR5
cGUgJiBTcGVjVW5kZWZpbmVkKSB7CisgICAgICAgICAgICAgICAgdHlwZSAmPSB+U3BlY1VuZGVm
aW5lZDsKKyAgICAgICAgICAgICAgICB0eXBlIHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVF
NjQpCisgICAgICAgIGNhc2UgSW50NTJSZXBVc2U6CisjZW5kaWYKKyAgICAgICAgY2FzZSBOdW1i
ZXJVc2U6CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBmb3JO
b2RlKG5vZGUpLnNldFR5cGUodHlwZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuZml4VHlwZUZv
clJlcHJlc2VudGF0aW9uKG1fZ3JhcGgsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCAwMjFmMTQ2
ZjA2YzZjM2ZlYmU0ZjkyOTBkOGNlNDg0NTMyMzExYTZkLi41ZTcyOWM0MGRhMjYwZTllMWFjMDUx
NDUyZDFjYTQ2MDFjNDZjZTI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0ZpeHVwUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4
dXBQaGFzZS5jcHAKQEAgLTIxMjQsOSArMjEyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJsZVJlcCwgbm9k
ZS0+b3JpZ2luLAogICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJl
cFVzZSkpOwogICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBVc2VLaW5kIHVz
ZUtpbmQgPSBOdW1iZXJVc2U7CisgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPnNhd1VuZGVmaW5l
ZCgpKQorICAgICAgICAgICAgICAgICAgICB1c2VLaW5kID0gTnVtYmVyT3JVbmRlZmluZWRVc2U7
CisKICAgICAgICAgICAgICAgICByZXN1bHQgPSBtX2luc2VydGlvblNldC5pbnNlcnROb2RlKAog
ICAgICAgICAgICAgICAgICAgICBtX2luZGV4SW5CbG9jaywgU3BlY0J5dGVjb2RlRG91YmxlLCBE
b3VibGVSZXAsIG5vZGUtPm9yaWdpbiwKLSAgICAgICAgICAgICAgICAgICAgRWRnZShlZGdlLm5v
ZGUoKSwgTnVtYmVyVXNlKSk7CisgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCks
IHVzZUtpbmQpKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgZWRnZS5zZXROb2RlKHJl
c3VsdCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDhkYjU4YTdlZDI4MzJj
MTk2YmY4OTUzYmYwOTBlMWQxODdiM2UwNTMuLjljMmU5MzllMThkNTk5YzA3MjgxZjFhYjk5OTAy
YzAyZjBjZWU5ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0xNzE5LDcg
KzE3MTksMTIgQEAgc3RydWN0IE5vZGUgewogICAgIHsKICAgICAgICAgcmV0dXJuICEhKHByZWRp
Y3Rpb24oKSAmIFNwZWNCb29sZWFuKTsKICAgICB9Ci0gICAgCisKKyAgICBib29sIHNhd1VuZGVm
aW5lZCgpCisgICAgeworICAgICAgICByZXR1cm4gISEocHJlZGljdGlvbigpICYgU3BlY1VuZGVm
aW5lZCk7CisgICAgfQorCiAgICAgYm9vbCBzaG91bGRTcGVjdWxhdGVJbnQzMk9yQm9vbGVhbigp
CiAgICAgewogICAgICAgICByZXR1cm4gaXNJbnQzMk9yQm9vbGVhblNwZWN1bGF0aW9uKHByZWRp
Y3Rpb24oKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRp
Y3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDNkZjg4MTI5NTgzOTI2YTc5OTIy
OTg0MjAzZTZkZTYzOGJkNjY0YmYuLmNkZTA5YmYxMjFiMjFmOGE0ZmViNjBkZmEyNGZiNDIwYjZh
OWJhYmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC00MDIsNiArNDAyLDEyIEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgU3BlY05vbmUpOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQXJyYXk6Oklu
dDMyOgorICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQorICAg
ICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFw
UHJlZGljdGlvbigpIHwgU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKFNwZWNJbnQzMik7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIEFycmF5OjpEb3VibGU6CiAgICAg
ICAgICAgICAgICAgaWYgKGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCiAgICAgICAgICAgICAg
ICAgICAgIGNoYW5nZWQgfD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9u
KCkgfCBTcGVjRG91YmxlUmVhbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2Fm
ZVRvRXhlY3V0ZS5oCmluZGV4IGE1N2VkMmE2MjE1ZGIxNWJiMDIyZTQxMmIxNzI5NTQzZDIwNDQ3
ZTkuLjA5NTdkMzI1YTg0MGUwMzY1MDQ3NjJjYzg1Yjc4MGEyZDNlNTgwMDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC01MCw2ICs1MCw3IEBA
IHB1YmxpYzoKICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAgICAgICBjYXNlIElu
dDUyUmVwVXNlOgogICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgY2FzZSBOdW1iZXJP
clVuZGVmaW5lZFVzZToKICAgICAgICAgY2FzZSBCb29sZWFuVXNlOgogICAgICAgICBjYXNlIENl
bGxVc2U6CiAgICAgICAgIGNhc2UgT2JqZWN0VXNlOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCA0NmZjOTBiYjlmNWE0ZDg1NGRhMTg2
NGUzZDc4OTI0NWVkMjU4NGU1Li5jMzE1MWU1ZWI5OTFiZThlZjQ0N2E1ZmRhOGE2NGNlZjJmYzIw
N2U3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcApAQCAtMjA2NCwzMSArMjA2NCw0OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxl
RG91YmxlQXNJbnQzMihOb2RlKiBub2RlKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURv
dWJsZVJlcChOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2lu
ZCgpKSB7CisgICAgY2FzZSBOdW1iZXJPclVuZGVmaW5lZFVzZToKICAgICBjYXNlIE51bWJlclVz
ZTogewogICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgpLT5pc051bWJlckNvbnN0YW50KCkp
OyAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY29uc3RhbnQgZm9sZGVkLgotICAgIAotICAgICAg
ICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSku
bV90eXBlKSkgeworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBvc3NpYmxlVHlwZXMgPSBtX3N0
YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZTsKKyAgICAgICAgaWYgKGlzSW50MzJT
cGVjdWxhdGlvbihwb3NzaWJsZVR5cGVzKSkgewogICAgICAgICAgICAgU3BlY3VsYXRlSW50MzJP
cGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFuZFNwZWN1bGF0aW9u
KTsKICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAgICAgICAgICAgICBt
X2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIHJlc3VsdC5mcHIoKSk7CiAgICAg
ICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQotICAgIAorCisgICAgICAgIGJvb2wgc2hvdWxkQ29udmVydFVuZGVm
aW5lZCA9IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBOdW1iZXJPclVuZGVmaW5lZFVzZQor
ICAgICAgICAgICAgJiYgKHBvc3NpYmxlVHlwZXMgJiBTcGVjVW5kZWZpbmVkKTsKKwogICAgICAg
ICBKU1ZhbHVlT3BlcmFuZCBvcDEodGhpcywgbm9kZS0+Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRT
cGVjdWxhdGlvbik7CiAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7Ci0gICAgCisK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKIAog
ICAgICAgICBHUFJSZWcgb3AxR1BSID0gb3AxLmdwcigpOwogICAgICAgICBHUFJSZWcgdGVtcEdQ
UiA9IHRlbXAuZ3ByKCk7CiAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSByZXN1bHQuZnByKCk7
Ci0gICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOworCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDY0KAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOwotICAgIAotICAgICAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hp
bGQxKCksIFNwZWNCeXRlY29kZU51bWJlcikpIHsKKworICAgICAgICBpZiAoc2hvdWxkQ29udmVy
dFVuZGVmaW5lZCkgeworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdW1iZXIgPSBt
X2ppdC5icmFuY2hUZXN0NjQoTWFjcm9Bc3NlbWJsZXI6Ok5vblplcm8sIG9wMUdQUiwgR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKKworICAgICAgICAgICAgaWYgKG5lZWRzVHlwZUNo
ZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjVW5kZWZpbmVkKSkg
eworICAgICAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTm90VW5kZWZpbmVkID0gbV9q
aXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBvcDFHUFIsIFRydXN0ZWRJbW02NChW
YWx1ZVVuZGVmaW5lZCkpOworICAgICAgICAgICAgICAgIHR5cGVDaGVjayhKU1ZhbHVlUmVncyhv
cDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY1VuZGVmaW5l
ZCwgaXNOb3RVbmRlZmluZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGljIGNv
bnN0IGRvdWJsZSBOYU4gPSBQTmFOOworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmTmFOKSwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAg
IGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmso
Jm1faml0KTsKKyAgICAgICAgfSBlbHNlIGlmIChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEo
KSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgewogICAgICAgICAgICAgdHlwZUNoZWNrKAogICAgICAg
ICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1i
bGVyOjpaZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwpAQCAt
MjA5Niw3ICsyMTE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVJlcChO
b2RlKiBub2RlKQogICAgIAogICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgdGVtcEdQUik7CiAg
ICAgICAgIHVuYm94RG91YmxlKHRlbXBHUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgIEpJVENvbXBp
bGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0
Lmp1bXAoKSk7CiAgICAgCiAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgICAg
IG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMUdQUiwgcmVzdWx0RlBSKTsKQEAgLTIxMDgs
MTggKzIxMjYsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVJlcChOb2Rl
KiBub2RlKQogICAgICAgICBHUFJSZWcgb3AxUGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7
CiAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKICAgICAgICAgRlBSUmVnIHJl
c3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRv
bmU7CiAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJy
YW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcDFUYWdHUFIsIFRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIAotICAgICAgICBpZiAobmVlZHNU
eXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51bWJlcikpIHsKKworICAgICAg
ICBpZiAoc2hvdWxkQ29udmVydFVuZGVmaW5lZCkgeworICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNOdW1iZXIgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6QmVsb3csIG9wMVRh
Z0dQUiwgSklUQ29tcGlsZXI6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcgKyAxKSk7
CisKKyAgICAgICAgICAgIGlmIChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY0J5
dGVjb2RlTnVtYmVyIHwgU3BlY1VuZGVmaW5lZCkpIHsKKyAgICAgICAgICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc05vdFVuZGVmaW5lZCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpO
b3RFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6VW5kZWZpbmVkVGFnKSk7
CisgICAgICAgICAgICAgICAgdHlwZUNoZWNrKEpTVmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5
bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIgfCBTcGVjVW5kZWZp
bmVkLCBpc05vdFVuZGVmaW5lZCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBzdGF0aWMg
Y29uc3QgZG91YmxlIE5hTiA9IFBOYU47CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZOYU4pLCByZXN1bHRGUFIpOworICAgICAgICAg
ICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgaXNOdW1iZXIubGlu
aygmbV9qaXQpOworICAgICAgICB9IGVsc2UgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxk
MSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CiAgICAgICAgICAgICB0eXBlQ2hlY2soCiAgICAg
ICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+
Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51bWJlciwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFu
Y2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0z
MihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICB1bmJv
eERvdWJsZShvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIHJlc3VsdEZQUiwgdGVtcEZQUik7Ci0g
ICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGRv
bmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgCiAgICAgICAgIGlzSW50ZWdlci5saW5rKCZt
X2ppdCk7CiAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMVBheWxvYWRHUFIs
IHJlc3VsdEZQUik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Vz
ZUtpbmQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdVc2VLaW5kLmNwcAppbmRl
eCBjMTU4MTQ5MWU3OGM0M2E1ZjAxYzUxZjU3OGNjNmZlYTNiZTFkODYzLi40NmRkNDEzYTM2MGY2
ZTc0NTliMGJkZjJmMDE3ZWY4ZTBkOTZhZDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1VzZUtpbmQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5jcHAKQEAgLTU1LDYgKzU1LDkgQEAgdm9pZCBwcmludEludGVybmFsKFByaW50
U3RyZWFtJiBvdXQsIFVzZUtpbmQgdXNlS2luZCkKICAgICBjYXNlIE51bWJlclVzZToKICAgICAg
ICAgb3V0LnByaW50KCJOdW1iZXIiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTnVtYmVy
T3JVbmRlZmluZWRVc2U6CisgICAgICAgIG91dC5wcmludCgiTnVtYmVyT3JVbmRlZmluZWQiKTsK
KyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgRG91YmxlUmVwVXNlOgogICAgICAgICBvdXQucHJp
bnQoIkRvdWJsZVJlcCIpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1VzZUtpbmQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVXNlS2luZC5oCmluZGV4IDI1ZTRjNTQyMjM3NDNiMWE0YmRlOGYxMjhlNTRhNzgyYWI0MzMy
OTUuLjA1YmFhMTU0ODQyZDI1MGExM2MwNThjNmFiZTEzNWFhMmRhYmJjMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHVXNlS2luZC5oCkBAIC00Niw2ICs0Niw3IEBAIGVudW0gVXNlS2lu
ZCB7CiAgICAgS25vd25JbnQzMlVzZSwKICAgICBNYWNoaW5lSW50VXNlLAogICAgIE51bWJlclVz
ZSwKKyAgICBOdW1iZXJPclVuZGVmaW5lZFVzZSwKICAgICBCb29sZWFuVXNlLAogICAgIENlbGxV
c2UsCiAgICAgS25vd25DZWxsVXNlLApAQCAtOTAsNiArOTEsOCBAQCBpbmxpbmUgU3BlY3VsYXRl
ZFR5cGUgdHlwZUZpbHRlckZvcihVc2VLaW5kIHVzZUtpbmQpCiAgICAgICAgIHJldHVybiBTcGVj
SW50MzIgfCBTcGVjSW50NTJBc0RvdWJsZTsKICAgICBjYXNlIE51bWJlclVzZToKICAgICAgICAg
cmV0dXJuIFNwZWNCeXRlY29kZU51bWJlcjsKKyAgICBjYXNlIE51bWJlck9yVW5kZWZpbmVkVXNl
OgorICAgICAgICByZXR1cm4gU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY1VuZGVmaW5lZDsKICAg
ICBjYXNlIERvdWJsZVJlcFVzZToKICAgICAgICAgcmV0dXJuIFNwZWNGdWxsRG91YmxlOwogICAg
IGNhc2UgRG91YmxlUmVwUmVhbFVzZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
Q2FwYWJpbGl0aWVzLmNwcAppbmRleCAxMTgyNTBmYjE1OGFiNWJjMDAxOTVkNTc3NWI1NDAxY2Fk
MTVmNDFmLi40MTEyNjgwNzk2ODM2YTAyMjY2YWMzMzBjNDc0ZGI2OGM2N2ViMGNiIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAKKysrIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCkBAIC00MDAsNiAr
NDAwLDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhbkNvbXBpbGUoR3JhcGgmIGdyYXBoKQogICAgICAg
ICAgICAgICAgIGNhc2UgS25vd25JbnQzMlVzZToKICAgICAgICAgICAgICAgICBjYXNlIEludDUy
UmVwVXNlOgogICAgICAgICAgICAgICAgIGNhc2UgTnVtYmVyVXNlOgorICAgICAgICAgICAgICAg
IGNhc2UgTnVtYmVyT3JVbmRlZmluZWRVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVS
ZXBVc2U6CiAgICAgICAgICAgICAgICAgY2FzZSBEb3VibGVSZXBSZWFsVXNlOgogICAgICAgICAg
ICAgICAgIGNhc2UgQm9vbGVhblVzZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMb3dlckRGR1RvTExWTS5jcHAKaW5kZXggZGE1ODIzNzBhZDA4NTMwMWRlOGY5ZjJkNDEyMWY4
NmRiMWYzZThiNC4uMTI3ZDNhODdhZjM0M2FjYjk3NmViM2NlZWU3MGM0OWQ4NzhiMzU4MSAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKQEAg
LTk1OCw5ICs5NTgsMTMgQEAgcHJpdmF0ZToKICAgICB2b2lkIGNvbXBpbGVEb3VibGVSZXAoKQog
ICAgIHsKICAgICAgICAgc3dpdGNoIChtX25vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAg
ICAgICBjYXNlIE51bWJlck9yVW5kZWZpbmVkVXNlOgogICAgICAgICBjYXNlIE51bWJlclVzZTog
eworICAgICAgICAgICAgYm9vbCBzaG91bGRDb252ZXJ0VW5kZWZpbmVkID0gbV9ub2RlLT5jaGls
ZDEoKS51c2VLaW5kKCkgPT0gTnVtYmVyT3JVbmRlZmluZWRVc2UKKyAgICAgICAgICAgICAgICAm
JiAocHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSAmIFNwZWNVbmRlZmluZWQpOworCiAgICAg
ICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCksIE1hbnVh
bE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBzZXREb3VibGUoanNWYWx1ZVRvRG91
YmxlKG1fbm9kZS0+Y2hpbGQxKCksIHZhbHVlKSk7CisgICAgICAgICAgICBzZXREb3VibGUoanNW
YWx1ZVRvRG91YmxlKG1fbm9kZS0+Y2hpbGQxKCksIHZhbHVlLCBzaG91bGRDb252ZXJ0VW5kZWZp
bmVkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAt
NzE4NywxMCArNzE5MSwxMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1fb3V0
LnN1YihtX291dC5iaXRDYXN0KGRvdWJsZVZhbHVlLCBtX291dC5pbnQ2NCksIG1fdGFnVHlwZU51
bWJlcik7CiAgICAgfQotICAgIExWYWx1ZSBqc1ZhbHVlVG9Eb3VibGUoRWRnZSBlZGdlLCBMVmFs
dWUgYm94ZWRWYWx1ZSkKKyAgICBMVmFsdWUganNWYWx1ZVRvRG91YmxlKEVkZ2UgZWRnZSwgTFZh
bHVlIGJveGVkVmFsdWUsIGJvb2wgc2hvdWxkQ29udmVydFVuZGVmaW5lZCkKICAgICB7CiAgICAg
ICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVU
b0RvdWJsZSB1bmJveGluZyBpbnQgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgZG91Ymxl
VGVzdGluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3Rpbmcg
ZG91YmxlIGNhc2UiKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZUNhc2UgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBkb3VibGUgY2FzZSIpKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcgdW5kZWZpbmVkIGNhc2UiKSk7CiAgICAgICAg
IExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1
ZVRvRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgICAgIAogICAgICAg
ICBMVmFsdWUgaXNOb3RJbnQzMjsKQEAgLTcyMDAsMjUgKzcyMDYsMzYgQEAgcHJpdmF0ZToKICAg
ICAgICAgICAgIGlzTm90SW50MzIgPSBtX291dC5ib29sZWFuVHJ1ZTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgaXNOb3RJbnQzMiA9IHRoaXMtPmlzTm90SW50MzIoYm94ZWRWYWx1ZSk7Ci0g
ICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyLCB1bnN1cmUoZG91YmxlQ2FzZSksIHVuc3Vy
ZShpbnRDYXNlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyLCB1bnN1cmUoZG91
YmxlVGVzdGluZyksIHVuc3VyZShpbnRDYXNlKSk7CiAgICAgICAgICAgICAKLSAgICAgICAgTEJh
c2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBkb3VibGVDYXNlKTsK
KyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNlLCBk
b3VibGVUZXN0aW5nKTsKICAgICAgICAgICAgIAogICAgICAgICBWYWx1ZUZyb21CbG9jayBpbnRU
b0RvdWJsZSA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmludFRvRG91YmxlKHVu
Ym94SW50MzIoYm94ZWRWYWx1ZSkpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24p
OwogICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIGNvbnRp
bnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgRlRMX1RZUEVfQ0hFQ0soCi0gICAgICAg
ICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1ZSksIGVkZ2UsIFNwZWNCeXRlY29kZU51bWJlciwg
aXNDZWxsT3JNaXNjKGJveGVkVmFsdWUpKTsKLSAgICAgICAgICAgIAorICAgICAgICBtX291dC5h
cHBlbmRUbyhkb3VibGVUZXN0aW5nLCBkb3VibGVDYXNlKTsKKyAgICAgICAgTFZhbHVlIHZhbHVl
SXNOdW1iZXIgPSBpc051bWJlcihib3hlZFZhbHVlKTsKKyAgICAgICAgbV9vdXQuYnJhbmNoKHZh
bHVlSXNOdW1iZXIsIHVzdWFsbHkoZG91YmxlQ2FzZSksIHJhcmVseSh1bmRlZmluZWRDYXNlKSk7
CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlQ2FzZSwgdW5kZWZpbmVkQ2FzZSk7CiAg
ICAgICAgIFZhbHVlRnJvbUJsb2NrIHVuYm94ZWREb3VibGUgPSBtX291dC5hbmNob3IodW5ib3hE
b3VibGUoYm94ZWRWYWx1ZSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7Ci0g
ICAgICAgICAgICAKKworICAgICAgICBtX291dC5hcHBlbmRUbyh1bmRlZmluZWRDYXNlLCBjb250
aW51YXRpb24pOworICAgICAgICBpZiAoc2hvdWxkQ29udmVydFVuZGVmaW5lZCkgeworICAgICAg
ICAgICAgaWYgKG1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRnZSwgU3BlY0J5dGVjb2Rl
TnVtYmVyIHwgU3BlY1VuZGVmaW5lZCkpIHsKKyAgICAgICAgICAgICAgICBMVmFsdWUgdmFsdWVJ
c05vdFVuZGVmaW5lZCA9IG1fb3V0Lm5vdEVxdWFsKGJveGVkVmFsdWUsIG1fb3V0LmNvbnN0SW50
NjQoVmFsdWVVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBGVExfVFlQRV9DSEVDSyhqc1Zh
bHVlVmFsdWUoYm94ZWRWYWx1ZSksIGVkZ2UsIFNwZWNCeXRlY29kZU51bWJlciwgdmFsdWVJc05v
dFVuZGVmaW5lZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAg
RlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGJveGVkVmFsdWUpLCBlZGdlLCBTcGVjQnl0ZWNv
ZGVOdW1iZXIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29u
dmVydGVkVW5kZWZpbmVkID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0RG91YmxlKFBOYU4pKTsK
KyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCiAgICAgICAgIG1fb3V0LmFwcGVu
ZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAgCi0gICAgICAgIHJldHVy
biBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUp
OworCisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3Vi
bGUsIHVuYm94ZWREb3VibGUsIGNvbnZlcnRlZFVuZGVmaW5lZCk7CiAgICAgfQogICAgIAogICAg
IExWYWx1ZSBqc1ZhbHVlVG9TdHJpY3RJbnQ1MihFZGdlIGVkZ2UsIExWYWx1ZSBib3hlZFZhbHVl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUt
cmVwLXdpdGgtdW5kZWZpbmVkLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9kb3VibGUtcmVwLXdpdGgtdW5kZWZpbmVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzZGQ4MGJhZGQ1Mjky
YTAwZTgzNDZhODFlMGJjOGVjZjljNjk0YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1yZXAtd2l0aC11bmRlZmluZWQuanMKQEAg
LTAsMCArMSwxNDMgQEAKKy8vIFVzaW5nIGZ1bGwgbnVtYmVyICsgdW5kZWZpbmVkIGZvciBtYXRo
LgorZnVuY3Rpb24gYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZChhLCBiKSB7CisgICAgcmV0dXJu
IGEgKyBiOworfQorbm9JbmxpbmUoYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVy
QW5kVW5kZWZpbmVkKGksIDEpOworICAgIGlmICh2YWx1ZSAhPT0gKGkgKyAxKSkKKyAgICAgICAg
dGhyb3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoaSwgMSkgZmFpbGVkIHdpdGggaSA9ICIg
KyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFk
ZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoMC41LCBpKTsKKyAgICBpZiAodmFsdWUgIT09IChpICsg
MC41KSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoMC41LCBpKSBm
YWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCisg
ICAgdmFyIHZhbHVlID0gYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIGkpOwor
ICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzTnVtYmVyQW5k
VW5kZWZpbmVkKHVuZGVmaW5lZCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5l
ZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRV
bmRlZmluZWQoaSwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAg
ICB0aHJvdyAiYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQpIGZhaWxlZCB3
aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIg
dmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKGkpOworICAgIGlmICh2YWx1ZSA9PT0g
dmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKGkpIGZhaWxl
ZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2
YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwgdW5kZWZpbmVk
KTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc051bWJl
ckFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCkgZmFpbGVkIHdpdGggaSA9ICIgKyBp
ICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFy
Z3NOdW1iZXJBbmRVbmRlZmluZWQoKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAg
ICB0aHJvdyAiYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCgpIGZhaWxlZCB3aXRoIGkgPSAiICsg
aSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9CisKKworLy8gVXNpbmcgaW50MzIg
KyB1bmRlZmluZWQgZm9yIG1hdGguCitmdW5jdGlvbiBhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQo
YSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NJbnQzMkFuZFVu
ZGVmaW5lZCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB2YXIgdmFs
dWUgPSBhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSwgMSk7CisgICAgaWYgKHZhbHVlICE9PSAo
aSArIDEpKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVkKGksIDEpIGZh
aWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAg
ICB2YXIgdmFsdWUgPSBhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQodW5kZWZpbmVkLCBpKTsKKyAg
ICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0ludDMyQW5kVW5k
ZWZpbmVkKHVuZGVmaW5lZCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2
YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQzMkFuZFVuZGVm
aW5lZChpLCB1bmRlZmluZWQpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRo
cm93ICJhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSwgdW5kZWZpbmVkKSBmYWlsZWQgd2l0aCBp
ID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCisgICAgdmFyIHZhbHVl
ID0gYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVkKGkpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUp
CisgICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSkgZmFpbGVkIHdpdGgg
aSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1
ZSA9IGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7CisgICAg
aWYgKHZhbHVlID09PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NJbnQzMkFuZFVuZGVm
aW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1
cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQzMkFu
ZFVuZGVmaW5lZCgpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJh
ZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVy
bmVkIHZhbHVlID0gIiArIHZhbHVlOworfQorCitmdW5jdGlvbiB0ZXN0RmFsbGJhY2tXaXRoRG91
YmxlKCkgeworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoTWF0aC5Q
SSwgTWF0aC5QSSk7CisgICAgaWYgKHZhbHVlICE9PSAyICogTWF0aC5QSSkKKyAgICAgICAgdGhy
b3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoTWF0aC5QSSwgTWF0aC5QSSkgZmFpbGVkIHdp
dGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKK30KK3Rlc3RGYWxs
YmFja1dpdGhEb3VibGUoKTsKKworCisvLyBVc2luZyBmdWxsIG51bWJlciArIHVuZGVmaW5lZCBm
b3IgbWF0aC4KK2Z1bmN0aW9uIGFkZEFyZ3NEb3VibGVBbmRVbmRlZmluZWQoYSwgYikgeworICAg
IHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NEb3VibGVBbmRVbmRlZmluZWQpOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IDFlNzsgKytpKSB7CisgICAgdmFyIHZhbHVlID0gYWRkQXJn
c0RvdWJsZUFuZFVuZGVmaW5lZCgwLjUsIGkpOworICAgIGlmICh2YWx1ZSAhPT0gKGkgKyAwLjUp
KQorICAgICAgICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZCgwLjUsIGkpIGZhaWxl
ZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2
YXIgdmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwgMC4xKTsKKyAg
ICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZFVu
ZGVmaW5lZCh1bmRlZmluZWQsIGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQg
dmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kVW5k
ZWZpbmVkKDAuNiwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAg
ICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQpIGZhaWxlZCB3
aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIg
dmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKDQyLjgpOworICAgIGlmICh2YWx1ZSA9
PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKGkpIGZh
aWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9CisK
K2Z1bmN0aW9uIHRlc3RGYWxsYmFja1dpdGhPYmplY3QoKSB7CisgICAgdmFyIHZhbHVlID0gYWRk
QXJnc0RvdWJsZUFuZFVuZGVmaW5lZChNYXRoLlBJLCB7IHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyBy
ZXR1cm4gNTsgfX0pOworICAgIGlmICh2YWx1ZSAhPT0gNSArIE1hdGguUEkpCisgICAgICAgIHRo
cm93ICJhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKE1hdGguUEksIHsgdmFsdWVPZjogZnVuY3Rp
b24oKSB7IHJldHVybiA1OyB9fSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2
YWx1ZSA9ICIgKyB2YWx1ZTsKK30KK3Rlc3RGYWxsYmFja1dpdGhPYmplY3QoKTsKKworCisvLyBV
c2luZyBmdWxsIG51bWJlciArIHVuZGVmaW5lZCBmb3IgbWF0aC4KK2Z1bmN0aW9uIGFkZEFyZ3NP
bmx5VW5kZWZpbmVkKGEsIGIpIHsKKyAgICByZXR1cm4gYSArIGI7Cit9Citub0lubGluZShhZGRB
cmdzT25seVVuZGVmaW5lZCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAg
ICB2YXIgdmFsdWUgPSBhZGRBcmdzT25seVVuZGVmaW5lZCh1bmRlZmluZWQsIGkpOworICAgIGlm
ICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzT25seVVuZGVmaW5lZCh1
bmRlZmluZWQsIGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAi
ICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzT25seVVuZGVmaW5lZChpLCB1bmRl
ZmluZWQpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdz
T25seVVuZGVmaW5lZChpLCB1bmRlZmluZWQpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0
dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzT25seVVu
ZGVmaW5lZChpKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRk
QXJnc09ubHlVbmRlZmluZWQoaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2
YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NPbmx5VW5kZWZpbmVk
KHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAg
ICB0aHJvdyAiYWRkQXJnc09ubHlVbmRlZmluZWQodW5kZWZpbmVkLCB1bmRlZmluZWQpIGZhaWxl
ZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2
YXIgdmFsdWUgPSBhZGRBcmdzT25seVVuZGVmaW5lZCgpOworICAgIGlmICh2YWx1ZSA9PT0gdmFs
dWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzT25seVVuZGVmaW5lZCgpIGZhaWxlZCB3aXRoIGkg
PSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9CisKK2Z1bmN0aW9uIHRl
c3RGYWxsYmFja1dpdGhTdHJpbmcoKSB7CisgICAgdmFyIHZhbHVlID0gYWRkQXJnc09ubHlVbmRl
ZmluZWQoImZvbyIsICJiYXIiKTsKKyAgICBpZiAodmFsdWUgIT09ICJmb29iYXIiKQorICAgICAg
ICB0aHJvdyAiYWRkQXJnc09ubHlVbmRlZmluZWQoXCJmb29cIiwgXCJiYXJcIikgZmFpbGVkIHdp
dGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKK30KK3Rlc3RGYWxs
YmFja1dpdGhTdHJpbmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggMzA3
OGFjYjk2YWE2NjBmYmI4Y2U5MzE1ZWMxOWIzMmJjMGMwM2I1Yy4uYmU1Njg1ZTM0NjgyOGYyODJh
ZTA5OGQ3NjFlYThhYjlmOTFkN2YwNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDE1LTA1LTIx
ICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgorCisgICAgICAgIFtKU0Nd
IEFkZCB1bmRlZmluZWQtPmRvdWJsZSBjb252ZXJzaW9uIHRvIERvdWJsZVJlcAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1MjkzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBqcy9yZWdyZXNzL21hdGgt
d2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLmh0
bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hdGgtd2l0aC1v
dXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5qczogQWRkZWQuCisKIDIwMTUtMDUtMTkgIENocmlz
IER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFjXSBGb250IGxvb2t1cHMg
YXJlIGZsYWtleSBkdWUgdG8gY2FjaGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1
ZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlYTBhNjk5OGM5NDEzYmU3ZTIzNWM4MTJiNzM3
ZWI1YjAxOGFmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21h
dGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy1leHBlY3RlZC50eHQKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcwor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3du
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1h
cnJheS12YWx1ZXMuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1v
Zi1ib3VuZHMtYXJyYXktdmFsdWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFlYWViMmNjYjc1NGJjODI3
YmI0N2ZjOTRjYTkxNjNiZTJiZmRhMgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLmh0bWwKQEAgLTAs
MCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4i
PgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVz
b3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVz
dHMvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5qcyBiL0xheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5
LXZhbHVlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjg4MmQ4ZTg5ZjkyMGIwOWMzNTA1ZDM4MTZkN2ZhNGU1
ZDRmMWNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLmpzCkBAIC0wLDAgKzEs
MTkgQEAKK2Z1bmN0aW9uIG1hdGhXaXRoT3V0T2ZCb3VuZHNBY2Nlc3MoYXJyYXlBLCBhcnJheUIp
Cit7CisgICAgdmFyIG91dHB1dCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytp
KSB7CisgICAgICAgIG91dHB1dCArPSAoYXJyYXlBW2ldICsgYXJyYXlCW2ldKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG91dHB1dDsKK30KKworbm9JbmxpbmUobWF0aFdpdGhPdXRPZkJvdW5kc0FjY2Vz
cyk7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIGludGVnZXJBcnJheSA9IFswLCAxLCAy
LCAzLCA0XTsKKyAgICB2YXIgZG91YmxlQXJyYXkgPSBbMC4xLCAxLjIsIDIuMywgMy40LCA0LjVd
OworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICAgICAgbWF0aFdpdGhP
dXRPZkJvdW5kc0FjY2VzcyhpbnRlZ2VyQXJyYXksIGRvdWJsZUFycmF5KTsKK30KK3Rlc3QoKTsK
XCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253606</attachid>
            <date>2015-05-22 14:24:47 -0700</date>
            <delta_ts>2015-05-22 21:42:59 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145293-20150522142441.patch</filename>
            <type>text/plain</type>
            <size>28087</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjkxYWNjMGI5YWM1NzFiZjVlNmNjZjk2MTNkODhlZTg3NmMxYTgwLi5iZTBmZWMwYmI5NDM1Njg2
ZDJmNjgzZmNmZThlZDM0YTMyZjM0NGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAxNS0wNS0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgdW5kZWZpbmVkLT5kb3VibGUgY29udmVyc2lvbiB0
byBEb3VibGVSZXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB1bmRlZmluZWQgdG8gZG91YmxlIGNvbnZlcnNpb24gdG8gdGhl
IERvdWJsZVJlcAorICAgICAgICBub2RlIGZvciB0aGUgY2FzZXMgd2VyZSB3ZSBzcGVjdWxhdGUg
InVuZGVmaW5lZCIgYXMgcGFydCBvZiB0aGUgdHlwZXMKKyAgICAgICAgcHJvY2Vzc2VkLgorCisg
ICAgICAgIFRoZSB1c2UgY2FzZSBpcyBkb2luZyBtYXRoIHdpdGggYWNjaWRlbnRhbCBvdXQtb2Yt
Ym91bmRzIGFjY2Vzcy4gRm9yIGV4YW1wbGUsCisgICAgICAgIHNvbWV0aGluZyBsaWtlOgorICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgb3VwdHB1dCArPSBhcnJheVtpXTsKKworICAgICAgICB3b3VsZCBjYXVzZSB1cyB0byBPU1Ig
ZXhpdCBldmVyeSB0aW1lIGkgPT09IGxlbmd0aC4KKworICAgICAgICBXaGVuIGhpdHRpbmcgb25l
IG9mIHRob3NlIGNhc2VzLCB3ZSB3b3VsZCBhbHJlYWR5IHNwZWN1bGF0ZSBkb3VibGUgbWF0aCwK
KyAgICAgICAgYnV0IHRoZSBEb3VibGVSZXAgbm9kZSB3YXMgdW5hYmxlIHRvIGNvbnZlcnQgdGhl
IHVuZGVmaW5lZCBhbmQgd291bGQgZXhpdC4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2ggdGhl
IHVzZSBraW5kIE5vdENlbGxVc2UgY292ZXIgdGhpcyBjb252ZXJzaW9uIGZvciBEb3VibGVSZXAu
CisgICAgICAgIEkgaGF2ZSBiZWVuIHF1aXRlIGNvbnNlcnZhdGl2ZSBzbyBpbiBnZW5lcmFsIHdl
IHdpbGwgbm90IGZpbmQgInVuZGVmaW5lZCIKKyAgICAgICAgdW50aWwgYSBmZXcgcmVjb21waWxl
IGJ1dCBiZWluZyBvcHRpbWlzdGljIHNlZW1zIGJldHRlciBzaW5jZSB0aGlzIGlzIGEgY29ybmVy
IGNhc2UuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIDgwJSBwcm9ncmVzc2lvbiBvbiBXZWJY
UFJUJ3MgRE5BIFNlcXVlbmNpbmcgdGVzdC4KKworICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpT
Qzo6c3BlY3VsYXRpb25Gcm9tVmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aW5qZWN0VHlwZUNvbnZlcnNpb25zRm9yRWRnZSk6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzYXdV
bmRlZmluZWQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3Bh
Z2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZURvdWJsZVJlcCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuY3BwOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5oOgorICAgICAg
ICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbXBpbGVEb3VibGVSZXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpq
c1ZhbHVlVG9Eb3VibGUpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgt
dW5kZWZpbmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQp
OgorICAgICAgICAoYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVkKToKKyAgICAgICAgKHRlc3RGYWxs
YmFja1dpdGhEb3VibGUpOgorICAgICAgICAoYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZCk6Cisg
ICAgICAgICh0ZXN0RmFsbGJhY2tXaXRoT2JqZWN0Lik6CisgICAgICAgICh0ZXN0RmFsbGJhY2tX
aXRoT2JqZWN0KToKKyAgICAgICAgKGFkZEFyZ3NPbmx5VW5kZWZpbmVkKToKKyAgICAgICAgKHRl
c3RGYWxsYmFja1dpdGhTdHJpbmcpOgorCiAyMDE1LTA1LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04oMTgzNzg3KTogSklUIGlzIGVu
YWJsZWQgZm9yIGFsbCBidWlsZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9TcGVjdWxhdGVkVHlwZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvU3BlY3VsYXRlZFR5cGUuY3BwCmluZGV4IGNhOTUxNGMwMTEzZGI2MDRiNDI1YTdkMDcxNDA3
Zjk4Y2YwY2RmMjguLjhiYjYxNThhOWU0YWQzZTQzNTAyMDQyN2Y0ZDZhNzkyOWE4MGY2YjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5j
cHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmNw
cApAQCAtMjA3LDggKzIwNywxMyBAQCB2b2lkIGR1bXBTcGVjdWxhdGlvbihQcmludFN0cmVhbSYg
b3V0LCBTcGVjdWxhdGVkVHlwZSB2YWx1ZSkKICAgICBlbHNlCiAgICAgICAgIGlzVG9wID0gZmFs
c2U7CiAgICAgCi0gICAgaWYgKHZhbHVlICYgU3BlY090aGVyKQotICAgICAgICBteU91dC5wcmlu
dCgiT3RoZXIiKTsKKyAgICBpZiAodmFsdWUgJiBTcGVjVW5kZWZpbmVkKQorICAgICAgICBteU91
dC5wcmludCgiVW5kZWZpbmVkIik7CisgICAgZWxzZQorICAgICAgICBpc1RvcCA9IGZhbHNlOwor
CisgICAgaWYgKHZhbHVlICYgU3BlY051bGwpCisgICAgICAgIG15T3V0LnByaW50KCJOdWxsIik7
CiAgICAgZWxzZQogICAgICAgICBpc1RvcCA9IGZhbHNlOwogICAgIApAQCAtMzkyLDcgKzM5Nyw5
IEBAIFNwZWN1bGF0ZWRUeXBlIHNwZWN1bGF0aW9uRnJvbVZhbHVlKEpTVmFsdWUgdmFsdWUpCiAg
ICAgaWYgKHZhbHVlLmlzQm9vbGVhbigpKQogICAgICAgICByZXR1cm4gU3BlY0Jvb2xlYW47CiAg
ICAgQVNTRVJUKHZhbHVlLmlzVW5kZWZpbmVkT3JOdWxsKCkpOwotICAgIHJldHVybiBTcGVjT3Ro
ZXI7CisgICAgaWYgKHZhbHVlLmlzVW5kZWZpbmVkKCkpCisgICAgICAgIHJldHVybiBTcGVjVW5k
ZWZpbmVkOworICAgIHJldHVybiBTcGVjTnVsbDsKIH0KIAogVHlwZWRBcnJheVR5cGUgdHlwZWRB
cnJheVR5cGVGcm9tU3BlY3VsYXRpb24oU3BlY3VsYXRlZFR5cGUgdHlwZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9TcGVjdWxhdGVkVHlwZS5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1NwZWN1bGF0ZWRUeXBlLmgKaW5kZXggYmQwNDVjM2Fj
NDQ1NzA2ZjliYzg1ZDRmNWIzODNjNjg4ZGMzZGRjMi4uODhjYTA2MDk5NGY4OWRmY2M0YTkyMmZk
YzBiYTFiM2I2N2NkNDI1MSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1NwZWN1bGF0ZWRUeXBlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1NwZWN1bGF0ZWRUeXBlLmgKQEAgLTgyLDEyICs4MiwxNCBAQCBzdGF0aWMgY29uc3QgU3BlY3Vs
YXRlZFR5cGUgU3BlY0Z1bGxSZWFsTnVtYmVyICAgICA9IDB4MDFmMDAwMDA7IC8vIEl0J3MgZWl0
aGVyCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0J5dGVjb2RlTnVtYmVyICAgICA9
IDB4MDNiMDAwMDA7IC8vIEl0J3MgZWl0aGVyIGFuIEludDMyIG9yIGEgRG91YmxlLCBhbmQgdGhl
IERvdWJsZSBjYW5ub3QgYmUgYW4gaW1wdXJlIE5hTi4KIHN0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjRnVsbE51bWJlciAgICAgICAgID0gMHgwN2YwMDAwMDsgLy8gSXQncyBlaXRoZXIg
YW4gSW50MzIsIEludDUyLCBvciBhIERvdWJsZSwgYW5kIHRoZSBEb3VibGUgY2FuIGJlIGltcHVy
ZSBOYU4uCiBzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0Jvb2xlYW4gICAgICAgICAg
ICA9IDB4MTAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBhIEJvb2xlYW4uCi1zdGF0aWMgY29u
c3QgU3BlY3VsYXRlZFR5cGUgU3BlY090aGVyICAgICAgICAgICAgICA9IDB4MjAwMDAwMDA7IC8v
IEl0J3MgZGVmaW5pdGVseSBlaXRoZXIgTnVsbCBvciBVbmRlZmluZWQuCi1zdGF0aWMgY29uc3Qg
U3BlY3VsYXRlZFR5cGUgU3BlY01pc2MgICAgICAgICAgICAgICA9IDB4MzAwMDAwMDA7IC8vIEl0
J3MgZGVmaW5pdGVseSBlaXRoZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmluZWQuCi1zdGF0
aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3BlY0hlYXBUb3AgICAgICAgICAgICA9IDB4M2JiZmZm
ZmY7IC8vIEl0IGNhbiBiZSBhbnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mi4K
LXN0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMHg0
MDAwMDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KLXN0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjQnl0ZWNvZGVUb3AgICAgICAgID0gMHg3YmJmZmZm
ZjsgLy8gSXQgY2FuIGJlIGFueSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3BlY0ludDUyLgot
c3RhdGljIGNvbnN0IFNwZWN1bGF0ZWRUeXBlIFNwZWNGdWxsVG9wICAgICAgICAgICAgPSAweDdm
ZmZmZmZmOyAvLyBJdCBjYW4gYmUgYW55IG9mIHRoZSBhYm92ZSBwbHVzIGFueXRoaW5nIHRoZSBE
RkcgY2hvb3Nlcy4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjVW5kZWZpbmVkICAg
ICAgICAgID0gMHgyMDAwMDAwMDsgLy8gSXQncyBkZWZpbml0ZWx5IFVuZGVmaW5lZC4KK3N0YXRp
YyBjb25zdCBTcGVjdWxhdGVkVHlwZSBTcGVjTnVsbCAgICAgICAgICAgICAgID0gMHg0MDAwMDAw
MDsgLy8gSXQncyBkZWZpbml0ZWx5IE51bGwuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUg
U3BlY090aGVyICAgICAgICAgICAgICA9IDB4NjAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBl
aXRoZXIgTnVsbCBvciBVbmRlZmluZWQuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRlZFR5cGUgU3Bl
Y01pc2MgICAgICAgICAgICAgICA9IDB4NzAwMDAwMDA7IC8vIEl0J3MgZGVmaW5pdGVseSBlaXRo
ZXIgYSBib29sZWFuLCBOdWxsLCBvciBVbmRlZmluZWQuCitzdGF0aWMgY29uc3QgU3BlY3VsYXRl
ZFR5cGUgU3BlY0hlYXBUb3AgICAgICAgICAgICA9IDB4N2JiZmZmZmY7IC8vIEl0IGNhbiBiZSBh
bnkgb2YgdGhlIGFib3ZlLCBleGNlcHQgZm9yIFNwZWNJbnQ1Mi4KK3N0YXRpYyBjb25zdCBTcGVj
dWxhdGVkVHlwZSBTcGVjRW1wdHkgICAgICAgICAgICAgID0gMHg4MDAwMDAwMDsgLy8gSXQncyBk
ZWZpbml0ZWx5IGFuIGVtcHR5IHZhbHVlIG1hcmtlci4KK3N0YXRpYyBjb25zdCBTcGVjdWxhdGVk
VHlwZSBTcGVjQnl0ZWNvZGVUb3AgICAgICAgID0gMHhmYmJmZmZmZjsgLy8gSXQgY2FuIGJlIGFu
eSBvZiB0aGUgYWJvdmUsIGV4Y2VwdCBmb3IgU3BlY0ludDUyLgorc3RhdGljIGNvbnN0IFNwZWN1
bGF0ZWRUeXBlIFNwZWNGdWxsVG9wICAgICAgICAgICAgPSAweGZmZmZmZmZmOyAvLyBJdCBjYW4g
YmUgYW55IG9mIHRoZSBhYm92ZSBwbHVzIGFueXRoaW5nIHRoZSBERkcgY2hvb3Nlcy4KIAogdHlw
ZWRlZiBib29sICgqU3BlY3VsYXRlZFR5cGVDaGVja2VyKShTcGVjdWxhdGVkVHlwZSk7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRl
cklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAppbmRleCAxN2VhYjA5NWNhOWU3MmI2YjZiYTlkOTJjY2I5ZTgzY2Y2MmY5
MjI0Li5hZDY4Nzg0MDU2MDZkODg2MjQ4NmQzZGEyZDhmYWEwN2RlZDA4NmUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oCkBAIC0zNjAsNyArMzYwLDI4IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxB
YnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAg
ICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0RvdWJsZU51bWJlcihjaGlsZC5hc051bWJl
cigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5v
ZGUpLnNldFR5cGUobV9ncmFwaCwgZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsKKwor
ICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90
eXBlOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAg
ICBjYXNlIE5vdENlbGxVc2U6IHsKKyAgICAgICAgICAgIHR5cGUgJj0gKFNwZWNCeXRlY29kZU51
bWJlciB8IFNwZWNVbmRlZmluZWQpOworICAgICAgICAgICAgaWYgKHR5cGUgJiBTcGVjVW5kZWZp
bmVkKSB7CisgICAgICAgICAgICAgICAgdHlwZSAmPSB+U3BlY1VuZGVmaW5lZDsKKyAgICAgICAg
ICAgICAgICB0eXBlIHw9IFNwZWNEb3VibGVQdXJlTmFOOworICAgICAgICAgICAgfQorICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIH0KKworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgICAgIGNh
c2UgSW50NTJSZXBVc2U6CisjZW5kaWYKKyAgICAgICAgY2FzZSBOdW1iZXJVc2U6CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5
cGUodHlwZSk7CiAgICAgICAgIGZvck5vZGUobm9kZSkuZml4VHlwZUZvclJlcHJlc2VudGF0aW9u
KG1fZ3JhcGgsIG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCAwMjFmMTQ2ZjA2YzZjM2ZlYmU0Zjky
OTBkOGNlNDg0NTMyMzExYTZkLi5iM2Q0NTM2NTYwMzkzZjVkOWY3YzRjNzZlODY4OWRhM2ViN2Jk
YzE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAg
LTIxMjQsOSArMjEyNCwxMyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBtX2luZGV4
SW5CbG9jaywgU3BlY0ludDUyQXNEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAogICAg
ICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBJbnQ1MlJlcFVzZSkpOwogICAgICAg
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBVc2VLaW5kIHVzZUtpbmQgPSBOdW1iZXJV
c2U7CisgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPnNhd1VuZGVmaW5lZCgpKQorICAgICAgICAg
ICAgICAgICAgICB1c2VLaW5kID0gTm90Q2VsbFVzZTsKKwogICAgICAgICAgICAgICAgIHJlc3Vs
dCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUoCiAgICAgICAgICAgICAgICAgICAgIG1faW5k
ZXhJbkJsb2NrLCBTcGVjQnl0ZWNvZGVEb3VibGUsIERvdWJsZVJlcCwgbm9kZS0+b3JpZ2luLAot
ICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCBOdW1iZXJVc2UpKTsKKyAgICAg
ICAgICAgICAgICAgICAgRWRnZShlZGdlLm5vZGUoKSwgdXNlS2luZCkpOwogICAgICAgICAgICAg
fQogCiAgICAgICAgICAgICBlZGdlLnNldE5vZGUocmVzdWx0KTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdOb2RlLmgKaW5kZXggOGRiNThhN2VkMjgzMmMxOTZiZjg5NTNiZjA5MGUxZDE4N2IzZTA1
My4uOWMyZTkzOWUxOGQ1OTljMDcyODFmMWFiOTk5MDJjMDJmMGNlZTlmMiAxMDA2NDQKLS0tIGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdOb2RlLmgKQEAgLTE3MTksNyArMTcxOSwxMiBAQCBzdHJ1Y3QgTm9kZSB7
CiAgICAgewogICAgICAgICByZXR1cm4gISEocHJlZGljdGlvbigpICYgU3BlY0Jvb2xlYW4pOwog
ICAgIH0KLSAgICAKKworICAgIGJvb2wgc2F3VW5kZWZpbmVkKCkKKyAgICB7CisgICAgICAgIHJl
dHVybiAhIShwcmVkaWN0aW9uKCkgJiBTcGVjVW5kZWZpbmVkKTsKKyAgICB9CisKICAgICBib29s
IHNob3VsZFNwZWN1bGF0ZUludDMyT3JCb29sZWFuKCkKICAgICB7CiAgICAgICAgIHJldHVybiBp
c0ludDMyT3JCb29sZWFuU3BlY3VsYXRpb24ocHJlZGljdGlvbigpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKaW5kZXggM2RmODgxMjk1ODM5MjZhNzk5MjI5ODQyMDNlNmRlNjM4YmQ2NjRiZi4uY2Rl
MDliZjEyMWIyMWY4YTRmZWI2MGRmYTI0ZmI0MjBiNmE5YmFiYSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFz
ZS5jcHAKQEAgLTQwMiw2ICs0MDIsMTIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBTcGVj
Tm9uZSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUo
KSkgeworICAgICAgICAgICAgY2FzZSBBcnJheTo6SW50MzI6CisgICAgICAgICAgICAgICAgaWYg
KGFycmF5TW9kZS5pc091dE9mQm91bmRzKCkpCisgICAgICAgICAgICAgICAgICAgIGNoYW5nZWQg
fD0gbWVyZ2VQcmVkaWN0aW9uKG5vZGUtPmdldEhlYXBQcmVkaWN0aW9uKCkgfCBTcGVjSW50MzIp
OworICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBt
ZXJnZVByZWRpY3Rpb24oU3BlY0ludDMyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgICAgIGNhc2UgQXJyYXk6OkRvdWJsZToKICAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2Rl
LmlzT3V0T2ZCb3VuZHMoKSkKICAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVBy
ZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSB8IFNwZWNEb3VibGVSZWFsKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKaW5kZXgg
NDZmYzkwYmI5ZjVhNGQ4NTRkYTE4NjRlM2Q3ODkyNDVlZDI1ODRlNS4uYWY3MGE0ZjFhNGI0ZWI3
MGZkM2Q1ODBkMWVjMmRhYWE5YmU2M2MxYyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKQEAgLTIwNjQsMzEgKzIwNjQsNDggQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZUFzSW50MzIoTm9kZSogbm9kZSkKIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVSZXAoTm9kZSogbm9kZSkKIHsKICAgICBzd2l0Y2gg
KG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgIGNhc2UgTm90Q2VsbFVzZToKICAgICBj
YXNlIE51bWJlclVzZTogewogICAgICAgICBBU1NFUlQoIW5vZGUtPmNoaWxkMSgpLT5pc051bWJl
ckNvbnN0YW50KCkpOyAvLyBUaGlzIHNob3VsZCBoYXZlIGJlZW4gY29uc3RhbnQgZm9sZGVkLgot
ICAgIAotICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKG1fc3RhdGUuZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlKSkgeworCisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBvc3NpYmxl
VHlwZXMgPSBtX3N0YXRlLmZvck5vZGUobm9kZS0+Y2hpbGQxKCkpLm1fdHlwZTsKKyAgICAgICAg
aWYgKGlzSW50MzJTcGVjdWxhdGlvbihwb3NzaWJsZVR5cGVzKSkgewogICAgICAgICAgICAgU3Bl
Y3VsYXRlSW50MzJPcGVyYW5kIG9wMSh0aGlzLCBub2RlLT5jaGlsZDEoKSwgTWFudWFsT3BlcmFu
ZFNwZWN1bGF0aW9uKTsKICAgICAgICAgICAgIEZQUlRlbXBvcmFyeSByZXN1bHQodGhpcyk7CiAg
ICAgICAgICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDEuZ3ByKCksIHJlc3VsdC5m
cHIoKSk7CiAgICAgICAgICAgICBkb3VibGVSZXN1bHQocmVzdWx0LmZwcigpLCBub2RlKTsKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIAorCisgICAgICAgIGJvb2wgc2hvdWxk
Q29udmVydFVuZGVmaW5lZCA9IG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBOb3RDZWxsVXNl
ICYmIChwb3NzaWJsZVR5cGVzICYgU3BlY1VuZGVmaW5lZCk7CisKICAgICAgICAgSlNWYWx1ZU9w
ZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24p
OwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAorCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAKICAgICAgICAgR1BS
UmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdw
cigpOwogICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOwotICAgIAorICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKKwogICAgICAgICBKSVRDb21waWxlcjo6
SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1i
bGVyOjpBYm92ZU9yRXF1YWwsIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVy
KTsKLSAgICAKLSAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVj
Qnl0ZWNvZGVOdW1iZXIpKSB7CisKKyAgICAgICAgaWYgKHNob3VsZENvbnZlcnRVbmRlZmluZWQp
IHsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNo
VGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpOb25aZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVO
dW1iZXJSZWdpc3Rlcik7CisKKyAgICAgICAgICAgIGlmIChuZWVkc1R5cGVDaGVjayhub2RlLT5j
aGlsZDEoKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY1VuZGVmaW5lZCkpIHsKKyAgICAgICAg
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc05vdFVuZGVmaW5lZCA9IG1faml0LmJyYW5jaDY0
KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgb3AxR1BSLCBUcnVzdGVkSW1tNjQoVmFsdWVVbmRlZmlu
ZWQpKTsKKyAgICAgICAgICAgICAgICB0eXBlQ2hlY2soSlNWYWx1ZVJlZ3Mob3AxR1BSKSwgbm9k
ZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51bWJlciB8IFNwZWNVbmRlZmluZWQsIGlzTm90VW5k
ZWZpbmVkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUg
TmFOID0gUE5hTjsKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoJk5hTiksIHJlc3VsdEZQUik7CisgICAgICAgICAgICBkb25lLmFwcGVu
ZChtX2ppdC5qdW1wKCkpOworCisgICAgICAgICAgICBpc051bWJlci5saW5rKCZtX2ppdCk7Cisg
ICAgICAgIH0gZWxzZSBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRl
Y29kZU51bWJlcikpIHsKICAgICAgICAgICAgIHR5cGVDaGVjaygKICAgICAgICAgICAgICAgICBK
U1ZhbHVlUmVncyhvcDFHUFIpLCBub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlTnVtYmVyLAog
ICAgICAgICAgICAgICAgIG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6WmVybywg
b3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpKTsKQEAgLTIwOTYsNyArMjEx
Myw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVSZXAoTm9kZSogbm9kZSkK
ICAgICAKICAgICAgICAgbV9qaXQubW92ZShvcDFHUFIsIHRlbXBHUFIpOwogICAgICAgICB1bmJv
eERvdWJsZSh0ZW1wR1BSLCByZXN1bHRGUFIpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBk
b25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBkb25lLmFwcGVuZChtX2ppdC5qdW1wKCkpOwog
ICAgIAogICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwogICAgICAgICBtX2ppdC5jb252
ZXJ0SW50MzJUb0RvdWJsZShvcDFHUFIsIHJlc3VsdEZQUik7CkBAIC0yMTA4LDE4ICsyMTI1LDMx
IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVSZXAoTm9kZSogbm9kZSkKICAg
ICAgICAgR1BSUmVnIG9wMVBheWxvYWRHUFIgPSBvcDEucGF5bG9hZEdQUigpOwogICAgICAgICBG
UFJSZWcgdGVtcEZQUiA9IHRlbXAuZnByKCk7CiAgICAgICAgIEZQUlJlZyByZXN1bHRGUFIgPSBy
ZXN1bHQuZnByKCk7CisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBkb25lOwogICAgIAog
ICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2gzMigKICAg
ICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6SW50MzJUYWcpKTsKLSAgICAKLSAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5v
ZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisKKyAgICAgICAgaWYgKHNob3Vs
ZENvbnZlcnRVbmRlZmluZWQpIHsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVt
YmVyID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkJlbG93LCBvcDFUYWdHUFIsIEpJVENv
bXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOworCisgICAgICAg
ICAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51bWJl
ciB8IFNwZWNVbmRlZmluZWQpKSB7CisgICAgICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNOb3RVbmRlZmluZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6Tm90RXF1YWwsIG9w
MVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpOworICAgICAgICAg
ICAgICAgIHR5cGVDaGVjayhKU1ZhbHVlUmVncyhvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIpLCBu
b2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY1VuZGVmaW5lZCwgaXNOb3RV
bmRlZmluZWQpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJs
ZSBOYU4gPSBQTmFOOworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxl
cjo6VHJ1c3RlZEltbVB0cigmTmFOKSwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1faml0KTsK
KyAgICAgICAgfSBlbHNlIGlmIChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY0J5
dGVjb2RlTnVtYmVyKSkgewogICAgICAgICAgICAgdHlwZUNoZWNrKAogICAgICAgICAgICAgICAg
IEpTVmFsdWVSZWdzKG9wMVRhZ0dQUiwgb3AxUGF5bG9hZEdQUiksIG5vZGUtPmNoaWxkMSgpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoTWFjcm9B
c3NlbWJsZXI6OkFib3ZlT3JFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6
TG93ZXN0VGFnKSkpOwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgdW5ib3hEb3VibGUob3Ax
VGFnR1BSLCBvcDFQYXlsb2FkR1BSLCByZXN1bHRGUFIsIHRlbXBGUFIpOwotICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOworICAgICAgICBkb25lLmFwcGVuZCht
X2ppdC5qdW1wKCkpOwogICAgIAogICAgICAgICBpc0ludGVnZXIubGluaygmbV9qaXQpOwogICAg
ICAgICBtX2ppdC5jb252ZXJ0SW50MzJUb0RvdWJsZShvcDFQYXlsb2FkR1BSLCByZXN1bHRGUFIp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcApp
bmRleCBkYTU4MjM3MGFkMDg1MzAxZGU4ZjlmMmQ0MTIxZjg2ZGIxZjNlOGI0Li44MmE1Y2E1NjZj
ZDk4NTlhZjk4MmI2YWZlOWE5YWUyMWRkZGY2ODU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcApAQCAtOTU4LDkgKzk1OCwxMyBAQCBwcml2
YXRlOgogICAgIHZvaWQgY29tcGlsZURvdWJsZVJlcCgpCiAgICAgewogICAgICAgICBzd2l0Y2gg
KG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgICAgIGNhc2UgTm90Q2VsbFVzZToK
ICAgICAgICAgY2FzZSBOdW1iZXJVc2U6IHsKKyAgICAgICAgICAgIGJvb2wgc2hvdWxkQ29udmVy
dFVuZGVmaW5lZCA9IG1fbm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE5vdENlbGxVc2UKKyAg
ICAgICAgICAgICAgICAmJiAocHJvdmVuVHlwZShtX25vZGUtPmNoaWxkMSgpKSAmIFNwZWNVbmRl
ZmluZWQpOworCiAgICAgICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+
Y2hpbGQxKCksIE1hbnVhbE9wZXJhbmRTcGVjdWxhdGlvbik7Ci0gICAgICAgICAgICBzZXREb3Vi
bGUoanNWYWx1ZVRvRG91YmxlKG1fbm9kZS0+Y2hpbGQxKCksIHZhbHVlKSk7CisgICAgICAgICAg
ICBzZXREb3VibGUoanNWYWx1ZVRvRG91YmxlKG1fbm9kZS0+Y2hpbGQxKCksIHZhbHVlLCBzaG91
bGRDb252ZXJ0VW5kZWZpbmVkKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAg
ICAgICAgICAgIApAQCAtNzE4NywxMCArNzE5MSwxMiBAQCBwcml2YXRlOgogICAgIHsKICAgICAg
ICAgcmV0dXJuIG1fb3V0LnN1YihtX291dC5iaXRDYXN0KGRvdWJsZVZhbHVlLCBtX291dC5pbnQ2
NCksIG1fdGFnVHlwZU51bWJlcik7CiAgICAgfQotICAgIExWYWx1ZSBqc1ZhbHVlVG9Eb3VibGUo
RWRnZSBlZGdlLCBMVmFsdWUgYm94ZWRWYWx1ZSkKKyAgICBMVmFsdWUganNWYWx1ZVRvRG91Ymxl
KEVkZ2UgZWRnZSwgTFZhbHVlIGJveGVkVmFsdWUsIGJvb2wgc2hvdWxkQ29udmVydFVuZGVmaW5l
ZCkKICAgICB7CiAgICAgICAgIExCYXNpY0Jsb2NrIGludENhc2UgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBpbnQgY2FzZSIpKTsKKyAgICAgICAgTEJh
c2ljQmxvY2sgZG91YmxlVGVzdGluZyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRv
RG91YmxlIHRlc3RpbmcgZG91YmxlIGNhc2UiKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJs
ZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBk
b3VibGUgY2FzZSIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgdW5kZWZpbmVkQ2FzZSA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcgdW5kZWZpbmVkIGNh
c2UiKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9ORVdfQkxPQ0so
bV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHVuYm94aW5nIGNvbnRpbnVhdGlvbiIpKTsKICAgICAg
ICAgICAgIAogICAgICAgICBMVmFsdWUgaXNOb3RJbnQzMjsKQEAgLTcyMDAsMjUgKzcyMDYsMzYg
QEAgcHJpdmF0ZToKICAgICAgICAgICAgIGlzTm90SW50MzIgPSBtX291dC5ib29sZWFuVHJ1ZTsK
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgaXNOb3RJbnQzMiA9IHRoaXMtPmlzTm90SW50MzIo
Ym94ZWRWYWx1ZSk7Ci0gICAgICAgIG1fb3V0LmJyYW5jaChpc05vdEludDMyLCB1bnN1cmUoZG91
YmxlQ2FzZSksIHVuc3VyZShpbnRDYXNlKSk7CisgICAgICAgIG1fb3V0LmJyYW5jaChpc05vdElu
dDMyLCB1bnN1cmUoZG91YmxlVGVzdGluZyksIHVuc3VyZShpbnRDYXNlKSk7CiAgICAgICAgICAg
ICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpbnRDYXNl
LCBkb3VibGVDYXNlKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpbnRDYXNlLCBkb3VibGVUZXN0aW5nKTsKICAgICAgICAgICAgIAogICAgICAgICBWYWx1
ZUZyb21CbG9jayBpbnRUb0RvdWJsZSA9IG1fb3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0
LmludFRvRG91YmxlKHVuYm94SW50MzIoYm94ZWRWYWx1ZSkpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGRv
dWJsZUNhc2UsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKLSAgICAgICAgRlRMX1RZUEVf
Q0hFQ0soCi0gICAgICAgICAgICBqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1ZSksIGVkZ2UsIFNwZWNC
eXRlY29kZU51bWJlciwgaXNDZWxsT3JNaXNjKGJveGVkVmFsdWUpKTsKLSAgICAgICAgICAgIAor
ICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVUZXN0aW5nLCBkb3VibGVDYXNlKTsKKyAgICAg
ICAgTFZhbHVlIHZhbHVlSXNOdW1iZXIgPSBpc051bWJlcihib3hlZFZhbHVlKTsKKyAgICAgICAg
bV9vdXQuYnJhbmNoKHZhbHVlSXNOdW1iZXIsIHVzdWFsbHkoZG91YmxlQ2FzZSksIHJhcmVseSh1
bmRlZmluZWRDYXNlKSk7CisKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlQ2FzZSwgdW5k
ZWZpbmVkQ2FzZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHVuYm94ZWREb3VibGUgPSBtX291
dC5hbmNob3IodW5ib3hEb3VibGUoYm94ZWRWYWx1ZSkpOwogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7Ci0gICAgICAgICAgICAKKworICAgICAgICBtX291dC5hcHBlbmRUbyh1bmRl
ZmluZWRDYXNlLCBjb250aW51YXRpb24pOworICAgICAgICBpZiAoc2hvdWxkQ29udmVydFVuZGVm
aW5lZCkgeworICAgICAgICAgICAgaWYgKG1faW50ZXJwcmV0ZXIubmVlZHNUeXBlQ2hlY2soZWRn
ZSwgU3BlY0J5dGVjb2RlTnVtYmVyIHwgU3BlY1VuZGVmaW5lZCkpIHsKKyAgICAgICAgICAgICAg
ICBMVmFsdWUgdmFsdWVJc05vdFVuZGVmaW5lZCA9IG1fb3V0Lm5vdEVxdWFsKGJveGVkVmFsdWUs
IG1fb3V0LmNvbnN0SW50NjQoVmFsdWVVbmRlZmluZWQpKTsKKyAgICAgICAgICAgICAgICBGVExf
VFlQRV9DSEVDSyhqc1ZhbHVlVmFsdWUoYm94ZWRWYWx1ZSksIGVkZ2UsIFNwZWNCeXRlY29kZU51
bWJlciwgdmFsdWVJc05vdFVuZGVmaW5lZCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxz
ZQorICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGJveGVkVmFsdWUpLCBl
ZGdlLCBTcGVjQnl0ZWNvZGVOdW1iZXIsIG1fb3V0LmJvb2xlYW5UcnVlKTsKKyAgICAgICAgVmFs
dWVGcm9tQmxvY2sgY29udmVydGVkVW5kZWZpbmVkID0gbV9vdXQuYW5jaG9yKG1fb3V0LmNvbnN0
RG91YmxlKFBOYU4pKTsKKyAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCiAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwotICAgICAgICAgICAg
Ci0gICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUs
IHVuYm94ZWREb3VibGUpOworCisgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuZG91Ymxl
VHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUsIGNvbnZlcnRlZFVuZGVmaW5lZCk7CiAg
ICAgfQogICAgIAogICAgIExWYWx1ZSBqc1ZhbHVlVG9TdHJpY3RJbnQ1MihFZGdlIGVkZ2UsIExW
YWx1ZSBib3hlZFZhbHVlKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9kb3VibGUtcmVwLXdpdGgtdW5kZWZpbmVkLmpzIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgtdW5kZWZpbmVkLmpzCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUzZGQ4MGJhZGQ1MjkyYTAwZTgzNDZhODFlMGJjOGVjZjljNjk0YTAKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1yZXAtd2l0aC11
bmRlZmluZWQuanMKQEAgLTAsMCArMSwxNDMgQEAKKy8vIFVzaW5nIGZ1bGwgbnVtYmVyICsgdW5k
ZWZpbmVkIGZvciBtYXRoLgorZnVuY3Rpb24gYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZChhLCBi
KSB7CisgICAgcmV0dXJuIGEgKyBiOworfQorbm9JbmxpbmUoYWRkQXJnc051bWJlckFuZFVuZGVm
aW5lZCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB2YXIgdmFsdWUg
PSBhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKGksIDEpOworICAgIGlmICh2YWx1ZSAhPT0gKGkg
KyAxKSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoaSwgMSkgZmFp
bGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAg
IHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoMC41LCBpKTsKKyAgICBpZiAo
dmFsdWUgIT09IChpICsgMC41KSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRl
ZmluZWQoMC41LCBpKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0g
IiArIHZhbHVlOworCisgICAgdmFyIHZhbHVlID0gYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCh1
bmRlZmluZWQsIGkpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJh
ZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwgaSkgZmFpbGVkIHdpdGggaSA9ICIg
KyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFk
ZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoaSwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09
IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZChpLCB1bmRl
ZmluZWQpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFs
dWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKGkpOworICAg
IGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzTnVtYmVyQW5kVW5k
ZWZpbmVkKGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsg
dmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKHVuZGVm
aW5lZCwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJv
dyAiYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCkgZmFpbGVk
IHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZh
ciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoKTsKKyAgICBpZiAodmFsdWUgPT09
IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCgpIGZhaWxl
ZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9CisKKwor
Ly8gVXNpbmcgaW50MzIgKyB1bmRlZmluZWQgZm9yIG1hdGguCitmdW5jdGlvbiBhZGRBcmdzSW50
MzJBbmRVbmRlZmluZWQoYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFk
ZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kp
IHsKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSwgMSk7CisgICAg
aWYgKHZhbHVlICE9PSAoaSArIDEpKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0ludDMyQW5kVW5k
ZWZpbmVkKGksIDEpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAi
ICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQodW5k
ZWZpbmVkLCBpKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRk
QXJnc0ludDMyQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBp
ICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFy
Z3NJbnQzMkFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQpOworICAgIGlmICh2YWx1ZSA9PT0gdmFs
dWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSwgdW5kZWZpbmVk
KSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOwor
CisgICAgdmFyIHZhbHVlID0gYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVkKGkpOworICAgIGlmICh2
YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQo
aSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsK
KworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVu
ZGVmaW5lZCk7CisgICAgaWYgKHZhbHVlID09PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgImFkZEFy
Z3NJbnQzMkFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCkgZmFpbGVkIHdpdGggaSA9
ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9
IGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCgpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisg
ICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoKSBmYWlsZWQgd2l0aCBpID0g
IiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworfQorCitmdW5jdGlvbiB0ZXN0
RmFsbGJhY2tXaXRoRG91YmxlKCkgeworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRV
bmRlZmluZWQoTWF0aC5QSSwgTWF0aC5QSSk7CisgICAgaWYgKHZhbHVlICE9PSAyICogTWF0aC5Q
SSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoTWF0aC5QSSwgTWF0
aC5QSSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1
ZTsKK30KK3Rlc3RGYWxsYmFja1dpdGhEb3VibGUoKTsKKworCisvLyBVc2luZyBmdWxsIG51bWJl
ciArIHVuZGVmaW5lZCBmb3IgbWF0aC4KK2Z1bmN0aW9uIGFkZEFyZ3NEb3VibGVBbmRVbmRlZmlu
ZWQoYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NEb3VibGVB
bmRVbmRlZmluZWQpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNzsgKytpKSB7CisgICAgdmFy
IHZhbHVlID0gYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZCgwLjUsIGkpOworICAgIGlmICh2YWx1
ZSAhPT0gKGkgKyAwLjUpKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5l
ZCgwLjUsIGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsg
dmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKHVuZGVm
aW5lZCwgMC4xKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRk
QXJnc0RvdWJsZUFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIGkpIGZhaWxlZCB3aXRoIGkgPSAiICsg
aSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRB
cmdzRG91YmxlQW5kVW5kZWZpbmVkKDAuNiwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09
IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZChpLCB1bmRl
ZmluZWQpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFs
dWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKDQyLjgpOwor
ICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzRG91YmxlQW5k
VW5kZWZpbmVkKGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAi
ICsgdmFsdWU7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWxsYmFja1dpdGhPYmplY3QoKSB7CisgICAg
dmFyIHZhbHVlID0gYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZChNYXRoLlBJLCB7IHZhbHVlT2Y6
IGZ1bmN0aW9uKCkgeyByZXR1cm4gNTsgfX0pOworICAgIGlmICh2YWx1ZSAhPT0gNSArIE1hdGgu
UEkpCisgICAgICAgIHRocm93ICJhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKE1hdGguUEksIHsg
dmFsdWVPZjogZnVuY3Rpb24oKSB7IHJldHVybiA1OyB9fSkgZmFpbGVkIHdpdGggaSA9ICIgKyBp
ICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKK30KK3Rlc3RGYWxsYmFja1dpdGhPYmpl
Y3QoKTsKKworCisvLyBVc2luZyBmdWxsIG51bWJlciArIHVuZGVmaW5lZCBmb3IgbWF0aC4KK2Z1
bmN0aW9uIGFkZEFyZ3NPbmx5VW5kZWZpbmVkKGEsIGIpIHsKKyAgICByZXR1cm4gYSArIGI7Cit9
Citub0lubGluZShhZGRBcmdzT25seVVuZGVmaW5lZCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MWU3OyArK2kpIHsKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzT25seVVuZGVmaW5lZCh1bmRlZmlu
ZWQsIGkpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdz
T25seVVuZGVmaW5lZCh1bmRlZmluZWQsIGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0
dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzT25seVVu
ZGVmaW5lZChpLCB1bmRlZmluZWQpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAg
IHRocm93ICJhZGRBcmdzT25seVVuZGVmaW5lZChpLCB1bmRlZmluZWQpIGZhaWxlZCB3aXRoIGkg
PSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUg
PSBhZGRBcmdzT25seVVuZGVmaW5lZChpKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAg
ICAgICB0aHJvdyAiYWRkQXJnc09ubHlVbmRlZmluZWQoaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBp
ICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFy
Z3NPbmx5VW5kZWZpbmVkKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09
IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc09ubHlVbmRlZmluZWQodW5kZWZpbmVkLCB1
bmRlZmluZWQpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsg
dmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzT25seVVuZGVmaW5lZCgpOworICAgIGlm
ICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzT25seVVuZGVmaW5lZCgp
IGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9
CisKK2Z1bmN0aW9uIHRlc3RGYWxsYmFja1dpdGhTdHJpbmcoKSB7CisgICAgdmFyIHZhbHVlID0g
YWRkQXJnc09ubHlVbmRlZmluZWQoImZvbyIsICJiYXIiKTsKKyAgICBpZiAodmFsdWUgIT09ICJm
b29iYXIiKQorICAgICAgICB0aHJvdyAiYWRkQXJnc09ubHlVbmRlZmluZWQoXCJmb29cIiwgXCJi
YXJcIikgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1
ZTsKK30KK3Rlc3RGYWxsYmFja1dpdGhTdHJpbmcoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBm
aWxlCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggMzA3OGFjYjk2YWE2NjBmYmI4Y2U5MzE1ZWMxOWIzMmJjMGMwM2I1Yy4uYmU1
Njg1ZTM0NjgyOGYyODJhZTA5OGQ3NjFlYThhYjlmOTFkN2YwNyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0
IEBACisyMDE1LTA1LTIxICBCZW5qYW1pbiBQb3VsYWluICA8YnBvdWxhaW5AYXBwbGUuY29tPgor
CisgICAgICAgIFtKU0NdIEFkZCB1bmRlZmluZWQtPmRvdWJsZSBjb252ZXJzaW9uIHRvIERvdWJs
ZVJlcAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ1
MjkzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBq
cy9yZWdyZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMt
YXJyYXktdmFsdWVzLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5qczogQWRkZWQuCisKIDIw
MTUtMDUtMTkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAogICAgICAgICBbTWFj
XSBGb250IGxvb2t1cHMgYXJlIGZsYWtleSBkdWUgdG8gY2FjaGluZwpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJv
dW5kcy1hcnJheS12YWx1ZXMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZlYTBhNjk5OGM5NDEz
YmU3ZTIzNWM4MTJiNzM3ZWI1YjAxOGFmNGUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy1leHBlY3Rl
ZC50eHQKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRz
LWFycmF5LXZhbHVlcworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBl
eGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXRoLXdpdGgt
b3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMuaHRtbCBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
bWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLmh0bWwKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWFl
YWViMmNjYjc1NGJjODI3YmI0N2ZjOTRjYTkxNjNiZTJiZmRhMgotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFs
dWVzLmh0bWwKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0Lmpz
Ij48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVl
cy5qcyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hdGgtd2l0aC1vdXQt
b2YtYm91bmRzLWFycmF5LXZhbHVlcy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNjg4MmQ4ZTg5ZjkyMGIwOWMz
NTA1ZDM4MTZkN2ZhNGU1ZDRmMWNkCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVz
LmpzCkBAIC0wLDAgKzEsMTkgQEAKK2Z1bmN0aW9uIG1hdGhXaXRoT3V0T2ZCb3VuZHNBY2Nlc3Mo
YXJyYXlBLCBhcnJheUIpCit7CisgICAgdmFyIG91dHB1dCA9IDA7CisgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDsgKytpKSB7CisgICAgICAgIG91dHB1dCArPSAoYXJyYXlBW2ldICsgYXJyYXlC
W2ldKTsKKyAgICB9CisgICAgcmV0dXJuIG91dHB1dDsKK30KKworbm9JbmxpbmUobWF0aFdpdGhP
dXRPZkJvdW5kc0FjY2Vzcyk7CisKK2Z1bmN0aW9uIHRlc3QoKSB7CisgICAgdmFyIGludGVnZXJB
cnJheSA9IFswLCAxLCAyLCAzLCA0XTsKKyAgICB2YXIgZG91YmxlQXJyYXkgPSBbMC4xLCAxLjIs
IDIuMywgMy40LCA0LjVdOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAg
ICAgICAgbWF0aFdpdGhPdXRPZkJvdW5kc0FjY2VzcyhpbnRlZ2VyQXJyYXksIGRvdWJsZUFycmF5
KTsKK30KK3Rlc3QoKTsKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253633</attachid>
            <date>2015-05-22 21:43:02 -0700</date>
            <delta_ts>2015-05-26 14:34:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145293-20150522214256.patch</filename>
            <type>text/plain</type>
            <size>32162</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0NjAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
MjkxYWNjMGI5YWM1NzFiZjVlNmNjZjk2MTNkODhlZTg3NmMxYTgwLi5iZTBmZWMwYmI5NDM1Njg2
ZDJmNjgzZmNmZThlZDM0YTMyZjM0NGY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2NSBAQAorMjAxNS0wNS0yMSAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgdW5kZWZpbmVkLT5kb3VibGUgY29udmVyc2lvbiB0
byBEb3VibGVSZXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgcGF0Y2ggYWRkcyB1bmRlZmluZWQgdG8gZG91YmxlIGNvbnZlcnNpb24gdG8gdGhl
IERvdWJsZVJlcAorICAgICAgICBub2RlIGZvciB0aGUgY2FzZXMgd2VyZSB3ZSBzcGVjdWxhdGUg
InVuZGVmaW5lZCIgYXMgcGFydCBvZiB0aGUgdHlwZXMKKyAgICAgICAgcHJvY2Vzc2VkLgorCisg
ICAgICAgIFRoZSB1c2UgY2FzZSBpcyBkb2luZyBtYXRoIHdpdGggYWNjaWRlbnRhbCBvdXQtb2Yt
Ym91bmRzIGFjY2Vzcy4gRm9yIGV4YW1wbGUsCisgICAgICAgIHNvbWV0aGluZyBsaWtlOgorICAg
ICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAg
ICAgb3VwdHB1dCArPSBhcnJheVtpXTsKKworICAgICAgICB3b3VsZCBjYXVzZSB1cyB0byBPU1Ig
ZXhpdCBldmVyeSB0aW1lIGkgPT09IGxlbmd0aC4KKworICAgICAgICBXaGVuIGhpdHRpbmcgb25l
IG9mIHRob3NlIGNhc2VzLCB3ZSB3b3VsZCBhbHJlYWR5IHNwZWN1bGF0ZSBkb3VibGUgbWF0aCwK
KyAgICAgICAgYnV0IHRoZSBEb3VibGVSZXAgbm9kZSB3YXMgdW5hYmxlIHRvIGNvbnZlcnQgdGhl
IHVuZGVmaW5lZCBhbmQgd291bGQgZXhpdC4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2ggdGhl
IHVzZSBraW5kIE5vdENlbGxVc2UgY292ZXIgdGhpcyBjb252ZXJzaW9uIGZvciBEb3VibGVSZXAu
CisgICAgICAgIEkgaGF2ZSBiZWVuIHF1aXRlIGNvbnNlcnZhdGl2ZSBzbyBpbiBnZW5lcmFsIHdl
IHdpbGwgbm90IGZpbmQgInVuZGVmaW5lZCIKKyAgICAgICAgdW50aWwgYSBmZXcgcmVjb21waWxl
IGJ1dCBiZWluZyBvcHRpbWlzdGljIHNlZW1zIGJldHRlciBzaW5jZSB0aGlzIGlzIGEgY29ybmVy
IGNhc2UuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIDgwJSBwcm9ncmVzc2lvbiBvbiBXZWJY
UFJUJ3MgRE5BIFNlcXVlbmNpbmcgdGVzdC4KKworICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0
ZWRUeXBlLmNwcDoKKyAgICAgICAgKEpTQzo6ZHVtcFNwZWN1bGF0aW9uKToKKyAgICAgICAgKEpT
Qzo6c3BlY3VsYXRpb25Gcm9tVmFsdWUpOgorICAgICAgICAqIGJ5dGVjb2RlL1NwZWN1bGF0ZWRU
eXBlLmg6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmg6Cisg
ICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46
OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAg
ICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6aW5qZWN0VHlwZUNvbnZlcnNpb25zRm9yRWRnZSk6
CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpzYXdV
bmRlZmluZWQpOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2U6OnByb3Bh
Z2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAgICAgKEpTQzo6
REZHOjpTYWZlVG9FeGVjdXRlRWRnZTo6b3BlcmF0b3IoKSk6CisgICAgICAgICogZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZURvdWJsZVJlcCk6CisgICAgICAgICogZGZnL0RGR1VzZUtpbmQuY3BwOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBkZmcvREZHVXNlS2luZC5oOgorICAgICAg
ICAoSlNDOjpERkc6OnR5cGVGaWx0ZXJGb3IpOgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRp
ZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06
OmNvbXBpbGVEb3VibGVSZXApOgorICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpq
c1ZhbHVlVG9Eb3VibGUpOgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgt
dW5kZWZpbmVkLmpzOiBBZGRlZC4KKyAgICAgICAgKGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQp
OgorICAgICAgICAoYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVkKToKKyAgICAgICAgKHRlc3RGYWxs
YmFja1dpdGhEb3VibGUpOgorICAgICAgICAoYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZCk6Cisg
ICAgICAgICh0ZXN0RmFsbGJhY2tXaXRoT2JqZWN0Lik6CisgICAgICAgICh0ZXN0RmFsbGJhY2tX
aXRoT2JqZWN0KToKKyAgICAgICAgKGFkZEFyZ3NPbmx5VW5kZWZpbmVkKToKKyAgICAgICAgKHRl
c3RGYWxsYmFja1dpdGhTdHJpbmcpOgorCiAyMDE1LTA1LTE5ICBNaWNoYWVsIFNhYm9mZiAgPG1z
YWJvZmZAYXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04oMTgzNzg3KTogSklUIGlzIGVu
YWJsZWQgZm9yIGFsbCBidWlsZHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCAxN2VhYjA5NWNhOWU3
MmI2YjZiYTlkOTJjY2I5ZTgzY2Y2MmY5MjI0Li4yMDMyZGUwNTE3YTIwODc1MTViOGE0ZDI5MDVi
YzhhOTE3ZjkzZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0zNjAsNyArMzYwLDI4IEBAIGJv
b2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3Rz
KHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCBqc0Rv
dWJsZU51bWJlcihjaGlsZC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgZm9yTm9kZShub2Rl
LT5jaGlsZDEoKSkubV90eXBlKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBlID0gZm9y
Tm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICBzd2l0Y2ggKG5vZGUtPmNoaWxk
MSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIE5vdENlbGxVc2U6IHsKKyAgICAgICAgICAg
IHR5cGUgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOworICAgICAgICAgICAgLy8gVW5kZWZpbmVkIGlz
IGNvbnZlcnRlZCB0byBOYU4uCisgICAgICAgICAgICB0eXBlIHw9IFNwZWNEb3VibGVQdXJlTmFO
OworICAgICAgICAgICAgLy8gTnVsbCBpcyBjb252ZXJ0ZWQgdG8gemVybywgQm9vbGVhbnMgYXJl
IGNvbnZlcnRlZCB0byAwLzEuCisgICAgICAgICAgICB0eXBlIHw9IFNwZWNCb29sSW50MzI7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAg
ICAgY2FzZSBJbnQ1MlJlcFVzZToKKyNlbmRpZgorICAgICAgICBjYXNlIE51bWJlclVzZToKKyAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZSku
c2V0VHlwZSh0eXBlKTsKICAgICAgICAgZm9yTm9kZShub2RlKS5maXhUeXBlRm9yUmVwcmVzZW50
YXRpb24obV9ncmFwaCwgbm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCmluZGV4IDAyMWYxNDZmMDZjNmMzZmVi
ZTRmOTI5MGQ4Y2U0ODQ1MzIzMTFhNmQuLjM4ZmUwYjcxOTBmNjdkZDA4NWZmNWNiYTI3MzBiYTU3
MmU1Y2ZjY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQ
aGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNw
cApAQCAtMjEyNCw5ICsyMTI0LDEzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXhJbkJsb2NrLCBTcGVjSW50NTJBc0RvdWJsZSwgRG91YmxlUmVwLCBub2RlLT5vcmlnaW4s
CiAgICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIEludDUyUmVwVXNlKSk7CiAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IE5v
dENlbGxVc2U7CisgICAgICAgICAgICAgICAgaWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZU51bWJl
cigpKQorICAgICAgICAgICAgICAgICAgICB1c2VLaW5kID0gTnVtYmVyVXNlOworCiAgICAgICAg
ICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAg
ICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNwZWNCeXRlY29kZURvdWJsZSwgRG91YmxlUmVwLCBu
b2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAgICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIE51bWJl
clVzZSkpOworICAgICAgICAgICAgICAgICAgICBFZGdlKGVkZ2Uubm9kZSgpLCB1c2VLaW5kKSk7
CiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcAppbmRleCAzZGY4ODEyOTU4MzkyNmE3OTkyMjk4NDIwM2U2ZGU2Mzhi
ZDY2NGJmLi5jZGUwOWJmMTIxYjIxZjhhNGZlYjYwZGZhMjRmYjQyMGI2YTliYWJhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBo
YXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcApAQCAtNDAyLDYgKzQwMiwxMiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIFNwZWNOb25lKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgc3dpdGNoIChhcnJh
eU1vZGUudHlwZSgpKSB7CisgICAgICAgICAgICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAg
ICAgICAgICBpZiAoYXJyYXlNb2RlLmlzT3V0T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICAg
ICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rpb24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSB8
IFNwZWNJbnQzMik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBj
aGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihTcGVjSW50MzIpOworICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJheTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGlm
IChhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygpKQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2Vk
IHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5nZXRIZWFwUHJlZGljdGlvbigpIHwgU3BlY0RvdWJs
ZVJlYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
LmNwcAppbmRleCA0NmZjOTBiYjlmNWE0ZDg1NGRhMTg2NGUzZDc4OTI0NWVkMjU4NGU1Li43ZjVh
NDk5ZWI3NWQ3ZjhmYmJjODUwODkxOTdhN2I4ZGI4M2VkNzA3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcApAQCAtMjA2NCwzMSArMjA2NCw1
OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlRG91YmxlQXNJbnQzMihOb2RlKiBub2Rl
KQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVJlcChOb2RlKiBub2RlKQogewog
ICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpKSB7CisgICAgY2FzZSBOb3RDZWxs
VXNlOgogICAgIGNhc2UgTnVtYmVyVXNlOiB7CiAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQx
KCktPmlzTnVtYmVyQ29uc3RhbnQoKSk7IC8vIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjb25zdGFu
dCBmb2xkZWQuCi0gICAgCi0gICAgICAgIGlmIChpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5m
b3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5cGUpKSB7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcG9zc2libGVUeXBlcyA9IG1fc3RhdGUuZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBl
OworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1bGF0aW9uKHBvc3NpYmxlVHlwZXMpKSB7CiAgICAg
ICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBN
YW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3Vs
dCh0aGlzKTsKICAgICAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIo
KSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAgICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCks
IG5vZGUpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3Bl
Y3VsYXRpb24pOwogICAgICAgICBGUFJUZW1wb3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAorCiAj
aWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAKICAg
ICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5ncHIoKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOwogICAgICAgICBGUFJSZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOwot
ICAgIAorICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3QgZG9uZTsKKwogICAgICAgICBKSVRD
b21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBtX2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgIE1h
Y3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWwsIG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJl
clJlZ2lzdGVyKTsKLSAgICAKLSAgICAgICAgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxk
MSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgp
LnVzZUtpbmQoKSA9PSBOb3RDZWxsVXNlKSB7CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc051bWJlciA9IG1faml0LmJyYW5jaFRlc3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywg
b3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgSklU
Q29tcGlsZXI6Okp1bXAgaXNVbmRlZmluZWQgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6
RXF1YWwsIG9wMUdQUiwgVHJ1c3RlZEltbTY0KFZhbHVlVW5kZWZpbmVkKSk7CisKKyAgICAgICAg
ICAgIHN0YXRpYyBjb25zdCBkb3VibGUgemVybyA9IDA7CisgICAgICAgICAgICBtX2ppdC5sb2Fk
RG91YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZ6ZXJvKSwgcmVzdWx0RlBSKTsK
KworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNOdWxsID0gbV9qaXQuYnJhbmNoNjQo
SklUQ29tcGlsZXI6OkVxdWFsLCBvcDFHUFIsIFRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKKyAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKGlzTnVsbCk7CisKKyAgICAgICAgICAgIERGR19UWVBFX0NI
RUNLKEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsCisgICAg
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBvcDFH
UFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2FzdDxpbnQzMl90Pih+MSkpKSk7CisKKyAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzRmFsc2UgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxl
cjo6RXF1YWwsIG9wMUdQUiwgVHJ1c3RlZEltbTY0KFZhbHVlRmFsc2UpKTsKKyAgICAgICAgICAg
IHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0gMTsKKyAgICAgICAgICAgIG1faml0LmxvYWREb3Vi
bGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoJm9uZSksIHJlc3VsdEZQUik7CisgICAg
ICAgICAgICBkb25lLmFwcGVuZChpc0ZhbHNlKTsKKworICAgICAgICAgICAgaXNVbmRlZmluZWQu
bGluaygmbV9qaXQpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQTmFO
OworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigmTmFOKSwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1
bXAoKSk7CisKKyAgICAgICAgICAgIGlzTnVtYmVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgfSBl
bHNlIGlmIChuZWVkc1R5cGVDaGVjayhub2RlLT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlTnVtYmVy
KSkgewogICAgICAgICAgICAgdHlwZUNoZWNrKAogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdz
KG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIsCiAgICAgICAgICAg
ICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1hY3JvQXNzZW1ibGVyOjpaZXJvLCBvcDFHUFIsIEdQ
UkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcikpOwpAQCAtMjA5Niw3ICsyMTIzLDcgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVJlcChOb2RlKiBub2RlKQogICAgIAogICAg
ICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgdGVtcEdQUik7CiAgICAgICAgIHVuYm94RG91YmxlKHRl
bXBHUFIsIHJlc3VsdEZQUik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2pp
dC5qdW1wKCk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgCiAgICAg
ICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRv
RG91YmxlKG9wMUdQUiwgcmVzdWx0RlBSKTsKQEAgLTIxMDgsMTggKzIxMzUsNDIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJsZVJlcChOb2RlKiBub2RlKQogICAgICAgICBHUFJS
ZWcgb3AxUGF5bG9hZEdQUiA9IG9wMS5wYXlsb2FkR1BSKCk7CiAgICAgICAgIEZQUlJlZyB0ZW1w
RlBSID0gdGVtcC5mcHIoKTsKICAgICAgICAgRlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIo
KTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IGRvbmU7CiAgICAgCiAgICAgICAgIEpJ
VENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9IG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJ
bnQzMlRhZykpOwotICAgIAotICAgICAgICBpZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQx
KCksIFNwZWNCeXRlY29kZU51bWJlcikpIHsKKworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpID09IE5vdENlbGxVc2UpIHsKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1w
IGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkJlbG93LCBvcDFUYWdHUFIs
IEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOworICAg
ICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNVbmRlZmluZWQgPSBtX2ppdC5icmFuY2gzMihK
SVRDb21waWxlcjo6RXF1YWwsIG9wMVRhZ0dQUiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVm
aW5lZFRhZykpOworCisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwOwor
ICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0
cigmemVybyksIHJlc3VsdEZQUik7CisKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlz
TnVsbCA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgb3AxVGFnR1BSLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQoaXNO
dWxsKTsKKworICAgICAgICAgICAgREZHX1RZUEVfQ0hFQ0soSlNWYWx1ZVJlZ3Mob3AxVGFnR1BS
LCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIH5TcGVjQ2VsbCwgbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpCb29sZWFuVGFnKSkpOworCisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ZhbHNl
ID0gbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENvbXBpbGVyOjpaZXJvLCBvcDFQYXlsb2FkR1BSLCBU
cnVzdGVkSW1tMzIoMSkpOworICAgICAgICAgICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAx
OworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZElt
bVB0cigmb25lKSwgcmVzdWx0RlBSKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGlzRmFsc2Up
OworCisgICAgICAgICAgICBpc1VuZGVmaW5lZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBOYU47CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91
YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKCZOYU4pLCByZXN1bHRGUFIpOworICAg
ICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQuanVtcCgpKTsKKworICAgICAgICAgICAgaXNOdW1i
ZXIubGluaygmbV9qaXQpOworICAgICAgICB9IGVsc2UgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUt
PmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7CiAgICAgICAgICAgICB0eXBlQ2hlY2so
CiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwg
bm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51bWJlciwKICAgICAgICAgICAgICAgICBtX2pp
dC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcpKSk7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAg
ICB1bmJveERvdWJsZShvcDFUYWdHUFIsIG9wMVBheWxvYWRHUFIsIHJlc3VsdEZQUiwgdGVtcEZQ
Uik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAg
ICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgCiAgICAgICAgIGlzSW50ZWdlci5s
aW5rKCZtX2ppdCk7CiAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMVBheWxv
YWRHUFIsIHJlc3VsdEZQUik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93
ZXJERkdUb0xMVk0uY3BwCmluZGV4IGRhNTgyMzcwYWQwODUzMDFkZThmOWYyZDQxMjFmODZkYjFm
M2U4YjQuLjAzMjgwMGQwMzllMGQ1NmEwMzQ1YTMxY2YyOWY4NjI0YTk3MGZjMzIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCkBAIC05NTgs
OSArOTU4LDEyIEBAIHByaXZhdGU6CiAgICAgdm9pZCBjb21waWxlRG91YmxlUmVwKCkKICAgICB7
CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAg
Y2FzZSBOb3RDZWxsVXNlOgogICAgICAgICBjYXNlIE51bWJlclVzZTogeworICAgICAgICAgICAg
Ym9vbCBzaG91bGRDb252ZXJ0Tm9uTnVtYmVyID0gbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkg
PT0gTm90Q2VsbFVzZTsKKwogICAgICAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZSht
X25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAg
c2V0RG91YmxlKGpzVmFsdWVUb0RvdWJsZShtX25vZGUtPmNoaWxkMSgpLCB2YWx1ZSkpOworICAg
ICAgICAgICAgc2V0RG91YmxlKGpzVmFsdWVUb0RvdWJsZShtX25vZGUtPmNoaWxkMSgpLCB2YWx1
ZSwgc2hvdWxkQ29udmVydE5vbk51bWJlcikpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTcxODcsMTAgKzcxOTAsMTIgQEAgcHJpdmF0ZToKICAgICB7
CiAgICAgICAgIHJldHVybiBtX291dC5zdWIobV9vdXQuYml0Q2FzdChkb3VibGVWYWx1ZSwgbV9v
dXQuaW50NjQpLCBtX3RhZ1R5cGVOdW1iZXIpOwogICAgIH0KLSAgICBMVmFsdWUganNWYWx1ZVRv
RG91YmxlKEVkZ2UgZWRnZSwgTFZhbHVlIGJveGVkVmFsdWUpCisgICAgTFZhbHVlIGpzVmFsdWVU
b0RvdWJsZShFZGdlIGVkZ2UsIExWYWx1ZSBib3hlZFZhbHVlLCBib29sIHNob3VsZENvbnZlcnRO
b25OdW1iZXIpCiAgICAgewogICAgICAgICBMQmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hpbmcgaW50IGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGRvdWJsZVRlc3RpbmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpz
VmFsdWVUb0RvdWJsZSB0ZXN0aW5nIGRvdWJsZSBjYXNlIikpOwogICAgICAgICBMQmFzaWNCbG9j
ayBkb3VibGVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5i
b3hpbmcgZG91YmxlIGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIG5vbkRvdWJsZUNhc2Ug
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIHVuZGVmaW5l
ZCBjYXNlIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB1bmJveGluZyBjb250aW51YXRpb24iKSk7CiAg
ICAgICAgICAgICAKICAgICAgICAgTFZhbHVlIGlzTm90SW50MzI7CkBAIC03MjAwLDI0ICs3MjA1
LDcwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBpc05vdEludDMyID0gbV9vdXQuYm9vbGVhblRy
dWU7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIGlzTm90SW50MzIgPSB0aGlzLT5pc05vdElu
dDMyKGJveGVkVmFsdWUpOwotICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMiwgdW5zdXJl
KGRvdWJsZUNhc2UpLCB1bnN1cmUoaW50Q2FzZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNO
b3RJbnQzMiwgdW5zdXJlKGRvdWJsZVRlc3RpbmcpLCB1bnN1cmUoaW50Q2FzZSkpOwogICAgICAg
ICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50
Q2FzZSwgZG91YmxlQ2FzZSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaW50Q2FzZSwgZG91YmxlVGVzdGluZyk7CiAgICAgICAgICAgICAKICAgICAgICAg
VmFsdWVGcm9tQmxvY2sgaW50VG9Eb3VibGUgPSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBt
X291dC5pbnRUb0RvdWJsZSh1bmJveEludDMyKGJveGVkVmFsdWUpKSk7CiAgICAgICAgIG1fb3V0
Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRU
byhkb3VibGVDYXNlLCBjb250aW51YXRpb24pOwotICAgICAgICAgICAgCi0gICAgICAgIEZUTF9U
WVBFX0NIRUNLKAotICAgICAgICAgICAganNWYWx1ZVZhbHVlKGJveGVkVmFsdWUpLCBlZGdlLCBT
cGVjQnl0ZWNvZGVOdW1iZXIsIGlzQ2VsbE9yTWlzYyhib3hlZFZhbHVlKSk7Ci0gICAgICAgICAg
ICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8oZG91YmxlVGVzdGluZywgZG91YmxlQ2FzZSk7Cisg
ICAgICAgIExWYWx1ZSB2YWx1ZUlzTnVtYmVyID0gaXNOdW1iZXIoYm94ZWRWYWx1ZSk7CisgICAg
ICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVtYmVyLCB1c3VhbGx5KGRvdWJsZUNhc2UpLCByYXJl
bHkobm9uRG91YmxlQ2FzZSkpOworCisgICAgICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2Us
IG5vbkRvdWJsZUNhc2UpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayB1bmJveGVkRG91YmxlID0g
bV9vdXQuYW5jaG9yKHVuYm94RG91YmxlKGJveGVkVmFsdWUpKTsKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwotICAgICAgICAgICAgCisKKyAgICAgICAgaWYgKHNob3VsZENvbnZl
cnROb25OdW1iZXIpIHsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIHVuZGVmaW5lZENhc2UgPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSBjb252ZXJ0aW5nIHVuZGVmaW5l
ZCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgdGVzdE51bGxDYXNlID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdGVzdGluZyBudWxsIGNhc2UiKSk7Cisg
ICAgICAgICAgICBMQmFzaWNCbG9jayBudWxsQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgi
anNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcgbnVsbCBjYXNlIikpOworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgdGVzdEJvb2xlYW5UcnVlQ2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNW
YWx1ZVRvRG91YmxlIHRlc3RpbmcgYm9vbGVhbiB0cnVlIGNhc2UiKSk7CisgICAgICAgICAgICBM
QmFzaWNCbG9jayBjb252ZXJ0Qm9vbGVhblRydWVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBib29sZWFuIHRydWUgY2FzZSIpKTsKKyAgICAgICAg
ICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlID0gRlRMX05FV19CTE9DSyht
X291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBib29sZWFuIGZhbHNlIGNhc2UiKSk7CisK
KyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2UsIHVuZGVmaW5lZENhc2Up
OworICAgICAgICAgICAgTFZhbHVlIHZhbHVlSXNVbmRlZmluZWQgPSBtX291dC5lcXVhbChib3hl
ZFZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBt
X291dC5icmFuY2godmFsdWVJc1VuZGVmaW5lZCwgdW5zdXJlKHVuZGVmaW5lZENhc2UpLCB1bnN1
cmUodGVzdE51bGxDYXNlKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVuZGVmaW5l
ZENhc2UsIHRlc3ROdWxsQ2FzZSk7CisgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0
ZWRVbmRlZmluZWQgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoUE5hTikpOworICAg
ICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5h
cHBlbmRUbyh0ZXN0TnVsbENhc2UsIG51bGxDYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1
ZUlzTnVsbCA9IG1fb3V0LmVxdWFsKGJveGVkVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVO
dWxsKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc051bGwsIHVuc3VyZShudWxs
Q2FzZSksIHVuc3VyZSh0ZXN0Qm9vbGVhblRydWVDYXNlKSk7CisKKyAgICAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKG51bGxDYXNlLCB0ZXN0Qm9vbGVhblRydWVDYXNlKTsKKyAgICAgICAgICAgIFZh
bHVlRnJvbUJsb2NrIGNvbnZlcnRlZE51bGwgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3Vi
bGUoMCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAg
ICAgICBtX291dC5hcHBlbmRUbyh0ZXN0Qm9vbGVhblRydWVDYXNlLCBjb252ZXJ0Qm9vbGVhblRy
dWVDYXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzQm9vbGVhblRydWUgPSBtX291dC5l
cXVhbChib3hlZFZhbHVlLCBtX291dC5jb25zdEludDY0KFZhbHVlVHJ1ZSkpOworICAgICAgICAg
ICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNCb29sZWFuVHJ1ZSwgdW5zdXJlKGNvbnZlcnRCb29sZWFu
VHJ1ZUNhc2UpLCB1bnN1cmUoY29udmVydEJvb2xlYW5GYWxzZUNhc2UpKTsKKworICAgICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udmVydEJvb2xlYW5UcnVlQ2FzZSwgY29udmVydEJvb2xlYW5G
YWxzZUNhc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkVHJ1ZSA9IG1f
b3V0LmFuY2hvcihtX291dC5jb25zdERvdWJsZSgxKSk7CisgICAgICAgICAgICBtX291dC5qdW1w
KGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnZlcnRCb29s
ZWFuRmFsc2VDYXNlLCBjb250aW51YXRpb24pOworCisgICAgICAgICAgICBMVmFsdWUgdmFsdWVJ
c05vdEJvb2xlYW5GYWxzZSA9IG1fb3V0Lm5vdEVxdWFsKGJveGVkVmFsdWUsIG1fb3V0LmNvbnN0
SW50NjQoVmFsdWVGYWxzZSkpOworICAgICAgICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZh
bHVlKGJveGVkVmFsdWUpLCBlZGdlLCB+U3BlY0NlbGwsIHZhbHVlSXNOb3RCb29sZWFuRmFsc2Up
OworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgY29udmVydGVkRmFsc2UgPSBtX291dC5hbmNo
b3IobV9vdXQuY29uc3REb3VibGUoMCkpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKKyAgICAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50
VG9Eb3VibGUsIHVuYm94ZWREb3VibGUsIGNvbnZlcnRlZFVuZGVmaW5lZCwgY29udmVydGVkTnVs
bCwgY29udmVydGVkVHJ1ZSwgY29udmVydGVkRmFsc2UpOworICAgICAgICB9CisgICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2UsIGNvbnRpbnVhdGlvbik7CisgICAgICAgIEZUTF9U
WVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShib3hlZFZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlTnVt
YmVyLCBtX291dC5ib29sZWFuVHJ1ZSk7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAg
ICAgICAKKwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRv
RG91YmxlLCB1bmJveGVkRG91YmxlKTsKICAgICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1yZXAtd2l0aC1ub24tY2VsbC5qcyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZG91YmxlLXJlcC13aXRoLW5vbi1j
ZWxsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjMyZjdmMWNkNmNmYzhjZmU4YmM3MjQyOGZhYjhiNDRmZWExNjQz
ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2RvdWJsZS1yZXAtd2l0aC1ub24tY2VsbC5qcwpAQCAtMCwwICsxLDMyIEBACisvLyBPbmx5IGJv
b2wsIHVuZGVmaW5lZCBhbmQgbnVsbAorZnVuY3Rpb24gYWRkTnVsbEJvb2xVbmRlZmluZWQoYSwg
YikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZE51bGxCb29sVW5kZWZpbmVk
KTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTc7ICsraSkgeworICAgIHZhciB2YWx1ZSA9IGFk
ZE51bGxCb29sVW5kZWZpbmVkKDAuNSwgbnVsbCk7CisgICAgaWYgKHZhbHVlICE9PSAwLjUpCisg
ICAgICAgIHRocm93ICJhZGROdWxsQm9vbFVuZGVmaW5lZCgwLjUsIG51bGwpIGZhaWxlZCB3aXRo
IGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFs
dWUgPSBhZGROdWxsQm9vbFVuZGVmaW5lZChudWxsLCB1bmRlZmluZWQpOworICAgIGlmICh2YWx1
ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGROdWxsQm9vbFVuZGVmaW5lZChudWxsLCB1
bmRlZmluZWQpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsg
dmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGROdWxsQm9vbFVuZGVmaW5lZCh0cnVlLCBudWxs
KTsKKyAgICBpZiAodmFsdWUgIT09IDEpCisgICAgICAgIHRocm93ICJhZGROdWxsQm9vbFVuZGVm
aW5lZCh0cnVlLCBudWxsKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVl
ID0gIiArIHZhbHVlOworCisgICAgdmFyIHZhbHVlID0gYWRkTnVsbEJvb2xVbmRlZmluZWQodW5k
ZWZpbmVkLCBmYWxzZSk7CisgICAgaWYgKHZhbHVlID09PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cg
ImFkZE51bGxCb29sVW5kZWZpbmVkKHVuZGVmaW5lZCwgZmFsc2UpIGZhaWxlZCB3aXRoIGkgPSAi
ICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBh
ZGROdWxsQm9vbFVuZGVmaW5lZChmYWxzZSwgdHJ1ZSk7CisgICAgaWYgKHZhbHVlICE9PSAxKQor
ICAgICAgICB0aHJvdyAiYWRkTnVsbEJvb2xVbmRlZmluZWQoZmFsc2UsIHRydWUpIGZhaWxlZCB3
aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIg
dmFsdWUgPSBhZGROdWxsQm9vbFVuZGVmaW5lZChudWxsLCA0Mik7CisgICAgaWYgKHZhbHVlICE9
PSA0MikKKyAgICAgICAgdGhyb3cgImFkZE51bGxCb29sVW5kZWZpbmVkKG51bGwsIDQyKSBmYWls
ZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCit9CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1yZXAt
d2l0aC1udWxsLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUt
cmVwLXdpdGgtbnVsbC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jMTk1MzEyOTY4YmFhN2IyM2RkNzM1YjBiZjM4
NjhiZmZiMDI0YTQxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgtbnVsbC5qcwpAQCAtMCwwICsxLDEwNyBAQAorLy8g
VXNpbmcgZnVsbCBudW1iZXIgKyBudWxsIGZvciBtYXRoLgorZnVuY3Rpb24gYWRkQXJnc051bWJl
ckFuZE51bGwoYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NO
dW1iZXJBbmROdWxsKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTc7ICsraSkgeworICAgIHZh
ciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmROdWxsKGksIDEpOworICAgIGlmICh2YWx1ZSAhPT0g
KGkgKyAxKSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmROdWxsKGksIDEpIGZhaWxl
ZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2
YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kTnVsbCgwLjUsIGkpOworICAgIGlmICh2YWx1ZSAh
PT0gKGkgKyAwLjUpKQorICAgICAgICB0aHJvdyAiYWRkQXJnc051bWJlckFuZE51bGwoMC41LCBp
KSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOwor
CisgICAgdmFyIHZhbHVlID0gYWRkQXJnc051bWJlckFuZE51bGwobnVsbCwgaSk7CisgICAgaWYg
KHZhbHVlICE9PSBpKQorICAgICAgICB0aHJvdyAiYWRkQXJnc051bWJlckFuZE51bGwobnVsbCwg
aSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsK
KworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmROdWxsKGksIG51bGwpOworICAgIGlm
ICh2YWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmROdWxsKGksIG51
bGwpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7
CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kTnVsbChudWxsLCBudWxsKTsKKyAg
ICBpZiAodmFsdWUgIT09IDApCisgICAgICAgIHRocm93ICJhZGRBcmdzTnVtYmVyQW5kTnVsbChu
dWxsLCBudWxsKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiAr
IHZhbHVlOworfQorCisKKy8vIFVzaW5nIGludDMyICsgbnVsbCBmb3IgbWF0aC4KK2Z1bmN0aW9u
IGFkZEFyZ3NJbnQzMkFuZE51bGwoYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5s
aW5lKGFkZEFyZ3NJbnQzMkFuZE51bGwpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNzsgKytp
KSB7CisgICAgdmFyIHZhbHVlID0gYWRkQXJnc0ludDMyQW5kTnVsbChpLCAxKTsKKyAgICBpZiAo
dmFsdWUgIT09IChpICsgMSkpCisgICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmROdWxsKGks
IDEpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7
CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzSW50MzJBbmROdWxsKG51bGwsIGkpOworICAgIGlm
ICh2YWx1ZSAhPT0gaSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NJbnQzMkFuZE51bGwobnVsbCwg
aSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsK
KworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQzMkFuZE51bGwoaSwgbnVsbCk7CisgICAgaWYg
KHZhbHVlICE9PSBpKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0ludDMyQW5kTnVsbChpLCBudWxs
KSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOwor
CisgICAgdmFyIHZhbHVlID0gYWRkQXJnc0ludDMyQW5kTnVsbChudWxsLCBudWxsKTsKKyAgICBp
ZiAodmFsdWUgIT09IDApCisgICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmROdWxsKG51bGws
IG51bGwpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFs
dWU7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWxsYmFja1dpdGhEb3VibGUoKSB7CisgICAgdmFyIHZh
bHVlID0gYWRkQXJnc051bWJlckFuZE51bGwoTWF0aC5QSSwgTWF0aC5QSSk7CisgICAgaWYgKHZh
bHVlICE9PSAyICogTWF0aC5QSSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmROdWxs
KE1hdGguUEksIE1hdGguUEkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFs
dWUgPSAiICsgdmFsdWU7Cit9Cit0ZXN0RmFsbGJhY2tXaXRoRG91YmxlKCk7CisKKworLy8gVXNp
bmcgZnVsbCBudW1iZXIgKyBudWxsIGZvciBtYXRoLgorZnVuY3Rpb24gYWRkQXJnc0RvdWJsZUFu
ZE51bGwoYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NEb3Vi
bGVBbmROdWxsKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTc7ICsraSkgeworICAgIHZhciB2
YWx1ZSA9IGFkZEFyZ3NEb3VibGVBbmROdWxsKDAuNSwgaSk7CisgICAgaWYgKHZhbHVlICE9PSAo
aSArIDAuNSkpCisgICAgICAgIHRocm93ICJhZGRBcmdzRG91YmxlQW5kTnVsbCgwLjUsIGkpIGZh
aWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAg
ICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kTnVsbChudWxsLCAwLjEpOworICAgIGlmICh2
YWx1ZSAhPT0gMC4xKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZE51bGwobnVsbCwg
aSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsK
KworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NEb3VibGVBbmROdWxsKDAuNiwgbnVsbCk7CisgICAg
aWYgKHZhbHVlICE9PSAwLjYpCisgICAgICAgIHRocm93ICJhZGRBcmdzRG91YmxlQW5kTnVsbChp
LCBudWxsKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZh
bHVlOworfQorCitmdW5jdGlvbiB0ZXN0RmFsbGJhY2tXaXRoT2JqZWN0KCkgeworICAgIHZhciB2
YWx1ZSA9IGFkZEFyZ3NEb3VibGVBbmROdWxsKE1hdGguUEksIHsgdmFsdWVPZjogZnVuY3Rpb24o
KSB7IHJldHVybiA1OyB9fSk7CisgICAgaWYgKHZhbHVlICE9PSA1ICsgTWF0aC5QSSkKKyAgICAg
ICAgdGhyb3cgImFkZEFyZ3NEb3VibGVBbmROdWxsKE1hdGguUEksIHsgdmFsdWVPZjogZnVuY3Rp
b24oKSB7IHJldHVybiA1OyB9fSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2
YWx1ZSA9ICIgKyB2YWx1ZTsKK30KK3Rlc3RGYWxsYmFja1dpdGhPYmplY3QoKTsKKworCisvLyBV
c2luZyBvbmx5IG51bGwKK2Z1bmN0aW9uIGFkZEFyZ3NPbmx5TnVsbChhLCBiKSB7CisgICAgcmV0
dXJuIGEgKyBiOworfQorbm9JbmxpbmUoYWRkQXJnc09ubHlOdWxsKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTc7ICsraSkgeworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NPbmx5TnVsbChudWxs
LCBudWxsKTsKKyAgICBpZiAodmFsdWUgIT09IDApCisgICAgICAgIHRocm93ICJhZGRBcmdzT25s
eU51bGwobnVsbCwgbnVsbCkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1
ZSA9ICIgKyB2YWx1ZTsKK30KKworZnVuY3Rpb24gdGVzdEZhbGxiYWNrV2l0aFN0cmluZygpIHsK
KyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzT25seU51bGwoImZvbyIsICJiYXIiKTsKKyAgICBpZiAo
dmFsdWUgIT09ICJmb29iYXIiKQorICAgICAgICB0aHJvdyAiYWRkQXJnc09ubHlOdWxsKFwiZm9v
XCIsIFwiYmFyXCIpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAi
ICsgdmFsdWU7Cit9Cit0ZXN0RmFsbGJhY2tXaXRoU3RyaW5nKCk7ClwgTm8gbmV3bGluZSBhdCBl
bmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9kb3VibGUtcmVwLXdpdGgtdW5kZWZpbmVkLmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgtdW5kZWZpbmVkLmpzCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmNzM4
M2NlZDJkZjg3Y2Y0NTVlYmFmYTUzZDdmNDZiYTE5Nzg2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1yZXAtd2l0aC11bmRlZmlu
ZWQuanMKQEAgLTAsMCArMSwxMzEgQEAKKy8vIFVzaW5nIGZ1bGwgbnVtYmVyICsgdW5kZWZpbmVk
IGZvciBtYXRoLgorZnVuY3Rpb24gYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZChhLCBiKSB7Cisg
ICAgcmV0dXJuIGEgKyBiOworfQorbm9JbmxpbmUoYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB2YXIgdmFsdWUgPSBhZGRB
cmdzTnVtYmVyQW5kVW5kZWZpbmVkKGksIDEpOworICAgIGlmICh2YWx1ZSAhPT0gKGkgKyAxKSkK
KyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoaSwgMSkgZmFpbGVkIHdp
dGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2
YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoMC41LCBpKTsKKyAgICBpZiAodmFsdWUg
IT09IChpICsgMC41KSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQo
MC41LCBpKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZh
bHVlOworCisgICAgdmFyIHZhbHVlID0gYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCh1bmRlZmlu
ZWQsIGkpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdz
TnVtYmVyQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsg
IiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NO
dW1iZXJBbmRVbmRlZmluZWQoaSwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVl
KQorICAgICAgICB0aHJvdyAiYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQp
IGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisK
KyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKGkpOworICAgIGlmICh2
YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVk
KGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7
CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwg
dW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRk
QXJnc051bWJlckFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCkgZmFpbGVkIHdpdGgg
aSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1
ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVl
KQorICAgICAgICB0aHJvdyAiYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCgpIGZhaWxlZCB3aXRo
IGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9CisKKworLy8gVXNp
bmcgaW50MzIgKyB1bmRlZmluZWQgZm9yIG1hdGguCitmdW5jdGlvbiBhZGRBcmdzSW50MzJBbmRV
bmRlZmluZWQoYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NJ
bnQzMkFuZFVuZGVmaW5lZCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAg
ICB2YXIgdmFsdWUgPSBhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSwgMSk7CisgICAgaWYgKHZh
bHVlICE9PSAoaSArIDEpKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVk
KGksIDEpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFs
dWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQodW5kZWZpbmVk
LCBpKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0lu
dDMyQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiBy
ZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQz
MkFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisg
ICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSwgdW5kZWZpbmVkKSBmYWls
ZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCisgICAg
dmFyIHZhbHVlID0gYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVkKGkpOworICAgIGlmICh2YWx1ZSA9
PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSkgZmFp
bGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAg
IHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5l
ZCk7CisgICAgaWYgKHZhbHVlID09PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NJbnQz
MkFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCkgZmFpbGVkIHdpdGggaSA9ICIgKyBp
ICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFy
Z3NJbnQzMkFuZFVuZGVmaW5lZCgpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAg
IHRocm93ICJhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoKSBmYWlsZWQgd2l0aCBpID0gIiArIGkg
KyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworfQorCitmdW5jdGlvbiB0ZXN0RmFsbGJh
Y2tXaXRoRG91YmxlKCkgeworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmlu
ZWQoTWF0aC5QSSwgTWF0aC5QSSk7CisgICAgaWYgKHZhbHVlICE9PSAyICogTWF0aC5QSSkKKyAg
ICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoTWF0aC5QSSwgTWF0aC5QSSkg
ZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKK30K
K3Rlc3RGYWxsYmFja1dpdGhEb3VibGUoKTsKKworCisvLyBVc2luZyBmdWxsIG51bWJlciArIHVu
ZGVmaW5lZCBmb3IgbWF0aC4KK2Z1bmN0aW9uIGFkZEFyZ3NEb3VibGVBbmRVbmRlZmluZWQoYSwg
YikgeworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NEb3VibGVBbmRVbmRl
ZmluZWQpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDFlNzsgKytpKSB7CisgICAgdmFyIHZhbHVl
ID0gYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZCgwLjUsIGkpOworICAgIGlmICh2YWx1ZSAhPT0g
KGkgKyAwLjUpKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZCgwLjUs
IGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7
CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwg
MC4xKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0Rv
dWJsZUFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIg
cmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91
YmxlQW5kVW5kZWZpbmVkKDAuNiwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVl
KQorICAgICAgICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQp
IGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisK
KyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKDQyLjgpOworICAgIGlm
ICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzRG91YmxlQW5kVW5kZWZp
bmVkKGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFs
dWU7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWxsYmFja1dpdGhPYmplY3QoKSB7CisgICAgdmFyIHZh
bHVlID0gYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZChNYXRoLlBJLCB7IHZhbHVlT2Y6IGZ1bmN0
aW9uKCkgeyByZXR1cm4gNTsgfX0pOworICAgIGlmICh2YWx1ZSAhPT0gNSArIE1hdGguUEkpCisg
ICAgICAgIHRocm93ICJhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKE1hdGguUEksIHsgdmFsdWVP
ZjogZnVuY3Rpb24oKSB7IHJldHVybiA1OyB9fSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiBy
ZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKK30KK3Rlc3RGYWxsYmFja1dpdGhPYmplY3QoKTsK
KworCisvLyBVc2luZyBmdWxsIG51bWJlciArIHVuZGVmaW5lZCBmb3IgbWF0aC4KK2Z1bmN0aW9u
IGFkZEFyZ3NPbmx5VW5kZWZpbmVkKGEsIGIpIHsKKyAgICByZXR1cm4gYSArIGI7Cit9Citub0lu
bGluZShhZGRBcmdzT25seVVuZGVmaW5lZCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyAr
K2kpIHsKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzT25seVVuZGVmaW5lZCh1bmRlZmluZWQsIHVu
ZGVmaW5lZCk7CisgICAgaWYgKHZhbHVlID09PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgImFkZEFy
Z3NPbmx5VW5kZWZpbmVkKHVuZGVmaW5lZCwgdW5kZWZpbmVkKSBmYWlsZWQgd2l0aCBpID0gIiAr
IGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCisgICAgdmFyIHZhbHVlID0gYWRk
QXJnc09ubHlVbmRlZmluZWQoKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0
aHJvdyAiYWRkQXJnc09ubHlVbmRlZmluZWQoKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJl
dHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworfQorCitmdW5jdGlvbiB0ZXN0RmFsbGJhY2tXaXRo
U3RyaW5nKCkgeworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NPbmx5VW5kZWZpbmVkKCJmb28iLCAi
YmFyIik7CisgICAgaWYgKHZhbHVlICE9PSAiZm9vYmFyIikKKyAgICAgICAgdGhyb3cgImFkZEFy
Z3NPbmx5VW5kZWZpbmVkKFwiZm9vXCIsIFwiYmFyXCIpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSAr
ICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9Cit0ZXN0RmFsbGJhY2tXaXRoU3RyaW5n
KCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDMwNzhhY2I5NmFhNjYwZmJi
OGNlOTMxNWVjMTliMzJiYzBjMDNiNWMuLmJlNTY4NWUzNDY4MjhmMjgyYWUwOThkNzYxZWE4YWI5
ZjkxZDdmMDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAxNS0wNS0yMSAgQmVuamFtaW4gUG91
bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgdW5kZWZpbmVk
LT5kb3VibGUgY29udmVyc2lvbiB0byBEb3VibGVSZXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICoganMvcmVncmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJv
dW5kcy1hcnJheS12YWx1ZXMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5odG1sOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1h
cnJheS12YWx1ZXMuanM6IEFkZGVkLgorCiAyMDE1LTA1LTE5ICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgW01hY10gRm9udCBsb29rdXBzIGFyZSBmbGFrZXkgZHVl
IHRvIGNhY2hpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWF0aC13aXRo
LW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2pz
L3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLWV4cGVjdGVkLnR4
dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mZWEwYTY5OThjOTQxM2JlN2UyMzVjODEyYjczN2ViNWIwMThhZjRlCi0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXRoLXdpdGgtb3V0LW9m
LWJvdW5kcy1hcnJheS12YWx1ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVn
cmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNz
ZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLmh0
bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5
LXZhbHVlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhZWFlYjJjY2I3NTRiYzgyN2JiNDdmYzk0Y2E5MTYz
YmUyYmZkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21hdGgt
d2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5odG1sCkBAIC0wLDAgKzEsMTIgQEAKKzwh
RE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhl
YWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3Njcmlw
dD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNz
LXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL21hdGgtd2l0aC1v
dXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXRoLXdp
dGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMuanMgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMuanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uMTY4ODJkOGU4OWY5MjBiMDljMzUwNWQzODE2ZDdmYTRlNWQ0ZjFjZAotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL21hdGgtd2l0
aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5qcwpAQCAtMCwwICsxLDE5IEBACitmdW5jdGlv
biBtYXRoV2l0aE91dE9mQm91bmRzQWNjZXNzKGFycmF5QSwgYXJyYXlCKQoreworICAgIHZhciBv
dXRwdXQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgeworICAgICAgICBv
dXRwdXQgKz0gKGFycmF5QVtpXSArIGFycmF5QltpXSk7CisgICAgfQorICAgIHJldHVybiBvdXRw
dXQ7Cit9CisKK25vSW5saW5lKG1hdGhXaXRoT3V0T2ZCb3VuZHNBY2Nlc3MpOworCitmdW5jdGlv
biB0ZXN0KCkgeworICAgIHZhciBpbnRlZ2VyQXJyYXkgPSBbMCwgMSwgMiwgMywgNF07CisgICAg
dmFyIGRvdWJsZUFycmF5ID0gWzAuMSwgMS4yLCAyLjMsIDMuNCwgNC41XTsKKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIG1hdGhXaXRoT3V0T2ZCb3VuZHNBY2Nl
c3MoaW50ZWdlckFycmF5LCBkb3VibGVBcnJheSk7Cit9Cit0ZXN0KCk7ClwgTm8gbmV3bGluZSBh
dCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>253739</attachid>
            <date>2015-05-26 14:34:47 -0700</date>
            <delta_ts>2015-05-26 14:34:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-145293-20150526143435.patch</filename>
            <type>text/plain</type>
            <size>32171</size>
            <attacher name="Benjamin Poulain">benjamin</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg0ODY5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBh
NWViNjg3OTQ5OTM1NGVkMTY4Y2RlOGY0NTNkMzBhYWJlMmE3NDlmLi41NmYyZWQzNTJiOGY3OTE0
MWVjOWNmYWUyNzRmNzVjMGIwMTlkYWZmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw2MSBAQAorMjAxNS0wNS0yNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxl
LmNvbT4KKworICAgICAgICBbSlNDXSBBZGQgdW5kZWZpbmVkLT5kb3VibGUgY29udmVyc2lvbiB0
byBEb3VibGVSZXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE0NTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAg
IFRoaXMgcGF0Y2ggYWRkcyB1bmRlZmluZWQgdG8gZG91YmxlIGNvbnZlcnNpb24gdG8gdGhlIERv
dWJsZVJlcAorICAgICAgICBub2RlIGZvciB0aGUgY2FzZXMgd2VyZSB3ZSBzcGVjdWxhdGUgInVu
ZGVmaW5lZCIgYXMgcGFydCBvZiB0aGUgdHlwZXMKKyAgICAgICAgcHJvY2Vzc2VkLgorCisgICAg
ICAgIFRoZSB1c2UgY2FzZSBpcyBkb2luZyBtYXRoIHdpdGggYWNjaWRlbnRhbCBvdXQtb2YtYm91
bmRzIGFjY2Vzcy4gRm9yIGV4YW1wbGUsCisgICAgICAgIHNvbWV0aGluZyBsaWtlOgorICAgICAg
ICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPD0gbGVuZ3RoOyArK2kpCisgICAgICAgICAgICAgICAg
b3VwdHB1dCArPSBhcnJheVtpXTsKKworICAgICAgICB3b3VsZCBjYXVzZSB1cyB0byBPU1IgZXhp
dCBldmVyeSB0aW1lIGkgPT09IGxlbmd0aC4KKworICAgICAgICBXaGVuIGhpdHRpbmcgb25lIG9m
IHRob3NlIGNhc2VzLCB3ZSB3b3VsZCBhbHJlYWR5IHNwZWN1bGF0ZSBkb3VibGUgbWF0aCwKKyAg
ICAgICAgYnV0IHRoZSBEb3VibGVSZXAgbm9kZSB3YXMgdW5hYmxlIHRvIGNvbnZlcnQgdGhlIHVu
ZGVmaW5lZCBhbmQgd291bGQgZXhpdC4KKworICAgICAgICBXaXRoIHRoaXMgcGF0Y2ggdGhlIHVz
ZSBraW5kIE5vdENlbGxVc2UgY292ZXIgdGhpcyBjb252ZXJzaW9uIGZvciBEb3VibGVSZXAuCisg
ICAgICAgIEkgaGF2ZSBiZWVuIHF1aXRlIGNvbnNlcnZhdGl2ZSBzbyBpbiBnZW5lcmFsIHdlIHdp
bGwgbm90IGZpbmQgInVuZGVmaW5lZCIKKyAgICAgICAgdW50aWwgYSBmZXcgcmVjb21waWxlIGJ1
dCBiZWluZyBvcHRpbWlzdGljIHNlZW1zIGJldHRlciBzaW5jZSB0aGlzIGlzIGEgY29ybmVyIGNh
c2UuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpcyBhIDgwJSBwcm9ncmVzc2lvbiBvbiBXZWJYUFJU
J3MgRE5BIFNlcXVlbmNpbmcgdGVzdC4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8
QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0Zp
eHVwUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkZpeHVwUGhhc2U6OmluamVjdFR5cGVD
b252ZXJzaW9uc0ZvckVkZ2UpOgorICAgICAgICAqIGRmZy9ERkdOb2RlLmg6CisgICAgICAgIChK
U0M6OkRGRzo6Tm9kZTo6c2F3VW5kZWZpbmVkKToKKyAgICAgICAgKiBkZmcvREZHUHJlZGljdGlv
blByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9ERkdTYWZlVG9FeGVjdXRl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6U2FmZVRvRXhlY3V0ZUVkZ2U6Om9wZXJhdG9yKCkpOgor
ICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVEb3VibGVSZXApOgorICAgICAgICAqIGRmZy9ERkdVc2VL
aW5kLmNwcDoKKyAgICAgICAgKFdURjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogZGZnL0RG
R1VzZUtpbmQuaDoKKyAgICAgICAgKEpTQzo6REZHOjp0eXBlRmlsdGVyRm9yKToKKyAgICAgICAg
KiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpjYW5Db21waWxl
KToKKyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpG
VEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlRG91YmxlUmVwKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMb3dlckRGR1RvTExWTTo6anNWYWx1ZVRvRG91YmxlKToKKyAgICAgICAgKiB0ZXN0cy9zdHJl
c3MvZG91YmxlLXJlcC13aXRoLXVuZGVmaW5lZC5qczogQWRkZWQuCisgICAgICAgIChhZGRBcmdz
TnVtYmVyQW5kVW5kZWZpbmVkKToKKyAgICAgICAgKGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCk6
CisgICAgICAgICh0ZXN0RmFsbGJhY2tXaXRoRG91YmxlKToKKyAgICAgICAgKGFkZEFyZ3NEb3Vi
bGVBbmRVbmRlZmluZWQpOgorICAgICAgICAodGVzdEZhbGxiYWNrV2l0aE9iamVjdC4pOgorICAg
ICAgICAodGVzdEZhbGxiYWNrV2l0aE9iamVjdCk6CisgICAgICAgIChhZGRBcmdzT25seVVuZGVm
aW5lZCk6CisgICAgICAgICh0ZXN0RmFsbGJhY2tXaXRoU3RyaW5nKToKKwogMjAxNS0wNS0yNiAg
WXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KIAogICAgICAgICBJbmxpbmUg
QEFycmF5IC8gQE9iamVjdCBjYWxsc2l0ZXMKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAppbmRleCAxN2VhYjA5
NWNhOWU3MmI2YjZiYTlkOTJjY2I5ZTgzY2Y2MmY5MjI0Li44NjFlYjYxZjQ0ZjgxNjdiMjlkOTA0
ZWEzY2I1MTYyMTZhZWEyYmRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCkBAIC0zNjAsNyArMzYwLDMw
IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHlwZT46OmV4ZWN1dGVF
ZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgICAgICAgICBzZXRDb25zdGFudChub2Rl
LCBqc0RvdWJsZU51bWJlcihjaGlsZC5hc051bWJlcigpKSk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgfQotICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUobV9ncmFwaCwgZm9yTm9k
ZShub2RlLT5jaGlsZDEoKSkubV90eXBlKTsKKworICAgICAgICBTcGVjdWxhdGVkVHlwZSB0eXBl
ID0gZm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICBzd2l0Y2ggKG5vZGUt
PmNoaWxkMSgpLnVzZUtpbmQoKSkgeworICAgICAgICBjYXNlIE5vdENlbGxVc2U6IHsKKyAgICAg
ICAgICAgIGlmICh0eXBlICYgU3BlY090aGVyKSB7CisgICAgICAgICAgICAgICAgdHlwZSAmPSB+
U3BlY090aGVyOworICAgICAgICAgICAgICAgIHR5cGUgfD0gU3BlY0RvdWJsZVB1cmVOYU4gfCBT
cGVjQm9vbEludDMyOyAvLyBOdWxsIGJlY29tZXMgemVybywgdW5kZWZpbmVkIGJlY29tZXMgTmFO
LgorICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHR5cGUgJiBTcGVjQm9vbGVhbikgewor
ICAgICAgICAgICAgICAgIHR5cGUgJj0gflNwZWNCb29sZWFuOworICAgICAgICAgICAgICAgIHR5
cGUgfD0gU3BlY0Jvb2xJbnQzMjsgLy8gVHJ1ZSBiZWNvbWVzIDEsIGZhbHNlIGJlY29tZXMgMC4K
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHR5cGUgJj0gU3BlY0J5dGVjb2RlTnVtYmVyOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBjYXNlIEludDUyUmVwVXNl
OgorICAgICAgICBjYXNlIE51bWJlclVzZToKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICB9CisgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZSh0eXBlKTsKICAgICAgICAgZm9y
Tm9kZShub2RlKS5maXhUeXBlRm9yUmVwcmVzZW50YXRpb24obV9ncmFwaCwgbm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHRml4dXBQaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhh
c2UuY3BwCmluZGV4IGZjMDI5ZGU1MTMwNGZlYTg5NDM5NGViYmE5OTFiYzIwZDVkOGYyZWUuLmI0
ZTNmM2NiY2UyODNkNmE1YmIxMzU0YmQ4YmY5YmQ2MGM5YmYyMzIgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcApAQCAtMjEyOCw5ICsyMTI4LDEzIEBAIHBy
aXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIG1faW5kZXhJbkJsb2NrLCBTcGVjSW50NTJBc0Rv
dWJsZSwgRG91YmxlUmVwLCBub2RlLT5vcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgIEVkZ2Uo
ZWRnZS5ub2RlKCksIEludDUyUmVwVXNlKSk7CiAgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIFVzZUtpbmQgdXNlS2luZCA9IE5vdENlbGxVc2U7CisgICAgICAgICAgICAgICAg
aWYgKGVkZ2UtPnNob3VsZFNwZWN1bGF0ZU51bWJlcigpKQorICAgICAgICAgICAgICAgICAgICB1
c2VLaW5kID0gTnVtYmVyVXNlOworCiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gbV9pbnNlcnRp
b25TZXQuaW5zZXJ0Tm9kZSgKICAgICAgICAgICAgICAgICAgICAgbV9pbmRleEluQmxvY2ssIFNw
ZWNCeXRlY29kZURvdWJsZSwgRG91YmxlUmVwLCBub2RlLT5vcmlnaW4sCi0gICAgICAgICAgICAg
ICAgICAgIEVkZ2UoZWRnZS5ub2RlKCksIE51bWJlclVzZSkpOworICAgICAgICAgICAgICAgICAg
ICBFZGdlKGVkZ2Uubm9kZSgpLCB1c2VLaW5kKSk7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGVkZ2Uuc2V0Tm9kZShyZXN1bHQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAppbmRleCAzZGY4
ODEyOTU4MzkyNmE3OTkyMjk4NDIwM2U2ZGU2MzhiZDY2NGJmLi5jZGUwOWJmMTIxYjIxZjhhNGZl
YjYwZGZhMjRmYjQyMGI2YTliYWJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcApAQCAtNDAyLDYg
KzQwMiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIFNwZWNOb25lKTsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CisgICAgICAgICAg
ICBjYXNlIEFycmF5OjpJbnQzMjoKKyAgICAgICAgICAgICAgICBpZiAoYXJyYXlNb2RlLmlzT3V0
T2ZCb3VuZHMoKSkKKyAgICAgICAgICAgICAgICAgICAgY2hhbmdlZCB8PSBtZXJnZVByZWRpY3Rp
b24obm9kZS0+Z2V0SGVhcFByZWRpY3Rpb24oKSB8IFNwZWNJbnQzMik7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihT
cGVjSW50MzIpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBBcnJh
eTo6RG91YmxlOgogICAgICAgICAgICAgICAgIGlmIChhcnJheU1vZGUuaXNPdXRPZkJvdW5kcygp
KQogICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkIHw9IG1lcmdlUHJlZGljdGlvbihub2RlLT5n
ZXRIZWFwUHJlZGljdGlvbigpIHwgU3BlY0RvdWJsZVJlYWwpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAppbmRleCBiZjBmNzhkNDY5MmMwY2Jh
YTRmYjRiNzM2NzMyYTY1NzYxOTMxMzQzLi45YWE5MWU3YmU1ZjJiZjhlZTM4ODk1MTVjZjMzMDJh
Zjk4YjZlYjBkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcApAQCAtMjA2NiwzMSArMjA2Niw1OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlRG91YmxlQXNJbnQzMihOb2RlKiBub2RlKQogdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29t
cGlsZURvdWJsZVJlcChOb2RlKiBub2RlKQogewogICAgIHN3aXRjaCAobm9kZS0+Y2hpbGQxKCku
dXNlS2luZCgpKSB7CisgICAgY2FzZSBOb3RDZWxsVXNlOgogICAgIGNhc2UgTnVtYmVyVXNlOiB7
CiAgICAgICAgIEFTU0VSVCghbm9kZS0+Y2hpbGQxKCktPmlzTnVtYmVyQ29uc3RhbnQoKSk7IC8v
IFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjb25zdGFudCBmb2xkZWQuCi0gICAgCi0gICAgICAgIGlm
IChpc0ludDMyU3BlY3VsYXRpb24obV9zdGF0ZS5mb3JOb2RlKG5vZGUtPmNoaWxkMSgpKS5tX3R5
cGUpKSB7CisKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcG9zc2libGVUeXBlcyA9IG1fc3RhdGUu
Zm9yTm9kZShub2RlLT5jaGlsZDEoKSkubV90eXBlOworICAgICAgICBpZiAoaXNJbnQzMlNwZWN1
bGF0aW9uKHBvc3NpYmxlVHlwZXMpKSB7CiAgICAgICAgICAgICBTcGVjdWxhdGVJbnQzMk9wZXJh
bmQgb3AxKHRoaXMsIG5vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwog
ICAgICAgICAgICAgRlBSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICAgICAgICAgIG1faml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMS5ncHIoKSwgcmVzdWx0LmZwcigpKTsKICAgICAgICAg
ICAgIGRvdWJsZVJlc3VsdChyZXN1bHQuZnByKCksIG5vZGUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9Ci0gICAgCisKICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgb3AxKHRoaXMsIG5v
ZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVyYW5kU3BlY3VsYXRpb24pOwogICAgICAgICBGUFJUZW1w
b3JhcnkgcmVzdWx0KHRoaXMpOwotICAgIAorCiAjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAg
R1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7CiAKICAgICAgICAgR1BSUmVnIG9wMUdQUiA9IG9wMS5n
cHIoKTsKICAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwogICAgICAgICBGUFJS
ZWcgcmVzdWx0RlBSID0gcmVzdWx0LmZwcigpOwotICAgIAorICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3QgZG9uZTsKKwogICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ludGVnZXIgPSBt
X2ppdC5icmFuY2g2NCgKICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpBYm92ZU9yRXF1YWws
IG9wMUdQUiwgR1BSSW5mbzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyKTsKLSAgICAKLSAgICAgICAg
aWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1iZXIpKSB7
CisKKyAgICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpLnVzZUtpbmQoKSA9PSBOb3RDZWxsVXNlKSB7
CisgICAgICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc051bWJlciA9IG1faml0LmJyYW5jaFRl
c3Q2NChNYWNyb0Fzc2VtYmxlcjo6Tm9uWmVybywgb3AxR1BSLCBHUFJJbmZvOjp0YWdUeXBlTnVt
YmVyUmVnaXN0ZXIpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNVbmRlZmluZWQg
PSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6RXF1YWwsIG9wMUdQUiwgVHJ1c3RlZEltbTY0
KFZhbHVlVW5kZWZpbmVkKSk7CisKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgemVy
byA9IDA7CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKCZ6ZXJvKSwgcmVzdWx0RlBSKTsKKworICAgICAgICAgICAgSklUQ29tcGlsZXI6
Okp1bXAgaXNOdWxsID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGlsZXI6OkVxdWFsLCBvcDFHUFIs
IFRydXN0ZWRJbW02NChWYWx1ZU51bGwpKTsKKyAgICAgICAgICAgIGRvbmUuYXBwZW5kKGlzTnVs
bCk7CisKKyAgICAgICAgICAgIERGR19UWVBFX0NIRUNLKEpTVmFsdWVSZWdzKG9wMUdQUiksIG5v
ZGUtPmNoaWxkMSgpLCB+U3BlY0NlbGwsCisgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVz
dDY0KEpJVENvbXBpbGVyOjpOb25aZXJvLCBvcDFHUFIsIFRydXN0ZWRJbW0zMihzdGF0aWNfY2Fz
dDxpbnQzMl90Pih+MSkpKSk7CisKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzRmFs
c2UgPSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6RXF1YWwsIG9wMUdQUiwgVHJ1c3RlZElt
bTY0KFZhbHVlRmFsc2UpKTsKKyAgICAgICAgICAgIHN0YXRpYyBjb25zdCBkb3VibGUgb25lID0g
MTsKKyAgICAgICAgICAgIG1faml0LmxvYWREb3VibGUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW1QdHIoJm9uZSksIHJlc3VsdEZQUik7CisgICAgICAgICAgICBkb25lLmFwcGVuZChpc0ZhbHNl
KTsKKworICAgICAgICAgICAgaXNVbmRlZmluZWQubGluaygmbV9qaXQpOworICAgICAgICAgICAg
c3RhdGljIGNvbnN0IGRvdWJsZSBOYU4gPSBQTmFOOworICAgICAgICAgICAgbV9qaXQubG9hZERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmTmFOKSwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAoKSk7CisKKyAgICAgICAgICAgIGlzTnVt
YmVyLmxpbmsoJm1faml0KTsKKyAgICAgICAgfSBlbHNlIGlmIChuZWVkc1R5cGVDaGVjayhub2Rl
LT5jaGlsZDEoKSwgU3BlY0J5dGVjb2RlTnVtYmVyKSkgewogICAgICAgICAgICAgdHlwZUNoZWNr
KAogICAgICAgICAgICAgICAgIEpTVmFsdWVSZWdzKG9wMUdQUiksIG5vZGUtPmNoaWxkMSgpLCBT
cGVjQnl0ZWNvZGVOdW1iZXIsCiAgICAgICAgICAgICAgICAgbV9qaXQuYnJhbmNoVGVzdDY0KE1h
Y3JvQXNzZW1ibGVyOjpaZXJvLCBvcDFHUFIsIEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3Rl
cikpOwpAQCAtMjA5OCw3ICsyMTI1LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURv
dWJsZVJlcChOb2RlKiBub2RlKQogICAgIAogICAgICAgICBtX2ppdC5tb3ZlKG9wMUdQUiwgdGVt
cEdQUik7CiAgICAgICAgIHVuYm94RG91YmxlKHRlbXBHUFIsIHJlc3VsdEZQUik7Ci0gICAgICAg
IEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGRvbmUuYXBw
ZW5kKG1faml0Lmp1bXAoKSk7CiAgICAgCiAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7
CiAgICAgICAgIG1faml0LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMUdQUiwgcmVzdWx0RlBSKTsK
QEAgLTIxMTAsMTggKzIxMzcsNDIgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZURvdWJs
ZVJlcChOb2RlKiBub2RlKQogICAgICAgICBHUFJSZWcgb3AxUGF5bG9hZEdQUiA9IG9wMS5wYXls
b2FkR1BSKCk7CiAgICAgICAgIEZQUlJlZyB0ZW1wRlBSID0gdGVtcC5mcHIoKTsKICAgICAgICAg
RlBSUmVnIHJlc3VsdEZQUiA9IHJlc3VsdC5mcHIoKTsKKyAgICAgICAgSklUQ29tcGlsZXI6Okp1
bXBMaXN0IGRvbmU7CiAgICAgCiAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzSW50ZWdlciA9
IG1faml0LmJyYW5jaDMyKAogICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkVxdWFsLCBvcDFU
YWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpJbnQzMlRhZykpOwotICAgIAotICAgICAgICBp
ZiAobmVlZHNUeXBlQ2hlY2sobm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29kZU51bWJlcikpIHsK
KworICAgICAgICBpZiAobm9kZS0+Y2hpbGQxKCkudXNlS2luZCgpID09IE5vdENlbGxVc2UpIHsK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVtYmVyID0gbV9qaXQuYnJhbmNoMzIo
SklUQ29tcGlsZXI6OkJlbG93LCBvcDFUYWdHUFIsIEpJVENvbXBpbGVyOjpUcnVzdGVkSW1tMzIo
SlNWYWx1ZTo6TG93ZXN0VGFnICsgMSkpOworICAgICAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAg
aXNVbmRlZmluZWQgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIG9wMVRhZ0dQ
UiwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OlVuZGVmaW5lZFRhZykpOworCisgICAgICAgICAgICBz
dGF0aWMgY29uc3QgZG91YmxlIHplcm8gPSAwOworICAgICAgICAgICAgbV9qaXQubG9hZERvdWJs
ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmemVybyksIHJlc3VsdEZQUik7CisKKyAg
ICAgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzTnVsbCA9IG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpFcXVhbCwgb3AxVGFnR1BSLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TnVsbFRhZykp
OworICAgICAgICAgICAgZG9uZS5hcHBlbmQoaXNOdWxsKTsKKworICAgICAgICAgICAgREZHX1RZ
UEVfQ0hFQ0soSlNWYWx1ZVJlZ3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hp
bGQxKCksIH5TcGVjQ2VsbCwgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6Ok5vdEVxdWFsLCBv
cDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSkpOworCisgICAgICAg
ICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0ZhbHNlID0gbV9qaXQuYnJhbmNoVGVzdDMyKEpJVENv
bXBpbGVyOjpaZXJvLCBvcDFQYXlsb2FkR1BSLCBUcnVzdGVkSW1tMzIoMSkpOworICAgICAgICAg
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBvbmUgPSAxOworICAgICAgICAgICAgbV9qaXQubG9hZERv
dWJsZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigmb25lKSwgcmVzdWx0RlBSKTsKKyAg
ICAgICAgICAgIGRvbmUuYXBwZW5kKGlzRmFsc2UpOworCisgICAgICAgICAgICBpc1VuZGVmaW5l
ZC5saW5rKCZtX2ppdCk7CisgICAgICAgICAgICBzdGF0aWMgY29uc3QgZG91YmxlIE5hTiA9IFBO
YU47CisgICAgICAgICAgICBtX2ppdC5sb2FkRG91YmxlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVk
SW1tUHRyKCZOYU4pLCByZXN1bHRGUFIpOworICAgICAgICAgICAgZG9uZS5hcHBlbmQobV9qaXQu
anVtcCgpKTsKKworICAgICAgICAgICAgaXNOdW1iZXIubGluaygmbV9qaXQpOworICAgICAgICB9
IGVsc2UgaWYgKG5lZWRzVHlwZUNoZWNrKG5vZGUtPmNoaWxkMSgpLCBTcGVjQnl0ZWNvZGVOdW1i
ZXIpKSB7CiAgICAgICAgICAgICB0eXBlQ2hlY2soCiAgICAgICAgICAgICAgICAgSlNWYWx1ZVJl
Z3Mob3AxVGFnR1BSLCBvcDFQYXlsb2FkR1BSKSwgbm9kZS0+Y2hpbGQxKCksIFNwZWNCeXRlY29k
ZU51bWJlciwKICAgICAgICAgICAgICAgICBtX2ppdC5icmFuY2gzMihNYWNyb0Fzc2VtYmxlcjo6
QWJvdmVPckVxdWFsLCBvcDFUYWdHUFIsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RUYWcp
KSk7CiAgICAgICAgIH0KLSAgICAKKwogICAgICAgICB1bmJveERvdWJsZShvcDFUYWdHUFIsIG9w
MVBheWxvYWRHUFIsIHJlc3VsdEZQUiwgdGVtcEZQUik7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpK
dW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CisgICAgICAgIGRvbmUuYXBwZW5kKG1faml0Lmp1bXAo
KSk7CiAgICAgCiAgICAgICAgIGlzSW50ZWdlci5saW5rKCZtX2ppdCk7CiAgICAgICAgIG1faml0
LmNvbnZlcnRJbnQzMlRvRG91YmxlKG9wMVBheWxvYWRHUFIsIHJlc3VsdEZQUik7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCmluZGV4IGViMzE5
YzE1NjM5ODg0YmRiNjkwMjRlNTI0MGYxYWI1NTI3NTNhOWUuLjUwZDI1YmZiZmQ0N2FhZWIwOGQz
OTgxMDFkMmRiYjA1ZjAxMjk1YmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTG93ZXJERkdUb0xMVk0uY3BwCkBAIC05NTgsOSArOTU4LDEyIEBAIHByaXZhdGU6CiAgICAg
dm9pZCBjb21waWxlRG91YmxlUmVwKCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAobV9ub2RlLT5j
aGlsZDEoKS51c2VLaW5kKCkpIHsKKyAgICAgICAgY2FzZSBOb3RDZWxsVXNlOgogICAgICAgICBj
YXNlIE51bWJlclVzZTogeworICAgICAgICAgICAgYm9vbCBzaG91bGRDb252ZXJ0Tm9uTnVtYmVy
ID0gbV9ub2RlLT5jaGlsZDEoKS51c2VLaW5kKCkgPT0gTm90Q2VsbFVzZTsKKwogICAgICAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpLCBNYW51YWxPcGVy
YW5kU3BlY3VsYXRpb24pOwotICAgICAgICAgICAgc2V0RG91YmxlKGpzVmFsdWVUb0RvdWJsZSht
X25vZGUtPmNoaWxkMSgpLCB2YWx1ZSkpOworICAgICAgICAgICAgc2V0RG91YmxlKGpzVmFsdWVU
b0RvdWJsZShtX25vZGUtPmNoaWxkMSgpLCB2YWx1ZSwgc2hvdWxkQ29udmVydE5vbk51bWJlcikp
OwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTcxOTks
MTAgKzcyMDIsMTIgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIHJldHVybiBtX291dC5zdWIo
bV9vdXQuYml0Q2FzdChkb3VibGVWYWx1ZSwgbV9vdXQuaW50NjQpLCBtX3RhZ1R5cGVOdW1iZXIp
OwogICAgIH0KLSAgICBMVmFsdWUganNWYWx1ZVRvRG91YmxlKEVkZ2UgZWRnZSwgTFZhbHVlIGJv
eGVkVmFsdWUpCisgICAgTFZhbHVlIGpzVmFsdWVUb0RvdWJsZShFZGdlIGVkZ2UsIExWYWx1ZSBi
b3hlZFZhbHVlLCBib29sIHNob3VsZENvbnZlcnROb25OdW1iZXIpCiAgICAgewogICAgICAgICBM
QmFzaWNCbG9jayBpbnRDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3Vi
bGUgdW5ib3hpbmcgaW50IGNhc2UiKSk7CisgICAgICAgIExCYXNpY0Jsb2NrIGRvdWJsZVRlc3Rp
bmcgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJsZSB0ZXN0aW5nIGRvdWJs
ZSBjYXNlIikpOwogICAgICAgICBMQmFzaWNCbG9jayBkb3VibGVDYXNlID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgdW5ib3hpbmcgZG91YmxlIGNhc2UiKSk7CisgICAg
ICAgIExCYXNpY0Jsb2NrIG5vbkRvdWJsZUNhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpz
VmFsdWVUb0RvdWJsZSB0ZXN0aW5nIHVuZGVmaW5lZCBjYXNlIikpOwogICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFsdWVUb0RvdWJs
ZSB1bmJveGluZyBjb250aW51YXRpb24iKSk7CiAgICAgICAgICAgICAKICAgICAgICAgTFZhbHVl
IGlzTm90SW50MzI7CkBAIC03MjEyLDI0ICs3MjE3LDcwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBpc05vdEludDMyID0gbV9vdXQuYm9vbGVhblRydWU7CiAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgIGlzTm90SW50MzIgPSB0aGlzLT5pc05vdEludDMyKGJveGVkVmFsdWUpOwotICAgICAgICBt
X291dC5icmFuY2goaXNOb3RJbnQzMiwgdW5zdXJlKGRvdWJsZUNhc2UpLCB1bnN1cmUoaW50Q2Fz
ZSkpOworICAgICAgICBtX291dC5icmFuY2goaXNOb3RJbnQzMiwgdW5zdXJlKGRvdWJsZVRlc3Rp
bmcpLCB1bnN1cmUoaW50Q2FzZSkpOwogICAgICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2Nr
IGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50Q2FzZSwgZG91YmxlQ2FzZSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaW50Q2FzZSwgZG91YmxlVGVz
dGluZyk7CiAgICAgICAgICAgICAKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgaW50VG9Eb3VibGUg
PSBtX291dC5hbmNob3IoCiAgICAgICAgICAgICBtX291dC5pbnRUb0RvdWJsZSh1bmJveEludDMy
KGJveGVkVmFsdWUpKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAg
ICAgICAgIAotICAgICAgICBtX291dC5hcHBlbmRUbyhkb3VibGVDYXNlLCBjb250aW51YXRpb24p
OwotICAgICAgICAgICAgCi0gICAgICAgIEZUTF9UWVBFX0NIRUNLKAotICAgICAgICAgICAganNW
YWx1ZVZhbHVlKGJveGVkVmFsdWUpLCBlZGdlLCBTcGVjQnl0ZWNvZGVOdW1iZXIsIGlzQ2VsbE9y
TWlzYyhib3hlZFZhbHVlKSk7Ci0gICAgICAgICAgICAKKyAgICAgICAgbV9vdXQuYXBwZW5kVG8o
ZG91YmxlVGVzdGluZywgZG91YmxlQ2FzZSk7CisgICAgICAgIExWYWx1ZSB2YWx1ZUlzTnVtYmVy
ID0gaXNOdW1iZXIoYm94ZWRWYWx1ZSk7CisgICAgICAgIG1fb3V0LmJyYW5jaCh2YWx1ZUlzTnVt
YmVyLCB1c3VhbGx5KGRvdWJsZUNhc2UpLCByYXJlbHkobm9uRG91YmxlQ2FzZSkpOworCisgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGRvdWJsZUNhc2UsIG5vbkRvdWJsZUNhc2UpOwogICAgICAgICBW
YWx1ZUZyb21CbG9jayB1bmJveGVkRG91YmxlID0gbV9vdXQuYW5jaG9yKHVuYm94RG91YmxlKGJv
eGVkVmFsdWUpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwotICAgICAgICAg
ICAgCisKKyAgICAgICAgaWYgKHNob3VsZENvbnZlcnROb25OdW1iZXIpIHsKKyAgICAgICAgICAg
IExCYXNpY0Jsb2NrIHVuZGVmaW5lZENhc2UgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoImpzVmFs
dWVUb0RvdWJsZSBjb252ZXJ0aW5nIHVuZGVmaW5lZCBjYXNlIikpOworICAgICAgICAgICAgTEJh
c2ljQmxvY2sgdGVzdE51bGxDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9E
b3VibGUgdGVzdGluZyBudWxsIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBudWxs
Q2FzZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIGNvbnZlcnRpbmcg
bnVsbCBjYXNlIikpOworICAgICAgICAgICAgTEJhc2ljQmxvY2sgdGVzdEJvb2xlYW5UcnVlQ2Fz
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgianNWYWx1ZVRvRG91YmxlIHRlc3RpbmcgYm9vbGVh
biB0cnVlIGNhc2UiKSk7CisgICAgICAgICAgICBMQmFzaWNCbG9jayBjb252ZXJ0Qm9vbGVhblRy
dWVDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29udmVydCBi
b29sZWFuIHRydWUgY2FzZSIpKTsKKyAgICAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnZlcnRCb29s
ZWFuRmFsc2VDYXNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJqc1ZhbHVlVG9Eb3VibGUgY29u
dmVydCBib29sZWFuIGZhbHNlIGNhc2UiKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KG5vbkRvdWJsZUNhc2UsIHVuZGVmaW5lZENhc2UpOworICAgICAgICAgICAgTFZhbHVlIHZhbHVl
SXNVbmRlZmluZWQgPSBtX291dC5lcXVhbChib3hlZFZhbHVlLCBtX291dC5jb25zdEludDY0KFZh
bHVlVW5kZWZpbmVkKSk7CisgICAgICAgICAgICBtX291dC5icmFuY2godmFsdWVJc1VuZGVmaW5l
ZCwgdW5zdXJlKHVuZGVmaW5lZENhc2UpLCB1bnN1cmUodGVzdE51bGxDYXNlKSk7CisKKyAgICAg
ICAgICAgIG1fb3V0LmFwcGVuZFRvKHVuZGVmaW5lZENhc2UsIHRlc3ROdWxsQ2FzZSk7CisgICAg
ICAgICAgICBWYWx1ZUZyb21CbG9jayBjb252ZXJ0ZWRVbmRlZmluZWQgPSBtX291dC5hbmNob3Io
bV9vdXQuY29uc3REb3VibGUoUE5hTikpOworICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0ZXN0TnVsbENhc2UsIG51bGxD
YXNlKTsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZUlzTnVsbCA9IG1fb3V0LmVxdWFsKGJveGVk
VmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVOdWxsKSk7CisgICAgICAgICAgICBtX291dC5i
cmFuY2godmFsdWVJc051bGwsIHVuc3VyZShudWxsQ2FzZSksIHVuc3VyZSh0ZXN0Qm9vbGVhblRy
dWVDYXNlKSk7CisKKyAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG51bGxDYXNlLCB0ZXN0Qm9v
bGVhblRydWVDYXNlKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIGNvbnZlcnRlZE51bGwg
PSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMCkpOworICAgICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291dC5hcHBlbmRUbyh0ZXN0Qm9v
bGVhblRydWVDYXNlLCBjb252ZXJ0Qm9vbGVhblRydWVDYXNlKTsKKyAgICAgICAgICAgIExWYWx1
ZSB2YWx1ZUlzQm9vbGVhblRydWUgPSBtX291dC5lcXVhbChib3hlZFZhbHVlLCBtX291dC5jb25z
dEludDY0KFZhbHVlVHJ1ZSkpOworICAgICAgICAgICAgbV9vdXQuYnJhbmNoKHZhbHVlSXNCb29s
ZWFuVHJ1ZSwgdW5zdXJlKGNvbnZlcnRCb29sZWFuVHJ1ZUNhc2UpLCB1bnN1cmUoY29udmVydEJv
b2xlYW5GYWxzZUNhc2UpKTsKKworICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udmVydEJv
b2xlYW5UcnVlQ2FzZSwgY29udmVydEJvb2xlYW5GYWxzZUNhc2UpOworICAgICAgICAgICAgVmFs
dWVGcm9tQmxvY2sgY29udmVydGVkVHJ1ZSA9IG1fb3V0LmFuY2hvcihtX291dC5jb25zdERvdWJs
ZSgxKSk7CisgICAgICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisKKyAgICAgICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGNvbnZlcnRCb29sZWFuRmFsc2VDYXNlLCBjb250aW51YXRpb24p
OworCisgICAgICAgICAgICBMVmFsdWUgdmFsdWVJc05vdEJvb2xlYW5GYWxzZSA9IG1fb3V0Lm5v
dEVxdWFsKGJveGVkVmFsdWUsIG1fb3V0LmNvbnN0SW50NjQoVmFsdWVGYWxzZSkpOworICAgICAg
ICAgICAgRlRMX1RZUEVfQ0hFQ0soanNWYWx1ZVZhbHVlKGJveGVkVmFsdWUpLCBlZGdlLCB+U3Bl
Y0NlbGwsIHZhbHVlSXNOb3RCb29sZWFuRmFsc2UpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxv
Y2sgY29udmVydGVkRmFsc2UgPSBtX291dC5hbmNob3IobV9vdXQuY29uc3REb3VibGUoMCkpOwor
ICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworCisgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKKyAgICAgICAgICAgIHJldHVybiBt
X291dC5waGkobV9vdXQuZG91YmxlVHlwZSwgaW50VG9Eb3VibGUsIHVuYm94ZWREb3VibGUsIGNv
bnZlcnRlZFVuZGVmaW5lZCwgY29udmVydGVkTnVsbCwgY29udmVydGVkVHJ1ZSwgY29udmVydGVk
RmFsc2UpOworICAgICAgICB9CisgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vbkRvdWJsZUNhc2Us
IGNvbnRpbnVhdGlvbik7CisgICAgICAgIEZUTF9UWVBFX0NIRUNLKGpzVmFsdWVWYWx1ZShib3hl
ZFZhbHVlKSwgZWRnZSwgU3BlY0J5dGVjb2RlTnVtYmVyLCBtX291dC5ib29sZWFuVHJ1ZSk7Cisg
ICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7Ci0gICAgICAgICAgICAKKwogICAgICAgICByZXR1cm4gbV9v
dXQucGhpKG1fb3V0LmRvdWJsZVR5cGUsIGludFRvRG91YmxlLCB1bmJveGVkRG91YmxlKTsKICAg
ICB9CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L2RvdWJsZS1yZXAtd2l0aC1ub24tY2VsbC5qcyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvZG91YmxlLXJlcC13aXRoLW5vbi1jZWxsLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMyZjdmMWNk
NmNmYzhjZmU4YmM3MjQyOGZhYjhiNDRmZWExNjQzZDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1yZXAtd2l0aC1ub24tY2VsbC5q
cwpAQCAtMCwwICsxLDMyIEBACisvLyBPbmx5IGJvb2wsIHVuZGVmaW5lZCBhbmQgbnVsbAorZnVu
Y3Rpb24gYWRkTnVsbEJvb2xVbmRlZmluZWQoYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30K
K25vSW5saW5lKGFkZE51bGxCb29sVW5kZWZpbmVkKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
ZTc7ICsraSkgeworICAgIHZhciB2YWx1ZSA9IGFkZE51bGxCb29sVW5kZWZpbmVkKDAuNSwgbnVs
bCk7CisgICAgaWYgKHZhbHVlICE9PSAwLjUpCisgICAgICAgIHRocm93ICJhZGROdWxsQm9vbFVu
ZGVmaW5lZCgwLjUsIG51bGwpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFs
dWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGROdWxsQm9vbFVuZGVmaW5lZChu
dWxsLCB1bmRlZmluZWQpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93
ICJhZGROdWxsQm9vbFVuZGVmaW5lZChudWxsLCB1bmRlZmluZWQpIGZhaWxlZCB3aXRoIGkgPSAi
ICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBh
ZGROdWxsQm9vbFVuZGVmaW5lZCh0cnVlLCBudWxsKTsKKyAgICBpZiAodmFsdWUgIT09IDEpCisg
ICAgICAgIHRocm93ICJhZGROdWxsQm9vbFVuZGVmaW5lZCh0cnVlLCBudWxsKSBmYWlsZWQgd2l0
aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCisgICAgdmFyIHZh
bHVlID0gYWRkTnVsbEJvb2xVbmRlZmluZWQodW5kZWZpbmVkLCBmYWxzZSk7CisgICAgaWYgKHZh
bHVlID09PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgImFkZE51bGxCb29sVW5kZWZpbmVkKHVuZGVm
aW5lZCwgZmFsc2UpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAi
ICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGROdWxsQm9vbFVuZGVmaW5lZChmYWxzZSwg
dHJ1ZSk7CisgICAgaWYgKHZhbHVlICE9PSAxKQorICAgICAgICB0aHJvdyAiYWRkTnVsbEJvb2xV
bmRlZmluZWQoZmFsc2UsIHRydWUpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQg
dmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGROdWxsQm9vbFVuZGVmaW5l
ZChudWxsLCA0Mik7CisgICAgaWYgKHZhbHVlICE9PSA0MikKKyAgICAgICAgdGhyb3cgImFkZE51
bGxCb29sVW5kZWZpbmVkKG51bGwsIDQyKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVy
bmVkIHZhbHVlID0gIiArIHZhbHVlOworCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvdGVzdHMvc3RyZXNzL2RvdWJsZS1yZXAtd2l0aC1udWxsLmpzIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgtbnVsbC5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMTk1MzEyOTY4YmFhN2IyM2RkNzM1YjBiZjM4NjhiZmZiMDI0YTQxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgt
bnVsbC5qcwpAQCAtMCwwICsxLDEwNyBAQAorLy8gVXNpbmcgZnVsbCBudW1iZXIgKyBudWxsIGZv
ciBtYXRoLgorZnVuY3Rpb24gYWRkQXJnc051bWJlckFuZE51bGwoYSwgYikgeworICAgIHJldHVy
biBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NOdW1iZXJBbmROdWxsKTsKKworZm9yICh2YXIg
aSA9IDA7IGkgPCAxZTc7ICsraSkgeworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRO
dWxsKGksIDEpOworICAgIGlmICh2YWx1ZSAhPT0gKGkgKyAxKSkKKyAgICAgICAgdGhyb3cgImFk
ZEFyZ3NOdW1iZXJBbmROdWxsKGksIDEpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJu
ZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5k
TnVsbCgwLjUsIGkpOworICAgIGlmICh2YWx1ZSAhPT0gKGkgKyAwLjUpKQorICAgICAgICB0aHJv
dyAiYWRkQXJnc051bWJlckFuZE51bGwoMC41LCBpKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAi
IHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCisgICAgdmFyIHZhbHVlID0gYWRkQXJnc051
bWJlckFuZE51bGwobnVsbCwgaSk7CisgICAgaWYgKHZhbHVlICE9PSBpKQorICAgICAgICB0aHJv
dyAiYWRkQXJnc051bWJlckFuZE51bGwobnVsbCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsg
IiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NO
dW1iZXJBbmROdWxsKGksIG51bGwpOworICAgIGlmICh2YWx1ZSAhPT0gaSkKKyAgICAgICAgdGhy
b3cgImFkZEFyZ3NOdW1iZXJBbmROdWxsKGksIG51bGwpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSAr
ICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdz
TnVtYmVyQW5kTnVsbChudWxsLCBudWxsKTsKKyAgICBpZiAodmFsdWUgIT09IDApCisgICAgICAg
IHRocm93ICJhZGRBcmdzTnVtYmVyQW5kTnVsbChudWxsLCBudWxsKSBmYWlsZWQgd2l0aCBpID0g
IiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworfQorCisKKy8vIFVzaW5nIGlu
dDMyICsgbnVsbCBmb3IgbWF0aC4KK2Z1bmN0aW9uIGFkZEFyZ3NJbnQzMkFuZE51bGwoYSwgYikg
eworICAgIHJldHVybiBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NJbnQzMkFuZE51bGwpOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IDFlNzsgKytpKSB7CisgICAgdmFyIHZhbHVlID0gYWRkQXJn
c0ludDMyQW5kTnVsbChpLCAxKTsKKyAgICBpZiAodmFsdWUgIT09IChpICsgMSkpCisgICAgICAg
IHRocm93ICJhZGRBcmdzSW50MzJBbmROdWxsKGksIDEpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSAr
ICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdz
SW50MzJBbmROdWxsKG51bGwsIGkpOworICAgIGlmICh2YWx1ZSAhPT0gaSkKKyAgICAgICAgdGhy
b3cgImFkZEFyZ3NJbnQzMkFuZE51bGwobnVsbCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsg
IiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJ
bnQzMkFuZE51bGwoaSwgbnVsbCk7CisgICAgaWYgKHZhbHVlICE9PSBpKQorICAgICAgICB0aHJv
dyAiYWRkQXJnc0ludDMyQW5kTnVsbChpLCBudWxsKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAi
IHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCisgICAgdmFyIHZhbHVlID0gYWRkQXJnc0lu
dDMyQW5kTnVsbChudWxsLCBudWxsKTsKKyAgICBpZiAodmFsdWUgIT09IDApCisgICAgICAgIHRo
cm93ICJhZGRBcmdzSW50MzJBbmROdWxsKG51bGwsIG51bGwpIGZhaWxlZCB3aXRoIGkgPSAiICsg
aSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWxs
YmFja1dpdGhEb3VibGUoKSB7CisgICAgdmFyIHZhbHVlID0gYWRkQXJnc051bWJlckFuZE51bGwo
TWF0aC5QSSwgTWF0aC5QSSk7CisgICAgaWYgKHZhbHVlICE9PSAyICogTWF0aC5QSSkKKyAgICAg
ICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJBbmROdWxsKE1hdGguUEksIE1hdGguUEkpIGZhaWxlZCB3
aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9Cit0ZXN0RmFs
bGJhY2tXaXRoRG91YmxlKCk7CisKKworLy8gVXNpbmcgZnVsbCBudW1iZXIgKyBudWxsIGZvciBt
YXRoLgorZnVuY3Rpb24gYWRkQXJnc0RvdWJsZUFuZE51bGwoYSwgYikgeworICAgIHJldHVybiBh
ICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NEb3VibGVBbmROdWxsKTsKKworZm9yICh2YXIgaSA9
IDA7IGkgPCAxZTc7ICsraSkgeworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NEb3VibGVBbmROdWxs
KDAuNSwgaSk7CisgICAgaWYgKHZhbHVlICE9PSAoaSArIDAuNSkpCisgICAgICAgIHRocm93ICJh
ZGRBcmdzRG91YmxlQW5kTnVsbCgwLjUsIGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0
dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91Ymxl
QW5kTnVsbChudWxsLCAwLjEpOworICAgIGlmICh2YWx1ZSAhPT0gMC4xKQorICAgICAgICB0aHJv
dyAiYWRkQXJnc0RvdWJsZUFuZE51bGwobnVsbCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsg
IiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NE
b3VibGVBbmROdWxsKDAuNiwgbnVsbCk7CisgICAgaWYgKHZhbHVlICE9PSAwLjYpCisgICAgICAg
IHRocm93ICJhZGRBcmdzRG91YmxlQW5kTnVsbChpLCBudWxsKSBmYWlsZWQgd2l0aCBpID0gIiAr
IGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworfQorCitmdW5jdGlvbiB0ZXN0RmFs
bGJhY2tXaXRoT2JqZWN0KCkgeworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NEb3VibGVBbmROdWxs
KE1hdGguUEksIHsgdmFsdWVPZjogZnVuY3Rpb24oKSB7IHJldHVybiA1OyB9fSk7CisgICAgaWYg
KHZhbHVlICE9PSA1ICsgTWF0aC5QSSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NEb3VibGVBbmRO
dWxsKE1hdGguUEksIHsgdmFsdWVPZjogZnVuY3Rpb24oKSB7IHJldHVybiA1OyB9fSkgZmFpbGVk
IHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKK30KK3Rlc3RG
YWxsYmFja1dpdGhPYmplY3QoKTsKKworCisvLyBVc2luZyBvbmx5IG51bGwKK2Z1bmN0aW9uIGFk
ZEFyZ3NPbmx5TnVsbChhLCBiKSB7CisgICAgcmV0dXJuIGEgKyBiOworfQorbm9JbmxpbmUoYWRk
QXJnc09ubHlOdWxsKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTc7ICsraSkgeworICAgIHZh
ciB2YWx1ZSA9IGFkZEFyZ3NPbmx5TnVsbChudWxsLCBudWxsKTsKKyAgICBpZiAodmFsdWUgIT09
IDApCisgICAgICAgIHRocm93ICJhZGRBcmdzT25seU51bGwobnVsbCwgbnVsbCkgZmFpbGVkIHdp
dGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKK30KKworZnVuY3Rp
b24gdGVzdEZhbGxiYWNrV2l0aFN0cmluZygpIHsKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzT25s
eU51bGwoImZvbyIsICJiYXIiKTsKKyAgICBpZiAodmFsdWUgIT09ICJmb29iYXIiKQorICAgICAg
ICB0aHJvdyAiYWRkQXJnc09ubHlOdWxsKFwiZm9vXCIsIFwiYmFyXCIpIGZhaWxlZCB3aXRoIGkg
PSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9Cit0ZXN0RmFsbGJhY2tX
aXRoU3RyaW5nKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgtdW5kZWZpbmVk
LmpzIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kb3VibGUtcmVwLXdpdGgt
dW5kZWZpbmVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFmNzM4M2NlZDJkZjg3Y2Y0NTVlYmFmYTUzZDdmNDZi
YTE5Nzg2MjIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL2RvdWJsZS1yZXAtd2l0aC11bmRlZmluZWQuanMKQEAgLTAsMCArMSwxMzEgQEAKKy8v
IFVzaW5nIGZ1bGwgbnVtYmVyICsgdW5kZWZpbmVkIGZvciBtYXRoLgorZnVuY3Rpb24gYWRkQXJn
c051bWJlckFuZFVuZGVmaW5lZChhLCBiKSB7CisgICAgcmV0dXJuIGEgKyBiOworfQorbm9Jbmxp
bmUoYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCk7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3
OyArK2kpIHsKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKGksIDEp
OworICAgIGlmICh2YWx1ZSAhPT0gKGkgKyAxKSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1i
ZXJBbmRVbmRlZmluZWQoaSwgMSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2
YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRl
ZmluZWQoMC41LCBpKTsKKyAgICBpZiAodmFsdWUgIT09IChpICsgMC41KSkKKyAgICAgICAgdGhy
b3cgImFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoMC41LCBpKSBmYWlsZWQgd2l0aCBpID0gIiAr
IGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOworCisgICAgdmFyIHZhbHVlID0gYWRk
QXJnc051bWJlckFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIGkpOworICAgIGlmICh2YWx1ZSA9PT0g
dmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKHVuZGVmaW5l
ZCwgaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1
ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoaSwgdW5kZWZp
bmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc051
bWJlckFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIg
cmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzTnVt
YmVyQW5kVW5kZWZpbmVkKGkpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRo
cm93ICJhZGRBcmdzTnVtYmVyQW5kVW5kZWZpbmVkKGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSAr
ICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdz
TnVtYmVyQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsKKyAgICBpZiAodmFsdWUg
PT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc051bWJlckFuZFVuZGVmaW5lZCh1bmRl
ZmluZWQsIHVuZGVmaW5lZCkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1
ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmlu
ZWQoKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc051
bWJlckFuZFVuZGVmaW5lZCgpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFs
dWUgPSAiICsgdmFsdWU7Cit9CisKKworLy8gVXNpbmcgaW50MzIgKyB1bmRlZmluZWQgZm9yIG1h
dGguCitmdW5jdGlvbiBhZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoYSwgYikgeworICAgIHJldHVy
biBhICsgYjsKK30KK25vSW5saW5lKGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCk7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzSW50MzJB
bmRVbmRlZmluZWQoaSwgMSk7CisgICAgaWYgKHZhbHVlICE9PSAoaSArIDEpKQorICAgICAgICB0
aHJvdyAiYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVkKGksIDEpIGZhaWxlZCB3aXRoIGkgPSAiICsg
aSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRB
cmdzSW50MzJBbmRVbmRlZmluZWQodW5kZWZpbmVkLCBpKTsKKyAgICBpZiAodmFsdWUgPT09IHZh
bHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0ludDMyQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwg
aSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsK
KworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQp
OworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJB
bmRVbmRlZmluZWQoaSwgdW5kZWZpbmVkKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVy
bmVkIHZhbHVlID0gIiArIHZhbHVlOworCisgICAgdmFyIHZhbHVlID0gYWRkQXJnc0ludDMyQW5k
VW5kZWZpbmVkKGkpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJh
ZGRBcmdzSW50MzJBbmRVbmRlZmluZWQoaSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1
cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQzMkFu
ZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7CisgICAgaWYgKHZhbHVlID09PSB2YWx1
ZSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCh1bmRlZmluZWQsIHVu
ZGVmaW5lZCkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2
YWx1ZTsKKworICAgIHZhciB2YWx1ZSA9IGFkZEFyZ3NJbnQzMkFuZFVuZGVmaW5lZCgpOworICAg
IGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAgIHRocm93ICJhZGRBcmdzSW50MzJBbmRVbmRl
ZmluZWQoKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZh
bHVlOworfQorCitmdW5jdGlvbiB0ZXN0RmFsbGJhY2tXaXRoRG91YmxlKCkgeworICAgIHZhciB2
YWx1ZSA9IGFkZEFyZ3NOdW1iZXJBbmRVbmRlZmluZWQoTWF0aC5QSSwgTWF0aC5QSSk7CisgICAg
aWYgKHZhbHVlICE9PSAyICogTWF0aC5QSSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NOdW1iZXJB
bmRVbmRlZmluZWQoTWF0aC5QSSwgTWF0aC5QSSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiBy
ZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsKK30KK3Rlc3RGYWxsYmFja1dpdGhEb3VibGUoKTsK
KworCisvLyBVc2luZyBmdWxsIG51bWJlciArIHVuZGVmaW5lZCBmb3IgbWF0aC4KK2Z1bmN0aW9u
IGFkZEFyZ3NEb3VibGVBbmRVbmRlZmluZWQoYSwgYikgeworICAgIHJldHVybiBhICsgYjsKK30K
K25vSW5saW5lKGFkZEFyZ3NEb3VibGVBbmRVbmRlZmluZWQpOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDFlNzsgKytpKSB7CisgICAgdmFyIHZhbHVlID0gYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5l
ZCgwLjUsIGkpOworICAgIGlmICh2YWx1ZSAhPT0gKGkgKyAwLjUpKQorICAgICAgICB0aHJvdyAi
YWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZCgwLjUsIGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSAr
ICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdz
RG91YmxlQW5kVW5kZWZpbmVkKHVuZGVmaW5lZCwgMC4xKTsKKyAgICBpZiAodmFsdWUgPT09IHZh
bHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0RvdWJsZUFuZFVuZGVmaW5lZCh1bmRlZmluZWQs
IGkpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7
CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKDAuNiwgdW5kZWZp
bmVkKTsKKyAgICBpZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc0Rv
dWJsZUFuZFVuZGVmaW5lZChpLCB1bmRlZmluZWQpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIg
cmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7CisKKyAgICB2YXIgdmFsdWUgPSBhZGRBcmdzRG91
YmxlQW5kVW5kZWZpbmVkKDQyLjgpOworICAgIGlmICh2YWx1ZSA9PT0gdmFsdWUpCisgICAgICAg
IHRocm93ICJhZGRBcmdzRG91YmxlQW5kVW5kZWZpbmVkKGkpIGZhaWxlZCB3aXRoIGkgPSAiICsg
aSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFsdWU7Cit9CisKK2Z1bmN0aW9uIHRlc3RGYWxs
YmFja1dpdGhPYmplY3QoKSB7CisgICAgdmFyIHZhbHVlID0gYWRkQXJnc0RvdWJsZUFuZFVuZGVm
aW5lZChNYXRoLlBJLCB7IHZhbHVlT2Y6IGZ1bmN0aW9uKCkgeyByZXR1cm4gNTsgfX0pOworICAg
IGlmICh2YWx1ZSAhPT0gNSArIE1hdGguUEkpCisgICAgICAgIHRocm93ICJhZGRBcmdzRG91Ymxl
QW5kVW5kZWZpbmVkKE1hdGguUEksIHsgdmFsdWVPZjogZnVuY3Rpb24oKSB7IHJldHVybiA1OyB9
fSkgZmFpbGVkIHdpdGggaSA9ICIgKyBpICsgIiByZXR1cm5lZCB2YWx1ZSA9ICIgKyB2YWx1ZTsK
K30KK3Rlc3RGYWxsYmFja1dpdGhPYmplY3QoKTsKKworCisvLyBVc2luZyBmdWxsIG51bWJlciAr
IHVuZGVmaW5lZCBmb3IgbWF0aC4KK2Z1bmN0aW9uIGFkZEFyZ3NPbmx5VW5kZWZpbmVkKGEsIGIp
IHsKKyAgICByZXR1cm4gYSArIGI7Cit9Citub0lubGluZShhZGRBcmdzT25seVVuZGVmaW5lZCk7
CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU3OyArK2kpIHsKKyAgICB2YXIgdmFsdWUgPSBhZGRB
cmdzT25seVVuZGVmaW5lZCh1bmRlZmluZWQsIHVuZGVmaW5lZCk7CisgICAgaWYgKHZhbHVlID09
PSB2YWx1ZSkKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NPbmx5VW5kZWZpbmVkKHVuZGVmaW5lZCwg
dW5kZWZpbmVkKSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiAr
IHZhbHVlOworCisgICAgdmFyIHZhbHVlID0gYWRkQXJnc09ubHlVbmRlZmluZWQoKTsKKyAgICBp
ZiAodmFsdWUgPT09IHZhbHVlKQorICAgICAgICB0aHJvdyAiYWRkQXJnc09ubHlVbmRlZmluZWQo
KSBmYWlsZWQgd2l0aCBpID0gIiArIGkgKyAiIHJldHVybmVkIHZhbHVlID0gIiArIHZhbHVlOwor
fQorCitmdW5jdGlvbiB0ZXN0RmFsbGJhY2tXaXRoU3RyaW5nKCkgeworICAgIHZhciB2YWx1ZSA9
IGFkZEFyZ3NPbmx5VW5kZWZpbmVkKCJmb28iLCAiYmFyIik7CisgICAgaWYgKHZhbHVlICE9PSAi
Zm9vYmFyIikKKyAgICAgICAgdGhyb3cgImFkZEFyZ3NPbmx5VW5kZWZpbmVkKFwiZm9vXCIsIFwi
YmFyXCIpIGZhaWxlZCB3aXRoIGkgPSAiICsgaSArICIgcmV0dXJuZWQgdmFsdWUgPSAiICsgdmFs
dWU7Cit9Cit0ZXN0RmFsbGJhY2tXaXRoU3RyaW5nKCk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2Yg
ZmlsZQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IGM1Yzc1YjdiYmI0ODRmOGUxYzJhM2VmZjRlNGIyZWEyMTVkODhhMDIuLjQ0
NGJkODg3YWFhZmUxN2EyNDg1MDgzZmY5ZmRhYjVmYTUwOWFkZGIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NCBAQAorMjAxNS0wNS0yNiAgQmVuamFtaW4gUG91bGFpbiAgPGJwb3VsYWluQGFwcGxlLmNvbT4K
KworICAgICAgICBbSlNDXSBBZGQgdW5kZWZpbmVkLT5kb3VibGUgY29udmVyc2lvbiB0byBEb3Vi
bGVSZXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0
NTI5MworCisgICAgICAgIFJldmlld2VkIGJ5IEZpbGlwIFBpemxvLgorCisgICAgICAgICoganMv
cmVncmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFy
cmF5LXZhbHVlcy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMuanM6IEFkZGVkLgorCiAyMDE1
LTA1LTI2ICBKb3NlcGggUGVjb3Jhcm8gIDxwZWNvcmFyb0BhcHBsZS5jb20+CiAKICAgICAgICAg
Q1NTIHByb3BlcnRpZXMgKGZvbnQtc3ludGhlc2lzLCBjb2x1bW4tZmlsbCkgYXJlIG1pc3Npbmcg
aW4gZ2V0Q29tcHV0ZWRTdHlsZXMKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
bWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLWV4cGVjdGVkLnR4dCBiL0xheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXktdmFsdWVzLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mZWEwYTY5OThjOTQxM2JlN2UyMzVjODEyYjczN2ViNWIw
MThhZjRlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvanMvcmVncmVzcy9tYXRoLXdp
dGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTAg
QEAKK0pTUmVncmVzcy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3MvbWF0aC13aXRoLW91dC1vZi1ib3VuZHMtYXJyYXkt
dmFsdWVzLmh0bWwgYi9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91
bmRzLWFycmF5LXZhbHVlcy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlhZWFlYjJjY2I3NTRiYzgyN2JiNDdm
Yzk0Y2E5MTYzYmUyYmZkYTIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5odG1sCkBAIC0wLDAgKzEs
MTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxo
dG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpz
Ij48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNl
cy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL21h
dGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+
Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1ZXMuanMgYi9MYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9tYXRoLXdpdGgtb3V0LW9mLWJvdW5kcy1hcnJheS12YWx1
ZXMuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uMTY4ODJkOGU4OWY5MjBiMDljMzUwNWQzODE2ZDdmYTRlNWQ0ZjFj
ZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3Rz
L21hdGgtd2l0aC1vdXQtb2YtYm91bmRzLWFycmF5LXZhbHVlcy5qcwpAQCAtMCwwICsxLDE5IEBA
CitmdW5jdGlvbiBtYXRoV2l0aE91dE9mQm91bmRzQWNjZXNzKGFycmF5QSwgYXJyYXlCKQorewor
ICAgIHZhciBvdXRwdXQgPSAwOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTA7ICsraSkgewor
ICAgICAgICBvdXRwdXQgKz0gKGFycmF5QVtpXSArIGFycmF5QltpXSk7CisgICAgfQorICAgIHJl
dHVybiBvdXRwdXQ7Cit9CisKK25vSW5saW5lKG1hdGhXaXRoT3V0T2ZCb3VuZHNBY2Nlc3MpOwor
CitmdW5jdGlvbiB0ZXN0KCkgeworICAgIHZhciBpbnRlZ2VyQXJyYXkgPSBbMCwgMSwgMiwgMywg
NF07CisgICAgdmFyIGRvdWJsZUFycmF5ID0gWzAuMSwgMS4yLCAyLjMsIDMuNCwgNC41XTsKKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgICAgIG1hdGhXaXRoT3V0T2ZC
b3VuZHNBY2Nlc3MoaW50ZWdlckFycmF5LCBkb3VibGVBcnJheSk7Cit9Cit0ZXN0KCk7ClwgTm8g
bmV3bGluZSBhdCBlbmQgb2YgZmlsZQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>