<?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>164133</bug_id>
          
          <creation_ts>2016-10-28 10:12:43 -0700</creation_ts>
          <short_desc>WebAssembly JS API: implement Global</short_desc>
          <delta_ts>2016-12-14 19:37:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</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>
          
          <blocked>161709</blocked>
    
    <blocked>165700</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="JF Bastien">jfbastien</reporter>
          <assigned_to name="Keith Miller">keith_miller</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1245640</commentid>
    <comment_count>0</comment_count>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-10-28 10:12:43 -0700</bug_when>
    <thetext>https://github.com/WebAssembly/design/blob/master/BinaryEncoding.md#global-section

Also allow importing / exporting them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1258166</commentid>
    <comment_count>1</comment_count>
      <attachid>296655</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-09 10:04:25 -0800</bug_when>
    <thetext>Created attachment 296655
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259580</commentid>
    <comment_count>2</comment_count>
      <attachid>297048</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-13 16:29:08 -0800</bug_when>
    <thetext>Created attachment 297048
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259581</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 16:30:21 -0800</bug_when>
    <thetext>This patch modifies one of the wasm.json files. Please ensure that any changes in one have been mirrored to the other. You can find the wasm.json files at &quot;Source/JavaScriptCore/wasm/wasm.json&quot; and &quot;JSTests/wasm/wasm.json&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259591</commentid>
    <comment_count>4</comment_count>
      <attachid>297048</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 17:17:41 -0800</bug_when>
    <thetext>Comment on attachment 297048
Patch

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

r=me with comments.

&gt; Source/JavaScriptCore/wasm/WasmFormat.h:113
&gt; +        Mutable = 1,
&gt; +        Immutable = 0

Probably worth a comment saying this is to match the binary format.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:269
&gt; +            if (!parseGlobalType(global))
&gt; +                return false;

Shouldn&apos;t this return false if the global is Mutable? I think you also need a test for this.

&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:448
&gt; +        switch (initializerOpcode) {

Should this be a helper since its parsing init_expr (or whatever it&apos;s called) and it&apos;ll be used from elsewhere?

&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:197
&gt; +    m_errorMessage = ASCIILiteral(&quot;Attempt to use unknown global.&quot;);

nit: I think this should be &quot;Attempted&quot;
Also, this needs a test.

&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:204
&gt; +        m_errorMessage = ASCIILiteral(&quot;Attempt to use unknown global.&quot;);

Ditto style and also needs a test.

&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:209
&gt; +        m_errorMessage = ASCIILiteral(&quot;Attempt to store to immutable global.&quot;);

Ditto style and also needs a test.

&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:218
&gt; +    m_errorMessage = makeString(&quot;Attempt to set global with type: &quot;, toString(globalType), &quot; with a variable of type: &quot;, toString(value));

You should add a test for this.

&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:445
&gt; +    Validate context(signature-&gt;returnType, info.globals, info.memory);

Style: Maybe just pass in &quot;info&quot; instead since we&apos;re now using two fields on it?

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:43
&gt; +    // FIXME: These objects Ã§ould be pretty big we should try to throw OOM here.

Weird unicode here?

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:45
&gt; +    instance-&gt;m_globals = reinterpret_cast&lt;GlobalDataDescriptor*&gt;(fastMalloc(info.globals.size() * sizeof(Register)));

Style: I&apos;d make this a MallocPtr.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:73
&gt; +    fastFree(m_globals);

And then you can get rid of implementing the destructor.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:91
&gt; +    visitor.addOpaqueRoot(thisObject-&gt;m_globals);

Why? This looks wrong.

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h:145
&gt; +

Please remove this newline.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:200
&gt; +            if (!value.isNumber())

You should add a test for this.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:215
&gt; +            switch (moduleInformation.globals[import.kindIndex].type) {
&gt; +            case Wasm::I32:
&gt; +                instance-&gt;setGlobal(numImportGlobals++, value.toInt32(exec));
&gt; +                break;
&gt; +            case Wasm::F32:
&gt; +                instance-&gt;setGlobal(numImportGlobals++, bitwise_cast&lt;uint32_t&gt;(value.toFloat(exec)));
&gt; +                break;
&gt; +            case Wasm::F64:
&gt; +                instance-&gt;setGlobal(numImportGlobals++, bitwise_cast&lt;uint64_t&gt;(value.asNumber()));
&gt; +                break;
&gt; +            default:
&gt; +                RELEASE_ASSERT_NOT_REACHED();
&gt; +            }

You need to add an ASSERT(!throwScope.exception()) after this switch

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:265
&gt; +                instance-&gt;setGlobal(globalIndex, instance-&gt;loadI64Global(global.initialBitsOrImportNumber));

Why i64? Just to get the bits?

&gt; JSTests/wasm/Builder.js:526
&gt; +                        throw new Error(`Start sections function index  must either be a number or a string`);

Why?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259602</commentid>
    <comment_count>5</comment_count>
      <attachid>297048</attachid>
    <who name="JF Bastien">jfbastien</who>
    <bug_when>2016-12-13 17:49:40 -0800</bug_when>
    <thetext>Comment on attachment 297048
Patch

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

You&apos;re missing one of the json files.

&gt;&gt; Source/JavaScriptCore/wasm/WasmFormat.h:113
&gt;&gt; +        Immutable = 0
&gt; 
&gt; Probably worth a comment saying this is to match the binary format.

Or... wait for it... AUTOGEN!!! 🎉

&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.h:102
&gt; +        m_globals[i].i64 = bits;

You should use memcpy to avoid aliasing problems (memcpy makes all union members active).

&gt; JSTests/wasm/Builder_WebAssemblyBinary.js:63
&gt; +        throw new Error(`mutability should be either &quot;mutable&quot; or &quot;immutable&quot;, but got ${global.mutablity}`);

This should be done in the Builder, and an invalid integer should be allowed in unchecked mode. At this point you should only have an integer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259846</commentid>
    <comment_count>6</comment_count>
      <attachid>297048</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-14 12:46:25 -0800</bug_when>
    <thetext>Comment on attachment 297048
Patch

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

&gt;&gt;&gt; Source/JavaScriptCore/wasm/WasmFormat.h:113
&gt;&gt;&gt; +        Immutable = 0
&gt;&gt; 
&gt;&gt; Probably worth a comment saying this is to match the binary format.
&gt; 
&gt; Or... wait for it... AUTOGEN!!! 🎉

Added a FIXME pointing to a bug.

&gt;&gt; Source/JavaScriptCore/wasm/WasmModuleParser.cpp:269
&gt;&gt; +                return false;
&gt; 
&gt; Shouldn&apos;t this return false if the global is Mutable? I think you also need a test for this.

Yes. Test added.

&gt;&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:197
&gt;&gt; +    m_errorMessage = ASCIILiteral(&quot;Attempt to use unknown global.&quot;);
&gt; 
&gt; nit: I think this should be &quot;Attempted&quot;
&gt; Also, this needs a test.

We use some combination of &quot;Attempting&quot; and &quot;Attempt&quot; everywhere else. If we want to make the wording more consistent we should do so in a follow up patch.
Added test.

&gt;&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:204
&gt;&gt; +        m_errorMessage = ASCIILiteral(&quot;Attempt to use unknown global.&quot;);
&gt; 
&gt; Ditto style and also needs a test.

ditto.

&gt;&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:209
&gt;&gt; +        m_errorMessage = ASCIILiteral(&quot;Attempt to store to immutable global.&quot;);
&gt; 
&gt; Ditto style and also needs a test.

ditto.

&gt;&gt; Source/JavaScriptCore/wasm/WasmValidate.cpp:445
&gt;&gt; +    Validate context(signature-&gt;returnType, info.globals, info.memory);
&gt; 
&gt; Style: Maybe just pass in &quot;info&quot; instead since we&apos;re now using two fields on it?

done. I also renamed info to module since that&apos;s a better name anyway.

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:45
&gt;&gt; +    instance-&gt;m_globals = reinterpret_cast&lt;GlobalDataDescriptor*&gt;(fastMalloc(info.globals.size() * sizeof(Register)));
&gt; 
&gt; Style: I&apos;d make this a MallocPtr.

Changed.

&gt;&gt; Source/JavaScriptCore/wasm/js/JSWebAssemblyInstance.cpp:91
&gt;&gt; +    visitor.addOpaqueRoot(thisObject-&gt;m_globals);
&gt; 
&gt; Why? This looks wrong.

This was supposed to be reportExtraMemoryVisited.

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyInstanceConstructor.cpp:265
&gt;&gt; +                instance-&gt;setGlobal(globalIndex, instance-&gt;loadI64Global(global.initialBitsOrImportNumber));
&gt; 
&gt; Why i64? Just to get the bits?

Yeah.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259883</commentid>
    <comment_count>7</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-14 13:29:51 -0800</bug_when>
    <thetext>Committed r209830: &lt;http://trac.webkit.org/changeset/209830&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1260027</commentid>
    <comment_count>8</comment_count>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-14 19:37:04 -0800</bug_when>
    <thetext>rdar://problem/29599104</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>296655</attachid>
            <date>2016-12-09 10:04:25 -0800</date>
            <delta_ts>2016-12-09 10:04:25 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>file_164133.txt</filename>
            <type>text/plain</type>
            <size>27375</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzIGIvSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMNCmluZGV4IGNlY2IyYzcuLjI4YWNjZDggMTAwNjQ0DQotLS0gYS9KU1Rlc3RzL3dhc20v
QnVpbGRlci5qcw0KKysrIGIvSlNUZXN0cy93YXNtL0J1aWxkZXIuanMNCkBAIC0xNTQsNiArMTU0
LDExIEBAIGNvbnN0IF9leHBvcnRGdW5jdGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0
aW9uLCBuZXh0QnVpbGRlcikgPT4gew0KICAgICB9Ow0KIH07DQogDQorY29uc3QgX2ltcG9ydEds
b2JhbENvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gew0K
Kw0KK307DQorDQorDQogY29uc3QgX2NoZWNrU3RhY2tBcmdzID0gKG9wLCBwYXJhbSkgPT4gew0K
ICAgICBmb3IgKGxldCBleHBlY3Qgb2YgcGFyYW0pIHsNCiAgICAgICAgIGlmIChXQVNNLmlzVmFs
aWRUeXBlKGV4cGVjdCkpIHsNCkBAIC0zNjksNyArMzc0LDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xh
c3MgQnVpbGRlciB7DQogICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLA0K
ICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihg
VW5pbXBsZW1lbnRlZDogaW1wb3J0IHRhYmxlYCk7IH0sDQogICAgICAgICAgICAgICAgICAgICAg
ICAgTWVtb3J5OiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1wb3J0
IG1lbW9yeWApOyB9LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkgPT4geyB0
aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGltcG9ydCBnbG9iYWxgKTsgfSwNCisgICAg
ICAgICAgICAgICAgICAgICAgICBHbG9iYWw6ICgpID0+IHsgfSwNCiAgICAgICAgICAgICAgICAg
ICAgIH07DQogICAgICAgICAgICAgICAgICAgICBpbXBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2lt
cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMsIHMsIGltcG9ydEJ1aWxkZXIpOw0KICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGltcG9ydEJ1aWxkZXI7DQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwDQppbmRleCA3YWM3YTcxLi41OWNh
N2M3IDEwMDY0NA0KLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5l
cmF0b3IuY3BwDQorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVy
YXRvci5jcHANCkBAIC0xMzEsNyArMTMxLDcgQEAgcHVibGljOg0KIA0KICAgICBzdGF0aWMgY29u
c3RleHByIEV4cHJlc3Npb25UeXBlIGVtcHR5RXhwcmVzc2lvbiA9IG51bGxwdHI7DQogDQotICAg
IEIzSVJHZW5lcmF0b3IoVk0mLCBNZW1vcnkqLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5j
dGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYpOw0KKyAgICBCM0lSR2VuZXJh
dG9yKFZNJiwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJu
YWxGdW5jdGlvbiosIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21DYWxsPiYpOw0KIA0KICAgICBi
b29sIFdBUk5fVU5VU0VEX1JFVFVSTiBhZGRBcmd1bWVudHMoY29uc3QgVmVjdG9yPFR5cGU+Jik7
DQogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUsIHVpbnQzMl90KTsN
CkBAIC0xODQsOCArMTg0LDEwIEBAIHByaXZhdGU6DQogICAgIHZvaWQgdW5pZnlWYWx1ZXNXaXRo
QmxvY2soY29uc3QgRXhwcmVzc2lvbkxpc3QmIHJlc3VsdFN0YWNrLCBSZXN1bHRMaXN0JiBzdGFj
ayk7DQogICAgIFZhbHVlKiB6ZXJvRm9yVHlwZShUeXBlKTsNCiANCisgICAgVmFsdWUqIGxvYWRJ
bnN0YW5jZSgpOw0KKw0KICAgICBWTSogbV92bTsNCi0gICAgTWVtb3J5KiBtX21lbW9yeTsNCisg
ICAgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIG1faW5mbzsNCiAgICAgUHJvY2VkdXJlJiBtX3By
b2M7DQogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOw0KICAgICBWZWN0b3I8VmFyaWFi
bGUqPiBtX2xvY2FsczsNCkBAIC0xOTUsOSArMTk3LDkgQEAgcHJpdmF0ZToNCiAgICAgVmFsdWUq
IG1femVyb1ZhbHVlc1tudW1UeXBlc107DQogfTsNCiANCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2Vu
ZXJhdG9yKFZNJiB2bSwgTWVtb3J5KiBtZW1vcnksIFByb2NlZHVyZSYgcHJvY2VkdXJlLCBXYXNt
SW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxVbmxpbmtlZFdhc21Ub1dhc21D
YWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpDQorQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVy
YXRvcihWTSYgdm0sIGNvbnN0IE1vZHVsZUluZm9ybWF0aW9uJiBpbmZvLCBQcm9jZWR1cmUmIHBy
b2NlZHVyZSwgV2FzbUludGVybmFsRnVuY3Rpb24qIGNvbXBpbGF0aW9uLCBWZWN0b3I8VW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbD4mIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKQ0KICAgICA6IG1fdm0o
JnZtKQ0KLSAgICAsIG1fbWVtb3J5KG1lbW9yeSkNCisgICAgLCBtX2luZm8oaW5mbykNCiAgICAg
LCBtX3Byb2MocHJvY2VkdXJlKQ0KICAgICAsIG1fdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHModW5s
aW5rZWRXYXNtVG9XYXNtQ2FsbHMpDQogew0KQEAgLTIxNywxMiArMjE5LDEyIEBAIEIzSVJHZW5l
cmF0b3I6OkIzSVJHZW5lcmF0b3IoVk0mIHZtLCBNZW1vcnkqIG1lbW9yeSwgUHJvY2VkdXJlJiBw
cm9jZWR1cmUsIFdhc21JDQogICAgICAgICB9DQogICAgIH0NCiANCi0gICAgaWYgKG1fbWVtb3J5
KSB7DQotICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBtX21lbW9yeS0+cGlubmVkUmVnaXN0ZXJz
KCkuYmFzZU1lbW9yeVBvaW50ZXI7DQorICAgIGlmIChpbmZvLm1lbW9yeSkgew0KKyAgICAgICAg
bV9tZW1vcnlCYXNlR1BSID0gaW5mby5tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLmJhc2VNZW1v
cnlQb2ludGVyOw0KICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5QmFzZUdQUik7
DQotICAgICAgICBBU1NFUlQoIW1fbWVtb3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0
ZXJzWzBdLnNpemVPZmZzZXQpOw0KLSAgICAgICAgbV9tZW1vcnlTaXplR1BSID0gbV9tZW1vcnkt
PnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOw0KLSAgICAg
ICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBpbmZvIDogbV9tZW1vcnktPnBp
bm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpDQorICAgICAgICBBU1NFUlQoIWluZm8ubWVt
b3J5LT5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVPZmZzZXQpOw0KKyAg
ICAgICAgbV9tZW1vcnlTaXplR1BSID0gaW5mby5tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNp
emVSZWdpc3RlcnNbMF0uc2l6ZVJlZ2lzdGVyOw0KKyAgICAgICAgZm9yIChjb25zdCBQaW5uZWRT
aXplUmVnaXN0ZXJJbmZvJiBpbmZvIDogaW5mby5tZW1vcnktPnBpbm5lZFJlZ2lzdGVycygpLnNp
emVSZWdpc3RlcnMpDQogICAgICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKGluZm8uc2l6ZVJl
Z2lzdGVyKTsNCiANCiAgICAgICAgIG1fcHJvYy5zZXRXYXNtQm91bmRzQ2hlY2tHZW5lcmF0b3Io
Wz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIHBpbm5lZEdQUiwgdW5zaWduZWQpIHsNCkBA
IC0yNDMsNiArMjQ1LDEzIEBAIFZhbHVlKiBCM0lSR2VuZXJhdG9yOjp6ZXJvRm9yVHlwZShUeXBl
IHR5cGUpDQogICAgIHJldHVybiB6ZXJvVmFsdWU7DQogfQ0KIA0KK1ZhbHVlKiBCM0lSR2VuZXJh
dG9yOjpsb2FkSW5zdGFuY2UoKQ0KK3sNCisgICAgcmV0dXJuIG1fY3VycmVudEJsb2NrLT5hcHBl
bmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwgT3JpZ2luKCks
DQorICAgICAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PENvbnN0UHRyVmFsdWU+KG1fcHJv
YywgT3JpZ2luKCksIG1fdm0pLA0KKyAgICAgICAgT0JKRUNUX09GRlNFVE9GKFZNLCB0b3BKU1dl
YkFzc2VtYmx5SW5zdGFuY2UpKTsNCit9DQorDQogYm9vbCBCM0lSR2VuZXJhdG9yOjphZGRMb2Nh
bChUeXBlIHR5cGUsIHVpbnQzMl90IGNvdW50KQ0KIHsNCiAgICAgaWYgKCFtX2xvY2Fscy50cnlS
ZXNlcnZlQ2FwYWNpdHkobV9sb2NhbHMuc2l6ZSgpICsgY291bnQpKQ0KQEAgLTI4NiwyMyArMjk1
LDE4IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6c2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJl
c3Npb25UeXBlIHZhbHVlKQ0KICAgICByZXR1cm4gdHJ1ZTsNCiB9DQogDQotDQogYm9vbCBCM0lS
R2VuZXJhdG9yOjpnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1
bHQpDQogew0KLSAgICAvLyBUT0RPOiBOZWVkIHRvIGZldGNoIHRoZSBvZmZzZXQgb2YgaW5zdGFu
Y2UgZnJvbSB2bS4NCi0gICAgVmFsdWUqIGdsb2JhbHNBcnJheSA9IG1fY3VycmVudEJsb2NrLT5h
cHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgcG9pbnRlclR5cGUoKSwNCi0gICAg
ICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQdHJWYWx1ZT4obV9wcm9jLCBPcmln
aW4oKSwgbV92bSksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpOw0K
LQ0KLSAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPiht
X3Byb2MsIExvYWQsICkNCi0NCi0gICAgcmVzdWx0ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxWYXJpYWJsZVZhbHVlPihtX3Byb2MsIEIzOjpHZXQsIE9yaWdpbigpLCBtX2xvY2Fsc1tpbmRl
eF0pOw0KKyAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5l
dzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwgbG9h
ZEluc3RhbmNlKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpOw0K
KyAgICByZXN1bHQgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlKSwgT3JpZ2luKCks
IGdsb2JhbHNBcnJheSwgaW5kZXggKiBzaXplb2YoUmVnaXN0ZXIpKTsNCiAgICAgcmV0dXJuIHRy
dWU7DQogfQ0KIA0KIGJvb2wgQjNJUkdlbmVyYXRvcjo6c2V0R2xvYmFsKHVpbnQzMl90IGluZGV4
LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkNCiB7DQotICAgIC8vIFRPRE86IE5lZWQgdG8gZmV0Y2gg
dGhlIG9mZnNldCBvZiBpbnN0YW5jZSBmcm9tIHZtLg0KLSAgICBtX2N1cnJlbnRCbG9jay0+YXBw
ZW5kTmV3PFZhcmlhYmxlVmFsdWU+KG1fcHJvYywgQjM6OlNldCwgT3JpZ2luKCksIG1fbG9jYWxz
W2luZGV4XSwgdmFsdWUpOw0KKyAgICBBU1NFUlQodG9CM1R5cGUobV9pbmZvLmdsb2JhbHNbaW5k
ZXhdLnR5cGUpID09IHZhbHVlLT50eXBlKCkpOw0KKyAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0g
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2lu
dGVyVHlwZSgpLCBPcmlnaW4oKSwgbG9hZEluc3RhbmNlKCksIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpOw0KKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1l
bW9yeVZhbHVlPihtX3Byb2MsIExvYWQsIE9yaWdpbigpLCB2YWx1ZSwgZ2xvYmFsc0FycmF5LCBp
bmRleCAqIHNpemVvZihSZWdpc3RlcikpOw0KICAgICByZXR1cm4gdHJ1ZTsNCiB9DQogDQpAQCAt
NzY1LDEyICs3NjksMTIgQEAgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxDb21waWxhdGlvbj4gY3Jl
YXRlSlNUb1dhc21XcmFwcGVyKFZNJiB2bSwgY29uc3QgU2lnbmF0dXINCiAgICAgcmV0dXJuIHN0
ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jKTsNCiB9DQogDQotc3RkOjp1bmlx
dWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0mIHZtLCBjb25z
dCB1aW50OF90KiBmdW5jdGlvblN0YXJ0LCBzaXplX3QgZnVuY3Rpb25MZW5ndGgsIE1lbW9yeSog
bWVtb3J5LCBjb25zdCBTaWduYXR1cmUqIHNpZ25hdHVyZSwgVmVjdG9yPFVubGlua2VkV2FzbVRv
V2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgRnVuY3Rpb25JbmRleFNw
YWNlJiBmdW5jdGlvbkluZGV4U3BhY2UsIHVuc2lnbmVkIG9wdExldmVsKQ0KK3N0ZDo6dW5pcXVl
X3B0cjxXYXNtSW50ZXJuYWxGdW5jdGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiB2bSwgY29uc3Qg
dWludDhfdCogZnVuY3Rpb25TdGFydCwgc2l6ZV90IGZ1bmN0aW9uTGVuZ3RoLCBjb25zdCBNb2R1
bGVJbmZvcm1hdGlvbiYgaW5mbywgY29uc3QgU2lnbmF0dXJlKiBzaWduYXR1cmUsIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IEZ1
bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlLCB1bnNpZ25lZCBvcHRMZXZlbCkN
CiB7DQogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50ZXJuYWxGdW5j
dGlvbj4oKTsNCiANCiAgICAgUHJvY2VkdXJlIHByb2NlZHVyZTsNCi0gICAgQjNJUkdlbmVyYXRv
ciBjb250ZXh0KHZtLCBtZW1vcnksIHByb2NlZHVyZSwgcmVzdWx0LmdldCgpLCB1bmxpbmtlZFdh
c21Ub1dhc21DYWxscyk7DQorICAgIEIzSVJHZW5lcmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJv
Y2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzKTsNCiAgICAgRnVu
Y3Rpb25QYXJzZXI8QjNJUkdlbmVyYXRvcj4gcGFyc2VyKGNvbnRleHQsIGZ1bmN0aW9uU3RhcnQs
IGZ1bmN0aW9uTGVuZ3RoLCBzaWduYXR1cmUsIGZ1bmN0aW9uSW5kZXhTcGFjZSk7DQogICAgIGlm
ICghcGFyc2VyLnBhcnNlKCkpDQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
Ow0KQEAgLTc4NSw3ICs3ODksNyBAQCBzdGQ6OnVuaXF1ZV9wdHI8V2FzbUludGVybmFsRnVuY3Rp
b24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIGNvbnN0IHVpbnQ4X3QqIGZ1bg0KICAgICAgICAg
ZGF0YUxvZygiUG9zdCBTU0E6ICIsIHByb2NlZHVyZSk7DQogDQogICAgIHJlc3VsdC0+Y29kZSA9
IHN0ZDo6bWFrZV91bmlxdWU8Q29tcGlsYXRpb24+KHZtLCBwcm9jZWR1cmUsIG9wdExldmVsKTsN
Ci0gICAgcmVzdWx0LT5qc1RvV2FzbUVudHJ5UG9pbnQgPSBjcmVhdGVKU1RvV2FzbVdyYXBwZXIo
dm0sIHNpZ25hdHVyZSwgcmVzdWx0LT5jb2RlLT5jb2RlKCksIG1lbW9yeSk7DQorICAgIHJlc3Vs
dC0+anNUb1dhc21FbnRyeVBvaW50ID0gY3JlYXRlSlNUb1dhc21XcmFwcGVyKHZtLCBzaWduYXR1
cmUsIHJlc3VsdC0+Y29kZS0+Y29kZSgpLCBpbmZvLm1lbW9yeS5nZXQoKSk7DQogICAgIHJldHVy
biByZXN1bHQ7DQogfQ0KIA0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21CM0lSR2VuZXJhdG9yLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJ
UkdlbmVyYXRvci5oDQppbmRleCA3OTRiNWNjLi4yYTM2NjAzIDEwMDY0NA0KLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaA0KKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuaA0KQEAgLTM3LDcgKzM3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBXYXNtIHsNCiANCiBjbGFzcyBNZW1vcnk7DQogDQot
c3RkOjp1bmlxdWVfcHRyPFdhc21JbnRlcm5hbEZ1bmN0aW9uPiBwYXJzZUFuZENvbXBpbGUoVk0m
LCBjb25zdCB1aW50OF90Kiwgc2l6ZV90LCBNZW1vcnkqLCBjb25zdCBTaWduYXR1cmUqLCBWZWN0
b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBGdW5jdGlvbkluZGV4U3BhY2UmLCB1
bnNpZ25lZCBvcHRMZXZlbCA9IDEpOw0KK3N0ZDo6dW5pcXVlX3B0cjxXYXNtSW50ZXJuYWxGdW5j
dGlvbj4gcGFyc2VBbmRDb21waWxlKFZNJiwgY29uc3QgdWludDhfdCosIHNpemVfdCwgY29uc3Qg
TW9kdWxlSW5mb3JtYXRpb24mLCBjb25zdCBTaWduYXR1cmUqLCBWZWN0b3I8VW5saW5rZWRXYXNt
VG9XYXNtQ2FsbD4mLCBjb25zdCBGdW5jdGlvbkluZGV4U3BhY2UmLCB1bnNpZ25lZCBvcHRMZXZl
bCA9IDEpOw0KIA0KIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpXYXNtDQogDQpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oDQppbmRleCBiNjQzMWNhLi44M2Y4ZDNhIDEwMDY0NA0K
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oDQorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgNCkBAIC0xMDAsMTggKzEwMCwxMyBA
QCBjbGFzcyBNZW1vcnk7DQogc3RydWN0IEV4cG9ydCB7DQogICAgIElkZW50aWZpZXIgZmllbGQ7
DQogICAgIEV4dGVybmFsOjpLaW5kIGtpbmQ7DQotICAgIHVuaW9uIHsNCi0gICAgICAgIHVpbnQz
Ml90IGZ1bmN0aW9uSW5kZXg7DQotICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgVGFibGUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzNQ0KLSAgICAgICAgLy8g
RklYTUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTM0DQotICAgICAgICBHbG9iYWxUeXBlIGdsb2JhbFR5cGU7DQotICAgIH07DQor
ICAgIHVuc2lnbmVkIGtpbmRJbmRleDsgLy8gSW5kZXggaW4gdGhlIHZlY3RvciBvZiB0aGUgY29y
cmVzcG9uZGluZyBraW5kLg0KIH07DQogDQogc3RydWN0IEdsb2JhbCB7DQotICAgIGVudW0gTXV0
YWJpbGl0eSB7DQotICAgICAgICBNdXRhYmxlLA0KLSAgICAgICAgSW1tdXRhYmxlDQorICAgIGVu
dW0gTXV0YWJpbGl0eSA6IHVpbnQ4X3Qgew0KKyAgICAgICAgTXV0YWJsZSA9IDEsDQorICAgICAg
ICBJbW11dGFibGUgPSAwDQogICAgIH07DQogDQogICAgIGVudW0gSW5pdGlhbGl6YXRpb25UeXBl
IHsNCkBAIC0xMjIsOCArMTE3LDggQEAgc3RydWN0IEdsb2JhbCB7DQogDQogICAgIE11dGFiaWxp
dHkgbXV0YWJsaXR5Ow0KICAgICBUeXBlIHR5cGU7DQotICAgIEluaXRpYWxpemF0aW9uVHlwZSBp
bml0aWFsaXphdGlvblR5cGU7DQotICAgIGludDY0X3QgaW5pdGlhbEJpdHNPckltcG9ydE51bWJl
cjsNCisgICAgSW5pdGlhbGl6YXRpb25UeXBlIGluaXRpYWxpemF0aW9uVHlwZSB7IElzSW1wb3J0
IH07DQorICAgIGludDY0X3QgaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciB7IDAgfTsNCiB9Ow0K
IA0KIHN0cnVjdCBGdW5jdGlvbkxvY2F0aW9uSW5CaW5hcnkgew0KQEAgLTE0MSw2ICsxMzYsNyBA
QCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24gew0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8TWVtb3J5
PiBtZW1vcnk7DQogICAgIFZlY3RvcjxFeHBvcnQ+IGV4cG9ydHM7DQogICAgIFZlY3RvcjxHbG9i
YWw+IGdsb2JhbHM7DQorICAgIHVuc2lnbmVkIGZpcnN0SW50ZXJuYWxHbG9iYWw7DQogDQogICAg
IH5Nb2R1bGVJbmZvcm1hdGlvbigpOw0KIH07DQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3dhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaA0KaW5kZXggZDc2M2VhNy4uMDk5M2RhZSAxMDA2NDQN
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21GdW5jdGlvblBhcnNlci5oDQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaA0KQEAg
LTUzOCw4ICs1MzgsNiBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJl
c3Npb24oT3BUeXBlIG9wKQ0KIA0KICAgICBjYXNlIE9wVHlwZTo6R3Jvd01lbW9yeToNCiAgICAg
Y2FzZSBPcFR5cGU6OkN1cnJlbnRNZW1vcnk6DQotICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6
DQotICAgIGNhc2UgT3BUeXBlOjpTZXRHbG9iYWw6DQogICAgIGNhc2UgT3BUeXBlOjpDYWxsSW5k
aXJlY3Q6IHsNCiAgICAgICAgIC8vIEZJWE1FOiBOb3QgeWV0IGltcGxlbWVudGVkLg0KICAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHANCmluZGV4IDMxMWYyNTcuLmUwZjY1NmMgMTAwNjQ0DQotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcA0KKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHANCkBAIC0yMTgsNyArMjE4
LDggQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW1wb3J0KCkNCiAgICAgdWludDMyX3QgaW1w
b3J0Q291bnQ7DQogICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW1wb3J0Q291bnQpKQ0KICAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KLSAgICBpZiAoIW1fbW9kdWxlLT5pbXBvcnRzLnRyeVJlc2VydmVD
YXBhY2l0eShpbXBvcnRDb3VudCkgLy8gRklYTUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdl
IGZpeCB0aGUgRklYTUVzIGJlbG93Lg0KKyAgICBpZiAoIW1fbW9kdWxlLT5nbG9iYWxzLnRyeVJl
c2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCkNCisgICAgICAgIHx8ICFtX21vZHVsZS0+aW1wb3J0
cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxv
Y2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1FcyBiZWxvdy4NCiAgICAgICAgIHx8ICFtX21vZHVs
ZS0+aW1wb3J0RnVuY3Rpb25zLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRDb3VudCkgLy8gRklY
TUUgdGhpcyBvdmVyLWFsbG9jYXRlcyB3aGVuIHdlIGZpeCB0aGUgRklYTUVzIGJlbG93Lg0KICAg
ICAgICAgfHwgIW1fZnVuY3Rpb25JbmRleFNwYWNlLnRyeVJlc2VydmVDYXBhY2l0eShpbXBvcnRD
b3VudCkpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1F
cyBiZWxvdy4gV2UnbGwgYWxsb2NhdGUgc29tZSBtb3JlIGhlcmUgd2hlbiB3ZSBrbm93IGhvdyBt
YW55IGZ1bmN0aW9ucyB0byBleHBlY3QuDQogICAgICAgICByZXR1cm4gZmFsc2U7DQpAQCAtMjYw
LDggKzI2MSwxMSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQ0KICAgICAgICAg
ICAgIGJyZWFrOw0KICAgICAgICAgfQ0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOiB7
DQotICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NDEzMw0KLSAgICAgICAgICAgIC8vIEluIHRoZSBNVlAsIG9ubHkgaW1tdXRhYmxl
IGdsb2JhbCB2YXJpYWJsZXMgY2FuIGJlIGltcG9ydGVkLg0KKyAgICAgICAgICAgIEdsb2JhbCBn
bG9iYWw7DQorICAgICAgICAgICAgaWYgKCFwYXJzZUdsb2JhbFR5cGUoZ2xvYmFsKSkNCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KKw0KKyAgICAgICAgICAgIG1fbW9kdWxlLT5nbG9i
YWxzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOw0KICAgICAgICAgICAgIGJyZWFr
Ow0KICAgICAgICAgfQ0KICAgICAgICAgfQ0KQEAgLTM0NSwyNCArMzQ5LDI0IEBAIGJvb2wgTW9k
dWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpDQogICAgIGlmICghbV9tb2R1bGUtPmdsb2JhbHMudHJ5
UmVzZXJ2ZUNhcGFjaXR5KGdsb2JhbENvdW50KSkNCiAgICAgICAgIHJldHVybiBmYWxzZTsNCiAN
CisgICAgdW5zaWduZWQgZmlyc3RJbnRlcm5hbEdsb2JhbCA9IG1fbW9kdWxlLT5maXJzdEludGVy
bmFsR2xvYmFsOw0KICAgICBmb3IgKHVpbnQzMl90IGdsb2JhbEluZGV4ID0gMDsgZ2xvYmFsSW5k
ZXggPCBnbG9iYWxDb3VudDsgKytnbG9iYWxDb3VudCkgew0KICAgICAgICAgR2xvYmFsIGdsb2Jh
bDsNCi0gICAgICAgIFR5cGUgdHlwZTsNCi0gICAgICAgIGlmICghcGFyc2VWYWx1ZVR5cGUodHlw
ZSkpDQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KLQ0KLSAgICAgICAgdWludDhfdCBtdXRh
YmlsaXR5Ow0KLSAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQxKG11dGFiaWxpdHkpKQ0KKyAgICAg
ICAgaWYgKCFwYXJzZUdsb2JhbFR5cGUoZ2xvYmFsKSkNCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7DQogDQogICAgICAgICB1aW50OF90IGluaXRpYWxpemVyT3Bjb2RlOw0KICAgICAgICAgaWYg
KCFwYXJzZVVJbnQ4KGluaXRpYWxpemVyT3Bjb2RlKSkNCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7DQogDQorICAgICAgICB1aW50OF90IGVuZE9wY29kZTsNCisgICAgICAgIGlmICghcGFyc2VV
SW50OChlbmRPcGNvZGUpIHx8IGVuZE9wY29kZSAhPSBPcFR5cGU6OkVuZCkNCisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7DQorDQogICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0g
R2xvYmFsOjpGcm9tRXhwcmVzc2lvbjsNCiAgICAgICAgIHN3aXRjaCAoaW5pdGlhbGl6ZXJPcGNv
ZGUpIHsNCiAgICAgICAgIGNhc2UgSTMyQ29uc3Q6IHsNCi0gICAgICAgICAgICBpZiAodHlwZSAh
PSBJMzIpDQorICAgICAgICAgICAgaWYgKGdsb2JhbC50eXBlICE9IEkzMikNCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgIGludDMyX3QgY29uc3RhbnQ7DQogICAg
ICAgICAgICAgaWYgKCFwYXJzZVZhckludDMyKGNvbnN0YW50KSkNCkBAIC0zNzIsNyArMzc2LDcg
QEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkNCiAgICAgICAgIH0NCiANCiAgICAg
ICAgIGNhc2UgSTY0Q29uc3Q6IHsNCi0gICAgICAgICAgICBpZiAodHlwZSAhPSBJNjQpDQorICAg
ICAgICAgICAgaWYgKGdsb2JhbC50eXBlICE9IEk2NCkNCiAgICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOw0KIA0KICAgICAgICAgICAgIGludDY0X3QgY29uc3RhbnQ7DQpAQCAtMzgzLDcgKzM4
Nyw3IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpDQogICAgICAgICB9DQogDQog
ICAgICAgICBjYXNlIEYzMkNvbnN0OiB7DQotICAgICAgICAgICAgaWYgKHR5cGUgIT0gRjMyKQ0K
KyAgICAgICAgICAgIGlmIChnbG9iYWwudHlwZSAhPSBGMzIpDQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsNCiANCiAgICAgICAgICAgICB1aW50MzJfdCBjb25zdGFudDsNCkBAIC0zOTQs
NyArMzk4LDcgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlR2xvYmFsKCkNCiAgICAgICAgIH0N
CiANCiAgICAgICAgIGNhc2UgRjY0Q29uc3Q6IHsNCi0gICAgICAgICAgICBpZiAodHlwZSAhPSBG
NjQpDQorICAgICAgICAgICAgaWYgKGdsb2JhbC50eXBlICE9IEY2NCkNCiAgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KIA0KICAgICAgICAgICAgIHVpbnQ2NF90IGNvbnN0YW50Ow0KQEAg
LTQwOSwxMiArNDEzLDE1IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpDQogICAg
ICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpDQogICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsNCiANCi0gICAgICAgICAgICBpZiAobV9tb2R1bGUtPmltcG9ydHMuc2l6ZSgp
IDw9IGluZGV4DQotICAgICAgICAgICAgICAgIHx8IG1fbW9kdWxlLT5pbXBvcnRzW2luZGV4XS5r
aW5kICE9IEV4dGVybmFsOjpHbG9iYWwNCi0gICAgICAgICAgICAgICAgfHwgbV9tb2R1bGUtPmlt
cG9ydHNbaW5kZXhdLmdsb2JhbFR5cGUudHlwZSAhPSB0eXBlKQ0KKyAgICAgICAgICAgIGlmIChp
bmRleCA+PSBtX21vZHVsZS0+aW1wb3J0cy5zaXplKCkpDQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsNCisgICAgICAgICAgICBjb25zdCBJbXBvcnQmIGltcG9ydCA9IG1fbW9kdWxlLT5p
bXBvcnRzW2luZGV4XTsNCisgICAgICAgICAgICBpZiAobV9tb2R1bGUtPmltcG9ydHNbaW5kZXhd
LmtpbmQgIT0gRXh0ZXJuYWw6Okdsb2JhbA0KKyAgICAgICAgICAgICAgICB8fCBpbXBvcnQua2lu
ZEluZGV4ID49IGZpcnN0SW50ZXJuYWxHbG9iYWwNCisgICAgICAgICAgICAgICAgfHwgbV9tb2R1
bGUtPmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSAhPSBnbG9iYWwudHlwZSkNCiAgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KIA0KLSAgICAgICAgICAgIEFTU0VSVChtX21vZHVs
ZS0+aW1wb3J0c1tpbmRleF0uZ2xvYmFsVHlwZS5tdXRhYmxpdHkgPT0gR2xvYmFsVHlwZTo6SW1t
dXRhYmxlKTsNCisgICAgICAgICAgICBBU1NFUlQobV9tb2R1bGUtPmdsb2JhbHNbaW1wb3J0Lmtp
bmRJbmRleF0ubXV0YWJsaXR5ID09IEdsb2JhbDo6SW1tdXRhYmxlKTsNCiANCiAgICAgICAgICAg
ICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1wb3J0Ow0K
ICAgICAgICAgICAgIGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyID0gaW5kZXg7DQpA
QCAtNDI1LDcgKzQzMiw3IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUdsb2JhbCgpDQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgfQ0KIA0KLSAgICAgICAgbV9tb2R1bGUt
Pmdsb2JhbHNbZ2xvYmFsSW5kZXhdID0gV1RGTW92ZShnbG9iYWwpOw0KKyAgICAgICAgbV9tb2R1
bGUtPmdsb2JhbHNbZ2xvYmFsSW5kZXggKyBmaXJzdEludGVybmFsR2xvYmFsXSA9IFdURk1vdmUo
Z2xvYmFsKTsNCiAgICAgfQ0KICAgICByZXR1cm4gdHJ1ZTsNCiB9DQpAQCAtNDQ3LDEwICs0NTQs
MTIgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRXhwb3J0KCkNCiAgICAgICAgIGV4cC5maWVs
ZCA9IElkZW50aWZpZXI6OmZyb21TdHJpbmcobV92bSwgZmllbGRTdHJpbmcpOw0KICAgICAgICAg
aWYgKCFwYXJzZUV4dGVybmFsS2luZChleHAua2luZCkpDQogICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOw0KKw0KKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihleHAua2luZEluZGV4KSkNCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgICBzd2l0Y2ggKGV4cC5raW5kKSB7DQog
ICAgICAgICBjYXNlIEV4dGVybmFsOjpGdW5jdGlvbjogew0KLSAgICAgICAgICAgIGlmICghcGFy
c2VWYXJVSW50MzIoZXhwLmZ1bmN0aW9uSW5kZXgpDQotICAgICAgICAgICAgICAgIHx8IGV4cC5m
dW5jdGlvbkluZGV4ID49IG1fZnVuY3Rpb25JbmRleFNwYWNlLnNpemUoKSkNCisgICAgICAgICAg
ICBpZiAoZXhwLmtpbmRJbmRleCA+PSBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplKCkpDQogICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICBicmVhazsNCiAgICAgICAg
IH0NCkBAIC00NjMsOCArNDcyLDExIEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZUV4cG9ydCgp
DQogICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICB9DQogICAgICAgICBjYXNlIEV4dGVybmFs
OjpHbG9iYWw6IHsNCi0gICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzDQotICAgICAgICAgICAgLy8gSW4gdGhlIE1WUCwgb25s
eSBpbW11dGFibGUgZ2xvYmFsIHZhcmlhYmxlcyBjYW4gYmUgZXhwb3J0ZWQuDQorICAgICAgICAg
ICAgaWYgKGV4cC5raW5kSW5kZXggPj0gbV9tb2R1bGUtPmdsb2JhbHMuc2l6ZSgpKQ0KKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7DQorDQorICAgICAgICAgICAgaWYgKG1fbW9kdWxlLT5n
bG9iYWxzW2V4cC5raW5kSW5kZXhdLm11dGFibGl0eSAhPSBHbG9iYWw6OkltbXV0YWJsZSkNCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICAgIGJyZWFrOw0KICAgICAg
ICAgfQ0KICAgICAgICAgfQ0KQEAgLTUwOSw2ICs1MjEsMTUgQEAgYm9vbCBNb2R1bGVQYXJzZXI6
OnBhcnNlQ29kZSgpDQogICAgIHJldHVybiB0cnVlOw0KIH0NCiANCitib29sIE1vZHVsZVBhcnNl
cjo6cGFyc2VHbG9iYWxUeXBlKEdsb2JhbCYgZ2xvYmFsKQ0KK3sNCisgICAgdWludDhfdCBtdXRh
YmlsaXR5Ow0KKyAgICBpZiAoIXBhcnNlVmFsdWVUeXBlKGdsb2JhbC50eXBlKSB8fCAhcGFyc2VW
YXJVSW50MShtdXRhYmlsaXR5KSkNCisgICAgICAgIHJldHVybiBmYWxzZTsNCisgICAgZ2xvYmFs
Lm11dGFibGl0eSA9IHN0YXRpY19jYXN0PEdsb2JhbDo6TXV0YWJpbGl0eT4obXV0YWJpbGl0eSk7
DQorICAgIHJldHVybiB0cnVlOw0KK30NCisNCiBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VEYXRh
KCkNCiB7DQogICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNjE3MDkNCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFy
c2VyLmgNCmluZGV4IDkyNjI5OTQuLmNjMDZkYzIgMTAwNjQ0DQotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgNCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaA0KQEAgLTc0LDYgKzc0LDggQEAgcHVibGljOg0K
ICAgICB9DQogDQogcHJpdmF0ZToNCisgICAgYm9vbCBwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJik7
DQorDQogI2RlZmluZSBXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIoTkFNRSwgSUQsIERFU0NS
SVBUSU9OKSBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZSAjIyBOQU1FKCk7DQogICAgIEZP
Ul9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJTRVIpDQogI3VuZGVm
IFdBU01fU0VDVElPTl9ERUNMQVJFX1BBUlNFUg0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21QbGFuLmNwcA0KaW5kZXggZDg5YzJmYS4uNDY3YWQzNiAxMDA2NDQNCi0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21QbGFuLmNwcA0KKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vV2FzbVBsYW4uY3BwDQpAQCAtMTI4LDcgKzEyOCw3IEBAIHZvaWQgUGxhbjo6cnVu
KCkNCiAgICAgICAgIH0NCiANCiAgICAgICAgIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLnVuY2hl
Y2tlZEFwcGVuZChWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4oKSk7DQotICAgICAgICBt
X3dhc21JbnRlcm5hbEZ1bmN0aW9ucy51bmNoZWNrZWRBcHBlbmQocGFyc2VBbmRDb21waWxlKCpt
X3ZtLCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxlbmd0aCwgbV9tb2R1bGVJbmZvcm1hdGlvbi0+
bWVtb3J5LmdldCgpLCBzaWduYXR1cmUsIHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0
aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5kZXhTcGFjZSkpOw0KKyAgICAgICAgbV93YXNtSW50ZXJu
YWxGdW5jdGlvbnMudW5jaGVja2VkQXBwZW5kKHBhcnNlQW5kQ29tcGlsZSgqbV92bSwgZnVuY3Rp
b25TdGFydCwgZnVuY3Rpb25MZW5ndGgsICptX21vZHVsZUluZm9ybWF0aW9uLCBzaWduYXR1cmUs
IHVubGlua2VkV2FzbVRvV2FzbUNhbGxzLmF0KGZ1bmN0aW9uSW5kZXgpLCBtX2Z1bmN0aW9uSW5k
ZXhTcGFjZSkpOw0KICAgICAgICAgbV9mdW5jdGlvbkluZGV4U3BhY2VbZnVuY3Rpb25JbmRleFNw
YWNlXS5jb2RlID0gbV93YXNtSW50ZXJuYWxGdW5jdGlvbnNbZnVuY3Rpb25JbmRleF0tPmNvZGUt
PmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOw0KICAgICB9DQogDQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5jcHANCmluZGV4IGVmMWJlODkuLjFmNzAyMWEgMTAw
NjQ0DQotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwDQor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwDQpAQCAtMTg1
LDcgKzE4NSw3IEBAIGJvb2wgVmFsaWRhdGU6OnNldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHBy
ZXNzaW9uVHlwZSB2YWx1ZSkNCiBib29sIFZhbGlkYXRlOjpnZXRHbG9iYWwodWludDMyX3QgaW5k
ZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpDQogew0KICAgICBpZiAoaW5kZXggPCBtX2dsb2Jh
bHMuc2l6ZSgpKSB7DQotICAgICAgICByZXN1bHQgPSBtX2dsb2JhbHNbaW5kZXhdLnR5cGUudHlw
ZTsNCisgICAgICAgIHJlc3VsdCA9IG1fZ2xvYmFsc1tpbmRleF0udHlwZTsNCiAgICAgICAgIEFT
U0VSVChpc1ZhbHVlVHlwZShyZXN1bHQpKTsNCiAgICAgICAgIHJldHVybiB0cnVlOw0KICAgICB9
DQpAQCAtMjAwLDEyICsyMDAsMTIgQEAgYm9vbCBWYWxpZGF0ZTo6c2V0R2xvYmFsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkNCiAgICAgICAgIHJldHVybiBmYWxzZTsNCiAg
ICAgfQ0KIA0KLSAgICBpZiAobV9nbG9iYWxzW2luZGV4XS50eXBlLm11dGFibGl0eSA9PSBHbG9i
YWxUeXBlOjpJbW11dGFibGUpIHsNCisgICAgaWYgKG1fZ2xvYmFsc1tpbmRleF0ubXV0YWJsaXR5
ID09IEdsb2JhbDo6SW1tdXRhYmxlKSB7DQogICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IEFTQ0lJ
TGl0ZXJhbCgiQXR0ZW1wdCB0byBzdG9yZSB0byBpbW11dGFibGUgZ2xvYmFsLiIpOw0KICAgICAg
ICAgcmV0dXJuIGZhbHNlOw0KICAgICB9DQogDQotICAgIEV4cHJlc3Npb25UeXBlIGdsb2JhbFR5
cGUgPSBtX2dsb2JhbHNbaW5kZXhdLnR5cGUudHlwZTsNCisgICAgRXhwcmVzc2lvblR5cGUgZ2xv
YmFsVHlwZSA9IG1fZ2xvYmFsc1tpbmRleF0udHlwZTsNCiAgICAgQVNTRVJUKGlzVmFsdWVUeXBl
KGdsb2JhbFR5cGUpKTsNCiAgICAgaWYgKGdsb2JhbFR5cGUgPT0gdmFsdWUpDQogICAgICAgICBy
ZXR1cm4gdHJ1ZTsNCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9K
U1dlYkFzc2VtYmx5SW5zdGFuY2UuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlJbnN0YW5jZS5oDQppbmRleCBkMzU4MWQ4Li45YTQyYWE5IDEwMDY0NA0KLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgN
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5j
ZS5oDQpAQCAtNjcsNiArNjcsMzAgQEAgcHVibGljOg0KICAgICAgICAgaW1wb3J0RnVuY3Rpb24o
aWR4KS0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7DQogICAgIH0NCiANCisgICAgaW50MzJfdCBsb2Fk
STMyR2xvYmFsKHVuc2lnbmVkIGkpIGNvbnN0DQorICAgIHsNCisgICAgICAgIEFTU0VSVChpIDwg
bV9udW1HbG9iYWxzKTsNCisgICAgICAgIHJldHVybiBtX2dsb2JhbHNbaV0uaTMyOw0KKyAgICB9
DQorICAgIGZsb2F0IGxvYWRGMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QNCisgICAgew0KKyAg
ICAgICAgQVNTRVJUKGkgPCBtX251bUdsb2JhbHMpOw0KKyAgICAgICAgcmV0dXJuIG1fZ2xvYmFs
c1tpXS5mMzI7DQorICAgIH0NCisgICAgZG91YmxlIGxvYWRGNjRHbG9iYWwodW5zaWduZWQgaSkg
Y29uc3QNCisgICAgew0KKyAgICAgICAgQVNTRVJUKGkgPCBtX251bUdsb2JhbHMpOw0KKyAgICAg
ICAgcmV0dXJuIG1fZ2xvYmFsc1tpXS5mNjQ7DQorICAgIH0NCisNCisgICAgdm9pZCBzZXRHbG9i
YWwoaW50NjRfdCBiaXRzLCB1bnNpZ25lZCBpKQ0KKyAgICB7DQorICAgICAgICBBU1NFUlQoaSA8
IG1fbnVtR2xvYmFscyk7DQorICAgICAgICBtX2dsb2JhbHNbaV0uaTY0ID0gYml0czsNCisgICAg
fQ0KKw0KKyAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0NCisNCiAg
ICAgc3RhdGljIHNpemVfdCBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpDQogICAgIHsNCiAgICAg
ICAgIHJldHVybiBXVEY6OnJvdW5kVXBUb011bHRpcGxlT2Y8c2l6ZW9mKFdyaXRlQmFycmllcjxK
U0NlbGw+KT4oc2l6ZW9mKEpTV2ViQXNzZW1ibHlJbnN0YW5jZSkpOw0KQEAgLTgyLDggKzEwNiw2
IEBAIHB1YmxpYzoNCiAgICAgICAgIHJldHVybiBvZmZzZXRPZkltcG9ydEZ1bmN0aW9ucygpICsg
c2l6ZW9mKFdyaXRlQmFycmllcjxKU0NlbGw+KSAqIG51bUltcG9ydEZ1bmN0aW9uczsNCiAgICAg
fQ0KIA0KLSAgICBzdGF0aWMgcHRyZGlmZl90IG9mZnNldE9mR2xvYmFscygpIHsgcmV0dXJuIE9C
SkVDVF9PRkZTRVRPRihKU1dlYkFzc2VtYmx5SW5zdGFuY2UsIG1fZ2xvYmFscyk7IH0NCi0NCiBw
cm90ZWN0ZWQ6DQogICAgIEpTV2ViQXNzZW1ibHlJbnN0YW5jZShWTSYsIFN0cnVjdHVyZSosIHVu
c2lnbmVkKTsNCiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2ViQXNzZW1ibHlNb2R1
bGUqLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCopOw0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0
b3IuY3BwDQppbmRleCBmM2I3ZmRlLi4wNzk1OTBlIDEwMDY0NA0KLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0cnVjdG9yLmNwcA0KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNvbnN0
cnVjdG9yLmNwcA0KQEAgLTg2LDEwICs4NiwxMCBAQCBzdGF0aWMgRW5jb2RlZEpTVmFsdWUgSlND
X0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5SW5zdGFuY2UoRXhlY1N0YXRlKiBzdA0K
ICAgICAvLyBMZXQgZnVuY3MsIG1lbW9yaWVzIGFuZCB0YWJsZXMgYmUgaW5pdGlhbGx5LWVtcHR5
IGxpc3RzIG9mIGNhbGxhYmxlIEphdmFTY3JpcHQgb2JqZWN0cywgV2ViQXNzZW1ibHkuTWVtb3J5
IG9iamVjdHMgYW5kIFdlYkFzc2VtYmx5LlRhYmxlIG9iamVjdHMsIHJlc3BlY3RpdmVseS4NCiAg
ICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2YgZXh0ZXJuYWwg
dmFsdWVzLg0KICAgICB1bnNpZ25lZCBudW1JbXBvcnRGdW5jdGlvbnMgPSAwOw0KKyAgICB1bnNp
Z25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsNCiANCiAgICAgLy8gRklYTUUgaW1wbGVtZW50IFRh
YmxlIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzUNCiAgICAg
Ly8gRklYTUUgaW1wbGVtZW50IE1lbW9yeSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTY0MTM0DQotICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMw0KIA0KICAgICAvLyBGb3IgZWFj
aCBpbXBvcnQgaSBpbiBtb2R1bGUuaW1wb3J0czoNCiAgICAgZm9yIChhdXRvJiBpbXBvcnQgOiBt
b2R1bGVJbmZvcm1hdGlvbi5pbXBvcnRzKSB7DQpAQCAtMTQ3LDE2ICsxNDcsMzIgQEAgc3RhdGlj
IEVuY29kZWRKU1ZhbHVlIEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3Rh
bmNlKEV4ZWNTdGF0ZSogc3QNCiAgICAgICAgIH0NCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJu
YWw6Okdsb2JhbDogew0KICAgICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0
Og0KLSAgICAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBHbG9iYWwgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMw0KICAgICAgICAgICAgIC8vIGkuIElmIGkg
aXMgbm90IGFuIGltbXV0YWJsZSBnbG9iYWwsIHRocm93IGEgVHlwZUVycm9yLg0KKyAgICAgICAg
ICAgIEFTU0VSVChtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11
dGFibGl0eSA9PSBXYXNtOjpHbG9iYWw6OkltbXV0YWJsZSk7DQogICAgICAgICAgICAgLy8gaWku
IElmIFR5cGUodikgaXMgbm90IE51bWJlciwgdGhyb3cgYSBUeXBlRXJyb3IuDQorICAgICAgICAg
ICAgaWYgKCF2YWx1ZS5pc051bWJlcigpKQ0KKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1
ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlVHlwZUVycm9yKHN0
YXRlLCBBU0NJSUxpdGVyYWwoImltcG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVtYmVyIiksIGRl
ZmF1bHRTb3VyY2VBcHBlbmRlciwgcnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSkpKSk7DQogICAg
ICAgICAgICAgLy8gaWlpLiBBcHBlbmQgVG9XZWJBc3NlbWJseVZhbHVlKHYpIHRvIGltcG9ydHMu
DQotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsNCisgICAgICAgICAg
ICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlw
ZSkgew0KKyAgICAgICAgICAgICAgICBjYXNlIFdhc206OkkzMjoNCisgICAgICAgICAgICAgICAg
ICAgIGluc3RhbmNlLT5zZXRHbG9iYWwodmFsdWUudG9JbnQzMihzdGF0ZSksIG51bUltcG9ydEds
b2JhbHMrKyk7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICAgICAg
Y2FzZSBXYXNtOjpGMzI6DQorICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFs
KGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUudG9GbG9hdChzdGF0ZSkpLCBudW1JbXBvcnRH
bG9iYWxzKyspOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAg
IGNhc2UgV2FzbTo6RjY0Og0KKyAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2Jh
bChiaXR3aXNlX2Nhc3Q8dWludDY0X3Q+KHZhbHVlLmFzTnVtYmVyKCkpLCBudW1JbXBvcnRHbG9i
YWxzKyspOw0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6DQorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
Ow0KKyAgICAgICAgICAgIH0NCiAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgIH0NCiAgICAg
ICAgIH0NCiAgICAgfQ0KIA0KKyAgICBBU1NFUlQobnVtSW1wb3J0R2xvYmFscyA9PSBtb2R1bGVJ
bmZvcm1hdGlvbi5maXJzdEludGVybmFsR2xvYmFsKTsNCisNCiAgICAgbW9kdWxlUmVjb3JkLT5s
aW5rKHN0YXRlLCBpbnN0YW5jZSk7DQogICAgIFJFVFVSTl9JRl9FWENFUFRJT04oc2NvcGUsIHsg
fSk7DQogICAgIGlmICh2ZXJib3NlKQ0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcA0KaW5kZXggNTFjOWQ3OS4u
NGExNzRkMiAxMDA2NDQNCi0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFz
c2VtYmx5TW9kdWxlUmVjb3JkLmNwcA0KKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwDQpAQCAtODMsOCArODMsOCBAQCB2b2lkIFdl
YkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpmaW5pc2hDcmVhdGlvbihFeGVjU3RhdGUqIGV4ZWMsIFZN
JiB2bSwgY29uc3QgV2FzbQ0KICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgfQ0KICAgICAg
ICAgY2FzZSBXYXNtOjpFeHRlcm5hbDo6R2xvYmFsOiB7DQotICAgICAgICAgICAgLy8gRklYTUUg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMw0KICAgICAgICAg
ICAgIC8vIEluIHRoZSBNVlAsIG9ubHkgaW1tdXRhYmxlIGdsb2JhbCB2YXJpYWJsZXMgY2FuIGJl
IGV4cG9ydGVkLg0KKyAgICAgICAgICAgIGFkZEV4cG9ydEVudHJ5KEV4cG9ydEVudHJ5OjpjcmVh
dGVMb2NhbChleHAuZmllbGQsIGV4cC5maWVsZCkpOw0KICAgICAgICAgICAgIGJyZWFrOw0KICAg
ICAgICAgfQ0KICAgICAgICAgfQ0KQEAgLTEyMSw3ICsxMjEsNyBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdA0KICAgICAgICAgICAgIC8vIDEuIElmIGUgaXMgYSBjbG9zdXJlIGM6DQogICAgICAg
ICAgICAgLy8gICBpLiBJZiB0aGVyZSBpcyBhbiBFeHBvcnRlZCBGdW5jdGlvbiBFeG90aWMgT2Jq
ZWN0IGZ1bmMgaW4gZnVuY3Mgd2hvc2UgZnVuYy5bW0Nsb3N1cmVdXSBlcXVhbHMgYywgdGhlbiBy
ZXR1cm4gZnVuYy4NCiAgICAgICAgICAgICAvLyAgIGlpLiAoTm90ZTogQXQgbW9zdCBvbmUgd3Jh
cHBlciBpcyBjcmVhdGVkIGZvciBhbnkgY2xvc3VyZSwgc28gZnVuYyBpcyB1bmlxdWUsIGV2ZW4g
aWYgdGhlcmUgYXJlIG11bHRpcGxlIG9jY3VycmFuY2VzIGluIHRoZSBsaXN0LiBNb3Jlb3Zlciwg
aWYgdGhlIGl0ZW0gd2FzIGFuIGltcG9ydCB0aGF0IGlzIGFscmVhZHkgYW4gRXhwb3J0ZWQgRnVu
Y3Rpb24gRXhvdGljIE9iamVjdCwgdGhlbiB0aGUgb3JpZ2luYWwgZnVuY3Rpb24gb2JqZWN0IHdp
bGwgYmUgZm91bmQuIEZvciBpbXBvcnRzIHRoYXQgYXJlIHJlZ3VsYXIgSlMgZnVuY3Rpb25zLCBh
IG5ldyB3cmFwcGVyIHdpbGwgYmUgY3JlYXRlZC4pDQotICAgICAgICAgICAgaWYgKGV4cC5mdW5j
dGlvbkluZGV4IDwgaW1wb3J0Q291bnQpIHsNCisgICAgICAgICAgICBpZiAoZXhwLmtpbmRJbmRl
eCA8IGltcG9ydENvdW50KSB7DQogICAgICAgICAgICAgICAgIC8vIEZJWE1FIEltcGxlbWVudCBy
ZS1leHBvcnRpbmcgYW4gaW1wb3J0LiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY1NTEwDQogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7DQogICAgICAgICAgICAgfQ0KQEAgLTEyOSw4ICsxMjksOCBAQCB2b2lkIFdlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSogaW5zdA0KICAgICAgICAgICAgIC8vICAgICBhLiBMZXQgZnVuYyBiZSBhbiBFeHBvcnRlZCBG
dW5jdGlvbiBFeG90aWMgT2JqZWN0IGNyZWF0ZWQgZnJvbSBjLg0KICAgICAgICAgICAgIC8vICAg
ICBiLiBBcHBlbmQgZnVuYyB0byBmdW5jcy4NCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJu
IGZ1bmMuDQotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IG1v
ZHVsZS0+Y2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rpb25JbmRleCk7DQot
ICAgICAgICAgICAgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtb2R1bGUtPnNpZ25hdHVy
ZUZvckZ1bmN0aW9uSW5kZXhTcGFjZShleHAuZnVuY3Rpb25JbmRleCk7DQorICAgICAgICAgICAg
SlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUNhbGxlZSA9IG1vZHVsZS0+Y2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShleHAua2luZEluZGV4KTsNCisgICAgICAgICAgICBXYXNtOjpTaWduYXR1
cmUqIHNpZ25hdHVyZSA9IG1vZHVsZS0+c2lnbmF0dXJlRm9yRnVuY3Rpb25JbmRleFNwYWNlKGV4
cC5raW5kSW5kZXgpOw0KICAgICAgICAgICAgIFdlYkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9u
ID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHNpZ25hdHVy
ZS0+YXJndW1lbnRzLnNpemUoKSwgZXhwLmZpZWxkLnN0cmluZygpLCBpbnN0YW5jZSwgd2FzbUNh
bGxlZSwgc2lnbmF0dXJlKTsNCiAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gZnVuY3Rpb247
DQogICAgICAgICAgICAgYnJlYWs7DQpAQCAtMTQzLDkgKzE0MywyOCBAQCB2b2lkIFdlYkFzc2Vt
Ymx5TW9kdWxlUmVjb3JkOjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0
YW5jZSogaW5zdA0KICAgICAgICAgICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjQxMzQNCiAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgIH0N
CisNCiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Okdsb2JhbDogew0KLSAgICAgICAgICAg
IC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMN
Ci0gICAgICAgICAgICAvLyBJbiB0aGUgTVZQLCBvbmx5IGltbXV0YWJsZSBnbG9iYWwgdmFyaWFi
bGVzIGNhbiBiZSBleHBvcnRlZC4NCisgICAgICAgICAgICAvLyBBc3NlcnQ6IHRoZSBnbG9iYWwg
aXMgaW1tdXRhYmxlIGJ5IE1WUCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQuDQorICAgICAgICAgICAg
Y29uc3QgV2FzbTo6R2xvYmFsJiBnbG9iYWwgPSBtb2R1bGVJbmZvcm1hdGlvbi5nbG9iYWxzW2V4
cC5raW5kSW5kZXhdOw0KKyAgICAgICAgICAgIEFTU0VSVChnbG9iYWwubXV0YWJsaXR5ID09IFdh
c206Okdsb2JhbDo6SW1tdXRhYmxlKTsNCisgICAgICAgICAgICAvLyBSZXR1cm4gVG9KU1ZhbHVl
KHYpLg0KKyAgICAgICAgICAgIHN3aXRjaCAoZ2xvYmFsLnR5cGUpIHsNCisgICAgICAgICAgICAg
ICAgY2FzZSBXYXNtOjpJMzI6DQorICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0g
SlNWYWx1ZShpbnN0YW5jZS0+bG9hZEkzMkdsb2JhbChleHAua2luZEluZGV4KSk7DQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6
DQorICAgICAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+
bG9hZEYzMkdsb2JhbChleHAua2luZEluZGV4KSk7DQorICAgICAgICAgICAgICAgICAgICBicmVh
azsNCisNCisgICAgICAgICAgICAgICAgY2FzZSBXYXNtOjpGNjQ6DQorICAgICAgICAgICAgICAg
ICAgICBleHBvcnRlZFZhbHVlID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEY2NEdsb2JhbChleHAu
a2luZEluZGV4KSk7DQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCisNCisgICAgICAgICAg
ICAgICAgZGVmYXVsdDoNCisgICAgICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7DQorICAgICAgICAgICAgfQ0KICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAg
fQ0KICAgICAgICAgfQ0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297048</attachid>
            <date>2016-12-13 16:29:08 -0800</date>
            <delta_ts>2016-12-13 17:17:41 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-164133-20161213162818.patch</filename>
            <type>text/plain</type>
            <size>63386</size>
            <attacher name="Keith Miller">keith_miller</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjA5Nzc5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZjY3NmJhZWYyODI0N2UxNGFjZTMzZDM1N2VmZTNhYmY3MzAxYzg1Li4yODViNWUxYWQxYTEzZWUw
MjRiNTU0NDg0MDY3NjMzYjkwMWE2MWEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OCBAQAorMjAxNi0xMi0xMyAgS2VpdGggTWlsbGVyICA8a2VpdGhfbWlsbGVyQGFwcGxl
LmNvbT4KKworICAgICAgICBXZWJBc3NlbWJseSBKUyBBUEk6IGltcGxlbWVudCBHbG9iYWwKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyBzdXBwb3J0IGZvciBnbG9iYWxzLiBJdCBoYW5kbGVzIGltcG9ydHMsIGV4cG9ydHMKKyAg
ICAgICAgYW5kIGludGVybmFsIGdsb2JhbHMuIEluIHRoZSBNVlAgb25seSBpbnRlcm5hbCBnbG9i
YWxzIGFyZSBhbGxvd2VkCisgICAgICAgIHRvIGJlIG11dGFibGUuIFRoaXMgbWVhbnMgd2UgY2Fu
IHN0b3JlIGEgQy1hcnJheSBvZiA2NC1iaXQgc2xvdHMKKyAgICAgICAgb2ZmIHRoZSBpbnN0YW5j
ZSBob2xkaW5nIHRoZW0uIFdoZW4gZ2xvYmFscyBhcmUgZXhwb3J0ZWQgdG8gSlMKKyAgICAgICAg
dGhleSBhcmUgZG9uZSBzbyBhcyBudW1iZXJzLiBUaGlzIG1lYW5zIHRoYXQgaTY0IGdsb2JhbHMg
Y2Fubm90IGJlCisgICAgICAgIGltcG9ydGVkIG9yIGV4cG9ydGVkLgorCisgICAgICAgICogd2Fz
bS9XYXNtQjNJUkdlbmVyYXRvci5jcHA6CisgICAgICAgIChKU0M6Oldhc206OkIzSVJHZW5lcmF0
b3I6OkIzSVJHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpn
ZXRHbG9iYWwpOgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjpzZXRHbG9iYWwp
OgorICAgICAgICAoSlNDOjpXYXNtOjpCM0lSR2VuZXJhdG9yOjphZGRDYWxsSW5kaXJlY3QpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpwYXJzZUFuZENvbXBpbGUpOgorICAgICAgICAqIHdhc20vV2Fz
bUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV2FzbUZ1bmN0aW9uUGFyc2VyLmg6CisgICAgICAg
IChKU0M6Oldhc206OkZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Npb24pOgor
ICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6Oldhc206
Ok1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQpOgorICAgICAgICAoSlNDOjpXYXNtOjpNb2R1bGVQ
YXJzZXI6OnBhcnNlR2xvYmFsKToKKyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpw
YXJzZUV4cG9ydCk6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VHbG9i
YWxUeXBlKToKKyAgICAgICAgKiB3YXNtL1dhc21Nb2R1bGVQYXJzZXIuaDoKKyAgICAgICAgKiB3
YXNtL1dhc21QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZVZhcklu
dDMyKToKKyAgICAgICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZVZhckludDY0KToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6UGFyc2VyOjpwYXJzZVVJbnQ2NCk6CisgICAgICAgICogd2FzbS9XYXNt
VmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6VmFsaWRhdGUpOgor
ICAgICAgICAoSlNDOjpXYXNtOjpWYWxpZGF0ZTo6Z2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6
V2FzbTo6VmFsaWRhdGU6OnNldEdsb2JhbCk6CisgICAgICAgIChKU0M6Oldhc206OnZhbGlkYXRl
RnVuY3Rpb24pOgorICAgICAgICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcDoK
KyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpjcmVhdGUpOgorICAgICAgICAo
SlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6On5KU1dlYkFzc2VtYmx5SW5zdGFuY2UpOgorICAg
ICAgICAoSlNDOjpKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAg
ICAqIHdhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmg6CisgICAgICAgIChKU0M6OkpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6bG9hZEkzMkdsb2JhbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNz
ZW1ibHlJbnN0YW5jZTo6bG9hZEk2NEdsb2JhbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1i
bHlJbnN0YW5jZTo6bG9hZEYzMkdsb2JhbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6bG9hZEY2NEdsb2JhbCk6CisgICAgICAgIChKU0M6OkpTV2ViQXNzZW1ibHlJbnN0
YW5jZTo6c2V0R2xvYmFsKToKKyAgICAgICAgKEpTQzo6SlNXZWJBc3NlbWJseUluc3RhbmNlOjpv
ZmZzZXRPZkdsb2JhbHMpOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Y29uc3RydWN0SlNXZWJBc3NlbWJseUluc3Rh
bmNlKToKKyAgICAgICAgKiB3YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcDoKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKToKKyAg
ICAgICAgKEpTQzo6V2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmxpbmspOgorCiAyMDE2LTEyLTEz
ICBDaHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cm9sbGluZyBvdXQgcjIwOTU0NC4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93
YXNtL1dhc21CM0lSR2VuZXJhdG9yLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21CM0lSR2VuZXJhdG9yLmNwcAppbmRleCA3OTBlMGIxNDMxYzVkMTlhN2MyMzc2NmMxYjliODRh
OGRlZWFlZTgyLi42MDA4Y2RjOGQ1ZWIyNDY0NjVmNmRlZDNhNzU1NDBkMGE3MTc5MDJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtQjNJUkdlbmVyYXRvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUIzSVJHZW5lcmF0b3IuY3BwCkBA
IC0xMzcsNyArMTM3LDcgQEAgcHVibGljOgogCiAgICAgc3RhdGljIGNvbnN0ZXhwciBFeHByZXNz
aW9uVHlwZSBlbXB0eUV4cHJlc3Npb24gPSBudWxscHRyOwogCi0gICAgQjNJUkdlbmVyYXRvcihW
TSYsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiwgUHJvY2VkdXJlJiwgV2FzbUludGVybmFsRnVu
Y3Rpb24qLCBWZWN0b3I8VW5saW5rZWRXYXNtVG9XYXNtQ2FsbD4mLCBjb25zdCBJbW11dGFibGVG
dW5jdGlvbkluZGV4U3BhY2UmKTsKKyAgICBCM0lSR2VuZXJhdG9yKFZNJiwgY29uc3QgTW9kdWxl
SW5mb3JtYXRpb24mLCBQcm9jZWR1cmUmLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiosIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYsIGNvbnN0IEltbXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFj
ZSYpOwogCiAgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gYWRkQXJndW1lbnRzKGNvbnN0IFZl
Y3RvcjxUeXBlPiYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIGFkZExvY2FsKFR5cGUs
IHVpbnQzMl90KTsKQEAgLTE0Nyw2ICsxNDcsMTAgQEAgcHVibGljOgogICAgIGJvb2wgV0FSTl9V
TlVTRURfUkVUVVJOIGdldExvY2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVz
dWx0KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBzZXRMb2NhbCh1aW50MzJfdCBpbmRl
eCwgRXhwcmVzc2lvblR5cGUgdmFsdWUpOwogCisgICAgLy8gR2xvYmFscworICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIGdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUm
IHJlc3VsdCk7CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0R2xvYmFsKHVpbnQzMl90
IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSk7CisKICAgICAvLyBNZW1vcnkKICAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBsb2FkKExvYWRPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQsIHVpbnQzMl90IG9mZnNldCk7CiAgICAgYm9vbCBX
QVJOX1VOVVNFRF9SRVRVUk4gc3RvcmUoU3RvcmVPcFR5cGUsIEV4cHJlc3Npb25UeXBlIHBvaW50
ZXIsIEV4cHJlc3Npb25UeXBlIHZhbHVlLCB1aW50MzJfdCBvZmZzZXQpOwpAQCAtMTkwLDYgKzE5
NCw3IEBAIHByaXZhdGU6CiAKICAgICBWTSYgbV92bTsKICAgICBjb25zdCBJbW11dGFibGVGdW5j
dGlvbkluZGV4U3BhY2UmIG1fZnVuY3Rpb25JbmRleFNwYWNlOworICAgIGNvbnN0IE1vZHVsZUlu
Zm9ybWF0aW9uJiBtX2luZm87CiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7CiAgICAgQmFzaWNCbG9j
ayogbV9jdXJyZW50QmxvY2s7CiAgICAgVmVjdG9yPFZhcmlhYmxlKj4gbV9sb2NhbHM7CkBAIC0x
OTcsMTIgKzIwMiwxNCBAQCBwcml2YXRlOgogICAgIEdQUlJlZyBtX21lbW9yeUJhc2VHUFI7CiAg
ICAgR1BSUmVnIG1fbWVtb3J5U2l6ZUdQUjsKICAgICBWYWx1ZSogbV96ZXJvVmFsdWVzW251bVR5
cGVzXTsKLSAgICBWYWx1ZSogbV9mdW5jdGlvbkluZGV4U3BhY2VWYWx1ZTsKKyAgICBWYWx1ZSog
bV9pbnN0YW5jZVZhbHVlOworCiB9OwogCi1CM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZN
JiB2bSwgY29uc3QgTWVtb3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJiBwcm9jZWR1
cmUsIFdhc21JbnRlcm5hbEZ1bmN0aW9uKiBjb21waWxhdGlvbiwgVmVjdG9yPFVubGlua2VkV2Fz
bVRvV2FzbUNhbGw+JiB1bmxpbmtlZFdhc21Ub1dhc21DYWxscywgY29uc3QgSW1tdXRhYmxlRnVu
Y3Rpb25JbmRleFNwYWNlJiBmdW5jdGlvbkluZGV4U3BhY2UpCitCM0lSR2VuZXJhdG9yOjpCM0lS
R2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8sIFByb2NlZHVy
ZSYgcHJvY2VkdXJlLCBXYXNtSW50ZXJuYWxGdW5jdGlvbiogY29tcGlsYXRpb24sIFZlY3RvcjxV
bmxpbmtlZFdhc21Ub1dhc21DYWxsPiYgdW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMsIGNvbnN0IElt
bXV0YWJsZUZ1bmN0aW9uSW5kZXhTcGFjZSYgZnVuY3Rpb25JbmRleFNwYWNlKQogICAgIDogbV92
bSh2bSkKICAgICAsIG1fZnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXhTcGFjZSkKKyAg
ICAsIG1faW5mbyhpbmZvKQogICAgICwgbV9wcm9jKHByb2NlZHVyZSkKICAgICAsIG1fdW5saW5r
ZWRXYXNtVG9XYXNtQ2FsbHModW5saW5rZWRXYXNtVG9XYXNtQ2FsbHMpCiB7CkBAIC0yMjIsMTMg
KzIyOSwxMyBAQCBCM0lSR2VuZXJhdG9yOjpCM0lSR2VuZXJhdG9yKFZNJiB2bSwgY29uc3QgTWVt
b3J5SW5mb3JtYXRpb24mIG1lbW9yeSwgUHJvY2VkdXJlJgogICAgICAgICB9CiAgICAgfQogCi0g
ICAgaWYgKCEhbWVtb3J5KSB7Ci0gICAgICAgIG1fbWVtb3J5QmFzZUdQUiA9IG1lbW9yeS5waW5u
ZWRSZWdpc3RlcnMoKS5iYXNlTWVtb3J5UG9pbnRlcjsKKyAgICBpZiAoISFpbmZvLm1lbW9yeSkg
eworICAgICAgICBtX21lbW9yeUJhc2VHUFIgPSBpbmZvLm1lbW9yeS5waW5uZWRSZWdpc3RlcnMo
KS5iYXNlTWVtb3J5UG9pbnRlcjsKICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKG1fbWVtb3J5
QmFzZUdQUik7Ci0gICAgICAgIEFTU0VSVCghbWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVS
ZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7Ci0gICAgICAgIG1fbWVtb3J5U2l6ZUdQUiA9IG1lbW9y
eS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJzWzBdLnNpemVSZWdpc3RlcjsKLSAgICAg
ICAgZm9yIChjb25zdCBQaW5uZWRTaXplUmVnaXN0ZXJJbmZvJiBpbmZvIDogbWVtb3J5LnBpbm5l
ZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnMpCi0gICAgICAgICAgICBtX3Byb2MucGluUmVnaXN0
ZXIoaW5mby5zaXplUmVnaXN0ZXIpOworICAgICAgICBBU1NFUlQoIWluZm8ubWVtb3J5LnBpbm5l
ZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNbMF0uc2l6ZU9mZnNldCk7CisgICAgICAgIG1fbWVt
b3J5U2l6ZUdQUiA9IGluZm8ubWVtb3J5LnBpbm5lZFJlZ2lzdGVycygpLnNpemVSZWdpc3RlcnNb
MF0uc2l6ZVJlZ2lzdGVyOworICAgICAgICBmb3IgKGNvbnN0IFBpbm5lZFNpemVSZWdpc3Rlcklu
Zm8mIHJlZ0luZm8gOiBpbmZvLm1lbW9yeS5waW5uZWRSZWdpc3RlcnMoKS5zaXplUmVnaXN0ZXJz
KQorICAgICAgICAgICAgbV9wcm9jLnBpblJlZ2lzdGVyKHJlZ0luZm8uc2l6ZVJlZ2lzdGVyKTsK
IAogICAgICAgICBtX3Byb2Muc2V0V2FzbUJvdW5kc0NoZWNrR2VuZXJhdG9yKFs9XSAoQ0NhbGxI
ZWxwZXJzJiBqaXQsIEdQUlJlZyBwaW5uZWRHUFIsIHVuc2lnbmVkKSB7CiAgICAgICAgICAgICBB
bGxvd01hY3JvU2NyYXRjaFJlZ2lzdGVyVXNhZ2UgYWxsb3dTY3JhdGNoKGppdCk7CkBAIC0yNzEs
NyArMjc4LDggQEAgQjNJUkdlbmVyYXRvcjo6QjNJUkdlbmVyYXRvcihWTSYgdm0sIGNvbnN0IE1l
bW9yeUluZm9ybWF0aW9uJiBtZW1vcnksIFByb2NlZHVyZSYKIAogICAgIHdhc21DYWxsaW5nQ29u
dmVudGlvbigpLnNldHVwRnJhbWVJblByb2xvZ3VlKCZjb21waWxhdGlvbi0+d2FzbUNhbGxlZU1v
dmVMb2NhdGlvbiwgbV9wcm9jLCBPcmlnaW4oKSwgbV9jdXJyZW50QmxvY2spOwogCi0gICAgbV9m
dW5jdGlvbkluZGV4U3BhY2VWYWx1ZSA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29uc3RQ
dHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgZnVuY3Rpb25JbmRleFNwYWNlLmJ1ZmZlci5nZXQo
KSk7CisgICAgbV9pbnN0YW5jZVZhbHVlID0gbV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxNZW1v
cnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4oKSwKKyAgICAgICAg
bV9jdXJyZW50QmxvY2stPmFwcGVuZE5ldzxDb25zdFB0clZhbHVlPihtX3Byb2MsIE9yaWdpbigp
LCAmbV92bS50b3BKU1dlYkFzc2VtYmx5SW5zdGFuY2UpKTsKIH0KIAogVmFsdWUqIEIzSVJHZW5l
cmF0b3I6Onplcm9Gb3JUeXBlKFR5cGUgdHlwZSkKQEAgLTMyNSw2ICszMzMsMjEgQEAgYm9vbCBC
M0lSR2VuZXJhdG9yOjpzZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFs
dWUpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgQjNJUkdlbmVyYXRvcjo6Z2V0R2xvYmFs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSYgcmVzdWx0KQoreworICAgIFZhbHVlKiBn
bG9iYWxzQXJyYXkgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIExvYWQsIHBvaW50ZXJUeXBlKCksIE9yaWdpbigpLCBtX2luc3RhbmNlVmFsdWUsIEpTV2Vi
QXNzZW1ibHlJbnN0YW5jZTo6b2Zmc2V0T2ZHbG9iYWxzKCkpOworICAgIHJlc3VsdCA9IG1fY3Vy
cmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwgdG9CM1R5cGUo
bV9pbmZvLmdsb2JhbHNbaW5kZXhdLnR5cGUpLCBPcmlnaW4oKSwgZ2xvYmFsc0FycmF5LCBpbmRl
eCAqIHNpemVvZihSZWdpc3RlcikpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEIzSVJH
ZW5lcmF0b3I6OnNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUgdmFsdWUp
Cit7CisgICAgQVNTRVJUKHRvQjNUeXBlKG1faW5mby5nbG9iYWxzW2luZGV4XS50eXBlKSA9PSB2
YWx1ZS0+dHlwZSgpKTsKKyAgICBWYWx1ZSogZ2xvYmFsc0FycmF5ID0gbV9jdXJyZW50QmxvY2st
PmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmln
aW4oKSwgbV9pbnN0YW5jZVZhbHVlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNldE9mR2xv
YmFscygpKTsKKyAgICBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3By
b2MsIFN0b3JlLCBPcmlnaW4oKSwgdmFsdWUsIGdsb2JhbHNBcnJheSwgaW5kZXggKiBzaXplb2Yo
UmVnaXN0ZXIpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwogaW5saW5lIFZhbHVlKiBCM0lSR2Vu
ZXJhdG9yOjplbWl0Q2hlY2tBbmRQcmVwYXJlUG9pbnRlcihFeHByZXNzaW9uVHlwZSBwb2ludGVy
LCB1aW50MzJfdCBvZmZzZXQsIHVpbnQzMl90IHNpemVPZk9wZXJhdGlvbikKIHsKICAgICBBU1NF
UlQobV9tZW1vcnlCYXNlR1BSICYmIG1fbWVtb3J5U2l6ZUdQUik7CkBAIC02NzQsMTAgKzY5Nyw4
IEBAIGJvb2wgQjNJUkdlbmVyYXRvcjo6YWRkQ2FsbEluZGlyZWN0KGNvbnN0IFNpZ25hdHVyZSog
c2lnbmF0dXJlLCBWZWN0b3I8RXhwcmVzc2lvCiAgICAgRXhwcmVzc2lvblR5cGUgY2FsbGFibGVG
dW5jdGlvbkJ1ZmZlcjsKICAgICBFeHByZXNzaW9uVHlwZSBjYWxsYWJsZUZ1bmN0aW9uQnVmZmVy
U2l6ZTsKICAgICB7Ci0gICAgICAgIEV4cHJlc3Npb25UeXBlIHRvcEluc3RhbmNlID0gbV9jdXJy
ZW50QmxvY2stPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlw
ZSgpLCBPcmlnaW4oKSwKLSAgICAgICAgICAgIG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8Q29u
c3RQdHJWYWx1ZT4obV9wcm9jLCBPcmlnaW4oKSwgJm1fdm0udG9wSlNXZWJBc3NlbWJseUluc3Rh
bmNlKSk7CiAgICAgICAgIEV4cHJlc3Npb25UeXBlIHRhYmxlID0gbV9jdXJyZW50QmxvY2stPmFw
cGVuZE5ldzxNZW1vcnlWYWx1ZT4obV9wcm9jLCBMb2FkLCBwb2ludGVyVHlwZSgpLCBPcmlnaW4o
KSwKLSAgICAgICAgICAgIHRvcEluc3RhbmNlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6Om9mZnNl
dE9mVGFibGUoKSk7CisgICAgICAgICAgICBtX2luc3RhbmNlVmFsdWUsIEpTV2ViQXNzZW1ibHlJ
bnN0YW5jZTo6b2Zmc2V0T2ZUYWJsZSgpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1ZmZl
ciA9IG1fY3VycmVudEJsb2NrLT5hcHBlbmROZXc8TWVtb3J5VmFsdWU+KG1fcHJvYywgTG9hZCwg
cG9pbnRlclR5cGUoKSwgT3JpZ2luKCksCiAgICAgICAgICAgICB0YWJsZSwgSlNXZWJBc3NlbWJs
eVRhYmxlOjpvZmZzZXRPZkZ1bmN0aW9ucygpKTsKICAgICAgICAgY2FsbGFibGVGdW5jdGlvbkJ1
ZmZlclNpemUgPSBtX2N1cnJlbnRCbG9jay0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPihtX3Byb2Ms
IExvYWQsIEludDMyLCBPcmlnaW4oKSwKQEAgLTg3Miw3ICs4OTMsNyBAQCBzdGQ6OnVuaXF1ZV9w
dHI8V2FzbUludGVybmFsRnVuY3Rpb24+IHBhcnNlQW5kQ29tcGlsZShWTSYgdm0sIGNvbnN0IHVp
bnQ4X3QqIGZ1bgogICAgIGF1dG8gcmVzdWx0ID0gc3RkOjptYWtlX3VuaXF1ZTxXYXNtSW50ZXJu
YWxGdW5jdGlvbj4oKTsKIAogICAgIFByb2NlZHVyZSBwcm9jZWR1cmU7Ci0gICAgQjNJUkdlbmVy
YXRvciBjb250ZXh0KHZtLCBpbmZvLm1lbW9yeSwgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVu
bGlua2VkV2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4U3BhY2UpOworICAgIEIzSVJHZW5l
cmF0b3IgY29udGV4dCh2bSwgaW5mbywgcHJvY2VkdXJlLCByZXN1bHQuZ2V0KCksIHVubGlua2Vk
V2FzbVRvV2FzbUNhbGxzLCBmdW5jdGlvbkluZGV4U3BhY2UpOwogICAgIEZ1bmN0aW9uUGFyc2Vy
PEIzSVJHZW5lcmF0b3I+IHBhcnNlcihjb250ZXh0LCBmdW5jdGlvblN0YXJ0LCBmdW5jdGlvbkxl
bmd0aCwgc2lnbmF0dXJlLCBmdW5jdGlvbkluZGV4U3BhY2UsIGluZm8pOwogICAgIGlmICghcGFy
c2VyLnBhcnNlKCkpCiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgKaW5kZXggODU4OTU4NTZmYTVhNTNmY2Rl
YWI3YTBjZTQwNjJmNDg2YTk5MjVmOC4uODEyZWMyYzUzYjJiNTM5NTg3YmJhOWY4ZTc2MjVmNTBk
NDJiMTE5OCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1h
dC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaApAQCAtOTMs
NyArOTMsNyBAQCBzdHJ1Y3QgU2lnbmF0dXJlIHsKICAgICBUeXBlIHJldHVyblR5cGU7CiAgICAg
VmVjdG9yPFR5cGU+IGFyZ3VtZW50czsKIH07Ci0gICAgCisKIHN0cnVjdCBJbXBvcnQgewogICAg
IElkZW50aWZpZXIgbW9kdWxlOwogICAgIElkZW50aWZpZXIgZmllbGQ7CkBAIC0xMDQsMTIgKzEw
NCwyNSBAQCBzdHJ1Y3QgSW1wb3J0IHsKIHN0cnVjdCBFeHBvcnQgewogICAgIElkZW50aWZpZXIg
ZmllbGQ7CiAgICAgRXh0ZXJuYWw6OktpbmQga2luZDsKLSAgICB1bmlvbiB7Ci0gICAgICAgIHVp
bnQzMl90IGZ1bmN0aW9uSW5kZXg7Ci0gICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBUYWJsZSBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzgyCi0gICAgICAgIC8v
IEZJWE1FIGltcGxlbWVudCBNZW1vcnkgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE2NTY3MQotICAgICAgICAvLyBGSVhNRSBpbXBsZW1lbnQgR2xvYmFsIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMKKyAgICB1bnNpZ25lZCBraW5k
SW5kZXg7IC8vIEluZGV4IGluIHRoZSB2ZWN0b3Igb2YgdGhlIGNvcnJlc3BvbmRpbmcga2luZC4K
K307CisKK3N0cnVjdCBHbG9iYWwgeworICAgIGVudW0gTXV0YWJpbGl0eSA6IHVpbnQ4X3Qgewor
ICAgICAgICBNdXRhYmxlID0gMSwKKyAgICAgICAgSW1tdXRhYmxlID0gMAorICAgIH07CisKKyAg
ICBlbnVtIEluaXRpYWxpemF0aW9uVHlwZSB7CisgICAgICAgIElzSW1wb3J0LAorICAgICAgICBG
cm9tR2xvYmFsSW1wb3J0LAorICAgICAgICBGcm9tRXhwcmVzc2lvbgogICAgIH07CisKKyAgICBN
dXRhYmlsaXR5IG11dGFibGl0eTsKKyAgICBUeXBlIHR5cGU7CisgICAgSW5pdGlhbGl6YXRpb25U
eXBlIGluaXRpYWxpemF0aW9uVHlwZSB7IElzSW1wb3J0IH07CisgICAgaW50NjRfdCBpbml0aWFs
Qml0c09ySW1wb3J0TnVtYmVyIHsgMCB9OwogfTsKIAogc3RydWN0IEZ1bmN0aW9uTG9jYXRpb25J
bkJpbmFyeSB7CkBAIC0xNzksMTMgKzE5MiwxNCBAQCBzdHJ1Y3QgTW9kdWxlSW5mb3JtYXRpb24g
ewogICAgIFZlY3RvcjxTaWduYXR1cmU+IHNpZ25hdHVyZXM7CiAgICAgVmVjdG9yPEltcG9ydD4g
aW1wb3J0czsKICAgICBWZWN0b3I8U2lnbmF0dXJlKj4gaW1wb3J0RnVuY3Rpb25zOwotICAgIC8v
IEZJWE1FIGltcGxlbWVudCBpbXBvcnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQxMzMKICAgICBWZWN0b3I8U2lnbmF0dXJlKj4gaW50ZXJuYWxGdW5j
dGlvblNpZ25hdHVyZXM7CiAgICAgTWVtb3J5SW5mb3JtYXRpb24gbWVtb3J5OwogICAgIFZlY3Rv
cjxFeHBvcnQ+IGV4cG9ydHM7CiAgICAgc3RkOjpvcHRpb25hbDx1aW50MzJfdD4gc3RhcnRGdW5j
dGlvbkluZGV4U3BhY2U7CiAgICAgVmVjdG9yPFNlZ21lbnQ6OlB0cj4gZGF0YTsKICAgICBUYWJs
ZUluZm9ybWF0aW9uIHRhYmxlSW5mb3JtYXRpb247CisgICAgVmVjdG9yPEdsb2JhbD4gZ2xvYmFs
czsKKyAgICB1bnNpZ25lZCBmaXJzdEludGVybmFsR2xvYmFsIHsgMCB9OwogCiAgICAgfk1vZHVs
ZUluZm9ybWF0aW9uKCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dh
c20vV2FzbUZ1bmN0aW9uUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
RnVuY3Rpb25QYXJzZXIuaAppbmRleCA4ODI4M2JhZmU0ZTZiNDQ1MThjYTFhMzE2OTYwNzY4Zjhh
ZDRhN2I5Li4yMzFjMGExOTJkNmY4MTczZjhhNmVlMDI5MDkwZDk1NGIxMTFiYWRjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRnVuY3Rpb25QYXJzZXIuaApAQCAtMzUx
LDYgKzM1MSwyOCBAQCBib29sIEZ1bmN0aW9uUGFyc2VyPENvbnRleHQ+OjpwYXJzZUV4cHJlc3Np
b24oT3BUeXBlIG9wKQogICAgICAgICByZXR1cm4gbV9jb250ZXh0LnNldExvY2FsKGluZGV4LCBt
X2V4cHJlc3Npb25TdGFjay5sYXN0KCkpOwogICAgIH0KIAorICAgIGNhc2UgT3BUeXBlOjpHZXRH
bG9iYWw6IHsKKyAgICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgIGlmICghcGFyc2VWYXJV
SW50MzIoaW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBFeHByZXNz
aW9uVHlwZSByZXN1bHQ7CisgICAgICAgIGlmICghbV9jb250ZXh0LmdldEdsb2JhbChpbmRleCwg
cmVzdWx0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBtX2V4cHJlc3Np
b25TdGFjay5hcHBlbmQocmVzdWx0KTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgY2FzZSBPcFR5cGU6OlNldEdsb2JhbDogeworICAgICAgICB1aW50MzJfdCBpbmRleDsKKyAg
ICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIEV4cHJlc3Npb25UeXBlIHZhbHVlOworICAgICAgICBpZiAoIXBvcEV4cHJl
c3Npb25TdGFjayh2YWx1ZSkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiBtX2NvbnRleHQuc2V0R2xvYmFsKGluZGV4LCB2YWx1ZSk7CisgICAgfQorCiAgICAgY2Fz
ZSBPcFR5cGU6OkNhbGw6IHsKICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleDsKICAgICAg
ICAgaWYgKCFwYXJzZVZhclVJbnQzMihmdW5jdGlvbkluZGV4KSkKQEAgLTU2MywxMiArNTg1LDkg
QEAgYm9vbCBGdW5jdGlvblBhcnNlcjxDb250ZXh0Pjo6cGFyc2VFeHByZXNzaW9uKE9wVHlwZSBv
cCkKIAogICAgIGNhc2UgT3BUeXBlOjpHcm93TWVtb3J5OgogICAgIGNhc2UgT3BUeXBlOjpDdXJy
ZW50TWVtb3J5OgotICAgIGNhc2UgT3BUeXBlOjpHZXRHbG9iYWw6Ci0gICAgY2FzZSBPcFR5cGU6
OlNldEdsb2JhbDogewogICAgICAgICAvLyBGSVhNRTogTm90IHlldCBpbXBsZW1lbnRlZC4KICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICB9CiAKICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5jcHAKaW5kZXggZjkyNjc5Y2RlNzQ3MzI1NTlhYjVjMzQ0ZWVhNWI3MTk5YzAwYWExOC4uNjhl
MTU3MmM0YjdjYmFjN2QyMDhkZGM2MGY4MTZkNTU4MmFjNmI3OSAxMDA2NDQKLS0tIGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAKQEAgLTIxNyw2ICsyMTcsNyBA
QCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgIHVpbnQzMl90IGltcG9ydENv
dW50OwogICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW1wb3J0Q291bnQpCiAgICAgICAgIHx8IGlt
cG9ydENvdW50ID09IHN0ZDo6bnVtZXJpY19saW1pdHM8dWludDMyX3Q+OjptYXgoKQorICAgICAg
ICB8fCAhbV9tb2R1bGUtPmdsb2JhbHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGltcG9ydENvdW50KSAv
LyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cu
CiAgICAgICAgIHx8ICFtX21vZHVsZS0+aW1wb3J0cy50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0
Q291bnQpIC8vIEZJWE1FIHRoaXMgb3Zlci1hbGxvY2F0ZXMgd2hlbiB3ZSBmaXggdGhlIEZJWE1F
cyBiZWxvdy4KICAgICAgICAgfHwgIW1fbW9kdWxlLT5pbXBvcnRGdW5jdGlvbnMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGltcG9ydENvdW50KSAvLyBGSVhNRSB0aGlzIG92ZXItYWxsb2NhdGVzIHdoZW4g
d2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuCiAgICAgICAgIHx8ICFtX2Z1bmN0aW9uSW5kZXhTcGFj
ZS50cnlSZXNlcnZlQ2FwYWNpdHkoaW1wb3J0Q291bnQpKSAvLyBGSVhNRSB0aGlzIG92ZXItYWxs
b2NhdGVzIHdoZW4gd2UgZml4IHRoZSBGSVhNRXMgYmVsb3cuIFdlJ2xsIGFsbG9jYXRlIHNvbWUg
bW9yZSBoZXJlIHdoZW4gd2Uga25vdyBob3cgbWFueSBmdW5jdGlvbnMgdG8gZXhwZWN0LgpAQCAt
MjYzLDggKzI2NCwxMiBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VJbXBvcnQoKQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBFeHRlcm5hbDo6R2xvYmFsOiB7
Ci0gICAgICAgICAgICAvLyBGSVhNRSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTMzCi0gICAgICAgICAgICAvLyBJbiB0aGUgTVZQLCBvbmx5IGltbXV0YWJsZSBn
bG9iYWwgdmFyaWFibGVzIGNhbiBiZSBpbXBvcnRlZC4KKyAgICAgICAgICAgIEdsb2JhbCBnbG9i
YWw7CisgICAgICAgICAgICBpZiAoIXBhcnNlR2xvYmFsVHlwZShnbG9iYWwpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaW1wLmtpbmRJbmRleCA9IG1fbW9k
dWxlLT5nbG9iYWxzLnNpemUoKTsKKyAgICAgICAgICAgIG1fbW9kdWxlLT5nbG9iYWxzLnVuY2hl
Y2tlZEFwcGVuZChXVEZNb3ZlKGdsb2JhbCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgfQpAQCAtMjcyLDYgKzI3Nyw3IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJz
ZUltcG9ydCgpCiAgICAgICAgIG1fbW9kdWxlLT5pbXBvcnRzLnVuY2hlY2tlZEFwcGVuZChpbXAp
OwogICAgIH0KIAorICAgIG1fbW9kdWxlLT5maXJzdEludGVybmFsR2xvYmFsID0gbV9tb2R1bGUt
Pmdsb2JhbHMuc2l6ZSgpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC00MjMsOCArNDI5LDk3
IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZU1lbW9yeSgpCiAKIGJvb2wgTW9kdWxlUGFyc2Vy
OjpwYXJzZUdsb2JhbCgpCiB7Ci0gICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE2NDEzMwotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgdWludDMyX3QgZ2xvYmFsQ291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihnbG9i
YWxDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAoIW1fbW9kdWxlLT5nbG9i
YWxzLnRyeVJlc2VydmVDYXBhY2l0eShnbG9iYWxDb3VudCArIG1fbW9kdWxlLT5maXJzdEludGVy
bmFsR2xvYmFsKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgZm9yICh1aW50MzJfdCBn
bG9iYWxJbmRleCA9IDA7IGdsb2JhbEluZGV4IDwgZ2xvYmFsQ291bnQ7ICsrZ2xvYmFsSW5kZXgp
IHsKKyAgICAgICAgR2xvYmFsIGdsb2JhbDsKKyAgICAgICAgaWYgKCFwYXJzZUdsb2JhbFR5cGUo
Z2xvYmFsKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICB1aW50OF90IGlu
aXRpYWxpemVyT3Bjb2RlOworICAgICAgICBpZiAoIXBhcnNlVUludDgoaW5pdGlhbGl6ZXJPcGNv
ZGUpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGdsb2JhbC5pbml0aWFs
aXphdGlvblR5cGUgPSBHbG9iYWw6OkZyb21FeHByZXNzaW9uOworICAgICAgICBzd2l0Y2ggKGlu
aXRpYWxpemVyT3Bjb2RlKSB7CisgICAgICAgIGNhc2UgSTMyQ29uc3Q6IHsKKyAgICAgICAgICAg
IGlmIChnbG9iYWwudHlwZSAhPSBJMzIpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICAgICAgaW50MzJfdCBjb25zdGFudDsKKyAgICAgICAgICAgIGlmICghcGFyc2VWYXJJ
bnQzMihjb25zdGFudCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAg
ICAgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPSBzdGF0aWNfY2FzdDx1aW50NjRf
dD4oY29uc3RhbnQpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBj
YXNlIEk2NENvbnN0OiB7CisgICAgICAgICAgICBpZiAoZ2xvYmFsLnR5cGUgIT0gSTY0KQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgaW50NjRfdCBjb25zdGFu
dDsKKyAgICAgICAgICAgIGlmICghcGFyc2VWYXJJbnQ2NChjb25zdGFudCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBv
cnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAg
ICAgICAgY2FzZSBGMzJDb25zdDogeworICAgICAgICAgICAgaWYgKGdsb2JhbC50eXBlICE9IEYz
MikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHVpbnQzMl90
IGNvbnN0YW50OworICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQzMihjb25zdGFudCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxCaXRz
T3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisKKyAgICAgICAgY2FzZSBGNjRDb25zdDogeworICAgICAgICAgICAgaWYgKGdsb2JhbC50eXBl
ICE9IEY2NCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHVp
bnQ2NF90IGNvbnN0YW50OworICAgICAgICAgICAgaWYgKCFwYXJzZVVJbnQ2NChjb25zdGFudCkp
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgZ2xvYmFsLmluaXRp
YWxCaXRzT3JJbXBvcnROdW1iZXIgPSBjb25zdGFudDsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisKKyAgICAgICAgY2FzZSBHZXRHbG9iYWw6IHsKKyAgICAgICAgICAgIHVpbnQzMl90
IGluZGV4OworICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihpbmRleCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoaW5kZXggPj0gbV9tb2R1
bGUtPmltcG9ydHMuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgICAgIGNvbnN0IEltcG9ydCYgaW1wb3J0ID0gbV9tb2R1bGUtPmltcG9ydHNbaW5kZXhdOwor
ICAgICAgICAgICAgaWYgKG1fbW9kdWxlLT5pbXBvcnRzW2luZGV4XS5raW5kICE9IEV4dGVybmFs
OjpHbG9iYWwKKyAgICAgICAgICAgICAgICB8fCBpbXBvcnQua2luZEluZGV4ID49IG1fbW9kdWxl
LT5maXJzdEludGVybmFsR2xvYmFsCisgICAgICAgICAgICAgICAgfHwgbV9tb2R1bGUtPmdsb2Jh
bHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSAhPSBnbG9iYWwudHlwZSkKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIEFTU0VSVChtX21vZHVsZS0+Z2xvYmFsc1tp
bXBvcnQua2luZEluZGV4XS5tdXRhYmxpdHkgPT0gR2xvYmFsOjpJbW11dGFibGUpOworCisgICAg
ICAgICAgICBnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID0gR2xvYmFsOjpGcm9tR2xvYmFsSW1w
b3J0OworICAgICAgICAgICAgZ2xvYmFsLmluaXRpYWxCaXRzT3JJbXBvcnROdW1iZXIgPSBpbmRl
eDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorCisgICAgICAgIHVpbnQ4X3QgZW5k
T3Bjb2RlOworICAgICAgICBpZiAoIXBhcnNlVUludDgoZW5kT3Bjb2RlKSB8fCBlbmRPcGNvZGUg
IT0gT3BUeXBlOjpFbmQpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgbV9t
b2R1bGUtPmdsb2JhbHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZ2xvYmFsKSk7CisgICAgfQor
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTQ0OCwxMCArNTQzLDEyIEBAIGJvb2wgTW9kdWxl
UGFyc2VyOjpwYXJzZUV4cG9ydCgpCiAgICAgICAgIGlmICghcGFyc2VFeHRlcm5hbEtpbmQoZXhw
LmtpbmQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCisgICAgICAgIGlmICghcGFyc2VW
YXJVSW50MzIoZXhwLmtpbmRJbmRleCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKICAg
ICAgICAgc3dpdGNoIChleHAua2luZCkgewogICAgICAgICBjYXNlIEV4dGVybmFsOjpGdW5jdGlv
bjogewotICAgICAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMihleHAuZnVuY3Rpb25JbmRleCkK
LSAgICAgICAgICAgICAgICB8fCBleHAuZnVuY3Rpb25JbmRleCA+PSBtX2Z1bmN0aW9uSW5kZXhT
cGFjZS5zaXplKCkpCisgICAgICAgICAgICBpZiAoZXhwLmtpbmRJbmRleCA+PSBtX2Z1bmN0aW9u
SW5kZXhTcGFjZS5zaXplKCkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTQ2NCw4ICs1NjEsMTEgQEAgYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlRXhwb3J0KCkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2UgRXh0ZXJuYWw6Okdsb2JhbDogewotICAgICAgICAgICAgLy8gRklYTUUgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwotICAgICAgICAgICAgLy8g
SW4gdGhlIE1WUCwgb25seSBpbW11dGFibGUgZ2xvYmFsIHZhcmlhYmxlcyBjYW4gYmUgZXhwb3J0
ZWQuCisgICAgICAgICAgICBpZiAoZXhwLmtpbmRJbmRleCA+PSBtX21vZHVsZS0+Z2xvYmFscy5z
aXplKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAo
bV9tb2R1bGUtPmdsb2JhbHNbZXhwLmtpbmRJbmRleF0ubXV0YWJsaXR5ICE9IEdsb2JhbDo6SW1t
dXRhYmxlKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgIH0KQEAgLTUyMCw2ICs2MjAsMTUgQEAgYm9vbCBNb2R1bGVQ
YXJzZXI6OnBhcnNlQ29kZSgpCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgTW9kdWxlUGFy
c2VyOjpwYXJzZUdsb2JhbFR5cGUoR2xvYmFsJiBnbG9iYWwpCit7CisgICAgdWludDhfdCBtdXRh
YmlsaXR5OworICAgIGlmICghcGFyc2VWYWx1ZVR5cGUoZ2xvYmFsLnR5cGUpIHx8ICFwYXJzZVZh
clVJbnQxKG11dGFiaWxpdHkpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgZ2xvYmFsLm11
dGFibGl0eSA9IHN0YXRpY19jYXN0PEdsb2JhbDo6TXV0YWJpbGl0eT4obXV0YWJpbGl0eSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZURhdGEoKQogewog
ICAgIHVpbnQzMl90IHNlZ21lbnRDb3VudDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L1dhc21Nb2R1bGVQYXJzZXIuaAppbmRleCA0ZDE3MjZlMzRkNjE1YjU1OGU1YmRmMjYxYzIwNWQ2
NGVjYjI4MzdmLi41ZjI4ZmQ4NTcxZWYxZDFlZjg4ODM4ZTE1N2JiZTU5Yjg1NTRkNWEzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCkBAIC03NCw2
ICs3NCw4IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6CisgICAgYm9vbCBwYXJzZUdsb2Jh
bFR5cGUoR2xvYmFsJik7CisKICNkZWZpbmUgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSKE5B
TUUsIElELCBERVNDUklQVElPTikgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2UgIyMgTkFN
RSgpOwogICAgIEZPUl9FQUNIX1dBU01fU0VDVElPTihXQVNNX1NFQ1RJT05fREVDTEFSRV9QQVJT
RVIpCiAjdW5kZWYgV0FTTV9TRUNUSU9OX0RFQ0xBUkVfUEFSU0VSCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtUGFyc2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvd2FzbS9XYXNtUGFyc2VyLmgKaW5kZXggZWVlMzliNDVmNjQ5OWE3OTE2ZTQ2OTA3ZDI4OTE3
ZTlkZWMwN2I0MS4uMDhmYWJiZjZhNjBkNTZkZTE1MWU0MTE0MjE3MzdkYWU1MGRjMTU4YyAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbVBhcnNlci5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21QYXJzZXIuaApAQCAtNTEsOSArNTEsMTMgQEAg
cHJvdGVjdGVkOgogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDcodWludDhf
dCYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDgodWludDhfdCYpOwog
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVUludDMyKHVpbnQzMl90Jik7CisgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VVSW50NjQodWludDY0X3QmKTsKICAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhclVJbnQzMih1aW50MzJfdCYpOwogICAgIGJvb2wg
V0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlVmFyVUludDY0KHVpbnQ2NF90Jik7CiAKKyAgICBib29s
IFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhckludDMyKGludDMyX3QmKTsKKyAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZVZhckludDY0KGludDY0X3QmKTsKKwogICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlUmVzdWx0VHlwZShUeXBlJik7CiAgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VWYWx1ZVR5cGUoVHlwZSYpOwogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHBhcnNlRXh0ZXJuYWxLaW5kKEV4dGVybmFsOjpLaW5kJik7CkBAIC0xMjQsNiArMTI4
LDE2IEBAIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFyVUludDY0KHVpbnQ2NF90
JiByZXN1bHQpCiAgICAgcmV0dXJuIFdURjo6TEVCRGVjb2Rlcjo6ZGVjb2RlVUludDY0KG1fc291
cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3VsdCk7CiB9CiAKK0FMV0FZU19JTkxJ
TkUgYm9vbCBQYXJzZXI6OnBhcnNlVmFySW50MzIoaW50MzJfdCYgcmVzdWx0KQoreworICAgIHJl
dHVybiBXVEY6OkxFQkRlY29kZXI6OmRlY29kZUludDMyKG1fc291cmNlLCBtX3NvdXJjZUxlbmd0
aCwgbV9vZmZzZXQsIHJlc3VsdCk7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBh
cnNlVmFySW50NjQoaW50NjRfdCYgcmVzdWx0KQoreworICAgIHJldHVybiBXVEY6OkxFQkRlY29k
ZXI6OmRlY29kZUludDY0KG1fc291cmNlLCBtX3NvdXJjZUxlbmd0aCwgbV9vZmZzZXQsIHJlc3Vs
dCk7Cit9CisKIEFMV0FZU19JTkxJTkUgYm9vbCBQYXJzZXI6OnBhcnNlVUludDMyKHVpbnQzMl90
JiByZXN1bHQpCiB7CiAgICAgaWYgKGxlbmd0aCgpIDwgNCB8fCBtX29mZnNldCA+IGxlbmd0aCgp
IC0gNCkKQEAgLTEzMyw2ICsxNDcsMTUgQEAgQUxXQVlTX0lOTElORSBib29sIFBhcnNlcjo6cGFy
c2VVSW50MzIodWludDMyX3QmIHJlc3VsdCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorQUxXQVlT
X0lOTElORSBib29sIFBhcnNlcjo6cGFyc2VVSW50NjQodWludDY0X3QmIHJlc3VsdCkKK3sKKyAg
ICBpZiAobGVuZ3RoKCkgPCA4IHx8IG1fb2Zmc2V0ID4gbGVuZ3RoKCkgLSA4KQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgcmVzdWx0ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDY0
X3QqPihzb3VyY2UoKSArIG1fb2Zmc2V0KTsKKyAgICBtX29mZnNldCArPSA4OworICAgIHJldHVy
biB0cnVlOworfQorCiBBTFdBWVNfSU5MSU5FIGJvb2wgUGFyc2VyOjpwYXJzZVVJbnQ4KHVpbnQ4
X3QmIHJlc3VsdCkKIHsKICAgICBpZiAobV9vZmZzZXQgPj0gbGVuZ3RoKCkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFsaWRhdGUuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vV2FzbVZhbGlkYXRlLmNwcAppbmRleCAyMmY5NWJiYTAyMjYzNWRj
NGYzMmU4NGRiZGRkNDUyYzZkNDYzYmRiLi43MTEyNmU3NjE0Mzc3NjNhMTI2Zjg2NTdiYmRmY2Ji
NDBlMTcyYzNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtVmFs
aWRhdGUuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21WYWxpZGF0ZS5j
cHAKQEAgLTg2LDYgKzg2LDEwIEBAIHB1YmxpYzoKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVS
TiBnZXRMb2NhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVzc2lvblR5cGUmIHJlc3VsdCk7CiAgICAg
Ym9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gc2V0TG9jYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Np
b25UeXBlIHZhbHVlKTsKIAorICAgIC8vIEdsb2JhbHMKKyAgICBib29sIFdBUk5fVU5VU0VEX1JF
VFVSTiBnZXRHbG9iYWwodWludDMyX3QgaW5kZXgsIEV4cHJlc3Npb25UeXBlJiByZXN1bHQpOwor
ICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHNldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhw
cmVzc2lvblR5cGUgdmFsdWUpOworCiAgICAgLy8gTWVtb3J5CiAgICAgYm9vbCBXQVJOX1VOVVNF
RF9SRVRVUk4gbG9hZChMb2FkT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNz
aW9uVHlwZSYgcmVzdWx0LCB1aW50MzJfdCBvZmZzZXQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURf
UkVUVVJOIHN0b3JlKFN0b3JlT3BUeXBlLCBFeHByZXNzaW9uVHlwZSBwb2ludGVyLCBFeHByZXNz
aW9uVHlwZSB2YWx1ZSwgdWludDMyX3Qgb2Zmc2V0KTsKQEAgLTEyMCw4ICsxMjQsOSBAQCBwdWJs
aWM6CiAKICAgICB2b2lkIHNldEVycm9yTWVzc2FnZShTdHJpbmcmJiBtZXNzYWdlKSB7IEFTU0VS
VChtX2Vycm9yTWVzc2FnZS5pc051bGwoKSk7IG1fZXJyb3JNZXNzYWdlID0gV1RGTW92ZShtZXNz
YWdlKTsgfQogICAgIFN0cmluZyBlcnJvck1lc3NhZ2UoKSBjb25zdCB7IHJldHVybiBtX2Vycm9y
TWVzc2FnZTsgfQotICAgIFZhbGlkYXRlKEV4cHJlc3Npb25UeXBlIHJldHVyblR5cGUsIGNvbnN0
IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkpCi0gICAgICAgIDogbV9yZXR1cm5UeXBlKHJldHVy
blR5cGUpCisgICAgVmFsaWRhdGUoRXhwcmVzc2lvblR5cGUgcmV0dXJuVHlwZSwgY29uc3QgVmVj
dG9yPEdsb2JhbD4mIGdsb2JhbHMsIGNvbnN0IE1lbW9yeUluZm9ybWF0aW9uJiBtZW1vcnkpCisg
ICAgICAgIDogbV9nbG9iYWxzKGdsb2JhbHMpCisgICAgICAgICwgbV9yZXR1cm5UeXBlKHJldHVy
blR5cGUpCiAgICAgICAgICwgbV9tZW1vcnkobWVtb3J5KQogICAgIHsKICAgICB9CkBAIC0xMzIs
NiArMTM3LDggQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgY2hlY2tCcmFuY2hUYXJnZXQoQ29udHJv
bERhdGEmIHRhcmdldCwgY29uc3QgRXhwcmVzc2lvbkxpc3QmIGV4cHJlc3Npb25TdGFjayk7CiAK
KyAgICBjb25zdCBWZWN0b3I8R2xvYmFsPiYgbV9nbG9iYWxzOworCiAgICAgRXhwcmVzc2lvblR5
cGUgbV9yZXR1cm5UeXBlOwogICAgIFZlY3RvcjxUeXBlPiBtX2xvY2FsczsKICAgICBTdHJpbmcg
bV9lcnJvck1lc3NhZ2U7CkBAIC0xODAsNiArMTg3LDM4IEBAIGJvb2wgVmFsaWRhdGU6OnNldExv
Y2FsKHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkKICAgICByZXR1cm4gZmFs
c2U7CiB9CiAKK2Jvb2wgVmFsaWRhdGU6OmdldEdsb2JhbCh1aW50MzJfdCBpbmRleCwgRXhwcmVz
c2lvblR5cGUmIHJlc3VsdCkKK3sKKyAgICBpZiAoaW5kZXggPCBtX2dsb2JhbHMuc2l6ZSgpKSB7
CisgICAgICAgIHJlc3VsdCA9IG1fZ2xvYmFsc1tpbmRleF0udHlwZTsKKyAgICAgICAgQVNTRVJU
KGlzVmFsdWVUeXBlKHJlc3VsdCkpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAg
bV9lcnJvck1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwoIkF0dGVtcHQgdG8gdXNlIHVua25vd24gZ2xv
YmFsLiIpOworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBWYWxpZGF0ZTo6c2V0R2xvYmFs
KHVpbnQzMl90IGluZGV4LCBFeHByZXNzaW9uVHlwZSB2YWx1ZSkKK3sKKyAgICBpZiAoaW5kZXgg
Pj0gbV9nbG9iYWxzLnNpemUoKSkgeworICAgICAgICBtX2Vycm9yTWVzc2FnZSA9IEFTQ0lJTGl0
ZXJhbCgiQXR0ZW1wdCB0byB1c2UgdW5rbm93biBnbG9iYWwuIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBpZiAobV9nbG9iYWxzW2luZGV4XS5tdXRhYmxpdHkgPT0gR2xv
YmFsOjpJbW11dGFibGUpIHsKKyAgICAgICAgbV9lcnJvck1lc3NhZ2UgPSBBU0NJSUxpdGVyYWwo
IkF0dGVtcHQgdG8gc3RvcmUgdG8gaW1tdXRhYmxlIGdsb2JhbC4iKTsKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgIH0KKworICAgIEV4cHJlc3Npb25UeXBlIGdsb2JhbFR5cGUgPSBtX2dsb2Jh
bHNbaW5kZXhdLnR5cGU7CisgICAgQVNTRVJUKGlzVmFsdWVUeXBlKGdsb2JhbFR5cGUpKTsKKyAg
ICBpZiAoZ2xvYmFsVHlwZSA9PSB2YWx1ZSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBt
X2Vycm9yTWVzc2FnZSA9IG1ha2VTdHJpbmcoIkF0dGVtcHQgdG8gc2V0IGdsb2JhbCB3aXRoIHR5
cGU6ICIsIHRvU3RyaW5nKGdsb2JhbFR5cGUpLCAiIHdpdGggYSB2YXJpYWJsZSBvZiB0eXBlOiAi
LCB0b1N0cmluZyh2YWx1ZSkpOworICAgIHJldHVybiBmYWxzZTsKK30KKwogVmFsaWRhdGU6OkNv
bnRyb2xUeXBlIFZhbGlkYXRlOjphZGRCbG9jayhUeXBlIHNpZ25hdHVyZSkKIHsKICAgICByZXR1
cm4gQ29udHJvbERhdGEoQmxvY2tUeXBlOjpCbG9jaywgc2lnbmF0dXJlKTsKQEAgLTQwMyw3ICs0
NDIsNyBAQCB2b2lkIFZhbGlkYXRlOjpkdW1wKGNvbnN0IFZlY3RvcjxDb250cm9sRW50cnk+Jiwg
Y29uc3QgRXhwcmVzc2lvbkxpc3QmKQogCiBTdHJpbmcgdmFsaWRhdGVGdW5jdGlvbihjb25zdCB1
aW50OF90KiBzb3VyY2UsIHNpemVfdCBsZW5ndGgsIGNvbnN0IFNpZ25hdHVyZSogc2lnbmF0dXJl
LCBjb25zdCBJbW11dGFibGVGdW5jdGlvbkluZGV4U3BhY2UmIGZ1bmN0aW9uSW5kZXhTcGFjZSwg
Y29uc3QgTW9kdWxlSW5mb3JtYXRpb24mIGluZm8pCiB7Ci0gICAgVmFsaWRhdGUgY29udGV4dChz
aWduYXR1cmUtPnJldHVyblR5cGUsIGluZm8ubWVtb3J5KTsKKyAgICBWYWxpZGF0ZSBjb250ZXh0
KHNpZ25hdHVyZS0+cmV0dXJuVHlwZSwgaW5mby5nbG9iYWxzLCBpbmZvLm1lbW9yeSk7CiAgICAg
RnVuY3Rpb25QYXJzZXI8VmFsaWRhdGU+IHZhbGlkYXRvcihjb250ZXh0LCBzb3VyY2UsIGxlbmd0
aCwgc2lnbmF0dXJlLCBmdW5jdGlvbkluZGV4U3BhY2UsIGluZm8pOwogCiAgICAgaWYgKCF2YWxp
ZGF0b3IucGFyc2UoKSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
anMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5jcHAKaW5kZXggOGUyMmIwN2U0N2Q3MTg3NjMyNTBk
NjJhZjBkNWQwMTM2NWUyMjk1NS4uM2YyYmJhNjc0NjdiZjgxYjAzMGU5YzJiYzFmMmY2Yzc0NWRh
ZjBiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3Nl
bWJseUluc3RhbmNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dl
YkFzc2VtYmx5SW5zdGFuY2UuY3BwCkBAIC0zOCw5ICszOCwxMSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotSlNXZWJBc3NlbWJseUluc3RhbmNlKiBKU1dlYkFzc2VtYmx5SW5zdGFuY2U6OmNyZWF0
ZShWTSYgdm0sIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1
bGUsIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiBtb2R1bGVOYW1lc3BhY2VPYmplY3QsIHVuc2ln
bmVkIG51bUltcG9ydEZ1bmN0aW9ucykKK0pTV2ViQXNzZW1ibHlJbnN0YW5jZSogSlNXZWJBc3Nl
bWJseUluc3RhbmNlOjpjcmVhdGUoVk0mIHZtLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNXZWJB
c3NlbWJseU1vZHVsZSogbW9kdWxlLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCogbW9kdWxlTmFt
ZXNwYWNlT2JqZWN0LCBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgaW5mbykKIHsKLSAg
ICBhdXRvKiBpbnN0YW5jZSA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTV2ViQXNzZW1i
bHlJbnN0YW5jZT4odm0uaGVhcCwgYWxsb2NhdGlvblNpemUobnVtSW1wb3J0RnVuY3Rpb25zKSkp
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZSh2bSwgc3RydWN0dXJlLCBudW1JbXBvcnRGdW5jdGlvbnMp
OworICAgIC8vIEZJWE1FOiBUaGVzZSBvYmplY3RzIMOnb3VsZCBiZSBwcmV0dHkgYmlnIHdlIHNo
b3VsZCB0cnkgdG8gdGhyb3cgT09NIGhlcmUuCisgICAgYXV0byogaW5zdGFuY2UgPSBuZXcgKE5v
dE51bGwsIGFsbG9jYXRlQ2VsbDxKU1dlYkFzc2VtYmx5SW5zdGFuY2U+KHZtLmhlYXAsIGFsbG9j
YXRpb25TaXplKGluZm8uaW1wb3J0RnVuY3Rpb25zLnNpemUoKSkpKSBKU1dlYkFzc2VtYmx5SW5z
dGFuY2Uodm0sIHN0cnVjdHVyZSwgaW5mby5pbXBvcnRGdW5jdGlvbnMuc2l6ZSgpKTsKKyAgICBp
bnN0YW5jZS0+bV9nbG9iYWxzID0gcmVpbnRlcnByZXRfY2FzdDxHbG9iYWxEYXRhRGVzY3JpcHRv
cio+KGZhc3RNYWxsb2MoaW5mby5nbG9iYWxzLnNpemUoKSAqIHNpemVvZihSZWdpc3RlcikpKTsK
ICAgICBpbnN0YW5jZS0+ZmluaXNoQ3JlYXRpb24odm0sIG1vZHVsZSwgbW9kdWxlTmFtZXNwYWNl
T2JqZWN0KTsKICAgICByZXR1cm4gaW5zdGFuY2U7CiB9CkBAIC02Niw2ICs2OCwxMSBAQCB2b2lk
IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtLCBKU1dlYkFzc2Vt
Ymx5TW9kdWxlKiBtb2R1bGUsCiAgICAgcHV0RGlyZWN0KHZtLCBJZGVudGlmaWVyOjpmcm9tU3Ry
aW5nKCZ2bSwgImV4cG9ydHMiKSwgbW9kdWxlTmFtZXNwYWNlT2JqZWN0LCBOb25lKTsKIH0KIAor
SlNXZWJBc3NlbWJseUluc3RhbmNlOjp+SlNXZWJBc3NlbWJseUluc3RhbmNlKCkKK3sKKyAgICBm
YXN0RnJlZShtX2dsb2JhbHMpOworfQorCiB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6ZGVz
dHJveShKU0NlbGwqIGNlbGwpCiB7CiAgICAgc3RhdGljX2Nhc3Q8SlNXZWJBc3NlbWJseUluc3Rh
bmNlKj4oY2VsbCktPkpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6fkpTV2ViQXNzZW1ibHlJbnN0YW5j
ZSgpOwpAQCAtODEsNiArODgsNyBAQCB2b2lkIEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6dmlzaXRD
aGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogICAgIHZpc2l0b3Iu
YXBwZW5kKCZ0aGlzT2JqZWN0LT5tX21vZHVsZU5hbWVzcGFjZU9iamVjdCk7CiAgICAgdmlzaXRv
ci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fbWVtb3J5KTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhp
c09iamVjdC0+bV90YWJsZSk7CisgICAgdmlzaXRvci5hZGRPcGFxdWVSb290KHRoaXNPYmplY3Qt
Pm1fZ2xvYmFscyk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRoaXNPYmplY3QtPm1f
bnVtSW1wb3J0RnVuY3Rpb25zOyArK2kpCiAgICAgICAgIHZpc2l0b3IuYXBwZW5kKHRoaXNPYmpl
Y3QtPmltcG9ydEZ1bmN0aW9uKGkpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlJbnN0YW5jZS5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL3dhc20vanMvSlNXZWJBc3NlbWJseUluc3RhbmNlLmgKaW5kZXggMzBjZjM1MDBlZGUyYzA3
NDE1ZDlkOTczYWJmMjRlNDU3NzFjYmNkMi4uOTgxZGMzYjhhNDU3OTU2NDk3YTBlMDc1Zjc5MzYw
MjU4NGI3OTlmMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseUluc3RhbmNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMv
SlNXZWJBc3NlbWJseUluc3RhbmNlLmgKQEAgLTQyLDcgKzQyLDcgQEAgcHVibGljOgogICAgIHR5
cGVkZWYgSlNEZXN0cnVjdGlibGVPYmplY3QgQmFzZTsKIAogCi0gICAgc3RhdGljIEpTV2ViQXNz
ZW1ibHlJbnN0YW5jZSogY3JlYXRlKFZNJiwgU3RydWN0dXJlKiwgSlNXZWJBc3NlbWJseU1vZHVs
ZSosIEpTTW9kdWxlTmFtZXNwYWNlT2JqZWN0KiwgdW5zaWduZWQpOworICAgIHN0YXRpYyBKU1dl
YkFzc2VtYmx5SW5zdGFuY2UqIGNyZWF0ZShWTSYsIFN0cnVjdHVyZSosIEpTV2ViQXNzZW1ibHlN
b2R1bGUqLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCosIGNvbnN0IFdhc206Ok1vZHVsZUluZm9y
bWF0aW9uJik7CiAgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNH
bG9iYWxPYmplY3QqLCBKU1ZhbHVlKTsKIAogICAgIERFQ0xBUkVfSU5GTzsKQEAgLTc1LDE1ICs3
NSw0NCBAQCBwdWJsaWM6CiAgICAgSlNXZWJBc3NlbWJseVRhYmxlKiB0YWJsZSgpIHsgcmV0dXJu
IG1fdGFibGUuZ2V0KCk7IH0KICAgICB2b2lkIHNldFRhYmxlKFZNJiB2bSwgSlNXZWJBc3NlbWJs
eVRhYmxlKiB0YWJsZSkgeyBtX3RhYmxlLnNldCh2bSwgdGhpcywgdGFibGUpOyB9CiAKKyAgICBp
bnQzMl90IGxvYWRJMzJHbG9iYWwodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFT
U0VSVChpIDwgbV9udW1HbG9iYWxzKTsKKyAgICAgICAgcmV0dXJuIG1fZ2xvYmFsc1tpXS5pMzI7
CisgICAgfQorICAgIGludDY0X3QgbG9hZEk2NEdsb2JhbCh1bnNpZ25lZCBpKSBjb25zdAorICAg
IHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX251bUdsb2JhbHMpOworICAgICAgICByZXR1cm4gbV9n
bG9iYWxzW2ldLmk2NDsKKyAgICB9CisgICAgZmxvYXQgbG9hZEYzMkdsb2JhbCh1bnNpZ25lZCBp
KSBjb25zdAorICAgIHsKKyAgICAgICAgQVNTRVJUKGkgPCBtX251bUdsb2JhbHMpOworICAgICAg
ICByZXR1cm4gbV9nbG9iYWxzW2ldLmYzMjsKKyAgICB9CisgICAgZG91YmxlIGxvYWRGNjRHbG9i
YWwodW5zaWduZWQgaSkgY29uc3QKKyAgICB7CisgICAgICAgIEFTU0VSVChpIDwgbV9udW1HbG9i
YWxzKTsKKyAgICAgICAgcmV0dXJuIG1fZ2xvYmFsc1tpXS5mNjQ7CisgICAgfQorCisgICAgdm9p
ZCBzZXRHbG9iYWwodW5zaWduZWQgaSwgaW50NjRfdCBiaXRzKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGkgPCBtX251bUdsb2JhbHMpOworICAgICAgICBtX2dsb2JhbHNbaV0uaTY0ID0gYml0czsK
KyAgICB9CisKICAgICBzdGF0aWMgc2l6ZV90IG9mZnNldE9mSW1wb3J0RnVuY3Rpb24odW5zaWdu
ZWQgaWR4KQogICAgIHsKICAgICAgICAgcmV0dXJuIG9mZnNldE9mSW1wb3J0RnVuY3Rpb25zKCkg
KyBzaXplb2YoV3JpdGVCYXJyaWVyPEpTQ2VsbD4pICogaWR4OwogICAgIH0KIAogICAgIHN0YXRp
YyBwdHJkaWZmX3Qgb2Zmc2V0T2ZUYWJsZSgpIHsgcmV0dXJuIE9CSkVDVF9PRkZTRVRPRihKU1dl
YkFzc2VtYmx5SW5zdGFuY2UsIG1fdGFibGUpOyB9CisgICAgc3RhdGljIHB0cmRpZmZfdCBvZmZz
ZXRPZkdsb2JhbHMoKSB7IHJldHVybiBPQkpFQ1RfT0ZGU0VUT0YoSlNXZWJBc3NlbWJseUluc3Rh
bmNlLCBtX2dsb2JhbHMpOyB9CiAKIHByb3RlY3RlZDoKLSAgICBKU1dlYkFzc2VtYmx5SW5zdGFu
Y2UoVk0mLCBTdHJ1Y3R1cmUqLCB1bnNpZ25lZCk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNl
KFZNJiwgU3RydWN0dXJlKiwgdW5zaWduZWQgbnVtSW1wb3J0RnVuY3Rpb25zKTsKKyAgICB+SlNX
ZWJBc3NlbWJseUluc3RhbmNlKCk7CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYsIEpTV2Vi
QXNzZW1ibHlNb2R1bGUqLCBKU01vZHVsZU5hbWVzcGFjZU9iamVjdCopOwogICAgIHN0YXRpYyB2
b2lkIGRlc3Ryb3koSlNDZWxsKik7CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwpAQCAtOTksMTEgKzEyOCwyMSBAQCBwcm90ZWN0ZWQ6CiAgICAg
fQogCiBwcml2YXRlOgorICAgIHVuaW9uIEdsb2JhbERhdGFEZXNjcmlwdG9yIHsKKyAgICAgICAg
aW50MzJfdCBpMzI7CisgICAgICAgIGludDY0X3QgaTY0OworICAgICAgICBmbG9hdCBmMzI7Cisg
ICAgICAgIGRvdWJsZSBmNjQ7CisgICAgfTsKKwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFzc2Vt
Ymx5TW9kdWxlPiBtX21vZHVsZTsKICAgICBXcml0ZUJhcnJpZXI8SlNNb2R1bGVOYW1lc3BhY2VP
YmplY3Q+IG1fbW9kdWxlTmFtZXNwYWNlT2JqZWN0OwogICAgIFdyaXRlQmFycmllcjxKU1dlYkFz
c2VtYmx5TWVtb3J5PiBtX21lbW9yeTsKICAgICBXcml0ZUJhcnJpZXI8SlNXZWJBc3NlbWJseVRh
YmxlPiBtX3RhYmxlOworICAgIEdsb2JhbERhdGFEZXNjcmlwdG9yKiBtX2dsb2JhbHM7CisgICAg
dW5zaWduZWQgbV9udW1HbG9iYWxzOwogICAgIHVuc2lnbmVkIG1fbnVtSW1wb3J0RnVuY3Rpb25z
OworCiB9OwogCiB9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseUluc3RhbmNlQ29uc3RydWN0b3Iu
Y3BwCmluZGV4IGI1YzNiNjFkODFiMzg4NTAxMmQ0YTNlMDQ5MGM1Mzc3MTg3NDVkMGQuLmVkNjY3
Yzc0ZmNhOWY0NjJhNWE4OTUzODBmNzk4ZTRhOGIzNzM1N2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5SW5zdGFuY2VDb25zdHJ1Y3Rvci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlJbnN0YW5jZUNv
bnN0cnVjdG9yLmNwcApAQCAtODEsMTQgKzgxLDEzIEBAIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBK
U0NfSE9TVF9DQUxMIGNvbnN0cnVjdEpTV2ViQXNzZW1ibHlJbnN0YW5jZShFeGVjU3RhdGUqIGV4
CiAgICAgU3RydWN0dXJlKiBpbnN0YW5jZVN0cnVjdHVyZSA9IEludGVybmFsRnVuY3Rpb246OmNy
ZWF0ZVN1YmNsYXNzU3RydWN0dXJlKGV4ZWMsIGV4ZWMtPm5ld1RhcmdldCgpLCBnbG9iYWxPYmpl
Y3QtPldlYkFzc2VtYmx5SW5zdGFuY2VTdHJ1Y3R1cmUoKSk7CiAgICAgUkVUVVJOX0lGX0VYQ0VQ
VElPTih0aHJvd1Njb3BlLCB7IH0pOwogCi0gICAgSlNXZWJBc3NlbWJseUluc3RhbmNlKiBpbnN0
YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0cnVjdHVy
ZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMpLCBtb2R1
bGVJbmZvcm1hdGlvbi5pbXBvcnRzLnNpemUoKSk7CisgICAgSlNXZWJBc3NlbWJseUluc3RhbmNl
KiBpbnN0YW5jZSA9IEpTV2ViQXNzZW1ibHlJbnN0YW5jZTo6Y3JlYXRlKHZtLCBpbnN0YW5jZVN0
cnVjdHVyZSwganNNb2R1bGUsIG1vZHVsZVJlY29yZC0+Z2V0TW9kdWxlTmFtZXNwYWNlKGV4ZWMp
LCBtb2R1bGVJbmZvcm1hdGlvbik7CiAgICAgUkVUVVJOX0lGX0VYQ0VQVElPTih0aHJvd1Njb3Bl
LCB7IH0pOwogCiAgICAgLy8gTGV0IGZ1bmNzLCBtZW1vcmllcyBhbmQgdGFibGVzIGJlIGluaXRp
YWxseS1lbXB0eSBsaXN0cyBvZiBjYWxsYWJsZSBKYXZhU2NyaXB0IG9iamVjdHMsIFdlYkFzc2Vt
Ymx5Lk1lbW9yeSBvYmplY3RzIGFuZCBXZWJBc3NlbWJseS5UYWJsZSBvYmplY3RzLCByZXNwZWN0
aXZlbHkuCiAgICAgLy8gTGV0IGltcG9ydHMgYmUgYW4gaW5pdGlhbGx5LWVtcHR5IGxpc3Qgb2Yg
ZXh0ZXJuYWwgdmFsdWVzLgogICAgIHVuc2lnbmVkIG51bUltcG9ydEZ1bmN0aW9ucyA9IDA7Ci0K
LSAgICAvLyBGSVhNRSBpbXBsZW1lbnQgR2xvYmFsIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0xNjQxMzMKKyAgICB1bnNpZ25lZCBudW1JbXBvcnRHbG9iYWxzID0gMDsK
IAogICAgIGJvb2wgaGFzTWVtb3J5SW1wb3J0ID0gZmFsc2U7CiAgICAgYm9vbCBoYXNUYWJsZUlt
cG9ydCA9IGZhbHNlOwpAQCAtMTk1LDExICsxOTQsMjUgQEAgc3RhdGljIEVuY29kZWRKU1ZhbHVl
IEpTQ19IT1NUX0NBTEwgY29uc3RydWN0SlNXZWJBc3NlbWJseUluc3RhbmNlKEV4ZWNTdGF0ZSog
ZXgKICAgICAgICAgfQogICAgICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpHbG9iYWw6IHsKICAg
ICAgICAgICAgIC8vIDUuIElmIGkgaXMgYSBnbG9iYWwgaW1wb3J0OgotICAgICAgICAgICAgLy8g
RklYTUUgaW1wbGVtZW50IEdsb2JhbCBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTY0MTMzCiAgICAgICAgICAgICAvLyBpLiBJZiBpIGlzIG5vdCBhbiBpbW11dGFibGUg
Z2xvYmFsLCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgICAgIEFTU0VSVChtb2R1bGVJbmZv
cm1hdGlvbi5nbG9iYWxzW2ltcG9ydC5raW5kSW5kZXhdLm11dGFibGl0eSA9PSBXYXNtOjpHbG9i
YWw6OkltbXV0YWJsZSk7CiAgICAgICAgICAgICAvLyBpaS4gSWYgVHlwZSh2KSBpcyBub3QgTnVt
YmVyLCB0aHJvdyBhIFR5cGVFcnJvci4KKyAgICAgICAgICAgIGlmICghdmFsdWUuaXNOdW1iZXIo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKHRocm93RXhjZXB0aW9u
KGV4ZWMsIHRocm93U2NvcGUsIGNyZWF0ZVR5cGVFcnJvcihleGVjLCBBU0NJSUxpdGVyYWwoImlt
cG9ydGVkIGdsb2JhbCBtdXN0IGJlIGEgbnVtYmVyIiksIGRlZmF1bHRTb3VyY2VBcHBlbmRlciwg
cnVudGltZVR5cGVGb3JWYWx1ZSh2YWx1ZSkpKSk7CiAgICAgICAgICAgICAvLyBpaWkuIEFwcGVu
ZCBUb1dlYkFzc2VtYmx5VmFsdWUodikgdG8gaW1wb3J0cy4KLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICBzd2l0Y2ggKG1vZHVsZUluZm9ybWF0
aW9uLmdsb2JhbHNbaW1wb3J0LmtpbmRJbmRleF0udHlwZSkgeworICAgICAgICAgICAgY2FzZSBX
YXNtOjpJMzI6CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBvcnRH
bG9iYWxzKyssIHZhbHVlLnRvSW50MzIoZXhlYykpOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBXYXNtOjpGMzI6CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNl
dEdsb2JhbChudW1JbXBvcnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50MzJfdD4odmFsdWUu
dG9GbG9hdChleGVjKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2Fz
ZSBXYXNtOjpGNjQ6CisgICAgICAgICAgICAgICAgaW5zdGFuY2UtPnNldEdsb2JhbChudW1JbXBv
cnRHbG9iYWxzKyssIGJpdHdpc2VfY2FzdDx1aW50NjRfdD4odmFsdWUuYXNOdW1iZXIoKSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgfQogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMjQxLDggKzI1NCwyMyBAQCBz
dGF0aWMgRW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBjb25zdHJ1Y3RKU1dlYkFzc2VtYmx5
SW5zdGFuY2UoRXhlY1N0YXRlKiBleAogICAgICAgICB9CiAgICAgfQogCisgICAgLy8gR2xvYmFs
cworICAgIHsKKyAgICAgICAgQVNTRVJUKG51bUltcG9ydEdsb2JhbHMgPT0gbW9kdWxlSW5mb3Jt
YXRpb24uZmlyc3RJbnRlcm5hbEdsb2JhbCk7CisgICAgICAgIGZvciAoc2l6ZV90IGdsb2JhbElu
ZGV4ID0gbnVtSW1wb3J0R2xvYmFsczsgZ2xvYmFsSW5kZXggPCBtb2R1bGVJbmZvcm1hdGlvbi5n
bG9iYWxzLnNpemUoKTsgKytnbG9iYWxJbmRleCkgeworICAgICAgICAgICAgY29uc3QgYXV0byYg
Z2xvYmFsID0gbW9kdWxlSW5mb3JtYXRpb24uZ2xvYmFsc1tnbG9iYWxJbmRleF07CisgICAgICAg
ICAgICBBU1NFUlQoZ2xvYmFsLmluaXRpYWxpemF0aW9uVHlwZSAhPSBXYXNtOjpHbG9iYWw6Oklz
SW1wb3J0KTsKKyAgICAgICAgICAgIGlmIChnbG9iYWwuaW5pdGlhbGl6YXRpb25UeXBlID09IFdh
c206Okdsb2JhbDo6RnJvbUdsb2JhbEltcG9ydCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChn
bG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlciA8IG51bUltcG9ydEdsb2JhbHMpOworICAg
ICAgICAgICAgICAgIGluc3RhbmNlLT5zZXRHbG9iYWwoZ2xvYmFsSW5kZXgsIGluc3RhbmNlLT5s
b2FkSTY0R2xvYmFsKGdsb2JhbC5pbml0aWFsQml0c09ySW1wb3J0TnVtYmVyKSk7CisgICAgICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICBpbnN0YW5jZS0+c2V0R2xvYmFsKGdsb2JhbElu
ZGV4LCBnbG9iYWwuaW5pdGlhbEJpdHNPckltcG9ydE51bWJlcik7CisgICAgICAgIH0KKyAgICB9
CisKICAgICBtb2R1bGVSZWNvcmQtPmxpbmsoZXhlYywgaW5zdGFuY2UpOwogICAgIFJFVFVSTl9J
Rl9FWENFUFRJT04odGhyb3dTY29wZSwgeyB9KTsKKwogICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICBtb2R1bGVSZWNvcmQtPmR1bXAoKTsKICAgICBKU1ZhbHVlIHN0YXJ0UmVzdWx0ID0gbW9kdWxl
UmVjb3JkLT5ldmFsdWF0ZShleGVjKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAppbmRleCA4YzhlM2FkZTk5
NDdhYTA0YzZmOGNlMjAxZGNlYzIwOTNmMThhNTZlLi45YTU4ODg2MjY1ZWVhYzMzY2Q0ZDE2ZTkx
ZDAxNWMxNWMxMmFjMmIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9q
cy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCkBAIC04NSw4ICs4NSw4IEBAIHZv
aWQgV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQ6OmZpbmlzaENyZWF0aW9uKEV4ZWNTdGF0ZSogZXhl
YywgVk0mIHZtLCBjb25zdCBXYXNtCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAg
ICAgICBjYXNlIFdhc206OkV4dGVybmFsOjpHbG9iYWw6IHsKLSAgICAgICAgICAgIC8vIEZJWE1F
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjQxMzMKICAgICAgICAg
ICAgIC8vIEluIHRoZSBNVlAsIG9ubHkgaW1tdXRhYmxlIGdsb2JhbCB2YXJpYWJsZXMgY2FuIGJl
IGV4cG9ydGVkLgorICAgICAgICAgICAgYWRkRXhwb3J0RW50cnkoRXhwb3J0RW50cnk6OmNyZWF0
ZUxvY2FsKGV4cC5maWVsZCwgZXhwLmZpZWxkKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogICAgICAgICB9CkBAIC0xMjgsNyArMTI4LDcgQEAgdm9pZCBXZWJBc3NlbWJseU1vZHVs
ZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5zdGFuY2UqIGlu
c3QKICAgICAgICAgICAgIC8vIDEuIElmIGUgaXMgYSBjbG9zdXJlIGM6CiAgICAgICAgICAgICAv
LyAgIGkuIElmIHRoZXJlIGlzIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3RpYyBPYmplY3QgZnVu
YyBpbiBmdW5jcyB3aG9zZSBmdW5jLltbQ2xvc3VyZV1dIGVxdWFscyBjLCB0aGVuIHJldHVybiBm
dW5jLgogICAgICAgICAgICAgLy8gICBpaS4gKE5vdGU6IEF0IG1vc3Qgb25lIHdyYXBwZXIgaXMg
Y3JlYXRlZCBmb3IgYW55IGNsb3N1cmUsIHNvIGZ1bmMgaXMgdW5pcXVlLCBldmVuIGlmIHRoZXJl
IGFyZSBtdWx0aXBsZSBvY2N1cnJhbmNlcyBpbiB0aGUgbGlzdC4gTW9yZW92ZXIsIGlmIHRoZSBp
dGVtIHdhcyBhbiBpbXBvcnQgdGhhdCBpcyBhbHJlYWR5IGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4
b3RpYyBPYmplY3QsIHRoZW4gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uIG9iamVjdCB3aWxsIGJlIGZv
dW5kLiBGb3IgaW1wb3J0cyB0aGF0IGFyZSByZWd1bGFyIEpTIGZ1bmN0aW9ucywgYSBuZXcgd3Jh
cHBlciB3aWxsIGJlIGNyZWF0ZWQuKQotICAgICAgICAgICAgaWYgKGV4cC5mdW5jdGlvbkluZGV4
IDwgaW1wb3J0Q291bnQpIHsKKyAgICAgICAgICAgIGlmIChleHAua2luZEluZGV4IDwgaW1wb3J0
Q291bnQpIHsKICAgICAgICAgICAgICAgICAvLyBGSVhNRSBJbXBsZW1lbnQgcmUtZXhwb3J0aW5n
IGFuIGltcG9ydC4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTUx
MAogICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAg
ICAgICB9CkBAIC0xMzYsMTIgKzEzNiwxMiBAQCB2b2lkIFdlYkFzc2VtYmx5TW9kdWxlUmVjb3Jk
OjpsaW5rKEV4ZWNTdGF0ZSogc3RhdGUsIEpTV2ViQXNzZW1ibHlJbnN0YW5jZSogaW5zdAogICAg
ICAgICAgICAgLy8gICAgIGEuIExldCBmdW5jIGJlIGFuIEV4cG9ydGVkIEZ1bmN0aW9uIEV4b3Rp
YyBPYmplY3QgY3JlYXRlZCBmcm9tIGMuCiAgICAgICAgICAgICAvLyAgICAgYi4gQXBwZW5kIGZ1
bmMgdG8gZnVuY3MuCiAgICAgICAgICAgICAvLyAgICAgYy4gUmV0dXJuIGZ1bmMuCi0gICAgICAg
ICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBqc0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpz
RW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZXhwLmZ1bmN0aW9uSW5kZXgp
OwotICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUg
PSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAu
ZnVuY3Rpb25JbmRleCk7Ci0gICAgICAgICAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9
IG1vZHVsZS0+c2lnbmF0dXJlRm9yRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5mdW5jdGlvbkluZGV4
KTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIGpzRW50cnlwb2ludENhbGxlZSA9
IG1vZHVsZS0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShleHAua2lu
ZEluZGV4KTsKKyAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUqIHdhc21FbnRyeXBvaW50
Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlvbkluZGV4U3Bh
Y2UoZXhwLmtpbmRJbmRleCk7CisgICAgICAgICAgICBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVy
ZSA9IG1vZHVsZS0+c2lnbmF0dXJlRm9yRnVuY3Rpb25JbmRleFNwYWNlKGV4cC5raW5kSW5kZXgp
OwogICAgICAgICAgICAgV2ViQXNzZW1ibHlGdW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJs
eUZ1bmN0aW9uOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgc2lnbmF0dXJlLT5hcmd1bWVudHMu
c2l6ZSgpLCBleHAuZmllbGQuc3RyaW5nKCksIGluc3RhbmNlLCBqc0VudHJ5cG9pbnRDYWxsZWUs
IHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1cmUpOwogICAgICAgICAgICAgZXhwb3J0ZWRW
YWx1ZSA9IGZ1bmN0aW9uOwotICAgICAgICAgICAgaWYgKGhhc1N0YXJ0ICYmIHN0YXJ0RnVuY3Rp
b25JbmRleFNwYWNlID09IGV4cC5mdW5jdGlvbkluZGV4KQorICAgICAgICAgICAgaWYgKGhhc1N0
YXJ0ICYmIHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlID09IGV4cC5raW5kSW5kZXgpCiAgICAgICAg
ICAgICAgICAgbV9zdGFydEZ1bmN0aW9uLnNldCh2bSwgdGhpcywgZnVuY3Rpb24pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIH0KQEAgLTE1Myw5ICsxNTMsMjggQEAgdm9pZCBXZWJBc3Nl
bWJseU1vZHVsZVJlY29yZDo6bGluayhFeGVjU3RhdGUqIHN0YXRlLCBKU1dlYkFzc2VtYmx5SW5z
dGFuY2UqIGluc3QKICAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NjcxCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQor
CiAgICAgICAgIGNhc2UgV2FzbTo6RXh0ZXJuYWw6Okdsb2JhbDogewotICAgICAgICAgICAgLy8g
RklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NDEzMwotICAg
ICAgICAgICAgLy8gSW4gdGhlIE1WUCwgb25seSBpbW11dGFibGUgZ2xvYmFsIHZhcmlhYmxlcyBj
YW4gYmUgZXhwb3J0ZWQuCisgICAgICAgICAgICAvLyBBc3NlcnQ6IHRoZSBnbG9iYWwgaXMgaW1t
dXRhYmxlIGJ5IE1WUCB2YWxpZGF0aW9uIGNvbnN0cmFpbnQuCisgICAgICAgICAgICBjb25zdCBX
YXNtOjpHbG9iYWwmIGdsb2JhbCA9IG1vZHVsZUluZm9ybWF0aW9uLmdsb2JhbHNbZXhwLmtpbmRJ
bmRleF07CisgICAgICAgICAgICBBU1NFUlQoZ2xvYmFsLm11dGFibGl0eSA9PSBXYXNtOjpHbG9i
YWw6OkltbXV0YWJsZSk7CisgICAgICAgICAgICAvLyBSZXR1cm4gVG9KU1ZhbHVlKHYpLgorICAg
ICAgICAgICAgc3dpdGNoIChnbG9iYWwudHlwZSkgeworICAgICAgICAgICAgY2FzZSBXYXNtOjpJ
MzI6CisgICAgICAgICAgICAgICAgZXhwb3J0ZWRWYWx1ZSA9IEpTVmFsdWUoaW5zdGFuY2UtPmxv
YWRJMzJHbG9iYWwoZXhwLmtpbmRJbmRleCkpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisg
ICAgICAgICAgICBjYXNlIFdhc206OkYzMjoKKyAgICAgICAgICAgICAgICBleHBvcnRlZFZhbHVl
ID0gSlNWYWx1ZShpbnN0YW5jZS0+bG9hZEYzMkdsb2JhbChleHAua2luZEluZGV4KSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgV2FzbTo6RjY0OgorICAgICAg
ICAgICAgICAgIGV4cG9ydGVkVmFsdWUgPSBKU1ZhbHVlKGluc3RhbmNlLT5sb2FkRjY0R2xvYmFs
KGV4cC5raW5kSW5kZXgpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgfQpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA2
OGU4ZjcwNWUyMzFjNDYxZDVkNDkyMDViNjBjZWQwNjk0N2M4MmUzLi5mYmFmNTczODRjOGM3YTUz
M2E4YmQzMTA0MzI5NjI5ZWUzMDhkMjY2IDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZwor
KysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM0IEBACisyMDE2LTEyLTEzICBLZWl0
aCBNaWxsZXIgIDxrZWl0aF9taWxsZXJAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5
IEpTIEFQSTogaW1wbGVtZW50IEdsb2JhbAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiB3YXNtL0J1aWxkZXIuanM6CisgICAgICAgIChleHBvcnQuZGVm
YXVsdC5CdWlsZGVyLnByb3RvdHlwZS5fcmVnaXN0ZXJTZWN0aW9uQnVpbGRlcnMuc3dpdGNoLmNh
c2Uuc3RyaW5nX2FwcGVhcmVkX2hlcmUudGhpcy5zZWN0aW9uKToKKyAgICAgICAgKGV4cG9ydC5k
ZWZhdWx0LkJ1aWxkZXIucHJvdG90eXBlLl9yZWdpc3RlclNlY3Rpb25CdWlsZGVycy5zd2l0Y2gu
KTogRGVsZXRlZC4KKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0LkJ1aWxkZXIucHJvdG90eXBlLl9y
ZWdpc3RlclNlY3Rpb25CdWlsZGVycy5zd2l0Y2gpOiBEZWxldGVkLgorICAgICAgICAoZXhwb3J0
LmRlZmF1bHQuQnVpbGRlci5wcm90b3R5cGUuX3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJzKTogRGVs
ZXRlZC4KKyAgICAgICAgKiB3YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanM6CisgICAg
ICAgIChjb25zdC52YWx1ZVR5cGUuV0FTTS5kZXNjcmlwdGlvbi50eXBlLmkzMi50eXBlLmNvbnN0
LnB1dEdsb2JhbFR5cGUpOgorICAgICAgICAoY29uc3QucHV0T3ApOgorICAgICAgICAoY29uc3Qu
cHV0SW5pdEV4cHIpOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuSW1wb3J0KToKKyAgICAgICAg
KGNvbnN0LmVtaXR0ZXJzLkdsb2JhbCk6CisgICAgICAgIChjb25zdC5lbWl0dGVycy5FeHBvcnQp
OgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuQ29kZSk6CisgICAgICAgICogd2FzbS9Mb3dMZXZl
bEJpbmFyeS5qczoKKyAgICAgICAgKGV4cG9ydC5kZWZhdWx0Lkxvd0xldmVsQmluYXJ5LnByb3Rv
dHlwZS52YXJ1aW50MzIpOgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuTG93TGV2ZWxCaW5hcnku
cHJvdG90eXBlLnZhcmludDMyKToKKyAgICAgICAgKiB3YXNtL2pzLWFwaS9nbG9iYWwtZXh0ZXJu
YWwtaW5pdC1mcm9tLWltcG9ydC5qczogQWRkZWQuCisgICAgICAgICogd2FzbS9qcy1hcGkvZ2xv
YmFsLWludGVybmFsLWluaXQtZnJvbS1pbXBvcnQuanM6IEFkZGVkLgorICAgICAgICAqIHdhc20v
anMtYXBpL2dsb2JhbC1tdXRhdGUuanM6IEFkZGVkLgorICAgICAgICAoY3JlYXRlSW50ZXJuYWxH
bG9iYWxNb2R1bGUpOgorICAgICAgICAqIHdhc20vanMtYXBpL2dsb2JhbHMtZXhwb3J0LmpzOiBB
ZGRlZC4KKyAgICAgICAgKiB3YXNtL2pzLWFwaS9nbG9iYWxzLWltcG9ydC5qczogQWRkZWQuCisg
ICAgICAgICogd2FzbS93YXNtLmpzb246CisKIDIwMTYtMTItMTMgIFNhYW0gQmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAgV2ViQXNzZW1ibHk6IGltcGxlbWVudCB0aGUgdGFi
bGUgc2VjdGlvbiBhbmQgdGFibGUgaW1wb3J0CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vQnVp
bGRlci5qcyBiL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCmluZGV4IGFkN2E1M2IzYTA5MTVhYTIy
ZTAxM2ViMTg2ZjcxNGQ2NzYwNDEyNjguLjM5ZGM1YTU4OWU0MmM3NDdjOWQ1YmU2YjUxMzNmODM2
ZTUxMTk2NjIgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCisrKyBiL0pTVGVz
dHMvd2FzbS9CdWlsZGVyLmpzCkBAIC0xNzQsNiArMTc0LDMyIEBAIGNvbnN0IF9leHBvcnRGdW5j
dGlvbkNvbnRpbnVhdGlvbiA9IChidWlsZGVyLCBzZWN0aW9uLCBuZXh0QnVpbGRlcikgPT4gewog
ICAgIH07CiB9OwogCitjb25zdCBfZXhwb3J0R2xvYmFsQ29udGludWF0aW9uID0gKGJ1aWxkZXIs
IHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CisgICAgcmV0dXJuIChmaWVsZCwgaW5kZXgpID0+
IHsKKyAgICAgICAgYXNzZXJ0LmlzTnVtYmVyKGluZGV4LCBgR2xvYmFsIGV4cG9ydHMgb25seSBz
dXBwb3J0IG51bWJlciBpbmRpY2VzIHJpZ2h0IG5vd2ApOworICAgICAgICBzZWN0aW9uLmRhdGEu
cHVzaCh7IGZpZWxkLCBraW5kOiAiR2xvYmFsIiwgaW5kZXggfSk7CisgICAgICAgIHJldHVybiBu
ZXh0QnVpbGRlcjsKKyAgICB9Cit9OworCitjb25zdCBfaW1wb3J0R2xvYmFsQ29udGludWF0aW9u
ID0gKGJ1aWxkZXIsIHNlY3Rpb24sIG5leHRCdWlsZGVyKSA9PiB7CisgICAgcmV0dXJuICgpID0+
IHsKKyAgICAgICAgY29uc3QgZ2xvYmFsQnVpbGRlciA9IHsKKyAgICAgICAgICAgIEVuZDogKCkg
PT4gbmV4dEJ1aWxkZXIKKyAgICAgICAgfTsKKyAgICAgICAgZm9yIChsZXQgb3Agb2YgV0FTTS5k
ZXNjcmlwdGlvbi52YWx1ZV90eXBlKSB7CisgICAgICAgICAgICBnbG9iYWxCdWlsZGVyW190b0ph
dmFTY3JpcHROYW1lKG9wKV0gPSAobW9kdWxlLCBmaWVsZCwgbXV0YWJpbGl0eSkgPT4geworICAg
ICAgICAgICAgICAgIGFzc2VydC5pc1N0cmluZyhtb2R1bGUsIGBJbXBvcnQgZ2xvYmFsIG1vZHVs
ZSBzaG91bGQgYmUgYSBzdHJpbmcsIGdvdCAiJHttb2R1bGV9ImApOworICAgICAgICAgICAgICAg
IGFzc2VydC5pc1N0cmluZyhmaWVsZCwgYEltcG9ydCBnbG9iYWwgZmllbGQgc2hvdWxkIGJlIGEg
c3RyaW5nLCBnb3QgIiR7ZmllbGR9ImApOworICAgICAgICAgICAgICAgIGFzc2VydC5pc1N0cmlu
ZyhtdXRhYmlsaXR5LCBgSW1wb3J0IGdsb2JhbCBtdXRhYmlsaXR5IHNob3VsZCBiZSBhIHN0cmlu
ZywgZ290ICIke211dGFiaWxpdHl9ImApOworICAgICAgICAgICAgICAgIHNlY3Rpb24uZGF0YS5w
dXNoKHsgZ2xvYmFsRGVzY3JpcHRpb246IHsgdHlwZTogb3AsIG11dGFiaWxpdHkgfSwgbW9kdWxl
LCBmaWVsZCwga2luZDogIkdsb2JhbCIgfSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIGdsb2Jh
bEJ1aWxkZXI7CisgICAgICAgICAgICB9OworICAgICAgICB9CisgICAgICAgIHJldHVybiBnbG9i
YWxCdWlsZGVyOworICAgIH07Cit9OworCiBjb25zdCBfY2hlY2tTdGFja0FyZ3MgPSAob3AsIHBh
cmFtKSA9PiB7CiAgICAgZm9yIChsZXQgZXhwZWN0IG9mIHBhcmFtKSB7CiAgICAgICAgIGlmIChX
QVNNLmlzVmFsaWRUeXBlKGV4cGVjdCkpIHsKQEAgLTIwMiw2ICsyMjgsNyBAQCBjb25zdCBfY2hl
Y2tTdGFja1JldHVybiA9IChvcCwgcmV0KSA9PiB7CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAg
ICAgICAvLyBIYW5kbGUgb3VyIG93biBtZXRhLXR5cGVzLgogICAgICAgICAgICAgc3dpdGNoIChl
eHBlY3QpIHsKKyAgICAgICAgICAgIGNhc2UgImFueSI6IGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSAiYm9vbCI6IGJyZWFrOyAvLyBGSVhNRSBpbXBsZW1lbnQgYm9vbC4gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MzQyMQogICAgICAgICAgICAgY2FzZSAiY2FsbCI6
IGJyZWFrOyAvLyBGSVhNRSBpbXBsZW1lbnQgY2FsbCBzdGFjayByZXR1cm4gY2hlY2sgYmFzZWQg
b24gZnVuY3Rpb24gc2lnbmF0dXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTYzNDIxCiAgICAgICAgICAgICBjYXNlICJjb250cm9sIjogYnJlYWs7IC8vIEZJWE1F
IGltcGxlbWVudCBjb250cm9sLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTYzNDIxCkBAIC00MDcsOCArNDM0LDggQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgQnVpbGRl
ciB7CiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMgPSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rp
b24pOwogICAgICAgICAgICAgICAgICAgICBjb25zdCBpbXBvcnRCdWlsZGVyID0gewogICAgICAg
ICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAotICAgICAgICAgICAgICAgICAgICAg
ICAgR2xvYmFsOiAoKSA9PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogaW1wb3J0
IGdsb2JhbGApOyB9LAogICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICBpbXBvcnRCdWlsZGVyLkdsb2JhbCA9IF9pbXBvcnRHbG9iYWxDb250aW51YXRpb24odGhpcywg
cywgaW1wb3J0QnVpbGRlcik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuRnVu
Y3Rpb24gPSBfaW1wb3J0RnVuY3Rpb25Db250aW51YXRpb24odGhpcywgcywgaW1wb3J0QnVpbGRl
cik7CiAgICAgICAgICAgICAgICAgICAgIGltcG9ydEJ1aWxkZXIuTWVtb3J5ID0gX2ltcG9ydE1l
bW9yeUNvbnRpbnVhdGlvbih0aGlzLCBzLCBpbXBvcnRCdWlsZGVyKTsKICAgICAgICAgICAgICAg
ICAgICAgaW1wb3J0QnVpbGRlci5UYWJsZSA9IF9pbXBvcnRUYWJsZUNvbnRpbnVhdGlvbih0aGlz
LCBzLCBpbXBvcnRCdWlsZGVyKTsKQEAgLTQ1Niw4ICs0ODMsMjMgQEAgZXhwb3J0IGRlZmF1bHQg
Y2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgIkdsb2JhbCI6Ci0gICAgICAgICAgICAgICAgLy8gRklYTUUgaW1wbGVtZW50IGdsb2JhbCBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY0MTMzCi0gICAgICAgICAg
ICAgICAgdGhpc1tzZWN0aW9uXSA9ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVu
dGVkOiBzZWN0aW9uIHR5cGUgIiR7c2VjdGlvbn0iYCk7IH07CisgICAgICAgICAgICAgICAgdGhp
c1tzZWN0aW9uXSA9IGZ1bmN0aW9uKCkgeworICAgICAgICAgICAgICAgICAgICBjb25zdCBzID0g
dGhpcy5fYWRkU2VjdGlvbihzZWN0aW9uKTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgZ2xv
YmFsQnVpbGRlciA9IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIEVuZDogKCkgPT4gdGhpcywK
KyAgICAgICAgICAgICAgICAgICAgICAgIEdldEdsb2JhbDogKHR5cGUsIGluaXRWYWx1ZSwgbXV0
YWJpbGl0eSkgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMuZGF0YS5wdXNoKHsg
dHlwZSwgb3A6ICJnZXRfZ2xvYmFsIiwgbXV0YWJpbGl0eSwgaW5pdFZhbHVlIH0pOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxCdWlsZGVyOworICAgICAgICAgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAg
ICBmb3IgKGxldCBvcCBvZiBXQVNNLmRlc2NyaXB0aW9uLnZhbHVlX3R5cGUpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGdsb2JhbEJ1aWxkZXJbX3RvSmF2YVNjcmlwdE5hbWUob3ApXSA9IChp
bml0VmFsdWUsIG11dGFiaWxpdHkpID0+IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBz
LmRhdGEucHVzaCh7IHR5cGU6IG9wLCBvcDogb3AgKyAiLmNvbnN0IiwgbXV0YWJpbGl0eSwgaW5p
dFZhbHVlIH0pOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBnbG9iYWxCdWls
ZGVyOworICAgICAgICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2xvYmFsQnVpbGRlcjsKKyAgICAgICAgICAgICAg
ICB9OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlICJFeHBvcnQi
OgpAQCAtNDY3LDggKzUwOSw4IEBAIGV4cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAg
ICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlzLAogICAgICAgICAgICAgICAgICAg
ICAgICAgVGFibGU6ICgpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBleHBv
cnQgdGFibGVgKTsgfSwKICAgICAgICAgICAgICAgICAgICAgICAgIE1lbW9yeTogKCkgPT4geyB0
aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVtZW50ZWQ6IGV4cG9ydCBtZW1vcnlgKTsgfSwKLSAgICAg
ICAgICAgICAgICAgICAgICAgIEdsb2JhbDogKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1w
bGVtZW50ZWQ6IGV4cG9ydCBnbG9iYWxgKTsgfSwKICAgICAgICAgICAgICAgICAgICAgfTsKKyAg
ICAgICAgICAgICAgICAgICAgZXhwb3J0QnVpbGRlci5HbG9iYWwgPSBfZXhwb3J0R2xvYmFsQ29u
dGludWF0aW9uKHRoaXMsIHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICBl
eHBvcnRCdWlsZGVyLkZ1bmN0aW9uID0gX2V4cG9ydEZ1bmN0aW9uQ29udGludWF0aW9uKHRoaXMs
IHMsIGV4cG9ydEJ1aWxkZXIpOwogICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0QnVp
bGRlcjsKICAgICAgICAgICAgICAgICB9OwpAQCAtNDgxLDcgKzUyMyw3IEBAIGV4cG9ydCBkZWZh
dWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0
aGlzLAogICAgICAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgICAgICBpZiAodHlw
ZW9mKGZ1bmN0aW9uSW5kZXhPck5hbWUpICE9PSAibnVtYmVyIiAmJiB0eXBlb2YoZnVuY3Rpb25J
bmRleE9yTmFtZSkgIT09ICJzdHJpbmciKQotICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKGBTdGFydCBzZWN0aW9uJ3MgZnVuY3Rpb24gaW5kZXggIG11c3QgZWl0aGVyIGJl
IGEgbnVtYmVyIG9yIGEgc3RyaW5nYCk7CisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoYFN0YXJ0IHNlY3Rpb25zIGZ1bmN0aW9uIGluZGV4ICBtdXN0IGVpdGhlciBiZSBh
IG51bWJlciBvciBhIHN0cmluZ2ApOwogICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaChm
dW5jdGlvbkluZGV4T3JOYW1lKTsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXJ0QnVp
bGRlcjsKICAgICAgICAgICAgICAgICB9OwpAQCAtNDk4LDcgKzU0MCw3IEBAIGV4cG9ydCBkZWZh
dWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICBjb25zdCBidWlsZGVyID0g
dGhpczsKICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29kZUJ1aWxkZXIgPSAgewogICAgICAg
ICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gV2Ugbm93IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9uIHRvIHJlbWFwIHRoZSBleHBvcnQg
c2VjdGlvbidzICJ0eXBlIiBhbmQgImluZGV4IiBhY2NvcmRpbmcgdG8gdGhlIENvZGUgc2VjdGlv
biB3ZSdyZSBjdXJyZW50bHkgZW5kaW5nLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIG5vdyBoYXZlIGVub3VnaCBpbmZvcm1hdGlvbiB0byByZW1hcCB0aGUgZXhwb3J0IHNlY3Rp
b25zICJ0eXBlIiBhbmQgImluZGV4IiBhY2NvcmRpbmcgdG8gdGhlIENvZGUgc2VjdGlvbiB3ZSBh
cmUgY3VycmVudGx5IGVuZGluZy4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0
eXBlU2VjdGlvbiA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIlR5cGUiKTsKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBjb25zdCBpbXBvcnRTZWN0aW9uID0gYnVpbGRlci5fZ2V0U2VjdGlvbigi
SW1wb3J0Iik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZXhwb3J0U2VjdGlv
biA9IGJ1aWxkZXIuX2dldFNlY3Rpb24oIkV4cG9ydCIpOwpAQCAtNTA2LDYgKzU0OCw4IEBAIGV4
cG9ydCBkZWZhdWx0IGNsYXNzIEJ1aWxkZXIgewogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnN0IGNvZGVTZWN0aW9uID0gczsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAo
ZXhwb3J0U2VjdGlvbikgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGNv
bnN0IGUgb2YgZXhwb3J0U2VjdGlvbi5kYXRhKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiAoZS5raW5kICE9PSAiRnVuY3Rpb24iIHx8IHR5cGVvZihlLnR5cGUpICE9
PSAidW5kZWZpbmVkIikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj
b250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHlw
ZW9mKGUuaW5kZXgpKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWZh
dWx0OiB0aHJvdyBuZXcgRXJyb3IoYFVuZXhwZWN0ZWQgZXhwb3J0IGluZGV4ICIke2UuaW5kZXh9
ImApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RyaW5nIjog
ewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMg
Yi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwppbmRleCBjZWJjYjRh
ZDc2YTI1MjBkZDZkZjVjZWUyYzgwOGI2OWQyYzc5NzE2Li5jZDc0OGNhZWE1MzhlNWY1Zjg5OGI1
NjkwOWExMTIwMzVmNDRjOWUzIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJB
c3NlbWJseUJpbmFyeS5qcworKysgYi9KU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJp
bmFyeS5qcwpAQCAtNTEsNiArNTEsNDUgQEAgY29uc3QgcHV0VGFibGUgPSAoYmluLCB7aW5pdGlh
bCwgbWF4aW11bSwgZWxlbWVudH0pID0+IHsKICAgICBwdXRSZXNpemFibGVMaW1pdHMoYmluLCBp
bml0aWFsLCBtYXhpbXVtKTsKIH07CiAKK2NvbnN0IHZhbHVlVHlwZSA9IFdBU00uZGVzY3JpcHRp
b24udHlwZS5pMzIudHlwZQorCitjb25zdCBwdXRHbG9iYWxUeXBlID0gKGJpbiwgZ2xvYmFsKSA9
PiB7CisgICAgcHV0KGJpbiwgdmFsdWVUeXBlLCBXQVNNLnR5cGVWYWx1ZVtnbG9iYWwudHlwZV0p
OworICAgIGlmIChnbG9iYWwubXV0YWJpbGl0eSA9PT0gIm11dGFibGUiKQorICAgICAgICBwdXQo
YmluLCAidmFydWludDEiLCAxKTsKKyAgICBlbHNlIGlmIChnbG9iYWwubXV0YWJpbGl0eSA9PT0g
ImltbXV0YWJsZSIpCisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MSIsIDApOworICAgIGVsc2UK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBtdXRhYmlsaXR5IHNob3VsZCBiZSBlaXRoZXIgIm11
dGFibGUiIG9yICJpbW11dGFibGUiLCBidXQgZ290ICR7Z2xvYmFsLm11dGFibGl0eX1gKTsKK307
CisKK2NvbnN0IHB1dE9wID0gKGJpbiwgb3ApID0+IHsKKyAgICBwdXQoYmluLCAidWludDgiLCBv
cC52YWx1ZSk7CisgICAgaWYgKG9wLmFyZ3VtZW50cy5sZW5ndGggIT09IDApCisgICAgICAgIHRo
cm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogYXJndW1lbnRzYCk7IC8vIEZJWE1FIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjI3MDYKKworICAgIHN3aXRjaCAo
b3AubmFtZSkgeworICAgIGRlZmF1bHQ6CisgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgb3Au
aW1tZWRpYXRlcy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgY29uc3QgdHlwZSA9IFdBU00u
ZGVzY3JpcHRpb24ub3Bjb2RlW29wLm5hbWVdLmltbWVkaWF0ZVtpXS50eXBlCisgICAgICAgICAg
ICBpZiAoIWJpblt0eXBlXSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBV
bmtub3duIHR5cGU6ICR7dHlwZX0gaW4gb3A6ICR7b3AubmFtZX1gKTsKKyAgICAgICAgICAgIHB1
dChiaW4sIHR5cGUsIG9wLmltbWVkaWF0ZXNbaV0pOworICAgICAgICB9CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgImJyX3RhYmxlIjoKKyAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIG9w
LmltbWVkaWF0ZXMubGVuZ3RoIC0gMSk7CisgICAgICAgIGZvciAobGV0IGltbSBvZiBvcC5pbW1l
ZGlhdGVzKQorICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGltbSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KK307CisKK2NvbnN0IHB1dEluaXRFeHByID0gKGJpbiwgZXhwcikgPT4g
eworICAgIHB1dE9wKGJpbiwgeyB2YWx1ZTogV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbZXhwci5v
cF0udmFsdWUsIG5hbWU6IGV4cHIub3AsIGltbWVkaWF0ZXM6IFtleHByLmluaXRWYWx1ZV0sIGFy
Z3VtZW50czogW10gfSk7CisgICAgcHV0T3AoYmluLCB7IHZhbHVlOiBXQVNNLmRlc2NyaXB0aW9u
Lm9wY29kZS5lbmQudmFsdWUsIG5hbWU6ICJlbmQiLCBpbW1lZGlhdGVzOiBbXSwgYXJndW1lbnRz
OiBbXSB9KTsKK307CisKIGNvbnN0IGVtaXR0ZXJzID0gewogICAgIFR5cGU6IChzZWN0aW9uLCBi
aW4pID0+IHsKICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIHNlY3Rpb24uZGF0YS5sZW5n
dGgpOwpAQCAtODgsNyArMTI3LDkgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgICAgICAgICAg
ICAgcHV0UmVzaXphYmxlTGltaXRzKGJpbiwgaW5pdGlhbCwgbWF4aW11bSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9OwotICAgICAgICAgICAgY2FzZSAiR2xvYmFsIjog
dGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7CisgICAgICAgICAgICBjYXNl
ICJHbG9iYWwiOgorICAgICAgICAgICAgICAgIHB1dEdsb2JhbFR5cGUoYmluLCBlbnRyeS5nbG9i
YWxEZXNjcmlwdGlvbik7CisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgIH0KICAgICB9LApAQCAtMTE3LDcgKzE1OCwxNCBAQCBjb25zdCBlbWl0dGVycyA9IHsK
ICAgICAgICAgfQogICAgIH0sCiAKLSAgICBHbG9iYWw6IChzZWN0aW9uLCBiaW4pID0+IHsgdGhy
b3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7IH0sCisgICAgR2xvYmFsOiAoc2Vj
dGlvbiwgYmluKSA9PiB7CisgICAgICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCBzZWN0aW9uLmRh
dGEubGVuZ3RoKTsKKyAgICAgICAgZm9yIChjb25zdCBnbG9iYWwgb2Ygc2VjdGlvbi5kYXRhKSB7
CisgICAgICAgICAgICBwdXRHbG9iYWxUeXBlKGJpbiwgZ2xvYmFsKTsKKyAgICAgICAgICAgIHB1
dEluaXRFeHByKGJpbiwgZ2xvYmFsKQorICAgICAgICB9CisgICAgfSwKKwogICAgIEV4cG9ydDog
KHNlY3Rpb24sIGJpbikgPT4gewogICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgc2VjdGlv
bi5kYXRhLmxlbmd0aCk7CiAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2Ygc2VjdGlvbi5kYXRh
KSB7CkBAIC0xMjUsMTAgKzE3MywxMyBAQCBjb25zdCBlbWl0dGVycyA9IHsKICAgICAgICAgICAg
IHB1dChiaW4sICJ1aW50OCIsIFdBU00uZXh0ZXJuYWxLaW5kVmFsdWVbZW50cnkua2luZF0pOwog
ICAgICAgICAgICAgc3dpdGNoIChlbnRyeS5raW5kKSB7CiAgICAgICAgICAgICBkZWZhdWx0OiB0
aHJvdyBuZXcgRXJyb3IoYEltcGxlbWVudGF0aW9uIHByb2JsZW06IHVuZXhwZWN0ZWQga2luZCAk
e2VudHJ5LmtpbmR9YCk7Ci0gICAgICAgICAgICBjYXNlICJGdW5jdGlvbiI6IHB1dChiaW4sICJ2
YXJ1aW50MzIiLCBlbnRyeS5pbmRleCk7IGJyZWFrOworICAgICAgICAgICAgY2FzZSAiR2xvYmFs
IjoKKyAgICAgICAgICAgIGNhc2UgIkZ1bmN0aW9uIjoKKyAgICAgICAgICAgICAgICBwdXQoYmlu
LCAidmFydWludDMyIiwgZW50cnkuaW5kZXgpOworICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgY2FzZSAiVGFibGUiOiB0aHJvdyBuZXcgRXJyb3IoYE5vdCB5ZXQgaW1wbGVtZW50
ZWRgKTsKICAgICAgICAgICAgIGNhc2UgIk1lbW9yeSI6IHRocm93IG5ldyBFcnJvcihgTm90IHll
dCBpbXBsZW1lbnRlZGApOwotICAgICAgICAgICAgY2FzZSAiR2xvYmFsIjogdGhyb3cgbmV3IEVy
cm9yKGBOb3QgeWV0IGltcGxlbWVudGVkYCk7CisKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgIH0sCkBAIC0xNDgsMjcgKzE5OSw5IEBAIGNvbnN0IGVtaXR0ZXJzID0gewogICAgICAgICAg
ICAgICAgIHB1dChmdW5jQmluLCAidmFyaW50NyIsIFdBU00udHlwZVZhbHVlW2Z1bmMubG9jYWxz
W2ldXSk7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgZnVu
Yy5jb2RlKSB7Ci0gICAgICAgICAgICAgICAgcHV0KGZ1bmNCaW4sICJ1aW50OCIsIG9wLnZhbHVl
KTsKLSAgICAgICAgICAgICAgICBpZiAob3AuYXJndW1lbnRzLmxlbmd0aCAhPT0gMCkKLSAgICAg
ICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBVbmltcGxlbWVudGVkOiBhcmd1bWVudHNg
KTsgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2Mjcw
NgotCi0gICAgICAgICAgICAgICAgc3dpdGNoIChvcC5uYW1lKSB7Ci0gICAgICAgICAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBvcC5pbW1l
ZGlhdGVzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB0eXBl
ID0gV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbb3AubmFtZV0uaW1tZWRpYXRlW2ldLnR5cGUKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlmICghZnVuY0Jpblt0eXBlXSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHR5cGU6ICR7dHlwZX0g
aW4gb3A6ICR7b3AubmFtZX1gKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHB1dChmdW5jQmlu
LCB0eXBlLCBvcC5pbW1lZGlhdGVzW2ldKTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlICJicl90YWJsZSI6Ci0g
ICAgICAgICAgICAgICAgICAgIHB1dChmdW5jQmluLCAidmFydWludDMyIiwgb3AuaW1tZWRpYXRl
cy5sZW5ndGggLSAxKTsKLSAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaW1tIG9mIG9wLmlt
bWVkaWF0ZXMpCi0gICAgICAgICAgICAgICAgICAgICAgICBwdXQoZnVuY0JpbiwgInZhcnVpbnQz
MiIsIGltbSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZvciAoY29uc3Qgb3Agb2YgZnVuYy5jb2RlKQor
ICAgICAgICAgICAgICAgIHB1dE9wKGZ1bmNCaW4sIG9wKTsKKwogICAgICAgICAgICAgZnVuY0Jp
bi5hcHBseSgpOwogICAgICAgICB9CiAgICAgfSwKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9M
b3dMZXZlbEJpbmFyeS5qcyBiL0pTVGVzdHMvd2FzbS9Mb3dMZXZlbEJpbmFyeS5qcwppbmRleCA4
MTRjYjkxM2VmMzBkMGRiNWE2YTE2MjAxOWNjMDc1Mzg4OGMyOWU1Li5lZTRmYmJjZTQxMmFkMmFm
NTYzZTVmNmY0ODFkYTk0MGQ5ZDlmN2FkIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3dhc20vTG93TGV2
ZWxCaW5hcnkuanMKKysrIGIvSlNUZXN0cy93YXNtL0xvd0xldmVsQmluYXJ5LmpzCkBAIC0xMjMs
NiArMTIzLDcgQEAgZXhwb3J0IGRlZmF1bHQgY2xhc3MgTG93TGV2ZWxCaW5hcnkgewogICAgICAg
ICB0aGlzLl9wdXNoOCh2ID4+PiAyNCk7CiAgICAgfQogICAgIHZhcnVpbnQzMih2KSB7CisgICAg
ICAgIGFzc2VydC5pc051bWJlcih2KTsKICAgICAgICAgaWYgKHYgPCB2YXJ1aW50MzJNaW4gfHwg
dmFydWludDMyTWF4IDwgdikKICAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKGBJbnZh
bGlkIHZhcnVpbnQzMiAke3Z9IHJhbmdlIGlzIFske3ZhcnVpbnQzMk1pbn0sICR7dmFydWludDMy
TWF4fV1gKTsKICAgICAgICAgd2hpbGUgKHYgPj0gMHg4MCkgewpAQCAtMTMyLDYgKzEzMyw3IEBA
IGV4cG9ydCBkZWZhdWx0IGNsYXNzIExvd0xldmVsQmluYXJ5IHsKICAgICAgICAgdGhpcy51aW50
OCh2KTsKICAgICB9CiAgICAgdmFyaW50MzIodikgeworICAgICAgICBhc3NlcnQuaXNOdW1iZXIo
dik7CiAgICAgICAgIGlmICh2IDwgdmFyaW50MzJNaW4gfHwgdmFyaW50MzJNYXggPCB2KQogICAg
ICAgICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoYEludmFsaWQgdmFyaW50MzIgJHt2fSByYW5n
ZSBpcyBbJHt2YXJpbnQzMk1pbn0sICR7dmFyaW50MzJNYXh9XWApOwogICAgICAgICBkbyB7CmRp
ZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1leHRlcm5hbC1pbml0LWZyb20t
aW1wb3J0LmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXh0ZXJuYWwtaW5pdC1mcm9t
LWltcG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40MWZjNmZhMjUyZjM2NDY5ZWQyMGQzM2NiMjkzZDY0MjUx
MTMyOTFkCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtZXh0
ZXJuYWwtaW5pdC1mcm9tLWltcG9ydC5qcwpAQCAtMCwwICsxLDMwIEBACitpbXBvcnQgKiBhcyBh
c3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxk
ZXIuanMnOworCitjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTsKKworYnVpbGRlci5UeXBl
KCkuRW5kKCkKKyAgICAuSW1wb3J0KCkKKyAgICAgICAgLkdsb2JhbCgpLkkzMigiaW1wIiwgImds
b2JhbCIsICJpbW11dGFibGUiKS5FbmQoKQorICAgIC5FbmQoKQorICAgIC5GdW5jdGlvbigpLkVu
ZCgpCisgICAgLkdsb2JhbCgpLkdldEdsb2JhbCgiaTMyIiwgMCwgImltbXV0YWJsZSIpLkVuZCgp
CisgICAgLkV4cG9ydCgpCisgICAgICAgIC5GdW5jdGlvbigiZ2V0R2xvYmFsIikKKyAgICAuR2xv
YmFsKCJnbG9iYWwiLCAxKQorICAgIC5FbmQoKQorICAgIC5Db2RlKCkKKworICAgIC5GdW5jdGlv
bigiZ2V0R2xvYmFsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0pCisgICAgICAgIC5HZXRH
bG9iYWwoMSkKKyAgICAuRW5kKCkKKworICAgIC5FbmQoKQorCitjb25zdCBiaW4gPSBidWlsZGVy
LldlYkFzc2VtYmx5KCk7CitiaW4udHJpbSgpOworCitjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNz
ZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSk7Citjb25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7IGdsb2JhbDogNSB9IH0pOworYXNzZXJ0LmVxKGlu
c3RhbmNlLmV4cG9ydHMuZ2V0R2xvYmFsKCksIDUpOworYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9y
dHMuZ2xvYmFsLCA1KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2FzbS9qcy1hcGkvZ2xvYmFsLWlu
dGVybmFsLWluaXQtZnJvbS1pbXBvcnQuanMgYi9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2JhbC1p
bnRlcm5hbC1pbml0LWZyb20taW1wb3J0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkxYmYzNWJhN2FlZGZmYWE3
MjY1ZDU4NmRlMTc2MjNjZGZkY2EwN2UKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3dhc20v
anMtYXBpL2dsb2JhbC1pbnRlcm5hbC1pbml0LWZyb20taW1wb3J0LmpzCkBAIC0wLDAgKzEsMjYg
QEAKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9tICcuLi9hc3NlcnQuanMnOworaW1wb3J0IEJ1aWxk
ZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CisKK2NvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigp
OworCitidWlsZGVyLlR5cGUoKS5FbmQoKQorICAgIC5JbXBvcnQoKQorICAgICAgICAuR2xvYmFs
KCkuSTMyKCJpbXAiLCAiZ2xvYmFsIiwgImltbXV0YWJsZSIpLkVuZCgpCisgICAgLkVuZCgpCisg
ICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAuR2xvYmFsKCkuR2V0R2xvYmFsKCJpMzIiLCAwLCAi
bXV0YWJsZSIpLkVuZCgpCisgICAgLkV4cG9ydCgpLkZ1bmN0aW9uKCJnZXRHbG9iYWwiKS5FbmQo
KQorICAgIC5Db2RlKCkKKworICAgIC5GdW5jdGlvbigiZ2V0R2xvYmFsIiwgeyBwYXJhbXM6IFtd
LCByZXQ6ICJpMzIiIH0pCisgICAgICAgIC5HZXRHbG9iYWwoMSkKKyAgICAuRW5kKCkKKworICAg
IC5FbmQoKQorCitjb25zdCBiaW4gPSBidWlsZGVyLldlYkFzc2VtYmx5KCk7CitiaW4udHJpbSgp
OworCitjb25zdCBtb2R1bGUgPSBuZXcgV2ViQXNzZW1ibHkuTW9kdWxlKGJpbi5nZXQoKSk7Citj
b25zdCBpbnN0YW5jZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUsIHsgaW1wOiB7
IGdsb2JhbDogNSB9IH0pOworYXNzZXJ0LmVxKGluc3RhbmNlLmV4cG9ydHMuZ2V0R2xvYmFsKCks
IDUpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtbXV0YXRlLmpzIGIv
SlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWwtbXV0YXRlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2ZjdmMjI4
OGQzZjJhYjYxMWY1YzE1NjZmNDExZTEyNzY5MGExYzUKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rl
c3RzL3dhc20vanMtYXBpL2dsb2JhbC1tdXRhdGUuanMKQEAgLTAsMCArMSwzOSBAQAoraW1wb3J0
ICogYXMgYXNzZXJ0IGZyb20gJy4uL2Fzc2VydC5qcyc7CitpbXBvcnQgQnVpbGRlciBmcm9tICcu
Li9CdWlsZGVyLmpzJzsKKworZnVuY3Rpb24gY3JlYXRlSW50ZXJuYWxHbG9iYWxNb2R1bGUoKSB7
CisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCk7CisKKyAgICBidWlsZGVyLlR5cGUo
KS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuR2xvYmFsKCkuSTMy
KDUsICJtdXRhYmxlIikuRW5kKCkKKyAgICAgICAgLkV4cG9ydCgpCisgICAgICAgICAgICAuRnVu
Y3Rpb24oImdldEdsb2JhbCIpCisgICAgICAgICAgICAuRnVuY3Rpb24oInNldEdsb2JhbCIpCisg
ICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisKKyAgICAgICAgLy8gR2V0R2xvYmFsCisg
ICAgICAgIC5GdW5jdGlvbigiZ2V0R2xvYmFsIiwgeyBwYXJhbXM6IFtdLCByZXQ6ICJpMzIiIH0p
CisgICAgICAgICAgICAuR2V0R2xvYmFsKDApCisgICAgICAgIC5FbmQoKQorCisgICAgICAgIC8v
IFNldEdsb2JhbAorICAgICAgICAuRnVuY3Rpb24oInNldEdsb2JhbCIsIHsgcGFyYW1zOiBbImkz
MiJdIH0pCisgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgIC5TZXRHbG9iYWwo
MCkKKyAgICAgICAgLkVuZCgpCisKKyAgICAgICAgLkVuZCgpCisKKyAgICBjb25zdCBiaW4gPSBi
dWlsZGVyLldlYkFzc2VtYmx5KCk7CisgICAgYmluLnRyaW0oKTsKKworICAgIGNvbnN0IG1vZHVs
ZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluLmdldCgpKTsKKyAgICBjb25zdCBpbnN0YW5j
ZSA9IG5ldyBXZWJBc3NlbWJseS5JbnN0YW5jZShtb2R1bGUpOworICAgIGFzc2VydC5lcShpbnN0
YW5jZS5leHBvcnRzLmdldEdsb2JhbCgpLCA1KTsKKyAgICBpbnN0YW5jZS5leHBvcnRzLnNldEds
b2JhbCgzKTsKKyAgICBhc3NlcnQuZXEoaW5zdGFuY2UuZXhwb3J0cy5nZXRHbG9iYWwoKSwgMyk7
Cit9CisKK2NyZWF0ZUludGVybmFsR2xvYmFsTW9kdWxlKCk7CmRpZmYgLS1naXQgYS9KU1Rlc3Rz
L3dhc20vanMtYXBpL2dsb2JhbHMtZXhwb3J0LmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9i
YWxzLWV4cG9ydC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjY4MjY5NGViNjBlOTFlMDcwOGE5ODM4NzgyY2I3
ZDkzMDVlZGY4Ci0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWxz
LWV4cG9ydC5qcwpAQCAtMCwwICsxLDI4IEBACitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4v
YXNzZXJ0LmpzJzsKK2ltcG9ydCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworCitjb25z
dCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKTsKKworYnVpbGRlci5UeXBlKCkuRW5kKCkKKyAgICAu
SW1wb3J0KCkKKyAgICAgICAgLkdsb2JhbCgpLkkzMigiaW1wIiwgImdsb2JhbCIsICJpbW11dGFi
bGUiKS5FbmQoKQorICAgIC5FbmQoKQorICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgLkV4cG9y
dCgpCisgICAgICAgIC5GdW5jdGlvbigiZ2V0R2xvYmFsIikKKyAgICAgICAgLkdsb2JhbCgiZ2xv
YmFsIiwgMCkKKyAgICAuRW5kKCkKKyAgICAuQ29kZSgpCisKKyAgICAuRnVuY3Rpb24oImdldEds
b2JhbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAuR2V0R2xvYmFsKDAp
CisgICAgLkVuZCgpCisKKyAgICAuRW5kKCkKKworY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3Nl
bWJseSgpOworYmluLnRyaW0oKTsKKworY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1v
ZHVsZShiaW4uZ2V0KCkpOworY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1ibHkuSW5zdGFu
Y2UobW9kdWxlLCB7IGltcDogeyBnbG9iYWw6IDUgfSB9KTsKK2Fzc2VydC5lcShpbnN0YW5jZS5l
eHBvcnRzLmdsb2JhbCwgNSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3dhc20vanMtYXBpL2dsb2Jh
bHMtaW1wb3J0LmpzIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWxzLWltcG9ydC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yOTIyMzIzNDQ3NWFhOTI4YWY3YzljOTY1ZTRiYjRjYTkxNTZlZTJmCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy93YXNtL2pzLWFwaS9nbG9iYWxzLWltcG9ydC5qcwpAQCAtMCww
ICsxLDI5IEBACitpbXBvcnQgKiBhcyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKK2ltcG9y
dCBCdWlsZGVyIGZyb20gJy4uL0J1aWxkZXIuanMnOworCitjb25zdCBidWlsZGVyID0gbmV3IEJ1
aWxkZXIoKTsKKworYnVpbGRlci5UeXBlKCkuRW5kKCkKKyAgICAuSW1wb3J0KCkKKyAgICAgICAg
Lkdsb2JhbCgpLkkzMigiaW1wIiwgImdsb2JhbCIsICJpbW11dGFibGUiKS5FbmQoKQorICAgIC5F
bmQoKQorICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgLkdsb2JhbCgpLkkzMig1LCAibXV0YWJs
ZSIpLkVuZCgpCisgICAgLkV4cG9ydCgpCisgICAgICAgIC5GdW5jdGlvbigiZ2V0R2xvYmFsIikK
KyAgICAuRW5kKCkKKyAgICAuQ29kZSgpCisKKyAgICAvLyBHZXRHbG9iYWwKKyAgICAuRnVuY3Rp
b24oImdldEdsb2JhbCIsIHsgcGFyYW1zOiBbXSwgcmV0OiAiaTMyIiB9KQorICAgICAgICAuR2V0
R2xvYmFsKDApCisgICAgLkVuZCgpCisKKyAgICAuRW5kKCkKKworY29uc3QgYmluID0gYnVpbGRl
ci5XZWJBc3NlbWJseSgpOworYmluLnRyaW0oKTsKKworY29uc3QgbW9kdWxlID0gbmV3IFdlYkFz
c2VtYmx5Lk1vZHVsZShiaW4uZ2V0KCkpOworY29uc3QgaW5zdGFuY2UgPSBuZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlLCB7IGltcDogeyBnbG9iYWw6IDUgfSB9KTsKK2Fzc2VydC5lcShp
bnN0YW5jZS5leHBvcnRzLmdldEdsb2JhbCgpLCA1KTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvd2Fz
bS93YXNtLmpzb24gYi9KU1Rlc3RzL3dhc20vd2FzbS5qc29uCmluZGV4IGVjMGVmYzVkNTdmMzg3
NmVmYTZjM2Q4NzFhMjgzMDZiZTcwMGEwZTQuLmNmN2U2YzYyOTFiNjZjZDhkNzg0Zjk5NTMyYzlh
ZTM2NTMzODhiY2QgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvd2FzbS93YXNtLmpzb24KKysrIGIvSlNU
ZXN0cy93YXNtL3dhc20uanNvbgpAQCAtNTgsMTEgKzU4LDExIEBACiAgICAgICAgICJpNjQuY29u
c3QiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICA2Niwg
InJldHVybiI6IFsiaTY0Il0sICAgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAg
ICAgICAgImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAidmFsdWUiLCAgICAgICAgICAidHlwZSI6ICJ2
YXJpbnQ2NCJ9XSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRl
c2NyaXB0aW9uIjogImEgY29uc3RhbnQgdmFsdWUgaW50ZXJwcmV0ZWQgYXMgaTY0IiB9LAogICAg
ICAgICAiZjY0LmNvbnN0IjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAi
dmFsdWUiOiAgNjgsICJyZXR1cm4iOiBbImY2NCJdLCAgICAgICJwYXJhbWV0ZXIiOiBbXSwgICAg
ICAgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogInZhbHVlIiwgICAgICAg
ICAgInR5cGUiOiAidWludDY0In1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICJkZXNjcmlwdGlvbiI6ICJhIGNvbnN0YW50IHZhbHVlIGludGVycHJldGVkIGFz
IGY2NCIgfSwKICAgICAgICAgImYzMi5jb25zdCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJz
cGVjaWFsIiwgICAgInZhbHVlIjogIDY3LCAicmV0dXJuIjogWyJmMzIiXSwgICAgICAicGFyYW1l
dGVyIjogW10sICAgICAgICAgICAgICAgICAgICAgICAiaW1tZWRpYXRlIjogW3sibmFtZSI6ICJ2
YWx1ZSIsICAgICAgICAgICJ0eXBlIjogInVpbnQzMiJ9XSwgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAiYSBjb25zdGFudCB2YWx1ZSBp
bnRlcnByZXRlZCBhcyBmMzIiIH0sCi0gICAgICAgICJnZXRfbG9jYWwiOiAgICAgICAgICAgeyAi
Y2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICAzMiwgInJldHVybiI6IFsibG9jYWwi
XSwgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVkaWF0ZSI6
IFt7Im5hbWUiOiAibG9jYWxfaW5kZXgiLCAgICAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogInJlYWQg
YSBsb2NhbCB2YXJpYWJsZSBvciBwYXJhbWV0ZXIiIH0sCi0gICAgICAgICJzZXRfbG9jYWwiOiAg
ICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICAzMywgInJldHVy
biI6IFtdLCAgICAgICAgICAgInBhcmFtZXRlciI6IFsibG9jYWwiXSwgICAgICAgICAgICAgICAg
ImltbWVkaWF0ZSI6IFt7Im5hbWUiOiAibG9jYWxfaW5kZXgiLCAgICAidHlwZSI6ICJ2YXJ1aW50
MzIifV0sICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0
aW9uIjogIndyaXRlIGEgbG9jYWwgdmFyaWFibGUgb3IgcGFyYW1ldGVyIiB9LAotICAgICAgICAi
dGVlX2xvY2FsIjogICAgICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUi
OiAgMzQsICJyZXR1cm4iOiBbInByZXYiXSwgICAgICJwYXJhbWV0ZXIiOiBbImFueSJdLCAgICAg
ICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImxvY2FsX2luZGV4IiwgICAgInR5
cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICJkZXNjcmlwdGlvbiI6ICJ3cml0ZSBhIGxvY2FsIHZhcmlhYmxlIG9yIHBhcmFtZXRlciBh
bmQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIiB9LAotICAgICAgICAiZ2V0X2dsb2JhbCI6ICAgICAg
ICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgMzUsICJyZXR1cm4iOiBb
Imdsb2JhbCJdLCAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbeyJuYW1lIjogImdsb2JhbF9pbmRleCIsICAgInR5cGUiOiAidmFydWludDMyIn1d
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJyZWFkIGEgZ2xvYmFsIHZhcmlhYmxlIiB9LAotICAgICAgICAic2V0X2dsb2JhbCI6ICAgICAg
ICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgMzYsICJyZXR1cm4iOiBb
IiJdLCAgICAgICAgICJwYXJhbWV0ZXIiOiBbImdsb2JhbCJdLCAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbeyJuYW1lIjogImdsb2JhbF9pbmRleCIsICAgInR5cGUiOiAidmFydWludDMyIn1d
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJ3cml0ZSBhIGdsb2JhbCB2YXJpYWJsZSIgfSwKKyAgICAgICAgImdldF9sb2NhbCI6ICAgICAg
ICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZhbHVlIjogIDMyLCAicmV0dXJuIjog
WyJhbnkiXSwgICAgInBhcmFtZXRlciI6IFtdLCAgICAgICAgICAgICAgICAgICAgICAgImltbWVk
aWF0ZSI6IFt7Im5hbWUiOiAibG9jYWxfaW5kZXgiLCAgICAidHlwZSI6ICJ2YXJ1aW50MzIifV0s
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjog
InJlYWQgYSBsb2NhbCB2YXJpYWJsZSBvciBwYXJhbWV0ZXIiIH0sCisgICAgICAgICJzZXRfbG9j
YWwiOiAgICAgICAgICAgeyAiY2F0ZWdvcnkiOiAic3BlY2lhbCIsICAgICJ2YWx1ZSI6ICAzMywg
InJldHVybiI6IFtdLCAgICAgICAgICAgInBhcmFtZXRlciI6IFsiYW55Il0sICAgICAgICAgICAg
ICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImxvY2FsX2luZGV4IiwgICAgInR5cGUiOiAidmFy
dWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNj
cmlwdGlvbiI6ICJ3cml0ZSBhIGxvY2FsIHZhcmlhYmxlIG9yIHBhcmFtZXRlciIgfSwKKyAgICAg
ICAgInRlZV9sb2NhbCI6ICAgICAgICAgICB7ICJjYXRlZ29yeSI6ICJzcGVjaWFsIiwgICAgInZh
bHVlIjogIDM0LCAicmV0dXJuIjogWyJhbnkiXSwgICAgICJwYXJhbWV0ZXIiOiBbImFueSJdLCAg
ICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImxvY2FsX2luZGV4IiwgICAg
InR5cGUiOiAidmFydWludDMyIn1dLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICJkZXNjcmlwdGlvbiI6ICJ3cml0ZSBhIGxvY2FsIHZhcmlhYmxlIG9yIHBhcmFtZXRl
ciBhbmQgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIiB9LAorICAgICAgICAiZ2V0X2dsb2JhbCI6ICAg
ICAgICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgMzUsICJyZXR1cm4i
OiBbImFueSJdLCAgICJwYXJhbWV0ZXIiOiBbXSwgICAgICAgICAgICAgICAgICAgICAgICJpbW1l
ZGlhdGUiOiBbeyJuYW1lIjogImdsb2JhbF9pbmRleCIsICAgInR5cGUiOiAidmFydWludDMyIn1d
LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkZXNjcmlwdGlvbiI6
ICJyZWFkIGEgZ2xvYmFsIHZhcmlhYmxlIiB9LAorICAgICAgICAic2V0X2dsb2JhbCI6ICAgICAg
ICAgIHsgImNhdGVnb3J5IjogInNwZWNpYWwiLCAgICAidmFsdWUiOiAgMzYsICJyZXR1cm4iOiBb
XSwgICAgICAgICAicGFyYW1ldGVyIjogWyJhbnkiXSwgICAgICAgICAgICAgICAiaW1tZWRpYXRl
IjogW3sibmFtZSI6ICJnbG9iYWxfaW5kZXgiLCAgICJ0eXBlIjogInZhcnVpbnQzMiJ9XSwgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZGVzY3JpcHRpb24iOiAid3Jp
dGUgYSBnbG9iYWwgdmFyaWFibGUiIH0sCiAgICAgICAgICJjYWxsIjogICAgICAgICAgICAgICAg
eyAiY2F0ZWdvcnkiOiAiY2FsbCIsICAgICAgICJ2YWx1ZSI6ICAxNiwgInJldHVybiI6IFsiY2Fs
bCJdLCAgICAgInBhcmFtZXRlciI6IFsiY2FsbCJdLCAgICAgICAgICAgICAgICAgImltbWVkaWF0
ZSI6IFt7Im5hbWUiOiAiZnVuY3Rpb25faW5kZXgiLCAidHlwZSI6ICJ2YXJ1aW50MzIifV0sICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRlc2NyaXB0aW9uIjogImNh
bGwgYSBmdW5jdGlvbiBieSBpdHMgaW5kZXgiIH0sCiAgICAgICAgICJjYWxsX2luZGlyZWN0Ijog
ICAgICAgeyAiY2F0ZWdvcnkiOiAiY2FsbCIsICAgICAgICJ2YWx1ZSI6ICAxNywgInJldHVybiI6
IFsiY2FsbCJdLCAgICAgInBhcmFtZXRlciI6IFsiY2FsbCJdLCAgICAgICAgICAgICAgICAgImlt
bWVkaWF0ZSI6IFt7Im5hbWUiOiAidHlwZV9pbmRleCIsICAgICAidHlwZSI6ICJ2YXJ1aW50MzIi
fSwgeyJuYW1lIjogInJlc2VydmVkIiwgICAgICJ0eXBlIjogInZhcnVpbnQxIn1dLCAiZGVzY3Jp
cHRpb24iOiAiY2FsbCBhIGZ1bmN0aW9uIGluZGlyZWN0IHdpdGggYW4gZXhwZWN0ZWQgc2lnbmF0
dXJlIiB9LAogICAgICAgICAiaTMyLmxvYWQ4X3MiOiAgICAgICAgIHsgImNhdGVnb3J5IjogIm1l
bW9yeSIsICAgICAidmFsdWUiOiAgNDQsICJyZXR1cm4iOiBbImkzMiJdLCAgICAgICJwYXJhbWV0
ZXIiOiBbImFkZHIiXSwgICAgICAgICAgICAgICAgICJpbW1lZGlhdGUiOiBbeyJuYW1lIjogImZs
YWdzIiwgICAgICAgICAgInR5cGUiOiAidmFydWludDMyIn0sIHsibmFtZSI6ICJvZmZzZXQiLCAi
dHlwZSI6ICJ2YXJ1aW50MzIifV0sICJkZXNjcmlwdGlvbiI6ICJsb2FkIGZyb20gbWVtb3J5IiB9
LAo=
</data>
<flag name="review"
          id="319396"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>