<?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>177998</bug_id>
          
          <creation_ts>2017-10-05 23:46:15 -0700</creation_ts>
          <short_desc>Emit SPIR-V from WSL compiler (Part 1)</short_desc>
          <delta_ts>2018-10-13 19:18:44 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGPU</component>
          <version>Other</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>176199</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>keith_miller</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1357480</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-05 23:46:15 -0700</bug_when>
    <thetext>Emit SPIR-V from WSL compiler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357481</commentid>
    <comment_count>1</comment_count>
      <attachid>322993</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-05 23:47:34 -0700</bug_when>
    <thetext>Created attachment 322993
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357705</commentid>
    <comment_count>2</comment_count>
      <attachid>323038</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-06 12:36:59 -0700</bug_when>
    <thetext>Created attachment 323038
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357815</commentid>
    <comment_count>3</comment_count>
      <attachid>323064</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-06 16:26:24 -0700</bug_when>
    <thetext>Created attachment 323064
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1357824</commentid>
    <comment_count>4</comment_count>
      <attachid>323065</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-06 16:49:48 -0700</bug_when>
    <thetext>Created attachment 323065
WIP</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1358019</commentid>
    <comment_count>5</comment_count>
      <attachid>323116</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2017-10-07 19:55:50 -0700</bug_when>
    <thetext>Created attachment 323116
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359423</commentid>
    <comment_count>6</comment_count>
      <attachid>323116</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2017-10-11 15:43:07 -0700</bug_when>
    <thetext>Comment on attachment 323116
Patch

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

&gt; Tools/WebGPUShadingLanguageRI/SPIRVCodegen.js:104
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +

So much space!

&gt; Tools/WebGPUShadingLanguageRI/SPIRVCodegen.js:120
&gt; +                    switch (type[0]) {

It seems like you really want the TypeRef, not the instantiated type.  You should try to see how you can structure this code so that you get that.  Then, you can case on types more easily.

FWIW the inliner already leaves behind the uninstantiated types in other places where we already needed them.

I don&apos;t think that this concern should block landing, since the plan here is to land a WIP that we can iterate on.

&gt; Tools/WebGPUShadingLanguageRI/SPIRVCodegen.js:190
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +

So much space!

&gt; Tools/WebGPUShadingLanguageRI/SPIRVCodegen.js:244
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +
&gt; +

So space.

&gt; Tools/WebGPUShadingLanguageRI/SPIRVTypeAnalyzer.js:102
&gt; +    // FIXME: Using toString() in these functions is a hack. Instead, we should implement a proper type deduper.

Yeah, it&apos;s a hack.  But also, can you explain why you need a map at all?

&gt; Tools/WebGPUShadingLanguageRI/SPIRVTypeAnalyzer.js:138
&gt; +            this.typeMap.set(node.toString(), {id: id, fieldTypes: fieldTypes});

ES6 lets you say just {id, fieldTypes} in this case.

&gt; Tools/WebGPUShadingLanguageRI/SPIRVVariableAnalyzer.js:141
&gt; +        let builtInStructs = [
&gt; +            &quot;struct vec2&lt;&gt; { int32 x; int32 y }&quot;,
&gt; +            &quot;struct vec2&lt;&gt; { uint32 x; uint32 y; }&quot;,
&gt; +            &quot;struct vec2&lt;&gt; { float32 x; float32 y; }&quot;,
&gt; +            &quot;struct vec2&lt;&gt; { float64 x; float64 y; }&quot;,
&gt; +            &quot;struct vec3&lt;&gt; { int32 x; int32 y; int32 z; }&quot;,
&gt; +            &quot;struct vec3&lt;&gt; { uint32 x; uint32 y; uint32 z; }&quot;,
&gt; +            &quot;struct vec3&lt;&gt; { float32 x; float32 y; float32 z; }&quot;,
&gt; +            &quot;struct vec3&lt;&gt; { float64 x; float64 y; float64 z; }&quot;,
&gt; +            &quot;struct vec4&lt;&gt; { int32 x; int32 y; int32 z; int32 w; }&quot;,
&gt; +            &quot;struct vec4&lt;&gt; { uint32 x; uint32 y; uint32 z; uint32 w; }&quot;,
&gt; +            &quot;struct vec4&lt;&gt; { float32 x; float32 y; float32 z; float32 w; }&quot;,
&gt; +            &quot;struct vec4&lt;&gt; { float64 x; float64 y; float64 z; float64 w; }&quot;
&gt; +        ];
&gt; +        for (let builtInStruct of builtInStructs) {
&gt; +            if (node.toString() == builtInStruct) {
&gt; +                this.result.push({ name: this.nameComponents.join(&quot;&quot;), id: this._currentId++, type: this.typeMap.get(node.toString()).id, location: this._currentLocation++  });
&gt; +                return;
&gt; +            }
&gt; +        }

I think you really want Intrinsics to stash fields in those types to describe their spirv behavior.  I think that the vec types should be native types so that this becomes easier.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359653</commentid>
    <comment_count>7</comment_count>
      <attachid>323116</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-12 11:45:08 -0700</bug_when>
    <thetext>Comment on attachment 323116
Patch

Clearing flags on attachment: 323116

Committed r223246: &lt;https://trac.webkit.org/changeset/223246&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359654</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-10-12 11:45:09 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1359655</commentid>
    <comment_count>9</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-10-12 11:46:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/34959874&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1468968</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2018-10-13 19:18:44 -0700</bug_when>
    <thetext>Migrated to https://github.com/gpuweb/WHLSL/issues/164</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322993</attachid>
            <date>2017-10-05 23:47:34 -0700</date>
            <delta_ts>2017-10-06 12:36:58 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-177998-20171005234733.patch</filename>
            <type>text/plain</type>
            <size>22642</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTUzCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMWY0N2Q3MWRhOTIyZGUxMTIxODhjZDNjZGM3NTA3NjE4
OTkwZDZjMy4uYWQzZTcwNGQyNWRhNDljYWMxZTM1MWUwYTRkYjM4ZmM0NTU4NThkNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI2
IEBACisyMDE3LTEwLTA1ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgRW1pdCBTUElSLVYgZnJvbSBXU0wgY29tcGlsZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzk5OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTGF0ZUNoZWNrZXIuanM6CisgICAgICAgIChMYXRlQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNr
U2hhZGVyVHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRt
bDoKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVkNvZGVnZW4uanM6IEFk
ZGVkLgorICAgICAgICAoSW50ZXJmYWNlRGVzY2VudCk6CisgICAgICAgIChJbnRlcmZhY2VEZXNj
ZW50LnByb3RvdHlwZS5nZXQgdmFyaWFibGVNYXApOgorICAgICAgICAoSW50ZXJmYWNlRGVzY2Vu
dC5wcm90b3R5cGUudmlzaXRUeXBlUmVmKToKKyAgICAgICAgKEludGVyZmFjZURlc2NlbnQucHJv
dG90eXBlLnZpc2l0U3RydWN0VHlwZSk6CisgICAgICAgIChJbnRlcmZhY2VEZXNjZW50LnByb3Rv
dHlwZS52aXNpdE5hdGl2ZVR5cGUpOgorICAgICAgICAocG9wdWxhdGVJbnRlcmZhY2UpOgorICAg
ICAgICAoYXBwZW5kRW50cnlQb2ludHMpOgorICAgICAgICAoYXBwZW5kRXhlY3V0aW9uTW9kZSk6
CisgICAgICAgIChnZW5lcmF0ZVNQSVJWKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9XU0wubWQ6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRt
bDoKKwogMjAxNy0xMC0wNSAgSmVyIE5vYmxlICA8amVyLm5vYmxlQGFwcGxlLmNvbT4KIAogICAg
ICAgICBbQ29jb2FdIEVuYWJsZSBFTkFCTEVfRU5DUllQVEVEX01FRElBIGJ1aWxkLXRpbWUgc2V0
dGluZwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGF0ZUNoZWNr
ZXIuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tlci5qcwppbmRl
eCA4MTQwYTIyZjViZTRlZmJlMWYyMGVkNDk5ODA4ZDUzYjdhOTI5ZDk3Li41ZDFlZjk1YTIzMDJi
MmQ2ZmRiOWUwMzBlYWIzMmU2YTcwZDc2NmRlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tlci5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9MYXRlQ2hlY2tlci5qcwpAQCAtMzYsNiArMzYsNyBAQCBjbGFzcyBMYXRlQ2hlY2tl
ciBleHRlbmRzIFZpc2l0b3IgewogICAgIAogICAgIF9jaGVja1NoYWRlclR5cGUobm9kZSkKICAg
ICB7CisgICAgICAgIC8vIEZJWE1FOiBUaWdodGVuIHRoZXNlIGNoZWNrcy4gRm9yIG5vdywgd2Ug
c2hvdWxkIG9ubHkgYWNjZXB0IGludDMyLCB1aW50MzIsIGZsb2F0MzIsIGFuZCBmbG9hdDY0Lgog
ICAgICAgICBsZXQgYXNzZXJ0UHJpbWl0aXZlID0gdHlwZSA9PiB7CiAgICAgICAgICAgICBpZiAo
IXR5cGUuaXNQcmltaXRpdmUpCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Io
bm9kZS5vcmlnaW4ub3JpZ2luU3RyaW5nLCAiU2hhZGVyIHNpZ25hdHVyZSBjYW5ub3QgaW5jbHVk
ZSBub24tcHJpbWl0aXZlIHR5cGU6ICIgKyB0eXBlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQ
VVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9TUElSVi5odG1sCmluZGV4IDIxYWM0ZTIxMGFjNGZjZDg1MWI0YWMyYjEwN2MxZjM2MGE4
NDEzNzIuLjNhMzUzNWQ5YzBjM2FkZTU1OWRjMmQyZmRjMTI2ZDE1ZWU3ZDhjNDYgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwKKysrIGIvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbApAQCAtMSw0NSArMSwxOTQgQEAKIDwh
RE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KLTxzY3JpcHQgc3JjPSJTUElSLVYuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOb2RlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJlZmVyZW5jZVR5cGUu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWYWx1ZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJS
ZXdyaXRlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpc2l0b3IuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorCisgICAgPHNjcmlw
dCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkFub255
bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQXJyYXlSZWZUeXBl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQXJyYXlUeXBlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iQXNzaWdubWVudC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IkF1dG9XcmFwcGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQmxvY2suanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJCb29sTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IkJyZWFrLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2Fs
bEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDYWxsRnVuY3Rpb24u
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVjay5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkNoZWNrTGl0ZXJhbFR5cGVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iQ2hlY2tMb29wcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrUmVj
dXJzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tSZWN1cnNpdmVUeXBl
cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrUmV0dXJucy5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrVW5yZWFjaGFibGVDb2RlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tXcmFwcGVkLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNsb25lUHJvZ3Jh
bS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbW1hRXhwcmVzc2lvbi5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnN0ZXhwckZvbGRlci5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IkNvbnN0ZXhwclR5cGVQYXJhbWV0ZXIuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJDb250aW51ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNv
bnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IkRvV2hpbGVMb29wLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRG90RXhwcmVz
c2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkRvdWJsZUxpdGVyYWwuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJEb3VibGVMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IkRlcmVmZXJlbmNlRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IkVBcnJheVJlZi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IkVCdWZmZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJFQnVmZmVyQnVpbGRlci5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkVQdHIuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJFbnVtTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkVu
dW1NZW1iZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJFbnVtVHlwZS5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV2YWx1YXRpb25Db21tb24uanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJFdmFsdWF0b3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJFeHByZXNzaW9uRmluZGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRXh0ZXJu
YWxPcmlnaW4uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGaWVsZC5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IkZpbmRIaWdoWm9tYmllcy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkZsYXR0ZW5Qcm90b2NvbEV4dGVuZHMuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJGbGF0dGVuZWRTdHJ1Y3RPZmZzZXRHYXRoZXJlci5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IkZsb2F0TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IkZsb2F0TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGb2xk
Q29uc3RleHBycy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZvckxvb3AuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGdW5jLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iRnVuY0RlZi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZ1bmNJbnN0YW50
aWF0b3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGdW5jUGFyYW1ldGVyLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRnVuY3Rpb25MaWtlQmxvY2suanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJIaWdoWm9tYmllRmluZGVyLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iSWRlbnRpdHlFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iSWZTdGF0ZW1lbnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJbmRleEV4
cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJbmZlclR5cGVzRm9yQ2Fs
bC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IklubGluZS5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IklubGluZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJ
bnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJbnRM
aXRlcmFsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW50TGl0ZXJhbFR5cGUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJbnRyaW5zaWNzLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iTGF0ZUNoZWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJMZXhlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkxleGVyVG9rZW4uanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJMaXRlcmFsVHlwZUNoZWNrZXIuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJMb2dpY2FsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkxvZ2ljYWxOb3QuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJM
b29wQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik1ha2VBcnJheVJlZkV4
cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNYWtlUHRyRXhwcmVzc2lv
bi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5hbWVDb250ZXh0LmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iTmFtZUZpbmRlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ik5hbWVSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5hdGl2
ZUZ1bmMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYXRpdmVGdW5jSW5zdGFuY2Uu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZUluc3RhbmNlLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9Ik51bGxMaXRlcmFsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
TnVsbFR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJPcmlnaW5LaW5kLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0aW9uRmFpbHVyZS5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3BlcnR5
UmVzb2x2ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcm9ncmFtLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvZ3JhbVdpdGhVbm5lY2Vzc2FyeVRoaW5nc1JlbW92
ZWQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sRGVjbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlByb3RvY29sRnVuY0RlY2wuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQ
cm90b2NvbFJlZi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlB0clR5cGUuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZWFkTW9kaWZ5V3JpdGVFeHByZXNzaW9uLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tlci5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IlJlY3Vyc2l2ZVR5cGVDaGVja2VyLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iUmVzb2x2ZU5hbWVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJl
c29sdmVQcm9wZXJ0aWVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmVzb2x2ZVR5
cGVEZWZzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmV0dXJuLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iUmV0dXJuQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlJldHVybkV4Y2VwdGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IlNQSVItVi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlNQSVJWQ29kZWdlbi5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlN0YW5kYXJkTGlicmFyeS5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IlN0YXRlbWVudENsb25lci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlN0cnVjdExheW91dEJ1aWxkZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJTdHJ1Y3RUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU3Vic3RpdHV0
aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU3dpdGNoQ2FzZS5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlN3aXRjaFN0YXRlbWVudC5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IlN5bnRoZXNpemVFbnVtRnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IlRyYXBTdGF0ZW1lbnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJUeXBlRGVmLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZURlZlJlc29sdmVy
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZU9yVmFyaWFibGVSZWYuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJUeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJUeXBlUmVmLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iVHlwZVZhcmlhYmxlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZVZh
cmlhYmxlVHJhY2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVkVmFsdWUu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJVaW50TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IlVpbnRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlVuaWZpY2F0aW9uQ29udGV4dC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IlVucmVhY2hhYmxlQ29kZUNoZWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJWYXJpYWJsZURlY2wuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWYXJpYWJsZVJl
Zi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpc2l0aW5nU2V0LmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iV1N5bnRheEVycm9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iV1RyYXBFcnJvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IldUeXBl
RXJyb3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJXaGlsZUxvb3AuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJXcmFwQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0
PgorICAgIGxldCBjb2RlID0gYAorc3RydWN0IFZlcnRleElucHV0IHsKKyAgICBmbG9hdDIgcG9z
aXRpb247CisgICAgZmxvYXQzIGNvbG9yOworfQorCitzdHJ1Y3QgVmVydGV4T3V0cHV0IHsKKyAg
ICBmbG9hdDQgd3NsX1Bvc2l0aW9uOworICAgIGZsb2F0NCBjb2xvcjsKKyAgICBpbnQzMiBhc2Rm
OworfQorCitzdHJ1Y3QgRnJhZ21lbnRPdXRwdXQgeworICAgIGZsb2F0NCB3c2xfQ29sb3I7Cit9
CisKK3ZlcnRleCBWZXJ0ZXhPdXRwdXQgdmVydGV4U2hhZGVyKFZlcnRleElucHV0IHZlcnRleElu
cHV0KSB7CisgICAgVmVydGV4T3V0cHV0IHJlc3VsdDsKKyAgICByZXN1bHQud3NsX1Bvc2l0aW9u
ID0gZmxvYXQ0KHZlcnRleElucHV0LnBvc2l0aW9uLCAwLiwgMS4pOworICAgIHJlc3VsdC5jb2xv
ciA9IGZsb2F0NCh2ZXJ0ZXhJbnB1dC5jb2xvciwgMSk7CisgICAgcmVzdWx0LmFzZGYgPSA3Owor
ICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IEZyYWdtZW50T3V0cHV0IGZyYWdtZW50
U2hhZGVyKFZlcnRleE91dHB1dCBzdGFnZUluKSB7CisgICAgRnJhZ21lbnRPdXRwdXQgcmVzdWx0
OworICAgIHJlc3VsdC53c2xfQ29sb3IgPSBzdGFnZUluLmNvbG9yOworICAgIHJldHVybiByZXN1
bHQ7Cit9YDsKIAogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24g
KCkgewogICAgICAgICBmZXRjaCgic3BpcnYuY29yZS5ncmFtbWFyLmpzb24iKS50aGVuKHJlc3Bv
bnNlID0+IHJlc3BvbnNlLmpzb24oKSkudGhlbihmdW5jdGlvbiAoanNvbikgewogICAgICAgICAg
ICAgbGV0IHNwaXJ2ID0gU1BJUlYoanNvbik7Ci0gICAgICAgICAgICBsZXQgYXNzZW1ibGVyID0g
bmV3IFNQSVJWQXNzZW1ibGVyKCk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBz
cGlydi5vcHMuQ2FwYWJpbGl0eShzcGlydi5raW5kcy5DYXBhYmlsaXR5LlNoYWRlcikpOwotICAg
ICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLk1lbW9yeU1vZGVsKHNwaXJ2
LmtpbmRzLkFkZHJlc3NpbmdNb2RlbC5Mb2dpY2FsLCBzcGlydi5raW5kcy5NZW1vcnlNb2RlbC5H
TFNMNDUwKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRW50
cnlQb2ludChzcGlydi5raW5kcy5FeGVjdXRpb25Nb2RlbC5GcmFnbWVudCwgNSwgIm1haW4iLCAx
MCwgMTcpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5FeGVj
dXRpb25Nb2RlKDUsIHNwaXJ2LmtpbmRzLkV4ZWN1dGlvbk1vZGUuT3JpZ2luTG93ZXJMZWZ0KSk7
Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRGVjb3JhdGUoMTAs
IHNwaXJ2LmtpbmRzLkRlY29yYXRpb24uTG9jYXRpb24sIDApKTsKLSAgICAgICAgICAgIGFzc2Vt
Ymxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5EZWNvcmF0ZSgxNCwgc3BpcnYua2luZHMuRGVjb3Jh
dGlvbi5EZXNjcmlwdG9yU2V0LCAwKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5l
dyBzcGlydi5vcHMuRGVjb3JhdGUoMTQsIHNwaXJ2LmtpbmRzLkRlY29yYXRpb24uQmluZGluZywg
MSkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkRlY29yYXRl
KDE3LCBzcGlydi5raW5kcy5EZWNvcmF0aW9uLkxvY2F0aW9uLCAwKSk7Ci0gICAgICAgICAgICBh
c3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVZvaWQoMykpOwotICAgICAgICAgICAg
YXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVGdW5jdGlvbig0LCAzKSk7Ci0gICAg
ICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZUZsb2F0KDcsIDMyKSk7
Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVZlY3Rvcig4
LCA3LCA0KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlw
ZVBvaW50ZXIoOSwgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLk91dHB1dCwgOCkpOwotICAgICAg
ICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlZhcmlhYmxlKDksIDEwLCBzcGly
di5raW5kcy5TdG9yYWdlQ2xhc3MuT3V0cHV0KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBw
ZW5kKG5ldyBzcGlydi5vcHMuVHlwZUltYWdlKDExLCA3LCBzcGlydi5raW5kcy5EaW1bIjJEIl0s
IDAsIDAsIDAsIDEsIHNwaXJ2LmtpbmRzLkltYWdlRm9ybWF0LlVua25vd24pKTsKLSAgICAgICAg
ICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlU2FtcGxlZEltYWdlKDEyLCAx
MSkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVQb2lu
dGVyKDEzLCBzcGlydi5raW5kcy5TdG9yYWdlQ2xhc3MuVW5pZm9ybUNvbnN0YW50LCAxMikpOwot
ICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlZhcmlhYmxlKDEzLCAx
NCwgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLlVuaWZvcm1Db25zdGFudCkpOwotICAgICAgICAg
ICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVQb2ludGVyKDE2LCBzcGlydi5r
aW5kcy5TdG9yYWdlQ2xhc3MuSW5wdXQsIDgpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBl
bmQobmV3IHNwaXJ2Lm9wcy5WYXJpYWJsZSgxNiwgMTcsIHNwaXJ2LmtpbmRzLlN0b3JhZ2VDbGFz
cy5JbnB1dCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5
cGVWZWN0b3IoMTgsIDcsIDIpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNw
aXJ2Lm9wcy5GdW5jdGlvbigzLCA1LCBzcGlydi5raW5kcy5GdW5jdGlvbkNvbnRyb2wuTm9uZSwg
NCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkxhYmVsKDYp
KTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5Mb2FkKDEyLCAx
NSwgMTQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5Mb2Fk
KDgsIDE5LCAxNykpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3Bz
LlZlY3RvclNodWZmbGUoMTgsIDIwLCAxOSwgMTksIDAsIDEpKTsKLSAgICAgICAgICAgIGFzc2Vt
Ymxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5JbWFnZVNhbXBsZUltcGxpY2l0TG9kKDgsIDIxLCAx
NSwgMjApKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5TdG9y
ZSgxMCwgMjEpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5S
ZXR1cm4oKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRnVu
Y3Rpb25FbmQoKSk7Ci0gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXNzZW1ibGVyLnJlc3VsdDsK
LSAgICAgICAgICAgIAorICAgICAgICAgICAgbGV0IHByb2dyYW0gPSBwcmVwYXJlKCIvaW50ZXJu
YWwvdGVzdCIsIDAsIGNvZGUpOworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdlbmVyYXRlU1BJ
UlYoc3BpcnYsIHByb2dyYW0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAg
fSkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgICAgIGxldCByZXN1bHRFbGVtZW50
ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIlJlc3VsdCIpOwogICAgICAgICAgICAgd2hpbGUg
KHJlc3VsdEVsZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggIT0gMCkKICAgICAgICAgICAgICAgICBy
ZXN1bHRFbGVtZW50LnJlbW92ZUNoaWxkKHJlc3VsdEVsZW1lbnQuY2hpbGROb2Rlc1swXSk7CmRp
ZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVkNvZGVnZW4uanMg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVkNvZGVnZW4uanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMTBmOTJjM2RkZDRhMGM3MmFlYzc4YjIyMzBjZjdkZjQ3M2E1NGJmYQotLS0gL2Rldi9udWxs
CisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWQ29kZWdlbi5qcwpAQCAt
MCwwICsxLDE2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBnZW5lcmF0ZVNQSVJWKHNwaXJ2LCBwcm9ncmFt
KQoreworICAgIGxldCBjdXJyZW50SWQgPSAxOworCisgICAgbGV0IHByaW1pdGl2ZVR5cGVzID0g
bmV3IE1hcCgpOworICAgIHByaW1pdGl2ZVR5cGVzLnNldChwcm9ncmFtLmludHJpbnNpY3Mudm9p
ZCwgY3VycmVudElkKyspOworICAgIHByaW1pdGl2ZVR5cGVzLnNldChwcm9ncmFtLmludHJpbnNp
Y3MuaW50MzIsIGN1cnJlbnRJZCsrKTsKKyAgICBwcmltaXRpdmVUeXBlcy5zZXQocHJvZ3JhbS5p
bnRyaW5zaWNzLnVpbnQzMiwgY3VycmVudElkKyspOworICAgIHByaW1pdGl2ZVR5cGVzLnNldChw
cm9ncmFtLmludHJpbnNpY3MudWludDgsIGN1cnJlbnRJZCsrKTsKKyAgICBwcmltaXRpdmVUeXBl
cy5zZXQocHJvZ3JhbS5pbnRyaW5zaWNzLmZsb2F0LCBjdXJyZW50SWQrKyk7CisgICAgcHJpbWl0
aXZlVHlwZXMuc2V0KHByb2dyYW0uaW50cmluc2ljcy5kb3VibGUsIGN1cnJlbnRJZCsrKTsKKyAg
ICBwcmltaXRpdmVUeXBlcy5zZXQocHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2wsIGN1cnJlbnRJZCsr
KTsKKworICAgIGNsYXNzIEludGVyZmFjZURlc2NlbnQgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAg
ICAgY29uc3RydWN0b3IodmFyaWFibGVNYXApCisgICAgICAgIHsKKyAgICAgICAgICAgIHN1cGVy
KCk7CisgICAgICAgICAgICB0aGlzLl92YXJpYWJsZU1hcCA9IHZhcmlhYmxlTWFwOworICAgICAg
ICB9CisKKyAgICAgICAgZ2V0IHZhcmlhYmxlTWFwKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIHRoaXMuX3ZhcmlhYmxlTWFwOworICAgICAgICB9CisKKyAgICAgICAgdmlzaXRUeXBl
UmVmKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZpc2l0U3RydWN0VHlwZShub2RlKQorICAgICAgICB7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUubmFtZSkgeworICAgICAgICAgICAgY2FzZSAidmVjMiI6
CisgICAgICAgICAgICBjYXNlICJ2ZWMzIjoKKyAgICAgICAgICAgIGNhc2UgInZlYzQiOgorICAg
ICAgICAgICAgICAgIGlmICghcHJpbWl0aXZlVHlwZXMuaGFzKG5vZGUubmFtZSkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbGV0IG5ld01hcCA9IG5ldyBNYXAoKTsKKyAgICAgICAgICAgICAgICAg
ICAgbmV3TWFwLnNldChwcm9ncmFtLmludHJpbnNpY3MuaW50MzIsIGN1cnJlbnRJZCsrKTsKKyAg
ICAgICAgICAgICAgICAgICAgbmV3TWFwLnNldChwcm9ncmFtLmludHJpbnNpY3MudWludDMyLCBj
dXJyZW50SWQrKyk7CisgICAgICAgICAgICAgICAgICAgIG5ld01hcC5zZXQocHJvZ3JhbS5pbnRy
aW5zaWNzLmZsb2F0LCBjdXJyZW50SWQrKyk7CisgICAgICAgICAgICAgICAgICAgIG5ld01hcC5z
ZXQocHJvZ3JhbS5pbnRyaW5zaWNzLmRvdWJsZSwgY3VycmVudElkKyspOworICAgICAgICAgICAg
ICAgICAgICBwcmltaXRpdmVUeXBlcy5zZXQobm9kZS5uYW1lLCBuZXdNYXApOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICB0aGlzLnZhcmlhYmxlTWFwLnNldChjdXJyZW50SWQr
KywgcHJpbWl0aXZlVHlwZXMuZ2V0KG5vZGUubmFtZSkuZ2V0KG5vZGUuZmllbGRzLm5leHQoKS52
YWx1ZS50eXBlLnR5cGUudHlwZSkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgc3VwZXIudmlzaXRTdHJ1Y3RUeXBlKG5vZGUpOworICAgICAgICB9
CisKKyAgICAgICAgdmlzaXROYXRpdmVUeXBlKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHRoaXMudmFyaWFibGVNYXAuc2V0KGN1cnJlbnRJZCsrLCBwcmltaXRpdmVUeXBlcy5nZXQobm9k
ZSkpOworICAgICAgICB9CisgICAgfQorCisgICAgbGV0IGF2YWlsYWJsZVZlcnRleFNoYWRlcnMg
PSBbXTsKKyAgICBsZXQgYXZhaWxhYmxlRnJhZ21lbnRTaGFkZXJzID0gW107CisgICAgZm9yIChs
ZXQgZnVuY3Rpb25OYW1lcyBvZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAg
ICBmb3IgKGxldCBmdW5jIG9mIGZ1bmN0aW9uTmFtZXMpIHsKKyAgICAgICAgICAgIGlmIChmdW5j
LnNoYWRlclR5cGUgPT0gInZlcnRleCIpCisgICAgICAgICAgICAgICAgYXZhaWxhYmxlVmVydGV4
U2hhZGVycy5wdXNoKGZ1bmMpOworICAgICAgICAgICAgZWxzZSBpZiAoZnVuYy5zaGFkZXJUeXBl
ID09ICJmcmFnbWVudCIpCisgICAgICAgICAgICAgICAgYXZhaWxhYmxlRnJhZ21lbnRTaGFkZXJz
LnB1c2goZnVuYyk7CisgICAgICAgIH0KKyAgICB9CisKKworICAgIGZ1bmN0aW9uIHBvcHVsYXRl
SW50ZXJmYWNlKGF2YWlsYWJsZVNoYWRlcnMsIGVudHJ5UG9pbnRzKSB7CisgICAgICAgIGZvciAo
bGV0IHNoYWRlciBvZiBhdmFpbGFibGVTaGFkZXJzKSB7CisgICAgICAgICAgICBsZXQgaW5saW5l
ZFNoYWRlciA9IHByb2dyYW0uZnVuY0luc3RhbnRpYXRvci5nZXRVbmlxdWUoc2hhZGVyLCBbXSk7
CisgICAgICAgICAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwgaW5saW5lZFNoYWRlciwgbmV3
IFZpc2l0aW5nU2V0KHNoYWRlcikpOworICAgICAgICAgICAgbGV0IGlucHV0cyA9IG5ldyBNYXAo
KTsKKyAgICAgICAgICAgIGxldCBvdXRwdXRzID0gbmV3IE1hcCgpOworICAgICAgICAgICAgaW5s
aW5lZFNoYWRlci5yZXR1cm5UeXBlLnZpc2l0KG5ldyBJbnRlcmZhY2VEZXNjZW50KG91dHB1dHMp
KTsKKyAgICAgICAgICAgIGZvciAobGV0IHBhcmFtZXRlciBvZiBpbmxpbmVkU2hhZGVyLnBhcmFt
ZXRlcnMpIHsKKyAgICAgICAgICAgICAgICBpZiAocGFyYW1ldGVyLnR5cGUudHlwZSBpbnN0YW5j
ZW9mIFN0cnVjdFR5cGUpCisgICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlci52aXNpdChuZXcg
SW50ZXJmYWNlRGVzY2VudChpbnB1dHMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVu
dHJ5UG9pbnRzLnNldChjdXJyZW50SWQrKywgeyBzaGFkZXI6IGlubGluZWRTaGFkZXIsIGlucHV0
czogaW5wdXRzLCBvdXRwdXRzOiBvdXRwdXRzIH0pOworICAgICAgICB9CisgICAgfQorICAgIGxl
dCB2ZXJ0ZXhFbnRyeVBvaW50cyA9IG5ldyBNYXAoKTsKKyAgICBsZXQgZnJhZ21lbnRFbnRyeVBv
aW50cyA9IG5ldyBNYXAoKTsKKyAgICBwb3B1bGF0ZUludGVyZmFjZShhdmFpbGFibGVWZXJ0ZXhT
aGFkZXJzLCB2ZXJ0ZXhFbnRyeVBvaW50cyk7CisgICAgcG9wdWxhdGVJbnRlcmZhY2UoYXZhaWxh
YmxlRnJhZ21lbnRTaGFkZXJzLCBmcmFnbWVudEVudHJ5UG9pbnRzKTsKKworICAgIGxldCBhc3Nl
bWJsZXIgPSBuZXcgU1BJUlZBc3NlbWJsZXIoKTsKKyAgICAvLyAxLiBBbGwgT3BDYXBhYmlsaXR5
IGluc3RydWN0aW9ucworICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5DYXBhYmls
aXR5KHNwaXJ2LmtpbmRzLkNhcGFiaWxpdHkuU2hhZGVyKSk7CisgICAgLy8gMi4gT3B0aW9uYWwg
T3BFeHRlbnNpb24gaW5zdHJ1Y3Rpb25zCisgICAgLy8gMy4gT3B0aW9uYWwgT3BFeHRJbnN0SW1w
b3J0IGluc3RydWN0aW9ucworICAgIC8vIDQuIFRoZSBzaW5nbGUgcmVxdWlyZWQgT3BNZW1vcnlN
b2RlbCBpbnN0cnVjdGlvbgorICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0IGlmIHdlIGNhbiB1c2Ug
dGhlIFNpbXBsZSBtZW1vcnkgbW9kZWwgaW5zdGVhZCBvZiB0aGUgR0xTTCBtZW1vcnkgbW9kZWwu
CisgICAgLy8gVGhlIHNwZWMgc2F5cyBub3RoaW5nIGFib3V0IHdoYXQgdGhlIGRpZmZlcmVuY2Ug
YmV0d2VlbiB0aGVtIGlzLiDwn5KvCisgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3Bz
Lk1lbW9yeU1vZGVsKHNwaXJ2LmtpbmRzLkFkZHJlc3NpbmdNb2RlbC5Mb2dpY2FsLCBzcGlydi5r
aW5kcy5NZW1vcnlNb2RlbC5HTFNMNDUwKSk7CisKKyAgICAvLyA1LiBBbGwgZW50cnkgcG9pbnQg
ZGVjbGFyYXRpb25zCisgICAgZnVuY3Rpb24gYXBwZW5kRW50cnlQb2ludHMoZW50cnlQb2ludHMs
IGV4ZWN1dGlvbk1vZGVsKSB7CisgICAgICAgIGZvciAobGV0IGVudHJ5UG9pbnQgb2YgZW50cnlQ
b2ludHMpIHsKKyAgICAgICAgICAgIGxldCBpZFZhbHVlID0gZW50cnlQb2ludFswXTsKKyAgICAg
ICAgICAgIGxldCBpbmxpbmVkU2hhZGVyID0gZW50cnlQb2ludFsxXS5zaGFkZXI7CisgICAgICAg
ICAgICBsZXQgaW5wdXRzID0gZW50cnlQb2ludFsxXS5pbnB1dHM7CisgICAgICAgICAgICBsZXQg
b3V0cHV0cyA9IGVudHJ5UG9pbnRbMV0ub3V0cHV0czsKKyAgICAgICAgICAgIGxldCBpbnRlcmZh
Y2VBcnJheSA9IFtdOworICAgICAgICAgICAgZm9yIChsZXQgaW5wdXQgb2YgaW5wdXRzKSB7Cisg
ICAgICAgICAgICAgICAgbGV0IHZhcmlhYmxlTmFtZSA9IGlucHV0WzBdOworICAgICAgICAgICAg
ICAgIGludGVyZmFjZUFycmF5LnB1c2godmFyaWFibGVOYW1lKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGZvciAobGV0IG91dHB1dCBvZiBvdXRwdXRzKSB7CisgICAgICAgICAgICAgICAg
bGV0IHZhcmlhYmxlTmFtZSA9IG91dHB1dFswXTsKKyAgICAgICAgICAgICAgICBpbnRlcmZhY2VB
cnJheS5wdXNoKHZhcmlhYmxlTmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhc3Nl
bWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRW50cnlQb2ludChleGVjdXRpb25Nb2RlbCwgaWRW
YWx1ZSwgaW5saW5lZFNoYWRlci5uYW1lLCAuLi5pbnRlcmZhY2VBcnJheSkpOworICAgICAgICB9
CisgICAgfQorICAgIGFwcGVuZEVudHJ5UG9pbnRzKHZlcnRleEVudHJ5UG9pbnRzLCBzcGlydi5r
aW5kcy5FeGVjdXRpb25Nb2RlbC5WZXJ0ZXgpOworICAgIGFwcGVuZEVudHJ5UG9pbnRzKGZyYWdt
ZW50RW50cnlQb2ludHMsIHNwaXJ2LmtpbmRzLkV4ZWN1dGlvbk1vZGVsLkZyYWdtZW50KTsKKwor
ICAgIC8vIDYuIEFsbCBleGVjdXRpb24gbW9kZSBkZWNsYXJhdGlvbnMKKyAgICBmdW5jdGlvbiBh
cHBlbmRFeGVjdXRpb25Nb2RlKGVudHJ5UG9pbnRzKSB7CisgICAgICAgIGZvciAobGV0IGVudHJ5
UG9pbnQgb2YgZW50cnlQb2ludHMpIHsKKyAgICAgICAgICAgIGxldCBpZFZhbHVlID0gZW50cnlQ
b2ludFswXTsKKyAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5FeGVj
dXRpb25Nb2RlKGlkVmFsdWUsIHNwaXJ2LmtpbmRzLkV4ZWN1dGlvbk1vZGUuT3JpZ2luTG93ZXJM
ZWZ0KSk7CisgICAgICAgIH0KKyAgICB9CisgICAgYXBwZW5kRXhlY3V0aW9uTW9kZSh2ZXJ0ZXhF
bnRyeVBvaW50cyk7CisgICAgYXBwZW5kRXhlY3V0aW9uTW9kZShmcmFnbWVudEVudHJ5UG9pbnRz
KTsKKworICAgIC8vIDcuIFRoZXNlIGRlYnVnIGluc3RydWN0aW9ucworICAgIC8vIDguIEFsbCBh
bm5vdGF0aW9uIGluc3RydWN0aW9ucworICAgIC8vIEZJWE1FOiBpbmNsdWRlIGFubm90YXRpb24g
aW5mb3JtYXRpb24sIGluY2x1ZGluZyBiaW5kaW5nIG51bWJlciwgZGVzY3JpcHRvciBzZXQgbnVt
YmVyLCBsb2NhdGlvbiBudW1iZXIsIGV0Yy4KKworICAgIC8vIDkuIEFsbCB0eXBlIGRlY2xhcmF0
aW9ucywgYWxsIGNvbnN0YW50IGluc3RydWN0aW9ucywgYW5kIGFsbCBnbG9iYWwgdmFyaWFibGUg
ZGVjbGFyYXRpb25zCisgICAgcmV0dXJuIGFzc2VtYmxlci5yZXN1bHQ7Cit9CisKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1dTTC5tZCBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1dTTC5tZAppbmRleCA3YzYyNjI5ZDU4MGQ2YWMyZDgyODQ0YWFkOGRl
ZWE2NTBkYWI0MTQwLi5kM2I2NjU2NzgyNmE1MWRkNmM3NTRkNGU5YjI0ZDc1Nzg5NzJiYjNkIDEw
MDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU0wubWQKKysrIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV1NMLm1kCkBAIC00NzMsNyArNDczLDcgQEAgV1NM
IGlzIGEgdHlwZS1zYWZlIGxhbmd1YWdlIGJhc2VkIG9uIEMgc3ludGF4LiBJdCBlbGltaW5hdGVz
IHNvbWUgQyBmZWF0dXJlcywgbGkKIFRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBsaW1pdGF0aW9u
cyBtYXkgYmUgcGxhY2VkIG9uIGEgV1NMIHByb2dyYW06CiAKIC0gYGRldmljZWAsIGBjb25zdGFu
dGAsIGFuZCBgdGhyZWFkZ3JvdXBgIHBvaW50ZXJzIGNhbm5vdCBwb2ludCB0byBkYXRhIHRoYXQg
bWF5IGhhdmUgcG9pbnRlcnMgaW4gaXQuIFRoaXMgc2FmZXR5IGNoZWNrIGlzIG5vdCBkb25lIGFz
IHBhcnQgb2YgdGhlIG5vcm1hbCB0eXBlIHN5c3RlbSBjaGVja3MuIEl0J3MgcGVyZm9ybWVkIG9u
bHkgYWZ0ZXIgaW5zdGFudGlhdGlvbi4KLS0gUG9pbnRlcnMgYW5kIGFycmF5IHJlZmVyZW5jZXMg
KGNvbGxlY3RpdmVseSwgKnJlZmVyZW5jZXMqKSBtYXkgYmUgcmVzdHJpY3RlZCB0byBzdXBwb3J0
IGNvbXBpbGluZyB0byBTUElSLVYgKmxvZ2ljYWwgbW9kZSouIEluIHRoaXMgbW9kZSwgcmVmZXJl
bmNlcyBtYXkgbmV2ZXIgcG9pbnQgdG8gZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSByZWZlcmVu
Y2VzIGluIHRoZW0uIFJlZmVyZW5jZXMgbXVzdCBiZSBpbml0aWFsaXplZCB1cG9uIGRlY2xhcmF0
aW9uIGFuZCBuZXZlciByZWFzc2lnbmVkLiBGdW5jdGlvbnMgdGhhdCByZXR1cm4gcmVmZXJlbmNl
cyBtdXN0IGhhdmUgb25lIHJldHVybiBwb2ludC4gVGVybmFyeSBleHByZXNzaW9ucyBtYXkgbm90
IHJldHVybiByZWZlcmVuY2VzLgorLSBQb2ludGVycyBhbmQgYXJyYXkgcmVmZXJlbmNlcyAoY29s
bGVjdGl2ZWx5LCAqcmVmZXJlbmNlcyopIG1heSBiZSByZXN0cmljdGVkIHRvIHN1cHBvcnQgY29t
cGlsaW5nIHRvIFNQSVItViAqbG9naWNhbCBtb2RlKi4gSW4gdGhpcyBtb2RlLCBhcnJheXMgbXVz
dCBub3QgdHJhbnNpdGl2ZWx5IGhvbGQgcmVmZXJlbmNlcy4gUmVmZXJlbmNlcyBtdXN0IGJlIGlu
aXRpYWxpemVkIHVwb24gZGVjbGFyYXRpb24gYW5kIG5ldmVyIHJlYXNzaWduZWQuIEZ1bmN0aW9u
cyB0aGF0IHJldHVybiByZWZlcmVuY2VzIG11c3QgaGF2ZSBvbmUgcmV0dXJuIHBvaW50LiBUZXJu
YXJ5IGV4cHJlc3Npb25zIG1heSBub3QgcmV0dXJuIHJlZmVyZW5jZXMuCiAtIEdyYXBoaWNzIGVu
dHJ5IHBvaW50cyBtdXN0IHRyYW5zaXRpdmVseSBuZXZlciByZWZlciB0byB0aGUgYHRocmVhZGdy
b3VwYCBtZW1vcnkgc3BhY2UuCiAKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xh
bmd1YWdlUkkvaW5kZXguaHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4
Lmh0bWwKaW5kZXggYTk2OTdmZTA3ODIxMjhlYTBkZWEwMTVkMzcyZDBmMjBkMWQ4MzQyYy4uM2E3
ZTk0OGJlNjdkMGI1YzA1YmIxOWMyZWYxNDMwOWExMTk3MzhlNCAxMDA2NDQKLS0tIGEvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCkBAIC0zMDAsOCArMzAwLDggQEAgZnVuY3Rpb24gZG9D
b21waWxlUHJlc2VudFNoYWRlclNvdXJjZSgpIHsKICAgICBwcm9ncmFtID0gcmVzdWx0OwogICAg
IGF2YWlsYWJsZVZlcnRleFNoYWRlcnMgPSBbXTsKICAgICBhdmFpbGFibGVGcmFnbWVudFNoYWRl
cnMgPSBbXTsKLSAgICBmb3IgKGZ1bmN0aW9uTmFtZXMgb2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFs
dWVzKCkpIHsKLSAgICAgICAgZm9yIChmdW5jIG9mIGZ1bmN0aW9uTmFtZXMpIHsKKyAgICBmb3Ig
KGxldCBmdW5jdGlvbk5hbWVzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAg
ICAgIGZvciAobGV0IGZ1bmMgb2YgZnVuY3Rpb25OYW1lcykgewogICAgICAgICAgICAgaWYgKGZ1
bmMuc2hhZGVyVHlwZSA9PSAidmVydGV4IikKICAgICAgICAgICAgICAgICBhdmFpbGFibGVWZXJ0
ZXhTaGFkZXJzLnB1c2goZnVuYyk7CiAgICAgICAgICAgICBpZiAoZnVuYy5zaGFkZXJUeXBlID09
ICJmcmFnbWVudCIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323038</attachid>
            <date>2017-10-06 12:36:59 -0700</date>
            <delta_ts>2017-10-06 16:26:23 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-177998-20171006123658.patch</filename>
            <type>text/plain</type>
            <size>27704</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTg0CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tlci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFn
ZVJJL0xhdGVDaGVja2VyLmpzCmluZGV4IDgxNDBhMjJmNWJlNGVmYmUxZjIwZWQ0OTk4MDhkNTNi
N2E5MjlkOTcuLjVkMWVmOTVhMjMwMmIyZDZmZGI5ZTAzMGVhYjMyZTZhNzBkNzY2ZGUgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzCisrKyBi
L1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzCkBAIC0zNiw2ICsz
Niw3IEBAIGNsYXNzIExhdGVDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAgICAgCiAgICAgX2No
ZWNrU2hhZGVyVHlwZShub2RlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRpZ2h0ZW4gdGhl
c2UgY2hlY2tzLiBGb3Igbm93LCB3ZSBzaG91bGQgb25seSBhY2NlcHQgaW50MzIsIHVpbnQzMiwg
ZmxvYXQzMiwgYW5kIGZsb2F0NjQuCiAgICAgICAgIGxldCBhc3NlcnRQcmltaXRpdmUgPSB0eXBl
ID0+IHsKICAgICAgICAgICAgIGlmICghdHlwZS5pc1ByaW1pdGl2ZSkKICAgICAgICAgICAgICAg
ICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJpbmcsICJTaGFkZXIg
c2lnbmF0dXJlIGNhbm5vdCBpbmNsdWRlIG5vbi1wcmltaXRpdmUgdHlwZTogIiArIHR5cGUpOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbCBiL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwKaW5kZXggMjFhYzRlMjEwYWM0
ZmNkODUxYjRhYzJiMTA3YzFmMzYwYTg0MTM3Mi4uNDA4M2UyNzU0ZTg1ZTk2ZTRlZmY0OTg5MThm
ZWE2ZTc2ZDYwNWYwZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U1BJUlYuaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1s
CkBAIC0xLDQ1ICsxLDE5NiBAQAogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgotPHNj
cmlwdCBzcmM9IlNQSVItVi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5vZGUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iUmVmZXJlbmNlVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZh
bHVlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRXhwcmVzc2lvbi5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlJld3JpdGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iVmlzaXRvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVy
YWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsVHlwZS5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyI+
PC9zY3JpcHQ+CisKKyAgICA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iQW5vbnltb3VzVmFyaWFibGUuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJBcnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJB
cnJheVR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJBc3NpZ25tZW50LmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQXV0b1dyYXBwZXIuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJCbG9jay5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkJvb2xM
aXRlcmFsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQnJlYWsuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJDYWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IkNhbGxGdW5jdGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNo
ZWNrLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tMaXRlcmFsVHlwZXMuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVja0xvb3BzLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iQ2hlY2tSZWN1cnNpb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJDaGVja1JlY3Vyc2l2ZVR5cGVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Q2hlY2tSZXR1cm5zLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tVbnJlYWNo
YWJsZUNvZGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVja1dyYXBwZWQuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVja2VyLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iQ2xvbmVQcm9ncmFtLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Q29tbWFFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29uc3RleHBy
Rm9sZGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29uc3RleHByVHlwZVBhcmFt
ZXRlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRpbnVlLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRG9XaGlsZUxvb3AuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJEb3RFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iRG91YmxlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkRvdWJsZUxp
dGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRGVyZWZlcmVuY2VFeHBy
ZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRUFycmF5UmVmLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRUJ1ZmZlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkVCdWZmZXJCdWlsZGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRVB0
ci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkVudW1MaXRlcmFsLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iRW51bU1lbWJlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkVudW1UeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRXZhbHVhdGlv
bkNvbW1vbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV2YWx1YXRvci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV4cHJlc3Npb25GaW5kZXIuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJFeHRlcm5hbE9yaWdpbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkZpZWxkLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRmluZEhpZ2hab21i
aWVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRmxhdHRlblByb3RvY29sRXh0ZW5k
cy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZsYXR0ZW5lZFN0cnVjdE9mZnNldEdh
dGhlcmVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRmxvYXRMaXRlcmFsLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRmxvYXRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IkZvbGRDb25zdGV4cHJzLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iRm9yTG9vcC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZ1bmMuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGdW5jRGVmLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iRnVuY0luc3RhbnRpYXRvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IkZ1bmNQYXJhbWV0ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGdW5jdGlv
bkxpa2VCbG9jay5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkhpZ2hab21iaWVGaW5k
ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJZGVudGl0eUV4cHJlc3Npb24uanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJZlN0YXRlbWVudC5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IkluZGV4RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkluZmVyVHlwZXNGb3JDYWxsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
SW5saW5lLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW5saW5lci5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9Ikluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IkludExpdGVyYWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJJbnRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkludHJp
bnNpY3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJMYXRlQ2hlY2tlci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkxleGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iTGV4ZXJUb2tlbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkxpdGVyYWxU
eXBlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkxvZ2ljYWxFeHByZXNz
aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTG9naWNhbE5vdC5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9Ikxvb3BDaGVja2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iTWFrZUFycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ik1ha2VQdHJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
TmFtZUNvbnRleHQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYW1lRmluZGVyLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTmFtZVJlc29sdmVyLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iTmF0aXZlRnVuYy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9Ik5hdGl2ZUZ1bmNJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5h
dGl2ZVR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBlSW5zdGFu
Y2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOb3JtYWxVc2VQcm9wZXJ0eVJlc29s
dmVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTnVsbExpdGVyYWwuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJOdWxsVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9Ik9yaWdpbktpbmQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJPdmVybG9h
ZFJlc29sdXRpb25GYWlsdXJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUGFyc2Uu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcmVwYXJlLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlByb2dyYW0uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcm9ncmFtV2l0
aFVubmVjZXNzYXJ5VGhpbmdzUmVtb3ZlZC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IlByb3RvY29sLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2xEZWNsLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sUmVmLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iUHRyVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJlYWRNb2Rp
ZnlXcml0ZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZWN1cnNp
b25DaGVja2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmVjdXJzaXZlVHlwZUNo
ZWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZXNvbHZlTmFtZXMuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iUmVzb2x2ZVByb3BlcnRpZXMuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJSZXNvbHZlVHlwZURlZnMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJSZXR1cm4uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZXR1cm5DaGVja2Vy
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmV0dXJuRXhjZXB0aW9uLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU1BJUi1WLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iU1BJUlZDb2RlZ2VuLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU1BJUlZU
eXBlQW5hbHl6ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTdGFuZGFyZExpYnJh
cnkuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTdGF0ZW1lbnRDbG9uZXIuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iU3RydWN0VHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlN1YnN0aXR1dGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlN3aXRj
aENhc2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTd2l0Y2hTdGF0ZW1lbnQuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJUcmFwU3RhdGVtZW50LmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iVHlwZURlZi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IlR5cGVEZWZSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVPclZh
cmlhYmxlUmVmLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZVBhcmFtZXRlclJl
d3JpdGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZVJlZi5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlR5cGVWYXJpYWJsZVRyYWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJUeXBlZFZhbHVlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVWludExpdGVy
YWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJVaW50TGl0ZXJhbFR5cGUuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJVbmlmaWNhdGlvbkNvbnRleHQuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJVbnJlYWNoYWJsZUNvZGVDaGVja2VyLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iVmFyaWFibGVEZWNsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iVmFyaWFibGVSZWYuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaXNpdGlu
Z1NldC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IldTeW50YXhFcnJvci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IldUcmFwRXJyb3IuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJXVHlwZUVycm9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iV2hp
bGVMb29wLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iV3JhcENoZWNrZXIuanMiPjwv
c2NyaXB0PgogPHNjcmlwdD4KKyAgICBsZXQgY29kZSA9IGAKK3N0cnVjdCBWZXJ0ZXhJbnB1dCB7
CisgICAgZmxvYXQyIHBvc2l0aW9uOworICAgIGZsb2F0MyBjb2xvcjsKK30KKworc3RydWN0IFZl
cnRleE91dHB1dCB7CisgICAgZmxvYXQ0IHdzbF9Qb3NpdGlvbjsKKyAgICBmbG9hdDQgY29sb3I7
Cit9CisKK3N0cnVjdCBGcmFnbWVudE91dHB1dCB7CisgICAgZmxvYXQ0IHdzbF9Db2xvcjsKK30K
KwordmVydGV4IFZlcnRleE91dHB1dCB2ZXJ0ZXhTaGFkZXIoVmVydGV4SW5wdXQgdmVydGV4SW5w
dXQpIHsKKyAgICBWZXJ0ZXhPdXRwdXQgcmVzdWx0OworICAgIHJlc3VsdC53c2xfUG9zaXRpb24g
PSBmbG9hdDQodmVydGV4SW5wdXQucG9zaXRpb24sIDAuLCAxLik7CisgICAgcmVzdWx0LmNvbG9y
ID0gZmxvYXQ0KHZlcnRleElucHV0LmNvbG9yLCAxKTsKKyAgICAKKyAgICBpbnRbMTBdIGE7Cisg
ICAgaW50WzEwdV0gYjsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBGcmFnbWVu
dE91dHB1dCBmcmFnbWVudFNoYWRlcihWZXJ0ZXhPdXRwdXQgc3RhZ2VJbikgeworICAgIEZyYWdt
ZW50T3V0cHV0IHJlc3VsdDsKKyAgICByZXN1bHQud3NsX0NvbG9yID0gc3RhZ2VJbi5jb2xvcjsK
KyAgICByZXR1cm4gcmVzdWx0OworfWA7CiAKICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigi
bG9hZCIsIGZ1bmN0aW9uICgpIHsKICAgICAgICAgZmV0Y2goInNwaXJ2LmNvcmUuZ3JhbW1hci5q
c29uIikudGhlbihyZXNwb25zZSA9PiByZXNwb25zZS5qc29uKCkpLnRoZW4oZnVuY3Rpb24gKGpz
b24pIHsKICAgICAgICAgICAgIGxldCBzcGlydiA9IFNQSVJWKGpzb24pOwotICAgICAgICAgICAg
bGV0IGFzc2VtYmxlciA9IG5ldyBTUElSVkFzc2VtYmxlcigpOwotICAgICAgICAgICAgYXNzZW1i
bGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkNhcGFiaWxpdHkoc3BpcnYua2luZHMuQ2FwYWJpbGl0
eS5TaGFkZXIpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5N
ZW1vcnlNb2RlbChzcGlydi5raW5kcy5BZGRyZXNzaW5nTW9kZWwuTG9naWNhbCwgc3BpcnYua2lu
ZHMuTWVtb3J5TW9kZWwuR0xTTDQ1MCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChu
ZXcgc3BpcnYub3BzLkVudHJ5UG9pbnQoc3BpcnYua2luZHMuRXhlY3V0aW9uTW9kZWwuRnJhZ21l
bnQsIDUsICJtYWluIiwgMTAsIDE3KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5l
dyBzcGlydi5vcHMuRXhlY3V0aW9uTW9kZSg1LCBzcGlydi5raW5kcy5FeGVjdXRpb25Nb2RlLk9y
aWdpbkxvd2VyTGVmdCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYu
b3BzLkRlY29yYXRlKDEwLCBzcGlydi5raW5kcy5EZWNvcmF0aW9uLkxvY2F0aW9uLCAwKSk7Ci0g
ICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRGVjb3JhdGUoMTQsIHNw
aXJ2LmtpbmRzLkRlY29yYXRpb24uRGVzY3JpcHRvclNldCwgMCkpOwotICAgICAgICAgICAgYXNz
ZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkRlY29yYXRlKDE0LCBzcGlydi5raW5kcy5EZWNv
cmF0aW9uLkJpbmRpbmcsIDEpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNw
aXJ2Lm9wcy5EZWNvcmF0ZSgxNywgc3BpcnYua2luZHMuRGVjb3JhdGlvbi5Mb2NhdGlvbiwgMCkp
OwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVWb2lkKDMp
KTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlRnVuY3Rp
b24oNCwgMykpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5
cGVGbG9hdCg3LCAzMikpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYu
b3BzLlR5cGVWZWN0b3IoOCwgNywgNCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChu
ZXcgc3BpcnYub3BzLlR5cGVQb2ludGVyKDksIHNwaXJ2LmtpbmRzLlN0b3JhZ2VDbGFzcy5PdXRw
dXQsIDgpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5WYXJp
YWJsZSg5LCAxMCwgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLk91dHB1dCkpOwotICAgICAgICAg
ICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVJbWFnZSgxMSwgNywgc3BpcnYu
a2luZHMuRGltWyIyRCJdLCAwLCAwLCAwLCAxLCBzcGlydi5raW5kcy5JbWFnZUZvcm1hdC5Vbmtu
b3duKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVNh
bXBsZWRJbWFnZSgxMiwgMTEpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNw
aXJ2Lm9wcy5UeXBlUG9pbnRlcigxMywgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLlVuaWZvcm1D
b25zdGFudCwgMTIpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9w
cy5WYXJpYWJsZSgxMywgMTQsIHNwaXJ2LmtpbmRzLlN0b3JhZ2VDbGFzcy5Vbmlmb3JtQ29uc3Rh
bnQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlUG9p
bnRlcigxNiwgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLklucHV0LCA4KSk7Ci0gICAgICAgICAg
ICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVmFyaWFibGUoMTYsIDE3LCBzcGlydi5r
aW5kcy5TdG9yYWdlQ2xhc3MuSW5wdXQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQo
bmV3IHNwaXJ2Lm9wcy5UeXBlVmVjdG9yKDE4LCA3LCAyKSk7Ci0gICAgICAgICAgICBhc3NlbWJs
ZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRnVuY3Rpb24oMywgNSwgc3BpcnYua2luZHMuRnVuY3Rp
b25Db250cm9sLk5vbmUsIDQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNw
aXJ2Lm9wcy5MYWJlbCg2KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGly
di5vcHMuTG9hZCgxMiwgMTUsIDE0KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5l
dyBzcGlydi5vcHMuTG9hZCg4LCAxOSwgMTcpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBl
bmQobmV3IHNwaXJ2Lm9wcy5WZWN0b3JTaHVmZmxlKDE4LCAyMCwgMTksIDE5LCAwLCAxKSk7Ci0g
ICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuSW1hZ2VTYW1wbGVJbXBs
aWNpdExvZCg4LCAyMSwgMTUsIDIwKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5l
dyBzcGlydi5vcHMuU3RvcmUoMTAsIDIxKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5k
KG5ldyBzcGlydi5vcHMuUmV0dXJuKCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChu
ZXcgc3BpcnYub3BzLkZ1bmN0aW9uRW5kKCkpOwotICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGFz
c2VtYmxlci5yZXN1bHQ7Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCBwcm9ncmFtID0g
cHJlcGFyZSgiL2ludGVybmFsL3Rlc3QiLCAwLCBjb2RlKTsKKyAgICAgICAgICAgIGxldCByZXN1
bHQgPSBnZW5lcmF0ZVNQSVJWKHNwaXJ2LCBwcm9ncmFtKTsKKyAgICAgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CiAgICAgICAgICAgICBs
ZXQgcmVzdWx0RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJSZXN1bHQiKTsKICAg
ICAgICAgICAgIHdoaWxlIChyZXN1bHRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoICE9IDApCiAg
ICAgICAgICAgICAgICAgcmVzdWx0RWxlbWVudC5yZW1vdmVDaGlsZChyZXN1bHRFbGVtZW50LmNo
aWxkTm9kZXNbMF0pOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
U1BJUlZDb2RlZ2VuLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlZDb2Rl
Z2VuLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRiMDc2NjkxNGI1YjVmZTQxMGIxM2RmYTI1NjdhMTZlNjMxYmRk
MzkKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElS
VkNvZGVnZW4uanMKQEAgLTAsMCArMSwyMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gZ2VuZXJhdGVTUElS
VihzcGlydiwgcHJvZ3JhbSkKK3sKKworICAgIGxldCBhdmFpbGFibGVWZXJ0ZXhTaGFkZXJzID0g
W107CisgICAgbGV0IGF2YWlsYWJsZUZyYWdtZW50U2hhZGVycyA9IFtdOworICAgIGZvciAobGV0
IGZ1bmN0aW9uTmFtZXMgb2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAg
Zm9yIChsZXQgZnVuYyBvZiBmdW5jdGlvbk5hbWVzKSB7CisgICAgICAgICAgICBpZiAoZnVuYy5z
aGFkZXJUeXBlID09ICJ2ZXJ0ZXgiKQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZVZlcnRleFNo
YWRlcnMucHVzaChmdW5jKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmMuc2hhZGVyVHlwZSA9
PSAiZnJhZ21lbnQiKQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZUZyYWdtZW50U2hhZGVycy5w
dXNoKGZ1bmMpOworICAgICAgICB9CisgICAgfQorCisgICAgbGV0IGN1cnJlbnRJZCA9IDE7Cisg
ICAgbGV0IHR5cGVNYXAgPSBuZXcgTWFwKCk7CisKKyAgICBmdW5jdGlvbiBwb3B1bGF0ZUludGVy
ZmFjZShhdmFpbGFibGVTaGFkZXJzKSB7CisgICAgICAgIGZvciAobGV0IHNoYWRlciBvZiBhdmFp
bGFibGVTaGFkZXJzKSB7CisgICAgICAgICAgICBsZXQgaW5saW5lZFNoYWRlciA9IHByb2dyYW0u
ZnVuY0luc3RhbnRpYXRvci5nZXRVbmlxdWUoc2hhZGVyLCBbXSk7CisgICAgICAgICAgICBfaW5s
aW5lRnVuY3Rpb24ocHJvZ3JhbSwgaW5saW5lZFNoYWRlciwgbmV3IFZpc2l0aW5nU2V0KHNoYWRl
cikpOworCisgICAgICAgICAgICBsZXQgdHlwZUFuYWx5emVyID0gbmV3IFNQSVJWVHlwZUFuYWx5
emVyKHByb2dyYW0sIHR5cGVNYXAsIGN1cnJlbnRJZCk7CisgICAgICAgICAgICBpbmxpbmVkU2hh
ZGVyLnZpc2l0KHR5cGVBbmFseXplcik7CisgICAgICAgICAgICBjdXJyZW50SWQgPSB0eXBlQW5h
bHl6ZXIuY3VycmVudElkOworCisgICAgICAgICAgICAvKmxldCBpbnB1dHMgPSBuZXcgTWFwKCk7
CisgICAgICAgICAgICBsZXQgb3V0cHV0cyA9IG5ldyBNYXAoKTsKKyAgICAgICAgICAgIGlubGlu
ZWRTaGFkZXIucmV0dXJuVHlwZS52aXNpdChuZXcgSW50ZXJmYWNlRGVzY2VudChvdXRwdXRzKSk7
CisgICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2YgaW5saW5lZFNoYWRlci5wYXJhbWV0
ZXJzKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2Vv
ZiBTdHJ1Y3RUeXBlKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQobmV3IElu
dGVyZmFjZURlc2NlbnQoaW5wdXRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbnRy
eVBvaW50cy5zZXQoY3VycmVudElkKyssIHsgc2hhZGVyOiBpbmxpbmVkU2hhZGVyLCBpbnB1dHM6
IGlucHV0cywgb3V0cHV0czogb3V0cHV0cyB9KTsqLworICAgICAgICB9CisgICAgfQorICAgIGxl
dCB2ZXJ0ZXhFbnRyeVBvaW50cyA9IG5ldyBNYXAoKTsKKyAgICBsZXQgZnJhZ21lbnRFbnRyeVBv
aW50cyA9IG5ldyBNYXAoKTsKKyAgICBwb3B1bGF0ZUludGVyZmFjZShhdmFpbGFibGVWZXJ0ZXhT
aGFkZXJzKTsKKyAgICBwb3B1bGF0ZUludGVyZmFjZShhdmFpbGFibGVGcmFnbWVudFNoYWRlcnMp
OworCisgICAgLypsZXQgY3VycmVudElkID0gMTsKKworICAgIGxldCBwcmltaXRpdmVUeXBlcyA9
IG5ldyBNYXAoKTsKKyAgICBwcmltaXRpdmVUeXBlcy5zZXQocHJvZ3JhbS5pbnRyaW5zaWNzLnZv
aWQsIGN1cnJlbnRJZCsrKTsKKyAgICBwcmltaXRpdmVUeXBlcy5zZXQocHJvZ3JhbS5pbnRyaW5z
aWNzLmludDMyLCBjdXJyZW50SWQrKyk7CisgICAgcHJpbWl0aXZlVHlwZXMuc2V0KHByb2dyYW0u
aW50cmluc2ljcy51aW50MzIsIGN1cnJlbnRJZCsrKTsKKyAgICBwcmltaXRpdmVUeXBlcy5zZXQo
cHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQ4LCBjdXJyZW50SWQrKyk7CisgICAgcHJpbWl0aXZlVHlw
ZXMuc2V0KHByb2dyYW0uaW50cmluc2ljcy5mbG9hdCwgY3VycmVudElkKyspOworICAgIHByaW1p
dGl2ZVR5cGVzLnNldChwcm9ncmFtLmludHJpbnNpY3MuZG91YmxlLCBjdXJyZW50SWQrKyk7Cisg
ICAgcHJpbWl0aXZlVHlwZXMuc2V0KHByb2dyYW0uaW50cmluc2ljcy5ib29sLCBjdXJyZW50SWQr
Kyk7CisKKyAgICBjbGFzcyBJbnRlcmZhY2VEZXNjZW50IGV4dGVuZHMgVmlzaXRvciB7CisgICAg
ICAgIGNvbnN0cnVjdG9yKHZhcmlhYmxlTWFwKQorICAgICAgICB7CisgICAgICAgICAgICBzdXBl
cigpOworICAgICAgICAgICAgdGhpcy5fdmFyaWFibGVNYXAgPSB2YXJpYWJsZU1hcDsKKyAgICAg
ICAgfQorCisgICAgICAgIGdldCB2YXJpYWJsZU1hcCgpCisgICAgICAgIHsKKyAgICAgICAgICAg
IHJldHVybiB0aGlzLl92YXJpYWJsZU1hcDsKKyAgICAgICAgfQorCisgICAgICAgIHZpc2l0VHlw
ZVJlZihub2RlKQorICAgICAgICB7CisgICAgICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7
CisgICAgICAgIH0KKworICAgICAgICB2aXNpdFN0cnVjdFR5cGUobm9kZSkKKyAgICAgICAgewor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm5hbWUpIHsKKyAgICAgICAgICAgIGNhc2UgInZlYzIi
OgorICAgICAgICAgICAgY2FzZSAidmVjMyI6CisgICAgICAgICAgICBjYXNlICJ2ZWM0IjoKKyAg
ICAgICAgICAgICAgICBpZiAoIXByaW1pdGl2ZVR5cGVzLmhhcyhub2RlLm5hbWUpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGxldCBuZXdNYXAgPSBuZXcgTWFwKCk7CisgICAgICAgICAgICAgICAg
ICAgIG5ld01hcC5zZXQocHJvZ3JhbS5pbnRyaW5zaWNzLmludDMyLCBjdXJyZW50SWQrKyk7Cisg
ICAgICAgICAgICAgICAgICAgIG5ld01hcC5zZXQocHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQzMiwg
Y3VycmVudElkKyspOworICAgICAgICAgICAgICAgICAgICBuZXdNYXAuc2V0KHByb2dyYW0uaW50
cmluc2ljcy5mbG9hdCwgY3VycmVudElkKyspOworICAgICAgICAgICAgICAgICAgICBuZXdNYXAu
c2V0KHByb2dyYW0uaW50cmluc2ljcy5kb3VibGUsIGN1cnJlbnRJZCsrKTsKKyAgICAgICAgICAg
ICAgICAgICAgcHJpbWl0aXZlVHlwZXMuc2V0KG5vZGUubmFtZSwgbmV3TWFwKTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgdGhpcy52YXJpYWJsZU1hcC5zZXQoY3VycmVudElk
KyssIHByaW1pdGl2ZVR5cGVzLmdldChub2RlLm5hbWUpLmdldChub2RlLmZpZWxkcy5uZXh0KCku
dmFsdWUudHlwZS50eXBlLnR5cGUpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIHN1cGVyLnZpc2l0U3RydWN0VHlwZShub2RlKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQorICAgICAgICB7CisgICAgICAgICAg
ICB0aGlzLnZhcmlhYmxlTWFwLnNldChjdXJyZW50SWQrKywgcHJpbWl0aXZlVHlwZXMuZ2V0KG5v
ZGUpKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGxldCBhdmFpbGFibGVWZXJ0ZXhTaGFkZXJz
ID0gW107CisgICAgbGV0IGF2YWlsYWJsZUZyYWdtZW50U2hhZGVycyA9IFtdOworICAgIGZvciAo
bGV0IGZ1bmN0aW9uTmFtZXMgb2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAg
ICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jdGlvbk5hbWVzKSB7CisgICAgICAgICAgICBpZiAoZnVu
Yy5zaGFkZXJUeXBlID09ICJ2ZXJ0ZXgiKQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZVZlcnRl
eFNoYWRlcnMucHVzaChmdW5jKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGZ1bmMuc2hhZGVyVHlw
ZSA9PSAiZnJhZ21lbnQiKQorICAgICAgICAgICAgICAgIGF2YWlsYWJsZUZyYWdtZW50U2hhZGVy
cy5wdXNoKGZ1bmMpOworICAgICAgICB9CisgICAgfQorCisKKyAgICBmdW5jdGlvbiBwb3B1bGF0
ZUludGVyZmFjZShhdmFpbGFibGVTaGFkZXJzLCBlbnRyeVBvaW50cykgeworICAgICAgICBmb3Ig
KGxldCBzaGFkZXIgb2YgYXZhaWxhYmxlU2hhZGVycykgeworICAgICAgICAgICAgbGV0IGlubGlu
ZWRTaGFkZXIgPSBwcm9ncmFtLmZ1bmNJbnN0YW50aWF0b3IuZ2V0VW5pcXVlKHNoYWRlciwgW10p
OworICAgICAgICAgICAgX2lubGluZUZ1bmN0aW9uKHByb2dyYW0sIGlubGluZWRTaGFkZXIsIG5l
dyBWaXNpdGluZ1NldChzaGFkZXIpKTsKKyAgICAgICAgICAgIGxldCBpbnB1dHMgPSBuZXcgTWFw
KCk7CisgICAgICAgICAgICBsZXQgb3V0cHV0cyA9IG5ldyBNYXAoKTsKKyAgICAgICAgICAgIGlu
bGluZWRTaGFkZXIucmV0dXJuVHlwZS52aXNpdChuZXcgSW50ZXJmYWNlRGVzY2VudChvdXRwdXRz
KSk7CisgICAgICAgICAgICBmb3IgKGxldCBwYXJhbWV0ZXIgb2YgaW5saW5lZFNoYWRlci5wYXJh
bWV0ZXJzKSB7CisgICAgICAgICAgICAgICAgaWYgKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFu
Y2VvZiBTdHJ1Y3RUeXBlKQorICAgICAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQobmV3
IEludGVyZmFjZURlc2NlbnQoaW5wdXRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBl
bnRyeVBvaW50cy5zZXQoY3VycmVudElkKyssIHsgc2hhZGVyOiBpbmxpbmVkU2hhZGVyLCBpbnB1
dHM6IGlucHV0cywgb3V0cHV0czogb3V0cHV0cyB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBs
ZXQgdmVydGV4RW50cnlQb2ludHMgPSBuZXcgTWFwKCk7CisgICAgbGV0IGZyYWdtZW50RW50cnlQ
b2ludHMgPSBuZXcgTWFwKCk7CisgICAgcG9wdWxhdGVJbnRlcmZhY2UoYXZhaWxhYmxlVmVydGV4
U2hhZGVycywgdmVydGV4RW50cnlQb2ludHMpOworICAgIHBvcHVsYXRlSW50ZXJmYWNlKGF2YWls
YWJsZUZyYWdtZW50U2hhZGVycywgZnJhZ21lbnRFbnRyeVBvaW50cyk7CisKKyAgICBsZXQgYXNz
ZW1ibGVyID0gbmV3IFNQSVJWQXNzZW1ibGVyKCk7CisgICAgLy8gMS4gQWxsIE9wQ2FwYWJpbGl0
eSBpbnN0cnVjdGlvbnMKKyAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuQ2FwYWJp
bGl0eShzcGlydi5raW5kcy5DYXBhYmlsaXR5LlNoYWRlcikpOworICAgIC8vIDIuIE9wdGlvbmFs
IE9wRXh0ZW5zaW9uIGluc3RydWN0aW9ucworICAgIC8vIDMuIE9wdGlvbmFsIE9wRXh0SW5zdElt
cG9ydCBpbnN0cnVjdGlvbnMKKyAgICAvLyA0LiBUaGUgc2luZ2xlIHJlcXVpcmVkIE9wTWVtb3J5
TW9kZWwgaW5zdHJ1Y3Rpb24KKyAgICAvLyBGSVhNRTogRmlndXJlIG91dCBpZiB3ZSBjYW4gdXNl
IHRoZSBTaW1wbGUgbWVtb3J5IG1vZGVsIGluc3RlYWQgb2YgdGhlIEdMU0wgbWVtb3J5IG1vZGVs
LgorICAgIC8vIFRoZSBzcGVjIHNheXMgbm90aGluZyBhYm91dCB3aGF0IHRoZSBkaWZmZXJlbmNl
IGJldHdlZW4gdGhlbSBpcy4g8J+SrworICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9w
cy5NZW1vcnlNb2RlbChzcGlydi5raW5kcy5BZGRyZXNzaW5nTW9kZWwuTG9naWNhbCwgc3BpcnYu
a2luZHMuTWVtb3J5TW9kZWwuR0xTTDQ1MCkpOworCisgICAgLy8gNS4gQWxsIGVudHJ5IHBvaW50
IGRlY2xhcmF0aW9ucworICAgIGZ1bmN0aW9uIGFwcGVuZEVudHJ5UG9pbnRzKGVudHJ5UG9pbnRz
LCBleGVjdXRpb25Nb2RlbCkgeworICAgICAgICBmb3IgKGxldCBlbnRyeVBvaW50IG9mIGVudHJ5
UG9pbnRzKSB7CisgICAgICAgICAgICBsZXQgaWRWYWx1ZSA9IGVudHJ5UG9pbnRbMF07CisgICAg
ICAgICAgICBsZXQgaW5saW5lZFNoYWRlciA9IGVudHJ5UG9pbnRbMV0uc2hhZGVyOworICAgICAg
ICAgICAgbGV0IGlucHV0cyA9IGVudHJ5UG9pbnRbMV0uaW5wdXRzOworICAgICAgICAgICAgbGV0
IG91dHB1dHMgPSBlbnRyeVBvaW50WzFdLm91dHB1dHM7CisgICAgICAgICAgICBsZXQgaW50ZXJm
YWNlQXJyYXkgPSBbXTsKKyAgICAgICAgICAgIGZvciAobGV0IGlucHV0IG9mIGlucHV0cykgewor
ICAgICAgICAgICAgICAgIGxldCB2YXJpYWJsZU5hbWUgPSBpbnB1dFswXTsKKyAgICAgICAgICAg
ICAgICBpbnRlcmZhY2VBcnJheS5wdXNoKHZhcmlhYmxlTmFtZSk7CisgICAgICAgICAgICB9Cisg
ICAgICAgICAgICBmb3IgKGxldCBvdXRwdXQgb2Ygb3V0cHV0cykgeworICAgICAgICAgICAgICAg
IGxldCB2YXJpYWJsZU5hbWUgPSBvdXRwdXRbMF07CisgICAgICAgICAgICAgICAgaW50ZXJmYWNl
QXJyYXkucHVzaCh2YXJpYWJsZU5hbWUpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYXNz
ZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkVudHJ5UG9pbnQoZXhlY3V0aW9uTW9kZWwsIGlk
VmFsdWUsIGlubGluZWRTaGFkZXIubmFtZSwgLi4uaW50ZXJmYWNlQXJyYXkpKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBhcHBlbmRFbnRyeVBvaW50cyh2ZXJ0ZXhFbnRyeVBvaW50cywgc3BpcnYu
a2luZHMuRXhlY3V0aW9uTW9kZWwuVmVydGV4KTsKKyAgICBhcHBlbmRFbnRyeVBvaW50cyhmcmFn
bWVudEVudHJ5UG9pbnRzLCBzcGlydi5raW5kcy5FeGVjdXRpb25Nb2RlbC5GcmFnbWVudCk7CisK
KyAgICAvLyA2LiBBbGwgZXhlY3V0aW9uIG1vZGUgZGVjbGFyYXRpb25zCisgICAgZnVuY3Rpb24g
YXBwZW5kRXhlY3V0aW9uTW9kZShlbnRyeVBvaW50cykgeworICAgICAgICBmb3IgKGxldCBlbnRy
eVBvaW50IG9mIGVudHJ5UG9pbnRzKSB7CisgICAgICAgICAgICBsZXQgaWRWYWx1ZSA9IGVudHJ5
UG9pbnRbMF07CisgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRXhl
Y3V0aW9uTW9kZShpZFZhbHVlLCBzcGlydi5raW5kcy5FeGVjdXRpb25Nb2RlLk9yaWdpbkxvd2Vy
TGVmdCkpOworICAgICAgICB9CisgICAgfQorICAgIGFwcGVuZEV4ZWN1dGlvbk1vZGUodmVydGV4
RW50cnlQb2ludHMpOworICAgIGFwcGVuZEV4ZWN1dGlvbk1vZGUoZnJhZ21lbnRFbnRyeVBvaW50
cyk7CisKKyAgICAvLyA3LiBUaGVzZSBkZWJ1ZyBpbnN0cnVjdGlvbnMKKyAgICAvLyA4LiBBbGwg
YW5ub3RhdGlvbiBpbnN0cnVjdGlvbnMKKyAgICAvLyBGSVhNRTogaW5jbHVkZSBhbm5vdGF0aW9u
IGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgYmluZGluZyBudW1iZXIsIGRlc2NyaXB0b3Igc2V0IG51
bWJlciwgbG9jYXRpb24gbnVtYmVyLCBldGMuCisKKyAgICAvLyA5LiBBbGwgdHlwZSBkZWNsYXJh
dGlvbnMsIGFsbCBjb25zdGFudCBpbnN0cnVjdGlvbnMsIGFuZCBhbGwgZ2xvYmFsIHZhcmlhYmxl
IGRlY2xhcmF0aW9ucworICAgIHJldHVybiBhc3NlbWJsZXIucmVzdWx0OyovCisgICAgbGV0IGFz
c2VtYmxlciA9IG5ldyBTUElSVkFzc2VtYmxlcigpOworICAgIHJldHVybiBhc3NlbWJsZXIucmVz
dWx0OworfQorCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElS
VlR5cGVBbmFseXplci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWVHlw
ZUFuYWx5emVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZWZmNTRhNTAzYTFjZDU3MDU1MmM2ZTA0NjU2MzE0
NWUzNjZkODAKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TUElSVlR5cGVBbmFseXplci5qcwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBTUElS
VlR5cGVBbmFseXplciBleHRlbmRzIFZpc2l0b3IgeworICAgIGNvbnN0cnVjdG9yKHByb2dyYW0s
IHR5cGVNYXAsIGN1cnJlbnRJZCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRo
aXMuX3Byb2dyYW0gPSBwcm9ncmFtOworICAgICAgICB0aGlzLl90eXBlTWFwID0gdHlwZU1hcDsK
KyAgICAgICAgdGhpcy5fY3VycmVudElkID0gY3VycmVudElkOworICAgICAgICB0aGlzLl9zdGFj
ayA9IFtdOworICAgIH0KKworICAgIGdldCBwcm9ncmFtKCkKKyAgICB7CisgICAgICAgIHRoaXMu
X3Byb2dyYW07CisgICAgfQorCisgICAgZ2V0IHR5cGVNYXAoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3R5cGVNYXA7CisgICAgfQorCisgICAgZ2V0IGN1cnJlbnRJZCgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudElkOworICAgIH0KKworICAgIGdldCBzdGFjaygp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2s7CisgICAgfQorCisgICAgdmlzaXRU
eXBlUmVmKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAg
fQorCisgICAgX2VuY291bnRlclR5cGUoaWQpCisgICAgeworICAgICAgICBpZiAodGhpcy5zdGFj
ay5sZW5ndGggPiAwKQorICAgICAgICAgICAgdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAt
IDFdLnB1c2goaWQpOworICAgIH0KKworICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKKyAgICB7Cisg
ICAgICAgIHN1cGVyLnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY0xpdGVy
YWxUeXBlKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAg
fQorCisgICAgdmlzaXROYXRpdmVUeXBlKG5vZGUpCisgICAgeworICAgICAgICBpZiAoIXRoaXMu
dHlwZU1hcC5oYXMobm9kZSkpCisgICAgICAgICAgICB0aGlzLnR5cGVNYXAuc2V0KG5vZGUsIHRo
aXMuX2N1cnJlbnRJZCsrKTsKKyAgICAgICAgbGV0IGlkID0gdGhpcy50eXBlTWFwLmdldChub2Rl
KTsKKyAgICAgICAgdGhpcy5fZW5jb3VudGVyVHlwZShpZCk7CisgICAgfQorCisgICAgdmlzaXRF
bnVtVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXQodGhpcyk7CisgICAgfQor
CisgICAgdmlzaXRQdHJUeXBlKG5vZGUpCisgICAgeworICAgICAgICAvLyBJbnRlbnRpb25hbGx5
IGJsYW5rCisgICAgfQorCisgICAgdmlzaXRBcnJheVJlZlR5cGUobm9kZSkKKyAgICB7CisgICAg
ICAgIHRoaXMuX2VuY291bnRlclR5cGUodGhpcy50eXBlTWFwLmdldChwcm9ncmFtLmludHJpbnNp
Y3MudWludDMyKSk7CisgICAgICAgIHRoaXMuX2VuY291bnRlclR5cGUodGhpcy50eXBlTWFwLmdl
dChwcm9ncmFtLmludHJpbnNpY3MudWludDMyKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IFVz
aW5nIHRvU3RyaW5nKCkgaW4gdGhlc2UgZnVuY3Rpb25zIGlzIGEgaGFjay4gSW5zdGVhZCwgd2Ug
c2hvdWxkIGltcGxlbWVudCBhIHByb3BlciB0eXBlIGRlZHVwZXIuCisgICAgdmlzaXRBcnJheVR5
cGUobm9kZSkKKyAgICB7CisgICAgICAgIGxldCBpZDsKKyAgICAgICAgaWYgKHRoaXMudHlwZU1h
cC5oYXMobm9kZS50b1N0cmluZygpKSkgeworICAgICAgICAgICAgaWQgPSB0aGlzLnR5cGVNYXAu
Z2V0KG5vZGUpOworICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PSAib2JqZWN0IikKKyAgICAg
ICAgICAgICAgICBpZCA9IGlkLmlkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGV0
IGZpZWxkVHlwZSA9IFtdOworICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZpZWxkVHlwZSk7
CisgICAgICAgICAgICBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICAgICAg
dGhpcy5zdGFjay5wb3AoKTsKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUubGVuZ3RoICE9IDEp
CisgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJBcnJheXMgY2FuIG9ubHkgaGF2ZSBv
bmUgZWxlbWVudCB0eXBlISIpOworICAgICAgICAgICAgaWQgPSB0aGlzLl9jdXJyZW50SWQrKzsK
KyAgICAgICAgICAgIHRoaXMudHlwZU1hcC5zZXQobm9kZS50b1N0cmluZygpLCB7aWQ6IGlkLCBl
bGVtZW50VHlwZTogZmllbGRUeXBlWzBdLCBudW1FbGVtZW50czogbm9kZS5udW1FbGVtZW50cy52
YWx1ZX0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuY291bnRlclR5cGUoaWQpOworICAg
IH0KKworICAgIHZpc2l0U3RydWN0VHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGlkOwor
ICAgICAgICBpZiAodGhpcy50eXBlTWFwLmhhcyhub2RlLnRvU3RyaW5nKCkpKSB7CisgICAgICAg
ICAgICBpZCA9IHRoaXMudHlwZU1hcC5nZXQobm9kZS50b1N0cmluZygpKTsKKyAgICAgICAgICAg
IGlmICh0eXBlb2YgaWQgPT0gIm9iamVjdCIpCisgICAgICAgICAgICAgICAgaWQgPSBpZC5pZDsK
KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxldCBmaWVsZFR5cGVzID0gW107CisgICAg
ICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmllbGRUeXBlcyk7CisgICAgICAgICAgICBmb3IgKGxl
dCBmaWVsZCBvZiBub2RlLmZpZWxkcykKKyAgICAgICAgICAgICAgICBmaWVsZC52aXNpdCh0aGlz
KTsKKyAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7CisgICAgICAgICAgICBpZCA9IHRoaXMu
X2N1cnJlbnRJZCsrOworICAgICAgICAgICAgdGhpcy50eXBlTWFwLnNldChub2RlLnRvU3RyaW5n
KCksIHtpZDogaWQsIGZpZWxkVHlwZXM6IGZpZWxkVHlwZXN9KTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9lbmNvdW50ZXJUeXBlKGlkKTsKKyAgICB9Cit9CmRpZmYgLS1naXQgYS9Ub29scy9X
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU0wubWQgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9XU0wubWQKaW5kZXggN2M2MjYyOWQ1ODBkNmFjMmQ4Mjg0NGFhZDhkZWVhNjUwZGFiNDE0
MC4uZDNiNjY1Njc4MjZhNTFkZDZjNzU0ZDRlOWIyNGQ3NTc4OTcyYmIzZCAxMDA2NDQKLS0tIGEv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV1NMLm1kCisrKyBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1dTTC5tZApAQCAtNDczLDcgKzQ3Myw3IEBAIFdTTCBpcyBhIHR5cGUt
c2FmZSBsYW5ndWFnZSBiYXNlZCBvbiBDIHN5bnRheC4gSXQgZWxpbWluYXRlcyBzb21lIEMgZmVh
dHVyZXMsIGxpCiBUaGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgbGltaXRhdGlvbnMgbWF5IGJlIHBs
YWNlZCBvbiBhIFdTTCBwcm9ncmFtOgogCiAtIGBkZXZpY2VgLCBgY29uc3RhbnRgLCBhbmQgYHRo
cmVhZGdyb3VwYCBwb2ludGVycyBjYW5ub3QgcG9pbnQgdG8gZGF0YSB0aGF0IG1heSBoYXZlIHBv
aW50ZXJzIGluIGl0LiBUaGlzIHNhZmV0eSBjaGVjayBpcyBub3QgZG9uZSBhcyBwYXJ0IG9mIHRo
ZSBub3JtYWwgdHlwZSBzeXN0ZW0gY2hlY2tzLiBJdCdzIHBlcmZvcm1lZCBvbmx5IGFmdGVyIGlu
c3RhbnRpYXRpb24uCi0tIFBvaW50ZXJzIGFuZCBhcnJheSByZWZlcmVuY2VzIChjb2xsZWN0aXZl
bHksICpyZWZlcmVuY2VzKikgbWF5IGJlIHJlc3RyaWN0ZWQgdG8gc3VwcG9ydCBjb21waWxpbmcg
dG8gU1BJUi1WICpsb2dpY2FsIG1vZGUqLiBJbiB0aGlzIG1vZGUsIHJlZmVyZW5jZXMgbWF5IG5l
dmVyIHBvaW50IHRvIGRhdGEgc3RydWN0dXJlcyB0aGF0IGhhdmUgcmVmZXJlbmNlcyBpbiB0aGVt
LiBSZWZlcmVuY2VzIG11c3QgYmUgaW5pdGlhbGl6ZWQgdXBvbiBkZWNsYXJhdGlvbiBhbmQgbmV2
ZXIgcmVhc3NpZ25lZC4gRnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJlZmVyZW5jZXMgbXVzdCBoYXZl
IG9uZSByZXR1cm4gcG9pbnQuIFRlcm5hcnkgZXhwcmVzc2lvbnMgbWF5IG5vdCByZXR1cm4gcmVm
ZXJlbmNlcy4KKy0gUG9pbnRlcnMgYW5kIGFycmF5IHJlZmVyZW5jZXMgKGNvbGxlY3RpdmVseSwg
KnJlZmVyZW5jZXMqKSBtYXkgYmUgcmVzdHJpY3RlZCB0byBzdXBwb3J0IGNvbXBpbGluZyB0byBT
UElSLVYgKmxvZ2ljYWwgbW9kZSouIEluIHRoaXMgbW9kZSwgYXJyYXlzIG11c3Qgbm90IHRyYW5z
aXRpdmVseSBob2xkIHJlZmVyZW5jZXMuIFJlZmVyZW5jZXMgbXVzdCBiZSBpbml0aWFsaXplZCB1
cG9uIGRlY2xhcmF0aW9uIGFuZCBuZXZlciByZWFzc2lnbmVkLiBGdW5jdGlvbnMgdGhhdCByZXR1
cm4gcmVmZXJlbmNlcyBtdXN0IGhhdmUgb25lIHJldHVybiBwb2ludC4gVGVybmFyeSBleHByZXNz
aW9ucyBtYXkgbm90IHJldHVybiByZWZlcmVuY2VzLgogLSBHcmFwaGljcyBlbnRyeSBwb2ludHMg
bXVzdCB0cmFuc2l0aXZlbHkgbmV2ZXIgcmVmZXIgdG8gdGhlIGB0aHJlYWRncm91cGAgbWVtb3J5
IHNwYWNlLgogCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2lu
ZGV4Lmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCmluZGV4
IGE5Njk3ZmUwNzgyMTI4ZWEwZGVhMDE1ZDM3MmQwZjIwZDFkODM0MmMuLjNhN2U5NDhiZTY3ZDBi
NWMwNWJiMTljMmVmMTQzMDlhMTE5NzM4ZTQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRp
bmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvaW5kZXguaHRtbApAQCAtMzAwLDggKzMwMCw4IEBAIGZ1bmN0aW9uIGRvQ29tcGlsZVByZXNl
bnRTaGFkZXJTb3VyY2UoKSB7CiAgICAgcHJvZ3JhbSA9IHJlc3VsdDsKICAgICBhdmFpbGFibGVW
ZXJ0ZXhTaGFkZXJzID0gW107CiAgICAgYXZhaWxhYmxlRnJhZ21lbnRTaGFkZXJzID0gW107Ci0g
ICAgZm9yIChmdW5jdGlvbk5hbWVzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7Ci0g
ICAgICAgIGZvciAoZnVuYyBvZiBmdW5jdGlvbk5hbWVzKSB7CisgICAgZm9yIChsZXQgZnVuY3Rp
b25OYW1lcyBvZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICBmb3IgKGxl
dCBmdW5jIG9mIGZ1bmN0aW9uTmFtZXMpIHsKICAgICAgICAgICAgIGlmIChmdW5jLnNoYWRlclR5
cGUgPT0gInZlcnRleCIpCiAgICAgICAgICAgICAgICAgYXZhaWxhYmxlVmVydGV4U2hhZGVycy5w
dXNoKGZ1bmMpOwogICAgICAgICAgICAgaWYgKGZ1bmMuc2hhZGVyVHlwZSA9PSAiZnJhZ21lbnQi
KQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323064</attachid>
            <date>2017-10-06 16:26:24 -0700</date>
            <delta_ts>2017-10-06 16:49:47 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-177998-20171006162624.patch</filename>
            <type>text/plain</type>
            <size>42811</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyOTg0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggMGFjYmZkZTgwMzM2ODZiOTY2Y2RlMjY3YzcxMDlkNDAw
ZjUyMzQ1MS4uMTI4NjBhNzAyNmRlMzA1YmU3MGMwZjliZGY2OWRkMjZkZmRlZmNkYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYw
IEBACisyMDE3LTEwLTA2ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgRW1pdCBTUElSLVYgZnJvbSBXU0wgY29tcGlsZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzk5OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTGF0ZUNoZWNrZXIuanM6CisgICAgICAgIChMYXRlQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNr
U2hhZGVyVHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUi1WLmpz
OgorICAgICAgICAoU1BJUlYuT3BlcmFuZENoZWNrZXIucHJvdG90eXBlLl9pc1N0YXIpOgorICAg
ICAgICAoU1BJUlYuT3BlcmFuZENoZWNrZXIucHJvdG90eXBlLm5leHRDb21wYXJpc29uVHlwZSk6
CisgICAgICAgIChTUElSVi5PcGVyYW5kQ2hlY2tlci5wcm90b3R5cGUuZmluYWxpemUpOgorICAg
ICAgICAoU1BJUlYuT3BlcmFuZENoZWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1NQSVJWLmh0bWw6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJ
UlZDb2RlZ2VuLmpzOiBBZGRlZC4KKyAgICAgICAgKGZpbmRFbnRyeVBvaW50cyk6CisgICAgICAg
IChlbWl0VHlwZXMuZG9FbWl0VHlwZXMpOgorICAgICAgICAoZW1pdFR5cGVzKToKKyAgICAgICAg
KENvbnN0YW50RmluZGVyLnByb3RvdHlwZS52aXNpdEdlbmVyaWNMaXRlcmFsVHlwZSk6CisgICAg
ICAgIChDb25zdGFudEZpbmRlcik6CisgICAgICAgIChnZW5lcmF0ZVNQSVJWKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVlR5cGVBbmFseXplci5qczogQWRkZWQuCisg
ICAgICAgIChTUElSVlR5cGVBbmFseXplcik6CisgICAgICAgIChTUElSVlR5cGVBbmFseXplci5w
cm90b3R5cGUuZ2V0IHByb2dyYW0pOgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90
eXBlLmdldCB0eXBlTWFwKToKKyAgICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS5n
ZXQgY3VycmVudElkKToKKyAgICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS5nZXQg
c3RhY2spOgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJl
Zik6CisgICAgICAgIChTUElSVlR5cGVBbmFseXplci5wcm90b3R5cGUuX2VuY291bnRlclR5cGUp
OgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5cGUpOgor
ICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0R2VuZXJpY0xpdGVyYWxU
eXBlKToKKyAgICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdE5hdGl2ZVR5
cGUpOgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0RW51bVR5cGUp
OgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0UHRyVHlwZSk6Cisg
ICAgICAgIChTUElSVlR5cGVBbmFseXplci5wcm90b3R5cGUudmlzaXRBcnJheVJlZlR5cGUpOgor
ICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0QXJyYXlUeXBlKToKKyAg
ICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdFN0cnVjdFR5cGUpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWVmFyaWFibGVBbmFseXplci5qczog
QWRkZWQuCisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIpOgorICAgICAg
ICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS5nZXQgcHJvZ3JhbSk6
CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLmdldCB0
eXBlTWFwKToKKyAgICAgICAgKFNQSVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5
cGUuZ2V0IGN1cnJlbnRJZCk6CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6
ZXIucHJvdG90eXBlLmdldCBuYW1lQ29tcG9uZW50cyk6CisgICAgICAgIChTUElSVlByaW1pdGl2
ZVZhcmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLmdldCByZXN1bHQpOgorICAgICAgICAoU1BJUlZQ
cmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOgorICAgICAg
ICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdE51bGxUeXBl
KToKKyAgICAgICAgKFNQSVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5cGUudmlz
aXRHZW5lcmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFu
YWx5emVyLnByb3RvdHlwZS52aXNpdE5hdGl2ZVR5cGUpOgorICAgICAgICAoU1BJUlZQcmltaXRp
dmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdEVudW1UeXBlKToKKyAgICAgICAgKFNQ
SVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5cGUudmlzaXRQdHJUeXBlKToKKyAg
ICAgICAgKFNQSVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5cGUudmlzaXRBcnJh
eVJlZlR5cGUpOgorICAgICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3Rv
dHlwZS52aXNpdEFycmF5VHlwZSk6CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5h
bHl6ZXIucHJvdG90eXBlLnZpc2l0U3RydWN0VHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvV1NMLm1kOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2lu
ZGV4Lmh0bWw6CisKIDIwMTctMTAtMDYgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29t
PgogCiAgICAgICAgIE1pbm9yIFdlYWtQdHIgaW1wcm92ZW1lbnRzCmRpZmYgLS1naXQgYS9Ub29s
cy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tlci5qcyBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzCmluZGV4IDgxNDBhMjJmNWJlNGVmYmUxZjIw
ZWQ0OTk4MDhkNTNiN2E5MjlkOTcuLjVkMWVmOTVhMjMwMmIyZDZmZGI5ZTAzMGVhYjMyZTZhNzBk
NzY2ZGUgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVj
a2VyLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpz
CkBAIC0zNiw2ICszNiw3IEBAIGNsYXNzIExhdGVDaGVja2VyIGV4dGVuZHMgVmlzaXRvciB7CiAg
ICAgCiAgICAgX2NoZWNrU2hhZGVyVHlwZShub2RlKQogICAgIHsKKyAgICAgICAgLy8gRklYTUU6
IFRpZ2h0ZW4gdGhlc2UgY2hlY2tzLiBGb3Igbm93LCB3ZSBzaG91bGQgb25seSBhY2NlcHQgaW50
MzIsIHVpbnQzMiwgZmxvYXQzMiwgYW5kIGZsb2F0NjQuCiAgICAgICAgIGxldCBhc3NlcnRQcmlt
aXRpdmUgPSB0eXBlID0+IHsKICAgICAgICAgICAgIGlmICghdHlwZS5pc1ByaW1pdGl2ZSkKICAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgV1R5cGVFcnJvcihub2RlLm9yaWdpbi5vcmlnaW5TdHJp
bmcsICJTaGFkZXIgc2lnbmF0dXJlIGNhbm5vdCBpbmNsdWRlIG5vbi1wcmltaXRpdmUgdHlwZTog
IiArIHR5cGUpOwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJ
Ui1WLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUi1WLmpzCmluZGV4IDhm
YTkzZjJmOGJhNzIyNzdhYjRmMmJmNzA4Y2VmZTY1ZWY3YTY5MGIuLjgwY2E3MDQ0YWIwNjZlYjgz
MTQ2NmNiZjAyM2I2OTRmYjc4ZThlYTIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdM
YW5ndWFnZVJJL1NQSVItVi5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
UElSLVYuanMKQEAgLTM4LDcgKzM4LDcgQEAgZnVuY3Rpb24gU1BJUlYoanNvbikgewogICAgICAg
ICBzd2l0Y2ggKGtpbmQuY2F0ZWdvcnkpIHsKICAgICAgICAgY2FzZSAiQml0RW51bSI6CiAgICAg
ICAgIGNhc2UgIlZhbHVlRW51bSI6Ci0gICAgICAgICAgICBsZXQgZW51bWVyYW50cyA9IHt9Owor
ICAgICAgICAgICAgbGV0IGVudW1lcmFudHMgPSB7IGNhdGVnb3J5OiBraW5kLmNhdGVnb3J5IH07
CiAgICAgICAgICAgICBmb3IgKGxldCBlbnVtZXJhbnQgb2Yga2luZC5lbnVtZXJhbnRzKSB7CiAg
ICAgICAgICAgICAgICAgZW51bWVyYW50c1tlbnVtZXJhbnQuZW51bWVyYW50XSA9IGVudW1lcmFu
dDsKICAgICAgICAgICAgIH0KQEAgLTExMiwyMCArMTEyLDI0IEBAIGZ1bmN0aW9uIFNQSVJWKGpz
b24pIHsKICAgICAgICAgICAgIHRoaXMuX3BhcmFtZXRlcnMgPSBbXTsKICAgICAgICAgfQogCi0g
ICAgICAgIG5leHRDb21wYXJpc29uVHlwZShvcGVyYW5kKQorICAgICAgICBfaXNTdGFyKG9wZXJh
bmRJbmZvKQogICAgICAgICB7Ci0gICAgICAgICAgICBpZiAodGhpcy5fb3BlcmFuZEluZm9JbmRl
eCA+PSB0aGlzLl9vcGVyYW5kSW5mb3MubGVuZ3RoKQotICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiU3BlY2lmaWVkIG9wZXJhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkgdGhh
dCB0aGUgaW5zdHJ1Y3Rpb24gZXhwZWN0cy4iKTsKLSAgICAgICAgICAgIGxldCBvcGVyYW5kSW5m
byA9IHRoaXMuX29wZXJhbmRJbmZvc1t0aGlzLl9vcGVyYW5kSW5mb0luZGV4XTsKLQotICAgICAg
ICAgICAgbGV0IGlzU3RhciA9IG9wZXJhbmRJbmZvLnF1YW50aWZpZXIgJiYgb3BlcmFuZEluZm8u
cXVhbnRpZmllciA9PSAiKiI7CiAgICAgICAgICAgICBzd2l0Y2ggKG9wZXJhbmRJbmZvLmtpbmQp
IHsKICAgICAgICAgICAgICAgICBjYXNlICJMaXRlcmFsQ29udGV4dERlcGVuZGVudE51bWJlciI6
CiAgICAgICAgICAgICAgICAgY2FzZSAiTGl0ZXJhbFNwZWNDb25zdGFudE9wSW50ZWdlciI6CiAg
ICAgICAgICAgICAgICAgICAgIC8vIFRoZXNlIHR5cGVzIGNhbiBiZSBhbnkgd2lkdGguCi0gICAg
ICAgICAgICAgICAgICAgIGlzU3RhciA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgIHJldHVybiBvcGVyYW5kSW5mby5xdWFudGlmaWVyICYmIG9wZXJhbmRJbmZvLnF1YW50
aWZpZXIgPT0gIioiOworICAgICAgICB9CisKKyAgICAgICAgbmV4dENvbXBhcmlzb25UeXBlKG9w
ZXJhbmQpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICh0aGlzLl9vcGVyYW5kSW5mb0luZGV4
ID49IHRoaXMuX29wZXJhbmRJbmZvcy5sZW5ndGgpCisgICAgICAgICAgICAgICAgdGhyb3cgbmV3
IEVycm9yKCJTcGVjaWZpZWQgb3BlcmFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSB0aGF0
IHRoZSBpbnN0cnVjdGlvbiBleHBlY3RzLiIpOworICAgICAgICAgICAgbGV0IG9wZXJhbmRJbmZv
ID0gdGhpcy5fb3BlcmFuZEluZm9zW3RoaXMuX29wZXJhbmRJbmZvSW5kZXhdOworCisgICAgICAg
ICAgICBsZXQgaXNTdGFyID0gdGhpcy5faXNTdGFyKG9wZXJhbmRJbmZvKTsKIAogICAgICAgICAg
ICAgaWYgKHRoaXMuX3BhcmFtZXRlcnMubGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgICAgICBs
ZXQgcmVzdWx0ID0gdGhpcy5fcGFyYW1ldGVyc1swXTsKQEAgLTE3Niw4ICsxODAsOSBAQCBmdW5j
dGlvbiBTUElSVihqc29uKSB7CiAgICAgICAgICAgICBpZiAodGhpcy5fcGFyYW1ldGVycy5sZW5n
dGggIT0gMCkKICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk9wZXJhbmQgbm90IHNw
ZWNpZmllZCBmb3IgcGFyYW1ldGVyLiIpOwogICAgICAgICAgICAgZm9yIChsZXQgaSA9IHRoaXMu
X29wZXJhbmRJbmZvSW5kZXg7IGkgPCB0aGlzLl9vcGVyYW5kSW5mb3MubGVuZ3RoOyArK2kpIHsK
LSAgICAgICAgICAgICAgICBsZXQgcXVhbnRpZmllciA9IHRoaXMuX29wZXJhbmRJbmZvc1tpXS5x
dWFudGlmaWVyOwotICAgICAgICAgICAgICAgIGlmIChxdWFudGlmaWVyICE9ICI/IiAmJiBxdWFu
dGlmaWVyICE9ICIqIikKKyAgICAgICAgICAgICAgICBsZXQgb3BlcmFuZEluZm8gPSB0aGlzLl9v
cGVyYW5kSW5mb3NbaV07CisgICAgICAgICAgICAgICAgbGV0IHF1YW50aWZpZXIgPSBvcGVyYW5k
SW5mby5xdWFudGlmaWVyOworICAgICAgICAgICAgICAgIGlmIChxdWFudGlmaWVyICE9ICI/IiAm
JiAhdGhpcy5faXNTdGFyKG9wZXJhbmRJbmZvKSkKICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJEaWQgbm90IHNwZWNpZnkgb3BlcmFuZCAiICsgaSArICIgdG8gaW5zdHJ1Y3Rp
b24uIik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTE5MCw3ICsxOTUsNiBAQCBmdW5j
dGlvbiBTUElSVihqc29uKSB7CiAgICAgICAgIHJlc3VsdC5vcHNbYXR0cmlidXRlTmFtZV0gPSBj
bGFzcyB7CiAgICAgICAgICAgICBjb25zdHJ1Y3RvciguLi5vcGVyYW5kcykKICAgICAgICAgICAg
IHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogSGFuZGxlIE9wQ29uc3RhbnQsIE9wU3BlY0Nv
bnN0YW50LCBPcFNwZWNDb25zdGFudE9wIHNwZWNpYWxseS4KICAgICAgICAgICAgICAgICBsZXQg
b3BlcmFuZENoZWNrZXIgPSBuZXcgT3BlcmFuZENoZWNrZXIoaW5zdHJ1Y3Rpb24ub3BlcmFuZHMp
OwogICAgICAgICAgICAgICAgIGZvciAobGV0IG9wZXJhbmQgb2Ygb3BlcmFuZHMpCiAgICAgICAg
ICAgICAgICAgICAgIG9wZXJhbmRDaGVja2VyLmNoZWNrKG9wZXJhbmQpOwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbCBiL1Rvb2xzL1dlYkdQVVNo
YWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwKaW5kZXggMjFhYzRlMjEwYWM0ZmNkODUxYjRhYzJi
MTA3YzFmMzYwYTg0MTM3Mi4uY2MyMmVjOGJiODA4NmIzZDAxZTA5Y2MwNzI5OGUwMmM5N2QzNDdk
NiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbAor
KysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCkBAIC0xLDQ1ICsx
LDE5NyBAQAogPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgotPHNjcmlwdCBzcmM9IlNQ
SVItVi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5vZGUuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmVm
ZXJlbmNlVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZhbHVlLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlJld3JpdGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlzaXRv
ci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWwuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IlByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisK
KyAgICA8c2NyaXB0IHNyYz0iQWRkcmVzc1NwYWNlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iQW5vbnltb3VzVmFyaWFibGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJB
cnJheVJlZlR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJBcnJheVR5cGUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJBc3NpZ25tZW50LmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iQXV0b1dyYXBwZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJCbG9jay5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkJvb2xMaXRlcmFsLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQnJlYWsuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSJDYWxsRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNh
bGxGdW5jdGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tMaXRlcmFsVHlwZXMuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJDaGVja0xvb3BzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iQ2hlY2tSZWN1cnNpb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVja1Jl
Y3Vyc2l2ZVR5cGVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tSZXR1cm5z
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tVbnJlYWNoYWJsZUNvZGUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVja1dyYXBwZWQuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJDaGVja2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
Q2xvbmVQcm9ncmFtLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29tbWFFeHByZXNz
aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29uc3RleHByRm9sZGVyLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ29uc3RleHByVHlwZVBhcmFtZXRlci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnRpbnVlLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iQ29udmVydFB0clRvQXJyYXlSZWZFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iRG9XaGlsZUxvb3AuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJEb3RFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRG91YmxlTGl0
ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkRvdWJsZUxpdGVyYWxUeXBlLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRGVyZWZlcmVuY2VFeHByZXNzaW9uLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRUFycmF5UmVmLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iRUJ1ZmZlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkVCdWZm
ZXJCdWlsZGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRVB0ci5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IkVudW1MaXRlcmFsLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iRW51bU1lbWJlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkVudW1U
eXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRXZhbHVhdGlvbkNvbW1vbi5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV2YWx1YXRvci5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkV4cHJlc3Npb25GaW5kZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJFeHRlcm5hbE9yaWdpbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZpZWxk
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRmluZEhpZ2hab21iaWVzLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRmxhdHRlblByb3RvY29sRXh0ZW5kcy5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IkZsYXR0ZW5lZFN0cnVjdE9mZnNldEdhdGhlcmVyLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRmxvYXRMaXRlcmFsLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iRmxvYXRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkZvbGRDb25zdGV4cHJzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRm9y
TG9vcC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZ1bmMuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJGdW5jRGVmLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
RnVuY0luc3RhbnRpYXRvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZ1bmNQYXJh
bWV0ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGdW5jdGlvbkxpa2VCbG9jay5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkhpZ2hab21iaWVGaW5kZXIuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJJZGVudGl0eUV4cHJlc3Npb24uanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJJZlN0YXRlbWVudC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IkluZGV4RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkluZmVy
VHlwZXNGb3JDYWxsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW5saW5lLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW5saW5lci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ikluc3RhbnRpYXRlSW1tZWRpYXRlcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkludExpdGVyYWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJbnRMaXRl
cmFsVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkludHJpbnNpY3MuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJMYXRlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkxleGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTGV4ZXJU
b2tlbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkxpdGVyYWxUeXBlQ2hlY2tlci5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkxvZ2ljYWxFeHByZXNzaW9uLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTG9naWNhbE5vdC5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ikxvb3BDaGVja2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTWFr
ZUFycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik1ha2VQ
dHJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTmFtZUNvbnRleHQu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYW1lRmluZGVyLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iTmFtZVJlc29sdmVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iTmF0aXZlRnVuYy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5hdGl2ZUZ1
bmNJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBlSW5zdGFuY2UuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJOb3JtYWxVc2VQcm9wZXJ0eVJlc29sdmVyLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTnVsbExpdGVyYWwuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJOdWxsVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik9yaWdp
bktpbmQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJPdmVybG9hZFJlc29sdXRpb25G
YWlsdXJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUGFyc2UuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJQcmVwYXJlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iUHJvcGVydHlSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb2dy
YW0uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcm9ncmFtV2l0aFVubmVjZXNzYXJ5
VGhpbmdzUmVtb3ZlZC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2xEZWNsLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2xGdW5jRGVjbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlByb3RvY29sUmVmLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHRy
VHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJlYWRNb2RpZnlXcml0ZUV4cHJl
c3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZWN1cnNpb25DaGVja2VyLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmVjdXJzaXZlVHlwZUNoZWNrZXIuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZXNvbHZlTmFtZXMuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJSZXNvbHZlT3ZlcmxvYWRJbXBsLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iUmVzb2x2ZVByb3BlcnRpZXMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJSZXNvbHZlVHlwZURlZnMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZXR1cm4u
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZXR1cm5DaGVja2VyLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iUmV0dXJuRXhjZXB0aW9uLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iU1BJUi1WLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU1BJUlZD
b2RlZ2VuLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU1BJUlZUeXBlQW5hbHl6ZXIu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTUElSVlZhcmlhYmxlQW5hbHl6ZXIuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTdGFuZGFyZExpYnJhcnkuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJTdGF0ZW1lbnRDbG9uZXIuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJTdHJ1Y3RMYXlvdXRCdWlsZGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iU3RydWN0VHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlN1YnN0aXR1
dGlvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlN3aXRjaENhc2UuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJTd2l0Y2hTdGF0ZW1lbnQuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJTeW50aGVzaXplRW51bUZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IlN5bnRoZXNpemVTdHJ1Y3RBY2Nlc3NvcnMuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJUcmFwU3RhdGVtZW50LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iVHlwZURlZi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVEZWZSZXNvbHZl
ci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVPclZhcmlhYmxlUmVmLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZVBhcmFtZXRlclJld3JpdGVyLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZVJlZi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlR5cGVWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVW
YXJpYWJsZVRyYWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJUeXBlZFZhbHVl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVWludExpdGVyYWwuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJVaW50TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJVbmlmaWNhdGlvbkNvbnRleHQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJVbnJlYWNoYWJsZUNvZGVDaGVja2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iVmFyaWFibGVEZWNsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmFyaWFibGVS
ZWYuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaXNpdGluZ1NldC5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IldTeW50YXhFcnJvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IldUcmFwRXJyb3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJXVHlw
ZUVycm9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iV2hpbGVMb29wLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iV3JhcENoZWNrZXIuanMiPjwvc2NyaXB0PgogPHNjcmlw
dD4KKyAgICBsZXQgY29kZSA9IGAKK3N0cnVjdCBWZXJ0ZXhJbnB1dCB7CisgICAgZmxvYXQyIHBv
c2l0aW9uOworICAgIGZsb2F0MyBjb2xvcjsKK30KKworc3RydWN0IFZlcnRleE91dHB1dCB7Cisg
ICAgZmxvYXQ0IHdzbF9Qb3NpdGlvbjsKKyAgICBmbG9hdDQgY29sb3I7Cit9CisKK3N0cnVjdCBG
cmFnbWVudE91dHB1dCB7CisgICAgZmxvYXQ0IHdzbF9Db2xvcjsKK30KKwordmVydGV4IFZlcnRl
eE91dHB1dCB2ZXJ0ZXhTaGFkZXIoVmVydGV4SW5wdXQgdmVydGV4SW5wdXQpIHsKKyAgICBWZXJ0
ZXhPdXRwdXQgcmVzdWx0OworICAgIHJlc3VsdC53c2xfUG9zaXRpb24gPSBmbG9hdDQodmVydGV4
SW5wdXQucG9zaXRpb24sIDAuLCAxLik7CisgICAgcmVzdWx0LmNvbG9yID0gZmxvYXQ0KHZlcnRl
eElucHV0LmNvbG9yLCAxKTsKKyAgICAKKyAgICBpbnRbMTBdIGE7CisgICAgaW50WzEwdV0gYjsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitmcmFnbWVudCBGcmFnbWVudE91dHB1dCBmcmFnbWVu
dFNoYWRlcihWZXJ0ZXhPdXRwdXQgc3RhZ2VJbikgeworICAgIEZyYWdtZW50T3V0cHV0IHJlc3Vs
dDsKKyAgICByZXN1bHQud3NsX0NvbG9yID0gc3RhZ2VJbi5jb2xvcjsKKyAgICByZXR1cm4gcmVz
dWx0OworfWA7CiAKICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9u
ICgpIHsKICAgICAgICAgZmV0Y2goInNwaXJ2LmNvcmUuZ3JhbW1hci5qc29uIikudGhlbihyZXNw
b25zZSA9PiByZXNwb25zZS5qc29uKCkpLnRoZW4oZnVuY3Rpb24gKGpzb24pIHsKICAgICAgICAg
ICAgIGxldCBzcGlydiA9IFNQSVJWKGpzb24pOwotICAgICAgICAgICAgbGV0IGFzc2VtYmxlciA9
IG5ldyBTUElSVkFzc2VtYmxlcigpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcg
c3BpcnYub3BzLkNhcGFiaWxpdHkoc3BpcnYua2luZHMuQ2FwYWJpbGl0eS5TaGFkZXIpKTsKLSAg
ICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5NZW1vcnlNb2RlbChzcGly
di5raW5kcy5BZGRyZXNzaW5nTW9kZWwuTG9naWNhbCwgc3BpcnYua2luZHMuTWVtb3J5TW9kZWwu
R0xTTDQ1MCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkVu
dHJ5UG9pbnQoc3BpcnYua2luZHMuRXhlY3V0aW9uTW9kZWwuRnJhZ21lbnQsIDUsICJtYWluIiwg
MTAsIDE3KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRXhl
Y3V0aW9uTW9kZSg1LCBzcGlydi5raW5kcy5FeGVjdXRpb25Nb2RlLk9yaWdpbkxvd2VyTGVmdCkp
OwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkRlY29yYXRlKDEw
LCBzcGlydi5raW5kcy5EZWNvcmF0aW9uLkxvY2F0aW9uLCAwKSk7Ci0gICAgICAgICAgICBhc3Nl
bWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRGVjb3JhdGUoMTQsIHNwaXJ2LmtpbmRzLkRlY29y
YXRpb24uRGVzY3JpcHRvclNldCwgMCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChu
ZXcgc3BpcnYub3BzLkRlY29yYXRlKDE0LCBzcGlydi5raW5kcy5EZWNvcmF0aW9uLkJpbmRpbmcs
IDEpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5EZWNvcmF0
ZSgxNywgc3BpcnYua2luZHMuRGVjb3JhdGlvbi5Mb2NhdGlvbiwgMCkpOwotICAgICAgICAgICAg
YXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVWb2lkKDMpKTsKLSAgICAgICAgICAg
IGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlRnVuY3Rpb24oNCwgMykpOwotICAg
ICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVGbG9hdCg3LCAzMikp
OwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVWZWN0b3Io
OCwgNywgNCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5
cGVQb2ludGVyKDksIHNwaXJ2LmtpbmRzLlN0b3JhZ2VDbGFzcy5PdXRwdXQsIDgpKTsKLSAgICAg
ICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5WYXJpYWJsZSg5LCAxMCwgc3Bp
cnYua2luZHMuU3RvcmFnZUNsYXNzLk91dHB1dCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFw
cGVuZChuZXcgc3BpcnYub3BzLlR5cGVJbWFnZSgxMSwgNywgc3BpcnYua2luZHMuRGltWyIyRCJd
LCAwLCAwLCAwLCAxLCBzcGlydi5raW5kcy5JbWFnZUZvcm1hdC5Vbmtub3duKSk7Ci0gICAgICAg
ICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVNhbXBsZWRJbWFnZSgxMiwg
MTEpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlUG9p
bnRlcigxMywgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLlVuaWZvcm1Db25zdGFudCwgMTIpKTsK
LSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5WYXJpYWJsZSgxMywg
MTQsIHNwaXJ2LmtpbmRzLlN0b3JhZ2VDbGFzcy5Vbmlmb3JtQ29uc3RhbnQpKTsKLSAgICAgICAg
ICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlUG9pbnRlcigxNiwgc3BpcnYu
a2luZHMuU3RvcmFnZUNsYXNzLklucHV0LCA4KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBw
ZW5kKG5ldyBzcGlydi5vcHMuVmFyaWFibGUoMTYsIDE3LCBzcGlydi5raW5kcy5TdG9yYWdlQ2xh
c3MuSW5wdXQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5U
eXBlVmVjdG9yKDE4LCA3LCAyKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBz
cGlydi5vcHMuRnVuY3Rpb24oMywgNSwgc3BpcnYua2luZHMuRnVuY3Rpb25Db250cm9sLk5vbmUs
IDQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5MYWJlbCg2
KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuTG9hZCgxMiwg
MTUsIDE0KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuTG9h
ZCg4LCAxOSwgMTcpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9w
cy5WZWN0b3JTaHVmZmxlKDE4LCAyMCwgMTksIDE5LCAwLCAxKSk7Ci0gICAgICAgICAgICBhc3Nl
bWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuSW1hZ2VTYW1wbGVJbXBsaWNpdExvZCg4LCAyMSwg
MTUsIDIwKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuU3Rv
cmUoMTAsIDIxKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMu
UmV0dXJuKCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkZ1
bmN0aW9uRW5kKCkpOwotICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGFzc2VtYmxlci5yZXN1bHQ7
Ci0gICAgICAgICAgICAKKyAgICAgICAgICAgIGxldCBwcm9ncmFtID0gcHJlcGFyZSgiL2ludGVy
bmFsL3Rlc3QiLCAwLCBjb2RlKTsKKyAgICAgICAgICAgIGxldCByZXN1bHQgPSBnZW5lcmF0ZVNQ
SVJWKHNwaXJ2LCBwcm9ncmFtKTsKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgICAg
IH0pLnRoZW4oZnVuY3Rpb24ocmVzdWx0KSB7CiAgICAgICAgICAgICBsZXQgcmVzdWx0RWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJSZXN1bHQiKTsKICAgICAgICAgICAgIHdoaWxl
IChyZXN1bHRFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoICE9IDApCiAgICAgICAgICAgICAgICAg
cmVzdWx0RWxlbWVudC5yZW1vdmVDaGlsZChyZXN1bHRFbGVtZW50LmNoaWxkTm9kZXNbMF0pOwpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlZDb2RlZ2VuLmpz
IGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlZDb2RlZ2VuLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjlmMWE2N2MzZmI2ZGRmYmM4MzBiYzQ4MDEyNTlkNGM3MzRiNThlM2IKLS0tIC9kZXYvbnVs
bAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVkNvZGVnZW4uanMKQEAg
LTAsMCArMSwzMDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gZ2VuZXJhdGVTUElSVihzcGlydiwgcHJvZ3Jh
bSkKK3sKKworICAgIGZ1bmN0aW9uIGZpbmRFbnRyeVBvaW50cygpCisgICAgeworICAgICAgICBs
ZXQgZW50cnlQb2ludHMgPSBbXTsKKyAgICAgICAgZm9yIChsZXQgZnVuY3Rpb25OYW1lcyBvZiBw
cm9ncmFtLmZ1bmN0aW9ucy52YWx1ZXMoKSkgeworICAgICAgICAgICAgZm9yIChsZXQgZnVuYyBv
ZiBmdW5jdGlvbk5hbWVzKSB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChmdW5jLnNoYWRlclR5
cGUpIHsKKyAgICAgICAgICAgICAgICBjYXNlICJ2ZXJ0ZXgiOgorICAgICAgICAgICAgICAgIGNh
c2UgImZyYWdtZW50IjoKKyAgICAgICAgICAgICAgICAgICAgZW50cnlQb2ludHMucHVzaChmdW5j
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiBlbnRyeVBvaW50czsKKyAgICB9CisK
KyAgICBsZXQgY3VycmVudElkID0gMzsKKyAgICBsZXQgdHlwZU1hcCA9IG5ldyBNYXAoKTsKKyAg
ICBsZXQgcmV2ZXJzZVR5cGVNYXAgPSBuZXcgTWFwKCk7CisgICAgbGV0IGVudHJ5UG9pbnRzID0g
W107CisKKyAgICB0eXBlTWFwLnNldChwcm9ncmFtLmludHJpbnNpY3Mudm9pZCwgY3VycmVudElk
KyspOworCisgICAgZm9yIChsZXQgZW50cnlQb2ludCBvZiBmaW5kRW50cnlQb2ludHMoKSkgewor
ICAgICAgICBsZXQgaW5saW5lZFNoYWRlciA9IHByb2dyYW0uZnVuY0luc3RhbnRpYXRvci5nZXRV
bmlxdWUoZW50cnlQb2ludCwgW10pOworICAgICAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwg
aW5saW5lZFNoYWRlciwgbmV3IFZpc2l0aW5nU2V0KGVudHJ5UG9pbnQpKTsKKworICAgICAgICBs
ZXQgdHlwZUFuYWx5emVyID0gbmV3IFNQSVJWVHlwZUFuYWx5emVyKHByb2dyYW0sIHR5cGVNYXAs
IGN1cnJlbnRJZCk7CisgICAgICAgIGlubGluZWRTaGFkZXIudmlzaXQodHlwZUFuYWx5emVyKTsK
KyAgICAgICAgY3VycmVudElkID0gdHlwZUFuYWx5emVyLmN1cnJlbnRJZDsKKworICAgICAgICBs
ZXQgdmFsdWVBbmFseXplciA9IG5ldyBTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIocHJv
Z3JhbSwgdHlwZU1hcCwgY3VycmVudElkKTsKKyAgICAgICAgaW5saW5lZFNoYWRlci5yZXR1cm5U
eXBlLnZpc2l0KHZhbHVlQW5hbHl6ZXIpOworICAgICAgICBjdXJyZW50SWQgPSB2YWx1ZUFuYWx5
emVyLmN1cnJlbnRJZDsKKyAgICAgICAgbGV0IG91dHB1dFZhbHVlcyA9IHZhbHVlQW5hbHl6ZXIu
cmVzdWx0OworCisgICAgICAgIGxldCBpbnB1dFZhbHVlcyA9IFtdOworICAgICAgICBmb3IgKGxl
dCBwYXJhbWV0ZXIgb2YgaW5saW5lZFNoYWRlci5wYXJhbWV0ZXJzKSB7CisgICAgICAgICAgICBp
ZiAocGFyYW1ldGVyLnR5cGUudHlwZSBpbnN0YW5jZW9mIFN0cnVjdFR5cGUpIHsKKyAgICAgICAg
ICAgICAgICBsZXQgdmFsdWVBbmFseXplciA9IG5ldyBTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5h
bHl6ZXIocHJvZ3JhbSwgdHlwZU1hcCwgY3VycmVudElkLCBwYXJhbWV0ZXIubmFtZSk7CisgICAg
ICAgICAgICAgICAgcGFyYW1ldGVyLnZpc2l0KHZhbHVlQW5hbHl6ZXIpOworICAgICAgICAgICAg
ICAgIGN1cnJlbnRJZCA9IHZhbHVlQW5hbHl6ZXIuY3VycmVudElkOworICAgICAgICAgICAgICAg
IGZvciAobGV0IGlucHV0VmFsdWUgb2YgdmFsdWVBbmFseXplci5yZXN1bHQpCisgICAgICAgICAg
ICAgICAgICAgIGlucHV0VmFsdWVzLnB1c2goaW5wdXRWYWx1ZSk7CisgICAgICAgICAgICB9IGVs
c2UgaWYgKHBhcmFtZXRlci50eXBlLnR5cGUgaW5zdGFuY2VvZiBBcnJheVJlZlR5cGUpIHsKKyAg
ICAgICAgICAgICAgICAvLyBGSVhNRTogSW1wbGVtZW50IHRoaXMuCisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKworICAgICAgICBlbnRyeVBvaW50cy5wdXNoKHsgaWQ6IGN1cnJlbnRJZCsrLCBz
aGFkZXI6IGlubGluZWRTaGFkZXIsIGlucHV0czogaW5wdXRWYWx1ZXMsIG91dHB1dHM6IG91dHB1
dFZhbHVlcyB9KTsKKyAgICB9CisgICAgCisgICAgZm9yIChsZXQgdHlwZSBvZiB0eXBlTWFwKSB7
CisgICAgICAgIGlmICh0eXBlb2YgdHlwZVsxXSA9PSAib2JqZWN0IikKKyAgICAgICAgICAgIHJl
dmVyc2VUeXBlTWFwLnNldCh0eXBlWzFdLmlkLCB0eXBlWzBdKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcmV2ZXJzZVR5cGVNYXAuc2V0KHR5cGVbMV0sIHR5cGVbMF0pOworICAgIH0KKwor
CisKKworCisKKworCisKKworCisKKworCisgICAgZnVuY3Rpb24gZW1pdFR5cGVzKGFzc2VtYmxl
cikgeworICAgICAgICBsZXQgZW1pdHRlZFR5cGVzID0gbmV3IFNldCgpOworICAgICAgICBmdW5j
dGlvbiBkb0VtaXRUeXBlcyh0eXBlKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoZW1pdHRl
ZFR5cGVzLmhhcyh0eXBlWzBdKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAg
ICBlbWl0dGVkVHlwZXMuYWRkKHR5cGVbMF0pOworICAgICAgICAgICAgaWYgKHR5cGVvZiB0eXBl
WzFdID09ICJvYmplY3QiKSB7CisgICAgICAgICAgICAgICAgaWYgKHR5cGVbMV0uZmllbGRUeXBl
cykgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBmaWVsZFR5cGUgb2YgdHlwZVsxXS5m
aWVsZFR5cGVzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gcmV2ZXJzZVR5
cGVNYXAuZ2V0KGZpZWxkVHlwZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUg
PSB0eXBlTWFwLmdldChrZXkpOworICAgICAgICAgICAgICAgICAgICAgICAgZG9FbWl0VHlwZXMo
W2tleSwgdmFsdWVdKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICBzd2l0Y2ggKHR5cGVbMF0pIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RydWN0IHZl
YzI8PiB7IGludDMyIHg7IGludDMyIHkgfSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0
cnVjdCB2ZWMyPD4geyB1aW50MzIgeDsgdWludDMyIHk7IH0iOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlICJzdHJ1Y3QgdmVjMjw+IHsgZmxvYXQzMiB4OyBmbG9hdDMyIHk7IH0iOgorICAgICAg
ICAgICAgICAgICAgICBjYXNlICJzdHJ1Y3QgdmVjMjw+IHsgZmxvYXQ2NCB4OyBmbG9hdDY0IHk7
IH0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJzdHJ1Y3QgdmVjMzw+IHsgaW50MzIgeDsg
aW50MzIgeTsgaW50MzIgejsgfSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0cnVjdCB2
ZWMzPD4geyB1aW50MzIgeDsgdWludDMyIHk7IHVpbnQzMiB6OyB9IjoKKyAgICAgICAgICAgICAg
ICAgICAgY2FzZSAic3RydWN0IHZlYzM8PiB7IGZsb2F0MzIgeDsgZmxvYXQzMiB5OyBmbG9hdDMy
IHo7IH0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJzdHJ1Y3QgdmVjMzw+IHsgZmxvYXQ2
NCB4OyBmbG9hdDY0IHk7IGZsb2F0NjQgejsgfSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2Ug
InN0cnVjdCB2ZWM0PD4geyBpbnQzMiB4OyBpbnQzMiB5OyBpbnQzMiB6OyBpbnQzMiB3OyB9IjoK
KyAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RydWN0IHZlYzQ8PiB7IHVpbnQzMiB4OyB1aW50
MzIgeTsgdWludDMyIHo7IHVpbnQzMiB3OyB9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAi
c3RydWN0IHZlYzQ8PiB7IGZsb2F0MzIgeDsgZmxvYXQzMiB5OyBmbG9hdDMyIHo7IGZsb2F0MzIg
dzsgfSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0cnVjdCB2ZWM0PD4geyBmbG9hdDY0
IHg7IGZsb2F0NjQgeTsgZmxvYXQ2NCB6OyBmbG9hdDY0IHc7IH0iOgorICAgICAgICAgICAgICAg
ICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVWZWN0b3IodHlwZVsx
XS5pZCwgdHlwZVsxXS5maWVsZFR5cGVzWzBdLCB0eXBlWzFdLmZpZWxkVHlwZXMubGVuZ3RoKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2
Lm9wcy5UeXBlU3RydWN0KHR5cGVbMV0uaWQsIC4uLnR5cGVbMV0uZmllbGRUeXBlcykpOworICAg
ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBpZiAoIXR5cGVbMV0uZWxl
bWVudFR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVua25v
d24gdHlwZSEiKTsKKyAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBsZXQgZWxlbWVu
dFR5cGUgPSB0eXBlWzFdLmVsZW1lbnRUeXBlOworICAgICAgICAgICAgICAgICAgICBsZXQga2V5
ID0gcmV2ZXJzZVR5cGVNYXAuZ2V0KGVsZW1lbnRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAg
bGV0IHZhbHVlID0gdHlwZU1hcC5nZXQoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAgZG9FbWl0
VHlwZXMoW2tleSwgdmFsdWVdKTsKKworICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBw
ZW5kKG5ldyBzcGlydi5vcHMuVHlwZUFycmF5KHR5cGVbMV0uaWQsIGVsZW1lbnRUeXBlLCB0eXBl
WzFdLm51bUVsZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNl
IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKHR5cGVbMF0ubmFtZSkgeworICAgICAgICAgICAg
ICAgIGNhc2UgInZvaWQiOgorICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5l
dyBzcGlydi5vcHMuVHlwZVZvaWQodHlwZVsxXSkpOworICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBjYXNlICJib29sIjoKKyAgICAgICAgICAgICAgICAgICAgYXNz
ZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVCb29sKHR5cGVbMV0pKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiaW50MzIiOgorICAgICAg
ICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZUludCh0eXBl
WzFdLCAzMiwgMSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBjYXNlICJ1aW50MzIiOgorICAgICAgICAgICAgICAgIGNhc2UgInVpbnQ4IjoKKyAgICAgICAg
ICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVJbnQodHlwZVsx
XSwgMzIsIDApKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
Y2FzZSAiZmxvYXQzMiI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3
IHNwaXJ2Lm9wcy5UeXBlRmxvYXQodHlwZVsxXSwgMzIpKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiZmxvYXQ2NCI6CisgICAgICAgICAgICAgICAg
ICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlRmxvYXQodHlwZVsxXSwgNjQp
KTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAobGV0IHR5cGUgb2YgdHlwZU1hcCkKKyAg
ICAgICAgICAgIGRvRW1pdFR5cGVzKHR5cGUpCisgICAgfQorCisKKworCisKKworCisKKworCisK
KworICAgIGxldCBjb25zdGFudHMgPSBuZXcgTWFwKCk7CisgICAgY2xhc3MgQ29uc3RhbnRGaW5k
ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9k
ZSkKKyAgICAgICAgeworICAgICAgICAgICAgbGV0IHR5cGUgPSBub2RlLnR5cGU7CisgICAgICAg
ICAgICB3aGlsZSAodHlwZSBpbnN0YW5jZW9mIFR5cGVSZWYpCisgICAgICAgICAgICAgICAgdHlw
ZSA9IHR5cGUudHlwZTsKKyAgICAgICAgICAgIGxldCB2YWx1ZXM7CisgICAgICAgICAgICBzd2l0
Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgcHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2w6Cisg
ICAgICAgICAgICAgICAgdmFsdWVzID0gW25vZGUudmFsdWVdOworICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgY2FzZSBwcm9ncmFtLmludHJpbnNpY3MuaW50MzI6CisgICAgICAg
ICAgICBjYXNlIHByb2dyYW0uaW50cmluc2ljcy51aW50MzI6CisgICAgICAgICAgICBjYXNlIHBy
b2dyYW0uaW50cmluc2ljcy51aW50ODoKKyAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbbm9kZS52
YWx1ZV0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgcHJvZ3JhbS5p
bnRyaW5zaWNzLmZsb2F0OiB7CisgICAgICAgICAgICAgICAgbGV0IGFycmF5QnVmZmVyID0gbmV3
IEFycmF5QnVmZmVyKE1hdGgubWF4KFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQpKTsKKyAgICAgICAgICAgICAgICBsZXQgZmxvYXRW
aWV3ID0gbmV3IEZsb2F0MzJBcnJheShhcnJheUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgbGV0
IHVpbnRWaWV3ID0gbmV3IFVpbnQzMkFycmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgICAg
ICBmbG9hdFZpZXdbMF0gPSBub2RlLnZhbHVlOworICAgICAgICAgICAgICAgIHZhbHVlcyA9IHVp
bnRWaWV3OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FzZSBwcm9ncmFtLmludHJpbnNpY3MuZG91YmxlOiB7CisgICAgICAgICAgICAgICAgbGV0
IGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKE1hdGgubWF4KFVpbnQzMkFycmF5LkJZVEVT
X1BFUl9FTEVNRU5ULCBGbG9hdDY0QXJyYXkuQllURVNfUEVSX0VMRU1FTlQpKTsKKyAgICAgICAg
ICAgICAgICBsZXQgZG91YmxlVmlldyA9IG5ldyBGbG9hdDY0QXJyYXkoYXJyYXlCdWZmZXIpOwor
ICAgICAgICAgICAgICAgIGxldCB1aW50VmlldyA9IG5ldyBVaW50MzJBcnJheShhcnJheUJ1ZmZl
cik7CisgICAgICAgICAgICAgICAgZG91YmxlVmlld1swXSA9IG5vZGUudmFsdWU7CisgICAgICAg
ICAgICAgICAgdmFsdWVzID0gdWludFZpZXc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5l
dyBFcnJvcigiVW5yZWNvZ25pemVkIGxpdGVyYWwuIik7CisgICAgICAgICAgICB9CisgICAgICAg
ICAgICBjb25zdGFudHMuc2V0KG5vZGUsIHsgaWQ6IGN1cnJlbnRJZCsrLCB0eXBlSWQ6IHR5cGVN
YXAuZ2V0KHR5cGUpLCB0eXBlOiB0eXBlLCB2YWx1ZXM6IHZhbHVlcyB9KTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICBmb3IgKGxldCBlbnRyeVBvaW50IG9mIGVudHJ5UG9pbnRzKQorICAgICAgICBl
bnRyeVBvaW50LnNoYWRlci52aXNpdChuZXcgQ29uc3RhbnRGaW5kZXIoKSk7CisKKworCisKKwor
CisKKworCisKKworCisgICAgbGV0IGFzc2VtYmxlciA9IG5ldyBTUElSVkFzc2VtYmxlcigpOwor
ICAgIC8vIDEuIEFsbCBPcENhcGFiaWxpdHkgaW5zdHJ1Y3Rpb25zCisgICAgYXNzZW1ibGVyLmFw
cGVuZChuZXcgc3BpcnYub3BzLkNhcGFiaWxpdHkoc3BpcnYua2luZHMuQ2FwYWJpbGl0eS5TaGFk
ZXIpKTsKKyAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuQ2FwYWJpbGl0eShzcGly
di5raW5kcy5DYXBhYmlsaXR5LkZsb2F0NjQpKTsKKyAgICAvLyAyLiBPcHRpb25hbCBPcEV4dGVu
c2lvbiBpbnN0cnVjdGlvbnMKKyAgICAvLyAzLiBPcHRpb25hbCBPcEV4dEluc3RJbXBvcnQgaW5z
dHJ1Y3Rpb25zCisgICAgLy8gNC4gVGhlIHNpbmdsZSByZXF1aXJlZCBPcE1lbW9yeU1vZGVsIGlu
c3RydWN0aW9uCisgICAgLy8gRklYTUU6IEZpZ3VyZSBvdXQgaWYgd2UgY2FuIHVzZSB0aGUgU2lt
cGxlIG1lbW9yeSBtb2RlbCBpbnN0ZWFkIG9mIHRoZSBHTFNMIG1lbW9yeSBtb2RlbC4KKyAgICAv
LyBUaGUgc3BlYyBzYXlzIG5vdGhpbmcgYWJvdXQgd2hhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVu
IHRoZW0gaXMuIPCfkq8KKyAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuTWVtb3J5
TW9kZWwoc3BpcnYua2luZHMuQWRkcmVzc2luZ01vZGVsLkxvZ2ljYWwsIHNwaXJ2LmtpbmRzLk1l
bW9yeU1vZGVsLkdMU0w0NTApKTsKKworICAgIC8vIDUuIEFsbCBlbnRyeSBwb2ludCBkZWNsYXJh
dGlvbnMKKyAgICBmb3IgKGxldCBlbnRyeVBvaW50IG9mIGVudHJ5UG9pbnRzKSB7CisgICAgICAg
IGxldCBleGVjdXRpb25Nb2RlbDsKKyAgICAgICAgc3dpdGNoIChlbnRyeVBvaW50LnNoYWRlci5z
aGFkZXJUeXBlKSB7CisgICAgICAgIGNhc2UgInZlcnRleCI6CisgICAgICAgICAgICBleGVjdXRp
b25Nb2RlbCA9IHNwaXJ2LmtpbmRzLkV4ZWN1dGlvbk1vZGVsLlZlcnRleDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlICJmcmFnbWVudCI6CisgICAgICAgICAgICBleGVjdXRpb25N
b2RlbCA9IHNwaXJ2LmtpbmRzLkV4ZWN1dGlvbk1vZGVsLkZyYWdtZW50OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgbGV0IGlkID0gZW50cnlQb2ludC5pZDsKKyAgICAg
ICAgbGV0IG5hbWUgPSBlbnRyeVBvaW50LnNoYWRlci5uYW1lOworICAgICAgICBsZXQgaW50ZXJm
YWNlSWRzID0gW10KKyAgICAgICAgZm9yIChsZXQgdmFsdWUgb2YgZW50cnlQb2ludC5pbnB1dHMp
CisgICAgICAgICAgICBpbnRlcmZhY2VJZHMucHVzaCh2YWx1ZS5pZCk7CisgICAgICAgIGZvciAo
bGV0IHZhbHVlIG9mIGVudHJ5UG9pbnQub3V0cHV0cykKKyAgICAgICAgICAgIGludGVyZmFjZUlk
cy5wdXNoKHZhbHVlLmlkKTsKKyAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3Bz
LkVudHJ5UG9pbnQoZXhlY3V0aW9uTW9kZWwsIGlkLCBuYW1lLCAuLi5pbnRlcmZhY2VJZHMpKTsK
KyAgICB9CisKKyAgICAvLyA2LiBBbGwgZXhlY3V0aW9uIG1vZGUgZGVjbGFyYXRpb25zCisgICAg
Zm9yIChsZXQgZW50cnlQb2ludCBvZiBlbnRyeVBvaW50cykgeworICAgICAgICBsZXQgaWQgPSBl
bnRyeVBvaW50LmlkOworICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRXhl
Y3V0aW9uTW9kZShpZCwgc3BpcnYua2luZHMuRXhlY3V0aW9uTW9kZS5PcmlnaW5Mb3dlckxlZnQp
KTsKKyAgICB9CisKKyAgICAvLyA3LiBUaGVzZSBkZWJ1ZyBpbnN0cnVjdGlvbnMKKyAgICAvLyA4
LiBBbGwgYW5ub3RhdGlvbiBpbnN0cnVjdGlvbnMKKyAgICAvLyBGSVhNRTogaW5jbHVkZSBhbm5v
dGF0aW9uIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgYmluZGluZyBudW1iZXIsIGRlc2NyaXB0b3Ig
c2V0IG51bWJlciwgbG9jYXRpb24gbnVtYmVyLCBldGMuCisKKyAgICAvLyA5LiBBbGwgdHlwZSBk
ZWNsYXJhdGlvbnMsIGFsbCBjb25zdGFudCBpbnN0cnVjdGlvbnMsIGFuZCBhbGwgZ2xvYmFsIHZh
cmlhYmxlIGRlY2xhcmF0aW9ucworICAgIGVtaXRUeXBlcyhhc3NlbWJsZXIpOworICAgIGxldCBm
dW5jdGlvblR5cGUgPSBjdXJyZW50SWQrKzsKKyAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGly
di5vcHMuVHlwZUZ1bmN0aW9uKGZ1bmN0aW9uVHlwZSwgdHlwZU1hcC5nZXQocHJvZ3JhbS5pbnRy
aW5zaWNzLnZvaWQpKSk7CisgICAgZm9yIChsZXQgY29uc3RhbnQgb2YgY29uc3RhbnRzKSB7Cisg
ICAgICAgIGlmIChjb25zdGFudFsxXS50eXBlID09IHByb2dyYW0uaW50cmluc2ljcy5ib29sKSB7
CisgICAgICAgICAgICBpZiAoY29uc3RhbnRbMV0udmFsdWVbMF0pCisgICAgICAgICAgICAgICAg
YXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkNvbnN0YW50VHJ1ZShjb25zdGFudFsxXS5p
ZCkpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQo
bmV3IHNwaXJ2Lm9wcy5Db25zdGFudEZhbHNlKGNvbnN0YW50WzFdLmlkKSk7CisgICAgICAgIH0g
ZWxzZQorICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkNvbnN0YW50
KGNvbnN0YW50WzFdLnR5cGVJZCwgY29uc3RhbnRbMV0uaWQsIC4uLmNvbnN0YW50WzFdLnZhbHVl
cykpOworICAgIH0KKyAgICBmb3IgKGxldCBlbnRyeVBvaW50IG9mIGVudHJ5UG9pbnRzKSB7Cisg
ICAgICAgIGZvciAobGV0IGlucHV0IG9mIGVudHJ5UG9pbnQuaW5wdXRzKQorICAgICAgICAgICAg
YXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlZhcmlhYmxlKGlucHV0LnR5cGUsIGlucHV0
LmlkLCBzcGlydi5raW5kcy5TdG9yYWdlQ2xhc3MuSW5wdXQpKTsKKyAgICAgICAgZm9yIChsZXQg
b3V0cHV0IG9mIGVudHJ5UG9pbnQub3V0cHV0cykKKyAgICAgICAgICAgIGFzc2VtYmxlci5hcHBl
bmQobmV3IHNwaXJ2Lm9wcy5WYXJpYWJsZShvdXRwdXQudHlwZSwgb3V0cHV0LmlkLCBzcGlydi5r
aW5kcy5TdG9yYWdlQ2xhc3MuT3V0cHV0KSk7CisgICAgfQorCisgICAgLy8gMTAuIEFsbCBmdW5j
dGlvbiBkZWNsYXJhdGlvbnMKKyAgICAvLyAxMS4gQWxsIGZ1bmN0aW9uIGRlZmluaXRpb25zCisg
ICAgZm9yIChsZXQgZW50cnlQb2ludCBvZiBlbnRyeVBvaW50cykgeworICAgICAgICBhc3NlbWJs
ZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRnVuY3Rpb24odHlwZU1hcC5nZXQocHJvZ3JhbS5pbnRy
aW5zaWNzLnZvaWQpLCBlbnRyeVBvaW50LmlkLCBbc3BpcnYua2luZHMuRnVuY3Rpb25Db250cm9s
Lk5vbmVdLCBmdW5jdGlvblR5cGUpKTsKKyAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3Bp
cnYub3BzLkZ1bmN0aW9uRW5kKCkpOworICAgIH0KKworICAgIHJldHVybiBhc3NlbWJsZXIucmVz
dWx0OworfQorCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElS
VlR5cGVBbmFseXplci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWVHlw
ZUFuYWx5emVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMTIzNzQ0NWRkMzg4NDQyN2M0NjM0MzhlMTRhNDA4
YTJmODdhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TUElSVlR5cGVBbmFseXplci5qcwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBTUElS
VlR5cGVBbmFseXplciBleHRlbmRzIFZpc2l0b3IgeworICAgIGNvbnN0cnVjdG9yKHByb2dyYW0s
IHR5cGVNYXAsIGN1cnJlbnRJZCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAgICAgIHRo
aXMuX3Byb2dyYW0gPSBwcm9ncmFtOworICAgICAgICB0aGlzLl90eXBlTWFwID0gdHlwZU1hcDsK
KyAgICAgICAgdGhpcy5fY3VycmVudElkID0gY3VycmVudElkOworICAgICAgICB0aGlzLl9zdGFj
ayA9IFtdOworICAgIH0KKworICAgIGdldCBwcm9ncmFtKCkKKyAgICB7CisgICAgICAgIHRoaXMu
X3Byb2dyYW07CisgICAgfQorCisgICAgZ2V0IHR5cGVNYXAoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3R5cGVNYXA7CisgICAgfQorCisgICAgZ2V0IGN1cnJlbnRJZCgpCisgICAgewor
ICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudElkOworICAgIH0KKworICAgIGdldCBzdGFjaygp
CisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2s7CisgICAgfQorCisgICAgdmlzaXRU
eXBlUmVmKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAg
fQorCisgICAgX2VuY291bnRlclR5cGUoaWQpCisgICAgeworICAgICAgICBpZiAodGhpcy5zdGFj
ay5sZW5ndGggPiAwKQorICAgICAgICAgICAgdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAt
IDFdLnB1c2goaWQpOworICAgIH0KKworICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKKyAgICB7Cisg
ICAgICAgIHN1cGVyLnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY0xpdGVy
YWxUeXBlKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7CisgICAg
fQorCisgICAgdmlzaXROYXRpdmVUeXBlKG5vZGUpCisgICAgeworICAgICAgICBpZiAoIXRoaXMu
dHlwZU1hcC5oYXMobm9kZSkpCisgICAgICAgICAgICB0aGlzLnR5cGVNYXAuc2V0KG5vZGUsIHRo
aXMuX2N1cnJlbnRJZCsrKTsKKyAgICAgICAgbGV0IGlkID0gdGhpcy50eXBlTWFwLmdldChub2Rl
KTsKKyAgICAgICAgdGhpcy5fZW5jb3VudGVyVHlwZShpZCk7CisgICAgfQorCisgICAgdmlzaXRF
bnVtVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXQodGhpcyk7CisgICAgfQor
CisgICAgdmlzaXRQdHJUeXBlKG5vZGUpCisgICAgeworICAgICAgICAvLyBJbnRlbnRpb25hbGx5
IGJsYW5rCisgICAgfQorCisgICAgdmlzaXRBcnJheVJlZlR5cGUobm9kZSkKKyAgICB7CisgICAg
ICAgIHRoaXMudmlzaXROYXRpdmVUeXBlKHByb2dyYW0uaW50cmluc2ljcy51aW50MzIpOworICAg
ICAgICB0aGlzLnZpc2l0TmF0aXZlVHlwZShwcm9ncmFtLmludHJpbnNpY3MudWludDMyKTsKKyAg
ICB9CisKKyAgICAvLyBGSVhNRTogVXNpbmcgdG9TdHJpbmcoKSBpbiB0aGVzZSBmdW5jdGlvbnMg
aXMgYSBoYWNrLiBJbnN0ZWFkLCB3ZSBzaG91bGQgaW1wbGVtZW50IGEgcHJvcGVyIHR5cGUgZGVk
dXBlci4KKyAgICB2aXNpdEFycmF5VHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGlkOwor
ICAgICAgICBpZiAodGhpcy50eXBlTWFwLmhhcyhub2RlLnRvU3RyaW5nKCkpKSB7CisgICAgICAg
ICAgICBpZCA9IHRoaXMudHlwZU1hcC5nZXQobm9kZSk7CisgICAgICAgICAgICBpZiAodHlwZW9m
IGlkID09ICJvYmplY3QiKQorICAgICAgICAgICAgICAgIGlkID0gaWQuaWQ7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBsZXQgZmllbGRUeXBlID0gW107CisgICAgICAgICAgICB0aGlz
LnN0YWNrLnB1c2goZmllbGRUeXBlKTsKKyAgICAgICAgICAgIG5vZGUuZWxlbWVudFR5cGUudmlz
aXQodGhpcyk7CisgICAgICAgICAgICB0aGlzLnN0YWNrLnBvcCgpOworICAgICAgICAgICAgaWYg
KGZpZWxkVHlwZS5sZW5ndGggIT0gMSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
IkFycmF5cyBjYW4gb25seSBoYXZlIG9uZSBlbGVtZW50IHR5cGUhIik7CisgICAgICAgICAgICBp
ZCA9IHRoaXMuX2N1cnJlbnRJZCsrOworICAgICAgICAgICAgbm9kZS5udW1FbGVtZW50cy52aXNp
dCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMudHlwZU1hcC5zZXQobm9kZS50b1N0cmluZygpLCB7
aWQ6IGlkLCBlbGVtZW50VHlwZTogZmllbGRUeXBlWzBdLCBudW1FbGVtZW50czogbm9kZS5udW1F
bGVtZW50cy52YWx1ZX0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuY291bnRlclR5cGUo
aWQpOworICAgIH0KKworICAgIHZpc2l0U3RydWN0VHlwZShub2RlKQorICAgIHsKKyAgICAgICAg
bGV0IGlkOworICAgICAgICBpZiAodGhpcy50eXBlTWFwLmhhcyhub2RlLnRvU3RyaW5nKCkpKSB7
CisgICAgICAgICAgICBpZCA9IHRoaXMudHlwZU1hcC5nZXQobm9kZS50b1N0cmluZygpKTsKKyAg
ICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT0gIm9iamVjdCIpCisgICAgICAgICAgICAgICAgaWQg
PSBpZC5pZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxldCBmaWVsZFR5cGVzID0g
W107CisgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmllbGRUeXBlcyk7CisgICAgICAgICAg
ICBmb3IgKGxldCBmaWVsZCBvZiBub2RlLmZpZWxkcykKKyAgICAgICAgICAgICAgICBmaWVsZC52
aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7CisgICAgICAgICAgICBp
ZCA9IHRoaXMuX2N1cnJlbnRJZCsrOworICAgICAgICAgICAgdGhpcy50eXBlTWFwLnNldChub2Rl
LnRvU3RyaW5nKCksIHtpZDogaWQsIGZpZWxkVHlwZXM6IGZpZWxkVHlwZXN9KTsKKyAgICAgICAg
fQorICAgICAgICB0aGlzLl9lbmNvdW50ZXJUeXBlKGlkKTsKKyAgICB9Cit9CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVlZhcmlhYmxlQW5hbHl6ZXIuanMg
Yi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVlZhcmlhYmxlQW5hbHl6ZXIuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMTY1NTYzZjkzMWM2NTBhNDMyZWQyZjhiZDExMGZiNjc0ZTBiNTY0YwotLS0g
L2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWVmFyaWFi
bGVBbmFseXplci5qcwpAQCAtMCwwICsxLDE0OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBTUElSVlByaW1pdGl2
ZVZhcmlhYmxlQW5hbHl6ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBjb25zdHJ1Y3Rvcihwcm9n
cmFtLCB0eXBlTWFwLCBjdXJyZW50SWQsIHN0YXJ0TmFtZSkKKyAgICB7CisgICAgICAgIHN1cGVy
KCk7CisgICAgICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtOworICAgICAgICB0aGlzLl90eXBl
TWFwID0gdHlwZU1hcDsKKyAgICAgICAgdGhpcy5fY3VycmVudElkID0gY3VycmVudElkOworICAg
ICAgICB0aGlzLl9uYW1lQ29tcG9uZW50cyA9IFtdOworICAgICAgICBpZiAoc3RhcnROYW1lKQor
ICAgICAgICAgICAgdGhpcy5fbmFtZUNvbXBvbmVudHMucHVzaChzdGFydE5hbWUpOworICAgICAg
ICB0aGlzLl9yZXN1bHQgPSBbXTsKKyAgICB9CisKKyAgICBnZXQgcHJvZ3JhbSgpCisgICAgewor
ICAgICAgICB0aGlzLl9wcm9ncmFtOworICAgIH0KKworICAgIGdldCB0eXBlTWFwKCkKKyAgICB7
CisgICAgICAgIHJldHVybiB0aGlzLl90eXBlTWFwOworICAgIH0KKworICAgIGdldCBjdXJyZW50
SWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRJZDsKKyAgICB9CisKKyAg
ICBnZXQgbmFtZUNvbXBvbmVudHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX25hbWVD
b21wb25lbnRzOworICAgIH0KKworICAgIGdldCByZXN1bHQoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHRoaXMuX3Jlc3VsdDsKKyAgICB9CisKKyAgICB2aXNpdFR5cGVSZWYobm9kZSkKKyAgICB7
CisgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXNpdE51bGxU
eXBlKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdCh0aGlzKTsKKyAgICB9CisKKyAg
ICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS50eXBl
LnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IEVtaXQgdGhpbmdzIGxpa2UgYmluZGluZyBudW1iZXIsIGRlc2Ny
aXB0b3Igc2V0IG51bWJlciwgbG9jYXRpb24gbnVtYmVyLCBldGMuCisgICAgICAgIHRoaXMucmVz
dWx0LnB1c2goe25hbWU6IHRoaXMubmFtZUNvbXBvbmVudHMuam9pbigiIiksIGlkOiB0aGlzLl9j
dXJyZW50SWQrKywgdHlwZTogdGhpcy50eXBlTWFwLmdldChub2RlKX0pOworICAgIH0KKworICAg
IHZpc2l0RW51bVR5cGUobm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVyLnZpc2l0KHRoaXMpOwor
ICAgIH0KKworICAgIHZpc2l0UHRyVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgLy8gSW50ZW50
aW9uYWxseSBibGFuaworICAgIH0KKworICAgIHZpc2l0QXJyYXlSZWZUeXBlKG5vZGUpCisgICAg
eworICAgICAgICB0aGlzLnZpc2l0TmF0aXZlVHlwZShwcm9ncmFtLmludHJpbnNpY3MudWludDMy
KTsKKyAgICAgICAgdGhpcy52aXNpdE5hdGl2ZVR5cGUocHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQz
Mik7CisgICAgfQorCisgICAgdmlzaXRBcnJheVR5cGUobm9kZSkKKyAgICB7CisgICAgICAgIGZv
ciAobGV0IGkgPSAwOyBpIDwgbm9kZS5udW1FbGVtZW50cy52YWx1ZTsgKytpKSB7CisgICAgICAg
ICAgICB0aGlzLm5hbWVDb21wb25lbnRzLnB1c2goIlsiKTsKKyAgICAgICAgICAgIHRoaXMubmFt
ZUNvbXBvbmVudHMucHVzaChpLnRvU3RyaW5nKCkpOworICAgICAgICAgICAgdGhpcy5uYW1lQ29t
cG9uZW50cy5wdXNoKCJdIik7CisgICAgICAgICAgICBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRo
aXMpOworICAgICAgICAgICAgdGhpcy5uYW1lQ29tcG9uZW50cy5wb3AoKTsKKyAgICAgICAgICAg
IHRoaXMubmFtZUNvbXBvbmVudHMucG9wKCk7CisgICAgICAgICAgICB0aGlzLm5hbWVDb21wb25l
bnRzLnBvcCgpOworICAgICAgICB9CisgICAgfQorCisgICAgdmlzaXRTdHJ1Y3RUeXBlKG5vZGUp
CisgICAgeworICAgICAgICBsZXQgYnVpbHRJblN0cnVjdHMgPSBbCisgICAgICAgICAgICAic3Ry
dWN0IHZlYzI8PiB7IGludDMyIHg7IGludDMyIHkgfSIsCisgICAgICAgICAgICAic3RydWN0IHZl
YzI8PiB7IHVpbnQzMiB4OyB1aW50MzIgeTsgfSIsCisgICAgICAgICAgICAic3RydWN0IHZlYzI8
PiB7IGZsb2F0MzIgeDsgZmxvYXQzMiB5OyB9IiwKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVjMjw+
IHsgZmxvYXQ2NCB4OyBmbG9hdDY0IHk7IH0iLAorICAgICAgICAgICAgInN0cnVjdCB2ZWMzPD4g
eyBpbnQzMiB4OyBpbnQzMiB5OyBpbnQzMiB6OyB9IiwKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVj
Mzw+IHsgdWludDMyIHg7IHVpbnQzMiB5OyB1aW50MzIgejsgfSIsCisgICAgICAgICAgICAic3Ry
dWN0IHZlYzM8PiB7IGZsb2F0MzIgeDsgZmxvYXQzMiB5OyBmbG9hdDMyIHo7IH0iLAorICAgICAg
ICAgICAgInN0cnVjdCB2ZWMzPD4geyBmbG9hdDY0IHg7IGZsb2F0NjQgeTsgZmxvYXQ2NCB6OyB9
IiwKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVjNDw+IHsgaW50MzIgeDsgaW50MzIgeTsgaW50MzIg
ejsgaW50MzIgdzsgfSIsCisgICAgICAgICAgICAic3RydWN0IHZlYzQ8PiB7IHVpbnQzMiB4OyB1
aW50MzIgeTsgdWludDMyIHo7IHVpbnQzMiB3OyB9IiwKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVj
NDw+IHsgZmxvYXQzMiB4OyBmbG9hdDMyIHk7IGZsb2F0MzIgejsgZmxvYXQzMiB3OyB9IiwKKyAg
ICAgICAgICAgICJzdHJ1Y3QgdmVjNDw+IHsgZmxvYXQ2NCB4OyBmbG9hdDY0IHk7IGZsb2F0NjQg
ejsgZmxvYXQ2NCB3OyB9IgorICAgICAgICBdOworICAgICAgICBmb3IgKGxldCBidWlsdEluU3Ry
dWN0IG9mIGJ1aWx0SW5TdHJ1Y3RzKSB7CisgICAgICAgICAgICBpZiAobm9kZS50b1N0cmluZygp
ID09IGJ1aWx0SW5TdHJ1Y3QpIHsKKyAgICAgICAgICAgICAgICB0aGlzLnJlc3VsdC5wdXNoKHsg
bmFtZTogdGhpcy5uYW1lQ29tcG9uZW50cy5qb2luKCIiKSwgaWQ6IHRoaXMuX2N1cnJlbnRJZCsr
LCB0eXBlOiB0aGlzLnR5cGVNYXAuZ2V0KG5vZGUudG9TdHJpbmcoKSkuaWQgfSk7CisgICAgICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGZvciAo
bGV0IGZpZWxkIG9mIG5vZGUuZmllbGRzKSB7CisgICAgICAgICAgICBsZXQgZG90UHJlZml4ID0g
dGhpcy5uYW1lQ29tcG9uZW50cy5sZW5ndGggPiAwOworICAgICAgICAgICAgaWYgKGRvdFByZWZp
eCkKKyAgICAgICAgICAgICAgICB0aGlzLm5hbWVDb21wb25lbnRzLnB1c2goIi4iKTsKKyAgICAg
ICAgICAgIHRoaXMubmFtZUNvbXBvbmVudHMucHVzaChmaWVsZC5uYW1lKTsKKyAgICAgICAgICAg
IGZpZWxkLnZpc2l0KHRoaXMpOworICAgICAgICAgICAgdGhpcy5uYW1lQ29tcG9uZW50cy5wb3Ao
KTsKKyAgICAgICAgICAgIGlmIChkb3RQcmVmaXgpCisgICAgICAgICAgICAgICAgdGhpcy5uYW1l
Q29tcG9uZW50cy5wb3AoKTsKKyAgICAgICAgfQorICAgIH0KK30KZGlmZiAtLWdpdCBhL1Rvb2xz
L1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1dTTC5tZCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1dTTC5tZAppbmRleCA3YzYyNjI5ZDU4MGQ2YWMyZDgyODQ0YWFkOGRlZWE2NTBkYWI0
MTQwLi5kM2I2NjU2NzgyNmE1MWRkNmM3NTRkNGU5YjI0ZDc1Nzg5NzJiYjNkIDEwMDY0NAotLS0g
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU0wubWQKKysrIGIvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvV1NMLm1kCkBAIC00NzMsNyArNDczLDcgQEAgV1NMIGlzIGEgdHlw
ZS1zYWZlIGxhbmd1YWdlIGJhc2VkIG9uIEMgc3ludGF4LiBJdCBlbGltaW5hdGVzIHNvbWUgQyBm
ZWF0dXJlcywgbGkKIFRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBsaW1pdGF0aW9ucyBtYXkgYmUg
cGxhY2VkIG9uIGEgV1NMIHByb2dyYW06CiAKIC0gYGRldmljZWAsIGBjb25zdGFudGAsIGFuZCBg
dGhyZWFkZ3JvdXBgIHBvaW50ZXJzIGNhbm5vdCBwb2ludCB0byBkYXRhIHRoYXQgbWF5IGhhdmUg
cG9pbnRlcnMgaW4gaXQuIFRoaXMgc2FmZXR5IGNoZWNrIGlzIG5vdCBkb25lIGFzIHBhcnQgb2Yg
dGhlIG5vcm1hbCB0eXBlIHN5c3RlbSBjaGVja3MuIEl0J3MgcGVyZm9ybWVkIG9ubHkgYWZ0ZXIg
aW5zdGFudGlhdGlvbi4KLS0gUG9pbnRlcnMgYW5kIGFycmF5IHJlZmVyZW5jZXMgKGNvbGxlY3Rp
dmVseSwgKnJlZmVyZW5jZXMqKSBtYXkgYmUgcmVzdHJpY3RlZCB0byBzdXBwb3J0IGNvbXBpbGlu
ZyB0byBTUElSLVYgKmxvZ2ljYWwgbW9kZSouIEluIHRoaXMgbW9kZSwgcmVmZXJlbmNlcyBtYXkg
bmV2ZXIgcG9pbnQgdG8gZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgaGF2ZSByZWZlcmVuY2VzIGluIHRo
ZW0uIFJlZmVyZW5jZXMgbXVzdCBiZSBpbml0aWFsaXplZCB1cG9uIGRlY2xhcmF0aW9uIGFuZCBu
ZXZlciByZWFzc2lnbmVkLiBGdW5jdGlvbnMgdGhhdCByZXR1cm4gcmVmZXJlbmNlcyBtdXN0IGhh
dmUgb25lIHJldHVybiBwb2ludC4gVGVybmFyeSBleHByZXNzaW9ucyBtYXkgbm90IHJldHVybiBy
ZWZlcmVuY2VzLgorLSBQb2ludGVycyBhbmQgYXJyYXkgcmVmZXJlbmNlcyAoY29sbGVjdGl2ZWx5
LCAqcmVmZXJlbmNlcyopIG1heSBiZSByZXN0cmljdGVkIHRvIHN1cHBvcnQgY29tcGlsaW5nIHRv
IFNQSVItViAqbG9naWNhbCBtb2RlKi4gSW4gdGhpcyBtb2RlLCBhcnJheXMgbXVzdCBub3QgdHJh
bnNpdGl2ZWx5IGhvbGQgcmVmZXJlbmNlcy4gUmVmZXJlbmNlcyBtdXN0IGJlIGluaXRpYWxpemVk
IHVwb24gZGVjbGFyYXRpb24gYW5kIG5ldmVyIHJlYXNzaWduZWQuIEZ1bmN0aW9ucyB0aGF0IHJl
dHVybiByZWZlcmVuY2VzIG11c3QgaGF2ZSBvbmUgcmV0dXJuIHBvaW50LiBUZXJuYXJ5IGV4cHJl
c3Npb25zIG1heSBub3QgcmV0dXJuIHJlZmVyZW5jZXMuCiAtIEdyYXBoaWNzIGVudHJ5IHBvaW50
cyBtdXN0IHRyYW5zaXRpdmVseSBuZXZlciByZWZlciB0byB0aGUgYHRocmVhZGdyb3VwYCBtZW1v
cnkgc3BhY2UuCiAKIApkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkv
aW5kZXguaHRtbCBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKaW5k
ZXggYTk2OTdmZTA3ODIxMjhlYTBkZWEwMTVkMzcyZDBmMjBkMWQ4MzQyYy4uM2E3ZTk0OGJlNjdk
MGI1YzA1YmIxOWMyZWYxNDMwOWExMTk3MzhlNCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hh
ZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3Vh
Z2VSSS9pbmRleC5odG1sCkBAIC0zMDAsOCArMzAwLDggQEAgZnVuY3Rpb24gZG9Db21waWxlUHJl
c2VudFNoYWRlclNvdXJjZSgpIHsKICAgICBwcm9ncmFtID0gcmVzdWx0OwogICAgIGF2YWlsYWJs
ZVZlcnRleFNoYWRlcnMgPSBbXTsKICAgICBhdmFpbGFibGVGcmFnbWVudFNoYWRlcnMgPSBbXTsK
LSAgICBmb3IgKGZ1bmN0aW9uTmFtZXMgb2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsK
LSAgICAgICAgZm9yIChmdW5jIG9mIGZ1bmN0aW9uTmFtZXMpIHsKKyAgICBmb3IgKGxldCBmdW5j
dGlvbk5hbWVzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7CisgICAgICAgIGZvciAo
bGV0IGZ1bmMgb2YgZnVuY3Rpb25OYW1lcykgewogICAgICAgICAgICAgaWYgKGZ1bmMuc2hhZGVy
VHlwZSA9PSAidmVydGV4IikKICAgICAgICAgICAgICAgICBhdmFpbGFibGVWZXJ0ZXhTaGFkZXJz
LnB1c2goZnVuYyk7CiAgICAgICAgICAgICBpZiAoZnVuYy5zaGFkZXJUeXBlID09ICJmcmFnbWVu
dCIpCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323065</attachid>
            <date>2017-10-06 16:49:48 -0700</date>
            <delta_ts>2017-10-07 19:55:49 -0700</delta_ts>
            <desc>WIP</desc>
            <filename>bug-177998-20171006164948.patch</filename>
            <type>text/plain</type>
            <size>43175</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMDEwCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGI4ZDc1N2NkYmRhOWRlMzlhN2ZkODVhMjhhOTBmMjlh
ODVmNjJmZC4uODRmOWJkMWI2OTBlZmUyODQwNGM2OTQ0MTZhYmQ0ZjZlMmI0NWRiYiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYw
IEBACisyMDE3LTEwLTA2ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgRW1pdCBTUElSLVYgZnJvbSBXU0wgY29tcGlsZXIKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzk5OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvTGF0ZUNoZWNrZXIuanM6CisgICAgICAgIChMYXRlQ2hlY2tlci5wcm90b3R5cGUuX2NoZWNr
U2hhZGVyVHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUi1WLmpz
OgorICAgICAgICAoU1BJUlYuT3BlcmFuZENoZWNrZXIucHJvdG90eXBlLl9pc1N0YXIpOgorICAg
ICAgICAoU1BJUlYuT3BlcmFuZENoZWNrZXIucHJvdG90eXBlLm5leHRDb21wYXJpc29uVHlwZSk6
CisgICAgICAgIChTUElSVi5PcGVyYW5kQ2hlY2tlci5wcm90b3R5cGUuZmluYWxpemUpOgorICAg
ICAgICAoU1BJUlYuT3BlcmFuZENoZWNrZXIpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1NQSVJWLmh0bWw6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJ
UlZDb2RlZ2VuLmpzOiBBZGRlZC4KKyAgICAgICAgKGZpbmRFbnRyeVBvaW50cyk6CisgICAgICAg
IChlbWl0VHlwZXMuZG9FbWl0VHlwZXMpOgorICAgICAgICAoZW1pdFR5cGVzKToKKyAgICAgICAg
KENvbnN0YW50RmluZGVyLnByb3RvdHlwZS52aXNpdEdlbmVyaWNMaXRlcmFsVHlwZSk6CisgICAg
ICAgIChDb25zdGFudEZpbmRlcik6CisgICAgICAgIChnZW5lcmF0ZVNQSVJWKToKKyAgICAgICAg
KiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVlR5cGVBbmFseXplci5qczogQWRkZWQuCisg
ICAgICAgIChTUElSVlR5cGVBbmFseXplcik6CisgICAgICAgIChTUElSVlR5cGVBbmFseXplci5w
cm90b3R5cGUuZ2V0IHByb2dyYW0pOgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90
eXBlLmdldCB0eXBlTWFwKToKKyAgICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS5n
ZXQgY3VycmVudElkKToKKyAgICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS5nZXQg
c3RhY2spOgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJl
Zik6CisgICAgICAgIChTUElSVlR5cGVBbmFseXplci5wcm90b3R5cGUuX2VuY291bnRlclR5cGUp
OgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0TnVsbFR5cGUpOgor
ICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0R2VuZXJpY0xpdGVyYWxU
eXBlKToKKyAgICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdE5hdGl2ZVR5
cGUpOgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0RW51bVR5cGUp
OgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0UHRyVHlwZSk6Cisg
ICAgICAgIChTUElSVlR5cGVBbmFseXplci5wcm90b3R5cGUudmlzaXRBcnJheVJlZlR5cGUpOgor
ICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0QXJyYXlUeXBlKToKKyAg
ICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdFN0cnVjdFR5cGUpOgorICAg
ICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWVmFyaWFibGVBbmFseXplci5qczog
QWRkZWQuCisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIpOgorICAgICAg
ICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS5nZXQgcHJvZ3JhbSk6
CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLmdldCB0
eXBlTWFwKToKKyAgICAgICAgKFNQSVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5
cGUuZ2V0IGN1cnJlbnRJZCk6CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6
ZXIucHJvdG90eXBlLmdldCBuYW1lQ29tcG9uZW50cyk6CisgICAgICAgIChTUElSVlByaW1pdGl2
ZVZhcmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLmdldCByZXN1bHQpOgorICAgICAgICAoU1BJUlZQ
cmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOgorICAgICAg
ICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdE51bGxUeXBl
KToKKyAgICAgICAgKFNQSVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5cGUudmlz
aXRHZW5lcmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFu
YWx5emVyLnByb3RvdHlwZS52aXNpdE5hdGl2ZVR5cGUpOgorICAgICAgICAoU1BJUlZQcmltaXRp
dmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdEVudW1UeXBlKToKKyAgICAgICAgKFNQ
SVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5cGUudmlzaXRQdHJUeXBlKToKKyAg
ICAgICAgKFNQSVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5cGUudmlzaXRBcnJh
eVJlZlR5cGUpOgorICAgICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3Rv
dHlwZS52aXNpdEFycmF5VHlwZSk6CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5h
bHl6ZXIucHJvdG90eXBlLnZpc2l0U3RydWN0VHlwZSk6CisgICAgICAgICogV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvV1NMLm1kOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2lu
ZGV4Lmh0bWw6CisKIDIwMTctMTAtMDYgIEFsZXggQ2hyaXN0ZW5zZW4gIDxhY2hyaXN0ZW5zZW5A
d2Via2l0Lm9yZz4KIAogICAgICAgICBBZGQgbW9yZSBpbmZyYXN0cnVjdHVyZSB0byBhcHBseSBj
dXN0b20gaGVhZGVyIGZpZWxkcyB0byBzYW1lLW9yaWdpbiByZXF1ZXN0cwpkaWZmIC0tZ2l0IGEv
VG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGF0ZUNoZWNrZXIuanMgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tlci5qcwppbmRleCA4MTQwYTIyZjViZTRlZmJl
MWYyMGVkNDk5ODA4ZDUzYjdhOTI5ZDk3Li41ZDFlZjk1YTIzMDJiMmQ2ZmRiOWUwMzBlYWIzMmU2
YTcwZDc2NmRlIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MYXRl
Q2hlY2tlci5qcworKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9MYXRlQ2hlY2tl
ci5qcwpAQCAtMzYsNiArMzYsNyBAQCBjbGFzcyBMYXRlQ2hlY2tlciBleHRlbmRzIFZpc2l0b3Ig
ewogICAgIAogICAgIF9jaGVja1NoYWRlclR5cGUobm9kZSkKICAgICB7CisgICAgICAgIC8vIEZJ
WE1FOiBUaWdodGVuIHRoZXNlIGNoZWNrcy4gRm9yIG5vdywgd2Ugc2hvdWxkIG9ubHkgYWNjZXB0
IGludDMyLCB1aW50MzIsIGZsb2F0MzIsIGFuZCBmbG9hdDY0LgogICAgICAgICBsZXQgYXNzZXJ0
UHJpbWl0aXZlID0gdHlwZSA9PiB7CiAgICAgICAgICAgICBpZiAoIXR5cGUuaXNQcmltaXRpdmUp
CiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFdUeXBlRXJyb3Iobm9kZS5vcmlnaW4ub3JpZ2lu
U3RyaW5nLCAiU2hhZGVyIHNpZ25hdHVyZSBjYW5ub3QgaW5jbHVkZSBub24tcHJpbWl0aXZlIHR5
cGU6ICIgKyB0eXBlKTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1NQSVItVi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVItVi5qcwppbmRl
eCA4ZmE5M2YyZjhiYTcyMjc3YWI0ZjJiZjcwOGNlZmU2NWVmN2E2OTBiLi44MGNhNzA0NGFiMDY2
ZWI4MzE0NjZjYmYwMjNiNjk0ZmI3OGU4ZWEyIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TUElSLVYuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvU1BJUi1WLmpzCkBAIC0zOCw3ICszOCw3IEBAIGZ1bmN0aW9uIFNQSVJWKGpzb24pIHsKICAg
ICAgICAgc3dpdGNoIChraW5kLmNhdGVnb3J5KSB7CiAgICAgICAgIGNhc2UgIkJpdEVudW0iOgog
ICAgICAgICBjYXNlICJWYWx1ZUVudW0iOgotICAgICAgICAgICAgbGV0IGVudW1lcmFudHMgPSB7
fTsKKyAgICAgICAgICAgIGxldCBlbnVtZXJhbnRzID0geyBjYXRlZ29yeToga2luZC5jYXRlZ29y
eSB9OwogICAgICAgICAgICAgZm9yIChsZXQgZW51bWVyYW50IG9mIGtpbmQuZW51bWVyYW50cykg
ewogICAgICAgICAgICAgICAgIGVudW1lcmFudHNbZW51bWVyYW50LmVudW1lcmFudF0gPSBlbnVt
ZXJhbnQ7CiAgICAgICAgICAgICB9CkBAIC0xMTIsMjAgKzExMiwyNCBAQCBmdW5jdGlvbiBTUElS
Vihqc29uKSB7CiAgICAgICAgICAgICB0aGlzLl9wYXJhbWV0ZXJzID0gW107CiAgICAgICAgIH0K
IAotICAgICAgICBuZXh0Q29tcGFyaXNvblR5cGUob3BlcmFuZCkKKyAgICAgICAgX2lzU3Rhcihv
cGVyYW5kSW5mbykKICAgICAgICAgewotICAgICAgICAgICAgaWYgKHRoaXMuX29wZXJhbmRJbmZv
SW5kZXggPj0gdGhpcy5fb3BlcmFuZEluZm9zLmxlbmd0aCkKLSAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIlNwZWNpZmllZCBvcGVyYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55
IHRoYXQgdGhlIGluc3RydWN0aW9uIGV4cGVjdHMuIik7Ci0gICAgICAgICAgICBsZXQgb3BlcmFu
ZEluZm8gPSB0aGlzLl9vcGVyYW5kSW5mb3NbdGhpcy5fb3BlcmFuZEluZm9JbmRleF07Ci0KLSAg
ICAgICAgICAgIGxldCBpc1N0YXIgPSBvcGVyYW5kSW5mby5xdWFudGlmaWVyICYmIG9wZXJhbmRJ
bmZvLnF1YW50aWZpZXIgPT0gIioiOwogICAgICAgICAgICAgc3dpdGNoIChvcGVyYW5kSW5mby5r
aW5kKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAiTGl0ZXJhbENvbnRleHREZXBlbmRlbnROdW1i
ZXIiOgogICAgICAgICAgICAgICAgIGNhc2UgIkxpdGVyYWxTcGVjQ29uc3RhbnRPcEludGVnZXIi
OgogICAgICAgICAgICAgICAgICAgICAvLyBUaGVzZSB0eXBlcyBjYW4gYmUgYW55IHdpZHRoLgot
ICAgICAgICAgICAgICAgICAgICBpc1N0YXIgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICByZXR1cm4gb3BlcmFuZEluZm8ucXVhbnRpZmllciAmJiBvcGVyYW5kSW5mby5x
dWFudGlmaWVyID09ICIqIjsKKyAgICAgICAgfQorCisgICAgICAgIG5leHRDb21wYXJpc29uVHlw
ZShvcGVyYW5kKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAodGhpcy5fb3BlcmFuZEluZm9J
bmRleCA+PSB0aGlzLl9vcGVyYW5kSW5mb3MubGVuZ3RoKQorICAgICAgICAgICAgICAgIHRocm93
IG5ldyBFcnJvcigiU3BlY2lmaWVkIG9wZXJhbmQgZG9lcyBub3QgY29ycmVzcG9uZCB0byBhbnkg
dGhhdCB0aGUgaW5zdHJ1Y3Rpb24gZXhwZWN0cy4iKTsKKyAgICAgICAgICAgIGxldCBvcGVyYW5k
SW5mbyA9IHRoaXMuX29wZXJhbmRJbmZvc1t0aGlzLl9vcGVyYW5kSW5mb0luZGV4XTsKKworICAg
ICAgICAgICAgbGV0IGlzU3RhciA9IHRoaXMuX2lzU3RhcihvcGVyYW5kSW5mbyk7CiAKICAgICAg
ICAgICAgIGlmICh0aGlzLl9wYXJhbWV0ZXJzLmxlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgICAg
ICAgbGV0IHJlc3VsdCA9IHRoaXMuX3BhcmFtZXRlcnNbMF07CkBAIC0xNzYsOCArMTgwLDkgQEAg
ZnVuY3Rpb24gU1BJUlYoanNvbikgewogICAgICAgICAgICAgaWYgKHRoaXMuX3BhcmFtZXRlcnMu
bGVuZ3RoICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJPcGVyYW5kIG5v
dCBzcGVjaWZpZWQgZm9yIHBhcmFtZXRlci4iKTsKICAgICAgICAgICAgIGZvciAobGV0IGkgPSB0
aGlzLl9vcGVyYW5kSW5mb0luZGV4OyBpIDwgdGhpcy5fb3BlcmFuZEluZm9zLmxlbmd0aDsgKytp
KSB7Ci0gICAgICAgICAgICAgICAgbGV0IHF1YW50aWZpZXIgPSB0aGlzLl9vcGVyYW5kSW5mb3Nb
aV0ucXVhbnRpZmllcjsKLSAgICAgICAgICAgICAgICBpZiAocXVhbnRpZmllciAhPSAiPyIgJiYg
cXVhbnRpZmllciAhPSAiKiIpCisgICAgICAgICAgICAgICAgbGV0IG9wZXJhbmRJbmZvID0gdGhp
cy5fb3BlcmFuZEluZm9zW2ldOworICAgICAgICAgICAgICAgIGxldCBxdWFudGlmaWVyID0gb3Bl
cmFuZEluZm8ucXVhbnRpZmllcjsKKyAgICAgICAgICAgICAgICBpZiAocXVhbnRpZmllciAhPSAi
PyIgJiYgIXRoaXMuX2lzU3RhcihvcGVyYW5kSW5mbykpCiAgICAgICAgICAgICAgICAgICAgIHRo
cm93IG5ldyBFcnJvcigiRGlkIG5vdCBzcGVjaWZ5IG9wZXJhbmQgIiArIGkgKyAiIHRvIGluc3Ry
dWN0aW9uLiIpOwogICAgICAgICAgICAgfQogICAgICAgICB9CkBAIC0xOTAsNyArMTk1LDYgQEAg
ZnVuY3Rpb24gU1BJUlYoanNvbikgewogICAgICAgICByZXN1bHQub3BzW2F0dHJpYnV0ZU5hbWVd
ID0gY2xhc3MgewogICAgICAgICAgICAgY29uc3RydWN0b3IoLi4ub3BlcmFuZHMpCiAgICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgLy8gRklYTUU6IEhhbmRsZSBPcENvbnN0YW50LCBPcFNw
ZWNDb25zdGFudCwgT3BTcGVjQ29uc3RhbnRPcCBzcGVjaWFsbHkuCiAgICAgICAgICAgICAgICAg
bGV0IG9wZXJhbmRDaGVja2VyID0gbmV3IE9wZXJhbmRDaGVja2VyKGluc3RydWN0aW9uLm9wZXJh
bmRzKTsKICAgICAgICAgICAgICAgICBmb3IgKGxldCBvcGVyYW5kIG9mIG9wZXJhbmRzKQogICAg
ICAgICAgICAgICAgICAgICBvcGVyYW5kQ2hlY2tlci5jaGVjayhvcGVyYW5kKTsKZGlmZiAtLWdp
dCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwgYi9Ub29scy9XZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sCmluZGV4IDIxYWM0ZTIxMGFjNGZjZDg1MWI0
YWMyYjEwN2MxZjM2MGE4NDEzNzIuLmNjMjJlYzhiYjgwODZiM2QwMWUwOWNjMDcyOThlMDJjOTdk
MzQ3ZDYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0
bWwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbApAQCAtMSw0
NSArMSwxOTcgQEAKIDwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KLTxzY3JpcHQgc3Jj
PSJTUElSLVYuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOb2RlLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IlJlZmVyZW5jZVR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWYWx1ZS5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJSZXdyaXRlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZp
c2l0b3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDcmVhdGVMaXRlcmFsLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJQcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uanMiPjwvc2NyaXB0
PgorCisgICAgPHNjcmlwdCBzcmM9IkFkZHJlc3NTcGFjZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IkFub255bW91c1ZhcmlhYmxlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iQXJyYXlSZWZUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQXJyYXlUeXBl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQXNzaWdubWVudC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IkF1dG9XcmFwcGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iQmxvY2suanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJCb29sTGl0ZXJhbC5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkJyZWFrLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iQ2FsbEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJDYWxsRnVuY3Rpb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVjay5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrTGl0ZXJhbFR5cGVzLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tMb29wcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkNoZWNrUmVjdXJzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hl
Y2tSZWN1cnNpdmVUeXBlcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrUmV0
dXJucy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrVW5yZWFjaGFibGVDb2Rl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tXcmFwcGVkLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IkNsb25lUHJvZ3JhbS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbW1hRXhw
cmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnN0ZXhwckZvbGRlci5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNvbnN0ZXhwclR5cGVQYXJhbWV0ZXIuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDb250aW51ZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkNvbnZlcnRQdHJUb0FycmF5UmVmRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IkRvV2hpbGVMb29wLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iRG90RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkRvdWJs
ZUxpdGVyYWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJEb3VibGVMaXRlcmFsVHlw
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkRlcmVmZXJlbmNlRXhwcmVzc2lvbi5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkVBcnJheVJlZi5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IkVCdWZmZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJF
QnVmZmVyQnVpbGRlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkVQdHIuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJFbnVtTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkVudW1NZW1iZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJF
bnVtVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV2YWx1YXRpb25Db21tb24u
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJFdmFsdWF0b3IuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJFeHByZXNzaW9uRmluZGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iRXh0ZXJuYWxPcmlnaW4uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJG
aWVsZC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZpbmRIaWdoWm9tYmllcy5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZsYXR0ZW5Qcm90b2NvbEV4dGVuZHMuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGbGF0dGVuZWRTdHJ1Y3RPZmZzZXRHYXRoZXJlci5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZsb2F0TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IkZsb2F0TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJGb2xkQ29uc3RleHBycy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IkZvckxvb3AuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGdW5jLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iRnVuY0RlZi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IkZ1bmNJbnN0YW50aWF0b3IuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGdW5j
UGFyYW1ldGVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRnVuY3Rpb25MaWtlQmxv
Y2suanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJIaWdoWm9tYmllRmluZGVyLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSWRlbnRpdHlFeHByZXNzaW9uLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iSWZTdGF0ZW1lbnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSJJbmRleEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJ
bmZlclR5cGVzRm9yQ2FsbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IklubGluZS5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IklubGluZXIuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJJbnN0YW50aWF0ZUltbWVkaWF0ZXMuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJJbnRMaXRlcmFsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW50
TGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJbnRyaW5zaWNzLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTGF0ZUNoZWNrZXIuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJMZXhlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ikxl
eGVyVG9rZW4uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJMaXRlcmFsVHlwZUNoZWNr
ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJMb2dpY2FsRXhwcmVzc2lvbi5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkxvZ2ljYWxOb3QuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJMb29wQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
Ik1ha2VBcnJheVJlZkV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJN
YWtlUHRyRXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5hbWVDb250
ZXh0LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTmFtZUZpbmRlci5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5hbWVSZXNvbHZlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9Ik5hdGl2ZUZ1bmMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYXRp
dmVGdW5jSW5zdGFuY2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYXRpdmVUeXBl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZUluc3RhbmNlLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTm9ybWFsVXNlUHJvcGVydHlSZXNvbHZlci5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik51bGxMaXRlcmFsLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iTnVsbFR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJP
cmlnaW5LaW5kLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iT3ZlcmxvYWRSZXNvbHV0
aW9uRmFpbHVyZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlBhcnNlLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJlcGFyZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlByb3BlcnR5UmVzb2x2ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQ
cm9ncmFtLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvZ3JhbVdpdGhVbm5lY2Vz
c2FyeVRoaW5nc1JlbW92ZWQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcm90b2Nv
bC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sRGVjbC5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb3RvY29sRnVuY0RlY2wuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJQcm90b2NvbFJlZi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IlB0clR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZWFkTW9kaWZ5V3JpdGVF
eHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmVjdXJzaW9uQ2hlY2tl
ci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJlY3Vyc2l2ZVR5cGVDaGVja2VyLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmVzb2x2ZU5hbWVzLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iUmVzb2x2ZU92ZXJsb2FkSW1wbC5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IlJlc29sdmVQcm9wZXJ0aWVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iUmVzb2x2ZVR5cGVEZWZzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmV0
dXJuLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmV0dXJuQ2hlY2tlci5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJldHVybkV4Y2VwdGlvbi5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IlNQSVItVi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlNQ
SVJWQ29kZWdlbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlNQSVJWVHlwZUFuYWx5
emVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU1BJUlZWYXJpYWJsZUFuYWx5emVy
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU3RhbmRhcmRMaWJyYXJ5LmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU3RhdGVtZW50Q2xvbmVyLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iU3RydWN0TGF5b3V0QnVpbGRlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlN0cnVjdFR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTdWJz
dGl0dXRpb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTd2l0Y2hDYXNlLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU3dpdGNoU3RhdGVtZW50LmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iU3ludGhlc2l6ZUVudW1GdW5jdGlvbnMuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJTeW50aGVzaXplU3RydWN0QWNjZXNzb3JzLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iVHJhcFN0YXRlbWVudC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlR5cGVEZWYuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJUeXBlRGVmUmVz
b2x2ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJUeXBlT3JWYXJpYWJsZVJlZi5q
cyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVQYXJhbWV0ZXJSZXdyaXRlci5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVSZWYuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJUeXBlVmFyaWFibGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJU
eXBlVmFyaWFibGVUcmFja2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZWRW
YWx1ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlVpbnRMaXRlcmFsLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVWludExpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iVW5pZmljYXRpb25Db250ZXh0LmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0iVW5yZWFjaGFibGVDb2RlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlZhcmlhYmxlRGVjbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZhcmlh
YmxlUmVmLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmlzaXRpbmdTZXQuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJXU3ludGF4RXJyb3IuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJXVHJhcEVycm9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
V1R5cGVFcnJvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IldoaWxlTG9vcC5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IldyYXBDaGVja2VyLmpzIj48L3NjcmlwdD4KIDxz
Y3JpcHQ+CisgICAgbGV0IGNvZGUgPSBgCitzdHJ1Y3QgVmVydGV4SW5wdXQgeworICAgIGZsb2F0
MiBwb3NpdGlvbjsKKyAgICBmbG9hdDMgY29sb3I7Cit9CisKK3N0cnVjdCBWZXJ0ZXhPdXRwdXQg
eworICAgIGZsb2F0NCB3c2xfUG9zaXRpb247CisgICAgZmxvYXQ0IGNvbG9yOworfQorCitzdHJ1
Y3QgRnJhZ21lbnRPdXRwdXQgeworICAgIGZsb2F0NCB3c2xfQ29sb3I7Cit9CisKK3ZlcnRleCBW
ZXJ0ZXhPdXRwdXQgdmVydGV4U2hhZGVyKFZlcnRleElucHV0IHZlcnRleElucHV0KSB7CisgICAg
VmVydGV4T3V0cHV0IHJlc3VsdDsKKyAgICByZXN1bHQud3NsX1Bvc2l0aW9uID0gZmxvYXQ0KHZl
cnRleElucHV0LnBvc2l0aW9uLCAwLiwgMS4pOworICAgIHJlc3VsdC5jb2xvciA9IGZsb2F0NCh2
ZXJ0ZXhJbnB1dC5jb2xvciwgMSk7CisgICAgCisgICAgaW50WzEwXSBhOworICAgIGludFsxMHVd
IGI7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworZnJhZ21lbnQgRnJhZ21lbnRPdXRwdXQgZnJh
Z21lbnRTaGFkZXIoVmVydGV4T3V0cHV0IHN0YWdlSW4pIHsKKyAgICBGcmFnbWVudE91dHB1dCBy
ZXN1bHQ7CisgICAgcmVzdWx0LndzbF9Db2xvciA9IHN0YWdlSW4uY29sb3I7CisgICAgcmV0dXJu
IHJlc3VsdDsKK31gOwogCiAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLCBmdW5j
dGlvbiAoKSB7CiAgICAgICAgIGZldGNoKCJzcGlydi5jb3JlLmdyYW1tYXIuanNvbiIpLnRoZW4o
cmVzcG9uc2UgPT4gcmVzcG9uc2UuanNvbigpKS50aGVuKGZ1bmN0aW9uIChqc29uKSB7CiAgICAg
ICAgICAgICBsZXQgc3BpcnYgPSBTUElSVihqc29uKTsKLSAgICAgICAgICAgIGxldCBhc3NlbWJs
ZXIgPSBuZXcgU1BJUlZBc3NlbWJsZXIoKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQo
bmV3IHNwaXJ2Lm9wcy5DYXBhYmlsaXR5KHNwaXJ2LmtpbmRzLkNhcGFiaWxpdHkuU2hhZGVyKSk7
Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuTWVtb3J5TW9kZWwo
c3BpcnYua2luZHMuQWRkcmVzc2luZ01vZGVsLkxvZ2ljYWwsIHNwaXJ2LmtpbmRzLk1lbW9yeU1v
ZGVsLkdMU0w0NTApKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9w
cy5FbnRyeVBvaW50KHNwaXJ2LmtpbmRzLkV4ZWN1dGlvbk1vZGVsLkZyYWdtZW50LCA1LCAibWFp
biIsIDEwLCAxNykpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3Bz
LkV4ZWN1dGlvbk1vZGUoNSwgc3BpcnYua2luZHMuRXhlY3V0aW9uTW9kZS5PcmlnaW5Mb3dlckxl
ZnQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5EZWNvcmF0
ZSgxMCwgc3BpcnYua2luZHMuRGVjb3JhdGlvbi5Mb2NhdGlvbiwgMCkpOwotICAgICAgICAgICAg
YXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkRlY29yYXRlKDE0LCBzcGlydi5raW5kcy5E
ZWNvcmF0aW9uLkRlc2NyaXB0b3JTZXQsIDApKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBl
bmQobmV3IHNwaXJ2Lm9wcy5EZWNvcmF0ZSgxNCwgc3BpcnYua2luZHMuRGVjb3JhdGlvbi5CaW5k
aW5nLCAxKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRGVj
b3JhdGUoMTcsIHNwaXJ2LmtpbmRzLkRlY29yYXRpb24uTG9jYXRpb24sIDApKTsKLSAgICAgICAg
ICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlVm9pZCgzKSk7Ci0gICAgICAg
ICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZUZ1bmN0aW9uKDQsIDMpKTsK
LSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlRmxvYXQoNywg
MzIpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlVmVj
dG9yKDgsIDcsIDQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9w
cy5UeXBlUG9pbnRlcig5LCBzcGlydi5raW5kcy5TdG9yYWdlQ2xhc3MuT3V0cHV0LCA4KSk7Ci0g
ICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVmFyaWFibGUoOSwgMTAs
IHNwaXJ2LmtpbmRzLlN0b3JhZ2VDbGFzcy5PdXRwdXQpKTsKLSAgICAgICAgICAgIGFzc2VtYmxl
ci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlSW1hZ2UoMTEsIDcsIHNwaXJ2LmtpbmRzLkRpbVsi
MkQiXSwgMCwgMCwgMCwgMSwgc3BpcnYua2luZHMuSW1hZ2VGb3JtYXQuVW5rbm93bikpOwotICAg
ICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVTYW1wbGVkSW1hZ2Uo
MTIsIDExKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlw
ZVBvaW50ZXIoMTMsIHNwaXJ2LmtpbmRzLlN0b3JhZ2VDbGFzcy5Vbmlmb3JtQ29uc3RhbnQsIDEy
KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVmFyaWFibGUo
MTMsIDE0LCBzcGlydi5raW5kcy5TdG9yYWdlQ2xhc3MuVW5pZm9ybUNvbnN0YW50KSk7Ci0gICAg
ICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVBvaW50ZXIoMTYsIHNw
aXJ2LmtpbmRzLlN0b3JhZ2VDbGFzcy5JbnB1dCwgOCkpOwotICAgICAgICAgICAgYXNzZW1ibGVy
LmFwcGVuZChuZXcgc3BpcnYub3BzLlZhcmlhYmxlKDE2LCAxNywgc3BpcnYua2luZHMuU3RvcmFn
ZUNsYXNzLklucHV0KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5v
cHMuVHlwZVZlY3RvcigxOCwgNywgMikpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChu
ZXcgc3BpcnYub3BzLkZ1bmN0aW9uKDMsIDUsIHNwaXJ2LmtpbmRzLkZ1bmN0aW9uQ29udHJvbC5O
b25lLCA0KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuTGFi
ZWwoNikpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkxvYWQo
MTIsIDE1LCAxNCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3Bz
LkxvYWQoOCwgMTksIDE3KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGly
di5vcHMuVmVjdG9yU2h1ZmZsZSgxOCwgMjAsIDE5LCAxOSwgMCwgMSkpOwotICAgICAgICAgICAg
YXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkltYWdlU2FtcGxlSW1wbGljaXRMb2QoOCwg
MjEsIDE1LCAyMCkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3Bz
LlN0b3JlKDEwLCAyMSkpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYu
b3BzLlJldHVybigpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9w
cy5GdW5jdGlvbkVuZCgpKTsKLSAgICAgICAgICAgIGxldCByZXN1bHQgPSBhc3NlbWJsZXIucmVz
dWx0OwotICAgICAgICAgICAgCisgICAgICAgICAgICBsZXQgcHJvZ3JhbSA9IHByZXBhcmUoIi9p
bnRlcm5hbC90ZXN0IiwgMCwgY29kZSk7CisgICAgICAgICAgICBsZXQgcmVzdWx0ID0gZ2VuZXJh
dGVTUElSVihzcGlydiwgcHJvZ3JhbSk7CisgICAgICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
ICAgICB9KS50aGVuKGZ1bmN0aW9uKHJlc3VsdCkgewogICAgICAgICAgICAgbGV0IHJlc3VsdEVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiUmVzdWx0Iik7CiAgICAgICAgICAgICB3
aGlsZSAocmVzdWx0RWxlbWVudC5jaGlsZE5vZGVzLmxlbmd0aCAhPSAwKQogICAgICAgICAgICAg
ICAgIHJlc3VsdEVsZW1lbnQucmVtb3ZlQ2hpbGQocmVzdWx0RWxlbWVudC5jaGlsZE5vZGVzWzBd
KTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWQ29kZWdl
bi5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWQ29kZWdlbi5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41YWZkZDAzMzFhMGQyZjJmNzI1ZGIyMGRjYjMxYTlhNDgxMzQzZDg4Ci0tLSAvZGV2
L251bGwKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlZDb2RlZ2VuLmpz
CkBAIC0wLDAgKzEsMzEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE3IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJ
TVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBP
UgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
IAorICovCisidXNlIHN0cmljdCI7CisKK2Z1bmN0aW9uIGdlbmVyYXRlU1BJUlYoc3BpcnYsIHBy
b2dyYW0pCit7CisKKyAgICBmdW5jdGlvbiBmaW5kRW50cnlQb2ludHMoKQorICAgIHsKKyAgICAg
ICAgbGV0IGVudHJ5UG9pbnRzID0gW107CisgICAgICAgIGZvciAobGV0IGZ1bmN0aW9uTmFtZXMg
b2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFsdWVzKCkpIHsKKyAgICAgICAgICAgIGZvciAobGV0IGZ1
bmMgb2YgZnVuY3Rpb25OYW1lcykgeworICAgICAgICAgICAgICAgIHN3aXRjaCAoZnVuYy5zaGFk
ZXJUeXBlKSB7CisgICAgICAgICAgICAgICAgY2FzZSAidmVydGV4IjoKKyAgICAgICAgICAgICAg
ICBjYXNlICJmcmFnbWVudCI6CisgICAgICAgICAgICAgICAgICAgIGVudHJ5UG9pbnRzLnB1c2go
ZnVuYyk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICByZXR1cm4gZW50cnlQb2ludHM7CisgICAg
fQorCisgICAgbGV0IGN1cnJlbnRJZCA9IDM7CisgICAgbGV0IHR5cGVNYXAgPSBuZXcgTWFwKCk7
CisgICAgbGV0IHJldmVyc2VUeXBlTWFwID0gbmV3IE1hcCgpOworICAgIGxldCBlbnRyeVBvaW50
cyA9IFtdOworCisgICAgdHlwZU1hcC5zZXQocHJvZ3JhbS5pbnRyaW5zaWNzLnZvaWQsIGN1cnJl
bnRJZCsrKTsKKyAgICB0eXBlTWFwLnNldChwcm9ncmFtLmludHJpbnNpY3MudWludDMyLCBjdXJy
ZW50SWQrKyk7CisKKyAgICBmb3IgKGxldCBlbnRyeVBvaW50IG9mIGZpbmRFbnRyeVBvaW50cygp
KSB7CisgICAgICAgIGxldCBpbmxpbmVkU2hhZGVyID0gcHJvZ3JhbS5mdW5jSW5zdGFudGlhdG9y
LmdldFVuaXF1ZShlbnRyeVBvaW50LCBbXSk7CisgICAgICAgIF9pbmxpbmVGdW5jdGlvbihwcm9n
cmFtLCBpbmxpbmVkU2hhZGVyLCBuZXcgVmlzaXRpbmdTZXQoZW50cnlQb2ludCkpOworCisgICAg
ICAgIGxldCB0eXBlQW5hbHl6ZXIgPSBuZXcgU1BJUlZUeXBlQW5hbHl6ZXIocHJvZ3JhbSwgdHlw
ZU1hcCwgY3VycmVudElkKTsKKyAgICAgICAgaW5saW5lZFNoYWRlci52aXNpdCh0eXBlQW5hbHl6
ZXIpOworICAgICAgICBjdXJyZW50SWQgPSB0eXBlQW5hbHl6ZXIuY3VycmVudElkOworCisgICAg
ICAgIGxldCB2YWx1ZUFuYWx5emVyID0gbmV3IFNQSVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXpl
cihwcm9ncmFtLCB0eXBlTWFwLCBjdXJyZW50SWQpOworICAgICAgICBpbmxpbmVkU2hhZGVyLnJl
dHVyblR5cGUudmlzaXQodmFsdWVBbmFseXplcik7CisgICAgICAgIGN1cnJlbnRJZCA9IHZhbHVl
QW5hbHl6ZXIuY3VycmVudElkOworICAgICAgICBsZXQgb3V0cHV0VmFsdWVzID0gdmFsdWVBbmFs
eXplci5yZXN1bHQ7CisKKyAgICAgICAgbGV0IGlucHV0VmFsdWVzID0gW107CisgICAgICAgIGZv
ciAobGV0IHBhcmFtZXRlciBvZiBpbmxpbmVkU2hhZGVyLnBhcmFtZXRlcnMpIHsKKyAgICAgICAg
ICAgIGlmIChwYXJhbWV0ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkgeworICAg
ICAgICAgICAgICAgIGxldCB2YWx1ZUFuYWx5emVyID0gbmV3IFNQSVJWUHJpbWl0aXZlVmFyaWFi
bGVBbmFseXplcihwcm9ncmFtLCB0eXBlTWFwLCBjdXJyZW50SWQsIHBhcmFtZXRlci5uYW1lKTsK
KyAgICAgICAgICAgICAgICBwYXJhbWV0ZXIudmlzaXQodmFsdWVBbmFseXplcik7CisgICAgICAg
ICAgICAgICAgY3VycmVudElkID0gdmFsdWVBbmFseXplci5jdXJyZW50SWQ7CisgICAgICAgICAg
ICAgICAgZm9yIChsZXQgaW5wdXRWYWx1ZSBvZiB2YWx1ZUFuYWx5emVyLnJlc3VsdCkKKyAgICAg
ICAgICAgICAgICAgICAgaW5wdXRWYWx1ZXMucHVzaChpbnB1dFZhbHVlKTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAocGFyYW1ldGVyLnR5cGUudHlwZSBpbnN0YW5jZW9mIEFycmF5UmVmVHlwZSkg
eworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhpcy4KKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5UG9pbnRzLnB1c2goeyBpZDogY3VycmVudElk
KyssIHNoYWRlcjogaW5saW5lZFNoYWRlciwgaW5wdXRzOiBpbnB1dFZhbHVlcywgb3V0cHV0czog
b3V0cHV0VmFsdWVzIH0pOworICAgIH0KKyAgICAKKyAgICBmb3IgKGxldCB0eXBlIG9mIHR5cGVN
YXApIHsKKyAgICAgICAgaWYgKHR5cGVvZiB0eXBlWzFdID09ICJvYmplY3QiKQorICAgICAgICAg
ICAgcmV2ZXJzZVR5cGVNYXAuc2V0KHR5cGVbMV0uaWQsIHR5cGVbMF0pOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXZlcnNlVHlwZU1hcC5zZXQodHlwZVsxXSwgdHlwZVswXSk7CisgICAg
fQorCisKKworCisKKworCisKKworCisKKworCisKKyAgICBmdW5jdGlvbiBlbWl0VHlwZXMoYXNz
ZW1ibGVyKSB7CisgICAgICAgIGxldCBlbWl0dGVkVHlwZXMgPSBuZXcgU2V0KCk7CisgICAgICAg
IGZ1bmN0aW9uIGRvRW1pdFR5cGVzKHR5cGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChl
bWl0dGVkVHlwZXMuaGFzKHR5cGVbMF0pKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgICAgIGVtaXR0ZWRUeXBlcy5hZGQodHlwZVswXSk7CisgICAgICAgICAgICBpZiAodHlwZW9m
IHR5cGVbMV0gPT0gIm9iamVjdCIpIHsKKyAgICAgICAgICAgICAgICBpZiAodHlwZVsxXS5maWVs
ZFR5cGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGZpZWxkVHlwZSBvZiB0eXBl
WzFdLmZpZWxkVHlwZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSByZXZl
cnNlVHlwZU1hcC5nZXQoZmllbGRUeXBlKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2
YWx1ZSA9IHR5cGVNYXAuZ2V0KGtleSk7CisgICAgICAgICAgICAgICAgICAgICAgICBkb0VtaXRU
eXBlcyhba2V5LCB2YWx1ZV0pOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgICAgIHN3aXRjaCAodHlwZVswXSkgeworICAgICAgICAgICAgICAgICAgICBjYXNlICJzdHJ1
Y3QgdmVjMjw+IHsgaW50MzIgeDsgaW50MzIgeSB9IjoKKyAgICAgICAgICAgICAgICAgICAgY2Fz
ZSAic3RydWN0IHZlYzI8PiB7IHVpbnQzMiB4OyB1aW50MzIgeTsgfSI6CisgICAgICAgICAgICAg
ICAgICAgIGNhc2UgInN0cnVjdCB2ZWMyPD4geyBmbG9hdDMyIHg7IGZsb2F0MzIgeTsgfSI6Cisg
ICAgICAgICAgICAgICAgICAgIGNhc2UgInN0cnVjdCB2ZWMyPD4geyBmbG9hdDY0IHg7IGZsb2F0
NjQgeTsgfSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0cnVjdCB2ZWMzPD4geyBpbnQz
MiB4OyBpbnQzMiB5OyBpbnQzMiB6OyB9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAic3Ry
dWN0IHZlYzM8PiB7IHVpbnQzMiB4OyB1aW50MzIgeTsgdWludDMyIHo7IH0iOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlICJzdHJ1Y3QgdmVjMzw+IHsgZmxvYXQzMiB4OyBmbG9hdDMyIHk7IGZs
b2F0MzIgejsgfSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0cnVjdCB2ZWMzPD4geyBm
bG9hdDY0IHg7IGZsb2F0NjQgeTsgZmxvYXQ2NCB6OyB9IjoKKyAgICAgICAgICAgICAgICAgICAg
Y2FzZSAic3RydWN0IHZlYzQ8PiB7IGludDMyIHg7IGludDMyIHk7IGludDMyIHo7IGludDMyIHc7
IH0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJzdHJ1Y3QgdmVjNDw+IHsgdWludDMyIHg7
IHVpbnQzMiB5OyB1aW50MzIgejsgdWludDMyIHc7IH0iOgorICAgICAgICAgICAgICAgICAgICBj
YXNlICJzdHJ1Y3QgdmVjNDw+IHsgZmxvYXQzMiB4OyBmbG9hdDMyIHk7IGZsb2F0MzIgejsgZmxv
YXQzMiB3OyB9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RydWN0IHZlYzQ8PiB7IGZs
b2F0NjQgeDsgZmxvYXQ2NCB5OyBmbG9hdDY0IHo7IGZsb2F0NjQgdzsgfSI6CisgICAgICAgICAg
ICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVZlY3Rvcih0
eXBlWzFdLmlkLCB0eXBlWzFdLmZpZWxkVHlwZXNbMF0sIHR5cGVbMV0uZmllbGRUeXBlcy5sZW5n
dGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAg
ICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcg
c3BpcnYub3BzLlR5cGVTdHJ1Y3QodHlwZVsxXS5pZCwgLi4udHlwZVsxXS5maWVsZFR5cGVzKSk7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghdHlwZVsx
XS5lbGVtZW50VHlwZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigi
VW5rbm93biB0eXBlISIpOworICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxldCBl
bGVtZW50VHlwZSA9IHR5cGVbMV0uZWxlbWVudFR5cGU7CisgICAgICAgICAgICAgICAgICAgIGxl
dCBrZXkgPSByZXZlcnNlVHlwZU1hcC5nZXQoZWxlbWVudFR5cGUpOworICAgICAgICAgICAgICAg
ICAgICBsZXQgdmFsdWUgPSB0eXBlTWFwLmdldChrZXkpOworICAgICAgICAgICAgICAgICAgICBk
b0VtaXRUeXBlcyhba2V5LCB2YWx1ZV0pOworCisgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9
IGN1cnJlbnRJZCsrOworICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBz
cGlydi5vcHMuQ29uc3RhbnQodHlwZU1hcC5nZXQocHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQzMiks
IGlkLCB0eXBlWzFdLm51bUVsZW1lbnRzKSk7CisgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxl
ci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlQXJyYXkodHlwZVsxXS5pZCwgZWxlbWVudFR5cGUs
IGlkKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBzd2l0Y2ggKHR5cGVbMF0ubmFtZSkgeworICAgICAgICAgICAgICAgIGNhc2UgInZv
aWQiOgorICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMu
VHlwZVZvaWQodHlwZVsxXSkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICBjYXNlICJib29sIjoKKyAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVu
ZChuZXcgc3BpcnYub3BzLlR5cGVCb29sKHR5cGVbMV0pKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiaW50MzIiOgorICAgICAgICAgICAgICAgICAg
ICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZUludCh0eXBlWzFdLCAzMiwgMSkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJ1aW50
MzIiOgorICAgICAgICAgICAgICAgIGNhc2UgInVpbnQ4IjoKKyAgICAgICAgICAgICAgICAgICAg
YXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVJbnQodHlwZVsxXSwgMzIsIDApKTsK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSAiZmxvYXQz
MiI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5U
eXBlRmxvYXQodHlwZVsxXSwgMzIpKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgY2FzZSAiZmxvYXQ2NCI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxl
ci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlRmxvYXQodHlwZVsxXSwgNjQpKTsKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGRvRW1pdFR5cGVzKFtwcm9ncmFtLmludHJpbnNpY3MudWludDMyLCB0
eXBlTWFwLmdldChwcm9ncmFtLmludHJpbnNpY3MudWludDMyKV0pOworICAgICAgICBmb3IgKGxl
dCB0eXBlIG9mIHR5cGVNYXApCisgICAgICAgICAgICBkb0VtaXRUeXBlcyh0eXBlKQorICAgIH0K
KworCisKKworCisKKworCisKKworCisKKyAgICBsZXQgY29uc3RhbnRzID0gbmV3IE1hcCgpOwor
ICAgIGNsYXNzIENvbnN0YW50RmluZGVyIGV4dGVuZHMgVmlzaXRvciB7CisgICAgICAgIHZpc2l0
R2VuZXJpY0xpdGVyYWxUeXBlKG5vZGUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGxldCB0eXBl
ID0gbm9kZS50eXBlOworICAgICAgICAgICAgd2hpbGUgKHR5cGUgaW5zdGFuY2VvZiBUeXBlUmVm
KQorICAgICAgICAgICAgICAgIHR5cGUgPSB0eXBlLnR5cGU7CisgICAgICAgICAgICBsZXQgdmFs
dWVzOworICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIHByb2dy
YW0uaW50cmluc2ljcy5ib29sOgorICAgICAgICAgICAgICAgIHZhbHVlcyA9IFtub2RlLnZhbHVl
XTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgcHJvZ3JhbS5pbnRy
aW5zaWNzLmludDMyOgorICAgICAgICAgICAgY2FzZSBwcm9ncmFtLmludHJpbnNpY3MudWludDMy
OgorICAgICAgICAgICAgY2FzZSBwcm9ncmFtLmludHJpbnNpY3MudWludDg6CisgICAgICAgICAg
ICAgICAgdmFsdWVzID0gW25vZGUudmFsdWVdCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICBjYXNlIHByb2dyYW0uaW50cmluc2ljcy5mbG9hdDogeworICAgICAgICAgICAgICAg
IGxldCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihNYXRoLm1heChVaW50MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCwgRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UKSk7CisgICAg
ICAgICAgICAgICAgbGV0IGZsb2F0VmlldyA9IG5ldyBGbG9hdDMyQXJyYXkoYXJyYXlCdWZmZXIp
OworICAgICAgICAgICAgICAgIGxldCB1aW50VmlldyA9IG5ldyBVaW50MzJBcnJheShhcnJheUJ1
ZmZlcik7CisgICAgICAgICAgICAgICAgZmxvYXRWaWV3WzBdID0gbm9kZS52YWx1ZTsKKyAgICAg
ICAgICAgICAgICB2YWx1ZXMgPSB1aW50VmlldzsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2UgcHJvZ3JhbS5pbnRyaW5zaWNzLmRvdWJsZTog
eworICAgICAgICAgICAgICAgIGxldCBhcnJheUJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihNYXRo
Lm1heChVaW50MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwgRmxvYXQ2NEFycmF5LkJZVEVTX1BF
Ul9FTEVNRU5UKSk7CisgICAgICAgICAgICAgICAgbGV0IGRvdWJsZVZpZXcgPSBuZXcgRmxvYXQ2
NEFycmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBsZXQgdWludFZpZXcgPSBuZXcg
VWludDMyQXJyYXkoYXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgIGRvdWJsZVZpZXdbMF0g
PSBub2RlLnZhbHVlOworICAgICAgICAgICAgICAgIHZhbHVlcyA9IHVpbnRWaWV3OworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIlVucmVjb2duaXplZCBsaXRlcmFsLiIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY29uc3RhbnRzLnNldChub2RlLCB7IGlkOiBjdXJy
ZW50SWQrKywgdHlwZUlkOiB0eXBlTWFwLmdldCh0eXBlKSwgdHlwZTogdHlwZSwgdmFsdWVzOiB2
YWx1ZXMgfSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZm9yIChsZXQgZW50cnlQb2ludCBvZiBl
bnRyeVBvaW50cykKKyAgICAgICAgZW50cnlQb2ludC5zaGFkZXIudmlzaXQobmV3IENvbnN0YW50
RmluZGVyKCkpOworCisKKworCisKKworCisKKworCisKKworICAgIGxldCBhc3NlbWJsZXIgPSBu
ZXcgU1BJUlZBc3NlbWJsZXIoKTsKKyAgICAvLyAxLiBBbGwgT3BDYXBhYmlsaXR5IGluc3RydWN0
aW9ucworICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5DYXBhYmlsaXR5KHNwaXJ2
LmtpbmRzLkNhcGFiaWxpdHkuU2hhZGVyKSk7CisgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3Bp
cnYub3BzLkNhcGFiaWxpdHkoc3BpcnYua2luZHMuQ2FwYWJpbGl0eS5GbG9hdDY0KSk7CisgICAg
Ly8gMi4gT3B0aW9uYWwgT3BFeHRlbnNpb24gaW5zdHJ1Y3Rpb25zCisgICAgLy8gMy4gT3B0aW9u
YWwgT3BFeHRJbnN0SW1wb3J0IGluc3RydWN0aW9ucworICAgIC8vIDQuIFRoZSBzaW5nbGUgcmVx
dWlyZWQgT3BNZW1vcnlNb2RlbCBpbnN0cnVjdGlvbgorICAgIC8vIEZJWE1FOiBGaWd1cmUgb3V0
IGlmIHdlIGNhbiB1c2UgdGhlIFNpbXBsZSBtZW1vcnkgbW9kZWwgaW5zdGVhZCBvZiB0aGUgR0xT
TCBtZW1vcnkgbW9kZWwuCisgICAgLy8gVGhlIHNwZWMgc2F5cyBub3RoaW5nIGFib3V0IHdoYXQg
dGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aGVtIGlzLiDwn5KvCisgICAgYXNzZW1ibGVyLmFwcGVu
ZChuZXcgc3BpcnYub3BzLk1lbW9yeU1vZGVsKHNwaXJ2LmtpbmRzLkFkZHJlc3NpbmdNb2RlbC5M
b2dpY2FsLCBzcGlydi5raW5kcy5NZW1vcnlNb2RlbC5HTFNMNDUwKSk7CisKKyAgICAvLyA1LiBB
bGwgZW50cnkgcG9pbnQgZGVjbGFyYXRpb25zCisgICAgZm9yIChsZXQgZW50cnlQb2ludCBvZiBl
bnRyeVBvaW50cykgeworICAgICAgICBsZXQgZXhlY3V0aW9uTW9kZWw7CisgICAgICAgIHN3aXRj
aCAoZW50cnlQb2ludC5zaGFkZXIuc2hhZGVyVHlwZSkgeworICAgICAgICBjYXNlICJ2ZXJ0ZXgi
OgorICAgICAgICAgICAgZXhlY3V0aW9uTW9kZWwgPSBzcGlydi5raW5kcy5FeGVjdXRpb25Nb2Rl
bC5WZXJ0ZXg7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAiZnJhZ21lbnQiOgor
ICAgICAgICAgICAgZXhlY3V0aW9uTW9kZWwgPSBzcGlydi5raW5kcy5FeGVjdXRpb25Nb2RlbC5G
cmFnbWVudDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGxldCBpZCA9
IGVudHJ5UG9pbnQuaWQ7CisgICAgICAgIGxldCBuYW1lID0gZW50cnlQb2ludC5zaGFkZXIubmFt
ZTsKKyAgICAgICAgbGV0IGludGVyZmFjZUlkcyA9IFtdCisgICAgICAgIGZvciAobGV0IHZhbHVl
IG9mIGVudHJ5UG9pbnQuaW5wdXRzKQorICAgICAgICAgICAgaW50ZXJmYWNlSWRzLnB1c2godmFs
dWUuaWQpOworICAgICAgICBmb3IgKGxldCB2YWx1ZSBvZiBlbnRyeVBvaW50Lm91dHB1dHMpCisg
ICAgICAgICAgICBpbnRlcmZhY2VJZHMucHVzaCh2YWx1ZS5pZCk7CisgICAgICAgIGFzc2VtYmxl
ci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5FbnRyeVBvaW50KGV4ZWN1dGlvbk1vZGVsLCBpZCwgbmFt
ZSwgLi4uaW50ZXJmYWNlSWRzKSk7CisgICAgfQorCisgICAgLy8gNi4gQWxsIGV4ZWN1dGlvbiBt
b2RlIGRlY2xhcmF0aW9ucworICAgIGZvciAobGV0IGVudHJ5UG9pbnQgb2YgZW50cnlQb2ludHMp
IHsKKyAgICAgICAgbGV0IGlkID0gZW50cnlQb2ludC5pZDsKKyAgICAgICAgYXNzZW1ibGVyLmFw
cGVuZChuZXcgc3BpcnYub3BzLkV4ZWN1dGlvbk1vZGUoaWQsIHNwaXJ2LmtpbmRzLkV4ZWN1dGlv
bk1vZGUuT3JpZ2luTG93ZXJMZWZ0KSk7CisgICAgfQorCisgICAgLy8gNy4gVGhlc2UgZGVidWcg
aW5zdHJ1Y3Rpb25zCisgICAgLy8gOC4gQWxsIGFubm90YXRpb24gaW5zdHJ1Y3Rpb25zCisgICAg
Ly8gRklYTUU6IGluY2x1ZGUgYW5ub3RhdGlvbiBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIGJpbmRp
bmcgbnVtYmVyLCBkZXNjcmlwdG9yIHNldCBudW1iZXIsIGxvY2F0aW9uIG51bWJlciwgZXRjLgor
CisgICAgLy8gOS4gQWxsIHR5cGUgZGVjbGFyYXRpb25zLCBhbGwgY29uc3RhbnQgaW5zdHJ1Y3Rp
b25zLCBhbmQgYWxsIGdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMKKyAgICBlbWl0VHlwZXMo
YXNzZW1ibGVyKTsKKyAgICBsZXQgZnVuY3Rpb25UeXBlID0gY3VycmVudElkKys7CisgICAgYXNz
ZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVGdW5jdGlvbihmdW5jdGlvblR5cGUsIHR5
cGVNYXAuZ2V0KHByb2dyYW0uaW50cmluc2ljcy52b2lkKSkpOworICAgIGZvciAobGV0IGNvbnN0
YW50IG9mIGNvbnN0YW50cykgeworICAgICAgICBpZiAoY29uc3RhbnRbMV0udHlwZSA9PSBwcm9n
cmFtLmludHJpbnNpY3MuYm9vbCkgeworICAgICAgICAgICAgaWYgKGNvbnN0YW50WzFdLnZhbHVl
WzBdKQorICAgICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5Db25z
dGFudFRydWUoY29uc3RhbnRbMV0uaWQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuQ29uc3RhbnRGYWxzZShjb25zdGFu
dFsxXS5pZCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQo
bmV3IHNwaXJ2Lm9wcy5Db25zdGFudChjb25zdGFudFsxXS50eXBlSWQsIGNvbnN0YW50WzFdLmlk
LCAuLi5jb25zdGFudFsxXS52YWx1ZXMpKTsKKyAgICB9CisgICAgZm9yIChsZXQgZW50cnlQb2lu
dCBvZiBlbnRyeVBvaW50cykgeworICAgICAgICBmb3IgKGxldCBpbnB1dCBvZiBlbnRyeVBvaW50
LmlucHV0cykKKyAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5WYXJp
YWJsZShpbnB1dC50eXBlLCBpbnB1dC5pZCwgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLklucHV0
KSk7CisgICAgICAgIGZvciAobGV0IG91dHB1dCBvZiBlbnRyeVBvaW50Lm91dHB1dHMpCisgICAg
ICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVmFyaWFibGUob3V0cHV0LnR5
cGUsIG91dHB1dC5pZCwgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLk91dHB1dCkpOworICAgIH0K
KworICAgIC8vIDEwLiBBbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgLy8gMTEuIEFsbCBm
dW5jdGlvbiBkZWZpbml0aW9ucworICAgIGZvciAobGV0IGVudHJ5UG9pbnQgb2YgZW50cnlQb2lu
dHMpIHsKKyAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkZ1bmN0aW9uKHR5
cGVNYXAuZ2V0KHByb2dyYW0uaW50cmluc2ljcy52b2lkKSwgZW50cnlQb2ludC5pZCwgW3NwaXJ2
LmtpbmRzLkZ1bmN0aW9uQ29udHJvbC5Ob25lXSwgZnVuY3Rpb25UeXBlKSk7CisgICAgICAgIGFz
c2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5GdW5jdGlvbkVuZCgpKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gYXNzZW1ibGVyLnJlc3VsdDsKK30KKwpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU1BJUlZUeXBlQW5hbHl6ZXIuanMgYi9Ub29scy9XZWJHUFVTaGFk
aW5nTGFuZ3VhZ2VSSS9TUElSVlR5cGVBbmFseXplci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MDEyMzc0NDVk
ZDM4ODQ0MjdjNDYzNDM4ZTE0YTQwOGEyZjg3YTc0Ci0tLSAvZGV2L251bGwKKysrIGIvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJUlZUeXBlQW5hbHl6ZXIuanMKQEAgLTAsMCArMSwx
NDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ug
c3RyaWN0IjsKKworY2xhc3MgU1BJUlZUeXBlQW5hbHl6ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAg
ICBjb25zdHJ1Y3Rvcihwcm9ncmFtLCB0eXBlTWFwLCBjdXJyZW50SWQpCisgICAgeworICAgICAg
ICBzdXBlcigpOworICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3JhbTsKKyAgICAgICAgdGhp
cy5fdHlwZU1hcCA9IHR5cGVNYXA7CisgICAgICAgIHRoaXMuX2N1cnJlbnRJZCA9IGN1cnJlbnRJ
ZDsKKyAgICAgICAgdGhpcy5fc3RhY2sgPSBbXTsKKyAgICB9CisKKyAgICBnZXQgcHJvZ3JhbSgp
CisgICAgeworICAgICAgICB0aGlzLl9wcm9ncmFtOworICAgIH0KKworICAgIGdldCB0eXBlTWFw
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl90eXBlTWFwOworICAgIH0KKworICAgIGdl
dCBjdXJyZW50SWQoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX2N1cnJlbnRJZDsKKyAg
ICB9CisKKyAgICBnZXQgc3RhY2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHRoaXMuX3N0YWNr
OworICAgIH0KKworICAgIHZpc2l0VHlwZVJlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS50
eXBlLnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIF9lbmNvdW50ZXJUeXBlKGlkKQorICAgIHsK
KyAgICAgICAgaWYgKHRoaXMuc3RhY2subGVuZ3RoID4gMCkKKyAgICAgICAgICAgIHRoaXMuc3Rh
Y2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXS5wdXNoKGlkKTsKKyAgICB9CisKKyAgICB2aXNpdE51
bGxUeXBlKG5vZGUpCisgICAgeworICAgICAgICBzdXBlci52aXNpdCh0aGlzKTsKKyAgICB9CisK
KyAgICB2aXNpdEdlbmVyaWNMaXRlcmFsVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS50
eXBlLnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIHZpc2l0TmF0aXZlVHlwZShub2RlKQorICAg
IHsKKyAgICAgICAgaWYgKCF0aGlzLnR5cGVNYXAuaGFzKG5vZGUpKQorICAgICAgICAgICAgdGhp
cy50eXBlTWFwLnNldChub2RlLCB0aGlzLl9jdXJyZW50SWQrKyk7CisgICAgICAgIGxldCBpZCA9
IHRoaXMudHlwZU1hcC5nZXQobm9kZSk7CisgICAgICAgIHRoaXMuX2VuY291bnRlclR5cGUoaWQp
OworICAgIH0KKworICAgIHZpc2l0RW51bVR5cGUobm9kZSkKKyAgICB7CisgICAgICAgIHN1cGVy
LnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIHZpc2l0UHRyVHlwZShub2RlKQorICAgIHsKKyAg
ICAgICAgLy8gSW50ZW50aW9uYWxseSBibGFuaworICAgIH0KKworICAgIHZpc2l0QXJyYXlSZWZU
eXBlKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLnZpc2l0TmF0aXZlVHlwZShwcm9ncmFtLmlu
dHJpbnNpY3MudWludDMyKTsKKyAgICAgICAgdGhpcy52aXNpdE5hdGl2ZVR5cGUocHJvZ3JhbS5p
bnRyaW5zaWNzLnVpbnQzMik7CisgICAgfQorCisgICAgLy8gRklYTUU6IFVzaW5nIHRvU3RyaW5n
KCkgaW4gdGhlc2UgZnVuY3Rpb25zIGlzIGEgaGFjay4gSW5zdGVhZCwgd2Ugc2hvdWxkIGltcGxl
bWVudCBhIHByb3BlciB0eXBlIGRlZHVwZXIuCisgICAgdmlzaXRBcnJheVR5cGUobm9kZSkKKyAg
ICB7CisgICAgICAgIGxldCBpZDsKKyAgICAgICAgaWYgKHRoaXMudHlwZU1hcC5oYXMobm9kZS50
b1N0cmluZygpKSkgeworICAgICAgICAgICAgaWQgPSB0aGlzLnR5cGVNYXAuZ2V0KG5vZGUpOwor
ICAgICAgICAgICAgaWYgKHR5cGVvZiBpZCA9PSAib2JqZWN0IikKKyAgICAgICAgICAgICAgICBp
ZCA9IGlkLmlkOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbGV0IGZpZWxkVHlwZSA9
IFtdOworICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZpZWxkVHlwZSk7CisgICAgICAgICAg
ICBub2RlLmVsZW1lbnRUeXBlLnZpc2l0KHRoaXMpOworICAgICAgICAgICAgdGhpcy5zdGFjay5w
b3AoKTsKKyAgICAgICAgICAgIGlmIChmaWVsZFR5cGUubGVuZ3RoICE9IDEpCisgICAgICAgICAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJBcnJheXMgY2FuIG9ubHkgaGF2ZSBvbmUgZWxlbWVudCB0
eXBlISIpOworICAgICAgICAgICAgaWQgPSB0aGlzLl9jdXJyZW50SWQrKzsKKyAgICAgICAgICAg
IG5vZGUubnVtRWxlbWVudHMudmlzaXQodGhpcyk7CisgICAgICAgICAgICB0aGlzLnR5cGVNYXAu
c2V0KG5vZGUudG9TdHJpbmcoKSwge2lkOiBpZCwgZWxlbWVudFR5cGU6IGZpZWxkVHlwZVswXSwg
bnVtRWxlbWVudHM6IG5vZGUubnVtRWxlbWVudHMudmFsdWV9KTsKKyAgICAgICAgfQorICAgICAg
ICB0aGlzLl9lbmNvdW50ZXJUeXBlKGlkKTsKKyAgICB9CisKKyAgICB2aXNpdFN0cnVjdFR5cGUo
bm9kZSkKKyAgICB7CisgICAgICAgIGxldCBpZDsKKyAgICAgICAgaWYgKHRoaXMudHlwZU1hcC5o
YXMobm9kZS50b1N0cmluZygpKSkgeworICAgICAgICAgICAgaWQgPSB0aGlzLnR5cGVNYXAuZ2V0
KG5vZGUudG9TdHJpbmcoKSk7CisgICAgICAgICAgICBpZiAodHlwZW9mIGlkID09ICJvYmplY3Qi
KQorICAgICAgICAgICAgICAgIGlkID0gaWQuaWQ7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBsZXQgZmllbGRUeXBlcyA9IFtdOworICAgICAgICAgICAgdGhpcy5zdGFjay5wdXNoKGZp
ZWxkVHlwZXMpOworICAgICAgICAgICAgZm9yIChsZXQgZmllbGQgb2Ygbm9kZS5maWVsZHMpCisg
ICAgICAgICAgICAgICAgZmllbGQudmlzaXQodGhpcyk7CisgICAgICAgICAgICB0aGlzLnN0YWNr
LnBvcCgpOworICAgICAgICAgICAgaWQgPSB0aGlzLl9jdXJyZW50SWQrKzsKKyAgICAgICAgICAg
IHRoaXMudHlwZU1hcC5zZXQobm9kZS50b1N0cmluZygpLCB7aWQ6IGlkLCBmaWVsZFR5cGVzOiBm
aWVsZFR5cGVzfSk7CisgICAgICAgIH0KKyAgICAgICAgdGhpcy5fZW5jb3VudGVyVHlwZShpZCk7
CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJ
UlZWYXJpYWJsZUFuYWx5emVyLmpzIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvU1BJ
UlZWYXJpYWJsZUFuYWx5emVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE2NTU2M2Y5MzFjNjUwYTQzMmVkMmY4
YmQxMTBmYjY3NGUwYjU2NGMKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TUElSVlZhcmlhYmxlQW5hbHl6ZXIuanMKQEAgLTAsMCArMSwxNDggQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKyJ1c2Ugc3RyaWN0IjsK
KworY2xhc3MgU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyIGV4dGVuZHMgVmlzaXRvciB7
CisgICAgY29uc3RydWN0b3IocHJvZ3JhbSwgdHlwZU1hcCwgY3VycmVudElkLCBzdGFydE5hbWUp
CisgICAgeworICAgICAgICBzdXBlcigpOworICAgICAgICB0aGlzLl9wcm9ncmFtID0gcHJvZ3Jh
bTsKKyAgICAgICAgdGhpcy5fdHlwZU1hcCA9IHR5cGVNYXA7CisgICAgICAgIHRoaXMuX2N1cnJl
bnRJZCA9IGN1cnJlbnRJZDsKKyAgICAgICAgdGhpcy5fbmFtZUNvbXBvbmVudHMgPSBbXTsKKyAg
ICAgICAgaWYgKHN0YXJ0TmFtZSkKKyAgICAgICAgICAgIHRoaXMuX25hbWVDb21wb25lbnRzLnB1
c2goc3RhcnROYW1lKTsKKyAgICAgICAgdGhpcy5fcmVzdWx0ID0gW107CisgICAgfQorCisgICAg
Z2V0IHByb2dyYW0oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcHJvZ3JhbTsKKyAgICB9CisKKyAg
ICBnZXQgdHlwZU1hcCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcDsKKyAg
ICB9CisKKyAgICBnZXQgY3VycmVudElkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9j
dXJyZW50SWQ7CisgICAgfQorCisgICAgZ2V0IG5hbWVDb21wb25lbnRzKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiB0aGlzLl9uYW1lQ29tcG9uZW50czsKKyAgICB9CisKKyAgICBnZXQgcmVzdWx0
KCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9yZXN1bHQ7CisgICAgfQorCisgICAgdmlz
aXRUeXBlUmVmKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7Cisg
ICAgfQorCisgICAgdmlzaXROdWxsVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlz
aXQodGhpcyk7CisgICAgfQorCisgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKKyAg
ICB7CisgICAgICAgIG5vZGUudHlwZS52aXNpdCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXNpdE5h
dGl2ZVR5cGUobm9kZSkKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBFbWl0IHRoaW5ncyBsaWtl
IGJpbmRpbmcgbnVtYmVyLCBkZXNjcmlwdG9yIHNldCBudW1iZXIsIGxvY2F0aW9uIG51bWJlciwg
ZXRjLgorICAgICAgICB0aGlzLnJlc3VsdC5wdXNoKHtuYW1lOiB0aGlzLm5hbWVDb21wb25lbnRz
LmpvaW4oIiIpLCBpZDogdGhpcy5fY3VycmVudElkKyssIHR5cGU6IHRoaXMudHlwZU1hcC5nZXQo
bm9kZSl9KTsKKyAgICB9CisKKyAgICB2aXNpdEVudW1UeXBlKG5vZGUpCisgICAgeworICAgICAg
ICBzdXBlci52aXNpdCh0aGlzKTsKKyAgICB9CisKKyAgICB2aXNpdFB0clR5cGUobm9kZSkKKyAg
ICB7CisgICAgICAgIC8vIEludGVudGlvbmFsbHkgYmxhbmsKKyAgICB9CisKKyAgICB2aXNpdEFy
cmF5UmVmVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgdGhpcy52aXNpdE5hdGl2ZVR5cGUocHJv
Z3JhbS5pbnRyaW5zaWNzLnVpbnQzMik7CisgICAgICAgIHRoaXMudmlzaXROYXRpdmVUeXBlKHBy
b2dyYW0uaW50cmluc2ljcy51aW50MzIpOworICAgIH0KKworICAgIHZpc2l0QXJyYXlUeXBlKG5v
ZGUpCisgICAgeworICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5vZGUubnVtRWxlbWVudHMu
dmFsdWU7ICsraSkgeworICAgICAgICAgICAgdGhpcy5uYW1lQ29tcG9uZW50cy5wdXNoKCJbIik7
CisgICAgICAgICAgICB0aGlzLm5hbWVDb21wb25lbnRzLnB1c2goaS50b1N0cmluZygpKTsKKyAg
ICAgICAgICAgIHRoaXMubmFtZUNvbXBvbmVudHMucHVzaCgiXSIpOworICAgICAgICAgICAgbm9k
ZS5lbGVtZW50VHlwZS52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMubmFtZUNvbXBvbmVu
dHMucG9wKCk7CisgICAgICAgICAgICB0aGlzLm5hbWVDb21wb25lbnRzLnBvcCgpOworICAgICAg
ICAgICAgdGhpcy5uYW1lQ29tcG9uZW50cy5wb3AoKTsKKyAgICAgICAgfQorICAgIH0KKworICAg
IHZpc2l0U3RydWN0VHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0IGJ1aWx0SW5TdHJ1Y3Rz
ID0gWworICAgICAgICAgICAgInN0cnVjdCB2ZWMyPD4geyBpbnQzMiB4OyBpbnQzMiB5IH0iLAor
ICAgICAgICAgICAgInN0cnVjdCB2ZWMyPD4geyB1aW50MzIgeDsgdWludDMyIHk7IH0iLAorICAg
ICAgICAgICAgInN0cnVjdCB2ZWMyPD4geyBmbG9hdDMyIHg7IGZsb2F0MzIgeTsgfSIsCisgICAg
ICAgICAgICAic3RydWN0IHZlYzI8PiB7IGZsb2F0NjQgeDsgZmxvYXQ2NCB5OyB9IiwKKyAgICAg
ICAgICAgICJzdHJ1Y3QgdmVjMzw+IHsgaW50MzIgeDsgaW50MzIgeTsgaW50MzIgejsgfSIsCisg
ICAgICAgICAgICAic3RydWN0IHZlYzM8PiB7IHVpbnQzMiB4OyB1aW50MzIgeTsgdWludDMyIHo7
IH0iLAorICAgICAgICAgICAgInN0cnVjdCB2ZWMzPD4geyBmbG9hdDMyIHg7IGZsb2F0MzIgeTsg
ZmxvYXQzMiB6OyB9IiwKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVjMzw+IHsgZmxvYXQ2NCB4OyBm
bG9hdDY0IHk7IGZsb2F0NjQgejsgfSIsCisgICAgICAgICAgICAic3RydWN0IHZlYzQ8PiB7IGlu
dDMyIHg7IGludDMyIHk7IGludDMyIHo7IGludDMyIHc7IH0iLAorICAgICAgICAgICAgInN0cnVj
dCB2ZWM0PD4geyB1aW50MzIgeDsgdWludDMyIHk7IHVpbnQzMiB6OyB1aW50MzIgdzsgfSIsCisg
ICAgICAgICAgICAic3RydWN0IHZlYzQ8PiB7IGZsb2F0MzIgeDsgZmxvYXQzMiB5OyBmbG9hdDMy
IHo7IGZsb2F0MzIgdzsgfSIsCisgICAgICAgICAgICAic3RydWN0IHZlYzQ8PiB7IGZsb2F0NjQg
eDsgZmxvYXQ2NCB5OyBmbG9hdDY0IHo7IGZsb2F0NjQgdzsgfSIKKyAgICAgICAgXTsKKyAgICAg
ICAgZm9yIChsZXQgYnVpbHRJblN0cnVjdCBvZiBidWlsdEluU3RydWN0cykgeworICAgICAgICAg
ICAgaWYgKG5vZGUudG9TdHJpbmcoKSA9PSBidWlsdEluU3RydWN0KSB7CisgICAgICAgICAgICAg
ICAgdGhpcy5yZXN1bHQucHVzaCh7IG5hbWU6IHRoaXMubmFtZUNvbXBvbmVudHMuam9pbigiIiks
IGlkOiB0aGlzLl9jdXJyZW50SWQrKywgdHlwZTogdGhpcy50eXBlTWFwLmdldChub2RlLnRvU3Ry
aW5nKCkpLmlkIH0pOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBub2RlLmZpZWxkcykgeworICAgICAg
ICAgICAgbGV0IGRvdFByZWZpeCA9IHRoaXMubmFtZUNvbXBvbmVudHMubGVuZ3RoID4gMDsKKyAg
ICAgICAgICAgIGlmIChkb3RQcmVmaXgpCisgICAgICAgICAgICAgICAgdGhpcy5uYW1lQ29tcG9u
ZW50cy5wdXNoKCIuIik7CisgICAgICAgICAgICB0aGlzLm5hbWVDb21wb25lbnRzLnB1c2goZmll
bGQubmFtZSk7CisgICAgICAgICAgICBmaWVsZC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIHRo
aXMubmFtZUNvbXBvbmVudHMucG9wKCk7CisgICAgICAgICAgICBpZiAoZG90UHJlZml4KQorICAg
ICAgICAgICAgICAgIHRoaXMubmFtZUNvbXBvbmVudHMucG9wKCk7CisgICAgICAgIH0KKyAgICB9
Cit9CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU0wubWQgYi9U
b29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU0wubWQKaW5kZXggN2M2MjYyOWQ1ODBkNmFj
MmQ4Mjg0NGFhZDhkZWVhNjUwZGFiNDE0MC4uZDNiNjY1Njc4MjZhNTFkZDZjNzU0ZDRlOWIyNGQ3
NTc4OTcyYmIzZCAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV1NM
Lm1kCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1dTTC5tZApAQCAtNDczLDcg
KzQ3Myw3IEBAIFdTTCBpcyBhIHR5cGUtc2FmZSBsYW5ndWFnZSBiYXNlZCBvbiBDIHN5bnRheC4g
SXQgZWxpbWluYXRlcyBzb21lIEMgZmVhdHVyZXMsIGxpCiBUaGUgZm9sbG93aW5nIGFkZGl0aW9u
YWwgbGltaXRhdGlvbnMgbWF5IGJlIHBsYWNlZCBvbiBhIFdTTCBwcm9ncmFtOgogCiAtIGBkZXZp
Y2VgLCBgY29uc3RhbnRgLCBhbmQgYHRocmVhZGdyb3VwYCBwb2ludGVycyBjYW5ub3QgcG9pbnQg
dG8gZGF0YSB0aGF0IG1heSBoYXZlIHBvaW50ZXJzIGluIGl0LiBUaGlzIHNhZmV0eSBjaGVjayBp
cyBub3QgZG9uZSBhcyBwYXJ0IG9mIHRoZSBub3JtYWwgdHlwZSBzeXN0ZW0gY2hlY2tzLiBJdCdz
IHBlcmZvcm1lZCBvbmx5IGFmdGVyIGluc3RhbnRpYXRpb24uCi0tIFBvaW50ZXJzIGFuZCBhcnJh
eSByZWZlcmVuY2VzIChjb2xsZWN0aXZlbHksICpyZWZlcmVuY2VzKikgbWF5IGJlIHJlc3RyaWN0
ZWQgdG8gc3VwcG9ydCBjb21waWxpbmcgdG8gU1BJUi1WICpsb2dpY2FsIG1vZGUqLiBJbiB0aGlz
IG1vZGUsIHJlZmVyZW5jZXMgbWF5IG5ldmVyIHBvaW50IHRvIGRhdGEgc3RydWN0dXJlcyB0aGF0
IGhhdmUgcmVmZXJlbmNlcyBpbiB0aGVtLiBSZWZlcmVuY2VzIG11c3QgYmUgaW5pdGlhbGl6ZWQg
dXBvbiBkZWNsYXJhdGlvbiBhbmQgbmV2ZXIgcmVhc3NpZ25lZC4gRnVuY3Rpb25zIHRoYXQgcmV0
dXJuIHJlZmVyZW5jZXMgbXVzdCBoYXZlIG9uZSByZXR1cm4gcG9pbnQuIFRlcm5hcnkgZXhwcmVz
c2lvbnMgbWF5IG5vdCByZXR1cm4gcmVmZXJlbmNlcy4KKy0gUG9pbnRlcnMgYW5kIGFycmF5IHJl
ZmVyZW5jZXMgKGNvbGxlY3RpdmVseSwgKnJlZmVyZW5jZXMqKSBtYXkgYmUgcmVzdHJpY3RlZCB0
byBzdXBwb3J0IGNvbXBpbGluZyB0byBTUElSLVYgKmxvZ2ljYWwgbW9kZSouIEluIHRoaXMgbW9k
ZSwgYXJyYXlzIG11c3Qgbm90IHRyYW5zaXRpdmVseSBob2xkIHJlZmVyZW5jZXMuIFJlZmVyZW5j
ZXMgbXVzdCBiZSBpbml0aWFsaXplZCB1cG9uIGRlY2xhcmF0aW9uIGFuZCBuZXZlciByZWFzc2ln
bmVkLiBGdW5jdGlvbnMgdGhhdCByZXR1cm4gcmVmZXJlbmNlcyBtdXN0IGhhdmUgb25lIHJldHVy
biBwb2ludC4gVGVybmFyeSBleHByZXNzaW9ucyBtYXkgbm90IHJldHVybiByZWZlcmVuY2VzLgog
LSBHcmFwaGljcyBlbnRyeSBwb2ludHMgbXVzdCB0cmFuc2l0aXZlbHkgbmV2ZXIgcmVmZXIgdG8g
dGhlIGB0aHJlYWRncm91cGAgbWVtb3J5IHNwYWNlLgogCiAKZGlmZiAtLWdpdCBhL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9pbmRleC5odG1sCmluZGV4IGE5Njk3ZmUwNzgyMTI4ZWEwZGVhMDE1ZDM3MmQwZjIw
ZDFkODM0MmMuLjNhN2U5NDhiZTY3ZDBiNWMwNWJiMTljMmVmMTQzMDlhMTE5NzM4ZTQgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKKysrIGIvVG9v
bHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvaW5kZXguaHRtbApAQCAtMzAwLDggKzMwMCw4IEBA
IGZ1bmN0aW9uIGRvQ29tcGlsZVByZXNlbnRTaGFkZXJTb3VyY2UoKSB7CiAgICAgcHJvZ3JhbSA9
IHJlc3VsdDsKICAgICBhdmFpbGFibGVWZXJ0ZXhTaGFkZXJzID0gW107CiAgICAgYXZhaWxhYmxl
RnJhZ21lbnRTaGFkZXJzID0gW107Ci0gICAgZm9yIChmdW5jdGlvbk5hbWVzIG9mIHByb2dyYW0u
ZnVuY3Rpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGZvciAoZnVuYyBvZiBmdW5jdGlvbk5hbWVz
KSB7CisgICAgZm9yIChsZXQgZnVuY3Rpb25OYW1lcyBvZiBwcm9ncmFtLmZ1bmN0aW9ucy52YWx1
ZXMoKSkgeworICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmN0aW9uTmFtZXMpIHsKICAgICAg
ICAgICAgIGlmIChmdW5jLnNoYWRlclR5cGUgPT0gInZlcnRleCIpCiAgICAgICAgICAgICAgICAg
YXZhaWxhYmxlVmVydGV4U2hhZGVycy5wdXNoKGZ1bmMpOwogICAgICAgICAgICAgaWYgKGZ1bmMu
c2hhZGVyVHlwZSA9PSAiZnJhZ21lbnQiKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>323116</attachid>
            <date>2017-10-07 19:55:50 -0700</date>
            <delta_ts>2017-10-12 11:45:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-177998-20171007195549.patch</filename>
            <type>text/plain</type>
            <size>48471</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIzMDI0CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggOGE4MWIzMTFjMjZiNzYwZDZmZjE3Mzg3ODcxMzkxYmMy
Y2VhZTdjYi4uN2JhODFmYjI5YTQzMzUyMDgxNGVhMDk0YzJjZWE0YjQ0YTQyN2UyZSAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDk2
IEBACisyMDE3LTEwLTA3ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+
CisKKyAgICAgICAgRW1pdCBTUElSLVYgZnJvbSBXU0wgY29tcGlsZXIgKFBhcnQgMSkKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Nzk5OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgcGF0Y2ggaW1w
bGVtZW50cyB0aGUgZmlyc3QgaGFsZiBvZiBhIFNQSVItViBjb2RlZ2VuIHBoYXNlIGZvciBXU0wu
CisgICAgICAgIFRoaXMgaW5jbHVkZXMgYWxsIHRoZSBvcGVyYXRpb25zIHdoaWNoIGFyZW4ndCBh
Y3R1YWxseSBlbWl0dGluZyB0aGUgY29udGVudHMKKyAgICAgICAgb2YgZnVuY3Rpb25zIHRoZW1z
ZWx2ZXMuIEZvciBleGFtcGxlLCB0aGlzIGluY2x1ZGVzIHRoaW5ncyBsaWtlIHJlcHJlc2VudGlu
ZworICAgICAgICBXU0wgdHlwZXMgd2l0aCBTUElSLVYgdHlwZXMsIGFuZCBkZWNsYXJpbmcgc2hh
ZGVycycgaW5wdXRzIGFuZCBvdXRwdXRzLiBBCisgICAgICAgIGZ1dHVyZSBwYXRjaCB3aWxsIGFj
dHVhbGx5IGVtaXQgdGhlIGNvbnRlbnRzIG9mIGZ1bmN0aW9ucy4KKworICAgICAgICBUaGVyZSBh
cmUgdHdvIGhlbHBlciB2aXNpdG9ycyBoZXJlOiBTUElSVlR5cGVBbmFseXplciB3aGljaCBnZW5l
cmF0ZXMgU1BJUi1WCisgICAgICAgIHR5cGVzIGZyb20gV1NMIHR5cGVzLCBhbmQgU1BJUlZQcmlt
aXRpdmVWYXJpYWJsZUFuYWx5emVyIHdoaWNoIGlkZW50aWZpZXMKKyAgICAgICAgaW5wdXQgYW5k
IG91dHB1dCB2YXJpYWJsZXMgZnJvbSBhIHNoYWRlciAoYW5kIGFzc2lnbnMgbG9jYXRpb24gdmFs
dWVzIHRvCisgICAgICAgIGVhY2ggb25lKS4KKworICAgICAgICBUaGlzIHBhdGNoIGlzIGN1cnJl
bnRseSBwdXJzdWluZyB0aGUgImxvZ2ljYWwgbW9kZSIgZGV0YWlsZWQgaW4KKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3Njk2Ny4gSW4gdGhpcyBtb2Rl
LCBlYWNoIHBvaW50ZXIgYW5kCisgICAgICAgIGFycmF5IHJlZmVyZW5jZSBvcGVyYXRpb24gY2Fu
IGJlIHN0YXRpY2FsbHkgdHJhY2VkIHRvIHRoZSB2YXJpYWJsZSBvciBhcnJheSBpdAorICAgICAg
ICBpcyBvcGVyYXRpbmcgb24uCisKKyAgICAgICAgVGhpcyBoYXMgdGhlIGludGVyZXN0aW5nIHBy
b3BlcnR5IHdoZXJlIGFjY2Vzc2luZyBhIHBvaW50ZXIgaW5zaWRlIGFuIGFycmF5IGlzCisgICAg
ICAgIGZvcmJpZGRlbiwgYmVjYXVzZSB0aGUgYXJyYXkgaW5kZXggbWF5IGJlIGNvbXB1dGVkIGF0
IHJ1bnRpbWUsIHNvIHRoZSBjb21waWxlcgorICAgICAgICBjYW4ndCBrbm93IGF0IGNvbXBpbGUg
dGltZSB3aGljaCB2YXJpYWJsZSB0aGUgcG9pbnRlciBvcGVyYXRpb24gd2lsbCBiZQorICAgICAg
ICBhY2Nlc3NpbmcuIEhvd2V2ZXIsIHRoaXMgaXNuJ3QgdHJ1ZSBmb3Igc3RydWN0czsgdGhlIHBy
b2dyYW0gbXVzdCBzdGF0aWNhbGx5CisgICAgICAgIHN0YXRlIHdoaWNoIHN0cnVjdCBtZW1iZXIg
aXQgaXMgYWNjZXNzaW5nLiBUaGVyZWZvcmUsIHBvaW50ZXJzIG9yIGFycmF5CisgICAgICAgIHJl
ZmVyZW5jZXMgbXVzdCBub3QgdHJhbnNpdGl2ZWx5IGFwcGVhciB3aXRoaW4gYW4gYXJyYXksIGJ1
dCB0aGV5IG1heSBhcHBlYXIKKyAgICAgICAgd2l0aGluIGEgc3RydWN0LiBUaGUgc2FtZSBsb2dp
YyBhcHBsaWVzIHRvIGFycmF5IHJlZmVyZW5jZXM7IHRob3NlIGdldCBsb3dlcmVkCisgICAgICAg
IHRvIGp1c3QgdHdvIGluZGV4ZXMgaW4gU1BJUi1WIChhIGxvd2VyIGJvdW5kIGFuZCBhbiB1cHBl
ciBib3VuZCkuCisKKyAgICAgICAgU28sIG91dHNpZGUgb2YgYW4gYXJyYXksIFNQSVItViB0eXBl
cyBkb24ndCBuZWVkIHRvIGluY2x1ZGUgYW55IHBvaW50ZXJzIGJlY2F1c2UKKyAgICAgICAgYW55
IG9wZXJhdGlvbiB3aXRoIHRoZSBwb2ludGVyIGRvZXNuJ3QgbmVlZCBhY2Nlc3MgdG8gdGhlIHJ1
bnRpbWUgdmFsdWUgb2YgdGhlCisgICAgICAgIHBvaW50ZXIuIEluc2lkZSBvZiBhbiBhcnJheSwg
cG9pbnRlcnMgYXJlIGZvcmJpZGRlbi4gVGhlcmVmb3JlLCBTUElSLVYgdHlwZXMKKyAgICAgICAg
d2lsbCBuZXZlciBpbmNsdWRlIGFueSBwb2ludGVycy4KKworICAgICAgICBUaGlzIG1lYW5zIHRo
YXQsIGZvciBleGFtcGxlLCBXU0wgY2FuIHJlcHJlc2VudCBhIGxpbmtlZCBsaXN0IGluIGxvZ2lj
YWwgbW9kZS4KKyAgICAgICAgSG93ZXZlciwgYSBXU0wgcHJvZ3JhbSBjYW5ub3QgaXRlcmF0ZSBh
Y3Jvc3MgdGhlIGxpc3QsIGJlY2F1c2UgdGhhdCB3b3VsZCByZXF1aXJlCisgICAgICAgIGFzc2ln
bmluZyB0byBhIHBvaW50ZXIuIFNvIGluc3RlYWQsIGEgcHJvZ3JhbSB1c2luZyBhIGxpbmtlZCBs
aXN0IGNvdWxkIG9ubHkgc2F5CisgICAgICAgIHNvbWV0aGluZyBsaWtlICJsaXN0LnB0ci0+cHRy
LT5wdHItPnZhbHVlIi4KKworICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVD
aGVja2VyLmpzOgorICAgICAgICAoTGF0ZUNoZWNrZXIucHJvdG90eXBlLl9jaGVja1NoYWRlclR5
cGUpOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVItVi5qczoKKyAgICAg
ICAgKFNQSVJWLk9wZXJhbmRDaGVja2VyLnByb3RvdHlwZS5faXNTdGFyKToKKyAgICAgICAgKFNQ
SVJWLk9wZXJhbmRDaGVja2VyLnByb3RvdHlwZS5uZXh0Q29tcGFyaXNvblR5cGUpOgorICAgICAg
ICAoU1BJUlYuT3BlcmFuZENoZWNrZXIucHJvdG90eXBlLmZpbmFsaXplKToKKyAgICAgICAgKFNQ
SVJWLk9wZXJhbmRDaGVja2VyKToKKyAgICAgICAgKiBXZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
UElSVi5odG1sOgorICAgICAgICAqIFdlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWQ29kZWdl
bi5qczogQWRkZWQuCisgICAgICAgIChmaW5kRW50cnlQb2ludHMpOgorICAgICAgICAoZW1pdFR5
cGVzLmRvRW1pdFR5cGVzKToKKyAgICAgICAgKGVtaXRUeXBlcyk6CisgICAgICAgIChDb25zdGFu
dEZpbmRlci5wcm90b3R5cGUudmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUpOgorICAgICAgICAoQ29u
c3RhbnRGaW5kZXIpOgorICAgICAgICAoZ2VuZXJhdGVTUElSVik6CisgICAgICAgICogV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU1BJUlZUeXBlQW5hbHl6ZXIuanM6IEFkZGVkLgorICAgICAgICAo
U1BJUlZUeXBlQW5hbHl6ZXIpOgorICAgICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBl
LmdldCBwcm9ncmFtKToKKyAgICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS5nZXQg
dHlwZU1hcCk6CisgICAgICAgIChTUElSVlR5cGVBbmFseXplci5wcm90b3R5cGUuZ2V0IGN1cnJl
bnRJZCk6CisgICAgICAgIChTUElSVlR5cGVBbmFseXplci5wcm90b3R5cGUuZ2V0IHN0YWNrKToK
KyAgICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdFR5cGVSZWYpOgorICAg
ICAgICAoU1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLl9lbmNvdW50ZXJUeXBlKToKKyAgICAg
ICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdE51bGxUeXBlKToKKyAgICAgICAg
KFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdEdlbmVyaWNMaXRlcmFsVHlwZSk6Cisg
ICAgICAgIChTUElSVlR5cGVBbmFseXplci5wcm90b3R5cGUudmlzaXROYXRpdmVUeXBlKToKKyAg
ICAgICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdEVudW1UeXBlKToKKyAgICAg
ICAgKFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdFB0clR5cGUpOgorICAgICAgICAo
U1BJUlZUeXBlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0QXJyYXlSZWZUeXBlKToKKyAgICAgICAg
KFNQSVJWVHlwZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdEFycmF5VHlwZSk6CisgICAgICAgIChT
UElSVlR5cGVBbmFseXplci5wcm90b3R5cGUudmlzaXRTdHJ1Y3RUeXBlKToKKyAgICAgICAgKiBX
ZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVlZhcmlhYmxlQW5hbHl6ZXIuanM6IEFkZGVkLgor
ICAgICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyKToKKyAgICAgICAgKFNQSVJW
UHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5cGUuZ2V0IHByb2dyYW0pOgorICAgICAg
ICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS5nZXQgdHlwZU1hcCk6
CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLmdldCBj
dXJyZW50SWQpOgorICAgICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3Rv
dHlwZS5nZXQgY3VycmVudExvY2F0aW9uKToKKyAgICAgICAgKFNQSVJWUHJpbWl0aXZlVmFyaWFi
bGVBbmFseXplci5wcm90b3R5cGUuZ2V0IG5hbWVDb21wb25lbnRzKToKKyAgICAgICAgKFNQSVJW
UHJpbWl0aXZlVmFyaWFibGVBbmFseXplci5wcm90b3R5cGUuZ2V0IHJlc3VsdCk6CisgICAgICAg
IChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0VHlwZVJlZik6
CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0
TnVsbFR5cGUpOgorICAgICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3Rv
dHlwZS52aXNpdEdlbmVyaWNMaXRlcmFsVHlwZSk6CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZh
cmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0TmF0aXZlVHlwZSk6CisgICAgICAgIChTUElS
VlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIucHJvdG90eXBlLnZpc2l0RW51bVR5cGUpOgorICAg
ICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS52aXNpdFB0clR5
cGUpOgorICAgICAgICAoU1BJUlZQcmltaXRpdmVWYXJpYWJsZUFuYWx5emVyLnByb3RvdHlwZS52
aXNpdEFycmF5UmVmVHlwZSk6CisgICAgICAgIChTUElSVlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6
ZXIucHJvdG90eXBlLnZpc2l0QXJyYXlUeXBlKToKKyAgICAgICAgKFNQSVJWUHJpbWl0aXZlVmFy
aWFibGVBbmFseXplci5wcm90b3R5cGUudmlzaXRTdHJ1Y3RUeXBlKToKKyAgICAgICAgKiBXZWJH
UFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU0wubWQ6CisgICAgICAgICogV2ViR1BVU2hhZGluZ0xhbmd1
YWdlUkkvaW5kZXguaHRtbDoKKwogMjAxNy0wOS0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEVuYWJsZSBnaWdhY2FnZSBvbiBpT1MKZGlmZiAtLWdpdCBhL1Rv
b2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL0xhdGVDaGVja2VyLmpzIGIvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvTGF0ZUNoZWNrZXIuanMKaW5kZXggODE0MGEyMmY1YmU0ZWZiZTFm
MjBlZDQ5OTgwOGQ1M2I3YTkyOWQ5Ny4uNWQxZWY5NWEyMzAyYjJkNmZkYjllMDMwZWFiMzJlNmE3
MGQ3NjZkZSAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGF0ZUNo
ZWNrZXIuanMKKysrIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvTGF0ZUNoZWNrZXIu
anMKQEAgLTM2LDYgKzM2LDcgQEAgY2xhc3MgTGF0ZUNoZWNrZXIgZXh0ZW5kcyBWaXNpdG9yIHsK
ICAgICAKICAgICBfY2hlY2tTaGFkZXJUeXBlKG5vZGUpCiAgICAgeworICAgICAgICAvLyBGSVhN
RTogVGlnaHRlbiB0aGVzZSBjaGVja3MuIEZvciBub3csIHdlIHNob3VsZCBvbmx5IGFjY2VwdCBp
bnQzMiwgdWludDMyLCBmbG9hdDMyLCBhbmQgZmxvYXQ2NC4KICAgICAgICAgbGV0IGFzc2VydFBy
aW1pdGl2ZSA9IHR5cGUgPT4gewogICAgICAgICAgICAgaWYgKCF0eXBlLmlzUHJpbWl0aXZlKQog
ICAgICAgICAgICAgICAgIHRocm93IG5ldyBXVHlwZUVycm9yKG5vZGUub3JpZ2luLm9yaWdpblN0
cmluZywgIlNoYWRlciBzaWduYXR1cmUgY2Fubm90IGluY2x1ZGUgbm9uLXByaW1pdGl2ZSB0eXBl
OiAiICsgdHlwZSk7CmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9T
UElSLVYuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSLVYuanMKaW5kZXgg
OGZhOTNmMmY4YmE3MjI3N2FiNGYyYmY3MDhjZWZlNjVlZjdhNjkwYi4uODBjYTcwNDRhYjA2NmVi
ODMxNDY2Y2JmMDIzYjY5NGZiNzhlOGVhMiAxMDA2NDQKLS0tIGEvVG9vbHMvV2ViR1BVU2hhZGlu
Z0xhbmd1YWdlUkkvU1BJUi1WLmpzCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJ
L1NQSVItVi5qcwpAQCAtMzgsNyArMzgsNyBAQCBmdW5jdGlvbiBTUElSVihqc29uKSB7CiAgICAg
ICAgIHN3aXRjaCAoa2luZC5jYXRlZ29yeSkgewogICAgICAgICBjYXNlICJCaXRFbnVtIjoKICAg
ICAgICAgY2FzZSAiVmFsdWVFbnVtIjoKLSAgICAgICAgICAgIGxldCBlbnVtZXJhbnRzID0ge307
CisgICAgICAgICAgICBsZXQgZW51bWVyYW50cyA9IHsgY2F0ZWdvcnk6IGtpbmQuY2F0ZWdvcnkg
fTsKICAgICAgICAgICAgIGZvciAobGV0IGVudW1lcmFudCBvZiBraW5kLmVudW1lcmFudHMpIHsK
ICAgICAgICAgICAgICAgICBlbnVtZXJhbnRzW2VudW1lcmFudC5lbnVtZXJhbnRdID0gZW51bWVy
YW50OwogICAgICAgICAgICAgfQpAQCAtMTEyLDIwICsxMTIsMjQgQEAgZnVuY3Rpb24gU1BJUlYo
anNvbikgewogICAgICAgICAgICAgdGhpcy5fcGFyYW1ldGVycyA9IFtdOwogICAgICAgICB9CiAK
LSAgICAgICAgbmV4dENvbXBhcmlzb25UeXBlKG9wZXJhbmQpCisgICAgICAgIF9pc1N0YXIob3Bl
cmFuZEluZm8pCiAgICAgICAgIHsKLSAgICAgICAgICAgIGlmICh0aGlzLl9vcGVyYW5kSW5mb0lu
ZGV4ID49IHRoaXMuX29wZXJhbmRJbmZvcy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJTcGVjaWZpZWQgb3BlcmFuZCBkb2VzIG5vdCBjb3JyZXNwb25kIHRvIGFueSB0
aGF0IHRoZSBpbnN0cnVjdGlvbiBleHBlY3RzLiIpOwotICAgICAgICAgICAgbGV0IG9wZXJhbmRJ
bmZvID0gdGhpcy5fb3BlcmFuZEluZm9zW3RoaXMuX29wZXJhbmRJbmZvSW5kZXhdOwotCi0gICAg
ICAgICAgICBsZXQgaXNTdGFyID0gb3BlcmFuZEluZm8ucXVhbnRpZmllciAmJiBvcGVyYW5kSW5m
by5xdWFudGlmaWVyID09ICIqIjsKICAgICAgICAgICAgIHN3aXRjaCAob3BlcmFuZEluZm8ua2lu
ZCkgewogICAgICAgICAgICAgICAgIGNhc2UgIkxpdGVyYWxDb250ZXh0RGVwZW5kZW50TnVtYmVy
IjoKICAgICAgICAgICAgICAgICBjYXNlICJMaXRlcmFsU3BlY0NvbnN0YW50T3BJbnRlZ2VyIjoK
ICAgICAgICAgICAgICAgICAgICAgLy8gVGhlc2UgdHlwZXMgY2FuIGJlIGFueSB3aWR0aC4KLSAg
ICAgICAgICAgICAgICAgICAgaXNTdGFyID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgfQorICAg
ICAgICAgICAgcmV0dXJuIG9wZXJhbmRJbmZvLnF1YW50aWZpZXIgJiYgb3BlcmFuZEluZm8ucXVh
bnRpZmllciA9PSAiKiI7CisgICAgICAgIH0KKworICAgICAgICBuZXh0Q29tcGFyaXNvblR5cGUo
b3BlcmFuZCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKHRoaXMuX29wZXJhbmRJbmZvSW5k
ZXggPj0gdGhpcy5fb3BlcmFuZEluZm9zLmxlbmd0aCkKKyAgICAgICAgICAgICAgICB0aHJvdyBu
ZXcgRXJyb3IoIlNwZWNpZmllZCBvcGVyYW5kIGRvZXMgbm90IGNvcnJlc3BvbmQgdG8gYW55IHRo
YXQgdGhlIGluc3RydWN0aW9uIGV4cGVjdHMuIik7CisgICAgICAgICAgICBsZXQgb3BlcmFuZElu
Zm8gPSB0aGlzLl9vcGVyYW5kSW5mb3NbdGhpcy5fb3BlcmFuZEluZm9JbmRleF07CisKKyAgICAg
ICAgICAgIGxldCBpc1N0YXIgPSB0aGlzLl9pc1N0YXIob3BlcmFuZEluZm8pOwogCiAgICAgICAg
ICAgICBpZiAodGhpcy5fcGFyYW1ldGVycy5sZW5ndGggIT0gMCkgewogICAgICAgICAgICAgICAg
IGxldCByZXN1bHQgPSB0aGlzLl9wYXJhbWV0ZXJzWzBdOwpAQCAtMTc2LDggKzE4MCw5IEBAIGZ1
bmN0aW9uIFNQSVJWKGpzb24pIHsKICAgICAgICAgICAgIGlmICh0aGlzLl9wYXJhbWV0ZXJzLmxl
bmd0aCAhPSAwKQogICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiT3BlcmFuZCBub3Qg
c3BlY2lmaWVkIGZvciBwYXJhbWV0ZXIuIik7CiAgICAgICAgICAgICBmb3IgKGxldCBpID0gdGhp
cy5fb3BlcmFuZEluZm9JbmRleDsgaSA8IHRoaXMuX29wZXJhbmRJbmZvcy5sZW5ndGg7ICsraSkg
ewotICAgICAgICAgICAgICAgIGxldCBxdWFudGlmaWVyID0gdGhpcy5fb3BlcmFuZEluZm9zW2ld
LnF1YW50aWZpZXI7Ci0gICAgICAgICAgICAgICAgaWYgKHF1YW50aWZpZXIgIT0gIj8iICYmIHF1
YW50aWZpZXIgIT0gIioiKQorICAgICAgICAgICAgICAgIGxldCBvcGVyYW5kSW5mbyA9IHRoaXMu
X29wZXJhbmRJbmZvc1tpXTsKKyAgICAgICAgICAgICAgICBsZXQgcXVhbnRpZmllciA9IG9wZXJh
bmRJbmZvLnF1YW50aWZpZXI7CisgICAgICAgICAgICAgICAgaWYgKHF1YW50aWZpZXIgIT0gIj8i
ICYmICF0aGlzLl9pc1N0YXIob3BlcmFuZEluZm8pKQogICAgICAgICAgICAgICAgICAgICB0aHJv
dyBuZXcgRXJyb3IoIkRpZCBub3Qgc3BlY2lmeSBvcGVyYW5kICIgKyBpICsgIiB0byBpbnN0cnVj
dGlvbi4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtMTkwLDcgKzE5NSw2IEBAIGZ1
bmN0aW9uIFNQSVJWKGpzb24pIHsKICAgICAgICAgcmVzdWx0Lm9wc1thdHRyaWJ1dGVOYW1lXSA9
IGNsYXNzIHsKICAgICAgICAgICAgIGNvbnN0cnVjdG9yKC4uLm9wZXJhbmRzKQogICAgICAgICAg
ICAgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBIYW5kbGUgT3BDb25zdGFudCwgT3BTcGVj
Q29uc3RhbnQsIE9wU3BlY0NvbnN0YW50T3Agc3BlY2lhbGx5LgogICAgICAgICAgICAgICAgIGxl
dCBvcGVyYW5kQ2hlY2tlciA9IG5ldyBPcGVyYW5kQ2hlY2tlcihpbnN0cnVjdGlvbi5vcGVyYW5k
cyk7CiAgICAgICAgICAgICAgICAgZm9yIChsZXQgb3BlcmFuZCBvZiBvcGVyYW5kcykKICAgICAg
ICAgICAgICAgICAgICAgb3BlcmFuZENoZWNrZXIuY2hlY2sob3BlcmFuZCk7CmRpZmYgLS1naXQg
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1sIGIvVG9vbHMvV2ViR1BV
U2hhZGluZ0xhbmd1YWdlUkkvU1BJUlYuaHRtbAppbmRleCAyMWFjNGUyMTBhYzRmY2Q4NTFiNGFj
MmIxMDdjMWYzNjBhODQxMzcyLi5kMTczZjdlNzI1MWVhOTg1YTZmOWI1NjUzNGZkYTQ1OGZkMjE2
MGYxIDEwMDY0NAotLS0gYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVi5odG1s
CisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJWLmh0bWwKQEAgLTEsNTQg
KzEsMjM1IEBACiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+Ci08c2NyaXB0IHNyYz0i
U1BJUi1WLmpzIj48L3NjcmlwdD4KKzxzdHlsZT4KK3RkIHsKKyAgICBib3JkZXI6IHNvbGlkIGJs
YWNrIDFweDsKK30KKzwvc3R5bGU+CisgICAgPCEtLSBGSVhNRTogTWlncmF0ZSB0byBFUzYgbW9k
dWxlcyAtLT4KKyAgICA8c2NyaXB0IHNyYz0iTm9kZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IlR5cGUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJSZWZlcmVuY2VUeXBl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVmFsdWUuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
UmV3cml0ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWaXNpdG9yLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ3JlYXRlTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IkNyZWF0ZUxpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iUHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKworICAgIDxzY3Jp
cHQgc3JjPSJBZGRyZXNzU3BhY2UuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJBbm9u
eW1vdXNWYXJpYWJsZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkFycmF5UmVmVHlw
ZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkFycmF5VHlwZS5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IkFzc2lnbm1lbnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJBdXRvV3JhcHBlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkJsb2NrLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQm9vbExpdGVyYWwuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJCcmVhay5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNh
bGxFeHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2FsbEZ1bmN0aW9u
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iQ2hlY2suanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJDaGVja0xpdGVyYWxUeXBlcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkNoZWNrTG9vcHMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVja1Jl
Y3Vyc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrUmVjdXJzaXZlVHlw
ZXMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVja1JldHVybnMuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJDaGVja1VucmVhY2hhYmxlQ29kZS5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IkNoZWNrV3JhcHBlZC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkNoZWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDbG9uZVByb2dy
YW0uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDb21tYUV4cHJlc3Npb24uanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJDb25zdGV4cHJGb2xkZXIuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJDb25zdGV4cHJUeXBlUGFyYW1ldGVyLmpzIj48L3NjcmlwdD4KKyAg
ICA8c2NyaXB0IHNyYz0iQ29udGludWUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJD
b252ZXJ0UHRyVG9BcnJheVJlZkV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJEb1doaWxlTG9vcC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkRvdEV4cHJl
c3Npb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJEb3VibGVMaXRlcmFsLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRG91YmxlTGl0ZXJhbFR5cGUuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJEZXJlZmVyZW5jZUV4cHJlc3Npb24uanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJFQXJyYXlSZWYuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJFQnVmZmVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRUJ1ZmZlckJ1aWxkZXIu
anMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJFUHRyLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iRW51bUxpdGVyYWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJF
bnVtTWVtYmVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRW51bVR5cGUuanMiPjwv
c2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJFdmFsdWF0aW9uQ29tbW9uLmpzIj48L3NjcmlwdD4K
KyAgICA8c2NyaXB0IHNyYz0iRXZhbHVhdG9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iRXhwcmVzc2lvbkZpbmRlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkV4dGVy
bmFsT3JpZ2luLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRmllbGQuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJGaW5kSGlnaFpvbWJpZXMuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJGbGF0dGVuUHJvdG9jb2xFeHRlbmRzLmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iRmxhdHRlbmVkU3RydWN0T2Zmc2V0R2F0aGVyZXIuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJGbG9hdExpdGVyYWwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSJGbG9hdExpdGVyYWxUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRm9s
ZENvbnN0ZXhwcnMuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGb3JMb29wLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRnVuYy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IkZ1bmNEZWYuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJGdW5jSW5zdGFu
dGlhdG9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iRnVuY1BhcmFtZXRlci5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkZ1bmN0aW9uTGlrZUJsb2NrLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iSGlnaFpvbWJpZUZpbmRlci5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IklkZW50aXR5RXhwcmVzc2lvbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlw
dCBzcmM9IklmU3RhdGVtZW50LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW5kZXhF
eHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW5mZXJUeXBlc0ZvckNh
bGwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJJbmxpbmUuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJJbmxpbmVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
SW5zdGFudGlhdGVJbW1lZGlhdGVzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW50
TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IkludExpdGVyYWxUeXBlLmpz
Ij48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iSW50cmluc2ljcy5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IkxhdGVDaGVja2VyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iTGV4ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJMZXhlclRva2VuLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTGl0ZXJhbFR5cGVDaGVja2VyLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iTG9naWNhbEV4cHJlc3Npb24uanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJMb2dpY2FsTm90LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
TG9vcENoZWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJNYWtlQXJyYXlSZWZF
eHByZXNzaW9uLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTWFrZVB0ckV4cHJlc3Np
b24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYW1lQ29udGV4dC5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9Ik5hbWVGaW5kZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSJOYW1lUmVzb2x2ZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJOYXRp
dmVGdW5jLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTmF0aXZlRnVuY0luc3RhbmNl
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iTmF0aXZlVHlwZS5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ik5hdGl2ZVR5cGVJbnN0YW5jZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9Ik5vcm1hbFVzZVByb3BlcnR5UmVzb2x2ZXIuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJOdWxsTGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
Ik51bGxUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iT3JpZ2luS2luZC5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9Ik92ZXJsb2FkUmVzb2x1dGlvbkZhaWx1cmUuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQYXJzZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlByZXBhcmUuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQcm9wZXJ0
eVJlc29sdmVyLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvZ3JhbS5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlByb2dyYW1XaXRoVW5uZWNlc3NhcnlUaGluZ3NSZW1v
dmVkLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUHJvdG9jb2wuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJQcm90b2NvbERlY2wuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSJQcm90b2NvbEZ1bmNEZWNsLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
UHJvdG9jb2xSZWYuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJQdHJUeXBlLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iUmVhZE1vZGlmeVdyaXRlRXhwcmVzc2lvbi5qcyI+
PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJlY3Vyc2lvbkNoZWNrZXIuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSJSZWN1cnNpdmVUeXBlQ2hlY2tlci5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9IlJlc29sdmVOYW1lcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IlJlc29sdmVPdmVybG9hZEltcGwuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJS
ZXNvbHZlUHJvcGVydGllcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJlc29sdmVU
eXBlRGVmcy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlJldHVybi5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlJldHVybkNoZWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxz
Y3JpcHQgc3JjPSJSZXR1cm5FeGNlcHRpb24uanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3Jj
PSJTUElSLVYuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTUElSVkNvZGVnZW4uanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTUElSVlR5cGVBbmFseXplci5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9IlNQSVJWVmFyaWFibGVBbmFseXplci5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9IlN0YW5kYXJkTGlicmFyeS5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlN0YXRlbWVudENsb25lci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IlN0cnVjdExheW91dEJ1aWxkZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJTdHJ1
Y3RUeXBlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU3Vic3RpdHV0aW9uLmpzIj48
L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iU3dpdGNoQ2FzZS5qcyI+PC9zY3JpcHQ+CisgICAg
PHNjcmlwdCBzcmM9IlN3aXRjaFN0YXRlbWVudC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IlN5bnRoZXNpemVFbnVtRnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iU3ludGhlc2l6ZVN0cnVjdEFjY2Vzc29ycy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9IlRyYXBTdGF0ZW1lbnQuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJUeXBlRGVm
LmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZURlZlJlc29sdmVyLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZU9yVmFyaWFibGVSZWYuanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSJUeXBlUGFyYW1ldGVyUmV3cml0ZXIuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJUeXBlUmVmLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlw
ZVZhcmlhYmxlLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iVHlwZVZhcmlhYmxlVHJh
Y2tlci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlR5cGVkVmFsdWUuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSJVaW50TGl0ZXJhbC5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9IlVpbnRMaXRlcmFsVHlwZS5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
IlVuaWZpY2F0aW9uQ29udGV4dC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlVucmVh
Y2hhYmxlQ29kZUNoZWNrZXIuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWYXJpYWJs
ZURlY2wuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJWYXJpYWJsZVJlZi5qcyI+PC9z
Y3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IlZpc2l0aW5nU2V0LmpzIj48L3NjcmlwdD4KKyAgICA8
c2NyaXB0IHNyYz0iV1N5bnRheEVycm9yLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0i
V1RyYXBFcnJvci5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9IldUeXBlRXJyb3IuanMi
Pjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSJXaGlsZUxvb3AuanMiPjwvc2NyaXB0PgorICAg
IDxzY3JpcHQgc3JjPSJXcmFwQ2hlY2tlci5qcyI+PC9zY3JpcHQ+CiA8c2NyaXB0PgorICAgIGxl
dCBjb2RlID0gYAorc3RydWN0IFZlcnRleElucHV0IHsKKyAgICBmbG9hdDIgcG9zaXRpb247Cisg
ICAgZmxvYXQzIGNvbG9yOworfQorCitzdHJ1Y3QgVmVydGV4T3V0cHV0IHsKKyAgICBmbG9hdDQg
d3NsX1Bvc2l0aW9uOworICAgIGZsb2F0NCBjb2xvcjsKK30KKworc3RydWN0IEZyYWdtZW50T3V0
cHV0IHsKKyAgICBmbG9hdDQgd3NsX0NvbG9yOworfQorCit2ZXJ0ZXggVmVydGV4T3V0cHV0IHZl
cnRleFNoYWRlcihWZXJ0ZXhJbnB1dCB2ZXJ0ZXhJbnB1dCkgeworICAgIFZlcnRleE91dHB1dCBy
ZXN1bHQ7CisgICAgcmVzdWx0LndzbF9Qb3NpdGlvbiA9IGZsb2F0NCh2ZXJ0ZXhJbnB1dC5wb3Np
dGlvbiwgMC4sIDEuKTsKKyAgICByZXN1bHQuY29sb3IgPSBmbG9hdDQodmVydGV4SW5wdXQuY29s
b3IsIDEpOworICAgIAorICAgIGludFsxMF0gYTsKKyAgICBpbnRbMTB1XSBiOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK2ZyYWdtZW50IEZyYWdtZW50T3V0cHV0IGZyYWdtZW50U2hhZGVyKFZl
cnRleE91dHB1dCBzdGFnZUluKSB7CisgICAgRnJhZ21lbnRPdXRwdXQgcmVzdWx0OworICAgIHJl
c3VsdC53c2xfQ29sb3IgPSBzdGFnZUluLmNvbG9yOworICAgIHJldHVybiByZXN1bHQ7Cit9YDsK
IAogICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwgZnVuY3Rpb24gKCkgewogICAg
ICAgICBmZXRjaCgic3BpcnYuY29yZS5ncmFtbWFyLmpzb24iKS50aGVuKHJlc3BvbnNlID0+IHJl
c3BvbnNlLmpzb24oKSkudGhlbihmdW5jdGlvbiAoanNvbikgewogICAgICAgICAgICAgbGV0IHNw
aXJ2ID0gU1BJUlYoanNvbik7Ci0gICAgICAgICAgICBsZXQgYXNzZW1ibGVyID0gbmV3IFNQSVJW
QXNzZW1ibGVyKCk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMu
Q2FwYWJpbGl0eShzcGlydi5raW5kcy5DYXBhYmlsaXR5LlNoYWRlcikpOwotICAgICAgICAgICAg
YXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLk1lbW9yeU1vZGVsKHNwaXJ2LmtpbmRzLkFk
ZHJlc3NpbmdNb2RlbC5Mb2dpY2FsLCBzcGlydi5raW5kcy5NZW1vcnlNb2RlbC5HTFNMNDUwKSk7
Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRW50cnlQb2ludChz
cGlydi5raW5kcy5FeGVjdXRpb25Nb2RlbC5GcmFnbWVudCwgNSwgIm1haW4iLCAxMCwgMTcpKTsK
LSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5FeGVjdXRpb25Nb2Rl
KDUsIHNwaXJ2LmtpbmRzLkV4ZWN1dGlvbk1vZGUuT3JpZ2luTG93ZXJMZWZ0KSk7Ci0gICAgICAg
ICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRGVjb3JhdGUoMTAsIHNwaXJ2Lmtp
bmRzLkRlY29yYXRpb24uTG9jYXRpb24sIDApKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBl
bmQobmV3IHNwaXJ2Lm9wcy5EZWNvcmF0ZSgxNCwgc3BpcnYua2luZHMuRGVjb3JhdGlvbi5EZXNj
cmlwdG9yU2V0LCAwKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5v
cHMuRGVjb3JhdGUoMTQsIHNwaXJ2LmtpbmRzLkRlY29yYXRpb24uQmluZGluZywgMSkpOwotICAg
ICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkRlY29yYXRlKDE3LCBzcGly
di5raW5kcy5EZWNvcmF0aW9uLkxvY2F0aW9uLCAwKSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIu
YXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVZvaWQoMykpOwotICAgICAgICAgICAgYXNzZW1ibGVy
LmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVGdW5jdGlvbig0LCAzKSk7Ci0gICAgICAgICAgICBh
c3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZUZsb2F0KDcsIDMyKSk7Ci0gICAgICAg
ICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVZlY3Rvcig4LCA3LCA0KSk7
Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVBvaW50ZXIo
OSwgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLk91dHB1dCwgOCkpOwotICAgICAgICAgICAgYXNz
ZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlZhcmlhYmxlKDksIDEwLCBzcGlydi5raW5kcy5T
dG9yYWdlQ2xhc3MuT3V0cHV0KSk7Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBz
cGlydi5vcHMuVHlwZUltYWdlKDExLCA3LCBzcGlydi5raW5kcy5EaW1bIjJEIl0sIDAsIDAsIDAs
IDEsIHNwaXJ2LmtpbmRzLkltYWdlRm9ybWF0LlVua25vd24pKTsKLSAgICAgICAgICAgIGFzc2Vt
Ymxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlU2FtcGxlZEltYWdlKDEyLCAxMSkpOwotICAg
ICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVQb2ludGVyKDEzLCBz
cGlydi5raW5kcy5TdG9yYWdlQ2xhc3MuVW5pZm9ybUNvbnN0YW50LCAxMikpOwotICAgICAgICAg
ICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlZhcmlhYmxlKDEzLCAxNCwgc3BpcnYu
a2luZHMuU3RvcmFnZUNsYXNzLlVuaWZvcm1Db25zdGFudCkpOwotICAgICAgICAgICAgYXNzZW1i
bGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVQb2ludGVyKDE2LCBzcGlydi5raW5kcy5TdG9y
YWdlQ2xhc3MuSW5wdXQsIDgpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNw
aXJ2Lm9wcy5WYXJpYWJsZSgxNiwgMTcsIHNwaXJ2LmtpbmRzLlN0b3JhZ2VDbGFzcy5JbnB1dCkp
OwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVWZWN0b3Io
MTgsIDcsIDIpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5G
dW5jdGlvbigzLCA1LCBzcGlydi5raW5kcy5GdW5jdGlvbkNvbnRyb2wuTm9uZSwgNCkpOwotICAg
ICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkxhYmVsKDYpKTsKLSAgICAg
ICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5Mb2FkKDEyLCAxNSwgMTQpKTsK
LSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5Mb2FkKDgsIDE5LCAx
NykpOwotICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlZlY3RvclNo
dWZmbGUoMTgsIDIwLCAxOSwgMTksIDAsIDEpKTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBl
bmQobmV3IHNwaXJ2Lm9wcy5JbWFnZVNhbXBsZUltcGxpY2l0TG9kKDgsIDIxLCAxNSwgMjApKTsK
LSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5TdG9yZSgxMCwgMjEp
KTsKLSAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5SZXR1cm4oKSk7
Ci0gICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRnVuY3Rpb25FbmQo
KSk7Ci0gICAgICAgICAgICBsZXQgcmVzdWx0ID0gYXNzZW1ibGVyLnJlc3VsdDsKLSAgICAgICAg
ICAgIAorICAgICAgICAgICAgbGV0IHByb2dyYW0gPSBwcmVwYXJlKCIvaW50ZXJuYWwvdGVzdCIs
IDAsIGNvZGUpOworICAgICAgICAgICAgbGV0IHJlc3VsdCA9IGdlbmVyYXRlU1BJUlYoc3BpcnYs
IHByb2dyYW0pOworICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICAgICAgfSkudGhlbihm
dW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgICAgIGxldCByZXN1bHRFbGVtZW50ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoIlJlc3VsdCIpOwogICAgICAgICAgICAgd2hpbGUgKHJlc3VsdEVs
ZW1lbnQuY2hpbGROb2Rlcy5sZW5ndGggIT0gMCkKICAgICAgICAgICAgICAgICByZXN1bHRFbGVt
ZW50LnJlbW92ZUNoaWxkKHJlc3VsdEVsZW1lbnQuY2hpbGROb2Rlc1swXSk7CiAgICAgICAgICAg
ICBsZXQgYW5jaG9yID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwotICAgICAgICAgICAg
bGV0IGJsb2IgPSBuZXcgQmxvYihbcmVzdWx0XSwgeyB0eXBlOiAiYXBwbGljYXRpb24vb2N0ZXQt
YmluYXJ5IiB9KTsKKyAgICAgICAgICAgIGxldCBibG9iID0gbmV3IEJsb2IoW3Jlc3VsdC5maWxl
XSwgeyB0eXBlOiAiYXBwbGljYXRpb24vb2N0ZXQtYmluYXJ5IiB9KTsKICAgICAgICAgICAgIGFu
Y2hvci5ocmVmID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgICAgICAgIGFuY2hv
ci5kb3dubG9hZCA9ICJyZXN1bHQuc3B2IjsKICAgICAgICAgICAgIGFuY2hvci50ZXh0Q29udGVu
dCA9ICJEb3dubG9hZCBnZW5lcmF0ZWQgU1BJUi1WIjsKICAgICAgICAgICAgIHJlc3VsdEVsZW1l
bnQuYXBwZW5kQ2hpbGQoYW5jaG9yKTsKKworICAgICAgICAgICAgbGV0IHRhYmxlID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgidGFibGUiKTsKKyAgICAgICAgICAgIGxldCB0YWJsZUhlYWRlciA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRoZWFkIik7CisgICAgICAgICAgICBsZXQgaGVhZGVy
Um93ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHIiKTsKKyAgICAgICAgICAgIGxldCBuYW1l
SGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKKyAgICAgICAgICAgIG5hbWVI
ZWFkZXIudGV4dENvbnRlbnQgPSAiQXR0cmlidXRlIG5hbWUiOworICAgICAgICAgICAgbGV0IGxv
Y2F0aW9uSGVhZGVyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidGgiKTsKKyAgICAgICAgICAg
IGxvY2F0aW9uSGVhZGVyLnRleHRDb250ZW50ID0gIkxvY2F0aW9uIjsKKyAgICAgICAgICAgIGhl
YWRlclJvdy5hcHBlbmRDaGlsZChuYW1lSGVhZGVyKTsKKyAgICAgICAgICAgIGhlYWRlclJvdy5h
cHBlbmRDaGlsZChsb2NhdGlvbkhlYWRlcik7CisgICAgICAgICAgICB0YWJsZUhlYWRlci5hcHBl
bmRDaGlsZChoZWFkZXJSb3cpOworICAgICAgICAgICAgdGFibGUuYXBwZW5kQ2hpbGQodGFibGVI
ZWFkZXIpOworICAgICAgICAgICAgZm9yIChsZXQgbG9jYXRpb24gb2YgcmVzdWx0LmxvY2F0aW9u
cykgeworICAgICAgICAgICAgICAgIGxldCB0YWJsZVJvdyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoInRyIik7CisgICAgICAgICAgICAgICAgbGV0IG5hbWVFbGVtZW50ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgidGQiKTsKKyAgICAgICAgICAgICAgICBuYW1lRWxlbWVudC50ZXh0Q29udGVu
dCA9IGxvY2F0aW9uLm5hbWU7CisgICAgICAgICAgICAgICAgbGV0IGxvY2F0aW9uRWxlbWVudCA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRkIik7CisgICAgICAgICAgICAgICAgbG9jYXRpb25F
bGVtZW50LnRleHRDb250ZW50ID0gbG9jYXRpb24ubG9jYXRpb247CisgICAgICAgICAgICAgICAg
dGFibGVSb3cuYXBwZW5kQ2hpbGQobmFtZUVsZW1lbnQpOworICAgICAgICAgICAgICAgIHRhYmxl
Um93LmFwcGVuZENoaWxkKGxvY2F0aW9uRWxlbWVudCk7CisgICAgICAgICAgICAgICAgdGFibGUu
YXBwZW5kQ2hpbGQodGFibGVSb3cpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmVzdWx0
RWxlbWVudC5hcHBlbmRDaGlsZCh0YWJsZSk7CiAgICAgICAgIH0pLnRoZW4odW5kZWZpbmVkLCBm
dW5jdGlvbiAoKSB7CiAgICAgICAgICAgICBsZXQgcmVzdWx0RWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCJSZXN1bHQiKTsKICAgICAgICAgICAgIHdoaWxlIChyZXN1bHRFbGVtZW50
LmNoaWxkTm9kZXMubGVuZ3RoICE9IDApCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5n
TGFuZ3VhZ2VSSS9TUElSVkNvZGVnZW4uanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TUElSVkNvZGVnZW4uanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGI1NGNhOWE0ZmM0MDhkYWUxMTY4ZTNhN2Ew
YzgyZDVlODdjN2Y5YwotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5n
dWFnZVJJL1NQSVJWQ29kZWdlbi5qcwpAQCAtMCwwICsxLDMzMyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitmdW5jdGlvbiBn
ZW5lcmF0ZVNQSVJWKHNwaXJ2LCBwcm9ncmFtKQoreworCisgICAgZnVuY3Rpb24gZmluZEVudHJ5
UG9pbnRzKCkKKyAgICB7CisgICAgICAgIGxldCBlbnRyeVBvaW50cyA9IFtdOworICAgICAgICBm
b3IgKGxldCBmdW5jdGlvbk5hbWVzIG9mIHByb2dyYW0uZnVuY3Rpb25zLnZhbHVlcygpKSB7Cisg
ICAgICAgICAgICBmb3IgKGxldCBmdW5jIG9mIGZ1bmN0aW9uTmFtZXMpIHsKKyAgICAgICAgICAg
ICAgICBzd2l0Y2ggKGZ1bmMuc2hhZGVyVHlwZSkgeworICAgICAgICAgICAgICAgIGNhc2UgInZl
cnRleCI6CisgICAgICAgICAgICAgICAgY2FzZSAiZnJhZ21lbnQiOgorICAgICAgICAgICAgICAg
ICAgICBlbnRyeVBvaW50cy5wdXNoKGZ1bmMpOworICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGVudHJ5UG9pbnRzOworICAgIH0KKworICAgIGxldCBjdXJyZW50SWQgPSAzOworICAgIGxl
dCBjdXJyZW50TG9jYXRpb24gPSAwOworICAgIGxldCB0eXBlTWFwID0gbmV3IE1hcCgpOworICAg
IGxldCByZXZlcnNlVHlwZU1hcCA9IG5ldyBNYXAoKTsKKyAgICBsZXQgZW50cnlQb2ludHMgPSBb
XTsKKworICAgIHR5cGVNYXAuc2V0KHByb2dyYW0uaW50cmluc2ljcy52b2lkLCBjdXJyZW50SWQr
Kyk7CisgICAgdHlwZU1hcC5zZXQocHJvZ3JhbS5pbnRyaW5zaWNzLnVpbnQzMiwgY3VycmVudElk
KyspOworCisgICAgZm9yIChsZXQgZW50cnlQb2ludCBvZiBmaW5kRW50cnlQb2ludHMoKSkgewor
ICAgICAgICBsZXQgaW5saW5lZFNoYWRlciA9IHByb2dyYW0uZnVuY0luc3RhbnRpYXRvci5nZXRV
bmlxdWUoZW50cnlQb2ludCwgW10pOworICAgICAgICBfaW5saW5lRnVuY3Rpb24ocHJvZ3JhbSwg
aW5saW5lZFNoYWRlciwgbmV3IFZpc2l0aW5nU2V0KGVudHJ5UG9pbnQpKTsKKworICAgICAgICBs
ZXQgdHlwZUFuYWx5emVyID0gbmV3IFNQSVJWVHlwZUFuYWx5emVyKHByb2dyYW0sIHR5cGVNYXAs
IGN1cnJlbnRJZCk7CisgICAgICAgIGlubGluZWRTaGFkZXIudmlzaXQodHlwZUFuYWx5emVyKTsK
KyAgICAgICAgY3VycmVudElkID0gdHlwZUFuYWx5emVyLmN1cnJlbnRJZDsKKworICAgICAgICBj
dXJyZW50TG9jYXRpb24gPSAwOworICAgICAgICBsZXQgdmFsdWVBbmFseXplciA9IG5ldyBTUElS
VlByaW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIocHJvZ3JhbSwgdHlwZU1hcCwgY3VycmVudElkLCBj
dXJyZW50TG9jYXRpb24pOworICAgICAgICBpbmxpbmVkU2hhZGVyLnJldHVyblR5cGUudmlzaXQo
dmFsdWVBbmFseXplcik7CisgICAgICAgIGN1cnJlbnRJZCA9IHZhbHVlQW5hbHl6ZXIuY3VycmVu
dElkOworICAgICAgICBsZXQgb3V0cHV0VmFsdWVzID0gdmFsdWVBbmFseXplci5yZXN1bHQ7CisK
KyAgICAgICAgbGV0IGlucHV0VmFsdWVzID0gW107CisgICAgICAgIGZvciAobGV0IHBhcmFtZXRl
ciBvZiBpbmxpbmVkU2hhZGVyLnBhcmFtZXRlcnMpIHsKKyAgICAgICAgICAgIGlmIChwYXJhbWV0
ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgU3RydWN0VHlwZSkgeworICAgICAgICAgICAgICAgIGxl
dCB2YWx1ZUFuYWx5emVyID0gbmV3IFNQSVJWUHJpbWl0aXZlVmFyaWFibGVBbmFseXplcihwcm9n
cmFtLCB0eXBlTWFwLCBjdXJyZW50SWQsIGN1cnJlbnRMb2NhdGlvbiwgcGFyYW1ldGVyLm5hbWUp
OworICAgICAgICAgICAgICAgIHBhcmFtZXRlci52aXNpdCh2YWx1ZUFuYWx5emVyKTsKKyAgICAg
ICAgICAgICAgICBjdXJyZW50SWQgPSB2YWx1ZUFuYWx5emVyLmN1cnJlbnRJZDsKKyAgICAgICAg
ICAgICAgICBjdXJyZW50TG9jYXRpb24gPSB2YWx1ZUFuYWx5emVyLmN1cnJlbnRMb2NhdGlvbjsK
KyAgICAgICAgICAgICAgICBmb3IgKGxldCBpbnB1dFZhbHVlIG9mIHZhbHVlQW5hbHl6ZXIucmVz
dWx0KQorICAgICAgICAgICAgICAgICAgICBpbnB1dFZhbHVlcy5wdXNoKGlucHV0VmFsdWUpOwor
ICAgICAgICAgICAgfSBlbHNlIGlmIChwYXJhbWV0ZXIudHlwZS50eXBlIGluc3RhbmNlb2YgQXJy
YXlSZWZUeXBlKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB0aGlzLgor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgZW50cnlQb2ludHMucHVzaCh7IGlk
OiBjdXJyZW50SWQrKywgc2hhZGVyOiBpbmxpbmVkU2hhZGVyLCBpbnB1dHM6IGlucHV0VmFsdWVz
LCBvdXRwdXRzOiBvdXRwdXRWYWx1ZXMgfSk7CisgICAgfQorICAgIAorICAgIGZvciAobGV0IHR5
cGUgb2YgdHlwZU1hcCkgeworICAgICAgICBpZiAodHlwZW9mIHR5cGVbMV0gPT0gIm9iamVjdCIp
CisgICAgICAgICAgICByZXZlcnNlVHlwZU1hcC5zZXQodHlwZVsxXS5pZCwgdHlwZVswXSk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldmVyc2VUeXBlTWFwLnNldCh0eXBlWzFdLCB0eXBl
WzBdKTsKKyAgICB9CisKKworCisKKworCisKKworCisKKworCisKKworICAgIGZ1bmN0aW9uIGVt
aXRUeXBlcyhhc3NlbWJsZXIpIHsKKyAgICAgICAgbGV0IGVtaXR0ZWRUeXBlcyA9IG5ldyBTZXQo
KTsKKyAgICAgICAgZnVuY3Rpb24gZG9FbWl0VHlwZXModHlwZSkKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGVtaXR0ZWRUeXBlcy5oYXModHlwZVswXSkpCisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgZW1pdHRlZFR5cGVzLmFkZCh0eXBlWzBdKTsKKyAgICAgICAgICAg
IGlmICh0eXBlb2YgdHlwZVsxXSA9PSAib2JqZWN0IikgeworICAgICAgICAgICAgICAgIGlmICh0
eXBlWzFdLmZpZWxkVHlwZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgZmllbGRU
eXBlIG9mIHR5cGVbMV0uZmllbGRUeXBlcykgeworICAgICAgICAgICAgICAgICAgICAgICAgbGV0
IGtleSA9IHJldmVyc2VUeXBlTWFwLmdldChmaWVsZFR5cGUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbGV0IHZhbHVlID0gdHlwZU1hcC5nZXQoa2V5KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGRvRW1pdFR5cGVzKFtrZXksIHZhbHVlXSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlWzBdKSB7CisgICAgICAgICAgICAgICAgICAg
IGNhc2UgInN0cnVjdCB2ZWMyPD4geyBpbnQzMiB4OyBpbnQzMiB5IH0iOgorICAgICAgICAgICAg
ICAgICAgICBjYXNlICJzdHJ1Y3QgdmVjMjw+IHsgdWludDMyIHg7IHVpbnQzMiB5OyB9IjoKKyAg
ICAgICAgICAgICAgICAgICAgY2FzZSAic3RydWN0IHZlYzI8PiB7IGZsb2F0MzIgeDsgZmxvYXQz
MiB5OyB9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RydWN0IHZlYzI8PiB7IGZsb2F0
NjQgeDsgZmxvYXQ2NCB5OyB9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RydWN0IHZl
YzM8PiB7IGludDMyIHg7IGludDMyIHk7IGludDMyIHo7IH0iOgorICAgICAgICAgICAgICAgICAg
ICBjYXNlICJzdHJ1Y3QgdmVjMzw+IHsgdWludDMyIHg7IHVpbnQzMiB5OyB1aW50MzIgejsgfSI6
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0cnVjdCB2ZWMzPD4geyBmbG9hdDMyIHg7IGZs
b2F0MzIgeTsgZmxvYXQzMiB6OyB9IjoKKyAgICAgICAgICAgICAgICAgICAgY2FzZSAic3RydWN0
IHZlYzM8PiB7IGZsb2F0NjQgeDsgZmxvYXQ2NCB5OyBmbG9hdDY0IHo7IH0iOgorICAgICAgICAg
ICAgICAgICAgICBjYXNlICJzdHJ1Y3QgdmVjNDw+IHsgaW50MzIgeDsgaW50MzIgeTsgaW50MzIg
ejsgaW50MzIgdzsgfSI6CisgICAgICAgICAgICAgICAgICAgIGNhc2UgInN0cnVjdCB2ZWM0PD4g
eyB1aW50MzIgeDsgdWludDMyIHk7IHVpbnQzMiB6OyB1aW50MzIgdzsgfSI6CisgICAgICAgICAg
ICAgICAgICAgIGNhc2UgInN0cnVjdCB2ZWM0PD4geyBmbG9hdDMyIHg7IGZsb2F0MzIgeTsgZmxv
YXQzMiB6OyBmbG9hdDMyIHc7IH0iOgorICAgICAgICAgICAgICAgICAgICBjYXNlICJzdHJ1Y3Qg
dmVjNDw+IHsgZmxvYXQ2NCB4OyBmbG9hdDY0IHk7IGZsb2F0NjQgejsgZmxvYXQ2NCB3OyB9IjoK
KyAgICAgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5U
eXBlVmVjdG9yKHR5cGVbMV0uaWQsIHR5cGVbMV0uZmllbGRUeXBlc1swXSwgdHlwZVsxXS5maWVs
ZFR5cGVzLmxlbmd0aCkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBhc3NlbWJsZXIu
YXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZVN0cnVjdCh0eXBlWzFdLmlkLCAuLi50eXBlWzFdLmZp
ZWxkVHlwZXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCF0eXBlWzFdLmVsZW1lbnRUeXBlKQorICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCJVbmtub3duIHR5cGUhIik7CisgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgbGV0IGVsZW1lbnRUeXBlID0gdHlwZVsxXS5lbGVtZW50VHlwZTsKKyAgICAgICAgICAg
ICAgICAgICAgbGV0IGtleSA9IHJldmVyc2VUeXBlTWFwLmdldChlbGVtZW50VHlwZSk7CisgICAg
ICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IHR5cGVNYXAuZ2V0KGtleSk7CisgICAgICAgICAg
ICAgICAgICAgIGRvRW1pdFR5cGVzKFtrZXksIHZhbHVlXSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgbGV0IGlkID0gY3VycmVudElkKys7CisgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxlci5h
cHBlbmQobmV3IHNwaXJ2Lm9wcy5Db25zdGFudCh0eXBlTWFwLmdldChwcm9ncmFtLmludHJpbnNp
Y3MudWludDMyKSwgaWQsIHR5cGVbMV0ubnVtRWxlbWVudHMpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVBcnJheSh0eXBlWzFdLmlkLCBl
bGVtZW50VHlwZSwgaWQpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZVswXS5uYW1lKSB7CisgICAgICAgICAgICAg
ICAgY2FzZSAidm9pZCI6CisgICAgICAgICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3
IHNwaXJ2Lm9wcy5UeXBlVm9pZCh0eXBlWzFdKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIGNhc2UgImJvb2wiOgorICAgICAgICAgICAgICAgICAgICBhc3Nl
bWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZUJvb2wodHlwZVsxXSkpOworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJpbnQzMiI6CisgICAgICAg
ICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5UeXBlSW50KHR5cGVb
MV0sIDMyLCAxKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IGNhc2UgInVpbnQzMiI6CisgICAgICAgICAgICAgICAgY2FzZSAidWludDgiOgorICAgICAgICAg
ICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVHlwZUludCh0eXBlWzFd
LCAzMiwgMCkpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBj
YXNlICJmbG9hdDMyIjoKKyAgICAgICAgICAgICAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcg
c3BpcnYub3BzLlR5cGVGbG9hdCh0eXBlWzFdLCAzMikpOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICJmbG9hdDY0IjoKKyAgICAgICAgICAgICAgICAg
ICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVGbG9hdCh0eXBlWzFdLCA2NCkp
OworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZG9FbWl0VHlwZXMoW3Byb2dyYW0uaW50cmluc2lj
cy51aW50MzIsIHR5cGVNYXAuZ2V0KHByb2dyYW0uaW50cmluc2ljcy51aW50MzIpXSk7CisgICAg
ICAgIGZvciAobGV0IHR5cGUgb2YgdHlwZU1hcCkKKyAgICAgICAgICAgIGRvRW1pdFR5cGVzKHR5
cGUpCisgICAgfQorCisKKworCisKKworCisKKworCisKKworICAgIGxldCBjb25zdGFudHMgPSBu
ZXcgTWFwKCk7CisgICAgY2xhc3MgQ29uc3RhbnRGaW5kZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAg
ICAgICAgdmlzaXRHZW5lcmljTGl0ZXJhbFR5cGUobm9kZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgbGV0IHR5cGUgPSBub2RlLnR5cGU7CisgICAgICAgICAgICB3aGlsZSAodHlwZSBpbnN0YW5j
ZW9mIFR5cGVSZWYpCisgICAgICAgICAgICAgICAgdHlwZSA9IHR5cGUudHlwZTsKKyAgICAgICAg
ICAgIGxldCB2YWx1ZXM7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAg
IGNhc2UgcHJvZ3JhbS5pbnRyaW5zaWNzLmJvb2w6CisgICAgICAgICAgICAgICAgdmFsdWVzID0g
W25vZGUudmFsdWVdOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBw
cm9ncmFtLmludHJpbnNpY3MuaW50MzI6CisgICAgICAgICAgICBjYXNlIHByb2dyYW0uaW50cmlu
c2ljcy51aW50MzI6CisgICAgICAgICAgICBjYXNlIHByb2dyYW0uaW50cmluc2ljcy51aW50ODoK
KyAgICAgICAgICAgICAgICB2YWx1ZXMgPSBbbm9kZS52YWx1ZV0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgcHJvZ3JhbS5pbnRyaW5zaWNzLmZsb2F0OiB7CisgICAg
ICAgICAgICAgICAgbGV0IGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKE1hdGgubWF4KFVp
bnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQpKTsKKyAgICAgICAgICAgICAgICBsZXQgZmxvYXRWaWV3ID0gbmV3IEZsb2F0MzJBcnJheShh
cnJheUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgbGV0IHVpbnRWaWV3ID0gbmV3IFVpbnQzMkFy
cmF5KGFycmF5QnVmZmVyKTsKKyAgICAgICAgICAgICAgICBmbG9hdFZpZXdbMF0gPSBub2RlLnZh
bHVlOworICAgICAgICAgICAgICAgIHZhbHVlcyA9IHVpbnRWaWV3OworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FzZSBwcm9ncmFtLmludHJpbnNp
Y3MuZG91YmxlOiB7CisgICAgICAgICAgICAgICAgbGV0IGFycmF5QnVmZmVyID0gbmV3IEFycmF5
QnVmZmVyKE1hdGgubWF4KFVpbnQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULCBGbG9hdDY0QXJy
YXkuQllURVNfUEVSX0VMRU1FTlQpKTsKKyAgICAgICAgICAgICAgICBsZXQgZG91YmxlVmlldyA9
IG5ldyBGbG9hdDY0QXJyYXkoYXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgIGxldCB1aW50
VmlldyA9IG5ldyBVaW50MzJBcnJheShhcnJheUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgZG91
YmxlVmlld1swXSA9IG5vZGUudmFsdWU7CisgICAgICAgICAgICAgICAgdmFsdWVzID0gdWludFZp
ZXc7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVW5yZWNvZ25pemVkIGxp
dGVyYWwuIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjb25zdGFudHMuc2V0KG5vZGUs
IHsgaWQ6IGN1cnJlbnRJZCsrLCB0eXBlSWQ6IHR5cGVNYXAuZ2V0KHR5cGUpLCB0eXBlOiB0eXBl
LCB2YWx1ZXM6IHZhbHVlcyB9KTsKKyAgICAgICAgfQorICAgIH0KKyAgICBmb3IgKGxldCBlbnRy
eVBvaW50IG9mIGVudHJ5UG9pbnRzKQorICAgICAgICBlbnRyeVBvaW50LnNoYWRlci52aXNpdChu
ZXcgQ29uc3RhbnRGaW5kZXIoKSk7CisKKworCisKKworCisKKworCisKKworCisgICAgbGV0IGFz
c2VtYmxlciA9IG5ldyBTUElSVkFzc2VtYmxlcigpOworICAgIC8vIDEuIEFsbCBPcENhcGFiaWxp
dHkgaW5zdHJ1Y3Rpb25zCisgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkNhcGFi
aWxpdHkoc3BpcnYua2luZHMuQ2FwYWJpbGl0eS5TaGFkZXIpKTsKKyAgICBhc3NlbWJsZXIuYXBw
ZW5kKG5ldyBzcGlydi5vcHMuQ2FwYWJpbGl0eShzcGlydi5raW5kcy5DYXBhYmlsaXR5LkZsb2F0
NjQpKTsKKyAgICAvLyAyLiBPcHRpb25hbCBPcEV4dGVuc2lvbiBpbnN0cnVjdGlvbnMKKyAgICAv
LyAzLiBPcHRpb25hbCBPcEV4dEluc3RJbXBvcnQgaW5zdHJ1Y3Rpb25zCisgICAgLy8gNC4gVGhl
IHNpbmdsZSByZXF1aXJlZCBPcE1lbW9yeU1vZGVsIGluc3RydWN0aW9uCisgICAgLy8gRklYTUU6
IEZpZ3VyZSBvdXQgaWYgd2UgY2FuIHVzZSB0aGUgU2ltcGxlIG1lbW9yeSBtb2RlbCBpbnN0ZWFk
IG9mIHRoZSBHTFNMIG1lbW9yeSBtb2RlbC4KKyAgICAvLyBUaGUgc3BlYyBzYXlzIG5vdGhpbmcg
YWJvdXQgd2hhdCB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZW0gaXMuIPCfkq8KKyAgICBhc3Nl
bWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuTWVtb3J5TW9kZWwoc3BpcnYua2luZHMuQWRkcmVz
c2luZ01vZGVsLkxvZ2ljYWwsIHNwaXJ2LmtpbmRzLk1lbW9yeU1vZGVsLkdMU0w0NTApKTsKKwor
ICAgIC8vIDUuIEFsbCBlbnRyeSBwb2ludCBkZWNsYXJhdGlvbnMKKyAgICBmb3IgKGxldCBlbnRy
eVBvaW50IG9mIGVudHJ5UG9pbnRzKSB7CisgICAgICAgIGxldCBleGVjdXRpb25Nb2RlbDsKKyAg
ICAgICAgc3dpdGNoIChlbnRyeVBvaW50LnNoYWRlci5zaGFkZXJUeXBlKSB7CisgICAgICAgIGNh
c2UgInZlcnRleCI6CisgICAgICAgICAgICBleGVjdXRpb25Nb2RlbCA9IHNwaXJ2LmtpbmRzLkV4
ZWN1dGlvbk1vZGVsLlZlcnRleDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlICJm
cmFnbWVudCI6CisgICAgICAgICAgICBleGVjdXRpb25Nb2RlbCA9IHNwaXJ2LmtpbmRzLkV4ZWN1
dGlvbk1vZGVsLkZyYWdtZW50OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgbGV0IGlkID0gZW50cnlQb2ludC5pZDsKKyAgICAgICAgbGV0IG5hbWUgPSBlbnRyeVBvaW50
LnNoYWRlci5uYW1lOworICAgICAgICBsZXQgaW50ZXJmYWNlSWRzID0gW10KKyAgICAgICAgZm9y
IChsZXQgdmFsdWUgb2YgZW50cnlQb2ludC5pbnB1dHMpCisgICAgICAgICAgICBpbnRlcmZhY2VJ
ZHMucHVzaCh2YWx1ZS5pZCk7CisgICAgICAgIGZvciAobGV0IHZhbHVlIG9mIGVudHJ5UG9pbnQu
b3V0cHV0cykKKyAgICAgICAgICAgIGludGVyZmFjZUlkcy5wdXNoKHZhbHVlLmlkKTsKKyAgICAg
ICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkVudHJ5UG9pbnQoZXhlY3V0aW9uTW9k
ZWwsIGlkLCBuYW1lLCAuLi5pbnRlcmZhY2VJZHMpKTsKKyAgICB9CisKKyAgICAvLyA2LiBBbGwg
ZXhlY3V0aW9uIG1vZGUgZGVjbGFyYXRpb25zCisgICAgZm9yIChsZXQgZW50cnlQb2ludCBvZiBl
bnRyeVBvaW50cykgeworICAgICAgICBsZXQgaWQgPSBlbnRyeVBvaW50LmlkOworICAgICAgICBh
c3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRXhlY3V0aW9uTW9kZShpZCwgc3BpcnYua2lu
ZHMuRXhlY3V0aW9uTW9kZS5PcmlnaW5Mb3dlckxlZnQpKTsKKyAgICB9CisKKyAgICAvLyA3LiBU
aGVzZSBkZWJ1ZyBpbnN0cnVjdGlvbnMKKyAgICAvLyA4LiBBbGwgYW5ub3RhdGlvbiBpbnN0cnVj
dGlvbnMKKyAgICAvLyBGSVhNRTogVGhlcmUgYXJlIHByb2JhYmx5IG1vcmUgYW5ub3RhdGlvbnMg
dGhhdCBhcmUgcmVxdWlyZWQgdGhhbiBqdXN0IGxvY2F0aW9uLgorICAgIGxldCBsb2NhdGlvbnMg
PSBbXTsKKyAgICBmb3IgKGxldCBlbnRyeVBvaW50IG9mIGVudHJ5UG9pbnRzKSB7CisgICAgICAg
IHN3aXRjaCAoZW50cnlQb2ludC5zaGFkZXIuc2hhZGVyVHlwZSkgeworICAgICAgICBjYXNlICJ2
ZXJ0ZXgiOgorICAgICAgICAgICAgZm9yIChsZXQgaW5wdXQgb2YgZW50cnlQb2ludC5pbnB1dHMp
IHsKKyAgICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRGVjb3Jh
dGUoaW5wdXQuaWQsIHNwaXJ2LmtpbmRzLkRlY29yYXRpb24uTG9jYXRpb24sIGlucHV0LmxvY2F0
aW9uKSk7CisgICAgICAgICAgICAgICAgbG9jYXRpb25zLnB1c2goeyBuYW1lOiBlbnRyeVBvaW50
LnNoYWRlci5uYW1lICsgIi4iICsgaW5wdXQubmFtZSwgbG9jYXRpb246IGlucHV0LmxvY2F0aW9u
IH0pOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgImZy
YWdtZW50IjoKKyAgICAgICAgICAgIGZvciAobGV0IG91dHB1dCBvZiBlbnRyeVBvaW50Lm91dHB1
dHMpIHsKKyAgICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuRGVj
b3JhdGUob3V0cHV0LmlkLCBzcGlydi5raW5kcy5EZWNvcmF0aW9uLkxvY2F0aW9uLCBvdXRwdXQu
bG9jYXRpb24pKTsKKyAgICAgICAgICAgICAgICBsb2NhdGlvbnMucHVzaCh7IG5hbWU6IGVudHJ5
UG9pbnQuc2hhZGVyLm5hbWUgKyAiLiIgKyBvdXRwdXQubmFtZSwgbG9jYXRpb246IG91dHB1dC5s
b2NhdGlvbiB9KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgLy8gOS4gQWxsIHR5cGUgZGVjbGFyYXRpb25zLCBhbGwgY29uc3RhbnQg
aW5zdHJ1Y3Rpb25zLCBhbmQgYWxsIGdsb2JhbCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMKKyAgICBl
bWl0VHlwZXMoYXNzZW1ibGVyKTsKKyAgICBsZXQgZnVuY3Rpb25UeXBlID0gY3VycmVudElkKys7
CisgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLlR5cGVGdW5jdGlvbihmdW5jdGlv
blR5cGUsIHR5cGVNYXAuZ2V0KHByb2dyYW0uaW50cmluc2ljcy52b2lkKSkpOworICAgIGZvciAo
bGV0IGNvbnN0YW50IG9mIGNvbnN0YW50cykgeworICAgICAgICBpZiAoY29uc3RhbnRbMV0udHlw
ZSA9PSBwcm9ncmFtLmludHJpbnNpY3MuYm9vbCkgeworICAgICAgICAgICAgaWYgKGNvbnN0YW50
WzFdLnZhbHVlWzBdKQorICAgICAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2
Lm9wcy5Db25zdGFudFRydWUoY29uc3RhbnRbMV0uaWQpKTsKKyAgICAgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuQ29uc3RhbnRGYWxz
ZShjb25zdGFudFsxXS5pZCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGFzc2VtYmxl
ci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5Db25zdGFudChjb25zdGFudFsxXS50eXBlSWQsIGNvbnN0
YW50WzFdLmlkLCAuLi5jb25zdGFudFsxXS52YWx1ZXMpKTsKKyAgICB9CisgICAgZm9yIChsZXQg
ZW50cnlQb2ludCBvZiBlbnRyeVBvaW50cykgeworICAgICAgICBmb3IgKGxldCBpbnB1dCBvZiBl
bnRyeVBvaW50LmlucHV0cykKKyAgICAgICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2
Lm9wcy5WYXJpYWJsZShpbnB1dC50eXBlLCBpbnB1dC5pZCwgc3BpcnYua2luZHMuU3RvcmFnZUNs
YXNzLklucHV0KSk7CisgICAgICAgIGZvciAobGV0IG91dHB1dCBvZiBlbnRyeVBvaW50Lm91dHB1
dHMpCisgICAgICAgICAgICBhc3NlbWJsZXIuYXBwZW5kKG5ldyBzcGlydi5vcHMuVmFyaWFibGUo
b3V0cHV0LnR5cGUsIG91dHB1dC5pZCwgc3BpcnYua2luZHMuU3RvcmFnZUNsYXNzLk91dHB1dCkp
OworICAgIH0KKworICAgIC8vIDEwLiBBbGwgZnVuY3Rpb24gZGVjbGFyYXRpb25zCisgICAgLy8g
MTEuIEFsbCBmdW5jdGlvbiBkZWZpbml0aW9ucworICAgIGZvciAobGV0IGVudHJ5UG9pbnQgb2Yg
ZW50cnlQb2ludHMpIHsKKyAgICAgICAgYXNzZW1ibGVyLmFwcGVuZChuZXcgc3BpcnYub3BzLkZ1
bmN0aW9uKHR5cGVNYXAuZ2V0KHByb2dyYW0uaW50cmluc2ljcy52b2lkKSwgZW50cnlQb2ludC5p
ZCwgW3NwaXJ2LmtpbmRzLkZ1bmN0aW9uQ29udHJvbC5Ob25lXSwgZnVuY3Rpb25UeXBlKSk7Cisg
ICAgICAgIGFzc2VtYmxlci5hcHBlbmQobmV3IHNwaXJ2Lm9wcy5GdW5jdGlvbkVuZCgpKTsKKyAg
ICB9CisKKyAgICByZXR1cm4geyBmaWxlOiBhc3NlbWJsZXIucmVzdWx0LCBsb2NhdGlvbnM6IGxv
Y2F0aW9ucyB9OworfQorCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VS
SS9TUElSVlR5cGVBbmFseXplci5qcyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQ
SVJWVHlwZUFuYWx5emVyLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYwMTIzNzQ0NWRkMzg4NDQyN2M0NjM0Mzhl
MTRhNDA4YTJmODdhNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFu
Z3VhZ2VSSS9TUElSVlR5cGVBbmFseXplci5qcwpAQCAtMCwwICsxLDE0MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFz
cyBTUElSVlR5cGVBbmFseXplciBleHRlbmRzIFZpc2l0b3IgeworICAgIGNvbnN0cnVjdG9yKHBy
b2dyYW0sIHR5cGVNYXAsIGN1cnJlbnRJZCkKKyAgICB7CisgICAgICAgIHN1cGVyKCk7CisgICAg
ICAgIHRoaXMuX3Byb2dyYW0gPSBwcm9ncmFtOworICAgICAgICB0aGlzLl90eXBlTWFwID0gdHlw
ZU1hcDsKKyAgICAgICAgdGhpcy5fY3VycmVudElkID0gY3VycmVudElkOworICAgICAgICB0aGlz
Ll9zdGFjayA9IFtdOworICAgIH0KKworICAgIGdldCBwcm9ncmFtKCkKKyAgICB7CisgICAgICAg
IHRoaXMuX3Byb2dyYW07CisgICAgfQorCisgICAgZ2V0IHR5cGVNYXAoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX3R5cGVNYXA7CisgICAgfQorCisgICAgZ2V0IGN1cnJlbnRJZCgpCisg
ICAgeworICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudElkOworICAgIH0KKworICAgIGdldCBz
dGFjaygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fc3RhY2s7CisgICAgfQorCisgICAg
dmlzaXRUeXBlUmVmKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7
CisgICAgfQorCisgICAgX2VuY291bnRlclR5cGUoaWQpCisgICAgeworICAgICAgICBpZiAodGhp
cy5zdGFjay5sZW5ndGggPiAwKQorICAgICAgICAgICAgdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxl
bmd0aCAtIDFdLnB1c2goaWQpOworICAgIH0KKworICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKKyAg
ICB7CisgICAgICAgIHN1cGVyLnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJp
Y0xpdGVyYWxUeXBlKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7
CisgICAgfQorCisgICAgdmlzaXROYXRpdmVUeXBlKG5vZGUpCisgICAgeworICAgICAgICBpZiAo
IXRoaXMudHlwZU1hcC5oYXMobm9kZSkpCisgICAgICAgICAgICB0aGlzLnR5cGVNYXAuc2V0KG5v
ZGUsIHRoaXMuX2N1cnJlbnRJZCsrKTsKKyAgICAgICAgbGV0IGlkID0gdGhpcy50eXBlTWFwLmdl
dChub2RlKTsKKyAgICAgICAgdGhpcy5fZW5jb3VudGVyVHlwZShpZCk7CisgICAgfQorCisgICAg
dmlzaXRFbnVtVHlwZShub2RlKQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXQodGhpcyk7Cisg
ICAgfQorCisgICAgdmlzaXRQdHJUeXBlKG5vZGUpCisgICAgeworICAgICAgICAvLyBJbnRlbnRp
b25hbGx5IGJsYW5rCisgICAgfQorCisgICAgdmlzaXRBcnJheVJlZlR5cGUobm9kZSkKKyAgICB7
CisgICAgICAgIHRoaXMudmlzaXROYXRpdmVUeXBlKHByb2dyYW0uaW50cmluc2ljcy51aW50MzIp
OworICAgICAgICB0aGlzLnZpc2l0TmF0aXZlVHlwZShwcm9ncmFtLmludHJpbnNpY3MudWludDMy
KTsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogVXNpbmcgdG9TdHJpbmcoKSBpbiB0aGVzZSBmdW5j
dGlvbnMgaXMgYSBoYWNrLiBJbnN0ZWFkLCB3ZSBzaG91bGQgaW1wbGVtZW50IGEgcHJvcGVyIHR5
cGUgZGVkdXBlci4KKyAgICB2aXNpdEFycmF5VHlwZShub2RlKQorICAgIHsKKyAgICAgICAgbGV0
IGlkOworICAgICAgICBpZiAodGhpcy50eXBlTWFwLmhhcyhub2RlLnRvU3RyaW5nKCkpKSB7Cisg
ICAgICAgICAgICBpZCA9IHRoaXMudHlwZU1hcC5nZXQobm9kZSk7CisgICAgICAgICAgICBpZiAo
dHlwZW9mIGlkID09ICJvYmplY3QiKQorICAgICAgICAgICAgICAgIGlkID0gaWQuaWQ7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBsZXQgZmllbGRUeXBlID0gW107CisgICAgICAgICAg
ICB0aGlzLnN0YWNrLnB1c2goZmllbGRUeXBlKTsKKyAgICAgICAgICAgIG5vZGUuZWxlbWVudFR5
cGUudmlzaXQodGhpcyk7CisgICAgICAgICAgICB0aGlzLnN0YWNrLnBvcCgpOworICAgICAgICAg
ICAgaWYgKGZpZWxkVHlwZS5sZW5ndGggIT0gMSkKKyAgICAgICAgICAgICAgICB0aHJvdyBuZXcg
RXJyb3IoIkFycmF5cyBjYW4gb25seSBoYXZlIG9uZSBlbGVtZW50IHR5cGUhIik7CisgICAgICAg
ICAgICBpZCA9IHRoaXMuX2N1cnJlbnRJZCsrOworICAgICAgICAgICAgbm9kZS5udW1FbGVtZW50
cy52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMudHlwZU1hcC5zZXQobm9kZS50b1N0cmlu
ZygpLCB7aWQ6IGlkLCBlbGVtZW50VHlwZTogZmllbGRUeXBlWzBdLCBudW1FbGVtZW50czogbm9k
ZS5udW1FbGVtZW50cy52YWx1ZX0pOworICAgICAgICB9CisgICAgICAgIHRoaXMuX2VuY291bnRl
clR5cGUoaWQpOworICAgIH0KKworICAgIHZpc2l0U3RydWN0VHlwZShub2RlKQorICAgIHsKKyAg
ICAgICAgbGV0IGlkOworICAgICAgICBpZiAodGhpcy50eXBlTWFwLmhhcyhub2RlLnRvU3RyaW5n
KCkpKSB7CisgICAgICAgICAgICBpZCA9IHRoaXMudHlwZU1hcC5nZXQobm9kZS50b1N0cmluZygp
KTsKKyAgICAgICAgICAgIGlmICh0eXBlb2YgaWQgPT0gIm9iamVjdCIpCisgICAgICAgICAgICAg
ICAgaWQgPSBpZC5pZDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGxldCBmaWVsZFR5
cGVzID0gW107CisgICAgICAgICAgICB0aGlzLnN0YWNrLnB1c2goZmllbGRUeXBlcyk7CisgICAg
ICAgICAgICBmb3IgKGxldCBmaWVsZCBvZiBub2RlLmZpZWxkcykKKyAgICAgICAgICAgICAgICBm
aWVsZC52aXNpdCh0aGlzKTsKKyAgICAgICAgICAgIHRoaXMuc3RhY2sucG9wKCk7CisgICAgICAg
ICAgICBpZCA9IHRoaXMuX2N1cnJlbnRJZCsrOworICAgICAgICAgICAgdGhpcy50eXBlTWFwLnNl
dChub2RlLnRvU3RyaW5nKCksIHtpZDogaWQsIGZpZWxkVHlwZXM6IGZpZWxkVHlwZXN9KTsKKyAg
ICAgICAgfQorICAgICAgICB0aGlzLl9lbmNvdW50ZXJUeXBlKGlkKTsKKyAgICB9Cit9CmRpZmYg
LS1naXQgYS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVlZhcmlhYmxlQW5hbHl6
ZXIuanMgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9TUElSVlZhcmlhYmxlQW5hbHl6
ZXIuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODIzNmQ5YzNjNDMyYTJlYjNhNWZjNWRkZDFiZjkyMjRkMjhhZWQw
NgotLS0gL2Rldi9udWxsCisrKyBiL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1NQSVJW
VmFyaWFibGVBbmFseXplci5qcwpAQCAtMCwwICsxLDE1MyBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworInVzZSBzdHJpY3QiOworCitjbGFzcyBTUElSVlBy
aW1pdGl2ZVZhcmlhYmxlQW5hbHl6ZXIgZXh0ZW5kcyBWaXNpdG9yIHsKKyAgICBjb25zdHJ1Y3Rv
cihwcm9ncmFtLCB0eXBlTWFwLCBjdXJyZW50SWQsIGN1cnJlbnRMb2NhdGlvbiwgc3RhcnROYW1l
KQorICAgIHsKKyAgICAgICAgc3VwZXIoKTsKKyAgICAgICAgdGhpcy5fcHJvZ3JhbSA9IHByb2dy
YW07CisgICAgICAgIHRoaXMuX3R5cGVNYXAgPSB0eXBlTWFwOworICAgICAgICB0aGlzLl9jdXJy
ZW50SWQgPSBjdXJyZW50SWQ7CisgICAgICAgIHRoaXMuX2N1cnJlbnRMb2NhdGlvbiA9IGN1cnJl
bnRMb2NhdGlvbjsKKyAgICAgICAgdGhpcy5fbmFtZUNvbXBvbmVudHMgPSBbXTsKKyAgICAgICAg
aWYgKHN0YXJ0TmFtZSkKKyAgICAgICAgICAgIHRoaXMuX25hbWVDb21wb25lbnRzLnB1c2goc3Rh
cnROYW1lKTsKKyAgICAgICAgdGhpcy5fcmVzdWx0ID0gW107CisgICAgfQorCisgICAgZ2V0IHBy
b2dyYW0oKQorICAgIHsKKyAgICAgICAgdGhpcy5fcHJvZ3JhbTsKKyAgICB9CisKKyAgICBnZXQg
dHlwZU1hcCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fdHlwZU1hcDsKKyAgICB9CisK
KyAgICBnZXQgY3VycmVudElkKCkKKyAgICB7CisgICAgICAgIHJldHVybiB0aGlzLl9jdXJyZW50
SWQ7CisgICAgfQorCisgICAgZ2V0IGN1cnJlbnRMb2NhdGlvbigpCisgICAgeworICAgICAgICBy
ZXR1cm4gdGhpcy5fY3VycmVudExvY2F0aW9uOworICAgIH0KKworICAgIGdldCBuYW1lQ29tcG9u
ZW50cygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fbmFtZUNvbXBvbmVudHM7CisgICAg
fQorCisgICAgZ2V0IHJlc3VsdCgpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5fcmVzdWx0
OworICAgIH0KKworICAgIHZpc2l0VHlwZVJlZihub2RlKQorICAgIHsKKyAgICAgICAgbm9kZS50
eXBlLnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIHZpc2l0TnVsbFR5cGUobm9kZSkKKyAgICB7
CisgICAgICAgIHN1cGVyLnZpc2l0KHRoaXMpOworICAgIH0KKworICAgIHZpc2l0R2VuZXJpY0xp
dGVyYWxUeXBlKG5vZGUpCisgICAgeworICAgICAgICBub2RlLnR5cGUudmlzaXQodGhpcyk7Cisg
ICAgfQorCisgICAgdmlzaXROYXRpdmVUeXBlKG5vZGUpCisgICAgeworICAgICAgICB0aGlzLnJl
c3VsdC5wdXNoKHsgbmFtZTogdGhpcy5uYW1lQ29tcG9uZW50cy5qb2luKCIiKSwgaWQ6IHRoaXMu
X2N1cnJlbnRJZCsrLCB0eXBlOiB0aGlzLnR5cGVNYXAuZ2V0KG5vZGUpLCBsb2NhdGlvbjogdGhp
cy5fY3VycmVudExvY2F0aW9uKysgfSk7CisgICAgfQorCisgICAgdmlzaXRFbnVtVHlwZShub2Rl
KQorICAgIHsKKyAgICAgICAgc3VwZXIudmlzaXQodGhpcyk7CisgICAgfQorCisgICAgdmlzaXRQ
dHJUeXBlKG5vZGUpCisgICAgeworICAgICAgICAvLyBJbnRlbnRpb25hbGx5IGJsYW5rCisgICAg
fQorCisgICAgdmlzaXRBcnJheVJlZlR5cGUobm9kZSkKKyAgICB7CisgICAgICAgIHRoaXMudmlz
aXROYXRpdmVUeXBlKHByb2dyYW0uaW50cmluc2ljcy51aW50MzIpOworICAgICAgICB0aGlzLnZp
c2l0TmF0aXZlVHlwZShwcm9ncmFtLmludHJpbnNpY3MudWludDMyKTsKKyAgICB9CisKKyAgICB2
aXNpdEFycmF5VHlwZShub2RlKQorICAgIHsKKyAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBu
b2RlLm51bUVsZW1lbnRzLnZhbHVlOyArK2kpIHsKKyAgICAgICAgICAgIHRoaXMubmFtZUNvbXBv
bmVudHMucHVzaCgiWyIpOworICAgICAgICAgICAgdGhpcy5uYW1lQ29tcG9uZW50cy5wdXNoKGku
dG9TdHJpbmcoKSk7CisgICAgICAgICAgICB0aGlzLm5hbWVDb21wb25lbnRzLnB1c2goIl0iKTsK
KyAgICAgICAgICAgIG5vZGUuZWxlbWVudFR5cGUudmlzaXQodGhpcyk7CisgICAgICAgICAgICB0
aGlzLm5hbWVDb21wb25lbnRzLnBvcCgpOworICAgICAgICAgICAgdGhpcy5uYW1lQ29tcG9uZW50
cy5wb3AoKTsKKyAgICAgICAgICAgIHRoaXMubmFtZUNvbXBvbmVudHMucG9wKCk7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICB2aXNpdFN0cnVjdFR5cGUobm9kZSkKKyAgICB7CisgICAgICAgIGxl
dCBidWlsdEluU3RydWN0cyA9IFsKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVjMjw+IHsgaW50MzIg
eDsgaW50MzIgeSB9IiwKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVjMjw+IHsgdWludDMyIHg7IHVp
bnQzMiB5OyB9IiwKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVjMjw+IHsgZmxvYXQzMiB4OyBmbG9h
dDMyIHk7IH0iLAorICAgICAgICAgICAgInN0cnVjdCB2ZWMyPD4geyBmbG9hdDY0IHg7IGZsb2F0
NjQgeTsgfSIsCisgICAgICAgICAgICAic3RydWN0IHZlYzM8PiB7IGludDMyIHg7IGludDMyIHk7
IGludDMyIHo7IH0iLAorICAgICAgICAgICAgInN0cnVjdCB2ZWMzPD4geyB1aW50MzIgeDsgdWlu
dDMyIHk7IHVpbnQzMiB6OyB9IiwKKyAgICAgICAgICAgICJzdHJ1Y3QgdmVjMzw+IHsgZmxvYXQz
MiB4OyBmbG9hdDMyIHk7IGZsb2F0MzIgejsgfSIsCisgICAgICAgICAgICAic3RydWN0IHZlYzM8
PiB7IGZsb2F0NjQgeDsgZmxvYXQ2NCB5OyBmbG9hdDY0IHo7IH0iLAorICAgICAgICAgICAgInN0
cnVjdCB2ZWM0PD4geyBpbnQzMiB4OyBpbnQzMiB5OyBpbnQzMiB6OyBpbnQzMiB3OyB9IiwKKyAg
ICAgICAgICAgICJzdHJ1Y3QgdmVjNDw+IHsgdWludDMyIHg7IHVpbnQzMiB5OyB1aW50MzIgejsg
dWludDMyIHc7IH0iLAorICAgICAgICAgICAgInN0cnVjdCB2ZWM0PD4geyBmbG9hdDMyIHg7IGZs
b2F0MzIgeTsgZmxvYXQzMiB6OyBmbG9hdDMyIHc7IH0iLAorICAgICAgICAgICAgInN0cnVjdCB2
ZWM0PD4geyBmbG9hdDY0IHg7IGZsb2F0NjQgeTsgZmxvYXQ2NCB6OyBmbG9hdDY0IHc7IH0iCisg
ICAgICAgIF07CisgICAgICAgIGZvciAobGV0IGJ1aWx0SW5TdHJ1Y3Qgb2YgYnVpbHRJblN0cnVj
dHMpIHsKKyAgICAgICAgICAgIGlmIChub2RlLnRvU3RyaW5nKCkgPT0gYnVpbHRJblN0cnVjdCkg
eworICAgICAgICAgICAgICAgIHRoaXMucmVzdWx0LnB1c2goeyBuYW1lOiB0aGlzLm5hbWVDb21w
b25lbnRzLmpvaW4oIiIpLCBpZDogdGhpcy5fY3VycmVudElkKyssIHR5cGU6IHRoaXMudHlwZU1h
cC5nZXQobm9kZS50b1N0cmluZygpKS5pZCwgbG9jYXRpb246IHRoaXMuX2N1cnJlbnRMb2NhdGlv
bisrICB9KTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgZm9yIChsZXQgZmllbGQgb2Ygbm9kZS5maWVsZHMpIHsKKyAgICAgICAgICAg
IGxldCBkb3RQcmVmaXggPSB0aGlzLm5hbWVDb21wb25lbnRzLmxlbmd0aCA+IDA7CisgICAgICAg
ICAgICBpZiAoZG90UHJlZml4KQorICAgICAgICAgICAgICAgIHRoaXMubmFtZUNvbXBvbmVudHMu
cHVzaCgiLiIpOworICAgICAgICAgICAgdGhpcy5uYW1lQ29tcG9uZW50cy5wdXNoKGZpZWxkLm5h
bWUpOworICAgICAgICAgICAgZmllbGQudmlzaXQodGhpcyk7CisgICAgICAgICAgICB0aGlzLm5h
bWVDb21wb25lbnRzLnBvcCgpOworICAgICAgICAgICAgaWYgKGRvdFByZWZpeCkKKyAgICAgICAg
ICAgICAgICB0aGlzLm5hbWVDb21wb25lbnRzLnBvcCgpOworICAgICAgICB9CisgICAgfQorfQpk
aWZmIC0tZ2l0IGEvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV1NMLm1kIGIvVG9vbHMv
V2ViR1BVU2hhZGluZ0xhbmd1YWdlUkkvV1NMLm1kCmluZGV4IDdjNjI2MjlkNTgwZDZhYzJkODI4
NDRhYWQ4ZGVlYTY1MGRhYjQxNDAuLmQzYjY2NTY3ODI2YTUxZGQ2Yzc1NGQ0ZTliMjRkNzU3ODk3
MmJiM2QgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1dlYkdQVVNoYWRpbmdMYW5ndWFnZVJJL1dTTC5tZAor
KysgYi9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9XU0wubWQKQEAgLTQ3Myw3ICs0NzMs
NyBAQCBXU0wgaXMgYSB0eXBlLXNhZmUgbGFuZ3VhZ2UgYmFzZWQgb24gQyBzeW50YXguIEl0IGVs
aW1pbmF0ZXMgc29tZSBDIGZlYXR1cmVzLCBsaQogVGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGxp
bWl0YXRpb25zIG1heSBiZSBwbGFjZWQgb24gYSBXU0wgcHJvZ3JhbToKIAogLSBgZGV2aWNlYCwg
YGNvbnN0YW50YCwgYW5kIGB0aHJlYWRncm91cGAgcG9pbnRlcnMgY2Fubm90IHBvaW50IHRvIGRh
dGEgdGhhdCBtYXkgaGF2ZSBwb2ludGVycyBpbiBpdC4gVGhpcyBzYWZldHkgY2hlY2sgaXMgbm90
IGRvbmUgYXMgcGFydCBvZiB0aGUgbm9ybWFsIHR5cGUgc3lzdGVtIGNoZWNrcy4gSXQncyBwZXJm
b3JtZWQgb25seSBhZnRlciBpbnN0YW50aWF0aW9uLgotLSBQb2ludGVycyBhbmQgYXJyYXkgcmVm
ZXJlbmNlcyAoY29sbGVjdGl2ZWx5LCAqcmVmZXJlbmNlcyopIG1heSBiZSByZXN0cmljdGVkIHRv
IHN1cHBvcnQgY29tcGlsaW5nIHRvIFNQSVItViAqbG9naWNhbCBtb2RlKi4gSW4gdGhpcyBtb2Rl
LCByZWZlcmVuY2VzIG1heSBuZXZlciBwb2ludCB0byBkYXRhIHN0cnVjdHVyZXMgdGhhdCBoYXZl
IHJlZmVyZW5jZXMgaW4gdGhlbS4gUmVmZXJlbmNlcyBtdXN0IGJlIGluaXRpYWxpemVkIHVwb24g
ZGVjbGFyYXRpb24gYW5kIG5ldmVyIHJlYXNzaWduZWQuIEZ1bmN0aW9ucyB0aGF0IHJldHVybiBy
ZWZlcmVuY2VzIG11c3QgaGF2ZSBvbmUgcmV0dXJuIHBvaW50LiBUZXJuYXJ5IGV4cHJlc3Npb25z
IG1heSBub3QgcmV0dXJuIHJlZmVyZW5jZXMuCistIFBvaW50ZXJzIGFuZCBhcnJheSByZWZlcmVu
Y2VzIChjb2xsZWN0aXZlbHksICpyZWZlcmVuY2VzKikgbWF5IGJlIHJlc3RyaWN0ZWQgdG8gc3Vw
cG9ydCBjb21waWxpbmcgdG8gU1BJUi1WICpsb2dpY2FsIG1vZGUqLiBJbiB0aGlzIG1vZGUsIGFy
cmF5cyBtdXN0IG5vdCB0cmFuc2l0aXZlbHkgaG9sZCByZWZlcmVuY2VzLiBSZWZlcmVuY2VzIG11
c3QgYmUgaW5pdGlhbGl6ZWQgdXBvbiBkZWNsYXJhdGlvbiBhbmQgbmV2ZXIgcmVhc3NpZ25lZC4g
RnVuY3Rpb25zIHRoYXQgcmV0dXJuIHJlZmVyZW5jZXMgbXVzdCBoYXZlIG9uZSByZXR1cm4gcG9p
bnQuIFRlcm5hcnkgZXhwcmVzc2lvbnMgbWF5IG5vdCByZXR1cm4gcmVmZXJlbmNlcy4KIC0gR3Jh
cGhpY3MgZW50cnkgcG9pbnRzIG11c3QgdHJhbnNpdGl2ZWx5IG5ldmVyIHJlZmVyIHRvIHRoZSBg
dGhyZWFkZ3JvdXBgIG1lbW9yeSBzcGFjZS4KIAogCmRpZmYgLS1naXQgYS9Ub29scy9XZWJHUFVT
aGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sIGIvVG9vbHMvV2ViR1BVU2hhZGluZ0xhbmd1YWdl
UkkvaW5kZXguaHRtbAppbmRleCBhOTY5N2ZlMDc4MjEyOGVhMGRlYTAxNWQzNzJkMGYyMGQxZDgz
NDJjLi4zYTdlOTQ4YmU2N2QwYjVjMDViYjE5YzJlZjE0MzA5YTExOTczOGU0IDEwMDY0NAotLS0g
YS9Ub29scy9XZWJHUFVTaGFkaW5nTGFuZ3VhZ2VSSS9pbmRleC5odG1sCisrKyBiL1Rvb2xzL1dl
YkdQVVNoYWRpbmdMYW5ndWFnZVJJL2luZGV4Lmh0bWwKQEAgLTMwMCw4ICszMDAsOCBAQCBmdW5j
dGlvbiBkb0NvbXBpbGVQcmVzZW50U2hhZGVyU291cmNlKCkgewogICAgIHByb2dyYW0gPSByZXN1
bHQ7CiAgICAgYXZhaWxhYmxlVmVydGV4U2hhZGVycyA9IFtdOwogICAgIGF2YWlsYWJsZUZyYWdt
ZW50U2hhZGVycyA9IFtdOwotICAgIGZvciAoZnVuY3Rpb25OYW1lcyBvZiBwcm9ncmFtLmZ1bmN0
aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBmb3IgKGZ1bmMgb2YgZnVuY3Rpb25OYW1lcykgewor
ICAgIGZvciAobGV0IGZ1bmN0aW9uTmFtZXMgb2YgcHJvZ3JhbS5mdW5jdGlvbnMudmFsdWVzKCkp
IHsKKyAgICAgICAgZm9yIChsZXQgZnVuYyBvZiBmdW5jdGlvbk5hbWVzKSB7CiAgICAgICAgICAg
ICBpZiAoZnVuYy5zaGFkZXJUeXBlID09ICJ2ZXJ0ZXgiKQogICAgICAgICAgICAgICAgIGF2YWls
YWJsZVZlcnRleFNoYWRlcnMucHVzaChmdW5jKTsKICAgICAgICAgICAgIGlmIChmdW5jLnNoYWRl
clR5cGUgPT0gImZyYWdtZW50IikK
</data>

          </attachment>
      

    </bug>

</bugzilla>