<?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>172481</bug_id>
          
          <creation_ts>2017-05-22 17:18:03 -0700</creation_ts>
          <short_desc>[WebIDL] Overloaded functions unnecessarily duplicate argument checks</short_desc>
          <delta_ts>2017-05-30 20:24:48 -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>Bindings</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Sam Weinig">sam</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1311683</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-22 17:18:03 -0700</bug_when>
    <thetext>Overloaded functions are currently unnecessarily duplicate argument checks. For example, let&apos;s take CanvasRenderingContext2d&apos;s stroke function. It has two overloads:

    void stroke(DOMPath path);
    void stroke();

This generates the main bindings function:

EncodedJSValue JSC_HOST_CALL jsCanvasRenderingContext2DPrototypeFunctionStroke(ExecState* state)
{
    VM&amp; vm = state-&gt;vm();
    auto throwScope = DECLARE_THROW_SCOPE(vm);
    UNUSED_PARAM(throwScope);
    size_t argsCount = std::min&lt;size_t&gt;(1, state-&gt;argumentCount());
    if (argsCount == 0) {
        return jsCanvasRenderingContext2DPrototypeFunctionStroke2(state);
    }
    if (argsCount == 1) {
        return jsCanvasRenderingContext2DPrototypeFunctionStroke1(state);
    }
    return throwVMTypeError(state, throwScope);
}

and then two the helpers, jsCanvasRenderingContext2DPrototypeFunctionStroke1 and jsCanvasRenderingContext2DPrototypeFunctionStroke2.

Taking a look at jsCanvasRenderingContext2DPrototypeFunctionStroke1, we see the argumentCount is once again checked, despite it already having been done in the main function: 

static inline JSC::EncodedJSValue jsCanvasRenderingContext2DPrototypeFunctionStroke1Caller(JSC::ExecState* state, JSCanvasRenderingContext2D* castedThis, JSC::ThrowScope&amp; throwScope)
{
    UNUSED_PARAM(state);
    UNUSED_PARAM(throwScope);
    auto&amp; impl = castedThis-&gt;wrapped();
    if (UNLIKELY(state-&gt;argumentCount() &lt; 1))
        return throwVMError(state, throwScope, createNotEnoughArgumentsError(state));
    auto path = convert&lt;IDLInterface&lt;DOMPath&gt;&gt;(*state, state-&gt;uncheckedArgument(0), [](JSC::ExecState&amp; state, JSC::ThrowScope&amp; scope) { throwArgumentTypeError(state, scope, 0, &quot;path&quot;, &quot;CanvasRenderingContext2D&quot;, &quot;stroke&quot;, &quot;DOMPath&quot;); });
    RETURN_IF_EXCEPTION(throwScope, encodedJSValue());
    impl.stroke(*path);
    return JSValue::encode(jsUndefined());
}


We could further improve things by taking advantage of the cases where disambiguation takes place, and retain the type information into the helpers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312175</commentid>
    <comment_count>1</comment_count>
      <attachid>311093</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-23 20:07:23 -0700</bug_when>
    <thetext>Created attachment 311093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312263</commentid>
    <comment_count>2</comment_count>
      <attachid>311093</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-24 08:42:52 -0700</bug_when>
    <thetext>Comment on attachment 311093
Patch

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

r=me with nit.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4056
&gt; +        foreach my $function (@functions) {

FYI, I&apos;d personally if we used IDL naming consistently in the bindings generator. i.e. function -&gt; operation.

&gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4746
&gt; +    return if $function-&gt;{overloads} &amp;&amp; @{$function-&gt;{overloads}} &gt; 1;

Maybe a comment to explain why we do not need argument count check for overloads?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312271</commentid>
    <comment_count>3</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-24 09:06:51 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #2)
&gt; Comment on attachment 311093 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=311093&amp;action=review
&gt; 
&gt; r=me with nit.
&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4056
&gt; &gt; +        foreach my $function (@functions) {
&gt; 
&gt; FYI, I&apos;d personally if we used IDL naming consistently in the bindings
&gt; generator. i.e. function -&gt; operation.

I&apos;ll do this in another pass. Get them all at once.

&gt; 
&gt; &gt; Source/WebCore/bindings/scripts/CodeGeneratorJS.pm:4746
&gt; &gt; +    return if $function-&gt;{overloads} &amp;&amp; @{$function-&gt;{overloads}} &gt; 1;
&gt; 
&gt; Maybe a comment to explain why we do not need argument count check for
&gt; overloads?

Will do.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1312272</commentid>
    <comment_count>4</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2017-05-24 09:08:33 -0700</bug_when>
    <thetext>Committed r217369: &lt;http://trac.webkit.org/changeset/217369&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1314051</commentid>
    <comment_count>5</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-05-30 20:24:48 -0700</bug_when>
    <thetext>&lt;rdar://problem/32479792&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>311093</attachid>
            <date>2017-05-23 20:07:23 -0700</date>
            <delta_ts>2017-05-24 09:06:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-172481-20170523200722.patch</filename>
            <type>text/plain</type>
            <size>66959</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNzMxMCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU3IEBACisyMDE3LTA1LTIzICBTYW0gV2Vp
bmlnICA8c2FtQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1dlYklETF0gT3ZlcmxvYWRlZCBmdW5j
dGlvbnMgdW5uZWNlc3NhcmlseSBkdXBsaWNhdGUgYXJndW1lbnQgY2hlY2tzCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNzI0ODEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtOgorICAgICAgICAoR2VuZXJhdGVIZWFkZXIpOgorICAgICAgICAo
R2VuZXJhdGVQcm9wZXJ0aWVzSGFzaFRhYmxlKToKKyAgICAgICAgVXBkYXRlIGZvciByZW5hbWUg
b2YgR2V0Q29uZGl0aW9uYWxGb3JGdW5jdGlvbkNvbnNpZGVyaW5nT3ZlcmxvYWRzLgorCisgICAg
ICAgIChBcmVUeXBlc0Rpc3Rpbmd1aXNoYWJsZUZvck92ZXJsb2FkUmVzb2x1dGlvbik6CisgICAg
ICAgIFJlbW92ZSB1bm5lY2Vzc2FyeSBzdWJyb3V0aW5lIGlzRGljdGlvbmFyeSB0aGF0IGNhbiBi
ZSByZXBsYWNlZCBieQorICAgICAgICBhIGRpcmVjdCBjYWxsIHRvICRjb2RlR2VuZXJhdG9yLT5J
c0RpY3Rpb25hcnlUeXBlKCkuCisKKyAgICAgICAgKEdldENvbmRpdGlvbmFsRm9yRnVuY3Rpb25D
b25zaWRlcmluZ092ZXJsb2Fkcyk6CisgICAgICAgIFJlbmFtZWQgZnJvbSBnZXRDb25kaXRpb25h
bEZvckZ1bmN0aW9uQ29uc2lkZXJpbmdPdmVybG9hZHMuCisKKyAgICAgICAgKEdlbmVyYXRlT3Zl
cmxvYWREaXNwYXRjaGVyKToKKyAgICAgICAgUmVuYW1lZCBmcm9tIEdlbmVyYXRlT3ZlcmxvYWRl
ZEZ1bmN0aW9uT3JDb25zdHJ1Y3Rvci4gTW92ZWQgQ29uc3RydWN0b3IvT3BlcmF0aW9uL0xlZ2Fj
eUNhbGxlcgorICAgICAgICBzcGVjaWZpYyBjb2RlIG91dCwgYW5kIGludG8gcGFyYW1ldGVycy4K
KworICAgICAgICAoR2VuZXJhdGVJbXBsZW1lbnRhdGlvbik6CisgICAgICAgIE1vdmVkIG9wZXJh
dGlvbiBnZW5lcmF0aW9uIG91dCBpbnRvIGl0cyBvd24gc3Vicm91dGluZS4KKworICAgICAgICAo
R2VuZXJhdGVPcGVyYXRpb25EZWZpbml0aW9uKTogQWRkZWQuCisgICAgICAgIE1vdmVkIGZyb20g
R2VuZXJhdGVJbXBsZW1lbnRhdGlvbi4KKworICAgICAgICAoR2VuZXJhdGVMZWdhY3lDYWxsZXJE
ZWZpbml0aW9ucyk6CisgICAgICAgIFBhc3MgZnVuY3Rpb24gbmFtZSBhbmQgc2lnbmF0dXJlIHRv
IEdlbmVyYXRlT3ZlcmxvYWREaXNwYXRjaGVyLgorCisgICAgICAgIChHZW5lcmF0ZUFyZ3VtZW50
c0NvdW50Q2hlY2spOgorICAgICAgICBEb24ndCBnZW5lcmF0ZSBhbiBhcmd1bWVudCBjaGVjayBp
ZiB0aGlzIGlzIGFuIG92ZXJsb2FkZWQgZnVuY3Rpb24uIFRoZSBhcmd1bWVudAorICAgICAgICBj
aGVja3MgaGFwcGVuIGluIHRoZSBvdmVybG9hZCBkaXNwYXRjaGVyLgorCisgICAgICAgIChOZWVk
c0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9uQ2FsbCk6CisgICAgICAgIChHZW5lcmF0ZVBhcmFt
ZXRlcnNDaGVjayk6CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0aW9uRnVuY3Rpb25DYWxs
KToKKyAgICAgICAgUmVwbGFjZSBJc1JldHVybmluZ1Byb21pc2Ugd2l0aCBtb3JlIGRpcmVjdCBj
aGVjay4KKworICAgICAgICAoR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb25zKToKKyAgICAg
ICAgUGFzcyBmdW5jdGlvbiBuYW1lIGFuZCBzaWduYXR1cmUgdG8gR2VuZXJhdGVPdmVybG9hZERp
c3BhdGNoZXIuCisKKyAgICAgICAgKGdldENvbmRpdGlvbmFsRm9yRnVuY3Rpb25Db25zaWRlcmlu
Z092ZXJsb2Fkcyk6IFJlbmFtZWQgdG8gR2V0Q29uZGl0aW9uYWxGb3JGdW5jdGlvbkNvbnNpZGVy
aW5nT3ZlcmxvYWRzLgorICAgICAgICAoR2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb25PckNvbnN0
cnVjdG9yKTogUmVuYW1lZCB0byBHZW5lcmF0ZU92ZXJsb2FkRGlzcGF0Y2hlci4KKyAgICAgICAg
KElzUmV0dXJuaW5nUHJvbWlzZSk6IERlbGV0ZWQuCisKKyAgICAgICAgKiBiaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0R2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcDoKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvVGVzdEludGVyZmFjZS5pZGw6CisgICAgICAgIFVwZGF0ZSB0ZXN0IHJlc3VsdHMuCisK
IDIwMTctMDUtMTUgIE1hdHQgUmFqY2EgIDxtcmFqY2FAYXBwbGUuY29tPgogCiAgICAgICAgIFJl
cGxhY2UgYXV0b3BsYXkgZXZlbnRzIHRoYXQgZmlyZSBhdCBuYXZpZ2F0aW9uIHdpdGggYSBEaWRB
dXRvcGxheU1lZGlhUGFzdFRocmVzaG9sZCBldmVudC4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAyMTcz
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5w
bQkod29ya2luZyBjb3B5KQpAQCAtMjE5Myw3ICsyMTkzLDcgQEAgc3ViIEdlbmVyYXRlSGVhZGVy
CiAgICAgICAgICAgICAgICAgJGluQXBwbGVDb3B5cmlnaHQgPSAwOwogICAgICAgICAgICAgfQog
Ci0gICAgICAgICAgICBteSAkY29uZGl0aW9uYWxBdHRyaWJ1dGUgPSBnZXRDb25kaXRpb25hbEZv
ckZ1bmN0aW9uQ29uc2lkZXJpbmdPdmVybG9hZHMoJGZ1bmN0aW9uKTsKKyAgICAgICAgICAgIG15
ICRjb25kaXRpb25hbEF0dHJpYnV0ZSA9IEdldENvbmRpdGlvbmFsRm9yRnVuY3Rpb25Db25zaWRl
cmluZ092ZXJsb2FkcygkZnVuY3Rpb24pOwogICAgICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3Ry
aW5nID0gJGNvbmRpdGlvbmFsQXR0cmlidXRlID8gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29u
ZGl0aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsQXR0cmlidXRlKSA6
IHVuZGVmOwogICAgICAgICAgICAgcHVzaChAaGVhZGVyQ29udGVudCwgIiNpZiAke2NvbmRpdGlv
bmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgbXkgJGZ1
bmN0aW9uTmFtZSA9IEdldEZ1bmN0aW9uTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkZnVu
Y3Rpb24pOwpAQCAtMjQwMyw3ICsyNDAzLDcgQEAgc3ViIEdlbmVyYXRlUHJvcGVydGllc0hhc2hU
YWJsZQogCiAgICAgICAgIHB1c2goQCRoYXNoU3BlY2lhbHMsIENvbXB1dGVGdW5jdGlvblNwZWNp
YWwoJGludGVyZmFjZSwgJGZ1bmN0aW9uKSk7CiAKLSAgICAgICAgbXkgJGNvbmRpdGlvbmFsID0g
Z2V0Q29uZGl0aW9uYWxGb3JGdW5jdGlvbkNvbnNpZGVyaW5nT3ZlcmxvYWRzKCRmdW5jdGlvbik7
CisgICAgICAgIG15ICRjb25kaXRpb25hbCA9IEdldENvbmRpdGlvbmFsRm9yRnVuY3Rpb25Db25z
aWRlcmluZ092ZXJsb2FkcygkZnVuY3Rpb24pOwogICAgICAgICAkY29uZGl0aW9uYWxzLT57JG5h
bWV9ID0gJGNvbmRpdGlvbmFsIGlmICRjb25kaXRpb25hbDsKIAogICAgICAgICBpZiAoTmVlZHNS
dW50aW1lQ2hlY2soJGZ1bmN0aW9uKSkgewpAQCAtMjQ5NSwxMyArMjQ5NSw5IEBAIHN1YiBBcmVU
eXBlc0Rpc3Rpbmd1aXNoYWJsZUZvck92ZXJsb2FkUmUKIHsKICAgICBteSAoJHR5cGVBLCAkdHlw
ZUIpID0gQF87CiAKLSAgICBteSAkaXNEaWN0aW9uYXJ5ID0gc3ViIHsKLSAgICAgICAgbXkgJHR5
cGUgPSBzaGlmdDsKLSAgICAgICAgcmV0dXJuICRjb2RlR2VuZXJhdG9yLT5Jc0RpY3Rpb25hcnlU
eXBlKCR0eXBlKTsKLSAgICB9OwogICAgIG15ICRpc0NhbGxiYWNrRnVuY3Rpb25PckRpY3Rpb25h
cnkgPSBzdWIgewogICAgICAgICBteSAkdHlwZSA9IHNoaWZ0OwotICAgICAgICByZXR1cm4gJGNv
ZGVHZW5lcmF0b3ItPklzQ2FsbGJhY2tGdW5jdGlvbigkdHlwZSkgfHwgJiRpc0RpY3Rpb25hcnko
JHR5cGUpOworICAgICAgICByZXR1cm4gJGNvZGVHZW5lcmF0b3ItPklzQ2FsbGJhY2tGdW5jdGlv
bigkdHlwZSkgfHwgJGNvZGVHZW5lcmF0b3ItPklzRGljdGlvbmFyeVR5cGUoJHR5cGUpOwogICAg
IH07CiAKICAgICAjIFR3byB0eXBlcyBhcmUgZGlzdGluZ3Vpc2hhYmxlIGZvciBvdmVybG9hZCBy
ZXNvbHV0aW9uIGlmIGF0IG1vc3Qgb25lIG9mIHRoZSB0d28gaW5jbHVkZXMgYSBudWxsYWJsZSB0
eXBlLgpAQCAtMjUyNyw3ICsyNTIzLDcgQEAgc3ViIEFyZVR5cGVzRGlzdGluZ3Vpc2hhYmxlRm9y
T3ZlcmxvYWRSZQogICAgIHJldHVybiAwIGlmICR0eXBlQS0+bmFtZSBlcSAib2JqZWN0IiBvciAk
dHlwZUItPm5hbWUgZXEgIm9iamVjdCI7CiAgICAgcmV0dXJuIDAgaWYgJGNvZGVHZW5lcmF0b3It
PklzTnVtZXJpY1R5cGUoJHR5cGVBKSAmJiAkY29kZUdlbmVyYXRvci0+SXNOdW1lcmljVHlwZSgk
dHlwZUIpOwogICAgIHJldHVybiAwIGlmICRjb2RlR2VuZXJhdG9yLT5Jc1N0cmluZ09yRW51bVR5
cGUoJHR5cGVBKSAmJiAkY29kZUdlbmVyYXRvci0+SXNTdHJpbmdPckVudW1UeXBlKCR0eXBlQik7
Ci0gICAgcmV0dXJuIDAgaWYgJiRpc0RpY3Rpb25hcnkoJHR5cGVBKSAmJiAmJGlzRGljdGlvbmFy
eSgkdHlwZUIpOworICAgIHJldHVybiAwIGlmICRjb2RlR2VuZXJhdG9yLT5Jc0RpY3Rpb25hcnlU
eXBlKCR0eXBlQSkgJiYgJGNvZGVHZW5lcmF0b3ItPklzRGljdGlvbmFyeVR5cGUoJHR5cGVCKTsK
ICAgICByZXR1cm4gMCBpZiAkY29kZUdlbmVyYXRvci0+SXNDYWxsYmFja0ludGVyZmFjZSgkdHlw
ZUEpICYmICRjb2RlR2VuZXJhdG9yLT5Jc0NhbGxiYWNrSW50ZXJmYWNlKCR0eXBlQik7CiAgICAg
cmV0dXJuIDAgaWYgJiRpc0NhbGxiYWNrRnVuY3Rpb25PckRpY3Rpb25hcnkoJHR5cGVBKSAmJiAm
JGlzQ2FsbGJhY2tGdW5jdGlvbk9yRGljdGlvbmFyeSgkdHlwZUIpOwogICAgIHJldHVybiAwIGlm
ICRjb2RlR2VuZXJhdG9yLT5Jc1NlcXVlbmNlT3JGcm96ZW5BcnJheVR5cGUoJHR5cGVBKSAmJiAk
Y29kZUdlbmVyYXRvci0+SXNTZXF1ZW5jZU9yRnJvemVuQXJyYXlUeXBlKCR0eXBlQik7CkBAIC0y
NTgwLDcgKzI1NzYsNyBAQCBzdWIgR2V0T3ZlcmxvYWRUaGF0TWF0Y2hlc0lnbm9yaW5nVW5pb25T
CiAgICAgfQogfQogCi1zdWIgZ2V0Q29uZGl0aW9uYWxGb3JGdW5jdGlvbkNvbnNpZGVyaW5nT3Zl
cmxvYWRzCitzdWIgR2V0Q29uZGl0aW9uYWxGb3JGdW5jdGlvbkNvbnNpZGVyaW5nT3ZlcmxvYWRz
CiB7CiAgICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7CiAKQEAgLTI1OTcsMzAgKzI1OTMsMTkgQEAg
c3ViIGdldENvbmRpdGlvbmFsRm9yRnVuY3Rpb25Db25zaWRlcmluZwogCiAjIEltcGxlbWVudHMg
dGhlIG92ZXJsb2FkIHJlc29sdXRpb24gYWxnb3JpdGhtLCBhcyBkZWZpbmVkIGluIHRoZSBXZWIg
SURMIHNwZWNpZmljYXRpb246CiAjIGh0dHA6Ly9oZXljYW0uZ2l0aHViLmlvL3dlYmlkbC8jZXMt
b3ZlcmxvYWRzCi1zdWIgR2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb25PckNvbnN0cnVjdG9yCitz
dWIgR2VuZXJhdGVPdmVybG9hZERpc3BhdGNoZXIKIHsKLSAgICBteSAoJGZ1bmN0aW9uLCAkaW50
ZXJmYWNlLCAkdmFyaWFudCkgPSBAXzsKKyAgICBteSAoJGZ1bmN0aW9uLCAkaW50ZXJmYWNlLCAk
b3ZlcmxvYWRGdW5jdGlvblByZWZpeCwgJGZ1bmN0aW9uU2lnbmF0dXJlKSA9IEBfOworICAgIAog
ICAgIG15ICVhbGxTZXRzID0gQ29tcHV0ZUVmZmVjdGl2ZU92ZXJsb2FkU2V0KCRmdW5jdGlvbi0+
e292ZXJsb2Fkc30pOwogCi0gICAgbXkgJGludGVyZmFjZU5hbWUgPSAkaW50ZXJmYWNlLT50eXBl
LT5uYW1lOwotICAgIG15ICRjbGFzc05hbWUgPSAiSlMkaW50ZXJmYWNlTmFtZSI7Ci0gICAgbXkg
JGZ1bmN0aW9uTmFtZTsKLSAgICBpZiAoJHZhcmlhbnQgZXEgImNvbnN0cnVjdG9yIikgewotICAg
ICAgICAkZnVuY3Rpb25OYW1lID0gImNvbnN0cnVjdCR7Y2xhc3NOYW1lfSI7Ci0gICAgfSBlbHNp
ZiAoJHZhcmlhbnQgZXEgImxlZ2FjeWNhbGxlciIpIHsKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSA9
ICJjYWxsJHtjbGFzc05hbWV9IjsKLSAgICB9IGVsc2UgewotICAgICAgICBteSAka2luZCA9ICRm
dW5jdGlvbi0+aXNTdGF0aWMgPyAiQ29uc3RydWN0b3IiIDogKE9wZXJhdGlvblNob3VsZEJlT25J
bnN0YW5jZSgkaW50ZXJmYWNlLCAkZnVuY3Rpb24pID8gIkluc3RhbmNlIiA6ICJQcm90b3R5cGUi
KTsKLSAgICAgICAgJGZ1bmN0aW9uTmFtZSA9ICJqcyR7aW50ZXJmYWNlTmFtZX0ke2tpbmR9RnVu
Y3Rpb24iIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uLT5uYW1lKTsKLSAg
ICB9Ci0KICAgICBteSAkZ2VuZXJhdGVPdmVybG9hZENhbGxJZk5lY2Vzc2FyeSA9IHN1YiB7CiAg
ICAgICAgIG15ICgkb3ZlcmxvYWQsICRjb25kaXRpb24sICRpbmNsdWRlKSA9IEBfOwogICAgICAg
ICByZXR1cm4gdW5sZXNzICRvdmVybG9hZDsKICAgICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5n
ID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29uZGl0aW9uYWxTdHJpbmcoJG92ZXJsb2FkKTsK
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIp
IGlmICRjb25kaXRpb25hbFN0cmluZzsKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
ICAgIGlmICgkY29uZGl0aW9uKVxuICAgICIpIGlmICRjb25kaXRpb247Ci0gICAgICAgIHB1c2go
QGltcGxDb250ZW50LCAiICAgICAgICByZXR1cm4gJHtmdW5jdGlvbk5hbWV9JG92ZXJsb2FkLT57
b3ZlcmxvYWRJbmRleH0oc3RhdGUpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgICAgICByZXR1cm4gJHtvdmVybG9hZEZ1bmN0aW9uUHJlZml4fSIgLiAkb3ZlcmxvYWQtPntv
dmVybG9hZEluZGV4fSAuICIoc3RhdGUpO1xuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAiI2VuZGlmXG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiAgICAgICAgIEFkZFRvSW1wbElu
Y2x1ZGVzKCRpbmNsdWRlLCAkb3ZlcmxvYWQtPmV4dGVuZGVkQXR0cmlidXRlcy0+eyJDb25kaXRp
b25hbCJ9KSBpZiAkaW5jbHVkZTsKICAgICB9OwpAQCAtMjY5MSwxNCArMjY3NiwxMCBAQCBzdWIg
R2VuZXJhdGVPdmVybG9hZGVkRnVuY3Rpb25PckNvbnN0cnVjCiAKICAgICBteSAkbWF4QXJnQ291
bnQgPSBMZW5ndGhPZkxvbmdlc3RGdW5jdGlvblBhcmFtZXRlckxpc3QoJGZ1bmN0aW9uLT57b3Zl
cmxvYWRzfSk7CiAKLSAgICBteSAkY29uZGl0aW9uYWxBdHRyaWJ1dGUgPSBnZXRDb25kaXRpb25h
bEZvckZ1bmN0aW9uQ29uc2lkZXJpbmdPdmVybG9hZHMoJGZ1bmN0aW9uKTsKKyAgICBteSAkY29u
ZGl0aW9uYWxBdHRyaWJ1dGUgPSBHZXRDb25kaXRpb25hbEZvckZ1bmN0aW9uQ29uc2lkZXJpbmdP
dmVybG9hZHMoJGZ1bmN0aW9uKTsKICAgICBteSAkY29uZGl0aW9uYWxTdHJpbmcgPSAkY29uZGl0
aW9uYWxBdHRyaWJ1dGUgPyAkY29kZUdlbmVyYXRvci0+R2VuZXJhdGVDb25kaXRpb25hbFN0cmlu
Z0Zyb21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWxBdHRyaWJ1dGUpIDogdW5kZWY7CiAgICAg
cHVzaChAaW1wbENvbnRlbnQsICIjaWYgJHtjb25kaXRpb25hbFN0cmluZ31cbiIpIGlmICRjb25k
aXRpb25hbFN0cmluZzsKLSAgICBpZiAoJHZhcmlhbnQgZXEgImNvbnN0cnVjdG9yIikgewotICAg
ICAgICBwdXNoKEBpbXBsQ29udGVudCwgInRlbXBsYXRlPD4gRW5jb2RlZEpTVmFsdWUgSlNDX0hP
U1RfQ0FMTCAke2NsYXNzTmFtZX1Db25zdHJ1Y3Rvcjo6Y29uc3RydWN0KEV4ZWNTdGF0ZSogc3Rh
dGUpXG4iKTsKLSAgICB9IGVsc2UgewotICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIkVuY29k
ZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUp
XG4iKTsKLSAgICB9CisgICAgcHVzaChAaW1wbENvbnRlbnQsICIkZnVuY3Rpb25TaWduYXR1cmVc
biIpOwogICAgIHB1c2goQGltcGxDb250ZW50LCA8PEVORCk7ICAgIAogewogICAgIFZNJiB2bSA9
IHN0YXRlLT52bSgpOwpAQCAtMzEzMiw3ICszMTEzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50
YXRpb24KICAgICAgICAgICAgICAgICAkaW5BcHBsZUNvcHlyaWdodCA9IDA7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIG15ICRjb25kaXRpb25hbEF0dHJpYnV0ZSA9IGdldENvbmRpdGlv
bmFsRm9yRnVuY3Rpb25Db25zaWRlcmluZ092ZXJsb2FkcygkZnVuY3Rpb24pOworICAgICAgICAg
ICAgbXkgJGNvbmRpdGlvbmFsQXR0cmlidXRlID0gR2V0Q29uZGl0aW9uYWxGb3JGdW5jdGlvbkNv
bnNpZGVyaW5nT3ZlcmxvYWRzKCRmdW5jdGlvbik7CiAgICAgICAgICAgICBteSAkY29uZGl0aW9u
YWxTdHJpbmcgPSAkY29uZGl0aW9uYWxBdHRyaWJ1dGUgPyAkY29kZUdlbmVyYXRvci0+R2VuZXJh
dGVDb25kaXRpb25hbFN0cmluZ0Zyb21BdHRyaWJ1dGVWYWx1ZSgkY29uZGl0aW9uYWxBdHRyaWJ1
dGUpIDogdW5kZWY7CiAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2NvbmRp
dGlvbmFsU3RyaW5nfVxuIikgaWYgJGNvbmRpdGlvbmFsU3RyaW5nOwogICAgICAgICAgICAgbXkg
JGZ1bmN0aW9uTmFtZSA9IEdldEZ1bmN0aW9uTmFtZSgkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAk
ZnVuY3Rpb24pOwpAQCAtMzcxMiw3ICszNjkzLDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRp
b24KICAgICAgICAgICAgICAgICBteSAkdGVtcGxhdGVQYXJhbWV0ZXJzID0gIiR7Z2V0RnVuY3Rp
b25OYW1lfUdldHRlciI7CiAgICAgICAgICAgICAgICAgaWYgKCRhdHRyaWJ1dGUtPmV4dGVuZGVk
QXR0cmlidXRlcy0+e0xlbmllbnRUaGlzfSkgewogICAgICAgICAgICAgICAgICAgICAkdGVtcGxh
dGVQYXJhbWV0ZXJzIC49ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZXR1cm5FYXJseSI7
Ci0gICAgICAgICAgICAgICAgfSBlbHNpZiAoSXNSZXR1cm5pbmdQcm9taXNlKCRhdHRyaWJ1dGUp
KSB7CisgICAgICAgICAgICAgICAgfSBlbHNpZiAoJGF0dHJpYnV0ZS0+dHlwZS0+bmFtZSBlcSAi
UHJvbWlzZSIpIHsKICAgICAgICAgICAgICAgICAgICAgJHRlbXBsYXRlUGFyYW1ldGVycyAuPSAi
LCBDYXN0ZWRUaGlzRXJyb3JCZWhhdmlvcjo6UmVqZWN0UHJvbWlzZSI7CiAgICAgICAgICAgICAg
ICAgfQogCkBAIC00MDcxLDIxMiArNDA1MiwxMiBAQCBzdWIgR2VuZXJhdGVJbXBsZW1lbnRhdGlv
bgogICAgICMgRnVuY3Rpb25zCiAgICAgaWYgKCRudW1GdW5jdGlvbnMgPiAwKSB7CiAgICAgICAg
IG15ICRpbkFwcGxlQ29weXJpZ2h0ID0gMDsKLSAgICAgICAgZm9yZWFjaCBteSAkZnVuY3Rpb24g
KEBmdW5jdGlvbnMpIHsKLSAgICAgICAgICAgIG5leHQgaWYgSXNKU0J1aWx0aW4oJGludGVyZmFj
ZSwgJGZ1bmN0aW9uKTsKLSAgICAgICAgICAgIG5leHQgaWYgJGZ1bmN0aW9uLT5pc0l0ZXJhYmxl
OwotICAgICAgICAgICAgbmV4dCBpZiAkZnVuY3Rpb24tPmlzU2VyaWFsaXplcjsKLSAgICAgICAg
ICAgIGlmICgkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0FwcGxlQ29weXJpZ2h0fSkg
ewotICAgICAgICAgICAgICAgIGlmICghJGluQXBwbGVDb3B5cmlnaHQpIHsKLSAgICAgICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRiZWdpbkFwcGxlQ29weXJpZ2h0Rm9yU291cmNl
RmlsZXMpOwotICAgICAgICAgICAgICAgICAgICAkaW5BcHBsZUNvcHlyaWdodCA9IDE7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNpZiAoJGluQXBwbGVDb3B5cmlnaHQpIHsK
LSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGVuZEFwcGxlQ29weXJpZ2h0KTsK
LSAgICAgICAgICAgICAgICAkaW5BcHBsZUNvcHlyaWdodCA9IDA7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIG15ICRpc0N1c3RvbSA9IEhhc0N1c3RvbU1ldGhvZCgkZnVuY3Rpb24tPmV4
dGVuZGVkQXR0cmlidXRlcyk7Ci0gICAgICAgICAgICBteSAkaXNPdmVybG9hZGVkID0gJGZ1bmN0
aW9uLT57b3ZlcmxvYWRzfSAmJiBAeyRmdW5jdGlvbi0+e292ZXJsb2Fkc319ID4gMTsKLQotICAg
ICAgICAgICAgbmV4dCBpZiAkaXNDdXN0b20gJiYgJGlzT3ZlcmxvYWRlZCAmJiAkZnVuY3Rpb24t
PntvdmVybG9hZEluZGV4fSA+IDE7Ci0KLSAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzRm9y
SURMVHlwZSgkZnVuY3Rpb24tPnR5cGUpIHVubGVzcyAkaXNDdXN0b20gb3IgSXNSZXR1cm5pbmdQ
cm9taXNlKCRmdW5jdGlvbik7CiAKLSAgICAgICAgICAgIG15ICRmdW5jdGlvbk5hbWUgPSBHZXRG
dW5jdGlvbk5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJGZ1bmN0aW9uKTsKLQotICAgICAg
ICAgICAgbXkgJGNvbmRpdGlvbmFsID0gJGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntD
b25kaXRpb25hbH07Ci0gICAgICAgICAgICBpZiAoJGNvbmRpdGlvbmFsKSB7Ci0gICAgICAgICAg
ICAgICAgbXkgJGNvbmRpdGlvbmFsU3RyaW5nID0gJGNvZGVHZW5lcmF0b3ItPkdlbmVyYXRlQ29u
ZGl0aW9uYWxTdHJpbmdGcm9tQXR0cmlidXRlVmFsdWUoJGNvbmRpdGlvbmFsKTsKLSAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNpZiAke2NvbmRpdGlvbmFsU3RyaW5nfVxuIik7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIG15ICRmdW5jdGlvblJldHVybiA9ICJFbmNv
ZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIjsKLSAgICAgICAgICAgIGlmICghJGlzQ3VzdG9tICYm
ICRpc092ZXJsb2FkZWQpIHsKLSAgICAgICAgICAgICAgICAjIEFwcGVuZCBhIG51bWJlciB0byBh
biBvdmVybG9hZGVkIG1ldGhvZCdzIG5hbWUgdG8gbWFrZSBpdCB1bmlxdWU6Ci0gICAgICAgICAg
ICAgICAgJGZ1bmN0aW9uTmFtZSA9ICRmdW5jdGlvbk5hbWUgLiAkZnVuY3Rpb24tPntvdmVybG9h
ZEluZGV4fTsKLSAgICAgICAgICAgICAgICAjIE1ha2UgdGhpcyBmdW5jdGlvbiBzdGF0aWMgdG8g
YXZvaWQgY29tcGlsZXIgd2FybmluZ3MsIHNpbmNlIHdlIGRvbid0IGdlbmVyYXRlIGEgcHJvdG90
eXBlIGZvciBpdCBpbiB0aGUgaGVhZGVyLgotICAgICAgICAgICAgICAgICRmdW5jdGlvblJldHVy
biA9ICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIjsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgbXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lID0gJGZ1bmN0aW9uLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntJbXBsZW1lbnRlZEFzfSB8fCAkY29kZUdlbmVyYXRvci0+V0tfbGNm
aXJzdCgkZnVuY3Rpb24tPm5hbWUpOwotCi0gICAgICAgICAgICBBZGRUb0ltcGxJbmNsdWRlcygi
SlNET01Qcm9taXNlRGVmZXJyZWQuaCIpIGlmIElzUmV0dXJuaW5nUHJvbWlzZSgkZnVuY3Rpb24p
OwotCi0gICAgICAgICAgICBpZiAoISRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKLSAgICAgICAgICAg
ICAgICBteSAkY2xhc3NQYXJhbWV0ZXJUeXBlID0gJGNsYXNzTmFtZSBlcSAiSlNFdmVudFRhcmdl
dCIgPyAiSlNFdmVudFRhcmdldFdyYXBwZXIqIiA6ICIke2NsYXNzTmFtZX0qIjsKLSAgICAgICAg
ICAgICAgICBteSAkb3B0aW9uYWxQcm9taXNlUGFyYW1ldGVyID0gKElzUmV0dXJuaW5nUHJvbWlz
ZSgkZnVuY3Rpb24pICYmICEkaXNDdXN0b20pID8gIiBSZWY8RGVmZXJyZWRQcm9taXNlPiYmLCIg
OiAiIjsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSAke2Z1bmN0aW9uTmFtZX1DYWxsZXIoSlNDOjpFeGVjU3RhdGUq
LCAke2NsYXNzUGFyYW1ldGVyVHlwZX0sJHtvcHRpb25hbFByb21pc2VQYXJhbWV0ZXJ9IEpTQzo6
VGhyb3dTY29wZSYpO1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJc
biIpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoSXNSZXR1cm5pbmdQcm9taXNl
KCRmdW5jdGlvbikgJiYgISRpc0N1c3RvbSkgewotICAgICAgICAgICAgICAgIG15ICRzY29wZSA9
ICRpbnRlcmZhY2UtPmV4dGVuZGVkQXR0cmlidXRlcy0+e0V4cG9zZWR9ID8gIldpbmRvd09yV29y
a2VyIiA6ICJXaW5kb3dPbmx5IjsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwg
PDxFTkQpOwotc3RhdGljIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2UoRXhl
Y1N0YXRlKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7Ci0KLSR7ZnVuY3Rpb25SZXR1cm59ICR7
ZnVuY3Rpb25OYW1lfShFeGVjU3RhdGUqIHN0YXRlKQotewotICAgIEFTU0VSVChzdGF0ZSk7Ci0g
ICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxsUHJvbWlzZUZ1bmN0aW9uPCR7ZnVuY3Rpb25O
YW1lfVByb21pc2UsIFByb21pc2VFeGVjdXRpb25TY29wZTo6JHtzY29wZX0+KCpzdGF0ZSkpOwot
fQotCi1zdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2Uo
RXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQotRU5ECi0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
JHtmdW5jdGlvblJldHVybn0gJHtmdW5jdGlvbk5hbWV9KEV4ZWNTdGF0ZSogc3RhdGUpXG4iKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ7XG4iKTsK
LQotICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siPHJ1bnRpbWUvRXJyb3IuaD4ifSA9IDE7Ci0K
LSAgICAgICAgICAgIGlmICgkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NFUmVhY3Rp
b25zfSkgewotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEN1c3RvbUVs
ZW1lbnRSZWFjdGlvblN0YWNrIGN1c3RvbUVsZW1lbnRSZWFjdGlvblN0YWNrO1xuIik7Ci0gICAg
ICAgICAgICAgICAgJGltcGxJbmNsdWRlc3siQ3VzdG9tRWxlbWVudFJlYWN0aW9uUXVldWUuaCJ9
ID0gMTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCRmdW5jdGlvbi0+aXNTdGF0
aWMpIHsKLSAgICAgICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjayhcQGltcGxDb250ZW50LCAkZnVuY3Rpb24s
ICRpbnRlcmZhY2UpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAg
ICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKCR7Y2xhc3NOYW1lfTo6IiAuICRmdW5jdGlvbkltcGxl
bWVudGF0aW9uTmFtZSAuICIoc3RhdGUpKTtcbiIpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpO1xuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
ICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7Ci0gICAg
ICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTtcbiIpOwotCi0gICAgICAgICAgICAgICAgICAgIEdlbmVyYXRlQXJndW1lbnRzQ291
bnRDaGVjayhcQGltcGxDb250ZW50LCAkZnVuY3Rpb24sICRpbnRlcmZhY2UpOwotCi0gICAgICAg
ICAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9IEdlbmVyYXRlUGFyYW1ldGVyc0NoZWNr
KFxAaW1wbENvbnRlbnQsICRmdW5jdGlvbiwgJGludGVyZmFjZSwgJGZ1bmN0aW9uSW1wbGVtZW50
YXRpb25OYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgR2VuZXJhdGVJbXBsZW1lbnRhdGlvbkZ1
bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRmdW5jdGlvblN0cmluZywgIiAgICAiLCAkaW50ZXJmYWNl
KTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIG15ICRtZXRob2ROYW1lID0gJGZ1bmN0aW9uLT5uYW1lOwotICAgICAgICAgICAgICAgIGlm
IChJc1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKSAmJiAhJGlzQ3VzdG9tKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIG15ICR0ZW1wbGF0ZVBhcmFtZXRlcnMgPSAiJHtmdW5jdGlvbk5hbWV9Q2Fs
bGVyIjsKLSAgICAgICAgICAgICAgICAgICAgJHRlbXBsYXRlUGFyYW1ldGVycyAuPSAiLCBDYXN0
ZWRUaGlzRXJyb3JCZWhhdmlvcjo6QXNzZXJ0IiBpZiAoJGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntQcml2YXRlSWRlbnRpZmllcn0gYW5kIG5vdCAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEJpbmRpbmdDYWxsZXI8JGNsYXNzTmFtZT46OmNhbGxQ
cm9taXNlT3BlcmF0aW9uPCR7dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3RhdGUsIFdURk1vdmUocHJv
bWlzZSksIFwiJHttZXRob2ROYW1lfVwiKTtcbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1lfUNhbGxlcihKU0M6
OkV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhpcywgUmVmPERlZmVycmVk
UHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpXG4iKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBteSAkY2xhc3NQYXJh
bWV0ZXJUeXBlID0gJGNsYXNzTmFtZSBlcSAiSlNFdmVudFRhcmdldCIgPyAiSlNFdmVudFRhcmdl
dFdyYXBwZXIqIiA6ICIke2NsYXNzTmFtZX0qIjsKLSAgICAgICAgICAgICAgICAgICAgbXkgJHRl
bXBsYXRlUGFyYW1ldGVycyA9ICIke2Z1bmN0aW9uTmFtZX1DYWxsZXIiOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoJGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntQcml2YXRlSWRlbnRp
Zmllcn0gYW5kIG5vdCAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50
aWZpZXJ9KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAkdGVtcGxhdGVQYXJhbWV0ZXJzIC49
ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpBc3NlcnQiOwotICAgICAgICAgICAgICAgICAg
ICB9IGVsc2lmIChJc1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgIyBGSVhNRTogV2UgbmVlZCB0aGlzIHNwZWNpZmljIGhhbmRsaW5nIGZvciBj
dXN0b20gcHJvbWlzZS1yZXR1cm5pbmcgZnVuY3Rpb25zLgotICAgICAgICAgICAgICAgICAgICAg
ICAgIyBJdCB3b3VsZCBiZSBiZXR0ZXIgdG8gaGF2ZSB0aGUgY2FzdGVkLXRoaXMgY29kZSBjYWxs
aW5nIHRoZSBwcm9taXNlLXNwZWNpZmljIGNvZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICAk
dGVtcGxhdGVQYXJhbWV0ZXJzIC49ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQ
cm9taXNlIiBpZiBJc1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKTsKLSAgICAgICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJl
dHVybiBCaW5kaW5nQ2FsbGVyPCRjbGFzc05hbWU+OjpjYWxsT3BlcmF0aW9uPCR7dGVtcGxhdGVQ
YXJhbWV0ZXJzfT4oc3RhdGUsIFwiJHttZXRob2ROYW1lfVwiKTtcbiIpOwotICAgICAgICAgICAg
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOwotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIlxuIik7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxD
b250ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25OYW1l
fUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NQYXJhbWV0ZXJUeXBlfSBjYXN0
ZWRUaGlzLCBKU0M6OlRocm93U2NvcGUmIHRocm93U2NvcGUpXG4iKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIntcbiIpOwotICAgICAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4i
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7XG4iKTsKLQotICAgICAgICAgICAgICAgIGlmICgkaW50ZXJmYWNlLT5leHRl
bmRlZEF0dHJpYnV0ZXMtPntDaGVja1NlY3VyaXR5fSBhbmQgISRmdW5jdGlvbi0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57RG9Ob3RDaGVja1NlY3VyaXR5fSkgewotICAgICAgICAgICAgICAgICAgICBB
ZGRUb0ltcGxJbmNsdWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIpOwotICAgICAgICAgICAg
ICAgICAgICBpZiAoJGludGVyZmFjZU5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5
OjpzaG91bGRBbGxvd0FjY2Vzc1RvRE9NV2luZG93KHN0YXRlLCBjYXN0ZWRUaGlzLT53cmFwcGVk
KCksIFRocm93U2VjdXJpdHlFcnJvcikpXG4iKTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIGlmICgh
QmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1RvRnJhbWUoc3RhdGUsIGNhc3RlZFRo
aXMtPndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5RXJyb3IpKVxuIik7Ci0gICAgICAg
ICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIg
ICAgICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSk7XG4iKTsKLSAgICAg
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAoJGlzQ3VzdG9tKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIHJldHVybiBKU1ZhbHVlOjplbmNv
ZGUoY2FzdGVkVGhpcy0+IiAuICRmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZSAuICIoKnN0YXRl
KSk7XG4iKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
O1xuIikgdW5sZXNzICRmdW5jdGlvbi0+aXNNYXBMaWtlOwotCi0gICAgICAgICAgICAgICAgICAg
IEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjayhcQGltcGxDb250ZW50LCAkZnVuY3Rpb24sICRp
bnRlcmZhY2UpOwotCi0gICAgICAgICAgICAgICAgICAgIG15ICRmdW5jdGlvblN0cmluZyA9IEdl
bmVyYXRlUGFyYW1ldGVyc0NoZWNrKFxAaW1wbENvbnRlbnQsICRmdW5jdGlvbiwgJGludGVyZmFj
ZSwgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lKTsKLSAgICAgICAgICAgICAgICAgICAgR2Vu
ZXJhdGVJbXBsZW1lbnRhdGlvbkZ1bmN0aW9uQ2FsbCgkZnVuY3Rpb24sICRmdW5jdGlvblN0cmlu
ZywgIiAgICAiLCAkaW50ZXJmYWNlKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKLQotICAgICAgICAg
ICAgaWYgKCRmdW5jdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57RE9NSklUfSkgewotICAgICAg
ICAgICAgICAgICRpbXBsSW5jbHVkZXN7IjxpbnRlcnByZXRlci9GcmFtZVRyYWNlcnMuaD4ifSA9
IDE7Ci0gICAgICAgICAgICAgICAgbXkgJHVuc2FmZUZ1bmN0aW9uTmFtZSA9ICJ1bnNhZmUiIC4g
JGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uTmFtZSk7Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJKU0M6OkVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04g
JHt1bnNhZmVGdW5jdGlvbk5hbWV9KEpTQzo6RXhlY1N0YXRlKiBzdGF0ZSwgJGNsYXNzTmFtZSog
Y2FzdGVkVGhpcyIpOwotICAgICAgICAgICAgICAgIGZvcmVhY2ggbXkgJGFyZ3VtZW50IChAeyRm
dW5jdGlvbi0+YXJndW1lbnRzfSkgewotICAgICAgICAgICAgICAgICAgICBteSAkdHlwZSA9ICRh
cmd1bWVudC0+dHlwZTsKLSAgICAgICAgICAgICAgICAgICAgbXkgJGFyZ3VtZW50VHlwZSA9IEdl
dFVuc2FmZUFyZ3VtZW50VHlwZSgkaW50ZXJmYWNlLCAkdHlwZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG15ICRuYW1lID0gJGFyZ3VtZW50LT5uYW1lOwotICAgICAgICAgICAgICAgICAgICBteSAk
ZW5jb2RlZE5hbWUgPSAiZW5jb2RlZCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkbmFt
ZSk7Ci0gICAgICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiLCAke2FyZ3VtZW50
VHlwZX0gJHtlbmNvZGVkTmFtZX0iKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICIpXG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBs
Q29udGVudCwgIntcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7XG4iKTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29u
dGVudCwgIiAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAiICAgIEpTQzo6TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigm
dm0sIHN0YXRlKTtcbiIpOwotICAgICAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAg
IGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pO1xuIik7Ci0gICAgICAg
ICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUp
O1xuIik7Ci0gICAgICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1w
bCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpOwotICAgICAgICAgICAgICAgIG15IEBhcmd1
bWVudHM7Ci0gICAgICAgICAgICAgICAgbXkgJGltcGxGdW5jdGlvbk5hbWU7Ci0gICAgICAgICAg
ICAgICAgbXkgJGltcGxlbWVudGVkQnkgPSAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+
e0ltcGxlbWVudGVkQnl9OwotCi0gICAgICAgICAgICAgICAgaWYgKCRpbXBsZW1lbnRlZEJ5KSB7
Ci0gICAgICAgICAgICAgICAgICAgIEFkZFRvSW1wbEluY2x1ZGVzKCIke2ltcGxlbWVudGVkQnl9
LmgiLCAkZnVuY3Rpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfSk7Ci0gICAg
ICAgICAgICAgICAgICAgIHVuc2hpZnQoQGFyZ3VtZW50cywgImltcGwiKSBpZiAhJGZ1bmN0aW9u
LT5pc1N0YXRpYzsKLSAgICAgICAgICAgICAgICAgICAgJGltcGxGdW5jdGlvbk5hbWUgPSAiV2Vi
Q29yZTo6JHtpbXBsZW1lbnRlZEJ5fTo6JHtmdW5jdGlvbkltcGxlbWVudGF0aW9uTmFtZX0iOwot
ICAgICAgICAgICAgICAgIH0gZWxzaWYgKCRmdW5jdGlvbi0+aXNTdGF0aWMpIHsKLSAgICAgICAg
ICAgICAgICAgICAgJGltcGxGdW5jdGlvbk5hbWUgPSAiJHtpbnRlcmZhY2VOYW1lfTo6JHtmdW5j
dGlvbkltcGxlbWVudGF0aW9uTmFtZX0iOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgICRpbXBsRnVuY3Rpb25OYW1lID0gImltcGwuJHtmdW5jdGlvbkltcGxl
bWVudGF0aW9uTmFtZX0iOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGZv
cmVhY2ggbXkgJGFyZ3VtZW50IChAeyRmdW5jdGlvbi0+YXJndW1lbnRzfSkgewotICAgICAgICAg
ICAgICAgICAgICBteSAkdmFsdWUgPSAiIjsKLSAgICAgICAgICAgICAgICAgICAgbXkgJHR5cGUg
PSAkYXJndW1lbnQtPnR5cGU7Ci0gICAgICAgICAgICAgICAgICAgIG15ICRuYW1lID0gJGFyZ3Vt
ZW50LT5uYW1lOwotICAgICAgICAgICAgICAgICAgICBteSAkZW5jb2RlZE5hbWUgPSAiZW5jb2Rl
ZCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkbmFtZSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG15ICRzaG91bGRQYXNzQnlSZWZlcmVuY2UgPSBTaG91bGRQYXNzQXJndW1lbnRCeVJlZmVy
ZW5jZSgkYXJndW1lbnQpOwotCi0gICAgICAgICAgICAgICAgICAgIG15ICgkbmF0aXZlVmFsdWUs
ICRtYXlUaHJvd0V4Y2VwdGlvbikgPSBVbnNhZmVUb05hdGl2ZSgkaW50ZXJmYWNlLCAkYXJndW1l
bnQsICRlbmNvZGVkTmFtZSwgJGZ1bmN0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRp
b25hbH0pOwotICAgICAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRv
ICRuYW1lID0gJHtuYXRpdmVWYWx1ZX07XG4iKTsKLSAgICAgICAgICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVk
SlNWYWx1ZSgpKTtcbiIpIGlmICRtYXlUaHJvd0V4Y2VwdGlvbjsKLSAgICAgICAgICAgICAgICAg
ICAgJHZhbHVlID0gIldURk1vdmUoJG5hbWUpIjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAo
JHNob3VsZFBhc3NCeVJlZmVyZW5jZSkgewotICAgICAgICAgICAgICAgICAgICAgICAgJHZhbHVl
ID0gIiokbmFtZSI7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
cHVzaChAYXJndW1lbnRzLCAkdmFsdWUpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAg
ICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiJGltcGxGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwg
IiwgQGFyZ3VtZW50cykgLiAiKSI7Ci0gICAgICAgICAgICAgICAgJGZ1bmN0aW9uU3RyaW5nID0g
InByb3BhZ2F0ZUV4Y2VwdGlvbigqc3RhdGUsIHRocm93U2NvcGUsICRmdW5jdGlvblN0cmluZyki
IGlmIE5lZWRzRXhwbGljaXRQcm9wYWdhdGVFeGNlcHRpb25DYWxsKCRmdW5jdGlvbik7Ci0gICAg
ICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZSgiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygkZnVuY3Rpb24sICRpbnRlcmZhY2Us
ICRmdW5jdGlvblN0cmluZywgIipjYXN0ZWRUaGlzLT5nbG9iYWxPYmplY3QoKSIpIC4gIik7XG4i
KTsKLSAgICAgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiI2VuZGlmXG5cbiIpIGlm
ICRjb25kaXRpb25hbDsKLQotICAgICAgICAgICAgIyBHZW5lcmF0ZSBhIGZ1bmN0aW9uIGRpc3Bh
dGNoaW5nIGNhbGwgdG8gdGhlIHJlc3Qgb2YgdGhlIG92ZXJsb2Fkcy4KLSAgICAgICAgICAgIEdl
bmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9uT3JDb25zdHJ1Y3RvcigkZnVuY3Rpb24sICRpbnRlcmZh
Y2UsICJvcGVyYXRpb24iKSBpZiAhJGlzQ3VzdG9tICYmICRpc092ZXJsb2FkZWQgJiYgJGZ1bmN0
aW9uLT57b3ZlcmxvYWRJbmRleH0gPT0gQHskZnVuY3Rpb24tPntvdmVybG9hZHN9fTsKKyAgICAg
ICAgZm9yZWFjaCBteSAkZnVuY3Rpb24gKEBmdW5jdGlvbnMpIHsKKyAgICAgICAgICAgIEdlbmVy
YXRlT3BlcmF0aW9uRGVmaW5pdGlvbigkaW50ZXJmYWNlLCAkY2xhc3NOYW1lLCAkZnVuY3Rpb24p
OwogICAgICAgICB9CiAKICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICRlbmRBcHBsZUNvcHly
aWdodCkgaWYgJGluQXBwbGVDb3B5cmlnaHQ7Ci0KICAgICB9CiAKICAgICBHZW5lcmF0ZUxlZ2Fj
eUNhbGxlckRlZmluaXRpb25zKCRpbnRlcmZhY2UsICRjbGFzc05hbWUpOwpAQCAtNDUxMSw2ICs0
MjkyLDIyMyBAQCBFTkQKICAgICBwdXNoKEBpbXBsQ29udGVudCwgIlxuI2VuZGlmIC8vICR7Y29u
ZGl0aW9uYWxTdHJpbmd9XG4iKSBpZiAkY29uZGl0aW9uYWxTdHJpbmc7CiB9CiAKK3N1YiBHZW5l
cmF0ZU9wZXJhdGlvbkRlZmluaXRpb24KK3sKKyAgICBteSAoJGludGVyZmFjZSwgJGNsYXNzTmFt
ZSwgJG9wZXJhdGlvbikgPSBAXzsKKworICAgIHJldHVybiBpZiBJc0pTQnVpbHRpbigkaW50ZXJm
YWNlLCAkb3BlcmF0aW9uKTsKKyAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNJdGVyYWJsZTsK
KyAgICByZXR1cm4gaWYgJG9wZXJhdGlvbi0+aXNTZXJpYWxpemVyOworCisgICAgbXkgJGlzQ3Vz
dG9tID0gSGFzQ3VzdG9tTWV0aG9kKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcyk7Cisg
ICAgbXkgJGlzT3ZlcmxvYWRlZCA9ICRvcGVyYXRpb24tPntvdmVybG9hZHN9ICYmIEB7JG9wZXJh
dGlvbi0+e292ZXJsb2Fkc319ID4gMTsKKworICAgIHJldHVybiBpZiAkaXNDdXN0b20gJiYgJGlz
T3ZlcmxvYWRlZCAmJiAkb3BlcmF0aW9uLT57b3ZlcmxvYWRJbmRleH0gPiAxOworCisgICAgbXkg
JGluQXBwbGVDb3B5cmlnaHQgPSAwOworCisgICAgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0FwcGxlQ29weXJpZ2h0fSkgeworICAgICAgICBpZiAoISRpbkFwcGxlQ29weXJp
Z2h0KSB7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGJlZ2luQXBwbGVDb3B5cmln
aHRGb3JTb3VyY2VGaWxlcyk7CisgICAgICAgICAgICAkaW5BcHBsZUNvcHlyaWdodCA9IDE7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2lmICgkaW5BcHBsZUNvcHlyaWdodCkgeworICAgICAgICBwdXNo
KEBpbXBsQ29udGVudCwgJGVuZEFwcGxlQ29weXJpZ2h0KTsKKyAgICAgICAgJGluQXBwbGVDb3B5
cmlnaHQgPSAwOworICAgIH0KKworICAgIG15ICRjb25kaXRpb25hbCA9ICRvcGVyYXRpb24tPmV4
dGVuZGVkQXR0cmlidXRlcy0+e0NvbmRpdGlvbmFsfTsKKyAgICBpZiAoJGNvbmRpdGlvbmFsKSB7
CisgICAgICAgIG15ICRjb25kaXRpb25hbFN0cmluZyA9ICRjb2RlR2VuZXJhdG9yLT5HZW5lcmF0
ZUNvbmRpdGlvbmFsU3RyaW5nRnJvbUF0dHJpYnV0ZVZhbHVlKCRjb25kaXRpb25hbCk7CisgICAg
ICAgIHB1c2goQGltcGxDb250ZW50LCAiI2lmICR7Y29uZGl0aW9uYWxTdHJpbmd9XG4iKTsKKyAg
ICB9CisKKyAgICBteSAkaGFzUHJvbWlzZVJldHVyblR5cGUgPSAkb3BlcmF0aW9uLT50eXBlLT5u
YW1lIGVxICJQcm9taXNlIjsKKworICAgIEFkZFRvSW1wbEluY2x1ZGVzRm9ySURMVHlwZSgkb3Bl
cmF0aW9uLT50eXBlLCAkY29uZGl0aW9uYWwpIHVubGVzcyAkaXNDdXN0b20gb3IgJGhhc1Byb21p
c2VSZXR1cm5UeXBlOworICAgIEFkZFRvSW1wbEluY2x1ZGVzKCJKU0RPTVByb21pc2VEZWZlcnJl
ZC5oIiwgJGNvbmRpdGlvbmFsKSBpZiAkaGFzUHJvbWlzZVJldHVyblR5cGU7CisgICAgQWRkVG9J
bXBsSW5jbHVkZXMoIjxydW50aW1lL0Vycm9yLmg+IiwgJGNvbmRpdGlvbmFsKTsKKworICAgIG15
ICRmdW5jdGlvbk5hbWUgPSBHZXRGdW5jdGlvbk5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwg
JG9wZXJhdGlvbik7CisgICAgbXkgJGZ1bmN0aW9uUmV0dXJuID0gIkVuY29kZWRKU1ZhbHVlIEpT
Q19IT1NUX0NBTEwiOworCisgICAgaWYgKCEkaXNDdXN0b20gJiYgJGlzT3ZlcmxvYWRlZCkgewor
ICAgICAgICAjIEFwcGVuZCBhIG51bWJlciB0byBhbiBvdmVybG9hZGVkIG1ldGhvZCdzIG5hbWUg
dG8gbWFrZSBpdCB1bmlxdWU6CisgICAgICAgICRmdW5jdGlvbk5hbWUgPSAkZnVuY3Rpb25OYW1l
IC4gJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9OworICAgICAgICAjIE1ha2UgdGhpcyBmdW5j
dGlvbiBzdGF0aWMgdG8gYXZvaWQgY29tcGlsZXIgd2FybmluZ3MsIHNpbmNlIHdlIGRvbid0IGdl
bmVyYXRlIGEgcHJvdG90eXBlIGZvciBpdCBpbiB0aGUgaGVhZGVyLgorICAgICAgICAkZnVuY3Rp
b25SZXR1cm4gPSAic3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSI7CisgICAgfQorCisgICAg
bXkgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lID0gJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRy
aWJ1dGVzLT57SW1wbGVtZW50ZWRBc30gfHwgJGNvZGVHZW5lcmF0b3ItPldLX2xjZmlyc3QoJG9w
ZXJhdGlvbi0+bmFtZSk7CisKKyAgICBpZiAoISRvcGVyYXRpb24tPmlzU3RhdGljKSB7CisgICAg
ICAgIG15ICRjbGFzc1BhcmFtZXRlclR5cGUgPSAkY2xhc3NOYW1lIGVxICJKU0V2ZW50VGFyZ2V0
IiA/ICJKU0V2ZW50VGFyZ2V0V3JhcHBlcioiIDogIiR7Y2xhc3NOYW1lfSoiOworICAgICAgICBt
eSAkb3B0aW9uYWxQcm9taXNlUGFyYW1ldGVyID0gKCRoYXNQcm9taXNlUmV0dXJuVHlwZSAmJiAh
JGlzQ3VzdG9tKSA/ICIgUmVmPERlZmVycmVkUHJvbWlzZT4mJiwiIDogIiI7CisgICAgICAgIHB1
c2goQGltcGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlICR7ZnVu
Y3Rpb25OYW1lfUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSosICR7Y2xhc3NQYXJhbWV0ZXJUeXBlfSwk
e29wdGlvbmFsUHJvbWlzZVBhcmFtZXRlcn0gSlNDOjpUaHJvd1Njb3BlJik7XG4iKTsKKyAgICAg
ICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgIH0KKworICAgIGlmICgkaGFzUHJvbWlz
ZVJldHVyblR5cGUgJiYgISRpc0N1c3RvbSkgeworICAgICAgICBteSAkc2NvcGUgPSAkaW50ZXJm
YWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntFeHBvc2VkfSA/ICJXaW5kb3dPcldvcmtlciIgOiAi
V2luZG93T25seSI7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAic3RhdGljIEVuY29kZWRK
U1ZhbHVlICR7ZnVuY3Rpb25OYW1lfVByb21pc2UoRXhlY1N0YXRlKiwgUmVmPERlZmVycmVkUHJv
bWlzZT4mJik7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJcbiIpOworICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIiR7ZnVuY3Rpb25SZXR1cm59ICR7ZnVuY3Rpb25OYW1lfShF
eGVjU3RhdGUqIHN0YXRlKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7
CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIEFTU0VSVChzdGF0ZSk7XG4iKTsKKyAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYWxs
UHJvbWlzZUZ1bmN0aW9uPCR7ZnVuY3Rpb25OYW1lfVByb21pc2UsIFByb21pc2VFeGVjdXRpb25T
Y29wZTo6JHtzY29wZX0+KCpzdGF0ZSkpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAifVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAgcHVz
aChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25O
YW1lfVByb21pc2UoRXhlY1N0YXRlKiBzdGF0ZSwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9t
aXNlKVxuIik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIke2Z1
bmN0aW9uUmV0dXJufSAke2Z1bmN0aW9uTmFtZX0oRXhlY1N0YXRlKiBzdGF0ZSlcbiIpOworICAg
IH0KKworICAgIHB1c2goQGltcGxDb250ZW50LCAie1xuIik7CisKKworICAgIGlmICgkb3BlcmF0
aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDRVJlYWN0aW9uc30pIHsKKyAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgQ3VzdG9tRWxlbWVudFJlYWN0aW9uU3RhY2sgY3VzdG9tRWxlbWVu
dFJlYWN0aW9uU3RhY2s7XG4iKTsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siQ3VzdG9tRWxlbWVu
dFJlYWN0aW9uUXVldWUuaCJ9ID0gMTsKKyAgICB9CisKKyAgICBpZiAoJG9wZXJhdGlvbi0+aXNT
dGF0aWMpIHsKKyAgICAgICAgaWYgKCRpc0N1c3RvbSkgeworICAgICAgICAgICAgR2VuZXJhdGVB
cmd1bWVudHNDb3VudENoZWNrKFxAaW1wbENvbnRlbnQsICRvcGVyYXRpb24sICRpbnRlcmZhY2Up
OworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZSgke2NsYXNzTmFtZX06OiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWUgLiAiKHN0
YXRlKSk7XG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHB1c2goQGltcGxDb250
ZW50LCAiICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpO1xuIik7CisgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZt
KTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpO1xuIik7CisKKyAgICAgICAgICAgIEdlbmVyYXRlQXJndW1lbnRzQ291bnRD
aGVjayhcQGltcGxDb250ZW50LCAkb3BlcmF0aW9uLCAkaW50ZXJmYWNlKTsKKworICAgICAgICAg
ICAgbXkgJGZ1bmN0aW9uU3RyaW5nID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soXEBpbXBsQ29u
dGVudCwgJG9wZXJhdGlvbiwgJGludGVyZmFjZSwgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1l
KTsKKyAgICAgICAgICAgIEdlbmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoJG9wZXJh
dGlvbiwgJGZ1bmN0aW9uU3RyaW5nLCAiICAgICIsICRpbnRlcmZhY2UpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbXkgJG1ldGhvZE5hbWUgPSAkb3BlcmF0aW9uLT5uYW1lOwor
CisgICAgICAgIGlmICgkaGFzUHJvbWlzZVJldHVyblR5cGUgJiYgISRpc0N1c3RvbSkgeworICAg
ICAgICAgICAgbXkgJHRlbXBsYXRlUGFyYW1ldGVycyA9ICIke2Z1bmN0aW9uTmFtZX1DYWxsZXIi
OworICAgICAgICAgICAgJHRlbXBsYXRlUGFyYW1ldGVycyAuPSAiLCBDYXN0ZWRUaGlzRXJyb3JC
ZWhhdmlvcjo6QXNzZXJ0IiBpZiAoJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57UHJp
dmF0ZUlkZW50aWZpZXJ9IGFuZCBub3QgJG9wZXJhdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57
UHVibGljSWRlbnRpZmllcn0pOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8JGNsYXNzTmFtZT46OmNhbGxQcm9taXNlT3BlcmF0aW9uPCR7
dGVtcGxhdGVQYXJhbWV0ZXJzfT4oc3RhdGUsIFdURk1vdmUocHJvbWlzZSksIFwiJHttZXRob2RO
YW1lfVwiKTtcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJ9XG4iKTsKKyAg
ICAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiXG4iKTsKKyAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAic3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlICR7ZnVuY3Rpb25O
YW1lfUNhbGxlcihKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsICR7Y2xhc3NOYW1lfSogY2FzdGVkVGhp
cywgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlLCBKU0M6OlRocm93U2NvcGUmIHRocm93
U2NvcGUpXG4iKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG15ICRjbGFzc1BhcmFt
ZXRlclR5cGUgPSAkY2xhc3NOYW1lIGVxICJKU0V2ZW50VGFyZ2V0IiA/ICJKU0V2ZW50VGFyZ2V0
V3JhcHBlcioiIDogIiR7Y2xhc3NOYW1lfSoiOworICAgICAgICAgICAgbXkgJHRlbXBsYXRlUGFy
YW1ldGVycyA9ICIke2Z1bmN0aW9uTmFtZX1DYWxsZXIiOworICAgICAgICAgICAgaWYgKCRvcGVy
YXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1ByaXZhdGVJZGVudGlmaWVyfSBhbmQgbm90ICRv
cGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e1B1YmxpY0lkZW50aWZpZXJ9KSB7CisgICAg
ICAgICAgICAgICAgJHRlbXBsYXRlUGFyYW1ldGVycyAuPSAiLCBDYXN0ZWRUaGlzRXJyb3JCZWhh
dmlvcjo6QXNzZXJ0IjsKKyAgICAgICAgICAgIH0gZWxzaWYgKCRoYXNQcm9taXNlUmV0dXJuVHlw
ZSkgeworICAgICAgICAgICAgICAgICMgRklYTUU6IFdlIG5lZWQgdGhpcyBzcGVjaWZpYyBoYW5k
bGluZyBmb3IgY3VzdG9tIHByb21pc2UtcmV0dXJuaW5nIGZ1bmN0aW9ucy4KKyAgICAgICAgICAg
ICAgICAjIEl0IHdvdWxkIGJlIGJldHRlciB0byBoYXZlIHRoZSBjYXN0ZWQtdGhpcyBjb2RlIGNh
bGxpbmcgdGhlIHByb21pc2Utc3BlY2lmaWMgY29kZS4KKyAgICAgICAgICAgICAgICAkdGVtcGxh
dGVQYXJhbWV0ZXJzIC49ICIsIENhc3RlZFRoaXNFcnJvckJlaGF2aW9yOjpSZWplY3RQcm9taXNl
IjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAg
cmV0dXJuIEJpbmRpbmdDYWxsZXI8JGNsYXNzTmFtZT46OmNhbGxPcGVyYXRpb248JHt0ZW1wbGF0
ZVBhcmFtZXRlcnN9PihzdGF0ZSwgXCIke21ldGhvZE5hbWV9XCIpO1xuIik7CisgICAgICAgICAg
ICBwdXNoKEBpbXBsQ29udGVudCwgIn1cbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJcbiIpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICJzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUgJHtmdW5jdGlvbk5hbWV9Q2FsbGVyKEpTQzo6RXhlY1N0YXRl
KiBzdGF0ZSwgJHtjbGFzc1BhcmFtZXRlclR5cGV9IGNhc3RlZFRoaXMsIEpTQzo6VGhyb3dTY29w
ZSYgdGhyb3dTY29wZSlcbiIpOworICAgICAgICB9CisKKyAgICAgICAgcHVzaChAaW1wbENvbnRl
bnQsICJ7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7XG4iKTsKKworICAgICAgICBpZiAoJGludGVyZmFjZS0+ZXh0ZW5kZWRB
dHRyaWJ1dGVzLT57Q2hlY2tTZWN1cml0eX0gYW5kICEkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJp
YnV0ZXMtPntEb05vdENoZWNrU2VjdXJpdHl9KSB7CisgICAgICAgICAgICBBZGRUb0ltcGxJbmNs
dWRlcygiSlNET01CaW5kaW5nU2VjdXJpdHkuaCIpOworICAgICAgICAgICAgaWYgKCRpbnRlcmZh
Y2UtPnR5cGUtPm5hbWUgZXEgIkRPTVdpbmRvdyIpIHsKKyAgICAgICAgICAgICAgICBwdXNoKEBp
bXBsQ29udGVudCwgIiAgICBpZiAoIUJpbmRpbmdTZWN1cml0eTo6c2hvdWxkQWxsb3dBY2Nlc3NU
b0RPTVdpbmRvdyhzdGF0ZSwgY2FzdGVkVGhpcy0+d3JhcHBlZCgpLCBUaHJvd1NlY3VyaXR5RXJy
b3IpKVxuIik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGlmICghQmluZGluZ1NlY3VyaXR5OjpzaG91bGRBbGxvd0FjY2Vzc1Rv
RnJhbWUoc3RhdGUsIGNhc3RlZFRoaXMtPndyYXBwZWQoKS5mcmFtZSgpLCBUaHJvd1NlY3VyaXR5
RXJyb3IpKVxuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTtcbiIpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKCRpc0N1c3RvbSkgeworICAgICAgICAgICAgcHVzaChA
aW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShjYXN0ZWRUaGlzLT4iIC4g
JGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lIC4gIigqc3RhdGUpKTtcbiIpOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTtcbiIpIHVubGVzcyAkb3BlcmF0aW9uLT5pc01hcExpa2U7
CisKKyAgICAgICAgICAgIEdlbmVyYXRlQXJndW1lbnRzQ291bnRDaGVjayhcQGltcGxDb250ZW50
LCAkb3BlcmF0aW9uLCAkaW50ZXJmYWNlKTsKKworICAgICAgICAgICAgbXkgJGZ1bmN0aW9uU3Ry
aW5nID0gR2VuZXJhdGVQYXJhbWV0ZXJzQ2hlY2soXEBpbXBsQ29udGVudCwgJG9wZXJhdGlvbiwg
JGludGVyZmFjZSwgJGZ1bmN0aW9uSW1wbGVtZW50YXRpb25OYW1lKTsKKyAgICAgICAgICAgIEdl
bmVyYXRlSW1wbGVtZW50YXRpb25GdW5jdGlvbkNhbGwoJG9wZXJhdGlvbiwgJGZ1bmN0aW9uU3Ry
aW5nLCAiICAgICIsICRpbnRlcmZhY2UpOworICAgICAgICB9CisgICAgfQorCisgICAgcHVzaChA
aW1wbENvbnRlbnQsICJ9XG5cbiIpOworCisgICAgaWYgKCRvcGVyYXRpb24tPmV4dGVuZGVkQXR0
cmlidXRlcy0+e0RPTUpJVH0pIHsKKyAgICAgICAgJGltcGxJbmNsdWRlc3siPGludGVycHJldGVy
L0ZyYW1lVHJhY2Vycy5oPiJ9ID0gMTsKKyAgICAgICAgbXkgJHVuc2FmZUZ1bmN0aW9uTmFtZSA9
ICJ1bnNhZmUiIC4gJGNvZGVHZW5lcmF0b3ItPldLX3VjZmlyc3QoJGZ1bmN0aW9uTmFtZSk7Cisg
ICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiSlNDOjpFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFU
SU9OICR7dW5zYWZlRnVuY3Rpb25OYW1lfShKU0M6OkV4ZWNTdGF0ZSogc3RhdGUsICRjbGFzc05h
bWUqIGNhc3RlZFRoaXMiKTsKKyAgICAgICAgZm9yZWFjaCBteSAkYXJndW1lbnQgKEB7JG9wZXJh
dGlvbi0+YXJndW1lbnRzfSkgeworICAgICAgICAgICAgbXkgJHR5cGUgPSAkYXJndW1lbnQtPnR5
cGU7CisgICAgICAgICAgICBteSAkYXJndW1lbnRUeXBlID0gR2V0VW5zYWZlQXJndW1lbnRUeXBl
KCRpbnRlcmZhY2UsICR0eXBlKTsKKyAgICAgICAgICAgIG15ICRuYW1lID0gJGFyZ3VtZW50LT5u
YW1lOworICAgICAgICAgICAgbXkgJGVuY29kZWROYW1lID0gImVuY29kZWQiIC4gJGNvZGVHZW5l
cmF0b3ItPldLX3VjZmlyc3QoJG5hbWUpOworICAgICAgICAgICAgcHVzaChAaW1wbENvbnRlbnQs
ICIsICR7YXJndW1lbnRUeXBlfSAke2VuY29kZWROYW1lfSIpOworICAgICAgICB9CisgICAgICAg
IHB1c2goQGltcGxDb250ZW50LCAiKVxuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAi
e1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTShzdGF0
ZSk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgVk0mIHZtID0gc3RhdGUt
PnZtKCk7XG4iKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgSlNDOjpOYXRpdmVD
YWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgc3RhdGUpO1xuIik7CisgICAgICAgIHB1c2goQGlt
cGxDb250ZW50LCAiICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
O1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTtcbiIpOworICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBhdXRvJiBpbXBs
ID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpO1xuIik7CisgICAgICAgIG15IEBhcmd1bWVudHM7Cisg
ICAgICAgIG15ICRpbXBsRnVuY3Rpb25OYW1lOworICAgICAgICBteSAkaW1wbGVtZW50ZWRCeSA9
ICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0ltcGxlbWVudGVkQnl9OworCisgICAg
ICAgIGlmICgkaW1wbGVtZW50ZWRCeSkgeworICAgICAgICAgICAgQWRkVG9JbXBsSW5jbHVkZXMo
IiR7aW1wbGVtZW50ZWRCeX0uaCIsICRvcGVyYXRpb24tPmV4dGVuZGVkQXR0cmlidXRlcy0+e0Nv
bmRpdGlvbmFsfSk7CisgICAgICAgICAgICB1bnNoaWZ0KEBhcmd1bWVudHMsICJpbXBsIikgaWYg
ISRvcGVyYXRpb24tPmlzU3RhdGljOworICAgICAgICAgICAgJGltcGxGdW5jdGlvbk5hbWUgPSAi
V2ViQ29yZTo6IiAuICRpbXBsZW1lbnRlZEJ5IC4gIjo6IiAuICRmdW5jdGlvbkltcGxlbWVudGF0
aW9uTmFtZTsKKyAgICAgICAgfSBlbHNpZiAoJG9wZXJhdGlvbi0+aXNTdGF0aWMpIHsKKyAgICAg
ICAgICAgICRpbXBsRnVuY3Rpb25OYW1lID0gJGludGVyZmFjZS0+dHlwZS0+bmFtZSAuICI6OiIg
LiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlvbk5hbWU7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICAkaW1wbEZ1bmN0aW9uTmFtZSA9ICJpbXBsLiIgLiAkZnVuY3Rpb25JbXBsZW1lbnRhdGlv
bk5hbWU7CisgICAgICAgIH0KKworICAgICAgICBmb3JlYWNoIG15ICRhcmd1bWVudCAoQHskb3Bl
cmF0aW9uLT5hcmd1bWVudHN9KSB7CisgICAgICAgICAgICBteSAkdmFsdWUgPSAiIjsKKyAgICAg
ICAgICAgIG15ICR0eXBlID0gJGFyZ3VtZW50LT50eXBlOworICAgICAgICAgICAgbXkgJG5hbWUg
PSAkYXJndW1lbnQtPm5hbWU7CisgICAgICAgICAgICBteSAkZW5jb2RlZE5hbWUgPSAiZW5jb2Rl
ZCIgLiAkY29kZUdlbmVyYXRvci0+V0tfdWNmaXJzdCgkbmFtZSk7CisgICAgICAgICAgICBteSAk
c2hvdWxkUGFzc0J5UmVmZXJlbmNlID0gU2hvdWxkUGFzc0FyZ3VtZW50QnlSZWZlcmVuY2UoJGFy
Z3VtZW50KTsKKworICAgICAgICAgICAgbXkgKCRuYXRpdmVWYWx1ZSwgJG1heVRocm93RXhjZXB0
aW9uKSA9IFVuc2FmZVRvTmF0aXZlKCRpbnRlcmZhY2UsICRhcmd1bWVudCwgJGVuY29kZWROYW1l
LCAkb3BlcmF0aW9uLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntDb25kaXRpb25hbH0pOworICAgICAg
ICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgYXV0byAkbmFtZSA9ICR7bmF0aXZlVmFsdWV9
O1xuIik7CisgICAgICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIiAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpO1xuIikgaWYgJG1heVRocm93RXhj
ZXB0aW9uOworICAgICAgICAgICAgJHZhbHVlID0gIldURk1vdmUoJG5hbWUpIjsKKworICAgICAg
ICAgICAgaWYgKCRzaG91bGRQYXNzQnlSZWZlcmVuY2UpIHsKKyAgICAgICAgICAgICAgICAkdmFs
dWUgPSAiKiRuYW1lIjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHB1c2goQGFyZ3VtZW50
cywgJHZhbHVlKTsKKyAgICAgICAgfQorICAgICAgICBteSAkZnVuY3Rpb25TdHJpbmcgPSAiJGlt
cGxGdW5jdGlvbk5hbWUoIiAuIGpvaW4oIiwgIiwgQGFyZ3VtZW50cykgLiAiKSI7CisgICAgICAg
ICRmdW5jdGlvblN0cmluZyA9ICJwcm9wYWdhdGVFeGNlcHRpb24oKnN0YXRlLCB0aHJvd1Njb3Bl
LCAkZnVuY3Rpb25TdHJpbmcpIiBpZiBOZWVkc0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9uQ2Fs
bCgkb3BlcmF0aW9uKTsKKyAgICAgICAgcHVzaChAaW1wbENvbnRlbnQsICIgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZSgiIC4gTmF0aXZlVG9KU1ZhbHVlVXNpbmdQb2ludGVycygkb3BlcmF0aW9u
LCAkaW50ZXJmYWNlLCAkZnVuY3Rpb25TdHJpbmcsICIqY2FzdGVkVGhpcy0+Z2xvYmFsT2JqZWN0
KCkiKSAuICIpO1xuIik7CisgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAifVxuXG4iKTsKKyAg
ICB9CisKKyAgICBwdXNoKEBpbXBsQ29udGVudCwgIiNlbmRpZlxuXG4iKSBpZiAkY29uZGl0aW9u
YWw7CisKKyAgICAjIEdlbmVyYXRlIGEgZnVuY3Rpb24gZGlzcGF0Y2hpbmcgY2FsbCB0byB0aGUg
cmVzdCBvZiB0aGUgb3ZlcmxvYWRzLgorICAgIGlmICghJGlzQ3VzdG9tICYmICRpc092ZXJsb2Fk
ZWQgJiYgJG9wZXJhdGlvbi0+e292ZXJsb2FkSW5kZXh9ID09IEB7JG9wZXJhdGlvbi0+e292ZXJs
b2Fkc319KSB7CisgICAgICAgIG15ICRvdmVybG9hZERpc3BhdGNoZXJGdW5jdGlvbk5hbWUgPSBH
ZXRGdW5jdGlvbk5hbWUoJGludGVyZmFjZSwgJGNsYXNzTmFtZSwgJG9wZXJhdGlvbik7CisgICAg
ICAgIG15ICRvdmVybG9hZERpc3BhdGNoZXJGdW5jdGlvblNpZ25hdHVyZSA9ICJFbmNvZGVkSlNW
YWx1ZSBKU0NfSE9TVF9DQUxMICR7b3ZlcmxvYWREaXNwYXRjaGVyRnVuY3Rpb25OYW1lfShFeGVj
U3RhdGUqIHN0YXRlKSI7CisKKyAgICAgICAgR2VuZXJhdGVPdmVybG9hZERpc3BhdGNoZXIoJG9w
ZXJhdGlvbiwgJGludGVyZmFjZSwgJG92ZXJsb2FkRGlzcGF0Y2hlckZ1bmN0aW9uTmFtZSwgJG92
ZXJsb2FkRGlzcGF0Y2hlckZ1bmN0aW9uU2lnbmF0dXJlKTsKKyAgICB9CisKKyAgICBwdXNoKEBp
bXBsQ29udGVudCwgJGVuZEFwcGxlQ29weXJpZ2h0KSBpZiAkaW5BcHBsZUNvcHlyaWdodDsKK30K
Kwogc3ViIEdlbmVyYXRlU2VyaWFsaXplckZ1bmN0aW9uCiB7CiAgICAgbXkgKCRpbnRlcmZhY2Us
ICRjbGFzc05hbWUpID0gQF87CkBAIC00NjAxLDcgKzQ1OTksMTEgQEAgc3ViIEdlbmVyYXRlTGVn
YWN5Q2FsbGVyRGVmaW5pdGlvbnMKICAgICAgICAgZm9yZWFjaCBteSAkbGVnYWN5Q2FsbGVyIChA
bGVnYWN5Q2FsbGVycykgewogICAgICAgICAgICAgR2VuZXJhdGVMZWdhY3lDYWxsZXJEZWZpbml0
aW9uKCRpbnRlcmZhY2UsICRjbGFzc05hbWUsICRsZWdhY3lDYWxsZXIpOwogICAgICAgICB9Ci0g
ICAgICAgIEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0aW9uT3JDb25zdHJ1Y3RvcigkbGVnYWN5Q2Fs
bGVyc1swXSwgJGludGVyZmFjZSwgImxlZ2FjeWNhbGxlciIpOworCisgICAgICAgIG15ICRvdmVy
bG9hZERpc3BhdGNoZXJGdW5jdGlvbk5hbWUgPSAiY2FsbCR7Y2xhc3NOYW1lfSI7CisgICAgICAg
IG15ICRvdmVybG9hZERpc3BhdGNoZXJGdW5jdGlvblNpZ25hdHVyZSA9ICJFbmNvZGVkSlNWYWx1
ZSBKU0NfSE9TVF9DQUxMICR7b3ZlcmxvYWREaXNwYXRjaGVyRnVuY3Rpb25OYW1lfShFeGVjU3Rh
dGUqIHN0YXRlKSI7CisKKyAgICAgICAgR2VuZXJhdGVPdmVybG9hZERpc3BhdGNoZXIoJGxlZ2Fj
eUNhbGxlcnNbMF0sICRpbnRlcmZhY2UsICRvdmVybG9hZERpc3BhdGNoZXJGdW5jdGlvbk5hbWUs
ICRvdmVybG9hZERpc3BhdGNoZXJGdW5jdGlvblNpZ25hdHVyZSk7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgR2VuZXJhdGVMZWdhY3lDYWxsZXJEZWZpbml0aW9uKCRpbnRlcmZhY2UsICRjbGFzc05h
bWUsICRsZWdhY3lDYWxsZXJzWzBdKTsKICAgICB9CkBAIC00NzM5LDkgKzQ3NDEsOSBAQCBzdWIg
R2VuZXJhdGVDYWxsV2l0aAogCiBzdWIgR2VuZXJhdGVBcmd1bWVudHNDb3VudENoZWNrCiB7Ci0g
ICAgbXkgJG91dHB1dEFycmF5ID0gc2hpZnQ7Ci0gICAgbXkgJGZ1bmN0aW9uID0gc2hpZnQ7Ci0g
ICAgbXkgJGludGVyZmFjZSA9IHNoaWZ0OworICAgIG15ICgkb3V0cHV0QXJyYXksICRmdW5jdGlv
biwgJGludGVyZmFjZSkgPSBAXzsKKworICAgIHJldHVybiBpZiAkZnVuY3Rpb24tPntvdmVybG9h
ZHN9ICYmIEB7JGZ1bmN0aW9uLT57b3ZlcmxvYWRzfX0gPiAxOwogCiAgICAgbXkgJG51bU1hbmRh
dG9yeUFyZ3VtZW50cyA9IEB7JGZ1bmN0aW9uLT5hcmd1bWVudHN9OwogICAgIGZvcmVhY2ggbXkg
JGFyZ3VtZW50IChyZXZlcnNlKEB7JGZ1bmN0aW9uLT5hcmd1bWVudHN9KSkgewpAQCAtNDgwNCwx
MCArNDgwNiw3IEBAIHN1YiBOZWVkc0V4cGxpY2l0UHJvcGFnYXRlRXhjZXB0aW9uQ2FsbAogCiAg
ICAgcmV0dXJuIDAgdW5sZXNzICRmdW5jdGlvbi0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57TWF5VGhy
b3dFeGNlcHRpb259OwogCi0gICAgcmV0dXJuIDEgaWYgJGZ1bmN0aW9uLT50eXBlICYmICRmdW5j
dGlvbi0+dHlwZS0+bmFtZSBlcSAidm9pZCI7Ci0gICAgcmV0dXJuIDEgaWYgSXNSZXR1cm5pbmdQ
cm9taXNlKCRmdW5jdGlvbik7Ci0KLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gJGZ1bmN0aW9u
LT50eXBlICYmICgkZnVuY3Rpb24tPnR5cGUtPm5hbWUgZXEgInZvaWQiIHx8ICRmdW5jdGlvbi0+
dHlwZS0+bmFtZSBlcSAiUHJvbWlzZSIpOwogfQogCiBzdWIgR2VuZXJhdGVQYXJhbWV0ZXJzQ2hl
Y2sKQEAgLTQ5MzMsNyArNDkzMiw3IEBAIHN1YiBHZW5lcmF0ZVBhcmFtZXRlcnNDaGVjawogICAg
ICAgICAkYXJndW1lbnRJbmRleCsrOwogICAgIH0KIAotICAgIHB1c2goQGFyZ3VtZW50cywgIldU
Rk1vdmUocHJvbWlzZSkiKSBpZiBJc1JldHVybmluZ1Byb21pc2UoJGZ1bmN0aW9uKTsKKyAgICBw
dXNoKEBhcmd1bWVudHMsICJXVEZNb3ZlKHByb21pc2UpIikgaWYgJGZ1bmN0aW9uLT50eXBlICYm
ICRmdW5jdGlvbi0+dHlwZS0+bmFtZSBlcSAiUHJvbWlzZSI7CiAKICAgICBteSAkZnVuY3Rpb25T
dHJpbmcgPSAiJGZ1bmN0aW9uTmFtZSgiIC4gam9pbigiLCAiLCBAYXJndW1lbnRzKSAuICIpIjsK
ICAgICAkZnVuY3Rpb25TdHJpbmcgPSAicHJvcGFnYXRlRXhjZXB0aW9uKCpzdGF0ZSwgdGhyb3dT
Y29wZSwgJGZ1bmN0aW9uU3RyaW5nKSIgaWYgTmVlZHNFeHBsaWNpdFByb3BhZ2F0ZUV4Y2VwdGlv
bkNhbGwoJGZ1bmN0aW9uKTsKQEAgLTUzMzMsNyArNTMzMiw3IEBAIHN1YiBHZW5lcmF0ZUltcGxl
bWVudGF0aW9uRnVuY3Rpb25DYWxsCiB7CiAgICAgbXkgKCRmdW5jdGlvbiwgJGZ1bmN0aW9uU3Ry
aW5nLCAkaW5kZW50LCAkaW50ZXJmYWNlKSA9IEBfOwogCi0gICAgaWYgKCRmdW5jdGlvbi0+dHlw
ZS0+bmFtZSBlcSAidm9pZCIgfHwgSXNSZXR1cm5pbmdQcm9taXNlKCRmdW5jdGlvbikpIHsKKyAg
ICBpZiAoJGZ1bmN0aW9uLT50eXBlLT5uYW1lIGVxICJ2b2lkIiB8fCAkZnVuY3Rpb24tPnR5cGUt
Pm5hbWUgZXEgIlByb21pc2UiKSB7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50LCAkaW5kZW50
IC4gIiRmdW5jdGlvblN0cmluZztcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgJGlu
ZGVudCAuICJyZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKGpzVW5kZWZpbmVkKCkpO1xuIik7CiAgICAg
fSBlbHNlIHsKQEAgLTYxNzEsNyArNjE3MCwxMSBAQCBzdWIgR2VuZXJhdGVDb25zdHJ1Y3RvckRl
ZmluaXRpb25zCiAgICAgICAgICAgICBmb3JlYWNoIG15ICRjb25zdHJ1Y3RvciAoQGNvbnN0cnVj
dG9ycykgewogICAgICAgICAgICAgICAgIEdlbmVyYXRlQ29uc3RydWN0b3JEZWZpbml0aW9uKCRv
dXRwdXRBcnJheSwgJGNsYXNzTmFtZSwgJHByb3RvQ2xhc3NOYW1lLCAkdmlzaWJsZUludGVyZmFj
ZU5hbWUsICRpbnRlcmZhY2UsICRnZW5lcmF0aW5nTmFtZWRDb25zdHJ1Y3RvciwgJGNvbnN0cnVj
dG9yKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIEdlbmVyYXRlT3ZlcmxvYWRlZEZ1bmN0
aW9uT3JDb25zdHJ1Y3RvcihAeyRpbnRlcmZhY2UtPmNvbnN0cnVjdG9yc31bMF0sICRpbnRlcmZh
Y2UsICJjb25zdHJ1Y3RvciIpOworCisgICAgICAgICAgICBteSAkb3ZlcmxvYWREaXNwYXRjaGVy
RnVuY3Rpb25OYW1lID0gImNvbnN0cnVjdCR7Y2xhc3NOYW1lfSI7CisgICAgICAgICAgICBteSAk
b3ZlcmxvYWREaXNwYXRjaGVyRnVuY3Rpb25TaWduYXR1cmUgPSAidGVtcGxhdGU8PiBFbmNvZGVk
SlNWYWx1ZSBKU0NfSE9TVF9DQUxMICR7Y2xhc3NOYW1lfUNvbnN0cnVjdG9yOjpjb25zdHJ1Y3Qo
RXhlY1N0YXRlKiBzdGF0ZSkiOworCisgICAgICAgICAgICBHZW5lcmF0ZU92ZXJsb2FkRGlzcGF0
Y2hlcihAeyRpbnRlcmZhY2UtPmNvbnN0cnVjdG9yc31bMF0sICRpbnRlcmZhY2UsICRvdmVybG9h
ZERpc3BhdGNoZXJGdW5jdGlvbk5hbWUsICRvdmVybG9hZERpc3BhdGNoZXJGdW5jdGlvblNpZ25h
dHVyZSk7CiAgICAgICAgIH0gZWxzaWYgKEBjb25zdHJ1Y3RvcnMgPT0gMSkgewogICAgICAgICAg
ICAgR2VuZXJhdGVDb25zdHJ1Y3RvckRlZmluaXRpb24oJG91dHB1dEFycmF5LCAkY2xhc3NOYW1l
LCAkcHJvdG9DbGFzc05hbWUsICR2aXNpYmxlSW50ZXJmYWNlTmFtZSwgJGludGVyZmFjZSwgJGdl
bmVyYXRpbmdOYW1lZENvbnN0cnVjdG9yLCAkY29uc3RydWN0b3JzWzBdKTsKICAgICAgICAgfSBl
bHNlIHsKQEAgLTYzNTQsMTIgKzYzNTcsNiBAQCBzdWIgTmVlZHNDb25zdHJ1Y3RvclByb3BlcnR5
CiAgICAgcmV0dXJuICEkaW50ZXJmYWNlLT5leHRlbmRlZEF0dHJpYnV0ZXMtPntOb0ludGVyZmFj
ZU9iamVjdH0gfHwgJGludGVyZmFjZS0+ZXh0ZW5kZWRBdHRyaWJ1dGVzLT57Q3VzdG9tQ29uc3Ry
dWN0b3J9OwogfQogCi1zdWIgSXNSZXR1cm5pbmdQcm9taXNlCi17Ci0gICAgbXkgJGZ1bmN0aW9u
ID0gc2hpZnQ7Ci0gICAgcmV0dXJuICRmdW5jdGlvbi0+dHlwZSAmJiAkZnVuY3Rpb24tPnR5cGUt
Pm5hbWUgZXEgIlByb21pc2UiOwotfQotCiBzdWIgSXNDb25zdHJ1Y3RhYmxlCiB7CiAgICAgbXkg
JGludGVyZmFjZSA9IHNoaWZ0OwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L1Rlc3RJbnRlcmZhY2UuaWRsCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3NjcmlwdHMvdGVzdC9UZXN0SW50ZXJmYWNlLmlkbAkocmV2aXNpb24gMjE3MzA2KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L1Rlc3RJbnRlcmZhY2UuaWRs
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqIENvcHlyaWdodCAoQykgMjAx
MCBHb29nbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXN0ckFyZywgd2l0aCBvciB3aXRob3V0
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwogICogYXJlIG1ldDoKICAqCkBAIC0xNSw3ICsx
NSw3IEBACiAgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLgogICoKICAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFc3RyQXJnLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKICAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKICAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKICAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCkBAIC0yNyw3ICsyNyw3IEBACiAg
Ki8KIAogLy8gVGhpcyBJREwgZmlsZSBpcyBmb3IgdGVzdGluZyB0aGUgYmluZGluZ3MgY29kZSBn
ZW5lcmF0b3IgYW5kIGZvciB0cmFja2luZwotLy8gY2hhbmdlcyBpbiBpdHMgb3VwdXQuCisvLyBj
aGFuZ2VzIGluIGl0cyBvdXRwdXQuCiBbCiAgICAgQWN0aXZlRE9NT2JqZWN0LAogICAgIEN1c3Rv
bU5hbWVkU2V0dGVyLApJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
YmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEdsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9u
IDIxNzMwNikKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDksOCArNDA5LDYgQEAgc3Rh
dGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShz
dGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBj
YXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENv
dW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29w
ZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHRlc3RQ
YXJhbSA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0
UGFyYW0pKTsKQEAgLTQzMiw4ICs0MzAsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1
bnRpbWVPcGVyYXRpb24oV1RGTW92ZSh0ZXN0UGFyYW0pKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZhY2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RJbnRlcmZh
Y2UuY3BwCShyZXZpc2lvbiAyMTczMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3Jp
cHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNyAr
MzAsNiBAQAogI2luY2x1ZGUgIkpTRE9NQ29udmVydC5oIgogI2luY2x1ZGUgIkpTRE9NRXhjZXB0
aW9uSGFuZGxpbmcuaCIKICNpbmNsdWRlICJKU0RPTVdyYXBwZXJDYWNoZS5oIgotI2luY2x1ZGUg
IkpTVGVzdE9iai5oIgogI2luY2x1ZGUgIlRlc3RTdXBwbGVtZW50YWwuaCIKICNpbmNsdWRlIDxy
dW50aW1lL0Vycm9yLmg+CiAjaW5jbHVkZSA8cnVudGltZS9GdW5jdGlvblByb3RvdHlwZS5oPgpA
QCAtNDIsNiArNDEsNyBAQAogCiAjaWYgRU5BQkxFKENvbmRpdGlvbjExKSB8fCBFTkFCTEUoQ29u
ZGl0aW9uMTIpIHx8IEVOQUJMRShDb25kaXRpb24yMikgfHwgRU5BQkxFKENvbmRpdGlvbjIzKQog
I2luY2x1ZGUgIkpTTm9kZS5oIgorI2luY2x1ZGUgIkpTVGVzdE9iai5oIgogI2VuZGlmCiAKIHVz
aW5nIG5hbWVzcGFjZSBKU0M7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T2JqLmNwcAkocmV2aXNpb24gMjE3MzA2KQorKysg
U291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUyMjEsOCArNTIyMSw2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNv
ZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9Q
QVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgp
OwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAg
IHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFy
Z3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB0ZXN0UGFyYW0gPSBjb252ZXJ0PElETERP
TVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5l
bmFibGVkQXRSdW50aW1lT3BlcmF0aW9uKFdURk1vdmUodGVzdFBhcmFtKSk7CkBAIC01MjQ0LDgg
KzUyNDIsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gdGVzdFBhcmFtID0gY29udmVydDxJRExMb25nPigqc3RhdGUsIHN0YXRlLT51bmNo
ZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLmVuYWJsZWRBdFJ1bnRpbWVPcGVyYXRpb24oV1RG
TW92ZSh0ZXN0UGFyYW0pKTsKQEAgLTcwMzMsOCArNzAyOSw2IEBAIHN0YXRpYyBpbmxpbmUgSlND
OjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVO
VVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3Jh
cHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0g
ICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVu
b3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElE
TE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2JqPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYg
c2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmci
LCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0aG9kIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBh
dXRvIHN0ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgxKSk7CkBAIC03MDU1LDggKzcwNDksNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqQXJnID0gY29udmVydDxJRExO
dWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRB
cmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNj
b3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAib2JqQXJnIiwg
IlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJUZXN0T2JqIik7IH0pOwogICAgIFJF
VFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0
byBsb25nQXJnID0gc3RhdGUtPmFyZ3VtZW50KDEpLmlzVW5kZWZpbmVkKCkgPyBzdGQ6Om9wdGlv
bmFsPENvbnZlcnRlcjxJRExMb25nPjo6UmV0dXJuVHlwZT4oKSA6IHN0ZDo6b3B0aW9uYWw8Q29u
dmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPihjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKSk7CkBAIC03MDc3LDggKzcwNjksNiBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyQXJnID0g
Y29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDAp
KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkp
OwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwpAQCAtNzA5Nyw4
ICs3MDg3LDYgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAg
IFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAg
IGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0
YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihz
dGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsK
ICAgICBhdXRvIGxvbmdBcmcgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hl
Y2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVu
Y29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKGxvbmdB
cmcpKTsKQEAgLTcxMTcsOCArNzEwNSw2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNW
YWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0
aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAg
IGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVy
biB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50
c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBjYWxsYmFjayA9IGNvbnZlcnQ8SURMQ2FsbGJhY2tJ
bnRlcmZhY2U8SlNUZXN0Q2FsbGJhY2tJbnRlcmZhY2U+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNr
ZWRBcmd1bWVudCgwKSwgKmNhc3RlZFRoaXMtPmdsb2JhbE9iamVjdCgpLCBbXShKU0M6OkV4ZWNT
dGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudE11c3RC
ZUZ1bmN0aW9uRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAiY2FsbGJhY2siLCAiVGVzdE9iamVjdCIs
ICJvdmVybG9hZGVkTWV0aG9kIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dT
Y29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKGNhbGxi
YWNrLnJlbGVhc2VOb25OdWxsKCkpOwpAQCAtNzEzNyw4ICs3MTIzLDYgQEAgc3RhdGljIGlubGlu
ZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAg
ICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlz
LT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAx
KSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRl
Tm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGxpc3RBcmcgPSBjb252
ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxET01TdHJpbmdMaXN0Pj4+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6
VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUs
IDAsICJsaXN0QXJnIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIsICJET01TdHJp
bmdMaXN0Iik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2Rl
ZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUobGlzdEFyZykp
OwpAQCAtNzE1Nyw4ICs3MTQxLDYgQEAgc3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVl
IGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93
U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIGFycmF5QXJnID0gY29udmVydDxJRExOdWxsYWJsZTxJRExT
ZXF1ZW5jZTxJRExET01TdHJpbmc+Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgaW1wbC5vdmVybG9hZGVkTWV0aG9kKFdURk1vdmUoYXJyYXlBcmcpKTsKQEAgLTcx
NzcsOCArNzE1OSw2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETEludGVyZmFjZTxUZXN0T2JqPj4oKnN0
YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0YXRlJiBzdGF0
ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVycm9yKHN0YXRl
LCBzY29wZSwgMCwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRNZXRob2QiLCAi
VGVzdE9iaiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZCgqb2JqQXJnKTsKQEAgLTcx
OTcsOCArNzE3Nyw2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QK
ICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
ICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byB3aW5kb3cgPSBjb252ZXJ0PElETEludGVyZmFjZTxET01XaW5kb3c+Pigq
c3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0
YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3Rh
dGUsIHNjb3BlLCAwLCAid2luZG93IiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRlZE1ldGhvZCIs
ICJET01XaW5kb3ciKTsgfSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBl
bmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92ZXJsb2FkZWRNZXRob2QoKndpbmRvdyk7CkBA
IC03MjE3LDggKzcxOTUsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNU
ZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29w
ZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5M
SUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dW
TUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihz
dGF0ZSkpOwogICAgIGF1dG8gYXJyYXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETERPTVN0
cmluZz4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3Zl
cmxvYWRlZE1ldGhvZChXVEZNb3ZlKGFycmF5QXJnKSk7CkBAIC03MjM3LDggKzcyMTMsNiBAQCBz
dGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFN
KHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9
IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50
Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Nj
b3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYXJy
YXlBcmcgPSBjb252ZXJ0PElETFNlcXVlbmNlPElETFVuc2lnbmVkTG9uZz4+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZChXVEZN
b3ZlKGFycmF5QXJnKSk7CkBAIC03MjU3LDggKzcyMzEsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6
RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVT
RURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBw
ZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAg
ICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91
Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gc3RyQXJnID0gY29udmVydDxJRExE
T01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRV
Uk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwu
b3ZlcmxvYWRlZE1ldGhvZChXVEZNb3ZlKHN0ckFyZykpOwpAQCAtNzM0MSw4ICs3MzEzLDYgQEAg
c3RhdGljIGlubGluZSBKU0M6OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJB
TShzdGF0ZSk7CiAgICAgVU5VU0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwg
PSBjYXN0ZWRUaGlzLT53cmFwcGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVu
dENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dT
Y29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0
ckFyZyA9IGNvbnZlcnQ8SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1
bWVudCgwKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNW
YWx1ZSgpKTsKICAgICBhdXRvIG9iakFyZyA9IGNvbnZlcnQ8SURMTnVsbGFibGU8SURMSW50ZXJm
YWNlPFRlc3RPYmo+Pj4oKnN0YXRlLCBzdGF0ZS0+YXJndW1lbnQoMSksIFtdKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgMSwgIm9iakFyZyIsICJUZXN0T2JqZWN0IiwgIm92ZXJsb2FkZWRN
ZXRob2RXaXRoT3B0aW9uYWxQYXJhbWV0ZXIiLCAiVGVzdE9iaiIpOyB9KTsKQEAgLTczNjMsOCAr
NzMzMyw2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBV
TlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0
ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3Rh
dGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAg
ICAgYXV0byBvYmpBcmcgPSBjb252ZXJ0PElETE51bGxhYmxlPElETEludGVyZmFjZTxUZXN0T2Jq
Pj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4ZWNTdGF0
ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5cGVFcnJv
cihzdGF0ZSwgc2NvcGUsIDAsICJvYmpBcmciLCAiVGVzdE9iamVjdCIsICJvdmVybG9hZGVkTWV0
aG9kV2l0aE9wdGlvbmFsUGFyYW1ldGVyIiwgIlRlc3RPYmoiKTsgfSk7CiAgICAgUkVUVVJOX0lG
X0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBhdXRvIGxvbmdB
cmcgPSBzdGF0ZS0+YXJndW1lbnQoMSkuaXNVbmRlZmluZWQoKSA/IHN0ZDo6b3B0aW9uYWw8Q29u
dmVydGVyPElETExvbmc+OjpSZXR1cm5UeXBlPigpIDogc3RkOjpvcHRpb25hbDxDb252ZXJ0ZXI8
SURMTG9uZz46OlJldHVyblR5cGU+KGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5j
aGVja2VkQXJndW1lbnQoMSkpKTsKQEAgLTc0MTAsOCArNzM3OCw2IEBAIHN0YXRpYyBpbmxpbmUg
SlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAg
IFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkp
Ci0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5v
dEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmplY3RPck5vZGUgPSBj
b252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3RO
b2RlPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3Zl
cmxvYWRlZE1ldGhvZFdpdGhEaXN0aW5ndWlzaGluZ1VuaW9uKFdURk1vdmUob2JqZWN0T3JOb2Rl
KSk7CkBAIC03NDMwLDggKzczOTYsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gdmFsdWUgPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdp
dGhEaXN0aW5ndWlzaGluZ1VuaW9uKFdURk1vdmUodmFsdWUpKTsKQEAgLTc0NjksOCArNzQzMyw2
IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURf
UEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBp
bXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETEludGVyZmFjZTxUZXN0T2JqPiwg
SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVl
KCkpOwogICAgIGltcGwub3ZlcmxvYWRlZE1ldGhvZFdpdGgyRGlzdGluZ3Vpc2hpbmdVbmlvbnMo
V1RGTW92ZShvYmplY3RPck5vZGUpKTsKQEAgLTc0ODksOCArNzQ1MSw2IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byB2YWx1ZSA9IGNvbnZl
cnQ8SURMVW5pb248SURMSW50ZXJmYWNlPFRlc3RJbnRlcmZhY2U+LCBJRExET01TdHJpbmcsIElE
TExvbmc+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAgUkVUVVJO
X0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBpbXBsLm92
ZXJsb2FkZWRNZXRob2RXaXRoMkRpc3Rpbmd1aXNoaW5nVW5pb25zKFdURk1vdmUodmFsdWUpKTsK
QEAgLTc1MzAsOCArNzQ5MCw2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBq
c1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlmIChV
TkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0aHJv
d1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9y
KHN0YXRlKSk7CiAgICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElETElu
dGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpzdGF0ZSwgc3RhdGUt
PnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gY29udmVydDxJRExJbnRl
cmZhY2U8VGVzdE9iaj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpLCBbXShK
U0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1
bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDEsICJvYmplY3QiLCAiVGVzdE9iamVjdCIsICJv
dmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24iLCAiVGVzdE9iaiIpOyB9
KTsKQEAgLTc1NTIsOCArNzUxMCw2IEBAIHN0YXRpYyBpbmxpbmUgSlNDOjpFbmNvZGVkSlNWYWx1
ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwogICAgIFVOVVNFRF9QQVJBTSh0aHJv
d1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwotICAgIGlm
IChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMikpCi0gICAgICAgIHJldHVybiB0
aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vy
cm9yKHN0YXRlKSk7CiAgICAgYXV0byBvYmplY3RPck5vZGUgPSBjb252ZXJ0PElETFVuaW9uPElE
TEludGVyZmFjZTxUZXN0T2JqPiwgSURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpzdGF0ZSwgc3Rh
dGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93
U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMSW50
ZXJmYWNlPFRlc3ROb2RlPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMSksIFtd
KEpTQzo6RXhlY1N0YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0Fy
Z3VtZW50VHlwZUVycm9yKHN0YXRlLCBzY29wZSwgMSwgIm5vZGUiLCAiVGVzdE9iamVjdCIsICJv
dmVybG9hZGVkTWV0aG9kV2l0aE5vbkRpc3Rpbmd1aXNoaW5nVW5pb24iLCAiVGVzdE5vZGUiKTsg
fSk7CkBAIC03NTkwLDggKzc1NDYsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFs
dWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhy
b3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBp
ZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4g
dGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNF
cnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqZWN0T3JOb2RlID0gY29udmVydDxJRExOdWxsYWJs
ZTxJRExVbmlvbjxJRExJbnRlcmZhY2U8VGVzdE9iaj4sIElETEludGVyZmFjZTxUZXN0Tm9kZT4+
Pj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9F
WENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC5vdmVybG9h
ZFdpdGhOdWxsYWJsZVVuaW9uKFdURk1vdmUob2JqZWN0T3JOb2RlKSk7CkBAIC03NjEwLDggKzc1
NjQsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5V
U0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0
byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8gaW5kZXggPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFy
Z3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRK
U1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRXaXRoTnVsbGFibGVVbmlvbihXVEZNb3ZlKGlu
ZGV4KSk7CkBAIC03NjY5LDggKzc2MjEsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpT
VmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0o
dGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAg
ICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1
cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVu
dHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETExvbmc+KCpzdGF0
ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9O
KHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwub3ZlcmxvYWRXaXRoT3B0
aW9uYWxVbmlvbihXVEZNb3ZlKGluZGV4KSk7CkBAIC03NzExLDggKzc2NjEsNiBAQCBzdGF0aWMg
aW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRl
KTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3Rl
ZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQo
KSA8IDIpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBj
cmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gb2JqID0gY29u
dmVydDxJRExOdWxsYWJsZTxJRExJbnRlcmZhY2U8VGVzdE9iaj4+Pigqc3RhdGUsIHN0YXRlLT51
bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93
U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAwLCAi
b2JqIiwgIlRlc3RPYmplY3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGlu
Z1BhcmFtZXRlciIsICJUZXN0T2JqIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhy
b3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBub2RlID0gY29udmVydDxJRExJ
bnRlcmZhY2U8VGVzdE5vZGU+Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgxKSwg
W10oSlNDOjpFeGVjU3RhdGUmIHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93
QXJndW1lbnRUeXBlRXJyb3Ioc3RhdGUsIHNjb3BlLCAxLCAibm9kZSIsICJUZXN0T2JqZWN0Iiwg
Im92ZXJsb2FkV2l0aE51bGxhYmxlTm9uRGlzdGluZ3Vpc2hpbmdQYXJhbWV0ZXIiLCAiVGVzdE5v
ZGUiKTsgfSk7CkBAIC03NzMzLDggKzc2ODEsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2Rl
ZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFS
QU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDIpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gbm9kZSA9IGNvbnZlcnQ8SURMTnVsbGFibGU8
SURMSW50ZXJmYWNlPFRlc3ROb2RlPj4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50
KDApLCBbXShKU0M6OkV4ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsg
dGhyb3dBcmd1bWVudFR5cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJub2RlIiwgIlRlc3RPYmpl
Y3QiLCAib3ZlcmxvYWRXaXRoTnVsbGFibGVOb25EaXN0aW5ndWlzaGluZ1BhcmFtZXRlciIsICJU
ZXN0Tm9kZSIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gaW5kZXggPSBjb252ZXJ0PElETExvbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDEpKTsKQEAgLTc3OTIsOCArNzczOCw2IEBAIHN0YXRp
YyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28KICAgICBWTSYgdm0gPSBzdGF0ZS0+
dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJFX1RIUk9XX1NDT1BFKHZtKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1
bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhy
b3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRv
IGFyZyA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQo
MCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUo
KSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1ldGhvZDEoV1RGTW92ZShhcmcpKTsKQEAgLTc4
MDgsOCArNzc1Miw2IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUganNUZXN0T2JqQ28K
ICAgICBWTSYgdm0gPSBzdGF0ZS0+dm0oKTsKICAgICBhdXRvIHRocm93U2NvcGUgPSBERUNMQVJF
X1RIUk9XX1NDT1BFKHZtKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7Ci0gICAgaWYg
KFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0dXJuIHRo
cm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1lbnRzRXJy
b3Ioc3RhdGUpKTsKICAgICBhdXRvIHR5cGUgPSBjb252ZXJ0PElETERPTVN0cmluZz4oKnN0YXRl
LCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04o
dGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgVGVzdE9iajo6b3ZlcmxvYWRlZE1l
dGhvZDEoV1RGTW92ZSh0eXBlKSk7CkBAIC04Mzk0LDggKzgzMzYsNiBAQCBzdGF0aWMgaW5saW5l
IEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAg
ICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMt
PndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEp
KQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVO
b3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURM
RmxvYXQ+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5f
SUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwudGVz
dFByb21pc2VPdmVybG9hZGVkRnVuY3Rpb24oV1RGTW92ZShhKSwgV1RGTW92ZShwcm9taXNlKSk7
CkBAIC04NDIyLDggKzgzNjIsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gcmVxdWVzdCA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPEZldGNo
UmVxdWVzdD4+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApLCBbXShKU0M6OkV4
ZWNTdGF0ZSYgc3RhdGUsIEpTQzo6VGhyb3dTY29wZSYgc2NvcGUpIHsgdGhyb3dBcmd1bWVudFR5
cGVFcnJvcihzdGF0ZSwgc2NvcGUsIDAsICJyZXF1ZXN0IiwgIlRlc3RPYmplY3QiLCAidGVzdFBy
b21pc2VPdmVybG9hZGVkRnVuY3Rpb24iLCAiRmV0Y2hSZXF1ZXN0Iik7IH0pOwogICAgIFJFVFVS
Tl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgaW1wbC50
ZXN0UHJvbWlzZU92ZXJsb2FkZWRGdW5jdGlvbigqcmVxdWVzdCwgV1RGTW92ZShwcm9taXNlKSk7
CkBAIC04NTA4LDggKzg0NDYsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUg
anNUZXN0CiAgICAgVU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dT
Y29wZSk7CiAgICAgYXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAo
VU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhy
b3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJv
cihzdGF0ZSkpOwogICAgIGF1dG8gc3RyID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwg
c3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRo
cm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuY29uZGl0aW9uYWxPdmVybG9h
ZChXVEZNb3ZlKHN0cikpOwpAQCAtODUzMSw4ICs4NDY3LDYgQEAgc3RhdGljIGlubGluZSBKU0M6
OkVuY29kZWRKU1ZhbHVlIGpzVGVzdAogICAgIFVOVVNFRF9QQVJBTShzdGF0ZSk7CiAgICAgVU5V
U0VEX1BBUkFNKHRocm93U2NvcGUpOwogICAgIGF1dG8mIGltcGwgPSBjYXN0ZWRUaGlzLT53cmFw
cGVkKCk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAg
ICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5v
dWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGEgPSBjb252ZXJ0PElETExvbmc+
KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tlZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhD
RVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGltcGwuY29uZGl0aW9u
YWxPdmVybG9hZChXVEZNb3ZlKGEpKTsKQEAgLTg1NzQsOCArODUwOCw2IEBAIHN0YXRpYyBpbmxp
bmUgSlNDOjpFbmNvZGVkSlNWYWx1ZSBqc1Rlc3QKICAgICBVTlVTRURfUEFSQU0oc3RhdGUpOwog
ICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhp
cy0+d3JhcHBlZCgpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwg
MSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0
ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0byBzdHIgPSBjb252ZXJ0
PElETERPTVN0cmluZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCkpOwogICAg
IFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAg
aW1wbC5zaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoc3RyKSk7CkBAIC04NTk1LDgg
Kzg1MjcsNiBAQCBzdGF0aWMgaW5saW5lIEpTQzo6RW5jb2RlZEpTVmFsdWUganNUZXN0CiAgICAg
VU5VU0VEX1BBUkFNKHN0YXRlKTsKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAg
YXV0byYgaW1wbCA9IGNhc3RlZFRoaXMtPndyYXBwZWQoKTsKLSAgICBpZiAoVU5MSUtFTFkoc3Rh
dGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0
YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwog
ICAgIGF1dG8gYSA9IGNvbnZlcnQ8SURMTG9uZz4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJn
dW1lbnQoMCkpOwogICAgIFJFVFVSTl9JRl9FWENFUFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpT
VmFsdWUoKSk7CiAgICAgaW1wbC5zaW5nbGVDb25kaXRpb25hbE92ZXJsb2FkKFdURk1vdmUoYSkp
OwpAQCAtODcyMiw4ICs4NjUyLDYgQEAgc3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjYWxs
SlNUZXN0TwogICAgIFZNJiB2bSA9IHN0YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9
IERFQ0xBUkVfVEhST1dfU0NPUEUodm0pOwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsK
LSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICBy
ZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1
bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0
T2JqKj4oc3RhdGUtPmpzQ2FsbGVlKCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBh
dXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+d3JhcHBlZCgpOwpAQCAtODczOCw4ICs4NjY2LDYgQEAg
c3RhdGljIGlubGluZSBFbmNvZGVkSlNWYWx1ZSBjYWxsSlNUZXN0TwogICAgIFZNJiB2bSA9IHN0
YXRlLT52bSgpOwogICAgIGF1dG8gdGhyb3dTY29wZSA9IERFQ0xBUkVfVEhST1dfU0NPUEUodm0p
OwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUt
PmFyZ3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRl
LCB0aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAg
IGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oc3RhdGUtPmpzQ2FsbGVlKCkp
OwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKICAgICBhdXRvJiBpbXBsID0gY2FzdGVkVGhpcy0+
d3JhcHBlZCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pT
L0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0
b3JzLmNwcAkocmV2aXNpb24gMjE3MzA2KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03Niw4ICs3Niw2IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3Ry
dWN0SlMKICAgICBVTlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byogY2FzdGVkVGhp
cyA9IGpzQ2FzdDxKU1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0
ZS0+anNDYWxsZWUoKSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGlmIChVTkxJS0VM
WShzdGF0ZS0+YXJndW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJy
b3Ioc3RhdGUsIHRocm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRl
KSk7CiAgICAgYXV0byBhcnJheUJ1ZmZlciA9IGNvbnZlcnQ8SURMSW50ZXJmYWNlPEFycmF5QnVm
ZmVyPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgMCwgImFycmF5QnVmZmVyIiwgIlRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyIik7IH0pOwogICAgIFJFVFVSTl9JRl9FWENF
UFRJT04odGhyb3dTY29wZSwgZW5jb2RlZEpTVmFsdWUoKSk7CiAgICAgYXV0byBvYmplY3QgPSBU
ZXN0T3ZlcmxvYWRlZENvbnN0cnVjdG9yczo6Y3JlYXRlKCphcnJheUJ1ZmZlcik7CkBAIC05MSw4
ICs4OSw2IEBAIHN0YXRpYyBpbmxpbmUgRW5jb2RlZEpTVmFsdWUgY29uc3RydWN0SlMKICAgICBV
TlVTRURfUEFSQU0odGhyb3dTY29wZSk7CiAgICAgYXV0byogY2FzdGVkVGhpcyA9IGpzQ2FzdDxK
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzQ29uc3RydWN0b3IqPihzdGF0ZS0+anNDYWxsZWUo
KSk7CiAgICAgQVNTRVJUKGNhc3RlZFRoaXMpOwotICAgIGlmIChVTkxJS0VMWShzdGF0ZS0+YXJn
dW1lbnRDb3VudCgpIDwgMSkpCi0gICAgICAgIHJldHVybiB0aHJvd1ZNRXJyb3Ioc3RhdGUsIHRo
cm93U2NvcGUsIGNyZWF0ZU5vdEVub3VnaEFyZ3VtZW50c0Vycm9yKHN0YXRlKSk7CiAgICAgYXV0
byBhcnJheUJ1ZmZlclZpZXcgPSBjb252ZXJ0PElETEludGVyZmFjZTxBcnJheUJ1ZmZlclZpZXc+
Pigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSwgW10oSlNDOjpFeGVjU3RhdGUm
IHN0YXRlLCBKU0M6OlRocm93U2NvcGUmIHNjb3BlKSB7IHRocm93QXJndW1lbnRUeXBlRXJyb3Io
c3RhdGUsIHNjb3BlLCAwLCAiYXJyYXlCdWZmZXJWaWV3IiwgIlRlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzIiwgbnVsbHB0ciwgIkFycmF5QnVmZmVyVmlldyIpOyB9KTsKICAgICBSRVRVUk5fSUZf
RVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0
ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnM6OmNyZWF0ZShhcnJheUJ1ZmZlclZpZXcucmVs
ZWFzZU5vbk51bGwoKSk7CkBAIC0xMDYsOCArMTAyLDYgQEAgc3RhdGljIGlubGluZSBFbmNvZGVk
SlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Njb3BlKTsKICAgICBh
dXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnNDb25z
dHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2FzdGVkVGhpcyk7Ci0g
ICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkKLSAgICAgICAgcmV0
dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90RW5vdWdoQXJndW1l
bnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIGJsb2IgPSBjb252ZXJ0PElETEludGVyZmFjZTxC
bG9iPj4oKnN0YXRlLCBzdGF0ZS0+dW5jaGVja2VkQXJndW1lbnQoMCksIFtdKEpTQzo6RXhlY1N0
YXRlJiBzdGF0ZSwgSlNDOjpUaHJvd1Njb3BlJiBzY29wZSkgeyB0aHJvd0FyZ3VtZW50VHlwZUVy
cm9yKHN0YXRlLCBzY29wZSwgMCwgImJsb2IiLCAiVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3RvcnMi
LCBudWxscHRyLCAiQmxvYiIpOyB9KTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2Nv
cGUsIGVuY29kZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRD
b25zdHJ1Y3RvcnM6OmNyZWF0ZSgqYmxvYik7CkBAIC0xMjEsOCArMTE1LDYgQEAgc3RhdGljIGlu
bGluZSBFbmNvZGVkSlNWYWx1ZSBjb25zdHJ1Y3RKUwogICAgIFVOVVNFRF9QQVJBTSh0aHJvd1Nj
b3BlKTsKICAgICBhdXRvKiBjYXN0ZWRUaGlzID0ganNDYXN0PEpTVGVzdE92ZXJsb2FkZWRDb25z
dHJ1Y3RvcnNDb25zdHJ1Y3Rvcio+KHN0YXRlLT5qc0NhbGxlZSgpKTsKICAgICBBU1NFUlQoY2Fz
dGVkVGhpcyk7Ci0gICAgaWYgKFVOTElLRUxZKHN0YXRlLT5hcmd1bWVudENvdW50KCkgPCAxKSkK
LSAgICAgICAgcmV0dXJuIHRocm93Vk1FcnJvcihzdGF0ZSwgdGhyb3dTY29wZSwgY3JlYXRlTm90
RW5vdWdoQXJndW1lbnRzRXJyb3Ioc3RhdGUpKTsKICAgICBhdXRvIHN0cmluZyA9IGNvbnZlcnQ8
SURMRE9NU3RyaW5nPigqc3RhdGUsIHN0YXRlLT51bmNoZWNrZWRBcmd1bWVudCgwKSk7CiAgICAg
UkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3BlLCBlbmNvZGVkSlNWYWx1ZSgpKTsKICAgICBh
dXRvIG9iamVjdCA9IFRlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzOjpjcmVhdGUoV1RGTW92ZShz
dHJpbmcpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9K
U1Rlc3RPdmVybG9hZGVkQ29uc3RydWN0b3JzV2l0aFNlcXVlbmNlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0T3ZlcmxvYWRl
ZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZS5jcHAJKHJldmlzaW9uIDIxNzMwNikKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPdmVybG9hZGVkQ29uc3Ry
dWN0b3JzV2l0aFNlcXVlbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksOCArODksNiBAQCBz
dGF0aWMgaW5saW5lIEVuY29kZWRKU1ZhbHVlIGNvbnN0cnVjdEpTCiAgICAgVU5VU0VEX1BBUkFN
KHRocm93U2NvcGUpOwogICAgIGF1dG8qIGNhc3RlZFRoaXMgPSBqc0Nhc3Q8SlNUZXN0T3Zlcmxv
YWRlZENvbnN0cnVjdG9yc1dpdGhTZXF1ZW5jZUNvbnN0cnVjdG9yKj4oc3RhdGUtPmpzQ2FsbGVl
KCkpOwogICAgIEFTU0VSVChjYXN0ZWRUaGlzKTsKLSAgICBpZiAoVU5MSUtFTFkoc3RhdGUtPmFy
Z3VtZW50Q291bnQoKSA8IDEpKQotICAgICAgICByZXR1cm4gdGhyb3dWTUVycm9yKHN0YXRlLCB0
aHJvd1Njb3BlLCBjcmVhdGVOb3RFbm91Z2hBcmd1bWVudHNFcnJvcihzdGF0ZSkpOwogICAgIGF1
dG8gc3RyaW5nID0gY29udmVydDxJRExET01TdHJpbmc+KCpzdGF0ZSwgc3RhdGUtPnVuY2hlY2tl
ZEFyZ3VtZW50KDApKTsKICAgICBSRVRVUk5fSUZfRVhDRVBUSU9OKHRocm93U2NvcGUsIGVuY29k
ZWRKU1ZhbHVlKCkpOwogICAgIGF1dG8gb2JqZWN0ID0gVGVzdE92ZXJsb2FkZWRDb25zdHJ1Y3Rv
cnNXaXRoU2VxdWVuY2U6OmNyZWF0ZShXVEZNb3ZlKHN0cmluZykpOwo=
</data>
<flag name="review"
          id="332107"
          type_id="1"
          status="+"
          setter="cdumez"
    />
          </attachment>
      

    </bug>

</bugzilla>