<?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>198890</bug_id>
          
          <creation_ts>2019-06-15 10:10:38 -0700</creation_ts>
          <short_desc>[WHLSL] Make .length work</short_desc>
          <delta_ts>2019-06-17 14:49:12 -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>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>dino</cc>
    
    <cc>fpizlo</cc>
    
    <cc>jonlee</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rmorisset</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1545034</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-15 10:10:38 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545348</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-17 12:03:06 -0700</bug_when>
    <thetext>patch forthcoming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545376</commentid>
    <comment_count>2</comment_count>
      <attachid>372267</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-17 13:21:43 -0700</bug_when>
    <thetext>Created attachment 372267
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545380</commentid>
    <comment_count>3</comment_count>
      <attachid>372267</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2019-06-17 13:28:42 -0700</bug_when>
    <thetext>Comment on attachment 372267
patch

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

&gt; Source/WebCore/Modules/webgpu/WHLSL/Metal/WHLSLEntryPointScaffolding.cpp:318
&gt; -                stringBuilder.append(makeString(&quot;size_t &quot;, lengthTemporaryName, &quot; = &quot;, variableName, &apos;.&apos;, lengthElementName, &quot;.x;\n&quot;));
&gt; +                stringBuilder.append(makeString(&quot;size_t &quot;, lengthTemporaryName, &quot; = &quot;, variableName, &apos;.&apos;, lengthElementName, &quot;.y;\n&quot;));

👍

&gt; LayoutTests/webgpu/whlsl-buffer-length.html:10
&gt; +compute void computeShader(device float[] buffer : register(u0), float3 threadID : SV_DispatchThreadID) {

Can we turn the buffer into a uint[] buffer? That way no casts are needed.

Your &quot;numthreads&quot; directive above means that this code is racey. Instead you should just say numthreads(1, 1, 1) and change line 56 below to say (1, 1, 1).

&gt; LayoutTests/webgpu/whlsl-buffer-length.html:11
&gt; +    buffer[uint(threadID.x)] = buffer[uint(threadID.x)] * 2.0;

What&apos;s the purpose of this line?

&gt; LayoutTests/webgpu/whlsl-buffer-length.html:40
&gt; +    for (let i = 0; i &lt; 1337; ++i) {
&gt; +        bufferFloat32Array[i] = i + 1;
&gt; +    }

Is there a need to fill the whole buffer? Can&apos;t you just fill the first item and let it be overridden by the shader?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545396</commentid>
    <comment_count>4</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-17 14:29:28 -0700</bug_when>
    <thetext>Spoke to Myles offline, fixing the test to just do the length calculation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545399</commentid>
    <comment_count>5</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2019-06-17 14:45:09 -0700</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/246515/webkit</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1545400</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-06-17 14:49:12 -0700</bug_when>
    <thetext>&lt;rdar://problem/51822107&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>372267</attachid>
            <date>2019-06-17 13:21:43 -0700</date>
            <delta_ts>2019-06-17 13:28:42 -0700</delta_ts>
            <desc>patch</desc>
            <filename>b-backup.diff</filename>
            <type>text/plain</type>
            <size>24765</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjUxMSkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDE5LTA2LTE3ICBTYWFtIEJh
cmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTWFrZSAubGVuZ3Ro
IHdvcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
ODg5MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRo
aXMgcGF0Y2ggbWFrZXMgYWNjZXNzaW5nIC5sZW5ndGggb24gYnVmZmVycyB3b3JrLiBUbyBtYWtl
IHRoaXMgd29yayBhcworICAgICAgICBleHBlY3RlZCwgSSd2ZSBmaXhlZCBhIGhhbmRmdWwgb2Yg
c21hbGwgYnVnczoKKyAgICAgICAgCisgICAgICAgIC0gVGhlIGNoZWNrZXIgd2FzIG5vdCBjYWxs
aW5nIHJlc29sdmVCeUluc3RhbnRpYXRpb24gZm9yIGdldHRlcnMuIFRoaXMgcGF0Y2gKKyAgICAg
ICAgICBtb2RpZmllcyB0aGUgY2hlY2tlciB0byBkbyB0aGF0LCBzbyB3ZSBjYW4gbm93IHJlc29s
dmUgYSBnZXR0ZXIgdG8KKyAgICAgICAgICAib3BlcmF0b3IubGVuZ3RoIi4gSSBhbHNvIHJlZmFj
dG9yZWQgdGhlIGNoZWNrZXIgdG8gaGF2ZSBhIGhlbHBlciBtZXRob2QKKyAgICAgICAgICB0aGF0
IGJvdGggZG9lcyBvdmVybG9hZCByZXNvbHV0aW9uIGFuZCByZXNvbHZlQnlJbnN0YW50aWF0aW9u
IHRvIG1ha2UgaXQKKyAgICAgICAgICBkaWZmaWN1bHQgdG8gZm9yZ2V0IHRvIGNhbGwgcmVzb2x2
ZUJ5SW5zdGFudGlhdGlvbi4KKyAgICAgICAgLSBUaGUgcHJvcGVydHkgcmVzb2x2ZXIgaGFkIGEg
YnVnIHdoZXJlIGl0IHdvdWxkIHJldHVybiBhIG5vbi1udWxsIHZhbHVlCisgICAgICAgICAgaW4g
YW5kZXJDYWxsQXJndW1lbnQgZm9yIGFycmF5IHJlZmVyZW5jZXMgZXZlbiB3aGVuIHRoZXJlIHdh
cyBubyBhbmRlciBhbmQKKyAgICAgICAgICBubyB0aHJlYWQgYW5kZXIgZnVuY3Rpb24uIFRoaXMg
cGF0Y2ggbWFrZXMgaXQgbm93IHJldHVybiBudWxsIGlmIHRoZXJlIGlzCisgICAgICAgICAgbmVp
dGhlciBhbiBhbmRlciBub3IgYSB0aHJlYWQgYW5kZXIuCisgICAgICAgIC0gVGhlIG1ldGFsIGNv
ZGVnZW4gaW5jb3JyZWN0bHkgdW5wYWNrZWQgdGhlIGxlbmd0aCBvZiBidWZmZXJzLiBJdCBzd2Fw
cGVkIHRoZQorICAgICAgICAgIGJvdHRvbSBmb3VyIGJ5dGVzIGFuZCB0aGUgdG9wIGZvdXIgYnl0
ZXMgb2YgdGhlIHNpemVfdCB2YWx1ZS4gVGhpcyBwYXRjaAorICAgICAgICAgIGNvcnJlY3RzIHRo
YXQuIFRoaXMgd2FzIGFsc28gYSBjYXVzZSBvZiBmbGFraW5lc3MgaW4gdmFyaW91cyB0ZXN0cyBz
aW5jZQorICAgICAgICAgIHdlIGVuZGVkIHVwIHdpdGggYSBsZW5ndGggbXVjaCBsYXJnZXIgdGhh
biBleHBlY3RlZCwgbGVhZGluZyB0byBib3VuZHMKKyAgICAgICAgICBjaGVja3MgYWx3YXlzIHBh
c3NpbmcgaW4gb3VyIHRlc3RzLgorICAgICAgICAtIFRoaXMgcGF0Y2ggYWxzbyBmaXhlcyBvdXIg
dGVzdHMgdG8gc3BlY2lmeSB0aGUgb3V0cHV0IGJ1ZmZlciBsZW5ndGgKKyAgICAgICAgICBwcm9w
ZXJseSBmb3IgdmFyaW91cyBwcm9ncmFtcy4KKworICAgICAgICBUZXN0OiB3ZWJncHUvd2hsc2wt
YnVmZmVyLWxlbmd0aC5odG1sCisKKyAgICAgICAgKiBNb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRh
bC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXSExT
TDo6TWV0YWw6OkVudHJ5UG9pbnRTY2FmZm9sZGluZzo6dW5wYWNrUmVzb3VyY2VzQW5kTmFtZWRC
dWlsdElucyk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hMU0wvV0hMU0xDaGVja2VyLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjpyZXNvbHZlRnVuY3Rpb24pOgorICAgICAgICAo
V2ViQ29yZTo6V0hMU0w6OkNoZWNrZXI6OmZpbmlzaFZpc2l0aW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OldITFNMOjpDaGVja2VyOjp2aXNpdCk6CisgICAgICAgICogTW9kdWxlcy93ZWJncHUvV0hM
U0wvV0hMU0xQcm9wZXJ0eVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldITFNMOjph
bmRlckNhbGxBcmd1bWVudCk6CisKIDIwMTktMDYtMTcgIEtlbm5ldGggUnVzc2VsbCAgPGtickBj
aHJvbWl1bS5vcmc+CiAKICAgICAgICAgU3VwcG9ydCB1c2luZyBBTkdMRSBhcyB0aGUgYmFja2Vu
ZCBmb3IgdGhlIFdlYkdMIGltcGxlbWVudGF0aW9uCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTENoZWNrZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tlci5jcHAJKHJldmlzaW9uIDI0
NjUwMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMQ2hlY2tl
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNSw2ICsyMTUsMTkgQEAgc3RhdGljIE9wdGlvbmFs
PEFTVDo6TmF0aXZlRnVuY3Rpb25EZWNsYQogICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CiB9CiAK
K3N0YXRpYyBBU1Q6OkZ1bmN0aW9uRGVjbGFyYXRpb24qIHJlc29sdmVGdW5jdGlvbihQcm9ncmFt
JiBwcm9ncmFtLCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxBU1Q6OkZ1bmN0aW9uRGVj
bGFyYXRpb24+LCAxPiYgcG9zc2libGVPdmVybG9hZHMsIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93
cmFwcGVyPFJlc29sdmluZ1R5cGU+PiYgdHlwZXMsIGNvbnN0IFN0cmluZyYgbmFtZSwgTGV4ZXI6
OlRva2VuIG9yaWdpbiwgY29uc3QgSW50cmluc2ljcyYgaW50cmluc2ljcywgQVNUOjpOYW1lZFR5
cGUqIGNhc3RSZXR1cm5UeXBlID0gbnVsbHB0cikKK3sKKyAgICBpZiAoQVNUOjpGdW5jdGlvbkRl
Y2xhcmF0aW9uKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKHBvc3NpYmxlT3Zl
cmxvYWRzLCB0eXBlcywgY2FzdFJldHVyblR5cGUpKQorICAgICAgICByZXR1cm4gZnVuY3Rpb247
CisKKyAgICBpZiAoYXV0byBuZXdGdW5jdGlvbiA9IHJlc29sdmVCeUluc3RhbnRpYXRpb24obmFt
ZSwgb3JpZ2luLCB0eXBlcywgaW50cmluc2ljcykpIHsKKyAgICAgICAgcHJvZ3JhbS5hcHBlbmQo
V1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuICZwcm9ncmFtLm5hdGl2ZUZ1
bmN0aW9uRGVjbGFyYXRpb25zKCkubGFzdCgpOworICAgIH0KKworICAgIHJldHVybiBudWxscHRy
OworfQorCiBzdGF0aWMgYm9vbCBjaGVja1NlbWFudGljcyhWZWN0b3I8RW50cnlQb2ludEl0ZW0+
JiBpbnB1dEl0ZW1zLCBWZWN0b3I8RW50cnlQb2ludEl0ZW0+JiBvdXRwdXRJdGVtcywgY29uc3Qg
T3B0aW9uYWw8QVNUOjpFbnRyeVBvaW50VHlwZT4mIGVudHJ5UG9pbnRUeXBlLCBjb25zdCBJbnRy
aW5zaWNzJiBpbnRyaW5zaWNzKQogewogICAgIHsKQEAgLTEwMDQsNyArMTAxNyw3IEBAIHZvaWQg
Q2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICAgICAgVmVjdG9yPHN0ZDo6
cmVmZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IGdldHRlckFyZ3VtZW50VHlwZXMgeyBi
YXNlSW5mby0+cmVzb2x2aW5nVHlwZSB9OwogICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3VtZW50
VHlwZSkKICAgICAgICAgICAgIGdldHRlckFyZ3VtZW50VHlwZXMuYXBwZW5kKCphZGRpdGlvbmFs
QXJndW1lbnRUeXBlKTsKLSAgICAgICAgaWYgKChnZXR0ZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5j
dGlvbk92ZXJsb2FkKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUdldHRlck92ZXJs
b2FkcygpLCBnZXR0ZXJBcmd1bWVudFR5cGVzKSkpCisgICAgICAgIGlmICgoZ2V0dGVyRnVuY3Rp
b24gPSByZXNvbHZlRnVuY3Rpb24obV9wcm9ncmFtLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
cG9zc2libGVHZXR0ZXJPdmVybG9hZHMoKSwgZ2V0dGVyQXJndW1lbnRUeXBlcywgcHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLmdldHRlckZ1bmN0aW9uTmFtZSgpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24ub3JpZ2luKCksIG1faW50cmluc2ljcykpKQogICAgICAgICAgICAgZ2V0dGVyUmV0dXJu
VHlwZSA9ICZnZXR0ZXJGdW5jdGlvbi0+dHlwZSgpOwogICAgIH0KIApAQCAtMTAxNywxMyArMTAz
MCw4IEBAIHZvaWQgQ2hlY2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICAgICAg
ICAgIFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFwcGVyPFJlc29sdmluZ1R5cGU+PiBhbmRlckFy
Z3VtZW50VHlwZXMgeyBhcmd1bWVudFR5cGUgfTsKICAgICAgICAgICAgIGlmIChhZGRpdGlvbmFs
QXJndW1lbnRUeXBlKQogICAgICAgICAgICAgICAgIGFuZGVyQXJndW1lbnRUeXBlcy5hcHBlbmQo
KmFkZGl0aW9uYWxBcmd1bWVudFR5cGUpOwotICAgICAgICAgICAgaWYgKChhbmRlckZ1bmN0aW9u
ID0gcmVzb2x2ZUZ1bmN0aW9uT3ZlcmxvYWQocHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLnBvc3Np
YmxlQW5kZXJPdmVybG9hZHMoKSwgYW5kZXJBcmd1bWVudFR5cGVzKSkpCi0gICAgICAgICAgICAg
ICAgYW5kZXJSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6UG9pbnRlclR5cGU+KGFuZGVyRnVu
Y3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjQgRW5mb3JjZSB0aGUgcmV0dXJuIG9mIGFuZGVy
cyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKLSAgICAgICAgICAgIGVsc2UgaWYgKGF1dG8gbmV3
RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lv
bi5hbmRlckZ1bmN0aW9uTmFtZSgpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3JpZ2luKCks
IGFuZGVyQXJndW1lbnRUeXBlcywgbV9pbnRyaW5zaWNzKSkgewotICAgICAgICAgICAgICAgIG1f
cHJvZ3JhbS5hcHBlbmQoV1RGTW92ZSgqbmV3RnVuY3Rpb24pKTsKLSAgICAgICAgICAgICAgICBh
bmRlckZ1bmN0aW9uID0gJm1fcHJvZ3JhbS5uYXRpdmVGdW5jdGlvbkRlY2xhcmF0aW9ucygpLmxh
c3QoKTsKKyAgICAgICAgICAgIGlmICgoYW5kZXJGdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbiht
X3Byb2dyYW0sIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZUFuZGVyT3ZlcmxvYWRz
KCksIGFuZGVyQXJndW1lbnRUeXBlcywgcHJvcGVydHlBY2Nlc3NFeHByZXNzaW9uLmFuZGVyRnVu
Y3Rpb25OYW1lKCksIHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5vcmlnaW4oKSwgbV9pbnRyaW5z
aWNzKSkpCiAgICAgICAgICAgICAgICAgYW5kZXJSZXR1cm5UeXBlID0gJmRvd25jYXN0PEFTVDo6
UG9pbnRlclR5cGU+KGFuZGVyRnVuY3Rpb24tPnR5cGUoKSkuZWxlbWVudFR5cGUoKTsgLy8gRklY
TUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTgxNjQgRW5mb3Jj
ZSB0aGUgcmV0dXJuIG9mIGFuZGVycyB3aWxsIGFsd2F5cyBiZSBhIHBvaW50ZXIKLSAgICAgICAg
ICAgIH0KICAgICAgICAgfQogICAgIH0KIApAQCAtMTAzNCwxMyArMTA0Miw4IEBAIHZvaWQgQ2hl
Y2tlcjo6ZmluaXNoVmlzaXRpbmcoQVNUOjpQcm9wZXIKICAgICAgICAgVmVjdG9yPHN0ZDo6cmVm
ZXJlbmNlX3dyYXBwZXI8UmVzb2x2aW5nVHlwZT4+IHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcyB7
IGFyZ3VtZW50VHlwZSB9OwogICAgICAgICBpZiAoYWRkaXRpb25hbEFyZ3VtZW50VHlwZSkKICAg
ICAgICAgICAgIHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcy5hcHBlbmQoKmFkZGl0aW9uYWxBcmd1
bWVudFR5cGUpOwotICAgICAgICBpZiAoKHRocmVhZEFuZGVyRnVuY3Rpb24gPSByZXNvbHZlRnVu
Y3Rpb25PdmVybG9hZChwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ucG9zc2libGVBbmRlck92ZXJs
b2FkcygpLCB0aHJlYWRBbmRlckFyZ3VtZW50VHlwZXMpKSkKKyAgICAgICAgaWYgKCh0aHJlYWRB
bmRlckZ1bmN0aW9uID0gcmVzb2x2ZUZ1bmN0aW9uKG1fcHJvZ3JhbSwgcHJvcGVydHlBY2Nlc3NF
eHByZXNzaW9uLnBvc3NpYmxlQW5kZXJPdmVybG9hZHMoKSwgdGhyZWFkQW5kZXJBcmd1bWVudFR5
cGVzLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24uYW5kZXJGdW5jdGlvbk5hbWUoKSwgcHJvcGVy
dHlBY2Nlc3NFeHByZXNzaW9uLm9yaWdpbigpLCBtX2ludHJpbnNpY3MpKSkKICAgICAgICAgICAg
IHRocmVhZEFuZGVyUmV0dXJuVHlwZSA9ICZkb3duY2FzdDxBU1Q6OlBvaW50ZXJUeXBlPih0aHJl
YWRBbmRlckZ1bmN0aW9uLT50eXBlKCkpLmVsZW1lbnRUeXBlKCk7IC8vIEZJWE1FOiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTk4MTY0IEVuZm9yY2UgdGhlIHJldHVy
biBvZiBhbmRlcnMgd2lsbCBhbHdheXMgYmUgYSBwb2ludGVyCi0gICAgICAgIGVsc2UgaWYgKGF1
dG8gbmV3RnVuY3Rpb24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKHByb3BlcnR5QWNjZXNzRXhw
cmVzc2lvbi5hbmRlckZ1bmN0aW9uTmFtZSgpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24ub3Jp
Z2luKCksIHRocmVhZEFuZGVyQXJndW1lbnRUeXBlcywgbV9pbnRyaW5zaWNzKSkgewotICAgICAg
ICAgICAgbV9wcm9ncmFtLmFwcGVuZChXVEZNb3ZlKCpuZXdGdW5jdGlvbikpOwotICAgICAgICAg
ICAgdGhyZWFkQW5kZXJGdW5jdGlvbiA9ICZtX3Byb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJh
dGlvbnMoKS5sYXN0KCk7Ci0gICAgICAgICAgICB0aHJlYWRBbmRlclJldHVyblR5cGUgPSAmZG93
bmNhc3Q8QVNUOjpQb2ludGVyVHlwZT4oYW5kZXJGdW5jdGlvbi0+dHlwZSgpKS5lbGVtZW50VHlw
ZSgpOyAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5
ODE2NCBFbmZvcmNlIHRoZSByZXR1cm4gb2YgYW5kZXJzIHdpbGwgYWx3YXlzIGJlIGEgcG9pbnRl
cgotICAgICAgICB9CiAgICAgfQogCiAgICAgaWYgKGxlZnRBZGRyZXNzU3BhY2UgJiYgIWFuZGVy
RnVuY3Rpb24gJiYgIWdldHRlckZ1bmN0aW9uKSB7CkBAIC0xMDgzLDcgKzEwODYsNyBAQCB2b2lk
IENoZWNrZXI6OmZpbmlzaFZpc2l0aW5nKEFTVDo6UHJvcGVyCiAgICAgICAgIGlmIChhZGRpdGlv
bmFsQXJndW1lbnRUeXBlKQogICAgICAgICAgICAgc2V0dGVyQXJndW1lbnRUeXBlcy5hcHBlbmQo
KmFkZGl0aW9uYWxBcmd1bWVudFR5cGUpOwogICAgICAgICBzZXR0ZXJBcmd1bWVudFR5cGVzLmFw
cGVuZChmaWVsZFJlc29sdmluZ1R5cGUpOwotICAgICAgICBzZXR0ZXJGdW5jdGlvbiA9IHJlc29s
dmVGdW5jdGlvbk92ZXJsb2FkKHByb3BlcnR5QWNjZXNzRXhwcmVzc2lvbi5wb3NzaWJsZVNldHRl
ck92ZXJsb2FkcygpLCBzZXR0ZXJBcmd1bWVudFR5cGVzKTsKKyAgICAgICAgc2V0dGVyRnVuY3Rp
b24gPSByZXNvbHZlRnVuY3Rpb24obV9wcm9ncmFtLCBwcm9wZXJ0eUFjY2Vzc0V4cHJlc3Npb24u
cG9zc2libGVTZXR0ZXJPdmVybG9hZHMoKSwgc2V0dGVyQXJndW1lbnRUeXBlcywgcHJvcGVydHlB
Y2Nlc3NFeHByZXNzaW9uLnNldHRlckZ1bmN0aW9uTmFtZSgpLCBwcm9wZXJ0eUFjY2Vzc0V4cHJl
c3Npb24ub3JpZ2luKCksIG1faW50cmluc2ljcyk7CiAgICAgICAgIGlmIChzZXR0ZXJGdW5jdGlv
bikKICAgICAgICAgICAgIHNldHRlclJldHVyblR5cGUgPSAmc2V0dGVyRnVuY3Rpb24tPnR5cGUo
KTsKICAgICB9CkBAIC0xNDY4LDE0ICsxNDcxLDcgQEAgdm9pZCBDaGVja2VyOjp2aXNpdChBU1Q6
OkNhbGxFeHByZXNzaW9uJgogICAgIC8vIFdlIGRvbid0IHdhbnQgdG8gcmVjdXJzZSB0byB0aGUg
c2FtZSBub2RlIHR3aWNlLgogCiAgICAgQVNTRVJUKGNhbGxFeHByZXNzaW9uLmhhc092ZXJsb2Fk
cygpKTsKLSAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbk92ZXJsb2FkKCpjYWxs
RXhwcmVzc2lvbi5vdmVybG9hZHMoKSwgdHlwZXMsIGNhbGxFeHByZXNzaW9uLmNhc3RSZXR1cm5U
eXBlKCkpOwotICAgIGlmICghZnVuY3Rpb24pIHsKLSAgICAgICAgaWYgKGF1dG8gbmV3RnVuY3Rp
b24gPSByZXNvbHZlQnlJbnN0YW50aWF0aW9uKGNhbGxFeHByZXNzaW9uLm5hbWUoKSwgY2FsbEV4
cHJlc3Npb24ub3JpZ2luKCksIHR5cGVzLCBtX2ludHJpbnNpY3MpKSB7Ci0gICAgICAgICAgICBt
X3Byb2dyYW0uYXBwZW5kKFdURk1vdmUoKm5ld0Z1bmN0aW9uKSk7Ci0gICAgICAgICAgICBmdW5j
dGlvbiA9ICZtX3Byb2dyYW0ubmF0aXZlRnVuY3Rpb25EZWNsYXJhdGlvbnMoKS5sYXN0KCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KKyAgICBhdXRvKiBmdW5jdGlvbiA9IHJlc29sdmVGdW5jdGlvbiht
X3Byb2dyYW0sICpjYWxsRXhwcmVzc2lvbi5vdmVybG9hZHMoKSwgdHlwZXMsIGNhbGxFeHByZXNz
aW9uLm5hbWUoKSwgY2FsbEV4cHJlc3Npb24ub3JpZ2luKCksIG1faW50cmluc2ljcywgY2FsbEV4
cHJlc3Npb24uY2FzdFJldHVyblR5cGUoKSk7CiAgICAgaWYgKCFmdW5jdGlvbikgewogICAgICAg
ICBzZXRFcnJvcigpOwogICAgICAgICByZXR1cm47CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL3dlYmdwdS9XSExTTC9XSExTTFByb3BlcnR5UmVzb2x2ZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZl
ci5jcHAJKHJldmlzaW9uIDI0NjUwMykKKysrIFNvdXJjZS9XZWJDb3JlL01vZHVsZXMvd2ViZ3B1
L1dITFNML1dITFNMUHJvcGVydHlSZXNvbHZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0Miw2
ICsxNDIsOCBAQCBzdGF0aWMgT3B0aW9uYWw8QW5kZXJDYWxsQXJndW1lbnRSZXN1bHQ+CiAKIHN0
YXRpYyBPcHRpb25hbDxBbmRlckNhbGxBcmd1bWVudFJlc3VsdD4gYW5kZXJDYWxsQXJndW1lbnQo
VW5pcXVlUmVmPEFTVDo6RXhwcmVzc2lvbj4mIGV4cHJlc3Npb24sIGJvb2wgYW5kZXJGdW5jdGlv
biwgYm9vbCB0aHJlYWRBbmRlckZ1bmN0aW9uKQogeworICAgIGlmICghYW5kZXJGdW5jdGlvbiAm
JiAhdGhyZWFkQW5kZXJGdW5jdGlvbikKKyAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsKICAg
ICBhdXRvJiB1bmlmeU5vZGUgPSBleHByZXNzaW9uLT5yZXNvbHZlZFR5cGUoKS51bmlmeU5vZGUo
KTsKICAgICBpZiAoaXM8QVNUOjpVbm5hbWVkVHlwZT4odW5pZnlOb2RlKSkgewogICAgICAgICBh
dXRvJiB1bm5hbWVkVHlwZSA9IGRvd25jYXN0PEFTVDo6VW5uYW1lZFR5cGU+KHVuaWZ5Tm9kZSk7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9NZXRhbC9XSExTTEVu
dHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvTW9k
dWxlcy93ZWJncHUvV0hMU0wvTWV0YWwvV0hMU0xFbnRyeVBvaW50U2NhZmZvbGRpbmcuY3BwCShy
ZXZpc2lvbiAyNDY1MDMpCisrKyBTb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL3dlYmdwdS9XSExTTC9N
ZXRhbC9XSExTTEVudHJ5UG9pbnRTY2FmZm9sZGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMx
NSw5ICszMTUsOSBAQCBTdHJpbmcgRW50cnlQb2ludFNjYWZmb2xkaW5nOjp1bnBhY2tSZXNvCiAg
ICAgICAgICAgICAgICAgYXV0byYgdW5uYW1lZFR5cGUgPSAqbV9lbnRyeVBvaW50SXRlbXMuaW5w
dXRzW2l0ZXJhdG9yLT52YWx1ZV0udW5uYW1lZFR5cGU7CiAgICAgICAgICAgICAgICAgYXV0byBt
YW5nbGVkVHlwZU5hbWUgPSBtX3R5cGVOYW1lci5tYW5nbGVkTmFtZUZvclR5cGUoZG93bmNhc3Q8
QVNUOjpSZWZlcmVuY2VUeXBlPih1bm5hbWVkVHlwZSkuZWxlbWVudFR5cGUoKSk7CiAKLSAgICAg
ICAgICAgICAgICBzdHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJzaXplX3QgIiwgbGVu
Z3RoVGVtcG9yYXJ5TmFtZSwgIiA9ICIsIHZhcmlhYmxlTmFtZSwgJy4nLCBsZW5ndGhFbGVtZW50
TmFtZSwgIi54O1xuIikpOworICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1h
a2VTdHJpbmcoInNpemVfdCAiLCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0gIiwgdmFyaWFibGVO
YW1lLCAnLicsIGxlbmd0aEVsZW1lbnROYW1lLCAiLnk7XG4iKSk7CiAgICAgICAgICAgICAgICAg
c3RyaW5nQnVpbGRlci5hcHBlbmQobWFrZVN0cmluZyhsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0g
IiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiA8PCAzMjtcbiIpKTsKLSAgICAgICAgICAgICAgICBz
dHJpbmdCdWlsZGVyLmFwcGVuZChtYWtlU3RyaW5nKGxlbmd0aFRlbXBvcmFyeU5hbWUsICIgPSAi
LCBsZW5ndGhUZW1wb3JhcnlOYW1lLCAiIHwgIiwgdmFyaWFibGVOYW1lLCAnLicsIGxlbmd0aEVs
ZW1lbnROYW1lLCAiLnk7XG4iKSk7CisgICAgICAgICAgICAgICAgc3RyaW5nQnVpbGRlci5hcHBl
bmQobWFrZVN0cmluZyhsZW5ndGhUZW1wb3JhcnlOYW1lLCAiID0gIiwgbGVuZ3RoVGVtcG9yYXJ5
TmFtZSwgIiB8ICIsIHZhcmlhYmxlTmFtZSwgJy4nLCBsZW5ndGhFbGVtZW50TmFtZSwgIi54O1xu
IikpOwogICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobGVu
Z3RoVGVtcG9yYXJ5TmFtZSwgIiA9ICIsIGxlbmd0aFRlbXBvcmFyeU5hbWUsICIgLyBzaXplb2Yo
IiwgbWFuZ2xlZFR5cGVOYW1lLCAiKTtcbiIpKTsKICAgICAgICAgICAgICAgICBzdHJpbmdCdWls
ZGVyLmFwcGVuZChtYWtlU3RyaW5nKCJpZiAoIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIiA+IDB4
RkZGRkZGRkYpICIsIGxlbmd0aFRlbXBvcmFyeU5hbWUsICIgPSAweEZGRkZGRkZGO1xuIikpOwog
ICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKG1ha2VTdHJpbmcobWFuZ2xlZElu
cHV0UGF0aChwYXRoKSwgIiA9IHsgIiwgdmFyaWFibGVOYW1lLCAnLicsIGVsZW1lbnROYW1lLCAi
LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oIiwgbGVuZ3RoVGVtcG9yYXJ5TmFtZSwgIikgfTtcbiIp
KTsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDI0NjUwMykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE4IEBACisyMDE5LTA2LTE3ICBTYWFtIEJhcmF0aSAg
PHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAgIFtXSExTTF0gTWFrZSAubGVuZ3RoIHdvcmsK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5ODg5MAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogVGVzdEV4
cGVjdGF0aW9uczoKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wtYnVmZmVyLWxlbmd0aC1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1idWZmZXItbGVuZ3RoLmh0bWw6
IEFkZGVkLgorICAgICAgICAqIHdlYmdwdS93aGxzbC1idWZmZXItdmVydGV4Lmh0bWw6CisgICAg
ICAgICogd2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbDoKKyAgICAgICAgKiB3ZWJncHUvd2hsc2wt
bnVsbC1kZXJlZmVyZW5jZS5odG1sOgorICAgICAgICAqIHdlYmdwdS93aGxzbC1vb2ItYWNjZXNz
Lmh0bWw6CisKIDIwMTktMDYtMTcgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIG1pc3NpbmcgdGVzdCByZXN1bHQgYWZ0ZXIgcjI0NjQ3MS4gRVdT
IGRpZG4ndCBzaG93IGFueSBmYWlsdXJlIHdoZW4gaXQgd2FzIG1pc3NpbmcuCkluZGV4OiBMYXlv
dXRUZXN0cy9UZXN0RXhwZWN0YXRpb25zCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL1Rlc3RF
eHBlY3RhdGlvbnMJKHJldmlzaW9uIDI0NjUwMykKKysrIExheW91dFRlc3RzL1Rlc3RFeHBlY3Rh
dGlvbnMJKHdvcmtpbmcgY29weSkKQEAgLTM0MTMsNiArMzQxMywzIEBAIGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2Vic29ja2UKIAogIyBpT1Mgb25seQogZmFzdC9kb20vbGlua2lm
eS1waG9uZS1udW1iZXJzLmh0bWwgWyBJbWFnZU9ubHlGYWlsdXJlIF0KLQotIyBGSVhNRTogU2hv
dWxkIGJlIGZpeGVkIGJ5OiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTk4ODkwCi13ZWJncHUvd2hsc2wtb29iLWFjY2Vzcy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KSW5k
ZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItbGVuZ3RoLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWxlbmd0aC1leHBl
Y3RlZC50eHQJKG5vbmV4aXN0ZW50KQorKysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZl
ci1sZW5ndGgtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNiBAQAorUEFT
UyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCitQQVNTIGFsbEdv
b2QgaXMgdHJ1ZQorUEFTUyByZXN1bHRzRmxvYXQzMkFycmF5WzBdIGlzIDEzMzcKKwpJbmRleDog
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci1sZW5ndGguaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVyLWxlbmd0aC5odG1sCShub25leGlzdGVu
dCkKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1idWZmZXItbGVuZ3RoLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSw4NSBAQAorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQ+Citjb25zdCBzaGFkZXJTb3VyY2UgPSBgCitbbnVtdGhy
ZWFkcygxMzM3LCAxLCAxKV0KK2NvbXB1dGUgdm9pZCBjb21wdXRlU2hhZGVyKGRldmljZSBmbG9h
dFtdIGJ1ZmZlciA6IHJlZ2lzdGVyKHUwKSwgZmxvYXQzIHRocmVhZElEIDogU1ZfRGlzcGF0Y2hU
aHJlYWRJRCkgeworICAgIGJ1ZmZlclt1aW50KHRocmVhZElELngpXSA9IGJ1ZmZlclt1aW50KHRo
cmVhZElELngpXSAqIDIuMDsKKyAgICBidWZmZXJbMF0gPSBmbG9hdChidWZmZXIubGVuZ3RoKTsK
K30KK2A7CitsZXQgcmVzdWx0c0Zsb2F0MzJBcnJheTsKK2xldCBhbGxHb29kID0gdHJ1ZTsKK2Fz
eW5jIGZ1bmN0aW9uIHN0YXJ0KCkgeworICAgIGNvbnN0IGFkYXB0ZXIgPSBhd2FpdCBuYXZpZ2F0
b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7CisgICAgY29uc3QgZGV2aWNlID0gYXdhaXQgYWRhcHRl
ci5yZXF1ZXN0RGV2aWNlKCk7CisKKyAgICBjb25zdCBzaGFkZXJNb2R1bGUgPSBkZXZpY2UuY3Jl
YXRlU2hhZGVyTW9kdWxlKHtjb2RlOiBzaGFkZXJTb3VyY2UsIGlzV0hMU0w6IHRydWV9KTsKKyAg
ICBjb25zdCBjb21wdXRlU3RhZ2UgPSB7bW9kdWxlOiBzaGFkZXJNb2R1bGUsIGVudHJ5UG9pbnQ6
ICJjb21wdXRlU2hhZGVyIn07CisKKyAgICBjb25zdCBiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9y
ID0ge2JpbmRpbmdzOiBbe2JpbmRpbmc6IDAsIHZpc2liaWxpdHk6IDcsIHR5cGU6ICJzdG9yYWdl
LWJ1ZmZlciJ9XX07CisgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJp
bmRHcm91cExheW91dChiaW5kR3JvdXBMYXlvdXREZXNjcmlwdG9yKTsKKyAgICBjb25zdCBwaXBl
bGluZUxheW91dERlc2NyaXB0b3IgPSB7YmluZEdyb3VwTGF5b3V0czogW2JpbmRHcm91cExheW91
dF19OworICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5
b3V0KHBpcGVsaW5lTGF5b3V0RGVzY3JpcHRvcik7CisKKyAgICBjb25zdCBjb21wdXRlUGlwZWxp
bmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxheW91dH07Cisg
ICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQaXBlbGluZShj
b21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKKworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiAxMzM3OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRv
ciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNh
Z2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVy
KGJ1ZmZlckRlc2NyaXB0b3IpOworICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQg
YnVmZmVyLm1hcFdyaXRlQXN5bmMoKTsKKyAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBu
ZXcgRmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKKyAgICBmb3IgKGxldCBpID0gMDsg
aSA8IDEzMzc7ICsraSkgeworICAgICAgICBidWZmZXJGbG9hdDMyQXJyYXlbaV0gPSBpICsgMTsK
KyAgICB9CisgICAgYnVmZmVyLnVubWFwKCk7CisKKyAgICBjb25zdCByZXN1bHRzQnVmZmVyRGVz
Y3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZl
clVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25z
dCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXN1bHRzQnVmZmVyRGVzY3Jp
cHRvcik7CisKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZl
ciwgc2l6ZX07CisgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNv
dXJjZTogYnVmZmVyQmluZGluZ307CisgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHts
YXlvdXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07Cisg
ICAgY29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNj
cmlwdG9yKTsKKworICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1h
bmRFbmNvZGVyKCk7IC8vIHt9CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVy
KGJ1ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7CisgICAgY29uc3QgY29tcHV0ZVBh
c3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOworICAgIGNvbXB1
dGVQYXNzRW5jb2Rlci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOworICAgIGNvbXB1dGVQ
YXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsKKyAgICBjb21wdXRlUGFzc0Vu
Y29kZXIuZGlzcGF0Y2goMiwgMSwgMSk7CisgICAgY29tcHV0ZVBhc3NFbmNvZGVyLmVuZFBhc3Mo
KTsKKyAgICBjb25zdCBjb21tYW5kQnVmZmVyID0gY29tbWFuZEVuY29kZXIuZmluaXNoKCk7Cisg
ICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kQnVmZmVyXSk7CisKKyAgICBjb25z
dCByZXN1bHRzQXJyYXlCdWZmZXIgPSBhd2FpdCByZXN1bHRzQnVmZmVyLm1hcFJlYWRBc3luYygp
OworICAgIHJlc3VsdHNGbG9hdDMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KHJlc3VsdHNBcnJh
eUJ1ZmZlcik7CisgICAgZm9yIChsZXQgaSA9IDE7IGkgPCAxMzM3OyArK2kpIHsKKyAgICAgICAg
aWYgKHJlc3VsdHNGbG9hdDMyQXJyYXlbaV0gIT09IChpICsgMSkgKiAyKQorICAgICAgICAgICAg
YWxsR29vZCA9IGZhbHNlOworICAgIH0KKyAgICBzaG91bGRCZSgiYWxsR29vZCIsICJ0cnVlIik7
CisgICAgc2hvdWxkQmUoInJlc3VsdHNGbG9hdDMyQXJyYXlbMF0iLCAiMTMzNyIpOworICAgIHJl
c3VsdHNCdWZmZXIudW5tYXAoKTsKK30KK2lmICh3aW5kb3cudGVzdFJ1bm5lcikKKyAgICB0ZXN0
UnVubmVyLndhaXRVbnRpbERvbmUoKTsKK3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJsb2FkIiwg
ZnVuY3Rpb24oKSB7CisgICAgc3RhcnQoKS50aGVuKGZ1bmN0aW9uKCkgeworICAgICAgICBpZiAo
d2luZG93LnRlc3RSdW5uZXIpCisgICAgICAgICAgICB0ZXN0UnVubmVyLm5vdGlmeURvbmUoKTsK
KyAgICB9LCBmdW5jdGlvbigpIHsKKyAgICAgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyKQorICAg
ICAgICAgICAgdGVzdFJ1bm5lci5ub3RpZnlEb25lKCk7CisgICAgfSk7Cit9KTsKKzwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWJ1ZmZlci12
ZXJ0ZXguaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtYnVmZmVy
LXZlcnRleC5odG1sCShyZXZpc2lvbiAyNDY1MDMpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hs
c2wtYnVmZmVyLXZlcnRleC5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw3ICszOCw5IEBAIGFz
eW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAgIGNvbnN0IHJlbmRlclBpcGVsaW5lRGVzY3JpcHRv
ciA9IHt2ZXJ0ZXhTdGFnZSwgZnJhZ21lbnRTdGFnZSwgcHJpbWl0aXZlVG9wb2xvZ3ksIHJhc3Rl
cml6YXRpb25TdGF0ZSwgY29sb3JTdGF0ZXMsIGRlcHRoU3RlbmNpbFN0YXRlLCB2ZXJ0ZXhJbnB1
dCwgc2FtcGxlQ291bnQ6IDEsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwogICAgIGNvbnN0IHJl
bmRlclBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHJlbmRlclBpcGVsaW5l
RGVzY3JpcHRvcik7CiAKLSAgICBjb25zdCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZTogNCAqIDQgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsIHVzYWdlOiBHUFVCdWZm
ZXJVc2FnZS5VTklGT1JNIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFfTsKKyAgICBjb25zdCBz
aXplID0gNCAqIDQgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7CisKKyAgICBjb25z
dCByZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdl
LlVOSUZPUk0gfCBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEV9OwogICAgIGNvbnN0IHJlc291cmNl
QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihyZXNvdXJjZUJ1ZmZlckRlc2NyaXB0b3IpOwog
ICAgIGNvbnN0IHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCByZXNvdXJjZUJ1ZmZl
ci5tYXBXcml0ZUFzeW5jKCk7CiAgICAgY29uc3QgcmVzb3VyY2VCdWZmZXJGbG9hdDMyQXJyYXkg
PSBuZXcgRmxvYXQzMkFycmF5KHJlc291cmNlQnVmZmVyQXJyYXlCdWZmZXIpOwpAQCAtNjAsNyAr
NjIsNyBAQCBhc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKICAgICByZXNvdXJjZUJ1ZmZlckZsb2F0
MzJBcnJheVsxNV0gPSAxOwogICAgIHJlc291cmNlQnVmZmVyLnVubWFwKCk7CiAKLSAgICBjb25z
dCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzb3VyY2VCdWZmZXIsIHNpemU6IDR9OworICAg
IGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXNvdXJjZUJ1ZmZlciwgc2l6ZX07CiAg
ICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJjZTogYnVmZmVy
QmluZGluZ307CiAgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlvdXQ6IGJpbmRH
cm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CiAgICAgY29uc3QgYmlu
ZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlwdG9yKTsKSW5k
ZXg6IExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1jb21wdXRlLmh0bWwKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
TGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbAkocmV2aXNpb24gMjQ2NTAzKQor
KysgTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLWNvbXB1dGUuaHRtbAkod29ya2luZyBjb3B5KQpA
QCAtMjcsNyArMjcsOSBAQCBhc3luYyBmdW5jdGlvbiBzdGFydCgpIHsKICAgICBjb25zdCBjb21w
dXRlUGlwZWxpbmVEZXNjcmlwdG9yID0ge2NvbXB1dGVTdGFnZSwgbGF5b3V0OiBwaXBlbGluZUxh
eW91dH07CiAgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lID0gZGV2aWNlLmNyZWF0ZUNvbXB1dGVQ
aXBlbGluZShjb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTsKIAotICAgIGNvbnN0IGJ1ZmZlckRl
c2NyaXB0b3IgPSB7c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNh
Z2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NS
Q307CisgICAgY29uc3Qgc2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDg7
CisKKyAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJV
c2FnZS5NQVBfV1JJVEUgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OwogICAgIGNvbnN0
IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoYnVmZmVyRGVzY3JpcHRvcik7CiAgICAgY29u
c3QgYnVmZmVyQXJyYXlCdWZmZXIgPSBhd2FpdCBidWZmZXIubWFwV3JpdGVBc3luYygpOwogICAg
IGNvbnN0IGJ1ZmZlckZsb2F0MzJBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyQXJyYXlC
dWZmZXIpOwpAQCAtNDEsMTYgKzQzLDE2IEBAIGFzeW5jIGZ1bmN0aW9uIHN0YXJ0KCkgewogICAg
IGJ1ZmZlckZsb2F0MzJBcnJheVs3XSA9IDg7CiAgICAgYnVmZmVyLnVubWFwKCk7CiAKLSAgICBj
b25zdCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMyQXJyYXkuQllURVNf
UEVSX0VMRU1FTlQgKiA4LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuU1RPUkFHRSB8IEdQVUJ1ZmZl
clVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1BUF9SRUFEfTsKKyAgICBjb25z
dCByZXN1bHRzQnVmZmVyRGVzY3JpcHRvciA9IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2Uu
U1RPUkFHRSB8IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX0RTVCB8IEdQVUJ1ZmZlclVzYWdlLk1B
UF9SRUFEfTsKICAgICBjb25zdCByZXN1bHRzQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcihy
ZXN1bHRzQnVmZmVyRGVzY3JpcHRvcik7CiAKLSAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1
ZmZlcjogcmVzdWx0c0J1ZmZlciwgc2l6ZTogNH07CisgICAgY29uc3QgYnVmZmVyQmluZGluZyA9
IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemV9OwogICAgIGNvbnN0IGJpbmRHcm91cEJpbmRp
bmcgPSB7YmluZGluZzogMCwgcmVzb3VyY2U6IGJ1ZmZlckJpbmRpbmd9OwogICAgIGNvbnN0IGJp
bmRHcm91cERlc2NyaXB0b3IgPSB7bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsIGJpbmRpbmdzOiBb
YmluZEdyb3VwQmluZGluZ119OwogICAgIGNvbnN0IGJpbmRHcm91cCA9IGRldmljZS5jcmVhdGVC
aW5kR3JvdXAoYmluZEdyb3VwRGVzY3JpcHRvcik7CiAKICAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpOyAvLyB7fQotICAgIGNvbW1hbmRFbmNv
ZGVyLmNvcHlCdWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIEZsb2F0
MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgpOworICAgIGNvbW1hbmRFbmNvZGVyLmNvcHlC
dWZmZXJUb0J1ZmZlcihidWZmZXIsIDAsIHJlc3VsdHNCdWZmZXIsIDAsIHNpemUpOwogICAgIGNv
bnN0IGNvbXB1dGVQYXNzRW5jb2RlciA9IGNvbW1hbmRFbmNvZGVyLmJlZ2luQ29tcHV0ZVBhc3Mo
KTsKICAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0UGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lKTsK
ICAgICBjb21wdXRlUGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDAsIGJpbmRHcm91cCk7CkluZGV4
OiBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtbnVsbC1kZXJlZmVyZW5jZS5odG1sCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWRlcmVmZXJlbmNlLmh0bWwJKHJl
dmlzaW9uIDI0NjUwMykKKysrIExheW91dFRlc3RzL3dlYmdwdS93aGxzbC1udWxsLWRlcmVmZXJl
bmNlLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTYzLDcgKzYzLDkgQEAgYXN5bmMgZnVuY3Rpb24g
c3RhcnQoKSB7CiAgICAgY29uc3QgY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvciA9IHtjb21wdXRl
U3RhZ2UsIGxheW91dDogcGlwZWxpbmVMYXlvdXR9OwogICAgIGNvbnN0IGNvbXB1dGVQaXBlbGlu
ZSA9IGRldmljZS5jcmVhdGVDb21wdXRlUGlwZWxpbmUoY29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRv
cik7CiAKLSAgICBjb25zdCBidWZmZXJEZXNjcmlwdG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5C
WVRFU19QRVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5NQVBfV1JJVEUgfCBH
UFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9TUkN9OworICAgIGNvbnN0IHNpemUgPSBGbG9hdDMyQXJy
YXkuQllURVNfUEVSX0VMRU1FTlQgKiA4OworCisgICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9
IHtzaXplLCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dSSVRFIHwgR1BVQnVmZmVyVXNhZ2Uu
VFJBTlNGRVJfU1JDfTsKICAgICBjb25zdCBidWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKGJ1
ZmZlckRlc2NyaXB0b3IpOwogICAgIGNvbnN0IGJ1ZmZlckFycmF5QnVmZmVyID0gYXdhaXQgYnVm
ZmVyLm1hcFdyaXRlQXN5bmMoKTsKICAgICBjb25zdCBidWZmZXJGbG9hdDMyQXJyYXkgPSBuZXcg
RmxvYXQzMkFycmF5KGJ1ZmZlckFycmF5QnVmZmVyKTsKQEAgLTc3LDE2ICs3OSwxNiBAQCBhc3lu
YyBmdW5jdGlvbiBzdGFydCgpIHsKICAgICBidWZmZXJGbG9hdDMyQXJyYXlbN10gPSA4OwogICAg
IGJ1ZmZlci51bm1hcCgpOwogCi0gICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7
c2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogOCwgdXNhZ2U6IEdQVUJ1ZmZl
clVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJV
c2FnZS5NQVBfUkVBRH07CisgICAgY29uc3QgcmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IgPSB7c2l6
ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlNUT1JBR0UgfCBHUFVCdWZmZXJVc2FnZS5UUkFOU0ZF
Ul9EU1QgfCBHUFVCdWZmZXJVc2FnZS5NQVBfUkVBRH07CiAgICAgY29uc3QgcmVzdWx0c0J1ZmZl
ciA9IGRldmljZS5jcmVhdGVCdWZmZXIocmVzdWx0c0J1ZmZlckRlc2NyaXB0b3IpOwogCi0gICAg
Y29uc3QgYnVmZmVyQmluZGluZyA9IHtidWZmZXI6IHJlc3VsdHNCdWZmZXIsIHNpemU6IDR9Owor
ICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXplfTsK
ICAgICBjb25zdCBiaW5kR3JvdXBCaW5kaW5nID0ge2JpbmRpbmc6IDAsIHJlc291cmNlOiBidWZm
ZXJCaW5kaW5nfTsKICAgICBjb25zdCBiaW5kR3JvdXBEZXNjcmlwdG9yID0ge2xheW91dDogYmlu
ZEdyb3VwTGF5b3V0LCBiaW5kaW5nczogW2JpbmRHcm91cEJpbmRpbmddfTsKICAgICBjb25zdCBi
aW5kR3JvdXAgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwKGJpbmRHcm91cERlc2NyaXB0b3IpOwog
CiAgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBkZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIo
KTsgLy8ge30KLSAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAw
LCByZXN1bHRzQnVmZmVyLCAwLCBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4KTsK
KyAgICBjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoYnVmZmVyLCAwLCByZXN1bHRz
QnVmZmVyLCAwLCBzaXplKTsKICAgICBjb25zdCBjb21wdXRlUGFzc0VuY29kZXIgPSBjb21tYW5k
RW5jb2Rlci5iZWdpbkNvbXB1dGVQYXNzKCk7CiAgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldFBp
cGVsaW5lKGNvbXB1dGVQaXBlbGluZSk7CiAgICAgY29tcHV0ZVBhc3NFbmNvZGVyLnNldEJpbmRH
cm91cCgwLCBiaW5kR3JvdXApOwpJbmRleDogTGF5b3V0VGVzdHMvd2ViZ3B1L3dobHNsLW9vYi1h
Y2Nlc3MuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wtb29iLWFj
Y2Vzcy5odG1sCShyZXZpc2lvbiAyNDY1MDMpCisrKyBMYXlvdXRUZXN0cy93ZWJncHUvd2hsc2wt
b29iLWFjY2Vzcy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw3ICszMCw5IEBAIGFzeW5jIGZ1
bmN0aW9uIHN0YXJ0KCkgewogICAgIGNvbnN0IGNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3IgPSB7
Y29tcHV0ZVN0YWdlLCBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0fTsKICAgICBjb25zdCBjb21wdXRl
UGlwZWxpbmUgPSBkZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKGNvbXB1dGVQaXBlbGluZURl
c2NyaXB0b3IpOwogCi0gICAgY29uc3QgYnVmZmVyRGVzY3JpcHRvciA9IHtzaXplOiBGbG9hdDMy
QXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiA4LCB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuTUFQX1dS
SVRFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDfTsKKyAgICBjb25zdCBzaXplID0gRmxv
YXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogODsKKworICAgIGNvbnN0IGJ1ZmZlckRlc2Ny
aXB0b3IgPSB7c2l6ZSwgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLk1BUF9XUklURSB8IEdQVUJ1ZmZl
clVzYWdlLlRSQU5TRkVSX1NSQ307CiAgICAgY29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1
ZmZlcihidWZmZXJEZXNjcmlwdG9yKTsKICAgICBjb25zdCBidWZmZXJBcnJheUJ1ZmZlciA9IGF3
YWl0IGJ1ZmZlci5tYXBXcml0ZUFzeW5jKCk7CiAgICAgY29uc3QgYnVmZmVyRmxvYXQzMkFycmF5
ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXJBcnJheUJ1ZmZlcik7CkBAIC00NCwxNiArNDYsMTYg
QEAgYXN5bmMgZnVuY3Rpb24gc3RhcnQoKSB7CiAgICAgYnVmZmVyRmxvYXQzMkFycmF5WzddID0g
ODsKICAgICBidWZmZXIudW5tYXAoKTsKIAotICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlw
dG9yID0ge3NpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIDgsIHVzYWdlOiBH
UFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfRFNUIHwgR1BV
QnVmZmVyVXNhZ2UuTUFQX1JFQUR9OworICAgIGNvbnN0IHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9y
ID0ge3NpemUsIHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5TVE9SQUdFIHwgR1BVQnVmZmVyVXNhZ2Uu
VFJBTlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuTUFQX1JFQUR9OwogICAgIGNvbnN0IHJlc3Vs
dHNCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyKHJlc3VsdHNCdWZmZXJEZXNjcmlwdG9yKTsK
IAotICAgIGNvbnN0IGJ1ZmZlckJpbmRpbmcgPSB7YnVmZmVyOiByZXN1bHRzQnVmZmVyLCBzaXpl
OiA0fTsKKyAgICBjb25zdCBidWZmZXJCaW5kaW5nID0ge2J1ZmZlcjogcmVzdWx0c0J1ZmZlciwg
c2l6ZX07CiAgICAgY29uc3QgYmluZEdyb3VwQmluZGluZyA9IHtiaW5kaW5nOiAwLCByZXNvdXJj
ZTogYnVmZmVyQmluZGluZ307CiAgICAgY29uc3QgYmluZEdyb3VwRGVzY3JpcHRvciA9IHtsYXlv
dXQ6IGJpbmRHcm91cExheW91dCwgYmluZGluZ3M6IFtiaW5kR3JvdXBCaW5kaW5nXX07CiAgICAg
Y29uc3QgYmluZEdyb3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cChiaW5kR3JvdXBEZXNjcmlw
dG9yKTsKIAogICAgIGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gZGV2aWNlLmNyZWF0ZUNvbW1hbmRF
bmNvZGVyKCk7IC8vIHt9Ci0gICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1
ZmZlciwgMCwgcmVzdWx0c0J1ZmZlciwgMCwgRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5U
ICogOCk7CisgICAgY29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKGJ1ZmZlciwgMCwg
cmVzdWx0c0J1ZmZlciwgMCwgc2l6ZSk7CiAgICAgY29uc3QgY29tcHV0ZVBhc3NFbmNvZGVyID0g
Y29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpOwogICAgIGNvbXB1dGVQYXNzRW5jb2Rl
ci5zZXRQaXBlbGluZShjb21wdXRlUGlwZWxpbmUpOwogICAgIGNvbXB1dGVQYXNzRW5jb2Rlci5z
ZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTsK
</data>
<flag name="review"
          id="388044"
          type_id="1"
          status="+"
          setter="mmaxfield"
    />
          </attachment>
      

    </bug>

</bugzilla>