<?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>238722</bug_id>
          
          <creation_ts>2022-04-04 00:18:37 -0700</creation_ts>
          <short_desc>[WebGPU] Implement missing validity checks</short_desc>
          <delta_ts>2022-04-11 17:14:59 -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>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>238720</dependson>
          <blocked>238723</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Myles C. Maxfield">mmaxfield</reporter>
          <assigned_to name="Myles C. Maxfield">mmaxfield</assigned_to>
          <cc>dino</cc>
    
    <cc>djg</cc>
    
    <cc>kkinnunen</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1857745</commentid>
    <comment_count>0</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-04 00:18:37 -0700</bug_when>
    <thetext>.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1857746</commentid>
    <comment_count>1</comment_count>
      <attachid>456537</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-04 00:20:41 -0700</bug_when>
    <thetext>Created attachment 456537
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1857747</commentid>
    <comment_count>2</comment_count>
      <attachid>456538</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-04 00:23:31 -0700</bug_when>
    <thetext>Created attachment 456538
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859181</commentid>
    <comment_count>3</comment_count>
      <attachid>456538</attachid>
    <who name="Kimmo Kinnunen">kkinnunen</who>
    <bug_when>2022-04-07 03:32:26 -0700</bug_when>
    <thetext>Comment on attachment 456538
Patch

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

&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:102
&gt; +    if (!source.isValidToUseWith(*this))

My mental model is:
All functions do:
 1) `this` is validated with isValid()
 2) all inputs are validated with isValidToUseWith(*this)

so this seems to lack the 1)

&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:167
&gt;  

Note: here we have a contrasting internal functions:

validateCopyBufferToBuffer(const Buffer&amp; source, uint64_t sourceOffset, const Buffer&amp; destination, uint64_t destinationOffset, uint64_t size)
vs
static bool validateImageCopyBuffer(const WGPUImageCopyBuffer&amp; imageCopyBuffer)

It is kind of easier to follow validateCopyBufferToBuffer because all the parameters are converted to &quot;business-as-usual&quot; internal parameters (as opposed to weird-and-cumbersome-C-API-types)

OTOH validateImageCopyBuffer codepaths are weird and unusual as they leak the API types to the internal

So example:
Where is copyTextureToBuffer &quot;isValidToUseWith&quot; checks?

I know it&apos;s cumbersome if there&apos;s a descriptor with 100 fields, and you don&apos;t want to 
a) add a duplicated descriptor but with internal types
b) add 100 params

I don&apos;t think there&apos;s good options here.

It&apos;s a bit hard to understand that all these have 
1) isVAlid check
2) isValidToUseWith check for each resource referenced

    RefPtr&lt;ComputePassEncoder&gt; beginComputePass(const WGPUComputePassDescriptor&amp;);
    RefPtr&lt;RenderPassEncoder&gt; beginRenderPass(const WGPURenderPassDescriptor&amp;);
    void copyBufferToBuffer(const Buffer&amp; source, uint64_t sourceOffset, const Buffer&amp; destination, uint64_t destinationOffset, uint64_t size);
    void copyBufferToTexture(const WGPUImageCopyBuffer&amp; source, const WGPUImageCopyTexture&amp; destination, const WGPUExtent3D&amp; copySize);
    void copyTextureToBuffer(const WGPUImageCopyTexture&amp; source, const WGPUImageCopyBuffer&amp; destination, const WGPUExtent3D&amp; copySize);
    void copyTextureToTexture(const WGPUImageCopyTexture&amp; source, const WGPUImageCopyTexture&amp; destination, const WGPUExtent3D&amp; copySize);
    void clearBuffer(const Buffer&amp;, uint64_t offset, uint64_t size);
    RefPtr&lt;CommandBuffer&gt; finish(const WGPUCommandBufferDescriptor&amp;);
    void insertDebugMarker(String&amp;&amp; markerLabel);
    void popDebugGroup();
    void pushDebugGroup(String&amp;&amp; groupLabel);
    void resolveQuerySet(const QuerySet&amp;, uint32_t firstQuery, uint32_t queryCount, const Buffer&amp; destination, uint64_t destinationOffset);
    void writeTimestamp(const QuerySet&amp;, uint32_t queryIndex);
    void setLabel(String&amp;&amp;);

In  my mind reviewing this, I&apos;m thinking: &quot;In the diff, I expect to see isValid() check for each function. Why is there not?&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859462</commentid>
    <comment_count>4</comment_count>
      <attachid>456538</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-07 15:06:04 -0700</bug_when>
    <thetext>Comment on attachment 456538
Patch

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

&gt;&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:102
&gt;&gt; +    if (!source.isValidToUseWith(*this))
&gt; 
&gt; My mental model is:
&gt; All functions do:
&gt;  1) `this` is validated with isValid()
&gt;  2) all inputs are validated with isValidToUseWith(*this)
&gt; 
&gt; so this seems to lack the 1)

Coincidentally I had the same thought when I was implementing this. I previously emailed one of the spec editors about it; here&apos;s the relevant part of his reply:

&gt; This is at intentional (though that doesn&apos;t mean it&apos;s the right choice). I think the thinking was these checks were supposed to be specific to the object in question (`source`/`destination`), and there should be an explicit check for whether `this` is valid, which may just be missing in a lot of places.
&gt; 
&gt; In this particular case though, it&apos;s inconsequential whether the encoder is valid. IIRC, the only effect from copyBufferToBuffer validation failing is (supposed to be) that the encoder becomes invalid. So it doesn&apos;t matter to fail if the encoder was already invalid.

I think the right answer here is for me to make a PR to the spec to add a bunch of &quot;`this` must be valid&quot; checks, and then once that lands, to update our implementation to add the checks.

&gt;&gt; Source/WebGPU/WebGPU/CommandEncoder.mm:167
&gt;&gt;  
&gt; 
&gt; Note: here we have a contrasting internal functions:
&gt; 
&gt; validateCopyBufferToBuffer(const Buffer&amp; source, uint64_t sourceOffset, const Buffer&amp; destination, uint64_t destinationOffset, uint64_t size)
&gt; vs
&gt; static bool validateImageCopyBuffer(const WGPUImageCopyBuffer&amp; imageCopyBuffer)
&gt; 
&gt; It is kind of easier to follow validateCopyBufferToBuffer because all the parameters are converted to &quot;business-as-usual&quot; internal parameters (as opposed to weird-and-cumbersome-C-API-types)
&gt; 
&gt; OTOH validateImageCopyBuffer codepaths are weird and unusual as they leak the API types to the internal
&gt; 
&gt; So example:
&gt; Where is copyTextureToBuffer &quot;isValidToUseWith&quot; checks?
&gt; 
&gt; I know it&apos;s cumbersome if there&apos;s a descriptor with 100 fields, and you don&apos;t want to 
&gt; a) add a duplicated descriptor but with internal types
&gt; b) add 100 params
&gt; 
&gt; I don&apos;t think there&apos;s good options here.
&gt; 
&gt; It&apos;s a bit hard to understand that all these have 
&gt; 1) isVAlid check
&gt; 2) isValidToUseWith check for each resource referenced
&gt; 
&gt;     RefPtr&lt;ComputePassEncoder&gt; beginComputePass(const WGPUComputePassDescriptor&amp;);
&gt;     RefPtr&lt;RenderPassEncoder&gt; beginRenderPass(const WGPURenderPassDescriptor&amp;);
&gt;     void copyBufferToBuffer(const Buffer&amp; source, uint64_t sourceOffset, const Buffer&amp; destination, uint64_t destinationOffset, uint64_t size);
&gt;     void copyBufferToTexture(const WGPUImageCopyBuffer&amp; source, const WGPUImageCopyTexture&amp; destination, const WGPUExtent3D&amp; copySize);
&gt;     void copyTextureToBuffer(const WGPUImageCopyTexture&amp; source, const WGPUImageCopyBuffer&amp; destination, const WGPUExtent3D&amp; copySize);
&gt;     void copyTextureToTexture(const WGPUImageCopyTexture&amp; source, const WGPUImageCopyTexture&amp; destination, const WGPUExtent3D&amp; copySize);
&gt;     void clearBuffer(const Buffer&amp;, uint64_t offset, uint64_t size);
&gt;     RefPtr&lt;CommandBuffer&gt; finish(const WGPUCommandBufferDescriptor&amp;);
&gt;     void insertDebugMarker(String&amp;&amp; markerLabel);
&gt;     void popDebugGroup();
&gt;     void pushDebugGroup(String&amp;&amp; groupLabel);
&gt;     void resolveQuerySet(const QuerySet&amp;, uint32_t firstQuery, uint32_t queryCount, const Buffer&amp; destination, uint64_t destinationOffset);
&gt;     void writeTimestamp(const QuerySet&amp;, uint32_t queryIndex);
&gt;     void setLabel(String&amp;&amp;);
&gt; 
&gt; In  my mind reviewing this, I&apos;m thinking: &quot;In the diff, I expect to see isValid() check for each function. Why is there not?&quot;

I think you&apos;re bringing up a few different points. Let&apos;s try to tease them apart:

1. Functions inside `namespace WebGPU` interrogate `WGPU` struct types. You&apos;re right that the only solutions I&apos;ve though of to this problem are to either create duplicate-yet-slightly-different descriptors or to flatten the structs into a (potentially very long) parameter list. I think both of those medicines are worse than the sickness, though, for a few reasons:
    A) I&apos;m already trying to get rid of the various copies of all the deeply nested structs inside our IPC code
    B) We&apos;ve already decided that the WGSL compiler will be using these WGSL struct types directly, instead of copying them into WGSL-specific copies of the structs. See https://a1391192.slack.com/archives/GMHCJ75MK/p1645336902048319. So we&apos;re already operating under the assumption that there won&apos;t be a layering boundary between WGPU types and the internal implementation
    C) It would be kind of unfortunate to create duplicated-yet-slightly-different structs for some WGPU types, but not others, depending on whether there happens to be a resource transitively somewhere within the type. Both because it will be hard to remember which types get a copy, and also because if someone sticks a resource into some struct in a future version of the spec, that could potentially cause a large set of structs to have to be duplicated (because anything that transitively contains a resource would be duplicated).

2. Where is copyTextureToBuffer &quot;isValidToUseWith&quot; checks? I think, for validation purposes where there isn&apos;t significant performance impact, matching the spec&apos;s language/layout is probably the best answer to this kind of question. I took inspiration from the design of LFC, which tries to name / organize concepts to match the terms-of-art in the relevant specs. (Of course, matching the organization of the spec is much less important than performance, so if performance is a concern, this design goes out the window. I don&apos;t think, in this situation here, though, that performance is a concern. At least not yet - we&apos;ll definitely get to the point where we&apos;re measuring various benchmarks, and then we can revisit this.)

3. I expect to see isValid() check for each function. Why is there not? Like above, I think the best path forward here is for me to add these checks to the spec first, and then update our implementation accordingly. I&apos;ll put that on my to-do list.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859490</commentid>
    <comment_count>5</comment_count>
      <attachid>456981</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-07 16:09:17 -0700</bug_when>
    <thetext>Created attachment 456981
Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859618</commentid>
    <comment_count>6</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-08 01:24:56 -0700</bug_when>
    <thetext>Kimmo and I discussed this offline. The conclusion we reached was that I should write a code generate to generate WebGPU:: versions of all the structs. These new structs will hold references to other WebGPU:: objects rather than WGPU objects.

We can also use the code generator to generate IPC structs too.

We don&apos;t want to mark any existing patches as blocked on that (somewhat large) code generator project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1859974</commentid>
    <comment_count>7</comment_count>
      <attachid>457138</attachid>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-08 20:16:25 -0700</bug_when>
    <thetext>Created attachment 457138
Rebased</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860217</commentid>
    <comment_count>8</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-04-11 00:19:14 -0700</bug_when>
    <thetext>&lt;rdar://problem/91550917&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860428</commentid>
    <comment_count>9</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-04-11 15:05:05 -0700</bug_when>
    <thetext>Committed r292728 (249513@main): &lt;https://commits.webkit.org/249513@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 457138.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1860488</commentid>
    <comment_count>10</comment_count>
    <who name="Myles C. Maxfield">mmaxfield</who>
    <bug_when>2022-04-11 17:14:59 -0700</bug_when>
    <thetext>Committed r292744 (249528@trunk): &lt;https://commits.webkit.org/249528@trunk&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456537</attachid>
            <date>2022-04-04 00:20:41 -0700</date>
            <delta_ts>2022-04-04 00:23:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>14463</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IGY2MjVkYzQ0NDEyOGM1OTYzY2ZhOTY1ZTE5MmY3ZWYwMzhmNWU2Y2MKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBTdW4gQXByIDMg
MTM6MjI6NDYgMjAyMiAtMDcwMAoKICAgIENyZWF0ZSBpbnZhbGlkIG9iamVjdHMKCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CdWZmZXIubW0KaW5kZXggZDFiYmUyZmMyNWM2Li5hZDcxNGNjYTNhMmEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9CdWZmZXIubW0KQEAgLTUwLDcgKzUwLDggQEAgc3RhdGljIGJvb2wgdmFsaWRhdGVEZXNjcmlw
dG9yKGNvbnN0IERldmljZSYgZGV2aWNlLCBjb25zdCBXR1BVQnVmZmVyRGVzY3JpcHRvciYKIAog
c3RhdGljIGJvb2wgdmFsaWRhdGVDcmVhdGVCdWZmZXIoY29uc3QgRGV2aWNlJiBkZXZpY2UsIGNv
bnN0IFdHUFVCdWZmZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewotICAgIC8vIEZJWE1FOiAi
dGhpcyBpcyBhIHZhbGlkIEdQVURldmljZS4iCisgICAgaWYgKCFkZXZpY2UuaXNWYWxpZCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIXZhbGlkYXRlRGVzY3JpcHRvcihkZXZp
Y2UsIGRlc2NyaXB0b3IpKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0yMDcsNyArMjA4LDEw
IEBAIHZvaWQqIEJ1ZmZlcjo6Z2V0TWFwcGVkUmFuZ2Uoc2l6ZV90IG9mZnNldCwgc2l6ZV90IHNp
emUpCiAKIGJvb2wgQnVmZmVyOjp2YWxpZGF0ZU1hcEFzeW5jKFdHUFVNYXBNb2RlRmxhZ3MgbW9k
ZSwgc2l6ZV90IG9mZnNldCwgc2l6ZV90IHJhbmdlU2l6ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogInRoaXMgaXMgYSB2YWxpZCBHUFVCdWZmZXIuIFRPRE86IGNoZWNrIGRlc3Ryb3llZCBzdGF0
ZT8iCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8v
IEZJWE1FOiBUaGUgc3BlYyBzYXlzICJUT0RPOiBjaGVjayBkZXN0cm95ZWQgc3RhdGU/IgogCiAg
ICAgaWYgKG9mZnNldCAlIDgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9Db21tYW5kRW5jb2Rlci5oCmluZGV4IGNhMjhhYmI2ZDhkNy4uNDE5MjY0MTExODJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5oCisrKyBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLmgKQEAgLTc5LDkgKzc5LDEzIEBAIHByaXZh
dGU6CiAgICAgQ29tbWFuZEVuY29kZXIoaWQ8TVRMQ29tbWFuZEJ1ZmZlcj4sIERldmljZSYpOwog
ICAgIENvbW1hbmRFbmNvZGVyKERldmljZSYpOwogCisgICAgYm9vbCB2YWxpZGF0ZUNvcHlCdWZm
ZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwgdWludDY0X3Qgc291cmNlT2Zmc2V0LCBj
b25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLCB1aW50NjRfdCBkZXN0aW5hdGlvbk9mZnNldCwgdWlu
dDY0X3Qgc2l6ZSk7CisgICAgYm9vbCB2YWxpZGF0ZUNsZWFyQnVmZmVyKGNvbnN0IEJ1ZmZlciYs
IHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSk7CiAgICAgYm9vbCB2YWxpZGF0ZUZpbmlz
aCgpIGNvbnN0OwogICAgIGJvb2wgdmFsaWRhdGVQb3BEZWJ1Z0dyb3VwKCkgY29uc3Q7CiAKKyAg
ICB2b2lkIG1ha2VJbnZhbGlkKCkgeyBtX2NvbW1hbmRCdWZmZXIgPSBuaWw7IH0KKwogICAgIHZv
aWQgZW5zdXJlQmxpdENvbW1hbmRFbmNvZGVyKCk7CiAgICAgdm9pZCBmaW5hbGl6ZUJsaXRDb21t
YW5kRW5jb2RlcigpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5k
RW5jb2Rlci5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLm1tCmluZGV4
IDNiNWUyMTA3ODU1MC4uZjhmNzA4OGI5NWZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9Db21tYW5kRW5jb2Rlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5k
RW5jb2Rlci5tbQpAQCAtOTcsMTEgKzk3LDEzIEBAIFJlZlB0cjxSZW5kZXJQYXNzRW5jb2Rlcj4g
Q29tbWFuZEVuY29kZXI6OmJlZ2luUmVuZGVyUGFzcyhjb25zdCBXR1BVUmVuZGVyUGFzc0RlCiAg
ICAgcmV0dXJuIFJlbmRlclBhc3NFbmNvZGVyOjpjcmVhdGUobmlsLCBtX2RldmljZSk7CiB9CiAK
LXN0YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZlclRvQnVmZmVyKGNvbnN0IEJ1ZmZlciYgc291
cmNlLCB1aW50NjRfdCBzb3VyY2VPZmZzZXQsIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sIHVp
bnQ2NF90IGRlc3RpbmF0aW9uT2Zmc2V0LCB1aW50NjRfdCBzaXplKQorYm9vbCBDb21tYW5kRW5j
b2Rlcjo6dmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZmZXIoY29uc3QgQnVmZmVyJiBzb3VyY2UsIHVp
bnQ2NF90IHNvdXJjZU9mZnNldCwgY29uc3QgQnVmZmVyJiBkZXN0aW5hdGlvbiwgdWludDY0X3Qg
ZGVzdGluYXRpb25PZmZzZXQsIHVpbnQ2NF90IHNpemUpCiB7Ci0gICAgLy8gRklYTUU6ICJzb3Vy
Y2UgaXMgdmFsaWQgdG8gdXNlIHdpdGggdGhpcy4iCisgICAgaWYgKCFzb3VyY2UuaXNWYWxpZFRv
VXNlV2l0aCgqdGhpcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1FOiAi
ZGVzdGluYXRpb24gaXMgdmFsaWQgdG8gdXNlIHdpdGggdGhpcy4iCisgICAgaWYgKCFkZXN0aW5h
dGlvbi5pc1ZhbGlkVG9Vc2VXaXRoKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAg
ICAgaWYgKCEoc291cmNlLnVzYWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29weVNyYykpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTE2MCw3ICsxNjIsOCBAQCBzdGF0aWMgYm9vbCB2YWxpZGF0
ZUltYWdlQ29weUJ1ZmZlcihjb25zdCBXR1BVSW1hZ2VDb3B5QnVmZmVyJiBpbWFnZUNvcHlCdWZm
ZXIpCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qt
b3BkZWYtdmFsaWRhdGluZy1ncHVpbWFnZWNvcHlidWZmZXIKIAotICAgIC8vIEZJWE1FOiAiaW1h
Z2VDb3B5QnVmZmVyLmJ1ZmZlciBtdXN0IGJlIGEgdmFsaWQgR1BVQnVmZmVyLiIKKyAgICBpZiAo
IWZyb21BUEkoaW1hZ2VDb3B5QnVmZmVyLmJ1ZmZlcikuaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBpZiAoaW1hZ2VDb3B5QnVmZmVyLmxheW91dC5ieXRlc1BlclJvdyAl
IDI1NikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNjc0LDkgKzY3NywxMCBAQCB2b2lkIENv
bW1hbmRFbmNvZGVyOjpjb3B5VGV4dHVyZVRvVGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5VGV4
dHVyZSYgc291cmNlLCBjbwogICAgIH0KIH0KIAotc3RhdGljIGJvb2wgdmFsaWRhdGVDbGVhckJ1
ZmZlcihjb25zdCBCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXpl
KQorYm9vbCBDb21tYW5kRW5jb2Rlcjo6dmFsaWRhdGVDbGVhckJ1ZmZlcihjb25zdCBCdWZmZXIm
IGJ1ZmZlciwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdCBzaXplKQogewotICAgIC8vIEZJWE1F
OiAiYnVmZmVyIGlzIHZhbGlkIHRvIHVzZSB3aXRoIHRoaXMuIgorICAgIGlmICghYnVmZmVyLmlz
VmFsaWRUb1VzZVdpdGgoKnRoaXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAo
IShidWZmZXIudXNhZ2UoKSAmIFdHUFVCdWZmZXJVc2FnZV9Db3B5RHN0KSkKICAgICAgICAgcmV0
dXJuIGZhbHNlOwpAQCAtNzE4LDcgKzcyMiw4IEBAIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNsZWFy
QnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90CiAK
IGJvb2wgQ29tbWFuZEVuY29kZXI6OnZhbGlkYXRlRmluaXNoKCkgY29uc3QKIHsKLSAgICAvLyBG
SVhNRTogInRoaXMgbXVzdCBiZSB2YWxpZC4iCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3N0YXRlICE9IEVuY29kZXJTdGF0ZTo6T3BlbikK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzQzLDkgKzc0OCw3IEBAIFJlZlB0cjxDb21tYW5k
QnVmZmVyPiBDb21tYW5kRW5jb2Rlcjo6ZmluaXNoKGNvbnN0IFdHUFVDb21tYW5kQnVmZmVyRGVz
Y3JpcHRvciYKIAogICAgIGlmICh2YWxpZGF0aW9uRmFpbGVkKSB7CiAgICAgICAgIG1fZGV2aWNl
LT5nZW5lcmF0ZUFWYWxpZGF0aW9uRXJyb3IoIlZhbGlkYXRpb24gZmFpbHVyZS4iX3MpOwotCi0g
ICAgICAgIC8vIEZJWE1FOiAiUmV0dXJuIGEgbmV3IGludmFsaWQgR1BVQ29tbWFuZEJ1ZmZlci4i
Ci0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gQ29tbWFuZEJ1ZmZlcjo6
Y3JlYXRlSW52YWxpZChtX2RldmljZSk7CiAgICAgfQogCiAgICAgZmluYWxpemVCbGl0Q29tbWFu
ZEVuY29kZXIoKTsKQEAgLTc4OCw3ICs3OTEsNyBAQCB2b2lkIENvbW1hbmRFbmNvZGVyOjpwb3BE
ZWJ1Z0dyb3VwKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF2YWxpZGF0ZVBvcERlYnVn
R3JvdXAoKSkgewotICAgICAgICAvLyBGSVhNRTogIm1ha2UgdGhpcyBpbnZhbGlkLCBhbmQgc3Rv
cC4iCisgICAgICAgIG1ha2VJbnZhbGlkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5oIGIvU291
cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVyLmgKaW5kZXggOTZhYzg3YTgwM2Ex
Li43NTVlNDRiYjEzYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQ
YXNzRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rl
ci5oCkBAIC03Niw3ICs3Niw5IEBAIHByaXZhdGU6CiAKICAgICBib29sIHZhbGlkYXRlUG9wRGVi
dWdHcm91cCgpIGNvbnN0OwogCi0gICAgY29uc3QgaWQ8TVRMQ29tcHV0ZUNvbW1hbmRFbmNvZGVy
PiBtX2NvbXB1dGVDb21tYW5kRW5jb2RlciB7IG5pbCB9OworICAgIHZvaWQgbWFrZUludmFsaWQo
KSB7IG1fY29tcHV0ZUNvbW1hbmRFbmNvZGVyID0gbmlsOyB9CisKKyAgICBpZDxNVExDb21wdXRl
Q29tbWFuZEVuY29kZXI+IG1fY29tcHV0ZUNvbW1hbmRFbmNvZGVyIHsgbmlsIH07CiAKICAgICB1
aW50NjRfdCBtX2RlYnVnR3JvdXBTdGFja1NpemUgeyAwIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVyLm1tIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVyLm1tCmluZGV4IDE2ZjAwYjk0YzI0MS4uZDAyMGRhYTE5
M2NiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGFzc0VuY29kZXIu
bW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVyLm1tCkBAIC0x
MDAsNyArMTAwLDcgQEAgdm9pZCBDb21wdXRlUGFzc0VuY29kZXI6OnBvcERlYnVnR3JvdXAoKQog
ICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXZhbGlkYXRlUG9wRGVidWdHcm91cCgpKSB7Ci0g
ICAgICAgIC8vIEZJWE1FOiAibWFrZSB0aGlzIGludmFsaWQsIGFuZCBzdG9wLiIKKyAgICAgICAg
bWFrZUludmFsaWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvT2JqZWN0QmFzZS5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvT2Jq
ZWN0QmFzZS5oCmluZGV4IDE3MmYxMDA1NjVkNC4uNmYwYThlZjJmMzVmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9PYmplY3RCYXNlLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJH
UFUvT2JqZWN0QmFzZS5oCkBAIC0yNSwyMCArMjUsNDYgQEAKIAogI3ByYWdtYSBvbmNlCiAKKyNp
bXBvcnQgIkRldmljZS5oIgogI2ltcG9ydCA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbXBvcnQgPHd0
Zi9SZWYuaD4KICNpbXBvcnQgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgogCiBuYW1lc3Bh
Y2UgV2ViR1BVIHsKIAotY2xhc3MgRGV2aWNlOwotCiAvLyBodHRwczovL2dwdXdlYi5naXRodWIu
aW8vZ3B1d2ViLyNncHVvYmplY3RiYXNlCiBjbGFzcyBPYmplY3RCYXNlIDogcHVibGljIFRocmVh
ZFNhZmVSZWZDb3VudGVkPE9iamVjdEJhc2U+IHsKICAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKIHB1YmxpYzoKICAgICB+T2JqZWN0QmFzZSgpOwogCisgICAgLy8gV2UgZG9uJ3QgZGVhbCB3
aXRoIGxhYmVscyBoZXJlLCBiZWNhdXNlIGV2ZXJ5IG9iamVjdCBkb2VzIGEgZGlmZmVyZW50IHRo
aW5nIHdpdGggdGhlbSwKKyAgICAvLyBhbmQgdGhlcmUgYXJlIG5vIGNvbW1vbiBhbGdvcml0aG1z
IHdoaWNoIGludGVyYWN0IHdpdGggdGhlbS4KKworICAgIC8vIEVhY2ggb2JqZWN0IGhhcyBpdHMg
b3duIGltcGxlbWVudGF0aW9uIG9mIGlzVmFsaWQoKS4KKyAgICAvLyBUaGlzIGlzIGdvb2QgLSBk
aWZmZXJlbnQgb2JqZWN0cyBjYW4gcmVwcmVzZW50IHZhbGlkaXR5IGluIGRpZmZlcmVudCB3YXlz
LgorICAgIC8vIEhvd2V2ZXIsIGl0IG1lYW5zIHRoYXQgaWYgd2Ugd2FudCB0byBhc2sgd2hldGhl
ciBvciBub3QgYHRoaXNgIGlzIHZhbGlkCisgICAgLy8gaGVyZSBpbiB0aGUgYmFzZSBjbGFzcywg
d2UnZCBuZWVkIGEgdmlydHVhbCBmdW5jdGlvbi4gUmF0aGVyIHRoYW4gYWRkCisgICAgLy8gYSB2
dGFibGUgcG9pbnRlciB0byBldmVyeSBvYmplY3QsIHdlIGp1c3QgdGVtcGxhdGl6ZSB0aGlzIGZ1
bmN0aW9uLgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgorICAgIGJvb2wgaXNWYWxpZFRvVXNl
V2l0aChjb25zdCBUJiB0YXJnZXRPYmplY3QpIGNvbnN0CisgICAgeworICAgICAgICAvLyBodHRw
czovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi12YWxpZC10by11c2Ut
d2l0aAorCisgICAgICAgIGlmICghdGFyZ2V0T2JqZWN0LmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBpZiAoIW1fZGV2aWNlLT5pc1ZhbGlkKCkpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKG1fZGV2aWNlLnB0cigpICE9ICZ0
YXJnZXRPYmplY3QuZGV2aWNlKCkpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgY29uc3QgRGV2aWNlJiBkZXZpY2UoKSBjb25z
dCB7IHJldHVybiBtX2RldmljZTsgfQorCiBwcm90ZWN0ZWQ6CiAgICAgT2JqZWN0QmFzZShEZXZp
Y2UmKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUXVldWUuaCBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1F1ZXVlLmgKaW5kZXggNTU5Mjg5OTgxMjlhLi40OTA1ZjIyYTlmMTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1F1ZXVlLmgKKysrIGIvU291cmNlL1dl
YkdQVS9XZWJHUFUvUXVldWUuaApAQCAtNzAsMTEgKzcwLDEzIEBAIHB1YmxpYzoKIAogICAgIGlk
PE1UTENvbW1hbmRRdWV1ZT4gY29tbWFuZFF1ZXVlKCkgY29uc3QgeyByZXR1cm4gbV9jb21tYW5k
UXVldWU7IH0KIAorICAgIGNvbnN0IERldmljZSYgZGV2aWNlKCkgY29uc3QgeyByZXR1cm4gbV9k
ZXZpY2U7IH0KKwogcHJpdmF0ZToKICAgICBRdWV1ZShpZDxNVExDb21tYW5kUXVldWU+LCBEZXZp
Y2UmKTsKICAgICBRdWV1ZShEZXZpY2UmKTsKIAotICAgIGJvb2wgdmFsaWRhdGVTdWJtaXQoKSBj
b25zdDsKKyAgICBib29sIHZhbGlkYXRlU3VibWl0KGNvbnN0IFZlY3RvcjxzdGQ6OnJlZmVyZW5j
ZV93cmFwcGVyPGNvbnN0IENvbW1hbmRCdWZmZXI+PiYpIGNvbnN0OwogICAgIGJvb2wgdmFsaWRh
dGVXcml0ZUJ1ZmZlcihjb25zdCBCdWZmZXImLCB1aW50NjRfdCBidWZmZXJPZmZzZXQsIHNpemVf
dCkgY29uc3Q7CiAKICAgICB2b2lkIGVuc3VyZUJsaXRDb21tYW5kRW5jb2RlcigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUXVldWUubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9RdWV1ZS5tbQppbmRleCA5OTdmMTU0NTllOTkuLmMwZGUzOGQ5MTg3YyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvUXVldWUubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUv
UXVldWUubW0KQEAgLTEwMSw5ICsxMDEsMTIgQEAgdm9pZCBRdWV1ZTo6b25TdWJtaXR0ZWRXb3Jr
RG9uZSh1aW50NjRfdCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChXR1BVUXVldWVXb3JrRG8KICAg
ICBjYWxsYmFja3MuYXBwZW5kKFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAotYm9vbCBRdWV1ZTo6
dmFsaWRhdGVTdWJtaXQoKSBjb25zdAorYm9vbCBRdWV1ZTo6dmFsaWRhdGVTdWJtaXQoY29uc3Qg
VmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29uc3QgQ29tbWFuZEJ1ZmZlcj4+JiBjb21t
YW5kcykgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogIkV2ZXJ5IHt7R1BVQ29tbWFuZEJ1ZmZlcn19
IGluIHxjb21tYW5kQnVmZmVyc3wgaXMgWyR2YWxpZCB0byB1c2Ugd2l0aCRdIHx0aGlzfC4iCisg
ICAgZm9yIChhdXRvIGNvbW1hbmQgOiBjb21tYW5kcykgeworICAgICAgICBpZiAoIWNvbW1hbmQu
Z2V0KCkuaXNWYWxpZFRvVXNlV2l0aCgqdGhpcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgfQogCiAgICAgLy8gRklYTUU6ICJFdmVyeSBHUFVCdWZmZXIgcmVmZXJlbmNlZCBpbiBh
bnkgZWxlbWVudCBvZiBjb21tYW5kQnVmZmVycyBpcyBpbiB0aGUgInVubWFwcGVkIiBidWZmZXIg
c3RhdGUuIgogCkBAIC0xMzQsNyArMTM3LDcgQEAgdm9pZCBRdWV1ZTo6c3VibWl0KFZlY3Rvcjxz
dGQ6OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IENvbW1hbmRCdWZmZXI+PiYmIGNvbW1hbmQKIHsK
ICAgICAvLyBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViLyNkb20tZ3B1cXVldWUtc3Vi
bWl0CiAKLSAgICBpZiAoIXZhbGlkYXRlU3VibWl0KCkpIHsKKyAgICBpZiAoIXZhbGlkYXRlU3Vi
bWl0KGNvbW1hbmRzKSkgewogICAgICAgICBtX2RldmljZS5nZW5lcmF0ZUFWYWxpZGF0aW9uRXJy
b3IoIlZhbGlkYXRpb24gZmFpbHVyZS4iX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAt
MTU1LDcgKzE1OCw4IEBAIHN0YXRpYyBib29sIHZhbGlkYXRlV3JpdGVCdWZmZXJJbml0aWFsKHNp
emVfdCBzaXplKQogCiBib29sIFF1ZXVlOjp2YWxpZGF0ZVdyaXRlQnVmZmVyKGNvbnN0IEJ1ZmZl
ciYgYnVmZmVyLCB1aW50NjRfdCBidWZmZXJPZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAogewot
ICAgIC8vIEZJWE1FOiAiYnVmZmVyIGlzIHZhbGlkIHRvIHVzZSB3aXRoIHRoaXMuIgorICAgIGlm
ICghYnVmZmVyLmlzVmFsaWRUb1VzZVdpdGgoKnRoaXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICBpZiAoYnVmZmVyLnN0YXRlKCkgIT0gQnVmZmVyOjpTdGF0ZTo6VW5tYXBwZWQpCiAg
ICAgICAgIHJldHVybiBmYWxzZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1Jl
bmRlckJ1bmRsZUVuY29kZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlckJ1bmRsZUVu
Y29kZXIuaAppbmRleCA5ZDU0NWQwZTZlNmIuLmEwOGYwYzdkNjNkMyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1JlbmRlckJ1bmRsZUVuY29kZXIuaApAQCAtNzksNyArNzksOSBAQCBwcml2YXRl
OgogCiAgICAgYm9vbCB2YWxpZGF0ZVBvcERlYnVnR3JvdXAoKSBjb25zdDsKIAotICAgIGNvbnN0
IGlkPE1UTEluZGlyZWN0Q29tbWFuZEJ1ZmZlcj4gbV9pbmRpcmVjdENvbW1hbmRCdWZmZXIgeyBu
aWwgfTsKKyAgICB2b2lkIG1ha2VJbnZhbGlkKCkgeyBtX2luZGlyZWN0Q29tbWFuZEJ1ZmZlciA9
IG5pbDsgfQorCisgICAgaWQ8TVRMSW5kaXJlY3RDb21tYW5kQnVmZmVyPiBtX2luZGlyZWN0Q29t
bWFuZEJ1ZmZlciB7IG5pbCB9OwogCiAgICAgdWludDY0X3QgbV9kZWJ1Z0dyb3VwU3RhY2tTaXpl
IHsgMCB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlckJ1bmRs
ZUVuY29kZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVyLm1t
CmluZGV4IDU0NDk2Y2ZiYWM4NS4uNmJlNDc4ODdkMTEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVyLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVL1JlbmRlckJ1bmRsZUVuY29kZXIubW0KQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIFJlbmRl
ckJ1bmRsZUVuY29kZXI6OnBvcERlYnVnR3JvdXAoKQogICAgICAgICByZXR1cm47CiAKICAgICBp
ZiAoIXZhbGlkYXRlUG9wRGVidWdHcm91cCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiAibWFrZSB0
aGlzIGludmFsaWQsIGFuZCBzdG9wLiIKKyAgICAgICAgbWFrZUludmFsaWQoKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVy
UGFzc0VuY29kZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLmgK
aW5kZXggMTRhOGJiODgyYjk0Li4zYzg5NDU3NmNmNmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUv
UmVuZGVyUGFzc0VuY29kZXIuaApAQCAtODksNyArODksOSBAQCBwcml2YXRlOgogCiAgICAgYm9v
bCB2YWxpZGF0ZVBvcERlYnVnR3JvdXAoKSBjb25zdDsKIAotICAgIGNvbnN0IGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBtX3JlbmRlckNvbW1hbmRFbmNvZGVyIHsgbmlsIH07CisgICAgdm9p
ZCBtYWtlSW52YWxpZCgpIHsgbV9yZW5kZXJDb21tYW5kRW5jb2RlciA9IG5pbDsgfQorCisgICAg
aWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IG1fcmVuZGVyQ29tbWFuZEVuY29kZXIgeyBuaWwg
fTsKIAogICAgIHVpbnQ2NF90IG1fZGVidWdHcm91cFN0YWNrU2l6ZSB7IDAgfTsKIH07CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5tbSBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLm1tCmluZGV4IDNiMjI0YTliYTAxNS4u
ZGQ3MmEzYmY2MmEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJQYXNz
RW5jb2Rlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5t
bQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgUmVuZGVyUGFzc0VuY29kZXI6OnBvcERlYnVnR3Jv
dXAoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXZhbGlkYXRlUG9wRGVidWdHcm91cCgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiAibWFrZSB0aGlzIGludmFsaWQsIGFuZCBzdG9wLiIKKyAg
ICAgICAgbWFrZUludmFsaWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2FtcGxlci5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1NhbXBsZXIubW0KaW5kZXggOTRiNjI1MmM0M2MzLi4yMWZhMDc0Mzc1YzcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJH
UFUvU2FtcGxlci5tbQpAQCAtMzIsMTEgKzMyLDEyIEBACiAKIG5hbWVzcGFjZSBXZWJHUFUgewog
Ci1zdGF0aWMgYm9vbCB2YWxpZGF0ZUNyZWF0ZVNhbXBsZXIoRGV2aWNlJiwgY29uc3QgV0dQVVNh
bXBsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQorc3RhdGljIGJvb2wgdmFsaWRhdGVDcmVhdGVT
YW1wbGVyKERldmljZSYgZGV2aWNlLCBjb25zdCBXR1BVU2FtcGxlckRlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jYWJzdHJh
Y3Qtb3BkZWYtdmFsaWRhdGluZy1ncHVzYW1wbGVyZGVzY3JpcHRvcgogCi0gICAgLy8gRklYTUU6
ICJkZXZpY2UgaXMgdmFsaWQuIgorICAgIGlmICghZGV2aWNlLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKHN0ZDo6aXNuYW4oZGVzY3JpcHRvci5sb2RNaW5DbGFt
cCkgfHwgZGVzY3JpcHRvci5sb2RNaW5DbGFtcCA8IDApCiAgICAgICAgIHJldHVybiBmYWxzZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0gYi9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9UZXh0dXJlLm1tCmluZGV4IDNkYzUzZmM3OGFjYi4uZmRkYWExMWQ5OWM4IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KQEAgLTEyMjgsNyArMTIyOCw4IEBAIHN0YXRpYyBib29s
IHRleHR1cmVWaWV3Rm9ybWF0Q29tcGF0aWJsZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQxLCBX
R1BVVGV4dHVyZUZvCiAKIGJvb2wgRGV2aWNlOjp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3Qg
V0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yLCBjb25zdCBWZWN0b3I8V0dQVVRleHR1
cmVGb3JtYXQ+JiB2aWV3Rm9ybWF0cykKIHsKLSAgICAvLyBGSVhNRTogInRoaXMgbXVzdCBiZSBh
IHZhbGlkIEdQVURldmljZS4iCisgICAgaWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIGlmICghZGVzY3JpcHRvci51c2FnZSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtMTk4Nyw4ICsxOTg4LDcgQEAgUmVmUHRyPFRleHR1cmU+IERldmljZTo6Y3JlYXRlVGV4
dHVyZShjb25zdCBXR1BVVGV4dHVyZURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiAKICAgICBpZiAo
IXZhbGlkYXRlQ3JlYXRlVGV4dHVyZShkZXNjcmlwdG9yLCB2aWV3Rm9ybWF0cykpIHsKICAgICAg
ICAgZ2VuZXJhdGVBVmFsaWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIl9zKTsKLSAg
ICAgICAgLy8gRklYTUU6ICJSZXR1cm4gYSBuZXcgaW52YWxpZCBHUFVUZXh0dXJlLiIKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAgIHJldHVybiBUZXh0dXJlOjpjcmVhdGVJbnZhbGlk
KCp0aGlzKTsKICAgICB9CiAKICAgICBNVExUZXh0dXJlRGVzY3JpcHRvciAqdGV4dHVyZURlc2Ny
aXB0b3IgPSBbTVRMVGV4dHVyZURlc2NyaXB0b3IgbmV3XTsKQEAgLTIxNDYsNyArMjE0Niw4IEBA
IHVpbnQzMl90IFRleHR1cmU6OmFycmF5TGF5ZXJDb3VudCgpIGNvbnN0CiAKIGJvb2wgVGV4dHVy
ZTo6dmFsaWRhdGVDcmVhdGVWaWV3KGNvbnN0IFdHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6ICJ0aGlzIGlzIHZhbGlkIgorICAgIGlm
ICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2ggKGRlc2Ny
aXB0b3IuYXNwZWN0KSB7CiAgICAgY2FzZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CkBAIC0yMjcz
LDkgKzIyNzQsNyBAQCBSZWZQdHI8VGV4dHVyZVZpZXc+IFRleHR1cmU6OmNyZWF0ZVZpZXcoY29u
c3QgV0dQVVRleHR1cmVWaWV3RGVzY3JpcHRvciYgaW5wdXREZQogCiAgICAgaWYgKCF2YWxpZGF0
ZUNyZWF0ZVZpZXcoZGVzY3JpcHRvcikpIHsKICAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZh
bGlkYXRpb25FcnJvcigiVmFsaWRhdGlvbiBmYWlsdXJlLiJfcyk7Ci0KLSAgICAgICAgLy8gRklY
TUU6ICJSZXR1cm4gYSBuZXcgaW52YWxpZCBHUFVUZXh0dXJlVmlldy4iCi0gICAgICAgIHJldHVy
biBudWxscHRyOworICAgICAgICByZXR1cm4gVGV4dHVyZVZpZXc6OmNyZWF0ZUludmFsaWQobV9k
ZXZpY2UpOwogICAgIH0KIAogICAgIHN0ZDo6b3B0aW9uYWw8TVRMUGl4ZWxGb3JtYXQ+IHBpeGVs
Rm9ybWF0OwpAQCAtMjQzNSw3ICsyNDM0LDggQEAgYm9vbCBUZXh0dXJlOjp2YWxpZGF0ZUltYWdl
Q29weVRleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIGltYWdlQ29weVRleHQKIAog
ICAgIHVpbnQzMl90IGJsb2NrSGVpZ2h0ID0gVGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9t
QVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CiAKLSAg
ICAvLyBGSVhNRTogImltYWdlQ29weVRleHR1cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BV
VGV4dHVyZS4iCisgICAgaWYgKCFmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuaXNW
YWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoaW1hZ2VDb3B5VGV4dHVy
ZS5taXBMZXZlbCA+PSBmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRv
cigpLm1pcExldmVsQ291bnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456538</attachid>
            <date>2022-04-04 00:23:31 -0700</date>
            <delta_ts>2022-04-07 16:09:16 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>patch.diff</filename>
            <type>text/plain</type>
            <size>17131</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">Y29tbWl0IDkxNzZmZmJjNDE3Y2JkMzljOWM3YTY1OTcwZmY5YWZkOGE5OGI1YzQKQXV0aG9yOiBN
eWxlcyBDLiBNYXhmaWVsZCA8bW1heGZpZWxkQGFwcGxlLmNvbT4KRGF0ZTogICBNb24gQXByIDQg
MDA6MjI6MjcgMjAyMiAtMDcwMAoKICAgIEZpeGluZyBGSVhNRXMKCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViR1BVL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IGE4MjRk
MWM2ZGI1ZC4uY2MxYjcwMjAyMjEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViR1BVL0NoYW5nZUxvZwpAQCAtMSwzICsxLDYwIEBACisyMDIyLTA0
LTA0ICBNeWxlcyBDLiBNYXhmaWVsZCAgPG1tYXhmaWVsZEBhcHBsZS5jb20+CisKKyAgICAgICAg
W1dlYkdQVV0gSW1wbGVtZW50IG1pc3NpbmcgdmFsaWRpdHkgY2hlY2tzCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzg3MjIKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBOb3cgdGhhdCBXZWJHUFUgb2JqZWN0
cyBoYXZlIGEgbm90aW9uIG9mIHZhbGlkaXR5LCB3ZSBjYW4gaW1wbGVtZW50IGFsbCB0aGUKKyAg
ICAgICAgRklYTUVzIGZvciB2YWxpZGl0eSBjaGVja3MuCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
bHNvIGFkZHMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSAidmFsaWQgdG8gdXNlIHdpdGggdGhp
cyIgb3BlcmF0aW9uCisgICAgICAgIGluc2lkZSB0aGUgT2JqZWN0QmFzZSBjbGFzcy4KKworICAg
ICAgICAqIFdlYkdQVS9CdWZmZXIubW06CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlQ3JlYXRl
QnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6QnVmZmVyOjp2YWxpZGF0ZU1hcEFzeW5jIGNvbnN0
KToKKyAgICAgICAgKiBXZWJHUFUvQ29tbWFuZEVuY29kZXIuaDoKKyAgICAgICAgKFdlYkdQVTo6
Q29tbWFuZEVuY29kZXI6Om1ha2VJbnZhbGlkKToKKyAgICAgICAgKiBXZWJHUFUvQ29tbWFuZEVu
Y29kZXIubW06CisgICAgICAgIChXZWJHUFU6OkNvbW1hbmRFbmNvZGVyOjp2YWxpZGF0ZUNvcHlC
dWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVy
KToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6OnZhbGlkYXRlQ2xlYXJCdWZmZXIp
OgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6dmFsaWRhdGVGaW5pc2ggY29uc3Qp
OgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5jb2Rlcjo6ZmluaXNoKToKKyAgICAgICAgKFdl
YkdQVTo6Q29tbWFuZEVuY29kZXI6OnBvcERlYnVnR3JvdXApOgorICAgICAgICAoV2ViR1BVOjp2
YWxpZGF0ZUNvcHlCdWZmZXJUb0J1ZmZlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJHUFU6OnZh
bGlkYXRlQ2xlYXJCdWZmZXIpOiBEZWxldGVkLgorICAgICAgICAqIFdlYkdQVS9Db21wdXRlUGFz
c0VuY29kZXIuaDoKKyAgICAgICAgKFdlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVyOjptYWtlSW52
YWxpZCk6CisgICAgICAgICogV2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5tbToKKyAgICAgICAg
KFdlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVyOjpwb3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKiBX
ZWJHUFUvT2JqZWN0QmFzZS5oOgorICAgICAgICAoV2ViR1BVOjpPYmplY3RCYXNlOjppc1ZhbGlk
VG9Vc2VXaXRoIGNvbnN0KToKKyAgICAgICAgKFdlYkdQVTo6T2JqZWN0QmFzZTo6ZGV2aWNlIGNv
bnN0KToKKyAgICAgICAgKiBXZWJHUFUvUXVldWUuaDoKKyAgICAgICAgKFdlYkdQVTo6UXVldWU6
OmRldmljZSBjb25zdCk6CisgICAgICAgICogV2ViR1BVL1F1ZXVlLm1tOgorICAgICAgICAoV2Vi
R1BVOjpRdWV1ZTo6dmFsaWRhdGVTdWJtaXQgY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpRdWV1
ZTo6c3VibWl0KToKKyAgICAgICAgKFdlYkdQVTo6UXVldWU6OnZhbGlkYXRlV3JpdGVCdWZmZXIg
Y29uc3QpOgorICAgICAgICAqIFdlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVyLmg6CisgICAgICAg
IChXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXI6Om1ha2VJbnZhbGlkKToKKyAgICAgICAgKiBX
ZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6UmVuZGVyQnVu
ZGxlRW5jb2Rlcjo6cG9wRGVidWdHcm91cCk6CisgICAgICAgICogV2ViR1BVL1JlbmRlclBhc3NF
bmNvZGVyLmg6CisgICAgICAgIChXZWJHUFU6OlJlbmRlclBhc3NFbmNvZGVyOjptYWtlSW52YWxp
ZCk6CisgICAgICAgICogV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLm1tOgorICAgICAgICAoV2Vi
R1BVOjpSZW5kZXJQYXNzRW5jb2Rlcjo6cG9wRGVidWdHcm91cCk6CisgICAgICAgICogV2ViR1BV
L1NhbXBsZXIubW06CisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlQ3JlYXRlU2FtcGxlcik6Cisg
ICAgICAgICogV2ViR1BVL1RleHR1cmUubW06CisgICAgICAgIChXZWJHUFU6OkRldmljZTo6dmFs
aWRhdGVDcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVUZXh0
dXJlKToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6dmFsaWRhdGVDcmVhdGVWaWV3IGNvbnN0
KToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6Y3JlYXRlVmlldyk6CisgICAgICAgIChXZWJH
UFU6OlRleHR1cmU6OnZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVyZSk6CisKIDIwMjItMDQtMDMgIE15
bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BV
XSBHaXZlIG9iamVjdHMgYSBub3Rpb24gb2YgaW52YWxpZGl0eQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvQnVmZmVyLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLm1t
CmluZGV4IGQxYmJlMmZjMjVjNi4uYWQ3MTRjY2EzYTJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9CdWZmZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVyLm1t
CkBAIC01MCw3ICs1MCw4IEBAIHN0YXRpYyBib29sIHZhbGlkYXRlRGVzY3JpcHRvcihjb25zdCBE
ZXZpY2UmIGRldmljZSwgY29uc3QgV0dQVUJ1ZmZlckRlc2NyaXB0b3ImCiAKIHN0YXRpYyBib29s
IHZhbGlkYXRlQ3JlYXRlQnVmZmVyKGNvbnN0IERldmljZSYgZGV2aWNlLCBjb25zdCBXR1BVQnVm
ZmVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKLSAgICAvLyBGSVhNRTogInRoaXMgaXMgYSB2
YWxpZCBHUFVEZXZpY2UuIgorICAgIGlmICghZGV2aWNlLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOwogCiAgICAgaWYgKCF2YWxpZGF0ZURlc2NyaXB0b3IoZGV2aWNlLCBkZXNjcmlw
dG9yKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMjA3LDcgKzIwOCwxMCBAQCB2b2lkKiBC
dWZmZXI6OmdldE1hcHBlZFJhbmdlKHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplKQogCiBib29s
IEJ1ZmZlcjo6dmFsaWRhdGVNYXBBc3luYyhXR1BVTWFwTW9kZUZsYWdzIG1vZGUsIHNpemVfdCBv
ZmZzZXQsIHNpemVfdCByYW5nZVNpemUpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6ICJ0aGlzIGlz
IGEgdmFsaWQgR1BVQnVmZmVyLiBUT0RPOiBjaGVjayBkZXN0cm95ZWQgc3RhdGU/IgorICAgIGlm
ICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBGSVhNRTogVGhl
IHNwZWMgc2F5cyAiVE9ETzogY2hlY2sgZGVzdHJveWVkIHN0YXRlPyIKIAogICAgIGlmIChvZmZz
ZXQgJSA4KQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9Db21tYW5kRW5jb2Rlci5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVu
Y29kZXIuaAppbmRleCBjYTI4YWJiNmQ4ZDcuLjQxOTI2NDExMTgyZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9Db21tYW5kRW5jb2Rlci5oCkBAIC03OSw5ICs3OSwxMyBAQCBwcml2YXRlOgogICAgIENv
bW1hbmRFbmNvZGVyKGlkPE1UTENvbW1hbmRCdWZmZXI+LCBEZXZpY2UmKTsKICAgICBDb21tYW5k
RW5jb2RlcihEZXZpY2UmKTsKIAorICAgIGJvb2wgdmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZmZXIo
Y29uc3QgQnVmZmVyJiBzb3VyY2UsIHVpbnQ2NF90IHNvdXJjZU9mZnNldCwgY29uc3QgQnVmZmVy
JiBkZXN0aW5hdGlvbiwgdWludDY0X3QgZGVzdGluYXRpb25PZmZzZXQsIHVpbnQ2NF90IHNpemUp
OworICAgIGJvb2wgdmFsaWRhdGVDbGVhckJ1ZmZlcihjb25zdCBCdWZmZXImLCB1aW50NjRfdCBv
ZmZzZXQsIHVpbnQ2NF90IHNpemUpOwogICAgIGJvb2wgdmFsaWRhdGVGaW5pc2goKSBjb25zdDsK
ICAgICBib29sIHZhbGlkYXRlUG9wRGVidWdHcm91cCgpIGNvbnN0OwogCisgICAgdm9pZCBtYWtl
SW52YWxpZCgpIHsgbV9jb21tYW5kQnVmZmVyID0gbmlsOyB9CisKICAgICB2b2lkIGVuc3VyZUJs
aXRDb21tYW5kRW5jb2RlcigpOwogICAgIHZvaWQgZmluYWxpemVCbGl0Q29tbWFuZEVuY29kZXIo
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0g
Yi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5tbQppbmRleCAzYjVlMjEwNzg1
NTAuLmY4ZjcwODhiOTVmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFu
ZEVuY29kZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0K
QEAgLTk3LDExICs5NywxMyBAQCBSZWZQdHI8UmVuZGVyUGFzc0VuY29kZXI+IENvbW1hbmRFbmNv
ZGVyOjpiZWdpblJlbmRlclBhc3MoY29uc3QgV0dQVVJlbmRlclBhc3NEZQogICAgIHJldHVybiBS
ZW5kZXJQYXNzRW5jb2Rlcjo6Y3JlYXRlKG5pbCwgbV9kZXZpY2UpOwogfQogCi1zdGF0aWMgYm9v
bCB2YWxpZGF0ZUNvcHlCdWZmZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwgdWludDY0
X3Qgc291cmNlT2Zmc2V0LCBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLCB1aW50NjRfdCBkZXN0
aW5hdGlvbk9mZnNldCwgdWludDY0X3Qgc2l6ZSkKK2Jvb2wgQ29tbWFuZEVuY29kZXI6OnZhbGlk
YXRlQ29weUJ1ZmZlclRvQnVmZmVyKGNvbnN0IEJ1ZmZlciYgc291cmNlLCB1aW50NjRfdCBzb3Vy
Y2VPZmZzZXQsIGNvbnN0IEJ1ZmZlciYgZGVzdGluYXRpb24sIHVpbnQ2NF90IGRlc3RpbmF0aW9u
T2Zmc2V0LCB1aW50NjRfdCBzaXplKQogewotICAgIC8vIEZJWE1FOiAic291cmNlIGlzIHZhbGlk
IHRvIHVzZSB3aXRoIHRoaXMuIgorICAgIGlmICghc291cmNlLmlzVmFsaWRUb1VzZVdpdGgoKnRo
aXMpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBGSVhNRTogImRlc3RpbmF0aW9u
IGlzIHZhbGlkIHRvIHVzZSB3aXRoIHRoaXMuIgorICAgIGlmICghZGVzdGluYXRpb24uaXNWYWxp
ZFRvVXNlV2l0aCgqdGhpcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghKHNv
dXJjZS51c2FnZSgpICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlTcmMpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CkBAIC0xNjAsNyArMTYyLDggQEAgc3RhdGljIGJvb2wgdmFsaWRhdGVJbWFnZUNvcHlC
dWZmZXIoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgaW1hZ2VDb3B5QnVmZmVyKQogewogICAg
IC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlk
YXRpbmctZ3B1aW1hZ2Vjb3B5YnVmZmVyCiAKLSAgICAvLyBGSVhNRTogImltYWdlQ29weUJ1ZmZl
ci5idWZmZXIgbXVzdCBiZSBhIHZhbGlkIEdQVUJ1ZmZlci4iCisgICAgaWYgKCFmcm9tQVBJKGlt
YWdlQ29weUJ1ZmZlci5idWZmZXIpLmlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwog
CiAgICAgaWYgKGltYWdlQ29weUJ1ZmZlci5sYXlvdXQuYnl0ZXNQZXJSb3cgJSAyNTYpCiAgICAg
ICAgIHJldHVybiBmYWxzZTsKQEAgLTY3NCw5ICs2NzcsMTAgQEAgdm9pZCBDb21tYW5kRW5jb2Rl
cjo6Y29weVRleHR1cmVUb1RleHR1cmUoY29uc3QgV0dQVUltYWdlQ29weVRleHR1cmUmIHNvdXJj
ZSwgY28KICAgICB9CiB9CiAKLXN0YXRpYyBib29sIHZhbGlkYXRlQ2xlYXJCdWZmZXIoY29uc3Qg
QnVmZmVyJiBidWZmZXIsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKK2Jvb2wgQ29t
bWFuZEVuY29kZXI6OnZhbGlkYXRlQ2xlYXJCdWZmZXIoY29uc3QgQnVmZmVyJiBidWZmZXIsIHVp
bnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogImJ1ZmZlciBp
cyB2YWxpZCB0byB1c2Ugd2l0aCB0aGlzLiIKKyAgICBpZiAoIWJ1ZmZlci5pc1ZhbGlkVG9Vc2VX
aXRoKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKCEoYnVmZmVyLnVz
YWdlKCkgJiBXR1BVQnVmZmVyVXNhZ2VfQ29weURzdCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
QEAgLTcxOCw3ICs3MjIsOCBAQCB2b2lkIENvbW1hbmRFbmNvZGVyOjpjbGVhckJ1ZmZlcihjb25z
dCBCdWZmZXImIGJ1ZmZlciwgdWludDY0X3Qgb2Zmc2V0LCB1aW50NjRfdAogCiBib29sIENvbW1h
bmRFbmNvZGVyOjp2YWxpZGF0ZUZpbmlzaCgpIGNvbnN0CiB7Ci0gICAgLy8gRklYTUU6ICJ0aGlz
IG11c3QgYmUgdmFsaWQuIgorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAobV9zdGF0ZSAhPSBFbmNvZGVyU3RhdGU6Ok9wZW4pCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTc0Myw5ICs3NDgsNyBAQCBSZWZQdHI8Q29tbWFuZEJ1ZmZlcj4gQ29t
bWFuZEVuY29kZXI6OmZpbmlzaChjb25zdCBXR1BVQ29tbWFuZEJ1ZmZlckRlc2NyaXB0b3ImCiAK
ICAgICBpZiAodmFsaWRhdGlvbkZhaWxlZCkgewogICAgICAgICBtX2RldmljZS0+Z2VuZXJhdGVB
VmFsaWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIl9zKTsKLQotICAgICAgICAvLyBG
SVhNRTogIlJldHVybiBhIG5ldyBpbnZhbGlkIEdQVUNvbW1hbmRCdWZmZXIuIgotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIENvbW1hbmRCdWZmZXI6OmNyZWF0ZUludmFs
aWQobV9kZXZpY2UpOwogICAgIH0KIAogICAgIGZpbmFsaXplQmxpdENvbW1hbmRFbmNvZGVyKCk7
CkBAIC03ODgsNyArNzkxLDcgQEAgdm9pZCBDb21tYW5kRW5jb2Rlcjo6cG9wRGVidWdHcm91cCgp
CiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghdmFsaWRhdGVQb3BEZWJ1Z0dyb3VwKCkpIHsK
LSAgICAgICAgLy8gRklYTUU6ICJtYWtlIHRoaXMgaW52YWxpZCwgYW5kIHN0b3AuIgorICAgICAg
ICBtYWtlSW52YWxpZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGFzc0VuY29kZXIuaCBiL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5oCmluZGV4IDk2YWM4N2E4MDNhMS4uNzU1ZTQ0YmIx
M2E5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGFzc0VuY29kZXIu
aAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGFzc0VuY29kZXIuaApAQCAtNzYs
NyArNzYsOSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB2YWxpZGF0ZVBvcERlYnVnR3JvdXAoKSBj
b25zdDsKIAotICAgIGNvbnN0IGlkPE1UTENvbXB1dGVDb21tYW5kRW5jb2Rlcj4gbV9jb21wdXRl
Q29tbWFuZEVuY29kZXIgeyBuaWwgfTsKKyAgICB2b2lkIG1ha2VJbnZhbGlkKCkgeyBtX2NvbXB1
dGVDb21tYW5kRW5jb2RlciA9IG5pbDsgfQorCisgICAgaWQ8TVRMQ29tcHV0ZUNvbW1hbmRFbmNv
ZGVyPiBtX2NvbXB1dGVDb21tYW5kRW5jb2RlciB7IG5pbCB9OwogCiAgICAgdWludDY0X3QgbV9k
ZWJ1Z0dyb3VwU3RhY2tTaXplIHsgMCB9OwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1
dGVQYXNzRW5jb2Rlci5tbQppbmRleCAxNmYwMGI5NGMyNDEuLmQwMjBkYWExOTNjYiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVyLm1tCisrKyBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5tbQpAQCAtMTAwLDcgKzEwMCw3
IEBAIHZvaWQgQ29tcHV0ZVBhc3NFbmNvZGVyOjpwb3BEZWJ1Z0dyb3VwKCkKICAgICAgICAgcmV0
dXJuOwogCiAgICAgaWYgKCF2YWxpZGF0ZVBvcERlYnVnR3JvdXAoKSkgewotICAgICAgICAvLyBG
SVhNRTogIm1ha2UgdGhpcyBpbnZhbGlkLCBhbmQgc3RvcC4iCisgICAgICAgIG1ha2VJbnZhbGlk
KCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL09iamVjdEJhc2UuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL09iamVjdEJhc2UuaApp
bmRleCAxNzJmMTAwNTY1ZDQuLjZmMGE4ZWYyZjM1ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQ
VS9XZWJHUFUvT2JqZWN0QmFzZS5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL09iamVjdEJh
c2UuaApAQCAtMjUsMjAgKzI1LDQ2IEBACiAKICNwcmFnbWEgb25jZQogCisjaW1wb3J0ICJEZXZp
Y2UuaCIKICNpbXBvcnQgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW1wb3J0IDx3dGYvUmVmLmg+CiAj
aW1wb3J0IDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KIAogbmFtZXNwYWNlIFdlYkdQVSB7
CiAKLWNsYXNzIERldmljZTsKLQogLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8j
Z3B1b2JqZWN0YmFzZQogY2xhc3MgT2JqZWN0QmFzZSA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxPYmplY3RCYXNlPiB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6
CiAgICAgfk9iamVjdEJhc2UoKTsKIAorICAgIC8vIFdlIGRvbid0IGRlYWwgd2l0aCBsYWJlbHMg
aGVyZSwgYmVjYXVzZSBldmVyeSBvYmplY3QgZG9lcyBhIGRpZmZlcmVudCB0aGluZyB3aXRoIHRo
ZW0sCisgICAgLy8gYW5kIHRoZXJlIGFyZSBubyBjb21tb24gYWxnb3JpdGhtcyB3aGljaCBpbnRl
cmFjdCB3aXRoIHRoZW0uCisKKyAgICAvLyBFYWNoIG9iamVjdCBoYXMgaXRzIG93biBpbXBsZW1l
bnRhdGlvbiBvZiBpc1ZhbGlkKCkuCisgICAgLy8gVGhpcyBpcyBnb29kIC0gZGlmZmVyZW50IG9i
amVjdHMgY2FuIHJlcHJlc2VudCB2YWxpZGl0eSBpbiBkaWZmZXJlbnQgd2F5cy4KKyAgICAvLyBI
b3dldmVyLCBpdCBtZWFucyB0aGF0IGlmIHdlIHdhbnQgdG8gYXNrIHdoZXRoZXIgb3Igbm90IGB0
aGlzYCBpcyB2YWxpZAorICAgIC8vIGhlcmUgaW4gdGhlIGJhc2UgY2xhc3MsIHdlJ2QgbmVlZCBh
IHZpcnR1YWwgZnVuY3Rpb24uIFJhdGhlciB0aGFuIGFkZAorICAgIC8vIGEgdnRhYmxlIHBvaW50
ZXIgdG8gZXZlcnkgb2JqZWN0LCB3ZSBqdXN0IHRlbXBsYXRpemUgdGhpcyBmdW5jdGlvbi4KKyAg
ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KKyAgICBib29sIGlzVmFsaWRUb1VzZVdpdGgoY29uc3Qg
VCYgdGFyZ2V0T2JqZWN0KSBjb25zdAorICAgIHsKKyAgICAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIu
Z2l0aHViLmlvL2dwdXdlYi8jYWJzdHJhY3Qtb3BkZWYtdmFsaWQtdG8tdXNlLXdpdGgKKworICAg
ICAgICBpZiAoIXRhcmdldE9iamVjdC5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgaWYgKCFtX2RldmljZS0+aXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIGlmIChtX2RldmljZS5wdHIoKSAhPSAmdGFyZ2V0T2JqZWN0
LmRldmljZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIGNvbnN0IERldmljZSYgZGV2aWNlKCkgY29uc3QgeyByZXR1cm4g
bV9kZXZpY2U7IH0KKwogcHJvdGVjdGVkOgogICAgIE9iamVjdEJhc2UoRGV2aWNlJik7CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1F1ZXVlLmggYi9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9RdWV1ZS5oCmluZGV4IDU1OTI4OTk4MTI5YS4uNDkwNWYyMmE5ZjEzIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9RdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L1F1ZXVlLmgKQEAgLTcwLDExICs3MCwxMyBAQCBwdWJsaWM6CiAKICAgICBpZDxNVExDb21tYW5k
UXVldWU+IGNvbW1hbmRRdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWFuZFF1ZXVlOyB9CiAK
KyAgICBjb25zdCBEZXZpY2UmIGRldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNlOyB9CisK
IHByaXZhdGU6CiAgICAgUXVldWUoaWQ8TVRMQ29tbWFuZFF1ZXVlPiwgRGV2aWNlJik7CiAgICAg
UXVldWUoRGV2aWNlJik7CiAKLSAgICBib29sIHZhbGlkYXRlU3VibWl0KCkgY29uc3Q7CisgICAg
Ym9vbCB2YWxpZGF0ZVN1Ym1pdChjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxj
b25zdCBDb21tYW5kQnVmZmVyPj4mKSBjb25zdDsKICAgICBib29sIHZhbGlkYXRlV3JpdGVCdWZm
ZXIoY29uc3QgQnVmZmVyJiwgdWludDY0X3QgYnVmZmVyT2Zmc2V0LCBzaXplX3QpIGNvbnN0Owog
CiAgICAgdm9pZCBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1F1ZXVlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUXVldWUubW0K
aW5kZXggOTk3ZjE1NDU5ZTk5Li5jMGRlMzhkOTE4N2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJH
UFUvV2ViR1BVL1F1ZXVlLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1F1ZXVlLm1tCkBA
IC0xMDEsOSArMTAxLDEyIEBAIHZvaWQgUXVldWU6Om9uU3VibWl0dGVkV29ya0RvbmUodWludDY0
X3QsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoV0dQVVF1ZXVlV29ya0RvCiAgICAgY2FsbGJhY2tz
LmFwcGVuZChXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKLWJvb2wgUXVldWU6OnZhbGlkYXRlU3Vi
bWl0KCkgY29uc3QKK2Jvb2wgUXVldWU6OnZhbGlkYXRlU3VibWl0KGNvbnN0IFZlY3RvcjxzdGQ6
OnJlZmVyZW5jZV93cmFwcGVyPGNvbnN0IENvbW1hbmRCdWZmZXI+PiYgY29tbWFuZHMpIGNvbnN0
CiB7Ci0gICAgLy8gRklYTUU6ICJFdmVyeSB7e0dQVUNvbW1hbmRCdWZmZXJ9fSBpbiB8Y29tbWFu
ZEJ1ZmZlcnN8IGlzIFskdmFsaWQgdG8gdXNlIHdpdGgkXSB8dGhpc3wuIgorICAgIGZvciAoYXV0
byBjb21tYW5kIDogY29tbWFuZHMpIHsKKyAgICAgICAgaWYgKCFjb21tYW5kLmdldCgpLmlzVmFs
aWRUb1VzZVdpdGgoKnRoaXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAog
ICAgIC8vIEZJWE1FOiAiRXZlcnkgR1BVQnVmZmVyIHJlZmVyZW5jZWQgaW4gYW55IGVsZW1lbnQg
b2YgY29tbWFuZEJ1ZmZlcnMgaXMgaW4gdGhlICJ1bm1hcHBlZCIgYnVmZmVyIHN0YXRlLiIKIApA
QCAtMTM0LDcgKzEzNyw3IEBAIHZvaWQgUXVldWU6OnN1Ym1pdChWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBDb21tYW5kQnVmZmVyPj4mJiBjb21tYW5kCiB7CiAgICAgLy8gaHR0
cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi8jZG9tLWdwdXF1ZXVlLXN1Ym1pdAogCi0gICAg
aWYgKCF2YWxpZGF0ZVN1Ym1pdCgpKSB7CisgICAgaWYgKCF2YWxpZGF0ZVN1Ym1pdChjb21tYW5k
cykpIHsKICAgICAgICAgbV9kZXZpY2UuZ2VuZXJhdGVBVmFsaWRhdGlvbkVycm9yKCJWYWxpZGF0
aW9uIGZhaWx1cmUuIl9zKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NSw3ICsxNTgs
OCBAQCBzdGF0aWMgYm9vbCB2YWxpZGF0ZVdyaXRlQnVmZmVySW5pdGlhbChzaXplX3Qgc2l6ZSkK
IAogYm9vbCBRdWV1ZTo6dmFsaWRhdGVXcml0ZUJ1ZmZlcihjb25zdCBCdWZmZXImIGJ1ZmZlciwg
dWludDY0X3QgYnVmZmVyT2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogImJ1ZmZlciBpcyB2YWxpZCB0byB1c2Ugd2l0aCB0aGlzLiIKKyAgICBpZiAoIWJ1ZmZlci5p
c1ZhbGlkVG9Vc2VXaXRoKCp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYg
KGJ1ZmZlci5zdGF0ZSgpICE9IEJ1ZmZlcjo6U3RhdGU6OlVubWFwcGVkKQogICAgICAgICByZXR1
cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVF
bmNvZGVyLmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVyLmgKaW5k
ZXggOWQ1NDVkMGU2ZTZiLi5hMDhmMGM3ZDYzZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL1JlbmRlckJ1bmRsZUVuY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9S
ZW5kZXJCdW5kbGVFbmNvZGVyLmgKQEAgLTc5LDcgKzc5LDkgQEAgcHJpdmF0ZToKIAogICAgIGJv
b2wgdmFsaWRhdGVQb3BEZWJ1Z0dyb3VwKCkgY29uc3Q7CiAKLSAgICBjb25zdCBpZDxNVExJbmRp
cmVjdENvbW1hbmRCdWZmZXI+IG1faW5kaXJlY3RDb21tYW5kQnVmZmVyIHsgbmlsIH07CisgICAg
dm9pZCBtYWtlSW52YWxpZCgpIHsgbV9pbmRpcmVjdENvbW1hbmRCdWZmZXIgPSBuaWw7IH0KKwor
ICAgIGlkPE1UTEluZGlyZWN0Q29tbWFuZEJ1ZmZlcj4gbV9pbmRpcmVjdENvbW1hbmRCdWZmZXIg
eyBuaWwgfTsKIAogICAgIHVpbnQ2NF90IG1fZGVidWdHcm91cFN0YWNrU2l6ZSB7IDAgfTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVyLm1t
IGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5tbQppbmRleCA1NDQ5
NmNmYmFjODUuLjZiZTQ3ODg3ZDExMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUv
UmVuZGVyQnVuZGxlRW5jb2Rlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJC
dW5kbGVFbmNvZGVyLm1tCkBAIC0xMTUsNyArMTE1LDcgQEAgdm9pZCBSZW5kZXJCdW5kbGVFbmNv
ZGVyOjpwb3BEZWJ1Z0dyb3VwKCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF2YWxpZGF0
ZVBvcERlYnVnR3JvdXAoKSkgewotICAgICAgICAvLyBGSVhNRTogIm1ha2UgdGhpcyBpbnZhbGlk
LCBhbmQgc3RvcC4iCisgICAgICAgIG1ha2VJbnZhbGlkKCk7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVy
LmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5oCmluZGV4IDE0YThi
Yjg4MmI5NC4uM2M4OTQ1NzZjZjZhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9S
ZW5kZXJQYXNzRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NF
bmNvZGVyLmgKQEAgLTg5LDcgKzg5LDkgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdmFsaWRhdGVQ
b3BEZWJ1Z0dyb3VwKCkgY29uc3Q7CiAKLSAgICBjb25zdCBpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gbV9yZW5kZXJDb21tYW5kRW5jb2RlciB7IG5pbCB9OworICAgIHZvaWQgbWFrZUludmFs
aWQoKSB7IG1fcmVuZGVyQ29tbWFuZEVuY29kZXIgPSBuaWw7IH0KKworICAgIGlkPE1UTFJlbmRl
ckNvbW1hbmRFbmNvZGVyPiBtX3JlbmRlckNvbW1hbmRFbmNvZGVyIHsgbmlsIH07CiAKICAgICB1
aW50NjRfdCBtX2RlYnVnR3JvdXBTdGFja1NpemUgeyAwIH07CiB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyUGFzc0VuY29kZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5tbQppbmRleCAzYjIyNGE5YmEwMTUuLmRkNzJhM2JmNjJh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyUGFzc0VuY29kZXIubW0K
KysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyUGFzc0VuY29kZXIubW0KQEAgLTEzNCw3
ICsxMzQsNyBAQCB2b2lkIFJlbmRlclBhc3NFbmNvZGVyOjpwb3BEZWJ1Z0dyb3VwKCkKICAgICAg
ICAgcmV0dXJuOwogCiAgICAgaWYgKCF2YWxpZGF0ZVBvcERlYnVnR3JvdXAoKSkgewotICAgICAg
ICAvLyBGSVhNRTogIm1ha2UgdGhpcyBpbnZhbGlkLCBhbmQgc3RvcC4iCisgICAgICAgIG1ha2VJ
bnZhbGlkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL1NhbXBsZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1wbGVyLm1t
CmluZGV4IDk0YjYyNTJjNDNjMy4uMjFmYTA3NDM3NWM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
R1BVL1dlYkdQVS9TYW1wbGVyLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIu
bW0KQEAgLTMyLDExICszMiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAotc3RhdGljIGJv
b2wgdmFsaWRhdGVDcmVhdGVTYW1wbGVyKERldmljZSYsIGNvbnN0IFdHUFVTYW1wbGVyRGVzY3Jp
cHRvciYgZGVzY3JpcHRvcikKK3N0YXRpYyBib29sIHZhbGlkYXRlQ3JlYXRlU2FtcGxlcihEZXZp
Y2UmIGRldmljZSwgY29uc3QgV0dQVVNhbXBsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewog
ICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZh
bGlkYXRpbmctZ3B1c2FtcGxlcmRlc2NyaXB0b3IKIAotICAgIC8vIEZJWE1FOiAiZGV2aWNlIGlz
IHZhbGlkLiIKKyAgICBpZiAoIWRldmljZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKIAogICAgIGlmIChzdGQ6OmlzbmFuKGRlc2NyaXB0b3IubG9kTWluQ2xhbXApIHx8IGRlc2Ny
aXB0b3IubG9kTWluQ2xhbXAgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUv
VGV4dHVyZS5tbQppbmRleCAzZGM1M2ZjNzhhY2IuLmZkZGFhMTFkOTljOCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQ
VS9UZXh0dXJlLm1tCkBAIC0xMjI4LDcgKzEyMjgsOCBAQCBzdGF0aWMgYm9vbCB0ZXh0dXJlVmll
d0Zvcm1hdENvbXBhdGlibGUoV0dQVVRleHR1cmVGb3JtYXQgZm9ybWF0MSwgV0dQVVRleHR1cmVG
bwogCiBib29sIERldmljZTo6dmFsaWRhdGVDcmVhdGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJl
RGVzY3JpcHRvciYgZGVzY3JpcHRvciwgY29uc3QgVmVjdG9yPFdHUFVUZXh0dXJlRm9ybWF0PiYg
dmlld0Zvcm1hdHMpCiB7Ci0gICAgLy8gRklYTUU6ICJ0aGlzIG11c3QgYmUgYSB2YWxpZCBHUFVE
ZXZpY2UuIgorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAg
ICBpZiAoIWRlc2NyaXB0b3IudXNhZ2UpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5ODcs
OCArMTk4OCw3IEBAIFJlZlB0cjxUZXh0dXJlPiBEZXZpY2U6OmNyZWF0ZVRleHR1cmUoY29uc3Qg
V0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogCiAgICAgaWYgKCF2YWxpZGF0ZUNy
ZWF0ZVRleHR1cmUoZGVzY3JpcHRvciwgdmlld0Zvcm1hdHMpKSB7CiAgICAgICAgIGdlbmVyYXRl
QVZhbGlkYXRpb25FcnJvcigiVmFsaWRhdGlvbiBmYWlsdXJlLiJfcyk7Ci0gICAgICAgIC8vIEZJ
WE1FOiAiUmV0dXJuIGEgbmV3IGludmFsaWQgR1BVVGV4dHVyZS4iCi0gICAgICAgIHJldHVybiBu
dWxscHRyOworICAgICAgICByZXR1cm4gVGV4dHVyZTo6Y3JlYXRlSW52YWxpZCgqdGhpcyk7CiAg
ICAgfQogCiAgICAgTVRMVGV4dHVyZURlc2NyaXB0b3IgKnRleHR1cmVEZXNjcmlwdG9yID0gW01U
TFRleHR1cmVEZXNjcmlwdG9yIG5ld107CkBAIC0yMTQ2LDcgKzIxNDYsOCBAQCB1aW50MzJfdCBU
ZXh0dXJlOjphcnJheUxheWVyQ291bnQoKSBjb25zdAogCiBib29sIFRleHR1cmU6OnZhbGlkYXRl
Q3JlYXRlVmlldyhjb25zdCBXR1BVVGV4dHVyZVZpZXdEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKSBj
b25zdAogewotICAgIC8vIEZJWE1FOiAidGhpcyBpcyB2YWxpZCIKKyAgICBpZiAoIWlzVmFsaWQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgc3dpdGNoIChkZXNjcmlwdG9yLmFzcGVj
dCkgewogICAgIGNhc2UgV0dQVVRleHR1cmVBc3BlY3RfQWxsOgpAQCAtMjI3Myw5ICsyMjc0LDcg
QEAgUmVmUHRyPFRleHR1cmVWaWV3PiBUZXh0dXJlOjpjcmVhdGVWaWV3KGNvbnN0IFdHUFVUZXh0
dXJlVmlld0Rlc2NyaXB0b3ImIGlucHV0RGUKIAogICAgIGlmICghdmFsaWRhdGVDcmVhdGVWaWV3
KGRlc2NyaXB0b3IpKSB7CiAgICAgICAgIG1fZGV2aWNlLT5nZW5lcmF0ZUFWYWxpZGF0aW9uRXJy
b3IoIlZhbGlkYXRpb24gZmFpbHVyZS4iX3MpOwotCi0gICAgICAgIC8vIEZJWE1FOiAiUmV0dXJu
IGEgbmV3IGludmFsaWQgR1BVVGV4dHVyZVZpZXcuIgotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KyAgICAgICAgcmV0dXJuIFRleHR1cmVWaWV3OjpjcmVhdGVJbnZhbGlkKG1fZGV2aWNlKTsKICAg
ICB9CiAKICAgICBzdGQ6Om9wdGlvbmFsPE1UTFBpeGVsRm9ybWF0PiBwaXhlbEZvcm1hdDsKQEAg
LTI0MzUsNyArMjQzNCw4IEBAIGJvb2wgVGV4dHVyZTo6dmFsaWRhdGVJbWFnZUNvcHlUZXh0dXJl
KGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBpbWFnZUNvcHlUZXh0CiAKICAgICB1aW50MzJf
dCBibG9ja0hlaWdodCA9IFRleHR1cmU6OnRleGVsQmxvY2tIZWlnaHQoZnJvbUFQSShpbWFnZUNv
cHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5mb3JtYXQpOwogCi0gICAgLy8gRklYTUU6
ICJpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUgbXVzdCBiZSBhIHZhbGlkIEdQVVRleHR1cmUuIgor
ICAgIGlmICghZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGltYWdlQ29weVRleHR1cmUubWlwTGV2ZWwg
Pj0gZnJvbUFQSShpbWFnZUNvcHlUZXh0dXJlLnRleHR1cmUpLmRlc2NyaXB0b3IoKS5taXBMZXZl
bENvdW50KQogICAgICAgICByZXR1cm4gZmFsc2U7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>456981</attachid>
            <date>2022-04-07 16:09:17 -0700</date>
            <delta_ts>2022-04-08 20:16:23 -0700</delta_ts>
            <desc>Rebased</desc>
            <filename>bug-238722-20220407160917.patch</filename>
            <type>text/plain</type>
            <size>16431</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNTc0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IGVkY2MyNjRmODFjMjMzZDQ3
MzlhNmVhNGViNzk5M2ZlYTVlMjNhZGMuLjI0MTMxNTQwM2JhNzgyZTQzNzJmMTQ0NzJlZjkwMTcw
MDMyNzJlOWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMjItMDQtMDcgIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBJbXBs
ZW1lbnQgbWlzc2luZyB2YWxpZGl0eSBjaGVja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODcyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IFdlYkdQVSBvYmplY3RzIGhhdmUgYSBub3Rp
b24gb2YgdmFsaWRpdHksIHdlIGNhbiBpbXBsZW1lbnQgYWxsIHRoZQorICAgICAgICBGSVhNRXMg
Zm9yIHZhbGlkaXR5IGNoZWNrcy4KKworICAgICAgICAqIFdlYkdQVS9CdWZmZXIubW06CisgICAg
ICAgIChXZWJHUFU6OnZhbGlkYXRlQ3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6QnVm
ZmVyOjp2YWxpZGF0ZU1hcEFzeW5jIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUvQ29tbWFuZEVu
Y29kZXIuaDoKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6Om1ha2VJbnZhbGlkKToK
KyAgICAgICAgKiBXZWJHUFUvQ29tbWFuZEVuY29kZXIubW06CisgICAgICAgIChXZWJHUFU6OkNv
bW1hbmRFbmNvZGVyOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChXZWJH
UFU6OnZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVu
Y29kZXI6OnZhbGlkYXRlQ2xlYXJCdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5j
b2Rlcjo6dmFsaWRhdGVGaW5pc2ggY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5j
b2Rlcjo6ZmluaXNoKToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6OnBvcERlYnVn
R3JvdXApOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb0J1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlQ2xlYXJCdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYkdQVS9Db21wdXRlUGFzc0VuY29kZXIuaDoKKyAgICAgICAgKFdlYkdQVTo6
Q29tcHV0ZVBhc3NFbmNvZGVyOjptYWtlSW52YWxpZCk6CisgICAgICAgICogV2ViR1BVL0NvbXB1
dGVQYXNzRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVyOjpw
b3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKiBXZWJHUFUvT2JqZWN0QmFzZS5oOgorICAgICAgICAo
V2ViR1BVOjpPYmplY3RCYXNlOjppc1ZhbGlkVG9Vc2VXaXRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkdQVTo6T2JqZWN0QmFzZTo6ZGV2aWNlIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUvUXVldWUu
aDoKKyAgICAgICAgKFdlYkdQVTo6UXVldWU6OmRldmljZSBjb25zdCk6CisgICAgICAgICogV2Vi
R1BVL1F1ZXVlLm1tOgorICAgICAgICAoV2ViR1BVOjpRdWV1ZTo6dmFsaWRhdGVTdWJtaXQgY29u
c3QpOgorICAgICAgICAoV2ViR1BVOjpRdWV1ZTo6c3VibWl0KToKKyAgICAgICAgKFdlYkdQVTo6
UXVldWU6OnZhbGlkYXRlV3JpdGVCdWZmZXIgY29uc3QpOgorICAgICAgICAqIFdlYkdQVS9SZW5k
ZXJCdW5kbGVFbmNvZGVyLmg6CisgICAgICAgIChXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXI6
Om1ha2VJbnZhbGlkKToKKyAgICAgICAgKiBXZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5tbToK
KyAgICAgICAgKFdlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2Rlcjo6cG9wRGVidWdHcm91cCk6Cisg
ICAgICAgICogV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLmg6CisgICAgICAgIChXZWJHUFU6OlJl
bmRlclBhc3NFbmNvZGVyOjptYWtlSW52YWxpZCk6CisgICAgICAgICogV2ViR1BVL1JlbmRlclBh
c3NFbmNvZGVyLm1tOgorICAgICAgICAoV2ViR1BVOjpSZW5kZXJQYXNzRW5jb2Rlcjo6cG9wRGVi
dWdHcm91cCk6CisgICAgICAgICogV2ViR1BVL1NhbXBsZXIubW06CisgICAgICAgIChXZWJHUFU6
OnZhbGlkYXRlQ3JlYXRlU2FtcGxlcik6CisgICAgICAgICogV2ViR1BVL1RleHR1cmUubW06Cisg
ICAgICAgIChXZWJHUFU6OkRldmljZTo6dmFsaWRhdGVDcmVhdGVUZXh0dXJlKToKKyAgICAgICAg
KFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVy
ZTo6dmFsaWRhdGVDcmVhdGVWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6
Y3JlYXRlVmlldyk6CisgICAgICAgIChXZWJHUFU6OlRleHR1cmU6OnZhbGlkYXRlSW1hZ2VDb3B5
VGV4dHVyZSk6CisKIDIwMjItMDQtMDcgIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBBZGQgc3VwcG9ydCBmb3IgdGhlICJpcyB2YWxp
ZCB0byB1c2Ugd2l0aCIgb3BlcmF0aW9uIHRvIFdlYkdQVSBvYmplY3RzCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZm
ZXIubW0KaW5kZXggZThlM2FhOThmNzYyMWJhNGJkOTUxYjBlMWNmNTM4Y2RmNWMxZGIwZC4uNjhi
MTMxYTE1OGNhYTdlYWM3ZGYyNGI5ZDIyYWFjMTM1M2FlNjZhNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvQnVmZmVyLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZl
ci5tbQpAQCAtNTAsNyArNTAsOCBAQCBzdGF0aWMgYm9vbCB2YWxpZGF0ZURlc2NyaXB0b3IoY29u
c3QgRGV2aWNlJiBkZXZpY2UsIGNvbnN0IFdHUFVCdWZmZXJEZXNjcmlwdG9yJgogCiBzdGF0aWMg
Ym9vbCB2YWxpZGF0ZUNyZWF0ZUJ1ZmZlcihjb25zdCBEZXZpY2UmIGRldmljZSwgY29uc3QgV0dQ
VUJ1ZmZlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCiB7Ci0gICAgLy8gRklYTUU6ICJ0aGlzIGlz
IGEgdmFsaWQgR1BVRGV2aWNlLiIKKyAgICBpZiAoIWRldmljZS5pc1ZhbGlkKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKIAogICAgIGlmICghdmFsaWRhdGVEZXNjcmlwdG9yKGRldmljZSwgZGVz
Y3JpcHRvcikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTIwNyw3ICsyMDgsMTAgQEAgdm9p
ZCogQnVmZmVyOjpnZXRNYXBwZWRSYW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIAog
Ym9vbCBCdWZmZXI6OnZhbGlkYXRlTWFwQXN5bmMoV0dQVU1hcE1vZGVGbGFncyBtb2RlLCBzaXpl
X3Qgb2Zmc2V0LCBzaXplX3QgcmFuZ2VTaXplKSBjb25zdAogewotICAgIC8vIEZJWE1FOiAidGhp
cyBpcyBhIHZhbGlkIEdQVUJ1ZmZlci4gVE9ETzogY2hlY2sgZGVzdHJveWVkIHN0YXRlPyIKKyAg
ICBpZiAoIWlzVmFsaWQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6
IFRoZSBzcGVjIHNheXMgIlRPRE86IGNoZWNrIGRlc3Ryb3llZCBzdGF0ZT8iCiAKICAgICBpZiAo
b2Zmc2V0ICUgOCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1h
bmRFbmNvZGVyLmgKaW5kZXggMjhhNGNhMTUzYjk0OTNlMjA2M2IyMmQzMzJlZDVkMTc5M2M1YTRm
Ni4uOWEzZTgzNThkZWE4MTAzOGYyYmFhMmVjM2Q0OTM3ZDBhYWNiNzQxOSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9Db21tYW5kRW5jb2Rlci5oCkBAIC04MSw5ICs4MSwxMyBAQCBwcml2YXRlOgogICAg
IENvbW1hbmRFbmNvZGVyKGlkPE1UTENvbW1hbmRCdWZmZXI+LCBEZXZpY2UmKTsKICAgICBDb21t
YW5kRW5jb2RlcihEZXZpY2UmKTsKIAorICAgIGJvb2wgdmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZm
ZXIoY29uc3QgQnVmZmVyJiBzb3VyY2UsIHVpbnQ2NF90IHNvdXJjZU9mZnNldCwgY29uc3QgQnVm
ZmVyJiBkZXN0aW5hdGlvbiwgdWludDY0X3QgZGVzdGluYXRpb25PZmZzZXQsIHVpbnQ2NF90IHNp
emUpOworICAgIGJvb2wgdmFsaWRhdGVDbGVhckJ1ZmZlcihjb25zdCBCdWZmZXImLCB1aW50NjRf
dCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpOwogICAgIGJvb2wgdmFsaWRhdGVGaW5pc2goKSBjb25z
dDsKICAgICBib29sIHZhbGlkYXRlUG9wRGVidWdHcm91cCgpIGNvbnN0OwogCisgICAgdm9pZCBt
YWtlSW52YWxpZCgpIHsgbV9jb21tYW5kQnVmZmVyID0gbmlsOyB9CisKICAgICB2b2lkIGVuc3Vy
ZUJsaXRDb21tYW5kRW5jb2RlcigpOwogICAgIHZvaWQgZmluYWxpemVCbGl0Q29tbWFuZEVuY29k
ZXIoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIu
bW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5tbQppbmRleCBlMTFjZWM0
ZDZlMGFiNjg3MjBmMGUyZGViMTA1ZTc1ZTYzODdlNmFjLi43MmViZjM3MWQyNjNmYWM3MWU1MDYw
YTYyNGVlZmE0ZWMyYzBkMTFiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21t
YW5kRW5jb2Rlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5t
bQpAQCAtMzEsNiArMzEsNyBAQAogI2ltcG9ydCAiQ29tbWFuZEJ1ZmZlci5oIgogI2ltcG9ydCAi
Q29tcHV0ZVBhc3NFbmNvZGVyLmgiCiAjaW1wb3J0ICJEZXZpY2UuaCIKKyNpbXBvcnQgIklzVmFs
aWRUb1VzZVdpdGguaCIKICNpbXBvcnQgIlF1ZXJ5U2V0LmgiCiAjaW1wb3J0ICJSZW5kZXJQYXNz
RW5jb2Rlci5oIgogI2ltcG9ydCAiVGV4dHVyZS5oIgpAQCAtOTcsMTEgKzk4LDEzIEBAIFJlZlB0
cjxSZW5kZXJQYXNzRW5jb2Rlcj4gQ29tbWFuZEVuY29kZXI6OmJlZ2luUmVuZGVyUGFzcyhjb25z
dCBXR1BVUmVuZGVyUGFzc0RlCiAgICAgcmV0dXJuIFJlbmRlclBhc3NFbmNvZGVyOjpjcmVhdGUo
bmlsLCBtX2RldmljZSk7CiB9CiAKLXN0YXRpYyBib29sIHZhbGlkYXRlQ29weUJ1ZmZlclRvQnVm
ZmVyKGNvbnN0IEJ1ZmZlciYgc291cmNlLCB1aW50NjRfdCBzb3VyY2VPZmZzZXQsIGNvbnN0IEJ1
ZmZlciYgZGVzdGluYXRpb24sIHVpbnQ2NF90IGRlc3RpbmF0aW9uT2Zmc2V0LCB1aW50NjRfdCBz
aXplKQorYm9vbCBDb21tYW5kRW5jb2Rlcjo6dmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZmZXIoY29u
c3QgQnVmZmVyJiBzb3VyY2UsIHVpbnQ2NF90IHNvdXJjZU9mZnNldCwgY29uc3QgQnVmZmVyJiBk
ZXN0aW5hdGlvbiwgdWludDY0X3QgZGVzdGluYXRpb25PZmZzZXQsIHVpbnQ2NF90IHNpemUpCiB7
Ci0gICAgLy8gRklYTUU6ICJzb3VyY2UgaXMgdmFsaWQgdG8gdXNlIHdpdGggdGhpcy4iCisgICAg
aWYgKCFpc1ZhbGlkVG9Vc2VXaXRoKHNvdXJjZSwgKnRoaXMpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICAvLyBGSVhNRTogImRlc3RpbmF0aW9uIGlzIHZhbGlkIHRvIHVzZSB3aXRoIHRo
aXMuIgorICAgIGlmICghaXNWYWxpZFRvVXNlV2l0aChkZXN0aW5hdGlvbiwgKnRoaXMpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIShzb3VyY2UudXNhZ2UoKSAmIFdHUFVCdWZm
ZXJVc2FnZV9Db3B5U3JjKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTYwLDcgKzE2Myw4
IEBAIHN0YXRpYyBib29sIHZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKGNvbnN0IFdHUFVJbWFnZUNv
cHlCdWZmZXImIGltYWdlQ29weUJ1ZmZlcikKIHsKICAgICAvLyBodHRwczovL2dwdXdlYi5naXRo
dWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi12YWxpZGF0aW5nLWdwdWltYWdlY29weWJ1ZmZl
cgogCi0gICAgLy8gRklYTUU6ICJpbWFnZUNvcHlCdWZmZXIuYnVmZmVyIG11c3QgYmUgYSB2YWxp
ZCBHUFVCdWZmZXIuIgorICAgIGlmICghZnJvbUFQSShpbWFnZUNvcHlCdWZmZXIuYnVmZmVyKS5p
c1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChpbWFnZUNvcHlCdWZm
ZXIubGF5b3V0LmJ5dGVzUGVyUm93ICUgMjU2KQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC02
NzQsOSArNjc4LDEwIEBAIHZvaWQgQ29tbWFuZEVuY29kZXI6OmNvcHlUZXh0dXJlVG9UZXh0dXJl
KGNvbnN0IFdHUFVJbWFnZUNvcHlUZXh0dXJlJiBzb3VyY2UsIGNvCiAgICAgfQogfQogCi1zdGF0
aWMgYm9vbCB2YWxpZGF0ZUNsZWFyQnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCB1aW50NjRf
dCBvZmZzZXQsIHVpbnQ2NF90IHNpemUpCitib29sIENvbW1hbmRFbmNvZGVyOjp2YWxpZGF0ZUNs
ZWFyQnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90
IHNpemUpCiB7Ci0gICAgLy8gRklYTUU6ICJidWZmZXIgaXMgdmFsaWQgdG8gdXNlIHdpdGggdGhp
cy4iCisgICAgaWYgKCFpc1ZhbGlkVG9Vc2VXaXRoKGJ1ZmZlciwgKnRoaXMpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIShidWZmZXIudXNhZ2UoKSAmIFdHUFVCdWZmZXJVc2Fn
ZV9Db3B5RHN0KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzE4LDcgKzcyMyw4IEBAIHZv
aWQgQ29tbWFuZEVuY29kZXI6OmNsZWFyQnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCB1aW50
NjRfdCBvZmZzZXQsIHVpbnQ2NF90CiAKIGJvb2wgQ29tbWFuZEVuY29kZXI6OnZhbGlkYXRlRmlu
aXNoKCkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogInRoaXMgbXVzdCBiZSB2YWxpZC4iCisgICAg
aWYgKCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChtX3N0YXRl
ICE9IEVuY29kZXJTdGF0ZTo6T3BlbikKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzQzLDkg
Kzc0OSw3IEBAIFJlZlB0cjxDb21tYW5kQnVmZmVyPiBDb21tYW5kRW5jb2Rlcjo6ZmluaXNoKGNv
bnN0IFdHUFVDb21tYW5kQnVmZmVyRGVzY3JpcHRvciYKIAogICAgIGlmICh2YWxpZGF0aW9uRmFp
bGVkKSB7CiAgICAgICAgIG1fZGV2aWNlLT5nZW5lcmF0ZUFWYWxpZGF0aW9uRXJyb3IoIlZhbGlk
YXRpb24gZmFpbHVyZS4iX3MpOwotCi0gICAgICAgIC8vIEZJWE1FOiAiUmV0dXJuIGEgbmV3IGlu
dmFsaWQgR1BVQ29tbWFuZEJ1ZmZlci4iCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAg
ICByZXR1cm4gQ29tbWFuZEJ1ZmZlcjo6Y3JlYXRlSW52YWxpZChtX2RldmljZSk7CiAgICAgfQog
CiAgICAgZmluYWxpemVCbGl0Q29tbWFuZEVuY29kZXIoKTsKQEAgLTc4OCw3ICs3OTIsNyBAQCB2
b2lkIENvbW1hbmRFbmNvZGVyOjpwb3BEZWJ1Z0dyb3VwKCkKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgaWYgKCF2YWxpZGF0ZVBvcERlYnVnR3JvdXAoKSkgewotICAgICAgICAvLyBGSVhNRTogIm1h
a2UgdGhpcyBpbnZhbGlkLCBhbmQgc3RvcC4iCisgICAgICAgIG1ha2VJbnZhbGlkKCk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Nv
bXB1dGVQYXNzRW5jb2Rlci5oIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNv
ZGVyLmgKaW5kZXggMTBjODNkZDk5NDM2MzhkNWE3YWFhNDJiM2JjOTMxNTAxZDlmYTNlMS4uNDZk
MTFiMTZlZWIwOTgyM2FmYWNlYzYyODZjMjExYTY0ZTVkMWUwZCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVyLmgKKysrIGIvU291cmNlL1dlYkdQVS9X
ZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVyLmgKQEAgLTc4LDcgKzc4LDkgQEAgcHJpdmF0ZToKIAog
ICAgIGJvb2wgdmFsaWRhdGVQb3BEZWJ1Z0dyb3VwKCkgY29uc3Q7CiAKLSAgICBjb25zdCBpZDxN
VExDb21wdXRlQ29tbWFuZEVuY29kZXI+IG1fY29tcHV0ZUNvbW1hbmRFbmNvZGVyIHsgbmlsIH07
CisgICAgdm9pZCBtYWtlSW52YWxpZCgpIHsgbV9jb21wdXRlQ29tbWFuZEVuY29kZXIgPSBuaWw7
IH0KKworICAgIGlkPE1UTENvbXB1dGVDb21tYW5kRW5jb2Rlcj4gbV9jb21wdXRlQ29tbWFuZEVu
Y29kZXIgeyBuaWwgfTsKIAogICAgIHVpbnQ2NF90IG1fZGVidWdHcm91cFN0YWNrU2l6ZSB7IDAg
fTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVy
Lm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNvZGVyLm1tCmluZGV4IGVl
OGQ0ZjgzN2RmNmUwY2UzYjZlMmY4OGM3NjU2ZjU4ZWZiYWUwMzYuLmRmZWMyYjljNzNmMzJjMDEy
NTVmOTdjNWIwNTg1ODdkYzY3NzkyZGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BV
L0NvbXB1dGVQYXNzRW5jb2Rlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRl
UGFzc0VuY29kZXIubW0KQEAgLTEwMCw3ICsxMDAsNyBAQCB2b2lkIENvbXB1dGVQYXNzRW5jb2Rl
cjo6cG9wRGVidWdHcm91cCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICghdmFsaWRhdGVQ
b3BEZWJ1Z0dyb3VwKCkpIHsKLSAgICAgICAgLy8gRklYTUU6ICJtYWtlIHRoaXMgaW52YWxpZCwg
YW5kIHN0b3AuIgorICAgICAgICBtYWtlSW52YWxpZCgpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9RdWV1ZS5oIGIvU291cmNlL1dl
YkdQVS9XZWJHUFUvUXVldWUuaAppbmRleCA5MzAyMDFiMTBjMWEyYjE5MTUyNjRkZWFmNjliZmQ5
ZjgyMTFkMTI4Li5lM2Y0ODA1NzBmMmU3NTI1MTMxOTlmZGIwMGNlYjIyMDFmMjJjZWRmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9RdWV1ZS5oCisrKyBiL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL1F1ZXVlLmgKQEAgLTY4LDExICs2OCwxMyBAQCBwdWJsaWM6CiAKICAgICBpZDxNVExD
b21tYW5kUXVldWU+IGNvbW1hbmRRdWV1ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29tbWFuZFF1ZXVl
OyB9CiAKKyAgICBjb25zdCBEZXZpY2UmIGRldmljZSgpIGNvbnN0IHsgcmV0dXJuIG1fZGV2aWNl
OyB9CisKIHByaXZhdGU6CiAgICAgUXVldWUoaWQ8TVRMQ29tbWFuZFF1ZXVlPiwgRGV2aWNlJik7
CiAgICAgUXVldWUoRGV2aWNlJik7CiAKLSAgICBib29sIHZhbGlkYXRlU3VibWl0KCkgY29uc3Q7
CisgICAgYm9vbCB2YWxpZGF0ZVN1Ym1pdChjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3Jh
cHBlcjxjb25zdCBDb21tYW5kQnVmZmVyPj4mKSBjb25zdDsKICAgICBib29sIHZhbGlkYXRlV3Jp
dGVCdWZmZXIoY29uc3QgQnVmZmVyJiwgdWludDY0X3QgYnVmZmVyT2Zmc2V0LCBzaXplX3QpIGNv
bnN0OwogCiAgICAgdm9pZCBlbnN1cmVCbGl0Q29tbWFuZEVuY29kZXIoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1F1ZXVlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUXVl
dWUubW0KaW5kZXggOTk3ZjE1NDU5ZTk5YmEyZmZjOTgxYTg4MzNmNTcyMDQzNTdkODYyNi4uMDc3
ZDQxYTI4MDg5ZjQ3OTg4NjUzM2EyNWQ5MmU5YTUwMzczMzM2NyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkdQVS9XZWJHUFUvUXVldWUubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUXVldWUu
bW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQgIkJ1ZmZlci5oIgogI2ltcG9ydCAiQ29tbWFu
ZEJ1ZmZlci5oIgogI2ltcG9ydCAiRGV2aWNlLmgiCisjaW1wb3J0ICJJc1ZhbGlkVG9Vc2VXaXRo
LmgiCiAjaW1wb3J0ICJUZXh0dXJlLmgiCiAKIG5hbWVzcGFjZSBXZWJHUFUgewpAQCAtMTAxLDkg
KzEwMiwxMiBAQCB2b2lkIFF1ZXVlOjpvblN1Ym1pdHRlZFdvcmtEb25lKHVpbnQ2NF90LCBDb21w
bGV0aW9uSGFuZGxlcjx2b2lkKFdHUFVRdWV1ZVdvcmtEbwogICAgIGNhbGxiYWNrcy5hcHBlbmQo
V1RGTW92ZShjYWxsYmFjaykpOwogfQogCi1ib29sIFF1ZXVlOjp2YWxpZGF0ZVN1Ym1pdCgpIGNv
bnN0Citib29sIFF1ZXVlOjp2YWxpZGF0ZVN1Ym1pdChjb25zdCBWZWN0b3I8c3RkOjpyZWZlcmVu
Y2Vfd3JhcHBlcjxjb25zdCBDb21tYW5kQnVmZmVyPj4mIGNvbW1hbmRzKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiAiRXZlcnkge3tHUFVDb21tYW5kQnVmZmVyfX0gaW4gfGNvbW1hbmRCdWZmZXJz
fCBpcyBbJHZhbGlkIHRvIHVzZSB3aXRoJF0gfHRoaXN8LiIKKyAgICBmb3IgKGF1dG8gY29tbWFu
ZCA6IGNvbW1hbmRzKSB7CisgICAgICAgIGlmICghaXNWYWxpZFRvVXNlV2l0aChjb21tYW5kLmdl
dCgpLCAqdGhpcykpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQogCiAgICAgLy8g
RklYTUU6ICJFdmVyeSBHUFVCdWZmZXIgcmVmZXJlbmNlZCBpbiBhbnkgZWxlbWVudCBvZiBjb21t
YW5kQnVmZmVycyBpcyBpbiB0aGUgInVubWFwcGVkIiBidWZmZXIgc3RhdGUuIgogCkBAIC0xMzQs
NyArMTM4LDcgQEAgdm9pZCBRdWV1ZTo6c3VibWl0KFZlY3RvcjxzdGQ6OnJlZmVyZW5jZV93cmFw
cGVyPGNvbnN0IENvbW1hbmRCdWZmZXI+PiYmIGNvbW1hbmQKIHsKICAgICAvLyBodHRwczovL2dw
dXdlYi5naXRodWIuaW8vZ3B1d2ViLyNkb20tZ3B1cXVldWUtc3VibWl0CiAKLSAgICBpZiAoIXZh
bGlkYXRlU3VibWl0KCkpIHsKKyAgICBpZiAoIXZhbGlkYXRlU3VibWl0KGNvbW1hbmRzKSkgewog
ICAgICAgICBtX2RldmljZS5nZW5lcmF0ZUFWYWxpZGF0aW9uRXJyb3IoIlZhbGlkYXRpb24gZmFp
bHVyZS4iX3MpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTU1LDcgKzE1OSw4IEBAIHN0
YXRpYyBib29sIHZhbGlkYXRlV3JpdGVCdWZmZXJJbml0aWFsKHNpemVfdCBzaXplKQogCiBib29s
IFF1ZXVlOjp2YWxpZGF0ZVdyaXRlQnVmZmVyKGNvbnN0IEJ1ZmZlciYgYnVmZmVyLCB1aW50NjRf
dCBidWZmZXJPZmZzZXQsIHNpemVfdCBzaXplKSBjb25zdAogewotICAgIC8vIEZJWE1FOiAiYnVm
ZmVyIGlzIHZhbGlkIHRvIHVzZSB3aXRoIHRoaXMuIgorICAgIGlmICghaXNWYWxpZFRvVXNlV2l0
aChidWZmZXIsICp0aGlzKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGJ1ZmZl
ci5zdGF0ZSgpICE9IEJ1ZmZlcjo6U3RhdGU6OlVubWFwcGVkKQogICAgICAgICByZXR1cm4gZmFs
c2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVy
LmggYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVyLmgKaW5kZXggMGI1
OTM0NGYyYjZmYmE3NzE3MGQ2NTE4NDdlMjkwZGJiMGI3Y2JhMS4uZDY4ZjYyNDFiZDQzN2ZiYTRi
MWUxOTRiYmQxMTE3YzU1ZGRhNGE1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUv
UmVuZGVyQnVuZGxlRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlckJ1
bmRsZUVuY29kZXIuaApAQCAtODEsNyArODEsOSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB2YWxp
ZGF0ZVBvcERlYnVnR3JvdXAoKSBjb25zdDsKIAotICAgIGNvbnN0IGlkPE1UTEluZGlyZWN0Q29t
bWFuZEJ1ZmZlcj4gbV9pbmRpcmVjdENvbW1hbmRCdWZmZXIgeyBuaWwgfTsKKyAgICB2b2lkIG1h
a2VJbnZhbGlkKCkgeyBtX2luZGlyZWN0Q29tbWFuZEJ1ZmZlciA9IG5pbDsgfQorCisgICAgaWQ8
TVRMSW5kaXJlY3RDb21tYW5kQnVmZmVyPiBtX2luZGlyZWN0Q29tbWFuZEJ1ZmZlciB7IG5pbCB9
OwogCiAgICAgdWludDY0X3QgbV9kZWJ1Z0dyb3VwU3RhY2tTaXplIHsgMCB9OwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVyLm1tIGIvU291cmNl
L1dlYkdQVS9XZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5tbQppbmRleCBiY2YwMTgxNTRlNzcz
MTJlZWY0MjM0ZjcxZDU1MDA0YTI3MzJkY2U4Li45OTA3ODVmNDk5NjRhNGY2MTA0M2I3MmE3Nzkx
YzQyZmNmMGU1Y2ZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5k
bGVFbmNvZGVyLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlckJ1bmRsZUVuY29k
ZXIubW0KQEAgLTExNSw3ICsxMTUsNyBAQCB2b2lkIFJlbmRlckJ1bmRsZUVuY29kZXI6OnBvcERl
YnVnR3JvdXAoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXZhbGlkYXRlUG9wRGVidWdH
cm91cCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiAibWFrZSB0aGlzIGludmFsaWQsIGFuZCBzdG9w
LiIKKyAgICAgICAgbWFrZUludmFsaWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyUGFzc0VuY29kZXIuaCBiL1NvdXJj
ZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLmgKaW5kZXggOTU3Y2ZmNmJiMTNjYjBm
MTZkY2NmNDhiMTQzODE5OGJjYjgxM2MxYi4uY2JkYmViZmYwODczMzRjM2UzZjc1ODkwYTMxY2U2
YzJmYWZkM2ZlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyUGFzc0Vu
Y29kZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5oCkBA
IC05MSw3ICs5MSw5IEBAIHByaXZhdGU6CiAKICAgICBib29sIHZhbGlkYXRlUG9wRGVidWdHcm91
cCgpIGNvbnN0OwogCi0gICAgY29uc3QgaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IG1fcmVu
ZGVyQ29tbWFuZEVuY29kZXIgeyBuaWwgfTsKKyAgICB2b2lkIG1ha2VJbnZhbGlkKCkgeyBtX3Jl
bmRlckNvbW1hbmRFbmNvZGVyID0gbmlsOyB9CisKKyAgICBpZDxNVExSZW5kZXJDb21tYW5kRW5j
b2Rlcj4gbV9yZW5kZXJDb21tYW5kRW5jb2RlciB7IG5pbCB9OwogCiAgICAgdWludDY0X3QgbV9k
ZWJ1Z0dyb3VwU3RhY2tTaXplIHsgMCB9OwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBh
c3NFbmNvZGVyLm1tCmluZGV4IDJiODhjNmZjYWRhZGMwZGExMTYzNzJkN2E3MGVjMmVjNWEzY2Vj
MWQuLmNiYmMxMjQzMmI5YTAyZDE3NWM5NTgzMDBiMmExYTg2YzllYTA5MTcgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLm1tCisrKyBiL1NvdXJjZS9X
ZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLm1tCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9p
ZCBSZW5kZXJQYXNzRW5jb2Rlcjo6cG9wRGVidWdHcm91cCgpCiAgICAgICAgIHJldHVybjsKIAog
ICAgIGlmICghdmFsaWRhdGVQb3BEZWJ1Z0dyb3VwKCkpIHsKLSAgICAgICAgLy8gRklYTUU6ICJt
YWtlIHRoaXMgaW52YWxpZCwgYW5kIHN0b3AuIgorICAgICAgICBtYWtlSW52YWxpZCgpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9T
YW1wbGVyLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvU2FtcGxlci5tbQppbmRleCBjYTNiNzUx
MzkzNTkxNTc3ZDMzNTdkM2MwZTdiNjAxMGUzYmRiNmY0Li5lNWFhMGIzMjk3MTI0NGExMGY3YThm
ZGYxZjgxMjU2NmZlYzcxMDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1w
bGVyLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIubW0KQEAgLTMyLDExICsz
MiwxMiBAQAogCiBuYW1lc3BhY2UgV2ViR1BVIHsKIAotc3RhdGljIGJvb2wgdmFsaWRhdGVDcmVh
dGVTYW1wbGVyKERldmljZSYsIGNvbnN0IFdHUFVTYW1wbGVyRGVzY3JpcHRvciYgZGVzY3JpcHRv
cikKK3N0YXRpYyBib29sIHZhbGlkYXRlQ3JlYXRlU2FtcGxlcihEZXZpY2UmIGRldmljZSwgY29u
c3QgV0dQVVNhbXBsZXJEZXNjcmlwdG9yJiBkZXNjcmlwdG9yKQogewogICAgIC8vIGh0dHBzOi8v
Z3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3RyYWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1c2Ft
cGxlcmRlc2NyaXB0b3IKIAotICAgIC8vIEZJWE1FOiAiZGV2aWNlIGlzIHZhbGlkLiIKKyAgICBp
ZiAoIWRldmljZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChz
dGQ6OmlzbmFuKGRlc2NyaXB0b3IubG9kTWluQ2xhbXApIHx8IGRlc2NyaXB0b3IubG9kTWluQ2xh
bXAgPCAwKQogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9UZXh0dXJlLm1tIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4dHVyZS5tbQppbmRl
eCBjMTMwNjBjNjBmNmE3MzdjNzU2OWJkZGM4ZTg5OTg2MzgyMjgyOTcwLi5hMDcwZTc3OTI2MjAy
NGZhNmVlZTIzMmVkMTlhZDg5YmQzNzk3YTlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9UZXh0dXJlLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KQEAg
LTEyMjgsNyArMTIyOCw4IEBAIHN0YXRpYyBib29sIHRleHR1cmVWaWV3Rm9ybWF0Q29tcGF0aWJs
ZShXR1BVVGV4dHVyZUZvcm1hdCBmb3JtYXQxLCBXR1BVVGV4dHVyZUZvCiAKIGJvb2wgRGV2aWNl
Ojp2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yLCBjb25zdCBWZWN0b3I8V0dQVVRleHR1cmVGb3JtYXQ+JiB2aWV3Rm9ybWF0cykKIHsK
LSAgICAvLyBGSVhNRTogInRoaXMgbXVzdCBiZSBhIHZhbGlkIEdQVURldmljZS4iCisgICAgaWYg
KCFpc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmICghZGVzY3JpcHRv
ci51c2FnZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtMTk4NSw4ICsxOTg2LDcgQEAgUmVm
UHRyPFRleHR1cmU+IERldmljZTo6Y3JlYXRlVGV4dHVyZShjb25zdCBXR1BVVGV4dHVyZURlc2Ny
aXB0b3ImIGRlc2NyaXB0b3IpCiAKICAgICBpZiAoIXZhbGlkYXRlQ3JlYXRlVGV4dHVyZShkZXNj
cmlwdG9yLCB2aWV3Rm9ybWF0cykpIHsKICAgICAgICAgZ2VuZXJhdGVBVmFsaWRhdGlvbkVycm9y
KCJWYWxpZGF0aW9uIGZhaWx1cmUuIl9zKTsKLSAgICAgICAgLy8gRklYTUU6ICJSZXR1cm4gYSBu
ZXcgaW52YWxpZCBHUFVUZXh0dXJlLiIKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgICAg
IHJldHVybiBUZXh0dXJlOjpjcmVhdGVJbnZhbGlkKCp0aGlzKTsKICAgICB9CiAKICAgICBNVExU
ZXh0dXJlRGVzY3JpcHRvciAqdGV4dHVyZURlc2NyaXB0b3IgPSBbTVRMVGV4dHVyZURlc2NyaXB0
b3IgbmV3XTsKQEAgLTIxNDQsNyArMjE0NCw4IEBAIHVpbnQzMl90IFRleHR1cmU6OmFycmF5TGF5
ZXJDb3VudCgpIGNvbnN0CiAKIGJvb2wgVGV4dHVyZTo6dmFsaWRhdGVDcmVhdGVWaWV3KGNvbnN0
IFdHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0CiB7Ci0gICAgLy8g
RklYTUU6ICJ0aGlzIGlzIHZhbGlkIgorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CiAKICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IuYXNwZWN0KSB7CiAgICAgY2FzZSBX
R1BVVGV4dHVyZUFzcGVjdF9BbGw6CkBAIC0yMjYyLDkgKzIyNjMsNyBAQCBSZWZQdHI8VGV4dHVy
ZVZpZXc+IFRleHR1cmU6OmNyZWF0ZVZpZXcoY29uc3QgV0dQVVRleHR1cmVWaWV3RGVzY3JpcHRv
ciYgaW5wdXREZQogCiAgICAgaWYgKCF2YWxpZGF0ZUNyZWF0ZVZpZXcoZGVzY3JpcHRvcikpIHsK
ICAgICAgICAgbV9kZXZpY2UtPmdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFsaWRhdGlvbiBm
YWlsdXJlLiJfcyk7Ci0KLSAgICAgICAgLy8gRklYTUU6ICJSZXR1cm4gYSBuZXcgaW52YWxpZCBH
UFVUZXh0dXJlVmlldy4iCi0gICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4g
VGV4dHVyZVZpZXc6OmNyZWF0ZUludmFsaWQobV9kZXZpY2UpOwogICAgIH0KIAogICAgIHN0ZDo6
b3B0aW9uYWw8TVRMUGl4ZWxGb3JtYXQ+IHBpeGVsRm9ybWF0OwpAQCAtMjQyNCw3ICsyNDIzLDgg
QEAgYm9vbCBUZXh0dXJlOjp2YWxpZGF0ZUltYWdlQ29weVRleHR1cmUoY29uc3QgV0dQVUltYWdl
Q29weVRleHR1cmUmIGltYWdlQ29weVRleHQKIAogICAgIHVpbnQzMl90IGJsb2NrSGVpZ2h0ID0g
VGV4dHVyZTo6dGV4ZWxCbG9ja0hlaWdodChmcm9tQVBJKGltYWdlQ29weVRleHR1cmUudGV4dHVy
ZSkuZGVzY3JpcHRvcigpLmZvcm1hdCk7CiAKLSAgICAvLyBGSVhNRTogImltYWdlQ29weVRleHR1
cmUudGV4dHVyZSBtdXN0IGJlIGEgdmFsaWQgR1BVVGV4dHVyZS4iCisgICAgaWYgKCFmcm9tQVBJ
KGltYWdlQ29weVRleHR1cmUudGV4dHVyZSkuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAKICAgICBpZiAoaW1hZ2VDb3B5VGV4dHVyZS5taXBMZXZlbCA+PSBmcm9tQVBJKGltYWdl
Q29weVRleHR1cmUudGV4dHVyZSkuZGVzY3JpcHRvcigpLm1pcExldmVsQ291bnQpCiAgICAgICAg
IHJldHVybiBmYWxzZTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>457138</attachid>
            <date>2022-04-08 20:16:25 -0700</date>
            <delta_ts>2022-04-11 15:05:06 -0700</delta_ts>
            <desc>Rebased</desc>
            <filename>bug-238722-20220408201624.patch</filename>
            <type>text/plain</type>
            <size>15506</size>
            <attacher name="Myles C. Maxfield">mmaxfield</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkyNjczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL0No
YW5nZUxvZyBiL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCmluZGV4IDBkNzA3N2VjMzIzYzc1YThl
M2MzODVjMGZmNTlmZmQ3MjBlNDk4NjUuLjE4ZTcxZWU4NTI3OWNjNGQxYmU4YWYxZTI2Y2RjMTQ0
ZjE3MzA0NTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvQ2hhbmdlTG9nCisrKyBiL1NvdXJj
ZS9XZWJHUFUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNTcgQEAKKzIwMjItMDQtMDggIE15bGVzIEMu
IE1heGZpZWxkICA8bW1heGZpZWxkQGFwcGxlLmNvbT4KKworICAgICAgICBbV2ViR1BVXSBJbXBs
ZW1lbnQgbWlzc2luZyB2YWxpZGl0eSBjaGVja3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzODcyMgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIE5vdyB0aGF0IFdlYkdQVSBvYmplY3RzIGhhdmUgYSBub3Rp
b24gb2YgdmFsaWRpdHksIHdlIGNhbiBpbXBsZW1lbnQgYWxsIHRoZQorICAgICAgICBGSVhNRXMg
Zm9yIHZhbGlkaXR5IGNoZWNrcy4KKworICAgICAgICAqIFdlYkdQVS9CdWZmZXIubW06CisgICAg
ICAgIChXZWJHUFU6OnZhbGlkYXRlQ3JlYXRlQnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6QnVm
ZmVyOjp2YWxpZGF0ZU1hcEFzeW5jIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUvQ29tbWFuZEVu
Y29kZXIuaDoKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6Om1ha2VJbnZhbGlkKToK
KyAgICAgICAgKiBXZWJHUFUvQ29tbWFuZEVuY29kZXIubW06CisgICAgICAgIChXZWJHUFU6OkNv
bW1hbmRFbmNvZGVyOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb0J1ZmZlcik6CisgICAgICAgIChXZWJH
UFU6OnZhbGlkYXRlSW1hZ2VDb3B5QnVmZmVyKToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVu
Y29kZXI6OnZhbGlkYXRlQ2xlYXJCdWZmZXIpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5j
b2Rlcjo6dmFsaWRhdGVGaW5pc2ggY29uc3QpOgorICAgICAgICAoV2ViR1BVOjpDb21tYW5kRW5j
b2Rlcjo6ZmluaXNoKToKKyAgICAgICAgKFdlYkdQVTo6Q29tbWFuZEVuY29kZXI6OnBvcERlYnVn
R3JvdXApOgorICAgICAgICAoV2ViR1BVOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb0J1ZmZlcik6IERl
bGV0ZWQuCisgICAgICAgIChXZWJHUFU6OnZhbGlkYXRlQ2xlYXJCdWZmZXIpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYkdQVS9Db21wdXRlUGFzc0VuY29kZXIuaDoKKyAgICAgICAgKFdlYkdQVTo6
Q29tcHV0ZVBhc3NFbmNvZGVyOjptYWtlSW52YWxpZCk6CisgICAgICAgICogV2ViR1BVL0NvbXB1
dGVQYXNzRW5jb2Rlci5tbToKKyAgICAgICAgKFdlYkdQVTo6Q29tcHV0ZVBhc3NFbmNvZGVyOjpw
b3BEZWJ1Z0dyb3VwKToKKyAgICAgICAgKiBXZWJHUFUvT2JqZWN0QmFzZS5oOgorICAgICAgICAo
V2ViR1BVOjpPYmplY3RCYXNlOjppc1ZhbGlkVG9Vc2VXaXRoIGNvbnN0KToKKyAgICAgICAgKFdl
YkdQVTo6T2JqZWN0QmFzZTo6ZGV2aWNlIGNvbnN0KToKKyAgICAgICAgKiBXZWJHUFUvUXVldWUu
aDoKKyAgICAgICAgKFdlYkdQVTo6UXVldWU6OmRldmljZSBjb25zdCk6CisgICAgICAgICogV2Vi
R1BVL1F1ZXVlLm1tOgorICAgICAgICAoV2ViR1BVOjpRdWV1ZTo6dmFsaWRhdGVTdWJtaXQgY29u
c3QpOgorICAgICAgICAoV2ViR1BVOjpRdWV1ZTo6c3VibWl0KToKKyAgICAgICAgKFdlYkdQVTo6
UXVldWU6OnZhbGlkYXRlV3JpdGVCdWZmZXIgY29uc3QpOgorICAgICAgICAqIFdlYkdQVS9SZW5k
ZXJCdW5kbGVFbmNvZGVyLmg6CisgICAgICAgIChXZWJHUFU6OlJlbmRlckJ1bmRsZUVuY29kZXI6
Om1ha2VJbnZhbGlkKToKKyAgICAgICAgKiBXZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5tbToK
KyAgICAgICAgKFdlYkdQVTo6UmVuZGVyQnVuZGxlRW5jb2Rlcjo6cG9wRGVidWdHcm91cCk6Cisg
ICAgICAgICogV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLmg6CisgICAgICAgIChXZWJHUFU6OlJl
bmRlclBhc3NFbmNvZGVyOjptYWtlSW52YWxpZCk6CisgICAgICAgICogV2ViR1BVL1JlbmRlclBh
c3NFbmNvZGVyLm1tOgorICAgICAgICAoV2ViR1BVOjpSZW5kZXJQYXNzRW5jb2Rlcjo6cG9wRGVi
dWdHcm91cCk6CisgICAgICAgICogV2ViR1BVL1NhbXBsZXIubW06CisgICAgICAgIChXZWJHUFU6
OnZhbGlkYXRlQ3JlYXRlU2FtcGxlcik6CisgICAgICAgICogV2ViR1BVL1RleHR1cmUubW06Cisg
ICAgICAgIChXZWJHUFU6OkRldmljZTo6dmFsaWRhdGVDcmVhdGVUZXh0dXJlKToKKyAgICAgICAg
KFdlYkdQVTo6RGV2aWNlOjpjcmVhdGVUZXh0dXJlKToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVy
ZTo6dmFsaWRhdGVDcmVhdGVWaWV3IGNvbnN0KToKKyAgICAgICAgKFdlYkdQVTo6VGV4dHVyZTo6
Y3JlYXRlVmlldyk6CisgICAgICAgIChXZWJHUFU6OlRleHR1cmU6OnZhbGlkYXRlSW1hZ2VDb3B5
VGV4dHVyZSk6CisKIDIwMjItMDQtMDggIE15bGVzIEMuIE1heGZpZWxkICA8bW1heGZpZWxkQGFw
cGxlLmNvbT4KIAogICAgICAgICBbV2ViR1BVXSBNYWtlIGNhbGxiYWNrcyBpbiB1bmltcGxlbWVu
dGVkIGZ1bmN0aW9ucyBleGVjdXRlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9C
dWZmZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9CdWZmZXIubW0KaW5kZXggZTc5N2M5Nzk4
MzA4MzdmN2ViNTQ0MzdiMDZlNmUxNDQwNzdhNDJkNy4uMDdmZjdlZTM2NjFlYThiYzU3MWE2Mzhj
ZGQ4YjdiMjRkYjg1OGFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQnVmZmVy
Lm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0J1ZmZlci5tbQpAQCAtNTEsNyArNTEsOCBA
QCBzdGF0aWMgYm9vbCB2YWxpZGF0ZURlc2NyaXB0b3IoY29uc3QgRGV2aWNlJiBkZXZpY2UsIGNv
bnN0IFdHUFVCdWZmZXJEZXNjcmlwdG9yJgogCiBzdGF0aWMgYm9vbCB2YWxpZGF0ZUNyZWF0ZUJ1
ZmZlcihjb25zdCBEZXZpY2UmIGRldmljZSwgY29uc3QgV0dQVUJ1ZmZlckRlc2NyaXB0b3ImIGRl
c2NyaXB0b3IpCiB7Ci0gICAgLy8gRklYTUU6ICJ0aGlzIGlzIGEgdmFsaWQgR1BVRGV2aWNlLiIK
KyAgICBpZiAoIWRldmljZS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghdmFsaWRhdGVEZXNjcmlwdG9yKGRldmljZSwgZGVzY3JpcHRvcikpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTIwOCw3ICsyMDksMTAgQEAgdm9pZCogQnVmZmVyOjpnZXRNYXBwZWRS
YW5nZShzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSkKIAogYm9vbCBCdWZmZXI6OnZhbGlkYXRl
TWFwQXN5bmMoV0dQVU1hcE1vZGVGbGFncyBtb2RlLCBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgcmFu
Z2VTaXplKSBjb25zdAogewotICAgIC8vIEZJWE1FOiAidGhpcyBpcyBhIHZhbGlkIEdQVUJ1ZmZl
ci4gVE9ETzogY2hlY2sgZGVzdHJveWVkIHN0YXRlPyIKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFRoZSBzcGVjIHNheXMgIlRPRE86
IGNoZWNrIGRlc3Ryb3llZCBzdGF0ZT8iCiAKICAgICBpZiAob2Zmc2V0ICUgOCkKICAgICAgICAg
cmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVu
Y29kZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbW1hbmRFbmNvZGVyLmgKaW5kZXggODAx
MTg5OTM4NGQzYTE3MTYzZGE1Y2MyYmIyMTE1NGRlOWU4MWY4NC4uYTRmZDMxMWYzZGZjZDYxYjQz
YjRhMmRjNGQ1ZDAxYjI0MTYxODZkMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUv
Q29tbWFuZEVuY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rl
ci5oCkBAIC04MCw5ICs4MCwxMyBAQCBwcml2YXRlOgogICAgIENvbW1hbmRFbmNvZGVyKGlkPE1U
TENvbW1hbmRCdWZmZXI+LCBEZXZpY2UmKTsKICAgICBDb21tYW5kRW5jb2RlcihEZXZpY2UmKTsK
IAorICAgIGJvb2wgdmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZmZXIoY29uc3QgQnVmZmVyJiBzb3Vy
Y2UsIHVpbnQ2NF90IHNvdXJjZU9mZnNldCwgY29uc3QgQnVmZmVyJiBkZXN0aW5hdGlvbiwgdWlu
dDY0X3QgZGVzdGluYXRpb25PZmZzZXQsIHVpbnQ2NF90IHNpemUpOworICAgIGJvb2wgdmFsaWRh
dGVDbGVhckJ1ZmZlcihjb25zdCBCdWZmZXImLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQ2NF90IHNp
emUpOwogICAgIGJvb2wgdmFsaWRhdGVGaW5pc2goKSBjb25zdDsKICAgICBib29sIHZhbGlkYXRl
UG9wRGVidWdHcm91cCgpIGNvbnN0OwogCisgICAgdm9pZCBtYWtlSW52YWxpZCgpIHsgbV9jb21t
YW5kQnVmZmVyID0gbmlsOyB9CisKICAgICB2b2lkIGVuc3VyZUJsaXRDb21tYW5kRW5jb2Rlcigp
OwogICAgIHZvaWQgZmluYWxpemVCbGl0Q29tbWFuZEVuY29kZXIoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvQ29tbWFuZEVuY29kZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9Db21tYW5kRW5jb2Rlci5tbQppbmRleCA4YzQ1MzlhNjc3MDYxMTJiNDc5MzExMzA2NzQy
NGM3ZjAzMDRmMGUyLi45Y2EzNjQwMjYwNmQwNDhjNjIxY2ZhZWJiYzU3MTM5NDZjNWI3ZDFiIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5tbQorKysgYi9T
b3VyY2UvV2ViR1BVL1dlYkdQVS9Db21tYW5kRW5jb2Rlci5tbQpAQCAtMzEsNiArMzEsNyBAQAog
I2ltcG9ydCAiQ29tbWFuZEJ1ZmZlci5oIgogI2ltcG9ydCAiQ29tcHV0ZVBhc3NFbmNvZGVyLmgi
CiAjaW1wb3J0ICJEZXZpY2UuaCIKKyNpbXBvcnQgIklzVmFsaWRUb1VzZVdpdGguaCIKICNpbXBv
cnQgIlF1ZXJ5U2V0LmgiCiAjaW1wb3J0ICJSZW5kZXJQYXNzRW5jb2Rlci5oIgogI2ltcG9ydCAi
VGV4dHVyZS5oIgpAQCAtOTcsMTEgKzk4LDEzIEBAIFJlZjxSZW5kZXJQYXNzRW5jb2Rlcj4gQ29t
bWFuZEVuY29kZXI6OmJlZ2luUmVuZGVyUGFzcyhjb25zdCBXR1BVUmVuZGVyUGFzc0Rlc2NyCiAg
ICAgcmV0dXJuIFJlbmRlclBhc3NFbmNvZGVyOjpjcmVhdGVJbnZhbGlkKG1fZGV2aWNlKTsKIH0K
IAotc3RhdGljIGJvb2wgdmFsaWRhdGVDb3B5QnVmZmVyVG9CdWZmZXIoY29uc3QgQnVmZmVyJiBz
b3VyY2UsIHVpbnQ2NF90IHNvdXJjZU9mZnNldCwgY29uc3QgQnVmZmVyJiBkZXN0aW5hdGlvbiwg
dWludDY0X3QgZGVzdGluYXRpb25PZmZzZXQsIHVpbnQ2NF90IHNpemUpCitib29sIENvbW1hbmRF
bmNvZGVyOjp2YWxpZGF0ZUNvcHlCdWZmZXJUb0J1ZmZlcihjb25zdCBCdWZmZXImIHNvdXJjZSwg
dWludDY0X3Qgc291cmNlT2Zmc2V0LCBjb25zdCBCdWZmZXImIGRlc3RpbmF0aW9uLCB1aW50NjRf
dCBkZXN0aW5hdGlvbk9mZnNldCwgdWludDY0X3Qgc2l6ZSkKIHsKLSAgICAvLyBGSVhNRTogInNv
dXJjZSBpcyB2YWxpZCB0byB1c2Ugd2l0aCB0aGlzLiIKKyAgICBpZiAoIWlzVmFsaWRUb1VzZVdp
dGgoc291cmNlLCAqdGhpcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIEZJWE1F
OiAiZGVzdGluYXRpb24gaXMgdmFsaWQgdG8gdXNlIHdpdGggdGhpcy4iCisgICAgaWYgKCFpc1Zh
bGlkVG9Vc2VXaXRoKGRlc3RpbmF0aW9uLCAqdGhpcykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
IAogICAgIGlmICghKHNvdXJjZS51c2FnZSgpICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlTcmMpKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC0xNjAsNyArMTYzLDggQEAgc3RhdGljIGJvb2wgdmFs
aWRhdGVJbWFnZUNvcHlCdWZmZXIoY29uc3QgV0dQVUltYWdlQ29weUJ1ZmZlciYgaW1hZ2VDb3B5
QnVmZmVyKQogewogICAgIC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvI2Fic3Ry
YWN0LW9wZGVmLXZhbGlkYXRpbmctZ3B1aW1hZ2Vjb3B5YnVmZmVyCiAKLSAgICAvLyBGSVhNRTog
ImltYWdlQ29weUJ1ZmZlci5idWZmZXIgbXVzdCBiZSBhIHZhbGlkIEdQVUJ1ZmZlci4iCisgICAg
aWYgKCFmcm9tQVBJKGltYWdlQ29weUJ1ZmZlci5idWZmZXIpLmlzVmFsaWQoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKGltYWdlQ29weUJ1ZmZlci5sYXlvdXQuYnl0ZXNQZXJS
b3cgJSAyNTYpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTY3NCw5ICs2NzgsMTAgQEAgdm9p
ZCBDb21tYW5kRW5jb2Rlcjo6Y29weVRleHR1cmVUb1RleHR1cmUoY29uc3QgV0dQVUltYWdlQ29w
eVRleHR1cmUmIHNvdXJjZSwgY28KICAgICB9CiB9CiAKLXN0YXRpYyBib29sIHZhbGlkYXRlQ2xl
YXJCdWZmZXIoY29uc3QgQnVmZmVyJiBidWZmZXIsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qg
c2l6ZSkKK2Jvb2wgQ29tbWFuZEVuY29kZXI6OnZhbGlkYXRlQ2xlYXJCdWZmZXIoY29uc3QgQnVm
ZmVyJiBidWZmZXIsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0X3Qgc2l6ZSkKIHsKLSAgICAvLyBG
SVhNRTogImJ1ZmZlciBpcyB2YWxpZCB0byB1c2Ugd2l0aCB0aGlzLiIKKyAgICBpZiAoIWlzVmFs
aWRUb1VzZVdpdGgoYnVmZmVyLCAqdGhpcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAg
IGlmICghKGJ1ZmZlci51c2FnZSgpICYgV0dQVUJ1ZmZlclVzYWdlX0NvcHlEc3QpKQogICAgICAg
ICByZXR1cm4gZmFsc2U7CkBAIC03MTgsNyArNzIzLDggQEAgdm9pZCBDb21tYW5kRW5jb2Rlcjo6
Y2xlYXJCdWZmZXIoY29uc3QgQnVmZmVyJiBidWZmZXIsIHVpbnQ2NF90IG9mZnNldCwgdWludDY0
X3QKIAogYm9vbCBDb21tYW5kRW5jb2Rlcjo6dmFsaWRhdGVGaW5pc2goKSBjb25zdAogewotICAg
IC8vIEZJWE1FOiAidGhpcyBtdXN0IGJlIHZhbGlkLiIKKyAgICBpZiAoIWlzVmFsaWQoKSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgaWYgKG1fc3RhdGUgIT0gRW5jb2RlclN0YXRlOjpP
cGVuKQogICAgICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODYsNyArNzkyLDcgQEAgdm9pZCBDb21t
YW5kRW5jb2Rlcjo6cG9wRGVidWdHcm91cCgpCiAgICAgICAgIHJldHVybjsKIAogICAgIGlmICgh
dmFsaWRhdGVQb3BEZWJ1Z0dyb3VwKCkpIHsKLSAgICAgICAgLy8gRklYTUU6ICJtYWtlIHRoaXMg
aW52YWxpZCwgYW5kIHN0b3AuIgorICAgICAgICBtYWtlSW52YWxpZCgpOwogICAgICAgICByZXR1
cm47CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRlUGFz
c0VuY29kZXIuaCBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5oCmlu
ZGV4IDEwYzgzZGQ5OTQzNjM4ZDVhN2FhYTQyYjNiYzkzMTUwMWQ5ZmEzZTEuLjQ2ZDExYjE2ZWVi
MDk4MjNhZmFjZWM2Mjg2YzIxMWE2NGU1ZDFlMGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5oCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0Nv
bXB1dGVQYXNzRW5jb2Rlci5oCkBAIC03OCw3ICs3OCw5IEBAIHByaXZhdGU6CiAKICAgICBib29s
IHZhbGlkYXRlUG9wRGVidWdHcm91cCgpIGNvbnN0OwogCi0gICAgY29uc3QgaWQ8TVRMQ29tcHV0
ZUNvbW1hbmRFbmNvZGVyPiBtX2NvbXB1dGVDb21tYW5kRW5jb2RlciB7IG5pbCB9OworICAgIHZv
aWQgbWFrZUludmFsaWQoKSB7IG1fY29tcHV0ZUNvbW1hbmRFbmNvZGVyID0gbmlsOyB9CisKKyAg
ICBpZDxNVExDb21wdXRlQ29tbWFuZEVuY29kZXI+IG1fY29tcHV0ZUNvbW1hbmRFbmNvZGVyIHsg
bmlsIH07CiAKICAgICB1aW50NjRfdCBtX2RlYnVnR3JvdXBTdGFja1NpemUgeyAwIH07CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5tbSBiL1Nv
dXJjZS9XZWJHUFUvV2ViR1BVL0NvbXB1dGVQYXNzRW5jb2Rlci5tbQppbmRleCBlZThkNGY4Mzdk
ZjZlMGNlM2I2ZTJmODhjNzY1NmY1OGVmYmFlMDM2Li5kZmVjMmI5YzczZjMyYzAxMjU1Zjk3YzVi
MDU4NTg3ZGM2Nzc5MmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9Db21wdXRl
UGFzc0VuY29kZXIubW0KKysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvQ29tcHV0ZVBhc3NFbmNv
ZGVyLm1tCkBAIC0xMDAsNyArMTAwLDcgQEAgdm9pZCBDb21wdXRlUGFzc0VuY29kZXI6OnBvcERl
YnVnR3JvdXAoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAoIXZhbGlkYXRlUG9wRGVidWdH
cm91cCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiAibWFrZSB0aGlzIGludmFsaWQsIGFuZCBzdG9w
LiIKKyAgICAgICAgbWFrZUludmFsaWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUXVldWUuaCBiL1NvdXJjZS9XZWJHUFUvV2Vi
R1BVL1F1ZXVlLmgKaW5kZXggNmZmZjQwZTViMTA4YTQ0NjI2NTY0NjU1MjJkMDNjMjg0ZjI0MDQz
ZS4uMjYzNjg5NTMyYjYzZjgwMjZhMmUzYjg0ZjQ2MDBhMTRjNGRhOTVjNSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkdQVS9XZWJHUFUvUXVldWUuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9R
dWV1ZS5oCkBAIC02OSwxMSArNjksMTMgQEAgcHVibGljOgogCiAgICAgaWQ8TVRMQ29tbWFuZFF1
ZXVlPiBjb21tYW5kUXVldWUoKSBjb25zdCB7IHJldHVybiBtX2NvbW1hbmRRdWV1ZTsgfQogCisg
ICAgY29uc3QgRGV2aWNlJiBkZXZpY2UoKSBjb25zdCB7IHJldHVybiBtX2RldmljZTsgfQorCiBw
cml2YXRlOgogICAgIFF1ZXVlKGlkPE1UTENvbW1hbmRRdWV1ZT4sIERldmljZSYpOwogICAgIFF1
ZXVlKERldmljZSYpOwogCi0gICAgYm9vbCB2YWxpZGF0ZVN1Ym1pdCgpIGNvbnN0OworICAgIGJv
b2wgdmFsaWRhdGVTdWJtaXQoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBwZXI8Y29u
c3QgQ29tbWFuZEJ1ZmZlcj4+JikgY29uc3Q7CiAgICAgYm9vbCB2YWxpZGF0ZVdyaXRlQnVmZmVy
KGNvbnN0IEJ1ZmZlciYsIHVpbnQ2NF90IGJ1ZmZlck9mZnNldCwgc2l6ZV90KSBjb25zdDsKIAog
ICAgIHZvaWQgZW5zdXJlQmxpdENvbW1hbmRFbmNvZGVyKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS9RdWV1ZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1F1ZXVlLm1tCmlu
ZGV4IDk5N2YxNTQ1OWU5OWJhMmZmYzk4MWE4ODMzZjU3MjA0MzU3ZDg2MjYuLjA3N2Q0MWEyODA4
OWY0Nzk4ODY1MzNhMjVkOTJlOWE1MDM3MzMzNjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL1F1ZXVlLm1tCisrKyBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1F1ZXVlLm1tCkBAIC0z
MCw2ICszMCw3IEBACiAjaW1wb3J0ICJCdWZmZXIuaCIKICNpbXBvcnQgIkNvbW1hbmRCdWZmZXIu
aCIKICNpbXBvcnQgIkRldmljZS5oIgorI2ltcG9ydCAiSXNWYWxpZFRvVXNlV2l0aC5oIgogI2lt
cG9ydCAiVGV4dHVyZS5oIgogCiBuYW1lc3BhY2UgV2ViR1BVIHsKQEAgLTEwMSw5ICsxMDIsMTIg
QEAgdm9pZCBRdWV1ZTo6b25TdWJtaXR0ZWRXb3JrRG9uZSh1aW50NjRfdCwgQ29tcGxldGlvbkhh
bmRsZXI8dm9pZChXR1BVUXVldWVXb3JrRG8KICAgICBjYWxsYmFja3MuYXBwZW5kKFdURk1vdmUo
Y2FsbGJhY2spKTsKIH0KIAotYm9vbCBRdWV1ZTo6dmFsaWRhdGVTdWJtaXQoKSBjb25zdAorYm9v
bCBRdWV1ZTo6dmFsaWRhdGVTdWJtaXQoY29uc3QgVmVjdG9yPHN0ZDo6cmVmZXJlbmNlX3dyYXBw
ZXI8Y29uc3QgQ29tbWFuZEJ1ZmZlcj4+JiBjb21tYW5kcykgY29uc3QKIHsKLSAgICAvLyBGSVhN
RTogIkV2ZXJ5IHt7R1BVQ29tbWFuZEJ1ZmZlcn19IGluIHxjb21tYW5kQnVmZmVyc3wgaXMgWyR2
YWxpZCB0byB1c2Ugd2l0aCRdIHx0aGlzfC4iCisgICAgZm9yIChhdXRvIGNvbW1hbmQgOiBjb21t
YW5kcykgeworICAgICAgICBpZiAoIWlzVmFsaWRUb1VzZVdpdGgoY29tbWFuZC5nZXQoKSwgKnRo
aXMpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KIAogICAgIC8vIEZJWE1FOiAi
RXZlcnkgR1BVQnVmZmVyIHJlZmVyZW5jZWQgaW4gYW55IGVsZW1lbnQgb2YgY29tbWFuZEJ1ZmZl
cnMgaXMgaW4gdGhlICJ1bm1hcHBlZCIgYnVmZmVyIHN0YXRlLiIKIApAQCAtMTM0LDcgKzEzOCw3
IEBAIHZvaWQgUXVldWU6OnN1Ym1pdChWZWN0b3I8c3RkOjpyZWZlcmVuY2Vfd3JhcHBlcjxjb25z
dCBDb21tYW5kQnVmZmVyPj4mJiBjb21tYW5kCiB7CiAgICAgLy8gaHR0cHM6Ly9ncHV3ZWIuZ2l0
aHViLmlvL2dwdXdlYi8jZG9tLWdwdXF1ZXVlLXN1Ym1pdAogCi0gICAgaWYgKCF2YWxpZGF0ZVN1
Ym1pdCgpKSB7CisgICAgaWYgKCF2YWxpZGF0ZVN1Ym1pdChjb21tYW5kcykpIHsKICAgICAgICAg
bV9kZXZpY2UuZ2VuZXJhdGVBVmFsaWRhdGlvbkVycm9yKCJWYWxpZGF0aW9uIGZhaWx1cmUuIl9z
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTE1NSw3ICsxNTksOCBAQCBzdGF0aWMgYm9v
bCB2YWxpZGF0ZVdyaXRlQnVmZmVySW5pdGlhbChzaXplX3Qgc2l6ZSkKIAogYm9vbCBRdWV1ZTo6
dmFsaWRhdGVXcml0ZUJ1ZmZlcihjb25zdCBCdWZmZXImIGJ1ZmZlciwgdWludDY0X3QgYnVmZmVy
T2Zmc2V0LCBzaXplX3Qgc2l6ZSkgY29uc3QKIHsKLSAgICAvLyBGSVhNRTogImJ1ZmZlciBpcyB2
YWxpZCB0byB1c2Ugd2l0aCB0aGlzLiIKKyAgICBpZiAoIWlzVmFsaWRUb1VzZVdpdGgoYnVmZmVy
LCAqdGhpcykpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChidWZmZXIuc3RhdGUo
KSAhPSBCdWZmZXI6OlN0YXRlOjpVbm1hcHBlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5oIGIvU291
cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5oCmluZGV4IDFlNTFmMWEyYmIz
MDBkMTIyOTlkMTZkNmU0OTE0ODQ4MzE2NzNhNTQuLmEwZmRhNzEwOGJjMWUwOTkxNDllYzgxMGEx
ODFjYjkzM2MxNTUyYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlckJ1
bmRsZUVuY29kZXIuaAorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNv
ZGVyLmgKQEAgLTgwLDcgKzgwLDkgQEAgcHJpdmF0ZToKIAogICAgIGJvb2wgdmFsaWRhdGVQb3BE
ZWJ1Z0dyb3VwKCkgY29uc3Q7CiAKLSAgICBjb25zdCBpZDxNVExJbmRpcmVjdENvbW1hbmRCdWZm
ZXI+IG1faW5kaXJlY3RDb21tYW5kQnVmZmVyIHsgbmlsIH07CisgICAgdm9pZCBtYWtlSW52YWxp
ZCgpIHsgbV9pbmRpcmVjdENvbW1hbmRCdWZmZXIgPSBuaWw7IH0KKworICAgIGlkPE1UTEluZGly
ZWN0Q29tbWFuZEJ1ZmZlcj4gbV9pbmRpcmVjdENvbW1hbmRCdWZmZXIgeyBuaWwgfTsKIAogICAg
IHVpbnQ2NF90IG1fZGVidWdHcm91cFN0YWNrU2l6ZSB7IDAgfTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rlci5tbSBiL1NvdXJjZS9XZWJHUFUv
V2ViR1BVL1JlbmRlckJ1bmRsZUVuY29kZXIubW0KaW5kZXggNzQ5YzFmYzk2MGM1OWM3MTQyYTc5
YTYwYWMwNTRmZGM5MjM5NTIzYi4uMjA5YTU4MWZkZDQ5MDU1NzhkY2YxMjBhZGEyMTljZWVhMzRi
NzUwOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyQnVuZGxlRW5jb2Rl
ci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJCdW5kbGVFbmNvZGVyLm1tCkBA
IC0xMTUsNyArMTE1LDcgQEAgdm9pZCBSZW5kZXJCdW5kbGVFbmNvZGVyOjpwb3BEZWJ1Z0dyb3Vw
KCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgaWYgKCF2YWxpZGF0ZVBvcERlYnVnR3JvdXAoKSkg
ewotICAgICAgICAvLyBGSVhNRTogIm1ha2UgdGhpcyBpbnZhbGlkLCBhbmQgc3RvcC4iCisgICAg
ICAgIG1ha2VJbnZhbGlkKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLmggYi9Tb3VyY2UvV2ViR1BV
L1dlYkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5oCmluZGV4IDk1N2NmZjZiYjEzY2IwZjE2ZGNjZjQ4
YjE0MzgxOThiY2I4MTNjMWIuLmNiZGJlYmZmMDg3MzM0YzNlM2Y3NTg5MGEzMWNlNmMyZmFmZDNm
ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1JlbmRlclBhc3NFbmNvZGVyLmgK
KysrIGIvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVuZGVyUGFzc0VuY29kZXIuaApAQCAtOTEsNyAr
OTEsOSBAQCBwcml2YXRlOgogCiAgICAgYm9vbCB2YWxpZGF0ZVBvcERlYnVnR3JvdXAoKSBjb25z
dDsKIAotICAgIGNvbnN0IGlkPE1UTFJlbmRlckNvbW1hbmRFbmNvZGVyPiBtX3JlbmRlckNvbW1h
bmRFbmNvZGVyIHsgbmlsIH07CisgICAgdm9pZCBtYWtlSW52YWxpZCgpIHsgbV9yZW5kZXJDb21t
YW5kRW5jb2RlciA9IG5pbDsgfQorCisgICAgaWQ8TVRMUmVuZGVyQ29tbWFuZEVuY29kZXI+IG1f
cmVuZGVyQ29tbWFuZEVuY29kZXIgeyBuaWwgfTsKIAogICAgIHVpbnQ2NF90IG1fZGVidWdHcm91
cFN0YWNrU2l6ZSB7IDAgfTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvUmVu
ZGVyUGFzc0VuY29kZXIubW0gYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9SZW5kZXJQYXNzRW5jb2Rl
ci5tbQppbmRleCAyYjg4YzZmY2FkYWRjMGRhMTE2MzcyZDdhNzBlYzJlYzVhM2NlYzFkLi5jYmJj
MTI0MzJiOWEwMmQxNzVjOTU4MzAwYjJhMWE4NmM5ZWEwOTE3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViR1BVL1dlYkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dl
YkdQVS9SZW5kZXJQYXNzRW5jb2Rlci5tbQpAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgUmVuZGVy
UGFzc0VuY29kZXI6OnBvcERlYnVnR3JvdXAoKQogICAgICAgICByZXR1cm47CiAKICAgICBpZiAo
IXZhbGlkYXRlUG9wRGVidWdHcm91cCgpKSB7Ci0gICAgICAgIC8vIEZJWE1FOiAibWFrZSB0aGlz
IGludmFsaWQsIGFuZCBzdG9wLiIKKyAgICAgICAgbWFrZUludmFsaWQoKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2FtcGxlci5t
bSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1NhbXBsZXIubW0KaW5kZXggMGQyN2VmZGU0NWFmNTc2
YjQzNTQwN2JiMjI1MTJmOThjNDI1YjkxZi4uZmZjODNlNjlhM2U3YmQwMDk0MTJmZDkwNDliNGRk
MzBjODhlMmQ3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvU2FtcGxlci5tbQor
KysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9TYW1wbGVyLm1tCkBAIC0zMiwxMSArMzIsMTIgQEAK
IAogbmFtZXNwYWNlIFdlYkdQVSB7CiAKLXN0YXRpYyBib29sIHZhbGlkYXRlQ3JlYXRlU2FtcGxl
cihEZXZpY2UmLCBjb25zdCBXR1BVU2FtcGxlckRlc2NyaXB0b3ImIGRlc2NyaXB0b3IpCitzdGF0
aWMgYm9vbCB2YWxpZGF0ZUNyZWF0ZVNhbXBsZXIoRGV2aWNlJiBkZXZpY2UsIGNvbnN0IFdHUFVT
YW1wbGVyRGVzY3JpcHRvciYgZGVzY3JpcHRvcikKIHsKICAgICAvLyBodHRwczovL2dwdXdlYi5n
aXRodWIuaW8vZ3B1d2ViLyNhYnN0cmFjdC1vcGRlZi12YWxpZGF0aW5nLWdwdXNhbXBsZXJkZXNj
cmlwdG9yCiAKLSAgICAvLyBGSVhNRTogImRldmljZSBpcyB2YWxpZC4iCisgICAgaWYgKCFkZXZp
Y2UuaXNWYWxpZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoc3RkOjppc25h
bihkZXNjcmlwdG9yLmxvZE1pbkNsYW1wKSB8fCBkZXNjcmlwdG9yLmxvZE1pbkNsYW1wIDwgMCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkdQVS9XZWJHUFUv
VGV4dHVyZS5tbSBiL1NvdXJjZS9XZWJHUFUvV2ViR1BVL1RleHR1cmUubW0KaW5kZXggM2I0ODgz
ZjI4ZjdiOGFiYzg1MGU2ZGZmYjQ1NGM3YzMzYzE0YzM2Yy4uNTMwYjE1YzljYTZkMDg2YmYxZGEz
MzQ1OTY1OTNlMzhlZTJhMDk0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkdQVS9XZWJHUFUvVGV4
dHVyZS5tbQorKysgYi9Tb3VyY2UvV2ViR1BVL1dlYkdQVS9UZXh0dXJlLm1tCkBAIC0xMjI4LDcg
KzEyMjgsOCBAQCBzdGF0aWMgYm9vbCB0ZXh0dXJlVmlld0Zvcm1hdENvbXBhdGlibGUoV0dQVVRl
eHR1cmVGb3JtYXQgZm9ybWF0MSwgV0dQVVRleHR1cmVGbwogCiBib29sIERldmljZTo6dmFsaWRh
dGVDcmVhdGVUZXh0dXJlKGNvbnN0IFdHUFVUZXh0dXJlRGVzY3JpcHRvciYgZGVzY3JpcHRvciwg
Y29uc3QgVmVjdG9yPFdHUFVUZXh0dXJlRm9ybWF0PiYgdmlld0Zvcm1hdHMpCiB7Ci0gICAgLy8g
RklYTUU6ICJ0aGlzIG11c3QgYmUgYSB2YWxpZCBHUFVEZXZpY2UuIgorICAgIGlmICghaXNWYWxp
ZCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBpZiAoIWRlc2NyaXB0b3IudXNhZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTE5ODUsNyArMTk4Niw2IEBAIFJlZjxUZXh0dXJl
PiBEZXZpY2U6OmNyZWF0ZVRleHR1cmUoY29uc3QgV0dQVVRleHR1cmVEZXNjcmlwdG9yJiBkZXNj
cmlwdG9yKQogCiAgICAgaWYgKCF2YWxpZGF0ZUNyZWF0ZVRleHR1cmUoZGVzY3JpcHRvciwgdmll
d0Zvcm1hdHMpKSB7CiAgICAgICAgIGdlbmVyYXRlQVZhbGlkYXRpb25FcnJvcigiVmFsaWRhdGlv
biBmYWlsdXJlLiJfcyk7Ci0gICAgICAgIC8vIEZJWE1FOiAiUmV0dXJuIGEgbmV3IGludmFsaWQg
R1BVVGV4dHVyZS4iCiAgICAgICAgIHJldHVybiBUZXh0dXJlOjpjcmVhdGVJbnZhbGlkKCp0aGlz
KTsKICAgICB9CiAKQEAgLTIxNDQsNyArMjE0NCw4IEBAIHVpbnQzMl90IFRleHR1cmU6OmFycmF5
TGF5ZXJDb3VudCgpIGNvbnN0CiAKIGJvb2wgVGV4dHVyZTo6dmFsaWRhdGVDcmVhdGVWaWV3KGNv
bnN0IFdHUFVUZXh0dXJlVmlld0Rlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIGNvbnN0CiB7Ci0gICAg
Ly8gRklYTUU6ICJ0aGlzIGlzIHZhbGlkIgorICAgIGlmICghaXNWYWxpZCgpKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKICAgICBzd2l0Y2ggKGRlc2NyaXB0b3IuYXNwZWN0KSB7CiAgICAgY2Fz
ZSBXR1BVVGV4dHVyZUFzcGVjdF9BbGw6CkBAIC0yNDI3LDcgKzI0MjgsOCBAQCBib29sIFRleHR1
cmU6OnZhbGlkYXRlSW1hZ2VDb3B5VGV4dHVyZShjb25zdCBXR1BVSW1hZ2VDb3B5VGV4dHVyZSYg
aW1hZ2VDb3B5VGV4dAogCiAgICAgdWludDMyX3QgYmxvY2tIZWlnaHQgPSBUZXh0dXJlOjp0ZXhl
bEJsb2NrSGVpZ2h0KGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlKS5kZXNjcmlwdG9y
KCkuZm9ybWF0KTsKIAotICAgIC8vIEZJWE1FOiAiaW1hZ2VDb3B5VGV4dHVyZS50ZXh0dXJlIG11
c3QgYmUgYSB2YWxpZCBHUFVUZXh0dXJlLiIKKyAgICBpZiAoIWZyb21BUEkoaW1hZ2VDb3B5VGV4
dHVyZS50ZXh0dXJlKS5pc1ZhbGlkKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlm
IChpbWFnZUNvcHlUZXh0dXJlLm1pcExldmVsID49IGZyb21BUEkoaW1hZ2VDb3B5VGV4dHVyZS50
ZXh0dXJlKS5kZXNjcmlwdG9yKCkubWlwTGV2ZWxDb3VudCkKICAgICAgICAgcmV0dXJuIGZhbHNl
Owo=
</data>

          </attachment>
      

    </bug>

</bugzilla>