<?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>201606</bug_id>
          
          <creation_ts>2019-09-09 10:39:58 -0700</creation_ts>
          <short_desc>Upload triangles tests for 3D suite in MotionMark</short_desc>
          <delta_ts>2019-09-09 12:31:19 -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>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=201609</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Jon Lee">jonlee</reporter>
          <assigned_to name="Jon Lee">jonlee</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>jond</cc>
    
    <cc>justin_fan</cc>
    
    <cc>mmaxfield</cc>
    
    <cc>rniwa</cc>
    
    <cc>sabouhallawa</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1569185</commentid>
    <comment_count>0</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-09-09 10:39:58 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569196</commentid>
    <comment_count>1</comment_count>
      <attachid>378384</attachid>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-09-09 10:58:33 -0700</bug_when>
    <thetext>Created attachment 378384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569210</commentid>
    <comment_count>2</comment_count>
      <attachid>378384</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2019-09-09 11:20:10 -0700</bug_when>
    <thetext>Comment on attachment 378384
Patch

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

&gt; Websites/browserbench.org/MotionMark1.1/tests/3d/resources/webgpu.js:66
&gt; +struct VertexOutput {
&gt; +  float4 position : SV_Position;
&gt; +  float4 color : attribute(1);
&gt; +}
&gt; +
&gt; +vertex VertexOutput vertexMain(float4 position : attribute(0),
&gt; +                                float4 color : attribute(1),
&gt; +                                constant float[] timeUniform : register(b0, space0),
&gt; +                                constant float[] uniforms : register(b0, space1)) {
&gt; +  float scale = uniforms[0];
&gt; +  float offsetX = uniforms[1];
&gt; +  float offsetY = uniforms[2];
&gt; +  float scalar = uniforms[3];
&gt; +  float scalarOffset = uniforms[4];
&gt; +  float time = timeUniform[0];
&gt; +
&gt; +  float fade = fmod(scalarOffset + time * scalar / 10.0, 1.0);
&gt; +  if (fade &lt; 0.5) {
&gt; +      fade = fade * 2.0;
&gt; +  } else {
&gt; +      fade = (1.0 - fade) * 2.0;
&gt; +  }
&gt; +  float xpos = position.x * scale;
&gt; +  float ypos = position.y * scale;
&gt; +  float angle = 3.14159 * 2.0 * fade;
&gt; +  float xrot = xpos * cos(angle) - ypos * sin(angle);
&gt; +  float yrot = xpos * sin(angle) + ypos * cos(angle);
&gt; +  xpos = xrot + offsetX;
&gt; +  ypos = yrot + offsetY;
&gt; +
&gt; +  VertexOutput out;
&gt; +  out.position = float4(xpos, ypos, 0.0, 1.0);
&gt; +  out.color = float4(fade, 1.0 - fade, 0.0, 1.0) + color;
&gt; +  return out;
&gt; +}
&gt; +
&gt; +fragment float4 fragmentMain(float4 inColor : attribute(1)) : SV_Target 0 {
&gt; +    return inColor;
&gt; +}
&gt; +`;

Should be 4-space indent.

&gt; Websites/browserbench.org/MotionMark1.1/tests/3d/resources/webgpu.js:168
&gt; +                    0, 0.1, 0, 1,     /**/ 1, 0, 0, 1,
&gt; +                    -0.1, -0.1, 0, 1, /**/ 0, 1, 0, 1,
&gt; +                    0.1, -0.1, 0, 1,  /**/ 0, 0, 1, 1,

I would line these up.

&gt; Websites/browserbench.org/MotionMark1.1/tests/3d/triangles-webgl.html:78
&gt; +#ifdef GL_ES
&gt; +precision mediump float;
&gt; +#endif

That&apos;s a thing?

&gt; PerformanceTests/MotionMark/tests/3d/resources/webgpu.js:66
&gt; +vertex VertexOutput vertexMain(float4 position : attribute(0),
&gt; +                                float4 color : attribute(1),
&gt; +                                constant float[] timeUniform : register(b0, space0),
&gt; +                                constant float[] uniforms : register(b0, space1)) {
&gt; +  float scale = uniforms[0];
&gt; +  float offsetX = uniforms[1];
&gt; +  float offsetY = uniforms[2];
&gt; +  float scalar = uniforms[3];
&gt; +  float scalarOffset = uniforms[4];
&gt; +  float time = timeUniform[0];
&gt; +
&gt; +  float fade = fmod(scalarOffset + time * scalar / 10.0, 1.0);
&gt; +  if (fade &lt; 0.5) {
&gt; +      fade = fade * 2.0;
&gt; +  } else {
&gt; +      fade = (1.0 - fade) * 2.0;
&gt; +  }
&gt; +  float xpos = position.x * scale;
&gt; +  float ypos = position.y * scale;
&gt; +  float angle = 3.14159 * 2.0 * fade;
&gt; +  float xrot = xpos * cos(angle) - ypos * sin(angle);
&gt; +  float yrot = xpos * sin(angle) + ypos * cos(angle);
&gt; +  xpos = xrot + offsetX;
&gt; +  ypos = yrot + offsetY;
&gt; +
&gt; +  VertexOutput out;
&gt; +  out.position = float4(xpos, ypos, 0.0, 1.0);
&gt; +  out.color = float4(fade, 1.0 - fade, 0.0, 1.0) + color;
&gt; +  return out;
&gt; +}
&gt; +
&gt; +fragment float4 fragmentMain(float4 inColor : attribute(1)) : SV_Target 0 {
&gt; +    return inColor;
&gt; +}
&gt; +`;

Clean up indent

&gt; PerformanceTests/MotionMark/tests/3d/resources/webgpu.js:168
&gt; +                    0, 0.1, 0, 1,     /**/ 1, 0, 0, 1,
&gt; +                    -0.1, -0.1, 0, 1, /**/ 0, 1, 0, 1,
&gt; +                    0.1, -0.1, 0, 1,  /**/ 0, 0, 1, 1,

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569212</commentid>
    <comment_count>3</comment_count>
    <who name="Jon Lee">jonlee</who>
    <bug_when>2019-09-09 11:24:35 -0700</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #2)
Thanks. I filed b201609 to address those comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569244</commentid>
    <comment_count>4</comment_count>
      <attachid>378384</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-09 12:30:56 -0700</bug_when>
    <thetext>Comment on attachment 378384
Patch

Clearing flags on attachment: 378384

Committed r249657: &lt;https://trac.webkit.org/changeset/249657&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569245</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2019-09-09 12:30:58 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1569247</commentid>
    <comment_count>6</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2019-09-09 12:31:19 -0700</bug_when>
    <thetext>&lt;rdar://problem/55193279&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>378384</attachid>
            <date>2019-09-09 10:58:33 -0700</date>
            <delta_ts>2019-09-09 12:30:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-201606-20190909105832.patch</filename>
            <type>text/plain</type>
            <size>50614</size>
            <attacher name="Jon Lee">jonlee</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjQ5NDQyCmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL0NoYW5nZUxvZyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9n
CmluZGV4IDNhNTU3ZDM4ZTJmYjUzZjRlNGEwNDk3M2YzNGE1ZDFjZDAyZWIxYTMuLjg3MDY5NDk2
Y2MxNjBkZWZhODY0NmFiMWY5OWMyOWUwODFhYjIzYzggMTAwNjQ0Ci0tLSBhL1dlYnNpdGVzL2Jy
b3dzZXJiZW5jaC5vcmcvQ2hhbmdlTG9nCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTktMDktMDkgIEpvbiBMZWUgIDxqb25sZWVA
YXBwbGUuY29tPgorCisgICAgICAgIFVwbG9hZCB0cmlhbmdsZXMgdGVzdHMgZm9yIDNEIHN1aXRl
IGluIE1vdGlvbk1hcmsKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIwMTYwNgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogTW90aW9uTWFyazEuMS9yZXNvdXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzOgor
ICAgICAgICAqIE1vdGlvbk1hcmsxLjEvdGVzdHMvM2QvcmVzb3VyY2VzL3dlYmdsLmpzOgorICAg
ICAgICAqIE1vdGlvbk1hcmsxLjEvdGVzdHMvM2QvcmVzb3VyY2VzL3dlYmdwdS5qczogQWRkZWQu
CisgICAgICAgICogTW90aW9uTWFyazEuMS90ZXN0cy8zZC90cmlhbmdsZXMtd2ViZ2wuaHRtbDog
Q29waWVkIGZyb20gUGVyZm9ybWFuY2VUZXN0cy9Nb3Rpb25NYXJrL3Rlc3RzLzNkL3dlYmdsLmh0
bWwuCisgICAgICAgICogTW90aW9uTWFyazEuMS90ZXN0cy8zZC90cmlhbmdsZXMtd2ViZ3B1Lmh0
bWw6IFJlbmFtZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsvdGVzdHMvM2Qvd2Vi
Z2wuaHRtbC4KKwogMjAxOS0wNC0xNiAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+CiAKICAg
ICAgICAgW01vdGlvbk1hcmtdIFRoZSB0ZXh0ICJra2tqIiBpcyBjYXVzaW5nIEZpcmVmb3ggY29u
c29sZSB3YXJuaW5nOiBgdW5yZWFjaGFibGUgY29kZSBhZnRlciByZXR1cm4gc3RhdGVtZW50YApk
aWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9Nb3Rpb25NYXJrMS4xL3Jlc291
cmNlcy9kZWJ1Zy1ydW5uZXIvdGVzdHMuanMgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL01v
dGlvbk1hcmsxLjEvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci90ZXN0cy5qcwppbmRleCA3ZDcwMWM5
NDM3NTBiYzAwYmZmZGY1MzAyMWY4MDM5YjI0OTI3OWVmLi5mNWIwODY2ZmU2ODYwZGMzMjMzOGQw
ZWU3NTlkMTlkNTdlYTJlNzRjIDEwMDY0NAotLS0gYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3Jn
L01vdGlvbk1hcmsxLjEvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci90ZXN0cy5qcworKysgYi9XZWJz
aXRlcy9icm93c2VyYmVuY2gub3JnL01vdGlvbk1hcmsxLjEvcmVzb3VyY2VzL2RlYnVnLXJ1bm5l
ci90ZXN0cy5qcwpAQCAtMzU0LDggKzM1NCwxMiBAQCBTdWl0ZXMucHVzaChuZXcgU3VpdGUoIlN1
aXRzIHN1aXRlIiwKIFN1aXRlcy5wdXNoKG5ldyBTdWl0ZSgiM0QgR3JhcGhpY3MiLAogICAgIFsK
ICAgICAgICAgewotICAgICAgICAgICAgdXJsOiAiM2Qvd2ViZ2wuaHRtbCIsCi0gICAgICAgICAg
ICBuYW1lOiAiV2ViR0wiCisgICAgICAgICAgICB1cmw6ICIzZC90cmlhbmdsZXMtd2ViZ2wuaHRt
bCIsCisgICAgICAgICAgICBuYW1lOiAiVHJpYW5nbGVzIChXZWJHTCkiCisgICAgICAgIH0sCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHVybDogIjNkL3RyaWFuZ2xlcy13ZWJncHUuaHRtbCIsCisg
ICAgICAgICAgICBuYW1lOiAiVHJpYW5nbGVzIChXZWJHUFUpIgogICAgICAgICB9LAogICAgIF0K
ICkpOwpkaWZmIC0tZ2l0IGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9Nb3Rpb25NYXJrMS4x
L3Rlc3RzLzNkL3Jlc291cmNlcy93ZWJnbC5qcyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
TW90aW9uTWFyazEuMS90ZXN0cy8zZC9yZXNvdXJjZXMvd2ViZ2wuanMKaW5kZXggMTBiODM2YjQx
Mzg4NTlkYWVmZGYwZGM2ZTZhYmM2MGIxMTI2NTZhZC4uMzNkYzBmZWEzOTNlYjM3NmEwNjA0NjQw
MTZiNjg5MjFhYjNhODlhNiAxMDA2NDQKLS0tIGEvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9N
b3Rpb25NYXJrMS4xL3Rlc3RzLzNkL3Jlc291cmNlcy93ZWJnbC5qcworKysgYi9XZWJzaXRlcy9i
cm93c2VyYmVuY2gub3JnL01vdGlvbk1hcmsxLjEvdGVzdHMvM2QvcmVzb3VyY2VzL3dlYmdsLmpz
CkBAIC00MSw3ICs0MSw3IEBAIFdlYkdMU3RhZ2UgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3Mo
U3RhZ2UsCiAgICAgICAgICAgICB0aGlzLl9nbCA9IHRoaXMuZWxlbWVudC5nZXRDb250ZXh0KCJ3
ZWJnbCIpOwogICAgICAgICAgICAgdmFyIGdsID0gdGhpcy5fZ2w7CiAKLSAgICAgICAgICAgIGds
LmNsZWFyQ29sb3IoMC41LCAwLjUsIDAuNSwgMSk7CisgICAgICAgICAgICBnbC5jbGVhckNvbG9y
KDAsIDAsIDAsIDEpOwogCiAgICAgICAgICAgICAvLyBDcmVhdGUgdGhlIHZlcnRleCBzaGFkZXIg
b2JqZWN0LgogICAgICAgICAgICAgdmFyIHZlcnRleFNoYWRlciA9IGdsLmNyZWF0ZVNoYWRlcihn
bC5WRVJURVhfU0hBREVSKTsKZGlmZiAtLWdpdCBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcv
TW90aW9uTWFyazEuMS90ZXN0cy8zZC9yZXNvdXJjZXMvd2ViZ3B1LmpzIGIvV2Vic2l0ZXMvYnJv
d3NlcmJlbmNoLm9yZy9Nb3Rpb25NYXJrMS4xL3Rlc3RzLzNkL3Jlc291cmNlcy93ZWJncHUuanMK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjg0OGQxY2JhZDkyNTczZWNkYTRmNjhmYzlmN2JlZjUzOTFiODQ0NwotLS0g
L2Rldi9udWxsCisrKyBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvTW90aW9uTWFyazEuMS90
ZXN0cy8zZC9yZXNvdXJjZXMvd2ViZ3B1LmpzCkBAIC0wLDAgKzEsMzM0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBD
T05UUklCVVRPUlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IgSVRTIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAq
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisg
KiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworY29uc3Qgd2hsc2xTaGFkZXJzID0gYAorc3RydWN0IFZlcnRleE91dHB1dCB7CisgIGZsb2F0
NCBwb3NpdGlvbiA6IFNWX1Bvc2l0aW9uOworICBmbG9hdDQgY29sb3IgOiBhdHRyaWJ1dGUoMSk7
Cit9CisKK3ZlcnRleCBWZXJ0ZXhPdXRwdXQgdmVydGV4TWFpbihmbG9hdDQgcG9zaXRpb24gOiBh
dHRyaWJ1dGUoMCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0NCBjb2xv
ciA6IGF0dHJpYnV0ZSgxKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Rh
bnQgZmxvYXRbXSB0aW1lVW5pZm9ybSA6IHJlZ2lzdGVyKGIwLCBzcGFjZTApLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBjb25zdGFudCBmbG9hdFtdIHVuaWZvcm1zIDogcmVnaXN0
ZXIoYjAsIHNwYWNlMSkpIHsKKyAgZmxvYXQgc2NhbGUgPSB1bmlmb3Jtc1swXTsKKyAgZmxvYXQg
b2Zmc2V0WCA9IHVuaWZvcm1zWzFdOworICBmbG9hdCBvZmZzZXRZID0gdW5pZm9ybXNbMl07Cisg
IGZsb2F0IHNjYWxhciA9IHVuaWZvcm1zWzNdOworICBmbG9hdCBzY2FsYXJPZmZzZXQgPSB1bmlm
b3Jtc1s0XTsKKyAgZmxvYXQgdGltZSA9IHRpbWVVbmlmb3JtWzBdOworCisgIGZsb2F0IGZhZGUg
PSBmbW9kKHNjYWxhck9mZnNldCArIHRpbWUgKiBzY2FsYXIgLyAxMC4wLCAxLjApOworICBpZiAo
ZmFkZSA8IDAuNSkgeworICAgICAgZmFkZSA9IGZhZGUgKiAyLjA7CisgIH0gZWxzZSB7CisgICAg
ICBmYWRlID0gKDEuMCAtIGZhZGUpICogMi4wOworICB9CisgIGZsb2F0IHhwb3MgPSBwb3NpdGlv
bi54ICogc2NhbGU7CisgIGZsb2F0IHlwb3MgPSBwb3NpdGlvbi55ICogc2NhbGU7CisgIGZsb2F0
IGFuZ2xlID0gMy4xNDE1OSAqIDIuMCAqIGZhZGU7CisgIGZsb2F0IHhyb3QgPSB4cG9zICogY29z
KGFuZ2xlKSAtIHlwb3MgKiBzaW4oYW5nbGUpOworICBmbG9hdCB5cm90ID0geHBvcyAqIHNpbihh
bmdsZSkgKyB5cG9zICogY29zKGFuZ2xlKTsKKyAgeHBvcyA9IHhyb3QgKyBvZmZzZXRYOworICB5
cG9zID0geXJvdCArIG9mZnNldFk7CisKKyAgVmVydGV4T3V0cHV0IG91dDsKKyAgb3V0LnBvc2l0
aW9uID0gZmxvYXQ0KHhwb3MsIHlwb3MsIDAuMCwgMS4wKTsKKyAgb3V0LmNvbG9yID0gZmxvYXQ0
KGZhZGUsIDEuMCAtIGZhZGUsIDAuMCwgMS4wKSArIGNvbG9yOworICByZXR1cm4gb3V0OworfQor
CitmcmFnbWVudCBmbG9hdDQgZnJhZ21lbnRNYWluKGZsb2F0NCBpbkNvbG9yIDogYXR0cmlidXRl
KDEpKSA6IFNWX1RhcmdldCAwIHsKKyAgICByZXR1cm4gaW5Db2xvcjsKK30KK2A7CisKKyhmdW5j
dGlvbigpIHsKKworV2ViR0xTdGFnZSA9IFV0aWxpdGllcy5jcmVhdGVTdWJjbGFzcyhTdGFnZSwK
KyAgICBmdW5jdGlvbihlbGVtZW50LCBvcHRpb25zKQorICAgIHsKKyAgICAgICAgU3RhZ2UuY2Fs
bCh0aGlzKTsKKyAgICB9LAorICAgIHsKKyAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24oYmVu
Y2htYXJrLCBvcHRpb25zKQorICAgICAgICB7CisgICAgICAgICAgICBTdGFnZS5wcm90b3R5cGUu
aW5pdGlhbGl6ZS5jYWxsKHRoaXMsIGJlbmNobWFyaywgb3B0aW9ucyk7CisKKyAgICAgICAgICAg
IHRoaXMuX251bVRyaWFuZ2xlcyA9IDA7CisKKyAgICAgICAgICAgIGNvbnN0IGdwdUNvbnRleHQg
PSB0aGlzLmVsZW1lbnQuZ2V0Q29udGV4dCgnZ3B1Jyk7CisKKyAgICAgICAgICAgIG5hdmlnYXRv
ci5ncHUucmVxdWVzdEFkYXB0ZXIoeyBwb3dlclByZWZlcmVuY2U6ICJsb3ctcG93ZXIiIH0pLnRo
ZW4oYWRhcHRlciA9PiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGFkYXB0ZXIucmVxdWVzdERl
dmljZSgpLnRoZW4oZGV2aWNlID0+IHsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fZGV2aWNl
ID0gZGV2aWNlOworCisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN3YXBDaGFpbkZvcm1hdCA9
ICJiZ3JhOHVub3JtIjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fc3dhcENoYWluID0gZ3B1
Q29udGV4dC5jb25maWd1cmVTd2FwQ2hhaW4oeworICAgICAgICAgICAgICAgICAgICAgICAgZGV2
aWNlOiBkZXZpY2UsCisgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXQ6IHN3YXBDaGFpbkZv
cm1hdCwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuT1VU
UFVUX0FUVEFDSE1FTlQKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAg
ICAgICAgdGhpcy5fdGltZUJpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBM
YXlvdXQoeworICAgICAgICAgICAgICAgICAgICAgICAgYmluZGluZ3M6IFsKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB7IGJpbmRpbmc6IDAsIHZpc2liaWxpdHk6IEdQVVNoYWRlclN0YWdl
Qml0LlZFUlRFWCwgdHlwZTogInVuaWZvcm0tYnVmZmVyIiB9LAorICAgICAgICAgICAgICAgICAg
ICAgICAgXSwKKyAgICAgICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAg
dGhpcy5fYmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dCh7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBiaW5kaW5nczogWworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHsgYmluZGluZzogMCwgdmlzaWJpbGl0eTogR1BVU2hhZGVyU3RhZ2VCaXQuVkVSVEVY
LCB0eXBlOiAidW5pZm9ybS1idWZmZXIiIH0sCisgICAgICAgICAgICAgICAgICAgICAgICBdLAor
ICAgICAgICAgICAgICAgICAgICB9KTsKKworICAgICAgICAgICAgICAgICAgICBjb25zdCB2ZWM0
U2l6ZSA9IDQgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7CisKKyAgICAgICAgICAg
ICAgICAgICAgY29uc3QgcGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlv
dXQoeyBiaW5kR3JvdXBMYXlvdXRzOiBbdGhpcy5fdGltZUJpbmRHcm91cExheW91dCwgdGhpcy5f
YmluZEdyb3VwTGF5b3V0XSB9KTsKKyAgICAgICAgICAgICAgICAgICAgY29uc3Qgc2hhZGVyTW9k
dWxlID0gZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7IGNvZGU6IHdobHNsU2hhZGVycywgaXNX
SExTTDogdHJ1ZSB9KTsKKworICAgICAgICAgICAgICAgICAgICBjb25zdCBwaXBlbGluZURlc2Mg
PSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsYXlvdXQ6IHBpcGVsaW5lTGF5b3V0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgdmVydGV4U3RhZ2U6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb2R1bGU6IHNoYWRlck1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnRyeVBvaW50OiAidmVydGV4TWFpbiIsCisgICAgICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnRTdGFnZTogeworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vZHVsZTogc2hhZGVyTW9kdWxlLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVudHJ5UG9pbnQ6ICJmcmFnbWVudE1haW4iCisgICAgICAgICAgICAgICAgICAgICAg
ICB9LAorCisgICAgICAgICAgICAgICAgICAgICAgICBwcmltaXRpdmVUb3BvbG9neTogInRyaWFu
Z2xlLWxpc3QiLAorCisgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhJbnB1dDogeworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4Rm9ybWF0OiAidWludDMyIiwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhCdWZmZXJzOiBbeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAvLyB2ZXJ0ZXggYnVmZmVyCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHN0cmlkZTogMiAqIHZlYzRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBzdGVwTW9kZTogInZlcnRleCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
IGF0dHJpYnV0ZVNldDogW3sKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8v
IHZlcnRleCBwb3NpdGlvbnMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNo
YWRlckxvY2F0aW9uOiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0OiAwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiAiZmxv
YXQ0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCB7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJ0ZXggY29sb3JzCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzaGFkZXJMb2NhdGlvbjogMSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9mZnNldDogdmVjNFNpemUsCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmb3JtYXQ6ICJmbG9hdDQiCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIH1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1dLAorICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgcmFzdGVyaXphdGlv
blN0YXRlOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbnRGYWNlOiAnY2N3JywK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdWxsTW9kZTogJ25vbmUnLAorICAgICAgICAg
ICAgICAgICAgICAgICAgfSwKKworICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JTdGF0ZXM6
IFt7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBzd2FwQ2hhaW5Gb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxwaGFCbGVuZDoge30sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29sb3JCbGVuZDoge30sCisgICAgICAgICAgICAgICAgICAgICAg
ICB9XSwKKyAgICAgICAgICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICB0aGlz
Ll9waXBlbGluZSA9IGRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZShwaXBlbGluZURlc2MpOwor
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IFt2ZXJ0ZXhCdWZmZXIsIHZlcnRleEFycmF5QnVm
ZmVyXSA9IGRldmljZS5jcmVhdGVCdWZmZXJNYXBwZWQoeworICAgICAgICAgICAgICAgICAgICAg
ICAgc2l6ZTogMiAqIDMgKiB2ZWM0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzYWdl
OiBHUFVCdWZmZXJVc2FnZS5WRVJURVgKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IHZlcnRleFdyaXRlQnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheSh2
ZXJ0ZXhBcnJheUJ1ZmZlcik7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleFdyaXRlQnVmZmVy
LnNldChbCisgICAgICAgICAgICAgICAgICAgIC8vIHBvc2l0aW9uIGRhdGEgIC8qKi8gY29sb3Ig
ZGF0YQorICAgICAgICAgICAgICAgICAgICAwLCAwLjEsIDAsIDEsICAgICAvKiovIDEsIDAsIDAs
IDEsCisgICAgICAgICAgICAgICAgICAgIC0wLjEsIC0wLjEsIDAsIDEsIC8qKi8gMCwgMSwgMCwg
MSwKKyAgICAgICAgICAgICAgICAgICAgMC4xLCAtMC4xLCAwLCAxLCAgLyoqLyAwLCAwLCAxLCAx
LAorICAgICAgICAgICAgICAgICAgICBdKTsKKyAgICAgICAgICAgICAgICAgICAgdmVydGV4QnVm
ZmVyLnVubWFwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdmVydGV4QnVmZmVyID0g
dmVydGV4QnVmZmVyOworICAgICAgICAgICAgICAgICAgICB0aGlzLl90aW1lTWFwcGVkQnVmZmVy
cyA9IFtdOworCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3Jlc2V0SWZOZWNlc3NhcnkoKTsK
KworICAgICAgICAgICAgICAgICAgICBiZW5jaG1hcmsuX2luaXRQcm9taXNlLnJlc29sdmUoKTsK
KyAgICAgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAg
ICAgIF9nZXRGdW5jdGlvblNvdXJjZTogZnVuY3Rpb24oaWQpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkudGV4dDsKKyAgICAgICAgfSwK
KworICAgICAgICBfcmVzZXRJZk5lY2Vzc2FyeTogZnVuY3Rpb24oKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAodGhpcy5fYmluZEdyb3VwcyAhPSB1bmRlZmluZWQgJiYgdGhpcy5fbnVtVHJp
YW5nbGVzIDw9IHRoaXMuX2JpbmRHcm91cHMubGVuZ3RoKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgY29uc3QgbnVtVHJpYW5nbGVzID0gdGhpcy5fbnVtVHJpYW5nbGVz
OworCisgICAgICAgICAgICBjb25zdCBkZXZpY2UgPSB0aGlzLl9kZXZpY2U7CisKKyAgICAgICAg
ICAgIC8vIE1pbmltdW0gYnVmZmVyIG9mZnNldCBhbGlnbm1lbnQgaXMgMjU2IGJ5dGVzLgorICAg
ICAgICAgICAgY29uc3QgdW5pZm9ybUJ5dGVzID0gNSAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJf
RUxFTUVOVDsKKyAgICAgICAgICAgIGNvbnN0IGFsaWduZWRVbmlmb3JtQnl0ZXMgPSBNYXRoLmNl
aWwodW5pZm9ybUJ5dGVzIC8gMjU2KSAqIDI1NjsKKyAgICAgICAgICAgIGNvbnN0IGFsaWduZWRV
bmlmb3JtRmxvYXRzID0gYWxpZ25lZFVuaWZvcm1CeXRlcyAvIEZsb2F0MzJBcnJheS5CWVRFU19Q
RVJfRUxFTUVOVDsKKworICAgICAgICAgICAgY29uc3QgW3VuaWZvcm1CdWZmZXIsIHVuaWZvcm1B
cnJheUJ1ZmZlcl0gPSBkZXZpY2UuY3JlYXRlQnVmZmVyTWFwcGVkKHsKKyAgICAgICAgICAgICAg
ICBzaXplOiBudW1UcmlhbmdsZXMgKiBhbGlnbmVkVW5pZm9ybUJ5dGVzICsgRmxvYXQzMkFycmF5
LkJZVEVTX1BFUl9FTEVNRU5ULAorICAgICAgICAgICAgICAgIHVzYWdlOiBHUFVCdWZmZXJVc2Fn
ZS5UUkFOU0ZFUl9EU1QgfCBHUFVCdWZmZXJVc2FnZS5VTklGT1JNCisgICAgICAgICAgICB9KTsK
KyAgICAgICAgICAgIGNvbnN0IHVuaWZvcm1Xcml0ZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh1
bmlmb3JtQXJyYXlCdWZmZXIpOworCisgICAgICAgICAgICB0aGlzLl9iaW5kR3JvdXBzID0gbmV3
IEFycmF5KG51bVRyaWFuZ2xlcyk7CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG51
bVRyaWFuZ2xlczsgKytpKSB7CisgICAgICAgICAgICAgICAgdW5pZm9ybVdyaXRlQXJyYXlbYWxp
Z25lZFVuaWZvcm1GbG9hdHMgKiBpICsgMF0gPSBTdGFnZS5yYW5kb20oMC4yLCAwLjQpOyAgIC8v
IHNjYWxlCisgICAgICAgICAgICAgICAgdW5pZm9ybVdyaXRlQXJyYXlbYWxpZ25lZFVuaWZvcm1G
bG9hdHMgKiBpICsgMV0gPSBTdGFnZS5yYW5kb20oLTAuOSwgMC45KTsgIC8vIG9mZnNldFgKKyAg
ICAgICAgICAgICAgICB1bmlmb3JtV3JpdGVBcnJheVthbGlnbmVkVW5pZm9ybUZsb2F0cyAqIGkg
KyAyXSA9IFN0YWdlLnJhbmRvbSgtMC45LCAwLjkpOyAgLy8gb2Zmc2V0WQorICAgICAgICAgICAg
ICAgIHVuaWZvcm1Xcml0ZUFycmF5W2FsaWduZWRVbmlmb3JtRmxvYXRzICogaSArIDNdID0gU3Rh
Z2UucmFuZG9tKDAuNSwgMik7ICAgICAvLyBzY2FsYXIKKyAgICAgICAgICAgICAgICB1bmlmb3Jt
V3JpdGVBcnJheVthbGlnbmVkVW5pZm9ybUZsb2F0cyAqIGkgKyA0XSA9IFN0YWdlLnJhbmRvbSgw
LCAxMCk7ICAgICAgLy8gc2NhbGFyT2Zmc2V0CisKKyAgICAgICAgICAgICAgICB0aGlzLl9iaW5k
R3JvdXBzW2ldID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cCh7CisgICAgICAgICAgICAgICAgICBs
YXlvdXQ6IHRoaXMuX2JpbmRHcm91cExheW91dCwKKyAgICAgICAgICAgICAgICAgIGJpbmRpbmdz
OiBbeworICAgICAgICAgICAgICAgICAgICBiaW5kaW5nOiAwLAorICAgICAgICAgICAgICAgICAg
ICByZXNvdXJjZTogeworICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcjogdW5pZm9ybUJ1ZmZl
ciwKKyAgICAgICAgICAgICAgICAgICAgICBvZmZzZXQ6IGkgKiBhbGlnbmVkVW5pZm9ybUJ5dGVz
LAorICAgICAgICAgICAgICAgICAgICAgIHNpemU6IDYgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVS
X0VMRU1FTlQsCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH1dCisg
ICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHVuaWZvcm1C
dWZmZXIudW5tYXAoKTsKKworICAgICAgICAgICAgdGhpcy5fdGltZU9mZnNldCA9IG51bVRyaWFu
Z2xlcyAqIGFsaWduZWRVbmlmb3JtQnl0ZXM7CisgICAgICAgICAgICB0aGlzLl90aW1lQmluZEdy
b3VwID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cCh7CisgICAgICAgICAgICBsYXlvdXQ6IHRoaXMu
X3RpbWVCaW5kR3JvdXBMYXlvdXQsCisgICAgICAgICAgICBiaW5kaW5nczogW3sKKyAgICAgICAg
ICAgICAgICBiaW5kaW5nOiAwLAorICAgICAgICAgICAgICAgIHJlc291cmNlOiB7CisgICAgICAg
ICAgICAgICAgICAgIGJ1ZmZlcjogdW5pZm9ybUJ1ZmZlciwKKyAgICAgICAgICAgICAgICAgICAg
b2Zmc2V0OiB0aGlzLl90aW1lT2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICBzaXplOiBGbG9h
dDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg
ICAgICAgICAgICB9XQorICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgIHRoaXMuX3VuaWZv
cm1CdWZmZXIgPSB1bmlmb3JtQnVmZmVyOworICAgICAgICB9LAorCisgICAgICAgIHR1bmU6IGZ1
bmN0aW9uKGNvdW50KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIWNvdW50KQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgdGhpcy5fbnVtVHJpYW5nbGVzICs9IGNv
dW50OworICAgICAgICAgICAgdGhpcy5fbnVtVHJpYW5nbGVzID0gTWF0aC5tYXgodGhpcy5fbnVt
VHJpYW5nbGVzLCAwKTsKKworICAgICAgICAgICAgdGhpcy5fcmVzZXRJZk5lY2Vzc2FyeSgpOwor
ICAgICAgICB9LAorCisgICAgICAgIGFuaW1hdGU6IGZ1bmN0aW9uKHRpbWVEZWx0YSkKKyAgICAg
ICAgeworICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gdGhpcy5fZGV2aWNlOworCisgICAgICAg
ICAgICBpZiAoIXRoaXMuX3N0YXJ0VGltZSkKKyAgICAgICAgICAgICAgICB0aGlzLl9zdGFydFRp
bWUgPSBTdGFnZS5kYXRlQ291bnRlclZhbHVlKDEwMDApOworCisgICAgICAgICAgICBjb25zdCBl
bGFwc2VkVGltZURhdGEgPSBuZXcgRmxvYXQzMkFycmF5KFtTdGFnZS5kYXRlQ291bnRlclZhbHVl
KDEwMDApIC0gdGhpcy5fc3RhcnRUaW1lXSk7CisKKyAgICAgICAgICAgIC8vIFVwZGF0ZSB0aW1l
IHVuaWZvcm0KKyAgICAgICAgICAgIGxldCBtYXBwZWRCdWZmZXI7CisKKyAgICAgICAgICAgIGlm
ICh0aGlzLl90aW1lTWFwcGVkQnVmZmVycy5sZW5ndGggPT09IDApIHsKKyAgICAgICAgICAgICAg
ICBtYXBwZWRCdWZmZXIgPSBkZXZpY2UuY3JlYXRlQnVmZmVyTWFwcGVkKHsKKyAgICAgICAgICAg
ICAgICAgICAgc2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5ULAorICAgICAgICAg
ICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVFJBTlNGRVJfU1JDIHwgR1BVQnVmZmVy
VXNhZ2UuTUFQX1dSSVRFCisgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9IGVsc2UK
KyAgICAgICAgICAgICAgICBtYXBwZWRCdWZmZXIgPSB0aGlzLl90aW1lTWFwcGVkQnVmZmVycy5z
aGlmdCgpOworCisgICAgICAgICAgICBjb25zdCBbdGltZVN0YWdpbmdCdWZmZXIsIHRpbWVTdGFn
aW5nQXJyYXlCdWZmZXJdID0gbWFwcGVkQnVmZmVyOworCisgICAgICAgICAgICBjb25zdCB3cml0
ZUFycmF5ID0gbmV3IEZsb2F0MzJBcnJheSh0aW1lU3RhZ2luZ0FycmF5QnVmZmVyKTsKKyAgICAg
ICAgICAgIHdyaXRlQXJyYXkuc2V0KGVsYXBzZWRUaW1lRGF0YSk7CisgICAgICAgICAgICB0aW1l
U3RhZ2luZ0J1ZmZlci51bm1hcCgpOworCisgICAgICAgICAgICBjb25zdCBjb21tYW5kRW5jb2Rl
ciA9IGRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcih7fSk7CisgICAgICAgICAgICBjb21tYW5k
RW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIodGltZVN0YWdpbmdCdWZmZXIsIDAsIHRoaXMuX3Vu
aWZvcm1CdWZmZXIsIHRoaXMuX3RpbWVPZmZzZXQsIGVsYXBzZWRUaW1lRGF0YS5ieXRlTGVuZ3Ro
KTsKKworICAgICAgICAgICAgY29uc3QgcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB7CisgICAgICAg
ICAgICAgICAgY29sb3JBdHRhY2htZW50czogW3sKKyAgICAgICAgICAgICAgICAgICAgbG9hZE9w
OiAiY2xlYXIiLAorICAgICAgICAgICAgICAgICAgICBzdG9yZU9wOiAic3RvcmUiLAorICAgICAg
ICAgICAgICAgICAgICBjbGVhckNvbG9yOiB7IHI6IDEsIGc6IDEsIGI6IDEsIGE6IDEuMCB9LAor
ICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50OiB0aGlzLl9zd2FwQ2hhaW4uZ2V0Q3VycmVu
dFRleHR1cmUoKS5jcmVhdGVEZWZhdWx0VmlldygpLAorICAgICAgICAgICAgICAgIH1dLAorICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgY29uc3QgcGFzc0VuY29kZXIgPSBjb21tYW5kRW5j
b2Rlci5iZWdpblJlbmRlclBhc3MocmVuZGVyUGFzc0Rlc2NyaXB0b3IpOworICAgICAgICAgICAg
cGFzc0VuY29kZXIuc2V0UGlwZWxpbmUodGhpcy5fcGlwZWxpbmUpOworICAgICAgICAgICAgcGFz
c0VuY29kZXIuc2V0VmVydGV4QnVmZmVycygwLCBbdGhpcy5fdmVydGV4QnVmZmVyXSwgWzBdKTsK
KyAgICAgICAgICAgIHBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCB0aGlzLl90aW1lQmluZEdy
b3VwKTsKKyAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbnVtVHJpYW5nbGVz
OyArK2kpIHsKKyAgICAgICAgICAgICAgICBwYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMSwgdGhp
cy5fYmluZEdyb3Vwc1tpXSk7CisgICAgICAgICAgICAgICAgcGFzc0VuY29kZXIuZHJhdygzLCAx
LCAwLCAwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBhc3NFbmNvZGVyLmVuZFBhc3Mo
KTsKKworICAgICAgICAgICAgZGV2aWNlLmdldFF1ZXVlKCkuc3VibWl0KFtjb21tYW5kRW5jb2Rl
ci5maW5pc2goKV0pOworCisgICAgICAgICAgICB0aW1lU3RhZ2luZ0J1ZmZlci5tYXBXcml0ZUFz
eW5jKCkudGhlbihhcnJheUJ1ZmZlciA9PiB7CisgICAgICAgICAgICAgICAgbWFwcGVkQnVmZmVy
WzFdID0gYXJyYXlCdWZmZXI7CisgICAgICAgICAgICAgICAgdGhpcy5fdGltZU1hcHBlZEJ1ZmZl
cnMucHVzaChtYXBwZWRCdWZmZXIpOworICAgICAgICAgICAgfSk7CisgICAgICAgIH0sCisKKyAg
ICAgICAgY29tcGxleGl0eTogZnVuY3Rpb24oKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gdGhpcy5fbnVtVHJpYW5nbGVzOworICAgICAgICB9CisgICAgfQorKTsKKworV2ViR0xCZW5j
aG1hcmsgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoQmVuY2htYXJrLAorICAgIGZ1bmN0aW9u
KG9wdGlvbnMpCisgICAgeworICAgICAgICBCZW5jaG1hcmsuY2FsbCh0aGlzLCBuZXcgV2ViR0xT
dGFnZSgpLCBvcHRpb25zKTsKKyAgICB9LCB7CisKKyAgICB3YWl0VW50aWxSZWFkeTogZnVuY3Rp
b24oKSB7CisgICAgICAgIHRoaXMuX2luaXRQcm9taXNlID0gbmV3IFNpbXBsZVByb21pc2U7Cisg
ICAgICAgIHJldHVybiB0aGlzLl9pbml0UHJvbWlzZTsKKyAgICB9LAorfSk7CisKK3dpbmRvdy5i
ZW5jaG1hcmtDbGFzcyA9IFdlYkdMQmVuY2htYXJrOworCit9KSgpOwpkaWZmIC0tZ2l0IGEvV2Vi
c2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9Nb3Rpb25NYXJrMS4xL3Rlc3RzLzNkL3RyaWFuZ2xlcy13
ZWJnbC5odG1sIGIvV2Vic2l0ZXMvYnJvd3NlcmJlbmNoLm9yZy9Nb3Rpb25NYXJrMS4xL3Rlc3Rz
LzNkL3RyaWFuZ2xlcy13ZWJnbC5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhjZTJhMzc1NWQ1ZGU3NDU4ZGRl
MDhlNDQxMzgxYmZhMzRjMThlYzcKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93c2Vy
YmVuY2gub3JnL01vdGlvbk1hcmsxLjEvdGVzdHMvM2QvdHJpYW5nbGVzLXdlYmdsLmh0bWwKQEAg
LTAsMCArMSw5MyBAQAorPCEtLQorICBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUg
bWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCisgIEFORCBBTlkgRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSCisgIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUworICBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgIENP
TlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GCisgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKQorICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GCisgIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKy0tPgorPCFET0NUWVBFIGh0bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJz
ZXQ9InV0Zi04Ij4KKyAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBo
cmVmPSIuLi9yZXNvdXJjZXMvc3RhZ2UuY3NzIj4KKyAgICA8c3R5bGU+CisgICAgICAgICNzdGFn
ZSB7CisgICAgICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOworICAgICAgICB9CisgICAg
PC9zdHlsZT4KKzwvaGVhZD4KKzxib2R5PgorICAgIDxjYW52YXMgaWQ9InN0YWdlIj48L2NhbnZh
cz4KKyAgICA8c2NyaXB0IGlkPSJ2ZXJ0ZXgiIHR5cGU9Ingtc2hhZGVyL3gtZ2xzbCI+CithdHRy
aWJ1dGUgdmVjNCBwb3NpdGlvbjsKK2F0dHJpYnV0ZSB2ZWM0IGNvbG9yOworCit1bmlmb3JtIGZs
b2F0IHNjYWxlOwordW5pZm9ybSBmbG9hdCB0aW1lOwordW5pZm9ybSBmbG9hdCBvZmZzZXRYOwor
dW5pZm9ybSBmbG9hdCBvZmZzZXRZOwordW5pZm9ybSBmbG9hdCBzY2FsYXI7Cit1bmlmb3JtIGZs
b2F0IHNjYWxhck9mZnNldDsKKwordmFyeWluZyB2ZWM0IHZfY29sb3I7CisKK3ZvaWQgbWFpbigp
IHsKKworICAgIGZsb2F0IGZhZGUgPSBtb2Qoc2NhbGFyT2Zmc2V0ICsgdGltZSAqIHNjYWxhciAv
IDEwLjAsIDEuMCk7CisKKyAgICBpZiAoZmFkZSA8IDAuNSkgeworICAgICAgICBmYWRlID0gZmFk
ZSAqIDIuMDsKKyAgICB9IGVsc2UgeworICAgICAgICBmYWRlID0gKDEuMCAtIGZhZGUpICogMi4w
OworICAgIH0KKworICAgIGZsb2F0IHhwb3MgPSBwb3NpdGlvbi54ICogc2NhbGU7CisgICAgZmxv
YXQgeXBvcyA9IHBvc2l0aW9uLnkgKiBzY2FsZTsKKworICAgIGZsb2F0IGFuZ2xlID0gMy4xNDE1
OSAqIDIuMCAqIGZhZGU7CisgICAgZmxvYXQgeHJvdCA9IHhwb3MgKiBjb3MoYW5nbGUpIC0geXBv
cyAqIHNpbihhbmdsZSk7CisgICAgZmxvYXQgeXJvdCA9IHhwb3MgKiBzaW4oYW5nbGUpICsgeXBv
cyAqIGNvcyhhbmdsZSk7CisKKyAgICB4cG9zID0geHJvdCArIG9mZnNldFg7CisgICAgeXBvcyA9
IHlyb3QgKyBvZmZzZXRZOworCisgICAgdl9jb2xvciA9IHZlYzQoZmFkZSwgMS4wIC0gZmFkZSwg
MC4wLCAxLjApICsgY29sb3I7CisgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHhwb3MsIHlwb3MsIDAu
MCwgMS4wKTsKK30KKyAgICA8L3NjcmlwdD4KKyAgICA8c2NyaXB0IGlkPSJmcmFnbWVudCIgdHlw
ZT0ieC1zaGFkZXIveC1nbHNsIj4KKyNpZmRlZiBHTF9FUworcHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7CisjZW5kaWYKKwordmFyeWluZyB2ZWM0IHZfY29sb3I7CisKK3ZvaWQgbWFpbigpIHsKKyAg
ICBnbF9GcmFnQ29sb3IgPSB2X2NvbG9yOworfQorICAgIDwvc2NyaXB0PgorICAgIDxzY3JpcHQg
c3JjPSIuLi8uLi9yZXNvdXJjZXMvc3RyaW5ncy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9leHRlbnNpb25zLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3Jp
cHQgc3JjPSIuLi9yZXNvdXJjZXMvbWF0aC5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
Ii4uL3Jlc291cmNlcy9tYWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNyYz0icmVzb3Vy
Y2VzL3dlYmdsLmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dl
YnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvTW90aW9uTWFyazEuMS90ZXN0cy8zZC90cmlhbmdsZXMt
d2ViZ3B1Lmh0bWwgYi9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL01vdGlvbk1hcmsxLjEvdGVz
dHMvM2QvdHJpYW5nbGVzLXdlYmdwdS5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU4OTI5YjBkNzI3NWM4OGIw
NGRlM2ZhN2VlOTFhNWY3MjU3MTE3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJzaXRlcy9icm93
c2VyYmVuY2gub3JnL01vdGlvbk1hcmsxLjEvdGVzdHMvM2QvdHJpYW5nbGVzLXdlYmdwdS5odG1s
CkBAIC0wLDAgKzEsNDUgQEAKKzwhLS0KKyAgQ29weXJpZ2h0IChDKSAyMDE5IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgIGFyZSBt
ZXQ6CisgIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBBTkQgSVRTIENPTlRSSUJVVE9SUyBgYEFTIElTJycKKyAgQU5EIEFOWSBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
IFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUiBJVFMgQ09OVFJJQlVUT1JTCisgIEJFIExJQUJMRSBGT1IgQU5ZIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAgQ09O
U0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YKKyAgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpCisgIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YKKyAgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorLS0+Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorPGhlYWQ+CisgICAgPG1ldGEgY2hhcnNl
dD0idXRmLTgiPgorICAgIDxsaW5rIHJlbD0ic3R5bGVzaGVldCIgdHlwZT0idGV4dC9jc3MiIGhy
ZWY9Ii4uL3Jlc291cmNlcy9zdGFnZS5jc3MiPgorICAgIDxzdHlsZT4KKyAgICAgICAgI3N0YWdl
IHsKKyAgICAgICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmZmY7CisgICAgICAgIH0KKyAgICA8
L3N0eWxlPgorPC9oZWFkPgorPGJvZHk+CisgICAgPGNhbnZhcyBpZD0ic3RhZ2UiPjwvY2FudmFz
PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvc3RyaW5ncy5qcyI+PC9zY3JpcHQ+
CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9leHRlbnNpb25zLmpzIj48L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMiPjwvc2Ny
aXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvbWF0aC5qcyI+PC9zY3JpcHQ+Cisg
ICAgPHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9tYWluLmpzIj48L3NjcmlwdD4KKyAgICA8c2Ny
aXB0IHNyYz0icmVzb3VyY2VzL3dlYmdwdS5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9XZWJzaXRlcy9icm93c2VyYmVuY2gub3JnL01vdGlvbk1hcmsxLjEvdGVz
dHMvM2Qvd2ViZ2wuaHRtbCBiL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvTW90aW9uTWFyazEu
MS90ZXN0cy8zZC93ZWJnbC5odG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA2YTYx
NGY0NGExNWQ4ZDMxMWRhNmEzOTgwMGRhNmUwNDc4YWZmZTNiLi4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1dlYnNpdGVzL2Jyb3dzZXJiZW5jaC5vcmcvTW90
aW9uTWFyazEuMS90ZXN0cy8zZC93ZWJnbC5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAs
MCBAQAotPCEtLQotICBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0KLSAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICBhcmUgbWV0OgotICAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCi0gIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KLQotICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
QU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnCi0gIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICBUSEUgSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCi0gIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IgSVRTIENPTlRSSUJVVE9SUwotICBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
Ci0gIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUwotICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQot
ICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GCi0gIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLS0tPgot
PCFET0NUWVBFIGh0bWw+Ci08aHRtbD4KLTxoZWFkPgotICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04
Ij4KLSAgICA8bGluayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9y
ZXNvdXJjZXMvc3RhZ2UuY3NzIj4KLTwvaGVhZD4KLTxib2R5PgotICAgIDxjYW52YXMgaWQ9InN0
YWdlIj48L2NhbnZhcz4KLSAgICA8c2NyaXB0IGlkPSJ2ZXJ0ZXgiIHR5cGU9Ingtc2hhZGVyL3gt
Z2xzbCI+Ci1hdHRyaWJ1dGUgdmVjNCBwb3NpdGlvbjsKLWF0dHJpYnV0ZSB2ZWM0IGNvbG9yOwot
Ci11bmlmb3JtIGZsb2F0IHNjYWxlOwotdW5pZm9ybSBmbG9hdCB0aW1lOwotdW5pZm9ybSBmbG9h
dCBvZmZzZXRYOwotdW5pZm9ybSBmbG9hdCBvZmZzZXRZOwotdW5pZm9ybSBmbG9hdCBzY2FsYXI7
Ci11bmlmb3JtIGZsb2F0IHNjYWxhck9mZnNldDsKLQotdmFyeWluZyB2ZWM0IHZfY29sb3I7Ci0K
LXZvaWQgbWFpbigpIHsKLQotICAgIGZsb2F0IGZhZGUgPSBtb2Qoc2NhbGFyT2Zmc2V0ICsgdGlt
ZSAqIHNjYWxhciAvIDEwLjAsIDEuMCk7Ci0KLSAgICBpZiAoZmFkZSA8IDAuNSkgewotICAgICAg
ICBmYWRlID0gZmFkZSAqIDIuMDsKLSAgICB9IGVsc2UgewotICAgICAgICBmYWRlID0gKDEuMCAt
IGZhZGUpICogMi4wOwotICAgIH0KLQotICAgIGZsb2F0IHhwb3MgPSBwb3NpdGlvbi54ICogc2Nh
bGU7Ci0gICAgZmxvYXQgeXBvcyA9IHBvc2l0aW9uLnkgKiBzY2FsZTsKLQotICAgIGZsb2F0IGFu
Z2xlID0gMy4xNDE1OSAqIDIuMCAqIGZhZGU7Ci0gICAgZmxvYXQgeHJvdCA9IHhwb3MgKiBjb3Mo
YW5nbGUpIC0geXBvcyAqIHNpbihhbmdsZSk7Ci0gICAgZmxvYXQgeXJvdCA9IHhwb3MgKiBzaW4o
YW5nbGUpICsgeXBvcyAqIGNvcyhhbmdsZSk7Ci0KLSAgICB4cG9zID0geHJvdCArIG9mZnNldFg7
Ci0gICAgeXBvcyA9IHlyb3QgKyBvZmZzZXRZOwotCi0gICAgdl9jb2xvciA9IHZlYzQoZmFkZSwg
MS4wIC0gZmFkZSwgMC4wLCAxLjApICsgY29sb3I7Ci0gICAgZ2xfUG9zaXRpb24gPSB2ZWM0KHhw
b3MsIHlwb3MsIDAuMCwgMS4wKTsKLX0KLSAgICA8L3NjcmlwdD4KLSAgICA8c2NyaXB0IGlkPSJm
cmFnbWVudCIgdHlwZT0ieC1zaGFkZXIveC1nbHNsIj4KLSNpZmRlZiBHTF9FUwotcHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7Ci0jZW5kaWYKLQotdmFyeWluZyB2ZWM0IHZfY29sb3I7Ci0KLXZvaWQg
bWFpbigpIHsKLSAgICBnbF9GcmFnQ29sb3IgPSB2X2NvbG9yOwotfQotICAgIDwvc2NyaXB0Pgot
ICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvc3RyaW5ncy5qcyI+PC9zY3JpcHQ+Ci0g
ICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9leHRlbnNpb25zLmpzIj48L3NjcmlwdD4K
LSAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3N0YXRpc3RpY3MuanMiPjwvc2NyaXB0
PgotICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvbWF0aC5qcyI+PC9zY3JpcHQ+Ci0gICAg
PHNjcmlwdCBzcmM9Ii4uL3Jlc291cmNlcy9tYWluLmpzIj48L3NjcmlwdD4KLSAgICA8c2NyaXB0
IHNyYz0icmVzb3VyY2VzL3dlYmdsLmpzIj48L3NjcmlwdD4KLTwvYm9keT4KLTwvaHRtbD4KZGlm
ZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvQ2hhbmdlTG9nIGIvUGVyZm9ybWFuY2VUZXN0cy9D
aGFuZ2VMb2cKaW5kZXggZWVmOWY3NTAyMjI4MzMxNzA1OThjYmI4NjMyZGRhMjgxMTRjZDJlNy4u
ZmEyNzhkZGRmMGI2MTEzNmY3ZWFjZjE0Mjc2OWJlOWEzYmNiNmQ3ZCAxMDA2NDQKLS0tIGEvUGVy
Zm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxNyBAQAorMjAxOS0wOS0wOSAgSm9uIExlZSAgPGpvbmxlZUBhcHBsZS5jb20+
CisKKyAgICAgICAgVXBsb2FkIHRyaWFuZ2xlcyB0ZXN0cyBmb3IgM0Qgc3VpdGUgaW4gTW90aW9u
TWFyaworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjAx
NjA2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBN
b3Rpb25NYXJrL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvbW90aW9ubWFyay5jc3M6CisgICAgICAg
ICogTW90aW9uTWFyay9yZXNvdXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzOgorICAgICAgICAq
IE1vdGlvbk1hcmsvdGVzdHMvM2QvcmVzb3VyY2VzL3dlYmdsLmpzOgorICAgICAgICAqIE1vdGlv
bk1hcmsvdGVzdHMvM2QvcmVzb3VyY2VzL3dlYmdwdS5qczogQWRkZWQuCisgICAgICAgICogTW90
aW9uTWFyay90ZXN0cy8zZC90cmlhbmdsZXMtd2ViZ2wuaHRtbDogUmVuYW1lZCBmcm9tIFdlYnNp
dGVzL2Jyb3dzZXJiZW5jaC5vcmcvTW90aW9uTWFyazEuMS90ZXN0cy8zZC93ZWJnbC5odG1sLgor
ICAgICAgICAqIE1vdGlvbk1hcmsvdGVzdHMvM2QvdHJpYW5nbGVzLXdlYmdwdS5odG1sOiBDb3Bp
ZWQgZnJvbSBQZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsvdGVzdHMvM2Qvd2ViZ2wuaHRtbC4K
KwogMjAxOS0wOC0yOSAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5jb20+CiAKICAgICAg
ICAgVXBkYXRlIC54Y2NvbmZpZyBzeW1ib2xzIHRvIHJlZmxlY3QgdGhlIGN1cnJlbnQgc2V0IG9m
IHBhc3QgYW5kIGZ1dHVyZSBwcm9kdWN0IHZlcnNpb25zLgpkaWZmIC0tZ2l0IGEvUGVyZm9ybWFu
Y2VUZXN0cy9Nb3Rpb25NYXJrL3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvbW90aW9ubWFyay5jc3Mg
Yi9QZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9tb3Rp
b25tYXJrLmNzcwppbmRleCAwNTQ2ODU5YmMzY2RkNTIxZTY1YjE2NjE2NTcwYjA2Y2MwYzczMjEy
Li42YWVlNDViMzY5NmM0MzZiNWMzNzI0ZGEyZDUyNWM1MmYyNjNlN2NmIDEwMDY0NAotLS0gYS9Q
ZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsvcmVzb3VyY2VzL2RlYnVnLXJ1bm5lci9tb3Rpb25t
YXJrLmNzcworKysgYi9QZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsvcmVzb3VyY2VzL2RlYnVn
LXJ1bm5lci9tb3Rpb25tYXJrLmNzcwpAQCAtMjA5LDYgKzIwOSw3IEBAIGxhYmVsLnRyZWUtbGFi
ZWwgewogI2ludHJvIC5zdGFydC1iZW5jaG1hcmsgcCB7CiAgICAgY29sb3I6IGhzbCgxMSwgNzIl
LCA1MCUpOwogICAgIG1hcmdpbi1ib3R0b206IDFlbTsKKyAgICAtYXBwbGUtdHJhaWxpbmctd29y
ZDogLWFwcGxlLXBhcnRpYWxseS1iYWxhbmNlZDsKIH0KIAogI2ludHJvIC5zdGFydC1iZW5jaG1h
cmsgYnV0dG9uIHsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMvTW90aW9uTWFyay9yZXNv
dXJjZXMvZGVidWctcnVubmVyL3Rlc3RzLmpzIGIvUGVyZm9ybWFuY2VUZXN0cy9Nb3Rpb25NYXJr
L3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvdGVzdHMuanMKaW5kZXggN2Q3MDFjOTQzNzUwYmMwMGJm
ZmRmNTMwMjFmODAzOWIyNDkyNzllZi4uZjViMDg2NmZlNjg2MGRjMzIzMzhkMGVlNzU5ZDE5ZDU3
ZWEyZTc0YyAxMDA2NDQKLS0tIGEvUGVyZm9ybWFuY2VUZXN0cy9Nb3Rpb25NYXJrL3Jlc291cmNl
cy9kZWJ1Zy1ydW5uZXIvdGVzdHMuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Nb3Rpb25NYXJr
L3Jlc291cmNlcy9kZWJ1Zy1ydW5uZXIvdGVzdHMuanMKQEAgLTM1NCw4ICszNTQsMTIgQEAgU3Vp
dGVzLnB1c2gobmV3IFN1aXRlKCJTdWl0cyBzdWl0ZSIsCiBTdWl0ZXMucHVzaChuZXcgU3VpdGUo
IjNEIEdyYXBoaWNzIiwKICAgICBbCiAgICAgICAgIHsKLSAgICAgICAgICAgIHVybDogIjNkL3dl
YmdsLmh0bWwiLAotICAgICAgICAgICAgbmFtZTogIldlYkdMIgorICAgICAgICAgICAgdXJsOiAi
M2QvdHJpYW5nbGVzLXdlYmdsLmh0bWwiLAorICAgICAgICAgICAgbmFtZTogIlRyaWFuZ2xlcyAo
V2ViR0wpIgorICAgICAgICB9LAorICAgICAgICB7CisgICAgICAgICAgICB1cmw6ICIzZC90cmlh
bmdsZXMtd2ViZ3B1Lmh0bWwiLAorICAgICAgICAgICAgbmFtZTogIlRyaWFuZ2xlcyAoV2ViR1BV
KSIKICAgICAgICAgfSwKICAgICBdCiApKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1hbmNlVGVzdHMv
TW90aW9uTWFyay90ZXN0cy8zZC9yZXNvdXJjZXMvd2ViZ2wuanMgYi9QZXJmb3JtYW5jZVRlc3Rz
L01vdGlvbk1hcmsvdGVzdHMvM2QvcmVzb3VyY2VzL3dlYmdsLmpzCmluZGV4IDEwYjgzNmI0MTM4
ODU5ZGFlZmRmMGRjNmU2YWJjNjBiMTEyNjU2YWQuLjMzZGMwZmVhMzkzZWIzNzZhMDYwNDY0MDE2
YjY4OTIxYWIzYTg5YTYgMTAwNjQ0Ci0tLSBhL1BlcmZvcm1hbmNlVGVzdHMvTW90aW9uTWFyay90
ZXN0cy8zZC9yZXNvdXJjZXMvd2ViZ2wuanMKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Nb3Rpb25N
YXJrL3Rlc3RzLzNkL3Jlc291cmNlcy93ZWJnbC5qcwpAQCAtNDEsNyArNDEsNyBAQCBXZWJHTFN0
YWdlID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKFN0YWdlLAogICAgICAgICAgICAgdGhpcy5f
Z2wgPSB0aGlzLmVsZW1lbnQuZ2V0Q29udGV4dCgid2ViZ2wiKTsKICAgICAgICAgICAgIHZhciBn
bCA9IHRoaXMuX2dsOwogCi0gICAgICAgICAgICBnbC5jbGVhckNvbG9yKDAuNSwgMC41LCAwLjUs
IDEpOworICAgICAgICAgICAgZ2wuY2xlYXJDb2xvcigwLCAwLCAwLCAxKTsKIAogICAgICAgICAg
ICAgLy8gQ3JlYXRlIHRoZSB2ZXJ0ZXggc2hhZGVyIG9iamVjdC4KICAgICAgICAgICAgIHZhciB2
ZXJ0ZXhTaGFkZXIgPSBnbC5jcmVhdGVTaGFkZXIoZ2wuVkVSVEVYX1NIQURFUik7CmRpZmYgLS1n
aXQgYS9QZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsvdGVzdHMvM2QvcmVzb3VyY2VzL3dlYmdw
dS5qcyBiL1BlcmZvcm1hbmNlVGVzdHMvTW90aW9uTWFyay90ZXN0cy8zZC9yZXNvdXJjZXMvd2Vi
Z3B1LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmY4NDhkMWNiYWQ5MjU3M2VjZGE0ZjY4ZmM5ZjdiZWY1MzkxYjg0
NDcKLS0tIC9kZXYvbnVsbAorKysgYi9QZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsvdGVzdHMv
M2QvcmVzb3VyY2VzL3dlYmdwdS5qcwpAQCAtMCwwICsxLDMzNCBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJ
QlVUT1JTIGBgQVMgSVMnJworICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElU
UyBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRgorICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKK2Nv
bnN0IHdobHNsU2hhZGVycyA9IGAKK3N0cnVjdCBWZXJ0ZXhPdXRwdXQgeworICBmbG9hdDQgcG9z
aXRpb24gOiBTVl9Qb3NpdGlvbjsKKyAgZmxvYXQ0IGNvbG9yIDogYXR0cmlidXRlKDEpOworfQor
Cit2ZXJ0ZXggVmVydGV4T3V0cHV0IHZlcnRleE1haW4oZmxvYXQ0IHBvc2l0aW9uIDogYXR0cmli
dXRlKDApLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdDQgY29sb3IgOiBh
dHRyaWJ1dGUoMSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0YW50IGZs
b2F0W10gdGltZVVuaWZvcm0gOiByZWdpc3RlcihiMCwgc3BhY2UwKSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgY29uc3RhbnQgZmxvYXRbXSB1bmlmb3JtcyA6IHJlZ2lzdGVyKGIw
LCBzcGFjZTEpKSB7CisgIGZsb2F0IHNjYWxlID0gdW5pZm9ybXNbMF07CisgIGZsb2F0IG9mZnNl
dFggPSB1bmlmb3Jtc1sxXTsKKyAgZmxvYXQgb2Zmc2V0WSA9IHVuaWZvcm1zWzJdOworICBmbG9h
dCBzY2FsYXIgPSB1bmlmb3Jtc1szXTsKKyAgZmxvYXQgc2NhbGFyT2Zmc2V0ID0gdW5pZm9ybXNb
NF07CisgIGZsb2F0IHRpbWUgPSB0aW1lVW5pZm9ybVswXTsKKworICBmbG9hdCBmYWRlID0gZm1v
ZChzY2FsYXJPZmZzZXQgKyB0aW1lICogc2NhbGFyIC8gMTAuMCwgMS4wKTsKKyAgaWYgKGZhZGUg
PCAwLjUpIHsKKyAgICAgIGZhZGUgPSBmYWRlICogMi4wOworICB9IGVsc2UgeworICAgICAgZmFk
ZSA9ICgxLjAgLSBmYWRlKSAqIDIuMDsKKyAgfQorICBmbG9hdCB4cG9zID0gcG9zaXRpb24ueCAq
IHNjYWxlOworICBmbG9hdCB5cG9zID0gcG9zaXRpb24ueSAqIHNjYWxlOworICBmbG9hdCBhbmds
ZSA9IDMuMTQxNTkgKiAyLjAgKiBmYWRlOworICBmbG9hdCB4cm90ID0geHBvcyAqIGNvcyhhbmds
ZSkgLSB5cG9zICogc2luKGFuZ2xlKTsKKyAgZmxvYXQgeXJvdCA9IHhwb3MgKiBzaW4oYW5nbGUp
ICsgeXBvcyAqIGNvcyhhbmdsZSk7CisgIHhwb3MgPSB4cm90ICsgb2Zmc2V0WDsKKyAgeXBvcyA9
IHlyb3QgKyBvZmZzZXRZOworCisgIFZlcnRleE91dHB1dCBvdXQ7CisgIG91dC5wb3NpdGlvbiA9
IGZsb2F0NCh4cG9zLCB5cG9zLCAwLjAsIDEuMCk7CisgIG91dC5jb2xvciA9IGZsb2F0NChmYWRl
LCAxLjAgLSBmYWRlLCAwLjAsIDEuMCkgKyBjb2xvcjsKKyAgcmV0dXJuIG91dDsKK30KKworZnJh
Z21lbnQgZmxvYXQ0IGZyYWdtZW50TWFpbihmbG9hdDQgaW5Db2xvciA6IGF0dHJpYnV0ZSgxKSkg
OiBTVl9UYXJnZXQgMCB7CisgICAgcmV0dXJuIGluQ29sb3I7Cit9CitgOworCisoZnVuY3Rpb24o
KSB7CisKK1dlYkdMU3RhZ2UgPSBVdGlsaXRpZXMuY3JlYXRlU3ViY2xhc3MoU3RhZ2UsCisgICAg
ZnVuY3Rpb24oZWxlbWVudCwgb3B0aW9ucykKKyAgICB7CisgICAgICAgIFN0YWdlLmNhbGwodGhp
cyk7CisgICAgfSwKKyAgICB7CisgICAgICAgIGluaXRpYWxpemU6IGZ1bmN0aW9uKGJlbmNobWFy
aywgb3B0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgU3RhZ2UucHJvdG90eXBlLmluaXRp
YWxpemUuY2FsbCh0aGlzLCBiZW5jaG1hcmssIG9wdGlvbnMpOworCisgICAgICAgICAgICB0aGlz
Ll9udW1UcmlhbmdsZXMgPSAwOworCisgICAgICAgICAgICBjb25zdCBncHVDb250ZXh0ID0gdGhp
cy5lbGVtZW50LmdldENvbnRleHQoJ2dwdScpOworCisgICAgICAgICAgICBuYXZpZ2F0b3IuZ3B1
LnJlcXVlc3RBZGFwdGVyKHsgcG93ZXJQcmVmZXJlbmNlOiAibG93LXBvd2VyIiB9KS50aGVuKGFk
YXB0ZXIgPT4geworICAgICAgICAgICAgICAgIHJldHVybiBhZGFwdGVyLnJlcXVlc3REZXZpY2Uo
KS50aGVuKGRldmljZSA9PiB7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX2RldmljZSA9IGRl
dmljZTsKKworICAgICAgICAgICAgICAgICAgICBjb25zdCBzd2FwQ2hhaW5Gb3JtYXQgPSAiYmdy
YTh1bm9ybSI7CisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3N3YXBDaGFpbiA9IGdwdUNvbnRl
eHQuY29uZmlndXJlU3dhcENoYWluKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRldmljZTog
ZGV2aWNlLAorICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0OiBzd2FwQ2hhaW5Gb3JtYXQs
CisgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZTogR1BVVGV4dHVyZVVzYWdlLk9VVFBVVF9B
VFRBQ0hNRU5UCisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAg
IHRoaXMuX3RpbWVCaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0
KHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJpbmRpbmdzOiBbCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgeyBiaW5kaW5nOiAwLCB2aXNpYmlsaXR5OiBHUFVTaGFkZXJTdGFnZUJpdC5W
RVJURVgsIHR5cGU6ICJ1bmlmb3JtLWJ1ZmZlciIgfSwKKyAgICAgICAgICAgICAgICAgICAgICAg
IF0sCisgICAgICAgICAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICAgICAgICAgIHRoaXMu
X2JpbmRHcm91cExheW91dCA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoeworICAgICAg
ICAgICAgICAgICAgICAgICAgYmluZGluZ3M6IFsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICB7IGJpbmRpbmc6IDAsIHZpc2liaWxpdHk6IEdQVVNoYWRlclN0YWdlQml0LlZFUlRFWCwgdHlw
ZTogInVuaWZvcm0tYnVmZmVyIiB9LAorICAgICAgICAgICAgICAgICAgICAgICAgXSwKKyAgICAg
ICAgICAgICAgICAgICAgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgdmVjNFNpemUg
PSA0ICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UOworCisgICAgICAgICAgICAgICAg
ICAgIGNvbnN0IHBpcGVsaW5lTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZVBpcGVsaW5lTGF5b3V0KHsg
YmluZEdyb3VwTGF5b3V0czogW3RoaXMuX3RpbWVCaW5kR3JvdXBMYXlvdXQsIHRoaXMuX2JpbmRH
cm91cExheW91dF0gfSk7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNoYWRlck1vZHVsZSA9
IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlOiB3aGxzbFNoYWRlcnMsIGlzV0hMU0w6
IHRydWUgfSk7CisKKyAgICAgICAgICAgICAgICAgICAgY29uc3QgcGlwZWxpbmVEZXNjID0gewor
ICAgICAgICAgICAgICAgICAgICAgICAgbGF5b3V0OiBwaXBlbGluZUxheW91dCwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHZlcnRleFN0YWdlOiB7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbW9kdWxlOiBzaGFkZXJNb2R1bGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW50
cnlQb2ludDogInZlcnRleE1haW4iLAorICAgICAgICAgICAgICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGZyYWdtZW50U3RhZ2U6IHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBtb2R1bGU6IHNoYWRlck1vZHVsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBlbnRyeVBvaW50OiAiZnJhZ21lbnRNYWluIgorICAgICAgICAgICAgICAgICAgICAgICAgfSwK
KworICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWl0aXZlVG9wb2xvZ3k6ICJ0cmlhbmdsZS1s
aXN0IiwKKworICAgICAgICAgICAgICAgICAgICAgICAgdmVydGV4SW5wdXQ6IHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBpbmRleEZvcm1hdDogInVpbnQzMiIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdmVydGV4QnVmZmVyczogW3sKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdmVydGV4IGJ1ZmZlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBzdHJpZGU6IDIgKiB2ZWM0U2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c3RlcE1vZGU6ICJ2ZXJ0ZXgiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRy
aWJ1dGVTZXQ6IFt7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB2ZXJ0
ZXggcG9zaXRpb25zCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaGFkZXJM
b2NhdGlvbjogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mZnNldDog
MCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogImZsb2F0NCIK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgeworICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gdmVydGV4IGNvbG9ycworICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgc2hhZGVyTG9jYXRpb246IDEsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvZmZzZXQ6IHZlYzRTaXplLAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgZm9ybWF0OiAiZmxvYXQ0IgorICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB9XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgIHJhc3Rlcml6YXRpb25TdGF0
ZTogeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZyb250RmFjZTogJ2NjdycsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgY3VsbE1vZGU6ICdub25lJywKKyAgICAgICAgICAgICAg
ICAgICAgICAgIH0sCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yU3RhdGVzOiBbewor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdDogc3dhcENoYWluRm9ybWF0LAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGFscGhhQmxlbmQ6IHt9LAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbG9yQmxlbmQ6IHt9LAorICAgICAgICAgICAgICAgICAgICAgICAgfV0s
CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fcGlw
ZWxpbmUgPSBkZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUocGlwZWxpbmVEZXNjKTsKKworICAg
ICAgICAgICAgICAgICAgICBjb25zdCBbdmVydGV4QnVmZmVyLCB2ZXJ0ZXhBcnJheUJ1ZmZlcl0g
PSBkZXZpY2UuY3JlYXRlQnVmZmVyTWFwcGVkKHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNp
emU6IDIgKiAzICogdmVjNFNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICB1c2FnZTogR1BV
QnVmZmVyVXNhZ2UuVkVSVEVYCisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAg
ICAgICAgICBjb25zdCB2ZXJ0ZXhXcml0ZUJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkodmVydGV4
QXJyYXlCdWZmZXIpOworICAgICAgICAgICAgICAgICAgICB2ZXJ0ZXhXcml0ZUJ1ZmZlci5zZXQo
WworICAgICAgICAgICAgICAgICAgICAvLyBwb3NpdGlvbiBkYXRhICAvKiovIGNvbG9yIGRhdGEK
KyAgICAgICAgICAgICAgICAgICAgMCwgMC4xLCAwLCAxLCAgICAgLyoqLyAxLCAwLCAwLCAxLAor
ICAgICAgICAgICAgICAgICAgICAtMC4xLCAtMC4xLCAwLCAxLCAvKiovIDAsIDEsIDAsIDEsCisg
ICAgICAgICAgICAgICAgICAgIDAuMSwgLTAuMSwgMCwgMSwgIC8qKi8gMCwgMCwgMSwgMSwKKyAg
ICAgICAgICAgICAgICAgICAgXSk7CisgICAgICAgICAgICAgICAgICAgIHZlcnRleEJ1ZmZlci51
bm1hcCgpOworCisgICAgICAgICAgICAgICAgICAgIHRoaXMuX3ZlcnRleEJ1ZmZlciA9IHZlcnRl
eEJ1ZmZlcjsKKyAgICAgICAgICAgICAgICAgICAgdGhpcy5fdGltZU1hcHBlZEJ1ZmZlcnMgPSBb
XTsKKworICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZXNldElmTmVjZXNzYXJ5KCk7CisKKyAg
ICAgICAgICAgICAgICAgICAgYmVuY2htYXJrLl9pbml0UHJvbWlzZS5yZXNvbHZlKCk7CisgICAg
ICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgfSwKKworICAgICAgICBf
Z2V0RnVuY3Rpb25Tb3VyY2U6IGZ1bmN0aW9uKGlkKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLnRleHQ7CisgICAgICAgIH0sCisKKyAg
ICAgICAgX3Jlc2V0SWZOZWNlc3Nhcnk6IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgaWYgKHRoaXMuX2JpbmRHcm91cHMgIT0gdW5kZWZpbmVkICYmIHRoaXMuX251bVRyaWFuZ2xl
cyA8PSB0aGlzLl9iaW5kR3JvdXBzLmxlbmd0aCkKKyAgICAgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgICAgIGNvbnN0IG51bVRyaWFuZ2xlcyA9IHRoaXMuX251bVRyaWFuZ2xlczsKKwor
ICAgICAgICAgICAgY29uc3QgZGV2aWNlID0gdGhpcy5fZGV2aWNlOworCisgICAgICAgICAgICAv
LyBNaW5pbXVtIGJ1ZmZlciBvZmZzZXQgYWxpZ25tZW50IGlzIDI1NiBieXRlcy4KKyAgICAgICAg
ICAgIGNvbnN0IHVuaWZvcm1CeXRlcyA9IDUgKiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1F
TlQ7CisgICAgICAgICAgICBjb25zdCBhbGlnbmVkVW5pZm9ybUJ5dGVzID0gTWF0aC5jZWlsKHVu
aWZvcm1CeXRlcyAvIDI1NikgKiAyNTY7CisgICAgICAgICAgICBjb25zdCBhbGlnbmVkVW5pZm9y
bUZsb2F0cyA9IGFsaWduZWRVbmlmb3JtQnl0ZXMgLyBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VM
RU1FTlQ7CisKKyAgICAgICAgICAgIGNvbnN0IFt1bmlmb3JtQnVmZmVyLCB1bmlmb3JtQXJyYXlC
dWZmZXJdID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlck1hcHBlZCh7CisgICAgICAgICAgICAgICAgc2l6
ZTogbnVtVHJpYW5nbGVzICogYWxpZ25lZFVuaWZvcm1CeXRlcyArIEZsb2F0MzJBcnJheS5CWVRF
U19QRVJfRUxFTUVOVCwKKyAgICAgICAgICAgICAgICB1c2FnZTogR1BVQnVmZmVyVXNhZ2UuVFJB
TlNGRVJfRFNUIHwgR1BVQnVmZmVyVXNhZ2UuVU5JRk9STQorICAgICAgICAgICAgfSk7CisgICAg
ICAgICAgICBjb25zdCB1bmlmb3JtV3JpdGVBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkodW5pZm9y
bUFycmF5QnVmZmVyKTsKKworICAgICAgICAgICAgdGhpcy5fYmluZEdyb3VwcyA9IG5ldyBBcnJh
eShudW1UcmlhbmdsZXMpOworICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBudW1Ucmlh
bmdsZXM7ICsraSkgeworICAgICAgICAgICAgICAgIHVuaWZvcm1Xcml0ZUFycmF5W2FsaWduZWRV
bmlmb3JtRmxvYXRzICogaSArIDBdID0gU3RhZ2UucmFuZG9tKDAuMiwgMC40KTsgICAvLyBzY2Fs
ZQorICAgICAgICAgICAgICAgIHVuaWZvcm1Xcml0ZUFycmF5W2FsaWduZWRVbmlmb3JtRmxvYXRz
ICogaSArIDFdID0gU3RhZ2UucmFuZG9tKC0wLjksIDAuOSk7ICAvLyBvZmZzZXRYCisgICAgICAg
ICAgICAgICAgdW5pZm9ybVdyaXRlQXJyYXlbYWxpZ25lZFVuaWZvcm1GbG9hdHMgKiBpICsgMl0g
PSBTdGFnZS5yYW5kb20oLTAuOSwgMC45KTsgIC8vIG9mZnNldFkKKyAgICAgICAgICAgICAgICB1
bmlmb3JtV3JpdGVBcnJheVthbGlnbmVkVW5pZm9ybUZsb2F0cyAqIGkgKyAzXSA9IFN0YWdlLnJh
bmRvbSgwLjUsIDIpOyAgICAgLy8gc2NhbGFyCisgICAgICAgICAgICAgICAgdW5pZm9ybVdyaXRl
QXJyYXlbYWxpZ25lZFVuaWZvcm1GbG9hdHMgKiBpICsgNF0gPSBTdGFnZS5yYW5kb20oMCwgMTAp
OyAgICAgIC8vIHNjYWxhck9mZnNldAorCisgICAgICAgICAgICAgICAgdGhpcy5fYmluZEdyb3Vw
c1tpXSA9IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoeworICAgICAgICAgICAgICAgICAgbGF5b3V0
OiB0aGlzLl9iaW5kR3JvdXBMYXlvdXQsCisgICAgICAgICAgICAgICAgICBiaW5kaW5nczogW3sK
KyAgICAgICAgICAgICAgICAgICAgYmluZGluZzogMCwKKyAgICAgICAgICAgICAgICAgICAgcmVz
b3VyY2U6IHsKKyAgICAgICAgICAgICAgICAgICAgICBidWZmZXI6IHVuaWZvcm1CdWZmZXIsCisg
ICAgICAgICAgICAgICAgICAgICAgb2Zmc2V0OiBpICogYWxpZ25lZFVuaWZvcm1CeXRlcywKKyAg
ICAgICAgICAgICAgICAgICAgICBzaXplOiA2ICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVN
RU5ULAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICB9XQorICAgICAg
ICAgICAgICAgIH0pOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB1bmlmb3JtQnVmZmVy
LnVubWFwKCk7CisKKyAgICAgICAgICAgIHRoaXMuX3RpbWVPZmZzZXQgPSBudW1UcmlhbmdsZXMg
KiBhbGlnbmVkVW5pZm9ybUJ5dGVzOworICAgICAgICAgICAgdGhpcy5fdGltZUJpbmRHcm91cCA9
IGRldmljZS5jcmVhdGVCaW5kR3JvdXAoeworICAgICAgICAgICAgbGF5b3V0OiB0aGlzLl90aW1l
QmluZEdyb3VwTGF5b3V0LAorICAgICAgICAgICAgYmluZGluZ3M6IFt7CisgICAgICAgICAgICAg
ICAgYmluZGluZzogMCwKKyAgICAgICAgICAgICAgICByZXNvdXJjZTogeworICAgICAgICAgICAg
ICAgICAgICBidWZmZXI6IHVuaWZvcm1CdWZmZXIsCisgICAgICAgICAgICAgICAgICAgIG9mZnNl
dDogdGhpcy5fdGltZU9mZnNldCwKKyAgICAgICAgICAgICAgICAgICAgc2l6ZTogRmxvYXQzMkFy
cmF5LkJZVEVTX1BFUl9FTEVNRU5ULAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgfV0KKyAgICAgICAgICAgIH0pOworCisgICAgICAgICAgICB0aGlzLl91bmlmb3JtQnVm
ZmVyID0gdW5pZm9ybUJ1ZmZlcjsKKyAgICAgICAgfSwKKworICAgICAgICB0dW5lOiBmdW5jdGlv
bihjb3VudCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFjb3VudCkKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHRoaXMuX251bVRyaWFuZ2xlcyArPSBjb3VudDsK
KyAgICAgICAgICAgIHRoaXMuX251bVRyaWFuZ2xlcyA9IE1hdGgubWF4KHRoaXMuX251bVRyaWFu
Z2xlcywgMCk7CisKKyAgICAgICAgICAgIHRoaXMuX3Jlc2V0SWZOZWNlc3NhcnkoKTsKKyAgICAg
ICAgfSwKKworICAgICAgICBhbmltYXRlOiBmdW5jdGlvbih0aW1lRGVsdGEpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGNvbnN0IGRldmljZSA9IHRoaXMuX2RldmljZTsKKworICAgICAgICAgICAg
aWYgKCF0aGlzLl9zdGFydFRpbWUpCisgICAgICAgICAgICAgICAgdGhpcy5fc3RhcnRUaW1lID0g
U3RhZ2UuZGF0ZUNvdW50ZXJWYWx1ZSgxMDAwKTsKKworICAgICAgICAgICAgY29uc3QgZWxhcHNl
ZFRpbWVEYXRhID0gbmV3IEZsb2F0MzJBcnJheShbU3RhZ2UuZGF0ZUNvdW50ZXJWYWx1ZSgxMDAw
KSAtIHRoaXMuX3N0YXJ0VGltZV0pOworCisgICAgICAgICAgICAvLyBVcGRhdGUgdGltZSB1bmlm
b3JtCisgICAgICAgICAgICBsZXQgbWFwcGVkQnVmZmVyOworCisgICAgICAgICAgICBpZiAodGhp
cy5fdGltZU1hcHBlZEJ1ZmZlcnMubGVuZ3RoID09PSAwKSB7CisgICAgICAgICAgICAgICAgbWFw
cGVkQnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlck1hcHBlZCh7CisgICAgICAgICAgICAgICAg
ICAgIHNpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCwKKyAgICAgICAgICAgICAg
ICAgICAgdXNhZ2U6IEdQVUJ1ZmZlclVzYWdlLlRSQU5TRkVSX1NSQyB8IEdQVUJ1ZmZlclVzYWdl
Lk1BUF9XUklURQorICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICAgICAgbWFwcGVkQnVmZmVyID0gdGhpcy5fdGltZU1hcHBlZEJ1ZmZlcnMuc2hpZnQo
KTsKKworICAgICAgICAgICAgY29uc3QgW3RpbWVTdGFnaW5nQnVmZmVyLCB0aW1lU3RhZ2luZ0Fy
cmF5QnVmZmVyXSA9IG1hcHBlZEJ1ZmZlcjsKKworICAgICAgICAgICAgY29uc3Qgd3JpdGVBcnJh
eSA9IG5ldyBGbG9hdDMyQXJyYXkodGltZVN0YWdpbmdBcnJheUJ1ZmZlcik7CisgICAgICAgICAg
ICB3cml0ZUFycmF5LnNldChlbGFwc2VkVGltZURhdGEpOworICAgICAgICAgICAgdGltZVN0YWdp
bmdCdWZmZXIudW5tYXAoKTsKKworICAgICAgICAgICAgY29uc3QgY29tbWFuZEVuY29kZXIgPSBk
ZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoe30pOworICAgICAgICAgICAgY29tbWFuZEVuY29k
ZXIuY29weUJ1ZmZlclRvQnVmZmVyKHRpbWVTdGFnaW5nQnVmZmVyLCAwLCB0aGlzLl91bmlmb3Jt
QnVmZmVyLCB0aGlzLl90aW1lT2Zmc2V0LCBlbGFwc2VkVGltZURhdGEuYnl0ZUxlbmd0aCk7CisK
KyAgICAgICAgICAgIGNvbnN0IHJlbmRlclBhc3NEZXNjcmlwdG9yID0geworICAgICAgICAgICAg
ICAgIGNvbG9yQXR0YWNobWVudHM6IFt7CisgICAgICAgICAgICAgICAgICAgIGxvYWRPcDogImNs
ZWFyIiwKKyAgICAgICAgICAgICAgICAgICAgc3RvcmVPcDogInN0b3JlIiwKKyAgICAgICAgICAg
ICAgICAgICAgY2xlYXJDb2xvcjogeyByOiAxLCBnOiAxLCBiOiAxLCBhOiAxLjAgfSwKKyAgICAg
ICAgICAgICAgICAgICAgYXR0YWNobWVudDogdGhpcy5fc3dhcENoYWluLmdldEN1cnJlbnRUZXh0
dXJlKCkuY3JlYXRlRGVmYXVsdFZpZXcoKSwKKyAgICAgICAgICAgICAgICB9XSwKKyAgICAgICAg
ICAgIH07CisKKyAgICAgICAgICAgIGNvbnN0IHBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIu
YmVnaW5SZW5kZXJQYXNzKHJlbmRlclBhc3NEZXNjcmlwdG9yKTsKKyAgICAgICAgICAgIHBhc3NF
bmNvZGVyLnNldFBpcGVsaW5lKHRoaXMuX3BpcGVsaW5lKTsKKyAgICAgICAgICAgIHBhc3NFbmNv
ZGVyLnNldFZlcnRleEJ1ZmZlcnMoMCwgW3RoaXMuX3ZlcnRleEJ1ZmZlcl0sIFswXSk7CisgICAg
ICAgICAgICBwYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgdGhpcy5fdGltZUJpbmRHcm91cCk7
CisgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMuX251bVRyaWFuZ2xlczsgKytp
KSB7CisgICAgICAgICAgICAgICAgcGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKDEsIHRoaXMuX2Jp
bmRHcm91cHNbaV0pOworICAgICAgICAgICAgICAgIHBhc3NFbmNvZGVyLmRyYXcoMywgMSwgMCwg
MCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwYXNzRW5jb2Rlci5lbmRQYXNzKCk7CisK
KyAgICAgICAgICAgIGRldmljZS5nZXRRdWV1ZSgpLnN1Ym1pdChbY29tbWFuZEVuY29kZXIuZmlu
aXNoKCldKTsKKworICAgICAgICAgICAgdGltZVN0YWdpbmdCdWZmZXIubWFwV3JpdGVBc3luYygp
LnRoZW4oYXJyYXlCdWZmZXIgPT4geworICAgICAgICAgICAgICAgIG1hcHBlZEJ1ZmZlclsxXSA9
IGFycmF5QnVmZmVyOworICAgICAgICAgICAgICAgIHRoaXMuX3RpbWVNYXBwZWRCdWZmZXJzLnB1
c2gobWFwcGVkQnVmZmVyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICB9LAorCisgICAgICAg
IGNvbXBsZXhpdHk6IGZ1bmN0aW9uKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRo
aXMuX251bVRyaWFuZ2xlczsKKyAgICAgICAgfQorICAgIH0KKyk7CisKK1dlYkdMQmVuY2htYXJr
ID0gVXRpbGl0aWVzLmNyZWF0ZVN1YmNsYXNzKEJlbmNobWFyaywKKyAgICBmdW5jdGlvbihvcHRp
b25zKQorICAgIHsKKyAgICAgICAgQmVuY2htYXJrLmNhbGwodGhpcywgbmV3IFdlYkdMU3RhZ2Uo
KSwgb3B0aW9ucyk7CisgICAgfSwgeworCisgICAgd2FpdFVudGlsUmVhZHk6IGZ1bmN0aW9uKCkg
eworICAgICAgICB0aGlzLl9pbml0UHJvbWlzZSA9IG5ldyBTaW1wbGVQcm9taXNlOworICAgICAg
ICByZXR1cm4gdGhpcy5faW5pdFByb21pc2U7CisgICAgfSwKK30pOworCit3aW5kb3cuYmVuY2ht
YXJrQ2xhc3MgPSBXZWJHTEJlbmNobWFyazsKKworfSkoKTsKZGlmZiAtLWdpdCBhL1BlcmZvcm1h
bmNlVGVzdHMvTW90aW9uTWFyay90ZXN0cy8zZC90cmlhbmdsZXMtd2ViZ2wuaHRtbCBiL1BlcmZv
cm1hbmNlVGVzdHMvTW90aW9uTWFyay90ZXN0cy8zZC90cmlhbmdsZXMtd2ViZ2wuaHRtbApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi44Y2UyYTM3NTVkNWRlNzQ1OGRkZTA4ZTQ0MTM4MWJmYTM0YzE4ZWM3Ci0tLSAvZGV2
L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Nb3Rpb25NYXJrL3Rlc3RzLzNkL3RyaWFuZ2xl
cy13ZWJnbC5odG1sCkBAIC0wLDAgKzEsOTMgQEAKKzwhLS0KKyAgQ29weXJpZ2h0IChDKSAyMDE1
LTIwMTkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAgYXJlIG1ldDoKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwor
ICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUgorICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCistLT4KKzwhRE9DVFlQRSBodG1sPgorPGh0bWw+Cis8aGVhZD4K
KyAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CisgICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0
eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4vcmVzb3VyY2VzL3N0YWdlLmNzcyI+CisgICAgPHN0eWxl
PgorICAgICAgICAjc3RhZ2UgeworICAgICAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDsK
KyAgICAgICAgfQorICAgIDwvc3R5bGU+Cis8L2hlYWQ+Cis8Ym9keT4KKyAgICA8Y2FudmFzIGlk
PSJzdGFnZSI+PC9jYW52YXM+CisgICAgPHNjcmlwdCBpZD0idmVydGV4IiB0eXBlPSJ4LXNoYWRl
ci94LWdsc2wiPgorYXR0cmlidXRlIHZlYzQgcG9zaXRpb247CithdHRyaWJ1dGUgdmVjNCBjb2xv
cjsKKwordW5pZm9ybSBmbG9hdCBzY2FsZTsKK3VuaWZvcm0gZmxvYXQgdGltZTsKK3VuaWZvcm0g
ZmxvYXQgb2Zmc2V0WDsKK3VuaWZvcm0gZmxvYXQgb2Zmc2V0WTsKK3VuaWZvcm0gZmxvYXQgc2Nh
bGFyOwordW5pZm9ybSBmbG9hdCBzY2FsYXJPZmZzZXQ7CisKK3ZhcnlpbmcgdmVjNCB2X2NvbG9y
OworCit2b2lkIG1haW4oKSB7CisKKyAgICBmbG9hdCBmYWRlID0gbW9kKHNjYWxhck9mZnNldCAr
IHRpbWUgKiBzY2FsYXIgLyAxMC4wLCAxLjApOworCisgICAgaWYgKGZhZGUgPCAwLjUpIHsKKyAg
ICAgICAgZmFkZSA9IGZhZGUgKiAyLjA7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmFkZSA9ICgx
LjAgLSBmYWRlKSAqIDIuMDsKKyAgICB9CisKKyAgICBmbG9hdCB4cG9zID0gcG9zaXRpb24ueCAq
IHNjYWxlOworICAgIGZsb2F0IHlwb3MgPSBwb3NpdGlvbi55ICogc2NhbGU7CisKKyAgICBmbG9h
dCBhbmdsZSA9IDMuMTQxNTkgKiAyLjAgKiBmYWRlOworICAgIGZsb2F0IHhyb3QgPSB4cG9zICog
Y29zKGFuZ2xlKSAtIHlwb3MgKiBzaW4oYW5nbGUpOworICAgIGZsb2F0IHlyb3QgPSB4cG9zICog
c2luKGFuZ2xlKSArIHlwb3MgKiBjb3MoYW5nbGUpOworCisgICAgeHBvcyA9IHhyb3QgKyBvZmZz
ZXRYOworICAgIHlwb3MgPSB5cm90ICsgb2Zmc2V0WTsKKworICAgIHZfY29sb3IgPSB2ZWM0KGZh
ZGUsIDEuMCAtIGZhZGUsIDAuMCwgMS4wKSArIGNvbG9yOworICAgIGdsX1Bvc2l0aW9uID0gdmVj
NCh4cG9zLCB5cG9zLCAwLjAsIDEuMCk7Cit9CisgICAgPC9zY3JpcHQ+CisgICAgPHNjcmlwdCBp
ZD0iZnJhZ21lbnQiIHR5cGU9Ingtc2hhZGVyL3gtZ2xzbCI+CisjaWZkZWYgR0xfRVMKK3ByZWNp
c2lvbiBtZWRpdW1wIGZsb2F0OworI2VuZGlmCisKK3ZhcnlpbmcgdmVjNCB2X2NvbG9yOworCit2
b2lkIG1haW4oKSB7CisgICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjsKK30KKyAgICA8L3Njcmlw
dD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3N0cmluZ3MuanMiPjwvc2NyaXB0
PgorICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZXh0ZW5zaW9ucy5qcyI+PC9zY3Jp
cHQ+CisgICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIj48L3Nj
cmlwdD4KKyAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL21hdGguanMiPjwvc2NyaXB0Pgor
ICAgIDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvbWFpbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNj
cmlwdCBzcmM9InJlc291cmNlcy93ZWJnbC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CmRpZmYgLS1naXQgYS9QZXJmb3JtYW5jZVRlc3RzL01vdGlvbk1hcmsvdGVzdHMvM2QvdHJpYW5n
bGVzLXdlYmdwdS5odG1sIGIvUGVyZm9ybWFuY2VUZXN0cy9Nb3Rpb25NYXJrL3Rlc3RzLzNkL3Ry
aWFuZ2xlcy13ZWJncHUuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lODkyOWIwZDcyNzVjODhiMDRkZTNmYTdl
ZTkxYTVmNzI1NzExNzhmCi0tLSAvZGV2L251bGwKKysrIGIvUGVyZm9ybWFuY2VUZXN0cy9Nb3Rp
b25NYXJrL3Rlc3RzLzNkL3RyaWFuZ2xlcy13ZWJncHUuaHRtbApAQCAtMCwwICsxLDQ1IEBACis8
IS0tCisgIENvcHlyaWdodCAoQykgMjAxOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KworICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05U
UklCVVRPUlMgYGBBUyBJUycnCisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICBUSEUgSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRT
IENPTlRSSUJVVE9SUworICBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GCisgIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKy0tPgorPCFET0NUWVBFIGh0
bWw+Cis8aHRtbD4KKzxoZWFkPgorICAgIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KKyAgICA8bGlu
ayByZWw9InN0eWxlc2hlZXQiIHR5cGU9InRleHQvY3NzIiBocmVmPSIuLi9yZXNvdXJjZXMvc3Rh
Z2UuY3NzIj4KKyAgICA8c3R5bGU+CisgICAgICAgICNzdGFnZSB7CisgICAgICAgICAgICBiYWNr
Z3JvdW5kLWNvbG9yOiAjZmZmOworICAgICAgICB9CisgICAgPC9zdHlsZT4KKzwvaGVhZD4KKzxi
b2R5PgorICAgIDxjYW52YXMgaWQ9InN0YWdlIj48L2NhbnZhcz4KKyAgICA8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3N0cmluZ3MuanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvZXh0ZW5zaW9ucy5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIj48L3NjcmlwdD4KKyAgICA8c2NyaXB0IHNy
Yz0iLi4vcmVzb3VyY2VzL21hdGguanMiPjwvc2NyaXB0PgorICAgIDxzY3JpcHQgc3JjPSIuLi9y
ZXNvdXJjZXMvbWFpbi5qcyI+PC9zY3JpcHQ+CisgICAgPHNjcmlwdCBzcmM9InJlc291cmNlcy93
ZWJncHUuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvUGVyZm9y
bWFuY2VUZXN0cy9Nb3Rpb25NYXJrL3Rlc3RzLzNkL3dlYmdsLmh0bWwgYi9QZXJmb3JtYW5jZVRl
c3RzL01vdGlvbk1hcmsvdGVzdHMvM2Qvd2ViZ2wuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNmE2MTRmNDRhMTVkOGQzMTFkYTZhMzk4MDBkYTZlMDQ3OGFmZmUzYi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9QZXJmb3JtYW5jZVRlc3Rz
L01vdGlvbk1hcmsvdGVzdHMvM2Qvd2ViZ2wuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDg4ICsw
LDAgQEAKLTwhLS0KLSAgQ29weXJpZ2h0IChDKSAyMDE1LTIwMTcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotCi0gIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAgYXJlIG1ldDoKLSAg
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgotICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0KLSAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAgVEhFIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgotICBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RgotICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MKLSAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KLSAgQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkK
LSAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRgotICBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0tLT4K
LTwhRE9DVFlQRSBodG1sPgotPGh0bWw+Ci08aGVhZD4KLSAgICA8bWV0YSBjaGFyc2V0PSJ1dGYt
OCI+Ci0gICAgPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyIgaHJlZj0iLi4v
cmVzb3VyY2VzL3N0YWdlLmNzcyI+Ci08L2hlYWQ+Ci08Ym9keT4KLSAgICA8Y2FudmFzIGlkPSJz
dGFnZSI+PC9jYW52YXM+Ci0gICAgPHNjcmlwdCBpZD0idmVydGV4IiB0eXBlPSJ4LXNoYWRlci94
LWdsc2wiPgotYXR0cmlidXRlIHZlYzQgcG9zaXRpb247Ci1hdHRyaWJ1dGUgdmVjNCBjb2xvcjsK
LQotdW5pZm9ybSBmbG9hdCBzY2FsZTsKLXVuaWZvcm0gZmxvYXQgdGltZTsKLXVuaWZvcm0gZmxv
YXQgb2Zmc2V0WDsKLXVuaWZvcm0gZmxvYXQgb2Zmc2V0WTsKLXVuaWZvcm0gZmxvYXQgc2NhbGFy
OwotdW5pZm9ybSBmbG9hdCBzY2FsYXJPZmZzZXQ7Ci0KLXZhcnlpbmcgdmVjNCB2X2NvbG9yOwot
Ci12b2lkIG1haW4oKSB7Ci0KLSAgICBmbG9hdCBmYWRlID0gbW9kKHNjYWxhck9mZnNldCArIHRp
bWUgKiBzY2FsYXIgLyAxMC4wLCAxLjApOwotCi0gICAgaWYgKGZhZGUgPCAwLjUpIHsKLSAgICAg
ICAgZmFkZSA9IGZhZGUgKiAyLjA7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZmFkZSA9ICgxLjAg
LSBmYWRlKSAqIDIuMDsKLSAgICB9Ci0KLSAgICBmbG9hdCB4cG9zID0gcG9zaXRpb24ueCAqIHNj
YWxlOwotICAgIGZsb2F0IHlwb3MgPSBwb3NpdGlvbi55ICogc2NhbGU7Ci0KLSAgICBmbG9hdCBh
bmdsZSA9IDMuMTQxNTkgKiAyLjAgKiBmYWRlOwotICAgIGZsb2F0IHhyb3QgPSB4cG9zICogY29z
KGFuZ2xlKSAtIHlwb3MgKiBzaW4oYW5nbGUpOwotICAgIGZsb2F0IHlyb3QgPSB4cG9zICogc2lu
KGFuZ2xlKSArIHlwb3MgKiBjb3MoYW5nbGUpOwotCi0gICAgeHBvcyA9IHhyb3QgKyBvZmZzZXRY
OwotICAgIHlwb3MgPSB5cm90ICsgb2Zmc2V0WTsKLQotICAgIHZfY29sb3IgPSB2ZWM0KGZhZGUs
IDEuMCAtIGZhZGUsIDAuMCwgMS4wKSArIGNvbG9yOwotICAgIGdsX1Bvc2l0aW9uID0gdmVjNCh4
cG9zLCB5cG9zLCAwLjAsIDEuMCk7Ci19Ci0gICAgPC9zY3JpcHQ+Ci0gICAgPHNjcmlwdCBpZD0i
ZnJhZ21lbnQiIHR5cGU9Ingtc2hhZGVyL3gtZ2xzbCI+Ci0jaWZkZWYgR0xfRVMKLXByZWNpc2lv
biBtZWRpdW1wIGZsb2F0OwotI2VuZGlmCi0KLXZhcnlpbmcgdmVjNCB2X2NvbG9yOwotCi12b2lk
IG1haW4oKSB7Ci0gICAgZ2xfRnJhZ0NvbG9yID0gdl9jb2xvcjsKLX0KLSAgICA8L3NjcmlwdD4K
LSAgICA8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3N0cmluZ3MuanMiPjwvc2NyaXB0Pgot
ICAgIDxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvZXh0ZW5zaW9ucy5qcyI+PC9zY3JpcHQ+
Ci0gICAgPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9zdGF0aXN0aWNzLmpzIj48L3Njcmlw
dD4KLSAgICA8c2NyaXB0IHNyYz0iLi4vcmVzb3VyY2VzL21hdGguanMiPjwvc2NyaXB0PgotICAg
IDxzY3JpcHQgc3JjPSIuLi9yZXNvdXJjZXMvbWFpbi5qcyI+PC9zY3JpcHQ+Ci0gICAgPHNjcmlw
dCBzcmM9InJlc291cmNlcy93ZWJnbC5qcyI+PC9zY3JpcHQ+Ci08L2JvZHk+Ci08L2h0bWw+Cg==
</data>

          </attachment>
      

    </bug>

</bugzilla>