<?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>226034</bug_id>
          
          <creation_ts>2021-05-20 11:50:59 -0700</creation_ts>
          <short_desc>[GPUP][MSE] QuotaExceededError Exception not thrown even if the sum of totalTrackBufferSize and appendBuffer size exceeds maximumBufferSize</short_desc>
          <delta_ts>2021-06-07 00:55:04 -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>Media</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=225630</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=226711</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Peng Liu">peng.liu6</reporter>
          <assigned_to name="Jean-Yves Avenard [:jya]">jean-yves.avenard</assigned_to>
          <cc>calvaris</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>jean-yves.avenard</cc>
    
    <cc>jer.noble</cc>
    
    <cc>peng.liu6</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1762066</commentid>
    <comment_count>0</comment_count>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-05-20 11:50:59 -0700</bug_when>
    <thetext>Follow up bug 225630.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764440</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-05-27 11:51:17 -0700</bug_when>
    <thetext>&lt;rdar://problem/78579904&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764679</commentid>
    <comment_count>2</comment_count>
      <attachid>429986</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-05-27 22:35:52 -0700</bug_when>
    <thetext>Created attachment 429986
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764692</commentid>
    <comment_count>3</comment_count>
      <attachid>429986</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-05-27 23:06:26 -0700</bug_when>
    <thetext>Comment on attachment 429986
Patch

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

&gt; Source/WebKit/ChangeLog:9
&gt; +        `SourceBufferPrivateRemote::totalTrackBufferSizeInBytes()`. We have to use

Why not return the total track buffer size from the previous append buffer operation?
It&apos;s known then and won&apos;t change after that.

The total calculations can be calculated at the end of some operations (appendBuffer, remove). The remove blocking the main thread while a sync call is occurring to a different process.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1764907</commentid>
    <comment_count>4</comment_count>
      <attachid>429986</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-05-28 13:32:59 -0700</bug_when>
    <thetext>Comment on attachment 429986
Patch

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

&gt;&gt; Source/WebKit/ChangeLog:9
&gt;&gt; +        `SourceBufferPrivateRemote::totalTrackBufferSizeInBytes()`. We have to use
&gt; 
&gt; Why not return the total track buffer size from the previous append buffer operation?
&gt; It&apos;s known then and won&apos;t change after that.
&gt; 
&gt; The total calculations can be calculated at the end of some operations (appendBuffer, remove). The remove blocking the main thread while a sync call is occurring to a different process.

`SourceBuffer::appendBuffer()` calls `SourceBuffer::appendBufferInternal()`, which in turn calls `SourceBufferPrivate::evictCodedFrames()`. It may change the return value of `SourceBufferPrivate::totalTrackBufferSizeInBytes()`. And all those operations happen in the same run loop.

Currently, we implement `SourceBufferPrivateRemote::evictCodedFrames()` with a synchronous IPC message. We can reuse this synchronous IPC message to &quot;fetch&quot; the latest `totalTrackBufferSizeInBytes` from the GPU Process. Because currently only `SourceBuffer::appendBufferInternal()` calls `SourceBufferPrivate::totalTrackBufferSizeInBytes()`, that will work.

I did not choose this approach because we may use `SourceBufferPrivate::totalTrackBufferSizeInBytes()` in other places in the future. As you mentioned, we have to make sure the calculation is done correctly in all operations that may change `totalTrackBufferSizeInBytes`, and we need to make sure there isn’t any timing issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766717</commentid>
    <comment_count>5</comment_count>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-04 02:20:10 -0700</bug_when>
    <thetext>(In reply to Peng Liu from comment #4)

&gt; I did not choose this approach because we may use
&gt; `SourceBufferPrivate::totalTrackBufferSizeInBytes()` in other places in the
&gt; future. As you mentioned, we have to make sure the calculation is done
&gt; correctly in all operations that may change `totalTrackBufferSizeInBytes`,
&gt; and we need to make sure there isn’t any timing issue.

There can&apos;t be timing issue because by spec we can only have a single source buffer operation going at a given time.

That is, you can&apos;t call remove or appendBuffer or modify anything related to the source buffer while updating attribute is true.

So caching the value of the source buffer size at the end of these operations is safe.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766740</commentid>
    <comment_count>6</comment_count>
      <attachid>430570</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-04 05:11:15 -0700</bug_when>
    <thetext>Created attachment 430570
Patch

Cache the size of the remote source buffer, we do so without adding an extra sync dispatch, instead amending existing calls to include totalTrackBufferSizeInBytes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766800</commentid>
    <comment_count>7</comment_count>
      <attachid>430570</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2021-06-04 09:28:23 -0700</bug_when>
    <thetext>Comment on attachment 430570
Patch

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

&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:494
&gt; -    m_private-&gt;evictCodedFrames(size, m_pendingAppendData.capacity(), maximumBufferSize(), m_source-&gt;currentTime(), m_source-&gt;duration(), m_source-&gt;isEnded());
&gt; +    m_private-&gt;evictCodedFrames(size, m_pendingAppendData.size(), maximumBufferSize(), m_source-&gt;currentTime(), m_source-&gt;duration(), m_source-&gt;isEnded());
&gt;  
&gt;      // 5. If the buffer full flag equals true, then throw a QuotaExceededError exception and abort these step.
&gt; -    if (m_private-&gt;bufferFull() || m_private-&gt;totalTrackBufferSizeInBytes() + m_pendingAppendData.capacity() + size &gt;= maximumBufferSize()) {
&gt; +    if (m_private-&gt;bufferFull() || m_private-&gt;totalTrackBufferSizeInBytes() + m_pendingAppendData.size() + size &gt;= maximumBufferSize()) {

Good catch!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766810</commentid>
    <comment_count>8</comment_count>
      <attachid>430570</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-06-04 09:37:33 -0700</bug_when>
    <thetext>Comment on attachment 430570
Patch

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

&gt;&gt; Source/WebCore/Modules/mediasource/SourceBuffer.cpp:494
&gt;&gt; +    if (m_private-&gt;bufferFull() || m_private-&gt;totalTrackBufferSizeInBytes() + m_pendingAppendData.size() + size &gt;= maximumBufferSize()) {
&gt; 
&gt; Good catch!

Maybe we need to modify the test to cover that?

&gt; Source/WebCore/platform/graphics/SourceBufferPrivate.h:91
&gt; +    WEBCORE_EXPORT virtual uint64_t totalTrackBufferSizeInBytes() const;

Hmm, my major concern was that `totalTrackBufferSizeInBytes()` is a public method, so `SourceBuffer` class may call it in other places (in the future), where `totalTrackBufferSizeInBytes()` may return a stale value when `SourceBufferPrivate` is modifying track buffers in another process. It seems not an issue for now though.
Is it a good idea to add a comment for `totalTrackBufferSizeInBytes()` about that?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1766990</commentid>
    <comment_count>9</comment_count>
      <attachid>430570</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-04 16:27:36 -0700</bug_when>
    <thetext>Comment on attachment 430570
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/SourceBufferPrivate.h:91
&gt;&gt; +    WEBCORE_EXPORT virtual uint64_t totalTrackBufferSizeInBytes() const;
&gt; 
&gt; Hmm, my major concern was that `totalTrackBufferSizeInBytes()` is a public method, so `SourceBuffer` class may call it in other places (in the future), where `totalTrackBufferSizeInBytes()` may return a stale value when `SourceBufferPrivate` is modifying track buffers in another process. It seems not an issue for now though.
&gt; Is it a good idea to add a comment for `totalTrackBufferSizeInBytes()` about that?

As it&apos;s used, and following these changes ; the value read in the web content process will never be stale.
Every method that could lead to the source buffer size to change causes the cache value to be updated. So even future use of this method will return an up to  date value</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767011</commentid>
    <comment_count>10</comment_count>
      <attachid>430570</attachid>
    <who name="Peng Liu">peng.liu6</who>
    <bug_when>2021-06-04 17:40:58 -0700</bug_when>
    <thetext>Comment on attachment 430570
Patch

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

&gt;&gt;&gt; Source/WebCore/platform/graphics/SourceBufferPrivate.h:91
&gt;&gt;&gt; +    WEBCORE_EXPORT virtual uint64_t totalTrackBufferSizeInBytes() const;
&gt;&gt; 
&gt;&gt; Hmm, my major concern was that `totalTrackBufferSizeInBytes()` is a public method, so `SourceBuffer` class may call it in other places (in the future), where `totalTrackBufferSizeInBytes()` may return a stale value when `SourceBufferPrivate` is modifying track buffers in another process. It seems not an issue for now though.
&gt;&gt; Is it a good idea to add a comment for `totalTrackBufferSizeInBytes()` about that?
&gt; 
&gt; As it&apos;s used, and following these changes ; the value read in the web content process will never be stale.
&gt; Every method that could lead to the source buffer size to change causes the cache value to be updated. So even future use of this method will return an up to  date value

But the values are sent back to the WebContent process asynchronously, for example, in the `RemoveCodedFrames` message. If the `SourceBuffer` calls `totalTrackBufferSizeInBytes()` before the response coming back, the cached value will be stale. It is kind like &quot;eventual consistency&quot;. Probably it is good enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767021</commentid>
    <comment_count>11</comment_count>
      <attachid>430570</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-04 18:15:29 -0700</bug_when>
    <thetext>Comment on attachment 430570
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/SourceBufferPrivate.h:91
&gt;&gt;&gt;&gt; +    WEBCORE_EXPORT virtual uint64_t totalTrackBufferSizeInBytes() const;
&gt;&gt;&gt; 
&gt;&gt;&gt; Hmm, my major concern was that `totalTrackBufferSizeInBytes()` is a public method, so `SourceBuffer` class may call it in other places (in the future), where `totalTrackBufferSizeInBytes()` may return a stale value when `SourceBufferPrivate` is modifying track buffers in another process. It seems not an issue for now though.
&gt;&gt;&gt; Is it a good idea to add a comment for `totalTrackBufferSizeInBytes()` about that?
&gt;&gt; 
&gt;&gt; As it&apos;s used, and following these changes ; the value read in the web content process will never be stale.
&gt;&gt; Every method that could lead to the source buffer size to change causes the cache value to be updated. So even future use of this method will return an up to  date value
&gt; 
&gt; But the values are sent back to the WebContent process asynchronously, for example, in the `RemoveCodedFrames` message. If the `SourceBuffer` calls `totalTrackBufferSizeInBytes()` before the response coming back, the cached value will be stale. It is kind like &quot;eventual consistency&quot;. Probably it is good enough.

But RemoveCodedFrames is asynchronous to start with. So checking the size of the source buffer before the operation has been completed is nonsensical.
It is only useful once we know the operation has completed,

That RemoveCodedFrames happened to be done synchronously before the GPU process existed was an implementation details. 
Just like reading a JS value outside a stable state is undefined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767022</commentid>
    <comment_count>12</comment_count>
      <attachid>430570</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-04 18:15:30 -0700</bug_when>
    <thetext>Comment on attachment 430570
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/platform/graphics/SourceBufferPrivate.h:91
&gt;&gt;&gt;&gt; +    WEBCORE_EXPORT virtual uint64_t totalTrackBufferSizeInBytes() const;
&gt;&gt;&gt; 
&gt;&gt;&gt; Hmm, my major concern was that `totalTrackBufferSizeInBytes()` is a public method, so `SourceBuffer` class may call it in other places (in the future), where `totalTrackBufferSizeInBytes()` may return a stale value when `SourceBufferPrivate` is modifying track buffers in another process. It seems not an issue for now though.
&gt;&gt;&gt; Is it a good idea to add a comment for `totalTrackBufferSizeInBytes()` about that?
&gt;&gt; 
&gt;&gt; As it&apos;s used, and following these changes ; the value read in the web content process will never be stale.
&gt;&gt; Every method that could lead to the source buffer size to change causes the cache value to be updated. So even future use of this method will return an up to  date value
&gt; 
&gt; But the values are sent back to the WebContent process asynchronously, for example, in the `RemoveCodedFrames` message. If the `SourceBuffer` calls `totalTrackBufferSizeInBytes()` before the response coming back, the cached value will be stale. It is kind like &quot;eventual consistency&quot;. Probably it is good enough.

But RemoveCodedFrames is asynchronous to start with. So checking the size of the source buffer before the operation has been completed is nonsensical.
It is only useful once we know the operation has completed,

That RemoveCodedFrames happened to be done synchronously before the GPU process existed was an implementation details. 
Just like reading a JS value outside a stable state is undefined</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767257</commentid>
    <comment_count>13</comment_count>
      <attachid>430570</attachid>
    <who name="Jean-Yves Avenard [:jya]">jean-yves.avenard</who>
    <bug_when>2021-06-06 16:39:07 -0700</bug_when>
    <thetext>Comment on attachment 430570
Patch

unrelated failure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1767260</commentid>
    <comment_count>14</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2021-06-06 17:01:57 -0700</bug_when>
    <thetext>Committed r278539 (238537@main): &lt;https://commits.webkit.org/238537@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 430570.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>429986</attachid>
            <date>2021-05-27 22:35:52 -0700</date>
            <delta_ts>2021-06-03 17:09:38 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226034-20210527223551.patch</filename>
            <type>text/plain</type>
            <size>12025</size>
            <attacher name="Peng Liu">peng.liu6</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MTc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYzc1YjUyOGY4ZDM5NTQ2
M2FhODdkZTlkMGMxMDExMDA4NWFlMmY4Yi4uN2JmY2JjNWUxYjdmYzJhNjhiZGI1NmI2ZjkxYzE2
NDU0ZmY3Nzk0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDIxLTA1LTI3ICBQZW5n
IExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVVBdW01TRV0gUXVvdGFF
eGNlZWRlZEVycm9yIEV4Y2VwdGlvbiBub3QgdGhyb3duIGV2ZW4gaWYgdGhlIHN1bSBvZiB0b3Rh
bFRyYWNrQnVmZmVyU2l6ZSBhbmQgYXBwZW5kQnVmZmVyIHNpemUgZXhjZWVkcyBtYXhpbXVtQnVm
ZmVyU2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjI2MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmg6CisgICAgICAgIChXZWJD
b3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlOjp0aW1lc3RhbXBPZmZzZXQgY29uc3QpOiBDaGFuZ2Ug
dGhpcyBmdW5jdGlvbiB0bworICAgICAgICBiZSB2aXJ0dWFsIHNvIHRoYXQgYFNvdXJjZUJ1ZmZl
clByaXZhdGVSZW1vdGVgIGNhbiBvdmVycmlkZSBpdCB0byBzdXBwb3J0CisgICAgICAgIHJ1bm5p
bmcgYFNvdXJjZUJ1ZmZlclByaXZhdGVgIGluIHRoZSBHUFUgcHJvY2Vzcy4KKwogMjAyMS0wNS0y
NyAgV2Vuc29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWZh
Y3RvciBzb21lIGRhdGEgZGV0ZWN0b3IgY29kZSBpbiBXZWJDb3JlOjpGcmFtZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRl
eCBiZmEyMTBmOGNiYzViNTRlMTA5MGE5ODhiYjhhZDIwNjZjZjUwNzJmLi5hNzJhNTIxY2E5N2I2
YzMzYmU3YTQ1NmRhYmVjOTM4ZmRkMzYxOTcwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDIzIEBACisy
MDIxLTA1LTI3ICBQZW5nIExpdSAgPHBlbmcubGl1NkBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQ
VVBdW01TRV0gUXVvdGFFeGNlZWRlZEVycm9yIEV4Y2VwdGlvbiBub3QgdGhyb3duIGV2ZW4gaWYg
dGhlIHN1bSBvZiB0b3RhbFRyYWNrQnVmZmVyU2l6ZSBhbmQgYXBwZW5kQnVmZmVyIHNpemUgZXhj
ZWVkcyBtYXhpbXVtQnVmZmVyU2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjI2MDM0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgQWRkIGEgc3luY2hyb25vdXMgSVBDIG1lc3NhZ2UgYFRvdGFsVHJhY2tC
dWZmZXJTaXplSW5CeXRlc2AgdG8gaW1wbGVtZW50CisgICAgICAgIGBTb3VyY2VCdWZmZXJQcml2
YXRlUmVtb3RlOjp0b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMoKWAuIFdlIGhhdmUgdG8gdXNl
CisgICAgICAgIGEgc3luY2hyb25vdXMgbWVzc2FnZSBiZWNhdXNlIGBTb3VyY2VCdWZmZXI6OmFw
cGVuZEJ1ZmZlcigpYCBuZWVkIGl0cworICAgICAgICByZXN1bHQgaW4gdGhlIHNhbWUgcnVuLWxv
b3AuCisKKyAgICAgICAgKiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnRvdGFsVHJh
Y2tCdWZmZXJTaXplSW5CeXRlcyk6CisgICAgICAgICogR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVT
b3VyY2VCdWZmZXJQcm94eS5oOgorICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291
cmNlQnVmZmVyUHJveHkubWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVk
aWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlNvdXJj
ZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlcyBjb25zdCk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90
ZS5oOgorCiAyMDIxLTA1LTI3ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtp
dC5vcmc+CiAKICAgICAgICAgUmV2ZXJ0IHIyNzczNDQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaAppbmRleCAxYjkxMjYz
NWVjZWI3MmI5ZTdmODUyMmNkNDlkMzgyYjRmODc0MTRmLi5jZDMxMzA0N2RkOTVkMTFhNmY2MTA1
OTkzNTAzZDhmZjIzYjVmZjM4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oCkBAIC05NSw2ICs5NSw3IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0QXBwZW5kV2luZG93RW5kKGNvbnN0IE1lZGlhVGltZSYg
YXBwZW5kV2luZG93RW5kKSB7IG1fYXBwZW5kV2luZG93RW5kID0gYXBwZW5kV2luZG93RW5kOyB9
CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHNlZWtUb1RpbWUoY29uc3QgTWVkaWFU
aW1lJik7CiAgICAgV0VCQ09SRV9FWFBPUlQgdmlydHVhbCB2b2lkIHVwZGF0ZVRyYWNrSWRzKFZl
Y3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmluZywgQXRvbVN0cmluZz4+JiYgdHJhY2tJZFBhaXJzKTsK
KyAgICBXRUJDT1JFX0VYUE9SVCB2aXJ0dWFsIHVpbnQ2NF90IHRvdGFsVHJhY2tCdWZmZXJTaXpl
SW5CeXRlcygpIGNvbnN0OwogCiAgICAgdm9pZCBzZXRDbGllbnQoU291cmNlQnVmZmVyUHJpdmF0
ZUNsaWVudCogY2xpZW50KSB7IG1fY2xpZW50ID0gY2xpZW50OyB9CiAgICAgdm9pZCBzZXRJc0F0
dGFjaGVkKGJvb2wgZmxhZykgeyBtX2lzQXR0YWNoZWQgPSBmbGFnOyB9CkBAIC0xMDgsNyArMTA5
LDYgQEAgcHVibGljOgogICAgIGJvb2wgaGFzVmlkZW8oKSBjb25zdCB7IHJldHVybiBtX2hhc1Zp
ZGVvOyB9CiAKICAgICBNZWRpYVRpbWUgdGltZXN0YW1wT2Zmc2V0KCkgY29uc3QgeyByZXR1cm4g
bV90aW1lc3RhbXBPZmZzZXQ7IH0KLSAgICB1aW50NjRfdCB0b3RhbFRyYWNrQnVmZmVyU2l6ZUlu
Qnl0ZXMoKSBjb25zdDsKIAogICAgIHN0cnVjdCBUcmFja0J1ZmZlciB7CiAgICAgICAgIFdURl9N
QUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BV
UHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0
L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCmluZGV4IDc0NDVm
YmVhMzk2Mjg2ZTk4ZGZlMGJhMmUzMjIxOTdmNjMwMDEzYzYuLjZhYTU5ZDQwNjY1ODhmOGY2YTFh
ODIwN2IwMTllYTllNzg4NTFkZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vz
cy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9H
UFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcApAQCAtMzYyLDYgKzM2
MiwxMSBAQCB2b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjplbnF1ZXVlZFNhbXBsZXNGb3JU
cmFja0lEKFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aQogICAgIG1fc291cmNlQnVmZmVyUHJpdmF0
ZS0+YnVmZmVyZWRTYW1wbGVzRm9yVHJhY2tJZChtX3RyYWNrSWRzLmdldCh0cmFja1ByaXZhdGVS
ZW1vdGVJZGVudGlmaWVyKSwgV1RGTW92ZShjb21wbGV0aW9uSGFuZGxlcikpOwogfQogCit2b2lk
IFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Ojp0b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMoQ29t
cGxldGlvbkhhbmRsZXI8dm9pZCh1aW50NjRfdCk+JiYgY29tcGxldGlvbkhhbmRsZXIpCit7Cisg
ICAgY29tcGxldGlvbkhhbmRsZXIobV9zb3VyY2VCdWZmZXJQcml2YXRlLT50b3RhbFRyYWNrQnVm
ZmVyU2l6ZUluQnl0ZXMoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAogCiAjZW5kaWYg
Ly8gRU5BQkxFKEdQVV9QUk9DRVNTKSAmJiBFTkFCTEUoTUVESUFfU09VUkNFKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5
LmggYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJv
eHkuaAppbmRleCBjZWQ1ZjAxNzQ4N2E0YjhjZjE0MjkwY2I3OTE5NDdhZmU4YjE4NTI0Li45Zjhl
MmIzYWViMDUwMzQ2NzA4NjFkMWZhZmM0MDM4Njg0OWU5NzRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuaAorKysgYi9T
b3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuaApA
QCAtMTEyLDYgKzExMiw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCB1cGRhdGVUcmFja0lkcyhWZWN0
b3I8c3RkOjpwYWlyPFRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIsIFRyYWNrUHJpdmF0ZVJl
bW90ZUlkZW50aWZpZXI+PiYmKTsKICAgICB2b2lkIGJ1ZmZlcmVkU2FtcGxlc0ZvclRyYWNrSWQo
VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllciwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChWZWN0
b3I8U3RyaW5nPiYmKT4mJik7CiAgICAgdm9pZCBlbnF1ZXVlZFNhbXBsZXNGb3JUcmFja0lEKFRy
YWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVjdG9y
PFN0cmluZz4mJik+JiYpOworICAgIHZvaWQgdG90YWxUcmFja0J1ZmZlclNpemVJbkJ5dGVzKENv
bXBsZXRpb25IYW5kbGVyPHZvaWQodWludDY0X3QpPiYmKTsKIAogICAgIFdlYWtQdHI8R1BVQ29u
bmVjdGlvblRvV2ViUHJvY2Vzcz4gbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzOwogICAgIFJlbW90
ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIgbV9pZGVudGlmaWVyOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Lm1lc3NhZ2Vz
LmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclBy
b3h5Lm1lc3NhZ2VzLmluCmluZGV4IGVkZjZlZTg2ZGVjYmYwNGExMDAyOWYzYjQ2ODFiZGYwZjBk
ZTNjYTIuLmNmMzBkYWM1ZWQ1ZDA1ZTY2YTBjNTVmY2ZjMjBhZDAxOTc3OWMyOWIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94
eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3Rl
U291cmNlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTU1LDYgKzU1LDcgQEAgbWVzc2FnZXMg
LT4gUmVtb3RlU291cmNlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CiAgICAgVXBkYXRlVHJh
Y2tJZHMoVmVjdG9yPHN0ZDo6cGFpcjxXZWJLaXQ6OlRyYWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZp
ZXIsIFdlYktpdDo6VHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllcj4+IGlkZW50aWZpZXJQYWly
cykKICAgICBCdWZmZXJlZFNhbXBsZXNGb3JUcmFja0lkKFdlYktpdDo6VHJhY2tQcml2YXRlUmVt
b3RlSWRlbnRpZmllciByZW1vdGVJZGVudGlmaWVyKSAtPiAoVmVjdG9yPFN0cmluZz4gc2FtcGxl
cykgQXN5bmMKICAgICBFbnF1ZXVlZFNhbXBsZXNGb3JUcmFja0lEKFdlYktpdDo6VHJhY2tQcml2
YXRlUmVtb3RlSWRlbnRpZmllciByZW1vdGVJZGVudGlmaWVyKSAtPiAoVmVjdG9yPFN0cmluZz4g
c2FtcGxlcykgQXN5bmMKKyAgICBUb3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMoKSAtPiAodWlu
dDY0X3QgYnl0ZXMpIFN5bmNocm9ub3VzCiB9CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEvU291cmNlQnVmZmVyUHJpdmF0
ZVJlbW90ZS5jcHAKaW5kZXggMzY5NDNkYWFkYjJhNWI3ODY3MmEwODU4ZmE2NTMwYjFjZThkYzli
Ni4uODBiZDVlZTI5MDkzOTk1YjQ4YzUyODViOTM4OTI5ODBiNThhY2M0ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVt
b3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1
ZmZlclByaXZhdGVSZW1vdGUuY3BwCkBAIC0zMzksNiArMzM5LDE2IEBAIHZvaWQgU291cmNlQnVm
ZmVyUHJpdmF0ZVJlbW90ZTo6dXBkYXRlVHJhY2tJZHMoVmVjdG9yPHN0ZDo6cGFpcjxBdG9tU3Ry
aW5nLCBBdG9tCiAgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVjdGlvbigpLnNlbmQo
TWVzc2FnZXM6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpVcGRhdGVUcmFja0lkcyhpZGVudGlm
aWVyUGFpcnMpLCBtX3JlbW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIpOwogfQogCit1aW50NjRf
dCBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjp0b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMo
KSBjb25zdAoreworICAgIHVpbnQ2NF90IHRvdGFsQnl0ZXMgPSAwOworCisgICAgaWYgKG1fZ3B1
UHJvY2Vzc0Nvbm5lY3Rpb24pCisgICAgICAgIG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5l
Y3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OlRvdGFs
VHJhY2tCdWZmZXJTaXplSW5CeXRlcygpLCBNZXNzYWdlczo6UmVtb3RlU291cmNlQnVmZmVyUHJv
eHk6OlRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlczo6UmVwbHkodG90YWxCeXRlcyksIG1fcmVt
b3RlU291cmNlQnVmZmVySWRlbnRpZmllcik7CisKKyAgICByZXR1cm4gdG90YWxCeXRlczsKK30K
Kwogdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjpidWZmZXJlZFNhbXBsZXNGb3JUcmFj
a0lkKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoVmVj
dG9yPFN0cmluZz4mJik+JiYgY29tcGxldGlvbkhhbmRsZXIpCiB7CiAgICAgaWYgKCFtX2dwdVBy
b2Nlc3NDb25uZWN0aW9uKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQ
VS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuaAppbmRleCA5YWMyYWRi
ODBlYzcxYzMyMjhlYzRlOGE2ZmU0NTQzYzJlYWJlMmM0Li4yOGJmMTU1OWUwMDlmNzllNTA1MWQ1
NWMwNzc5MGE0ODEzODBjY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuaApAQCAtOTks
NiArOTksNyBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0QXBwZW5kV2luZG93RW5kKGNvbnN0IE1l
ZGlhVGltZSYpIGZpbmFsOwogICAgIHZvaWQgc2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmKSBm
aW5hbDsKICAgICB2b2lkIHVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmlu
ZywgQXRvbVN0cmluZz4+JiYpIGZpbmFsOworICAgIHVpbnQ2NF90IHRvdGFsVHJhY2tCdWZmZXJT
aXplSW5CeXRlcygpIGNvbnN0IGZpbmFsOwogCiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1faXNBY3RpdmU7IH0KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDgyNWJhYmEzMmFjMjk0MzdjMjdl
MjIxZTdmZDA1ZWY2MDFhY2JiNTYuLjg2ODcwOWJhYjFiMWE2ZTQyOTlhYWFmYjNkNWFhYTgyNzcz
YmNkNDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAyMS0wNS0yNyAgUGVuZyBMaXUgIDxwZW5n
LmxpdTZAYXBwbGUuY29tPgorCisgICAgICAgIFtHUFVQXVtNU0VdIFF1b3RhRXhjZWVkZWRFcnJv
ciBFeGNlcHRpb24gbm90IHRocm93biBldmVuIGlmIHRoZSBzdW0gb2YgdG90YWxUcmFja0J1ZmZl
clNpemUgYW5kIGFwcGVuZEJ1ZmZlciBzaXplIGV4Y2VlZHMgbWF4aW11bUJ1ZmZlclNpemUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjAzNAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIENsZWFuIHVwIHRo
ZSB0ZXN0LgorCisgICAgICAgICogbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBl
bmQtYnVmZmVyLWZ1bGwtcXVvdGEtZXhjZWVkZWQtZXJyb3ItZXhwZWN0ZWQudHh0OgorICAgICAg
ICAqIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLWJ1ZmZlci1mdWxsLXF1
b3RhLWV4Y2VlZGVkLWVycm9yLmh0bWw6CisKIDIwMjEtMDUtMjcgIEZ1amlpIEhpcm9ub3JpICA8
SGlyb25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW3J1bi13ZWJraXQtdGVzdHNdW1dp
bl0gU3RyaXAgUEhQIHN1cHBvcnQgZnJvbSB3ZWJzZXJ2ZXIKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL21lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLWJ1ZmZlci1mdWxsLXF1
b3RhLWV4Y2VlZGVkLWVycm9yLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL21lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLWJ1ZmZlci1mdWxsLXF1b3RhLWV4Y2VlZGVkLWVy
cm9yLWV4cGVjdGVkLnR4dAppbmRleCBkOTExZjllNjE2YmU0MDNiMzVlZDU5MDM0NDk0MGFjOTE4
YjI4MWEwLi5kZDI4YTM2ZGZiMTFjZWZiZDI4OWYwNTU4MmY5NDg3NzNhM2QwZWVjIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1i
dWZmZXItZnVsbC1xdW90YS1leGNlZWRlZC1lcnJvci1leHBlY3RlZC50eHQKKysrIGIvTGF5b3V0
VGVzdHMvbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtYnVmZmVyLWZ1bGwt
cXVvdGEtZXhjZWVkZWQtZXJyb3ItZXhwZWN0ZWQudHh0CkBAIC0xLDM0ICsxLDM0IEBACiAKIEVW
RU5UKHNvdXJjZW9wZW4pCiBFVkVOVCh1cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTAKK0FwcGVu
ZGluZyBQVFMgPSAwCiBFVkVOVCh1cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTEKK0FwcGVuZGlu
ZyBQVFMgPSAxCiBFVkVOVCh1cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTIKK0FwcGVuZGluZyBQ
VFMgPSAyCiBFVkVOVCh1cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTMKK0FwcGVuZGluZyBQVFMg
PSAzCiBFVkVOVCh1cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTQKK0FwcGVuZGluZyBQVFMgPSA0
CiBFVkVOVCh1cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTUKK0FwcGVuZGluZyBQVFMgPSA1CiBF
VkVOVCh1cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTYKK0FwcGVuZGluZyBQVFMgPSA2CiBFVkVO
VCh1cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTcKK0FwcGVuZGluZyBQVFMgPSA3CiBFVkVOVCh1
cGRhdGVlbmQpCi1BcHBlbmRpbmcgUFRTPTgKK0FwcGVuZGluZyBQVFMgPSA4CiBFVkVOVCh1cGRh
dGVlbmQpCi1BcHBlbmRpbmcgUFRTPTkKK0FwcGVuZGluZyBQVFMgPSA5CiBFVkVOVCh1cGRhdGVl
bmQpCi1BcHBlbmRpbmcgUFRTPTEwCitBcHBlbmRpbmcgUFRTID0gMTAKIEVWRU5UKHVwZGF0ZWVu
ZCkKLUFwcGVuZGluZyBQVFM9MTEKK0FwcGVuZGluZyBQVFMgPSAxMQogRVZFTlQodXBkYXRlZW5k
KQotQXBwZW5kaW5nIFBUUz0xMgorQXBwZW5kaW5nIFBUUyA9IDEyCiBFVkVOVCh1cGRhdGVlbmQp
CiBFWFBFQ1RFRCAoZXhjZXB0aW9uICE9ICdRdW90YUV4Y2VlZGVkRXJyb3I6IFRoZSBxdW90YSBo
YXMgYmVlbiBleGNlZWRlZC4nKSBPSwotQXBwZW5kaW5nIFBUUz0xMy0xNQorQXBwZW5kaW5nIFBU
UyA9IDEzIC0gMTUKIEVYUEVDVEVEIChleGNlcHRpb24gPT0gJ1F1b3RhRXhjZWVkZWRFcnJvcjog
VGhlIHF1b3RhIGhhcyBiZWVuIGV4Y2VlZGVkLicpIE9LCiBFTkQgT0YgVEVTVAogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1i
dWZmZXItZnVsbC1xdW90YS1leGNlZWRlZC1lcnJvci5odG1sIGIvTGF5b3V0VGVzdHMvbWVkaWEv
bWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1hcHBlbmQtYnVmZmVyLWZ1bGwtcXVvdGEtZXhjZWVk
ZWQtZXJyb3IuaHRtbAppbmRleCAxNGMxMTVhODE0MDRiMDdiMDFiYjZlNmFhYjE0NjFkYmUyYzdh
NDk3Li41YjZhZGUyM2ZiMDZhZGEyZDE2ZTFmYmM5MTViZGVhYTI0NDcwNWQ2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy9tZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWFwcGVuZC1idWZm
ZXItZnVsbC1xdW90YS1leGNlZWRlZC1lcnJvci5odG1sCisrKyBiL0xheW91dFRlc3RzL21lZGlh
L21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtYXBwZW5kLWJ1ZmZlci1mdWxsLXF1b3RhLWV4Y2Vl
ZGVkLWVycm9yLmh0bWwKQEAgLTEsNyArMSw3IEBACiA8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgog
PGhlYWQ+Ci0gICAgPHRpdGxlPm1vY2stbWVkaWEtc291cmNlPC90aXRsZT4KKyAgICA8dGl0bGU+
bWVkaWEtc291cmNlLWFwcGVuZC1idWZmZXItZnVsbC1xdW90YS1leGNlZWRlZC1lcnJvcjwvdGl0
bGU+CiAgICAgPHNjcmlwdCBzcmM9Im1vY2stbWVkaWEtc291cmNlLmpzIj48L3NjcmlwdD4KICAg
ICA8c2NyaXB0IHNyYz0iLi4vdmlkZW8tdGVzdC5qcyI+PC9zY3JpcHQ+CiAgICAgPHNjcmlwdD4K
QEAgLTE0LDcgKzE0LDcgQEAKICAgICAgICAgdmFyIHJlc3VsdEV4Y2VwdGlvbiA9IG51bGw7CiAg
ICAgICAgIGZvciAodmFyIHB0cyA9IGZpcnN0UHRzOyBwdHMgPD0gbGFzdFB0czsgcHRzKyspIHsK
ICAgICAgICAgICAgIHRyeSB7Ci0gICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCdBcHBlbmRp
bmcgUFRTPScrcHRzKTsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoJ0FwcGVuZGluZyBQ
VFMgPSAnICsgcHRzKTsKICAgICAgICAgICAgICAgICBzb3VyY2VCdWZmZXIuYXBwZW5kQnVmZmVy
KG1ha2VBU2FtcGxlKHB0cywgcHRzLCAxLCAxLCAxLCBTQU1QTEVfRkxBRy5TWU5DLCAxKSk7CiAg
ICAgICAgICAgICAgICAgYXdhaXQgd2FpdEZvcihzb3VyY2VCdWZmZXIsICd1cGRhdGVlbmQnKTsK
ICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHsKQEAgLTMzLDcgKzMzLDcgQEAKICAgICAgICAgICAg
IHNhbXBsZXMucHVzaChtYWtlQVNhbXBsZSh0aW1lLCB0aW1lLCAxLCAxLCAxLCB0aW1lID09PSBz
dGFydCA/IFNBTVBMRV9GTEFHLlNZTkMgOiBTQU1QTEVfRkxBRy5OT05FKSk7CiAKICAgICAgICAg
dHJ5IHsKLSAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgnQXBwZW5kaW5nIFBUUz0nK3N0YXJ0Kyct
JytlbmQgKTsKKyAgICAgICAgICAgIGNvbnNvbGVXcml0ZSgnQXBwZW5kaW5nIFBUUyA9ICcgKyBz
dGFydCArICcgLSAnICsgZW5kICk7CiAgICAgICAgICAgICBzb3VyY2VCdWZmZXIuYXBwZW5kQnVm
ZmVyKGNvbmNhdGVuYXRlU2FtcGxlcyhzYW1wbGVzKSk7CiAgICAgICAgICAgICBhd2FpdCB3YWl0
Rm9yKHNvdXJjZUJ1ZmZlciwgJ3VwZGF0ZWVuZCcpOwogICAgICAgICB9IGNhdGNoIChlKSB7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>430570</attachid>
            <date>2021-06-04 05:11:15 -0700</date>
            <delta_ts>2021-06-06 17:01:58 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-226034-20210604221113.patch</filename>
            <type>text/plain</type>
            <size>20306</size>
            <attacher name="Jean-Yves Avenard [:jya]">jean-yves.avenard</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjc4MzM2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDU4NWNlZTllNWQwMjMz
YjIyMmFhY2FmYjdlYTJhNzNjMzk1OWU0OS4uZTdmZjMxNzFhMzJjODRkZTk2YmQ4NGU0NzRmNmIz
Zjc0ODU2NTY2OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDIxLTA2LTA0ICBKZWFu
LVl2ZXMgQXZlbmFyZCAgPGp5YUBhcHBsZS5jb20+CisKKyAgICAgICAgW0dQVVBdW01TRV0gUXVv
dGFFeGNlZWRlZEVycm9yIEV4Y2VwdGlvbiBub3QgdGhyb3duIGV2ZW4gaWYgdGhlIHN1bSBvZiB0
b3RhbFRyYWNrQnVmZmVyU2l6ZSBhbmQgYXBwZW5kQnVmZmVyIHNpemUgZXhjZWVkcyBtYXhpbXVt
QnVmZmVyU2l6ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjI2MDM0CisgICAgICAgIHJkYXI6Ly83ODU3OTkwNAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4aXN0aW5nIG1lZGlhLXNvdXJjZS1hcHBlbmQt
YnVmZmVyLWZ1bGwtcXVvdGEtZXhjZWVkZWQtZXJyb3IuaHRtbCB0ZXN0IHdpbGwKKyAgICAgICAg
YmUgZXhlcmNpc2luZyB0aGlzIGNvZGUgb25jZSBidWcgMjI1MzY3IGhhcyBiZWVuIGZpeGVkLgor
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6U291cmNlQnVmZmVyOjphcHBlbmRCdWZmZXJJbnRlcm5hbCk6IGZseS1ieSBm
aXgsIHVzZSBzaXplIG9mIHBlbmRpbmcKKyAgICAgICAgYnVmZmVyIHJhdGhlciB0aGFuIHRoZSBj
YXBhY2l0eSBvZiB0aGUgaG9sZGluZyB2ZWN0b3IuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvU291cmNlQnVmZmVyUHJpdmF0ZS5oOiBNYWtlIHRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRl
cyBtZXRob2QgdmlydHVhbC4KKwogMjAyMS0wNi0wMyAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFA
YXBwbGUuY29tPgogCiAgICAgICAgIGZhc3QvZG9tL1dpbmRvdy9wcm9wZXJ0eS1hY2Nlc3Mtb24t
Y2FjaGVkLXdpbmRvdy1hZnRlci1mcmFtZS1yZW1vdmVkLmh0bWwgKGxheW91dC10ZXN0KSBtYXkg
Y3Jhc2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKaW5kZXggMGY4MjE2ODc3YmRhNzg2ZmQ3NmY5Y2MxMzc2NjFiZDk3ZDExMWMx
OS4uOTdmNjUwZWI3ZjY0MjM4MTMxYjFkZWM4MWJiOGRjYWEyZmUwMmQ0NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzMiBAQAorMjAyMS0wNi0wNCAgSmVhbi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUu
Y29tPgorCisgICAgICAgIFtHUFVQXVtNU0VdIFF1b3RhRXhjZWVkZWRFcnJvciBFeGNlcHRpb24g
bm90IHRocm93biBldmVuIGlmIHRoZSBzdW0gb2YgdG90YWxUcmFja0J1ZmZlclNpemUgYW5kIGFw
cGVuZEJ1ZmZlciBzaXplIGV4Y2VlZHMgbWF4aW11bUJ1ZmZlclNpemUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyNjAzNAorICAgICAgICByZGFyOi8v
Nzg1Nzk5MDQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBDYWNoZSB0aGUgc2l6ZSBvZiB0aGUgcmVtb3RlIHNvdXJjZSBidWZmZXIncyB0cmFjayBzaXpl
LiBXZSBwYXNzIGFuIGV4dHJhCisgICAgICAgIHRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlcyBh
cmd1bWVudCB0byBlYWNoIG1ldGhvZCB0aGF0IGNvdWxkIGltcGFjdAorICAgICAgICBhIHNvdXJj
ZSBidWZmZXIgc2l6ZS4KKworICAgICAgICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNl
QnVmZmVyUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVTb3VyY2VCdWZmZXJQcm94
eTo6c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKToKKyAgICAgICAgKFdlYktpdDo6
UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnJlbW92ZUNvZGVkRnJhbWVzKToKKyAgICAgICAgKFdl
YktpdDo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OmV2aWN0Q29kZWRGcmFtZXMpOgorICAgICAg
ICAqIEdQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuaDoKKyAgICAgICAg
KiBHUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluOgor
ICAgICAgICAqIFdlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUu
Y3BwOgorICAgICAgICAoV2ViS2l0OjpTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlOjphYm9ydCk6
IEFkZCBjb21tZW50IGV4cGxhaW5pbmcgb24gd2h5CisgICAgICAgIGdldHRpbmcgYW4gdXAgdG8g
ZGF0ZSB0b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMgaXNuJ3QgbmVjZXNzYXJ5IGF0IHRoaXMg
cG9pbnQuCisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnJlbW92
ZUNvZGVkRnJhbWVzKToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90
ZTo6ZXZpY3RDb2RlZEZyYW1lcyk6CisgICAgICAgIChXZWJLaXQ6OlNvdXJjZUJ1ZmZlclByaXZh
dGVSZW1vdGU6OmNsZWFyVHJhY2tCdWZmZXJzKToKKyAgICAgICAgKFdlYktpdDo6U291cmNlQnVm
ZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKToKKyAg
ICAgICAgKFdlYktpdDo6U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dG90YWxUcmFja0J1ZmZl
clNpemVJbkJ5dGVzIGNvbnN0KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3Vy
Y2VCdWZmZXJQcml2YXRlUmVtb3RlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5tZXNzYWdlcy5pbjoKKwogMjAyMS0wNi0wMyAgSmVh
bi1ZdmVzIEF2ZW5hcmQgIDxqeWFAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBNZWRpYVNlc3Np
b25Db29yZGluYXRvciB0ZXN0IHRvIGVuc3VyZSB0aGF0IGRpc2Nvbm5lY3Rpb24gb24gdGhlIHBy
aXZhdGUgc2lkZSBpcyBwcm9wZXJseSBoYW5kbGVkLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXNvdXJjZS9Tb3VyY2VCdWZmZXIuY3BwCmluZGV4IDIxMmU5OWJkYWRjMzI1
YzRiZTkzMWMyNTdiODNkNWFlMjhiMWIzZDQuLjhkZTFmZGNhZWU5MzQ3MzlkYTY5MjUwMmFmZjBk
NTk4NWFlMWNlZGQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzb3Vy
Y2UvU291cmNlQnVmZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc291
cmNlL1NvdXJjZUJ1ZmZlci5jcHAKQEAgLTQ4OCwxMCArNDg4LDEwIEBAIEV4Y2VwdGlvbk9yPHZv
aWQ+IFNvdXJjZUJ1ZmZlcjo6YXBwZW5kQnVmZmVySW50ZXJuYWwoY29uc3QgdW5zaWduZWQgY2hh
ciogZGF0YSwKICAgICBtX3NvdXJjZS0+b3BlbklmSW5FbmRlZFN0YXRlKCk7CiAKICAgICAvLyA0
LiBSdW4gdGhlIGNvZGVkIGZyYW1lIGV2aWN0aW9uIGFsZ29yaXRobS4KLSAgICBtX3ByaXZhdGUt
PmV2aWN0Q29kZWRGcmFtZXMoc2l6ZSwgbV9wZW5kaW5nQXBwZW5kRGF0YS5jYXBhY2l0eSgpLCBt
YXhpbXVtQnVmZmVyU2l6ZSgpLCBtX3NvdXJjZS0+Y3VycmVudFRpbWUoKSwgbV9zb3VyY2UtPmR1
cmF0aW9uKCksIG1fc291cmNlLT5pc0VuZGVkKCkpOworICAgIG1fcHJpdmF0ZS0+ZXZpY3RDb2Rl
ZEZyYW1lcyhzaXplLCBtX3BlbmRpbmdBcHBlbmREYXRhLnNpemUoKSwgbWF4aW11bUJ1ZmZlclNp
emUoKSwgbV9zb3VyY2UtPmN1cnJlbnRUaW1lKCksIG1fc291cmNlLT5kdXJhdGlvbigpLCBtX3Nv
dXJjZS0+aXNFbmRlZCgpKTsKIAogICAgIC8vIDUuIElmIHRoZSBidWZmZXIgZnVsbCBmbGFnIGVx
dWFscyB0cnVlLCB0aGVuIHRocm93IGEgUXVvdGFFeGNlZWRlZEVycm9yIGV4Y2VwdGlvbiBhbmQg
YWJvcnQgdGhlc2Ugc3RlcC4KLSAgICBpZiAobV9wcml2YXRlLT5idWZmZXJGdWxsKCkgfHwgbV9w
cml2YXRlLT50b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMoKSArIG1fcGVuZGluZ0FwcGVuZERh
dGEuY2FwYWNpdHkoKSArIHNpemUgPj0gbWF4aW11bUJ1ZmZlclNpemUoKSkgeworICAgIGlmICht
X3ByaXZhdGUtPmJ1ZmZlckZ1bGwoKSB8fCBtX3ByaXZhdGUtPnRvdGFsVHJhY2tCdWZmZXJTaXpl
SW5CeXRlcygpICsgbV9wZW5kaW5nQXBwZW5kRGF0YS5zaXplKCkgKyBzaXplID49IG1heGltdW1C
dWZmZXJTaXplKCkpIHsKICAgICAgICAgRVJST1JfTE9HKExPR0lERU5USUZJRVIsICJidWZmZXIg
ZnVsbCwgZmFpbGluZyB3aXRoIFF1b3RhRXhjZWVkZWRFcnJvciBlcnJvciIpOwogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgUXVvdGFFeGNlZWRlZEVycm9yIH07CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvU291cmNlQnVmZmVyUHJpdmF0ZS5o
CmluZGV4IDFiOTEyNjM1ZWNlYjcyYjllN2Y4NTIyY2Q0OWQzODJiNGY4NzQxNGYuLjE5MWE1NjQy
YzEzM2QwNzg0MTgwNmRlZTM1ZTUzNmMzMDQyNjg1ZTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL1NvdXJjZUJ1ZmZlclByaXZhdGUuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9Tb3VyY2VCdWZmZXJQcml2YXRlLmgKQEAgLTg4LDYg
Kzg4LDcgQEAgcHVibGljOgogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCB1cGRhdGVC
dWZmZXJlZEZyb21UcmFja0J1ZmZlcnMoYm9vbCBzb3VyY2VJc0VuZGVkKTsKICAgICBXRUJDT1JF
X0VYUE9SVCB2aXJ0dWFsIHZvaWQgcmVtb3ZlQ29kZWRGcmFtZXMoY29uc3QgTWVkaWFUaW1lJiBz
dGFydCwgY29uc3QgTWVkaWFUaW1lJiBlbmQsIGNvbnN0IE1lZGlhVGltZSYgY3VycmVudE1lZGlh
VGltZSwgYm9vbCBpc0VuZGVkLCBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKCk+JiYgPSBbXSB7IH0p
OwogICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCBldmljdENvZGVkRnJhbWVzKHVpbnQ2
NF90IG5ld0RhdGFTaXplLCB1aW50NjRfdCBwZW5kaW5nQXBwZW5kRGF0YUNhcGFjaXR5LCB1aW50
NjRfdCBtYXhpbXVtQnVmZmVyU2l6ZSwgY29uc3QgTWVkaWFUaW1lJiBjdXJyZW50VGltZSwgY29u
c3QgTWVkaWFUaW1lJiBkdXJhdGlvbiwgYm9vbCBpc0VuZGVkKTsKKyAgICBXRUJDT1JFX0VYUE9S
VCB2aXJ0dWFsIHVpbnQ2NF90IHRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlcygpIGNvbnN0Owog
ICAgIFdFQkNPUkVfRVhQT1JUIHZpcnR1YWwgdm9pZCByZXNldFRpbWVzdGFtcE9mZnNldEluVHJh
Y2tCdWZmZXJzKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0YXJ0Q2hhbmdpbmdUeXBlKCkgeyBtX3Bl
bmRpbmdJbml0aWFsaXphdGlvblNlZ21lbnRGb3JDaGFuZ2VUeXBlID0gdHJ1ZTsgfQogICAgIHZp
cnR1YWwgdm9pZCBzZXRUaW1lc3RhbXBPZmZzZXQoY29uc3QgTWVkaWFUaW1lJiB0aW1lc3RhbXBP
ZmZzZXQpIHsgbV90aW1lc3RhbXBPZmZzZXQgPSB0aW1lc3RhbXBPZmZzZXQ7IH0KQEAgLTEwOCw3
ICsxMDksNiBAQCBwdWJsaWM6CiAgICAgYm9vbCBoYXNWaWRlbygpIGNvbnN0IHsgcmV0dXJuIG1f
aGFzVmlkZW87IH0KIAogICAgIE1lZGlhVGltZSB0aW1lc3RhbXBPZmZzZXQoKSBjb25zdCB7IHJl
dHVybiBtX3RpbWVzdGFtcE9mZnNldDsgfQotICAgIHVpbnQ2NF90IHRvdGFsVHJhY2tCdWZmZXJT
aXplSW5CeXRlcygpIGNvbnN0OwogCiAgICAgc3RydWN0IFRyYWNrQnVmZmVyIHsKICAgICAgICAg
V1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcCBiL1NvdXJjZS9X
ZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VCdWZmZXJQcm94eS5jcHAKaW5kZXgg
NzQ0NWZiZWEzOTYyODZlOThkZmUwYmEyZTMyMjE5N2Y2MzAwMTNjNi4uNjhkZWY5MmU3ZWNkNDFm
YjE2Nzc1OGI3M2EwODgyOWYzMmNlZDcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9HUFVQ
cm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0L0dQVVByb2Nlc3MvbWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkuY3BwCkBAIC0xNjUs
NyArMTY1LDcgQEAgdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJp
dmF0ZUFwcGVuZENvbXBsZXRlKFNvdXJjZUJ1ZmZlclByaXYKICAgICAgICAgcmV0dXJuOwogCiAg
ICAgYXV0byBidWZmZXJlZCA9IG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+YnVmZmVyZWQoKS0+cmFu
Z2VzKCk7Ci0gICAgbV9jb25uZWN0aW9uVG9XZWJQcm9jZXNzLT5jb25uZWN0aW9uKCkuc2VuZChN
ZXNzYWdlczo6U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6U291cmNlQnVmZmVyUHJpdmF0ZUFw
cGVuZENvbXBsZXRlKGFwcGVuZFJlc3VsdCwgV1RGTW92ZShidWZmZXJlZCkpLCBtX2lkZW50aWZp
ZXIpOworICAgIG1fY29ubmVjdGlvblRvV2ViUHJvY2Vzcy0+Y29ubmVjdGlvbigpLnNlbmQoTWVz
c2FnZXM6OlNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OlNvdXJjZUJ1ZmZlclByaXZhdGVBcHBl
bmRDb21wbGV0ZShhcHBlbmRSZXN1bHQsIFdURk1vdmUoYnVmZmVyZWQpLCBtX3NvdXJjZUJ1ZmZl
clByaXZhdGUtPnRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlcygpKSwgbV9pZGVudGlmaWVyKTsK
IH0KIAogdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6c291cmNlQnVmZmVyUHJpdmF0ZURp
ZFJlY2VpdmVSZW5kZXJpbmdFcnJvcihpbnQ2NF90IGVycm9yQ29kZSkKQEAgLTI0OSwxOCArMjQ5
LDE4IEBAIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnVwZGF0ZUJ1ZmZlcmVkRnJvbVRy
YWNrQnVmZmVycyhib29sIHNvdXJjZUlzRW5kZWQsCiAgICAgY29tcGxldGlvbkhhbmRsZXIoV1RG
TW92ZShidWZmZXJlZCkpOwogfQogCi12b2lkIFJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpyZW1v
dmVDb2RlZEZyYW1lcyhjb25zdCBNZWRpYVRpbWUmIHN0YXJ0LCBjb25zdCBNZWRpYVRpbWUmIGVu
ZCwgY29uc3QgTWVkaWFUaW1lJiBjdXJyZW50VGltZSwgYm9vbCBpc0VuZGVkLCBDb21wbGV0aW9u
SGFuZGxlcjx2b2lkKFBsYXRmb3JtVGltZVJhbmdlcyYmKT4mJiBjb21wbGV0aW9uSGFuZGxlcikK
K3ZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OnJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0IE1l
ZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBNZWRpYVRpbWUmIGN1
cnJlbnRUaW1lLCBib29sIGlzRW5kZWQsIFJlbW92ZUNvZGVkRnJhbWVzQXN5bmNSZXBseSYmIGNv
bXBsZXRpb25IYW5kbGVyKQogewogICAgIG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+cmVtb3ZlQ29k
ZWRGcmFtZXMoc3RhcnQsIGVuZCwgY3VycmVudFRpbWUsIGlzRW5kZWQsIFt0aGlzLCBwcm90ZWN0
ZWRUaGlzID0gbWFrZVJlZigqdGhpcyksIGNvbXBsZXRpb25IYW5kbGVyID0gV1RGTW92ZShjb21w
bGV0aW9uSGFuZGxlcildKCkgbXV0YWJsZSB7CiAgICAgICAgIGF1dG8gYnVmZmVyZWQgPSBtX3Nv
dXJjZUJ1ZmZlclByaXZhdGUtPmJ1ZmZlcmVkKCktPnJhbmdlcygpOwotICAgICAgICBjb21wbGV0
aW9uSGFuZGxlcihXVEZNb3ZlKGJ1ZmZlcmVkKSk7CisgICAgICAgIGNvbXBsZXRpb25IYW5kbGVy
KFdURk1vdmUoYnVmZmVyZWQpLCBtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPnRvdGFsVHJhY2tCdWZm
ZXJTaXplSW5CeXRlcygpKTsKICAgICB9KTsKIH0KIAotdm9pZCBSZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eTo6ZXZpY3RDb2RlZEZyYW1lcyh1aW50NjRfdCBuZXdEYXRhU2l6ZSwgdWludDY0X3QgcGVu
ZGluZ0FwcGVuZERhdGFDYXBhY2l0eSwgdWludDY0X3QgbWF4aW11bUJ1ZmZlclNpemUsIGNvbnN0
IE1lZGlhVGltZSYgY3VycmVudFRpbWUsIGNvbnN0IE1lZGlhVGltZSYgZHVyYXRpb24sIGJvb2wg
aXNFbmRlZCwgQ29tcGxldGlvbkhhbmRsZXI8dm9pZChib29sKT4mJiBjb21wbGV0aW9uSGFuZGxl
cikKK3ZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OmV2aWN0Q29kZWRGcmFtZXModWludDY0
X3QgbmV3RGF0YVNpemUsIHVpbnQ2NF90IHBlbmRpbmdBcHBlbmREYXRhQ2FwYWNpdHksIHVpbnQ2
NF90IG1heGltdW1CdWZmZXJTaXplLCBjb25zdCBNZWRpYVRpbWUmIGN1cnJlbnRUaW1lLCBjb25z
dCBNZWRpYVRpbWUmIGR1cmF0aW9uLCBib29sIGlzRW5kZWQsIEV2aWN0Q29kZWRGcmFtZXNEZWxh
eWVkUmVwbHkmJiBjb21wbGV0aW9uSGFuZGxlcikKIHsKICAgICBtX3NvdXJjZUJ1ZmZlclByaXZh
dGUtPmV2aWN0Q29kZWRGcmFtZXMobmV3RGF0YVNpemUsIHBlbmRpbmdBcHBlbmREYXRhQ2FwYWNp
dHksIG1heGltdW1CdWZmZXJTaXplLCBjdXJyZW50VGltZSwgZHVyYXRpb24sIGlzRW5kZWQpOwot
ICAgIGNvbXBsZXRpb25IYW5kbGVyKG1fc291cmNlQnVmZmVyUHJpdmF0ZS0+YnVmZmVyRnVsbCgp
KTsKKyAgICBjb21wbGV0aW9uSGFuZGxlcihtX3NvdXJjZUJ1ZmZlclByaXZhdGUtPmJ1ZmZlckZ1
bGwoKSwgbV9zb3VyY2VCdWZmZXJQcml2YXRlLT50b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMo
KSk7CiB9CiAKIHZvaWQgUmVtb3RlU291cmNlQnVmZmVyUHJveHk6OmFkZFRyYWNrQnVmZmVyKFRy
YWNrUHJpdmF0ZVJlbW90ZUlkZW50aWZpZXIgdHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllcikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3VyY2VC
dWZmZXJQcm94eS5oIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJj
ZUJ1ZmZlclByb3h5LmgKaW5kZXggY2VkNWYwMTc0ODdhNGI4Y2YxNDI5MGNiNzkxOTQ3YWZlOGIx
ODUyNC4uYmFlY2RmY2RhMjU1MjM3NjY0ODQ1YzMxOTI2NTFiNGEyMzE2MTBjOSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclByb3h5
LmgKKysrIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZl
clByb3h5LmgKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJHUFVDb25uZWN0aW9uVG9XZWJQ
cm9jZXNzLmgiCiAjaW5jbHVkZSAiTWVzc2FnZVJlY2VpdmVyLmgiCiAjaW5jbHVkZSAiUmVtb3Rl
U291cmNlQnVmZmVySWRlbnRpZmllci5oIgorI2luY2x1ZGUgIlJlbW90ZVNvdXJjZUJ1ZmZlclBy
b3h5TWVzc2FnZXNSZXBsaWVzLmgiCiAjaW5jbHVkZSAiVHJhY2tQcml2YXRlUmVtb3RlSWRlbnRp
Zmllci5oIgogI2luY2x1ZGUgPFdlYkNvcmUvTWVkaWFEZXNjcmlwdGlvbi5oPgogI2luY2x1ZGUg
PFdlYkNvcmUvU291cmNlQnVmZmVyUHJpdmF0ZS5oPgpAQCAtOTQsOCArOTUsMTAgQEAgcHJpdmF0
ZToKICAgICB2b2lkIHNldFJlYWR5U3RhdGUoV2ViQ29yZTo6TWVkaWFQbGF5ZXI6OlJlYWR5U3Rh
dGUpOwogICAgIHZvaWQgc3RhcnRDaGFuZ2luZ1R5cGUoKTsKICAgICB2b2lkIHVwZGF0ZUJ1ZmZl
cmVkRnJvbVRyYWNrQnVmZmVycyhib29sIHNvdXJjZUlzRW5kZWQsIENvbXBsZXRpb25IYW5kbGVy
PHZvaWQoV2ViQ29yZTo6UGxhdGZvcm1UaW1lUmFuZ2VzJiYpPiYmKTsKLSAgICB2b2lkIHJlbW92
ZUNvZGVkRnJhbWVzKGNvbnN0IE1lZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5k
LCBjb25zdCBNZWRpYVRpbWUmIGN1cnJlbnRUaW1lLCBib29sIGlzRW5kZWQsIENvbXBsZXRpb25I
YW5kbGVyPHZvaWQoV2ViQ29yZTo6UGxhdGZvcm1UaW1lUmFuZ2VzJiYpPiYmKTsKLSAgICB2b2lk
IGV2aWN0Q29kZWRGcmFtZXModWludDY0X3QgbmV3RGF0YVNpemUsIHVpbnQ2NF90IHBlbmRpbmdB
cHBlbmREYXRhQ2FwYWNpdHksIHVpbnQ2NF90IG1heGltdW1CdWZmZXJTaXplLCBjb25zdCBNZWRp
YVRpbWUmIGN1cnJlbnRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIGR1cmF0aW9uLCBib29sIGlzRW5k
ZWQsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoYm9vbCk+JiYpOworICAgIHVzaW5nIFJlbW92ZUNv
ZGVkRnJhbWVzQXN5bmNSZXBseSA9IE1lc3NhZ2VzOjpSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6
UmVtb3ZlQ29kZWRGcmFtZXNBc3luY1JlcGx5OworICAgIHVzaW5nIEV2aWN0Q29kZWRGcmFtZXNE
ZWxheWVkUmVwbHk9IE1lc3NhZ2VzOjpSZW1vdGVTb3VyY2VCdWZmZXJQcm94eTo6RXZpY3RDb2Rl
ZEZyYW1lc0RlbGF5ZWRSZXBseTsKKyAgICB2b2lkIHJlbW92ZUNvZGVkRnJhbWVzKGNvbnN0IE1l
ZGlhVGltZSYgc3RhcnQsIGNvbnN0IE1lZGlhVGltZSYgZW5kLCBjb25zdCBNZWRpYVRpbWUmIGN1
cnJlbnRUaW1lLCBib29sIGlzRW5kZWQsIFJlbW92ZUNvZGVkRnJhbWVzQXN5bmNSZXBseSYmKTsK
KyAgICB2b2lkIGV2aWN0Q29kZWRGcmFtZXModWludDY0X3QgbmV3RGF0YVNpemUsIHVpbnQ2NF90
IHBlbmRpbmdBcHBlbmREYXRhQ2FwYWNpdHksIHVpbnQ2NF90IG1heGltdW1CdWZmZXJTaXplLCBj
b25zdCBNZWRpYVRpbWUmIGN1cnJlbnRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIGR1cmF0aW9uLCBi
b29sIGlzRW5kZWQsIEV2aWN0Q29kZWRGcmFtZXNEZWxheWVkUmVwbHkmJik7CiAgICAgdm9pZCBh
ZGRUcmFja0J1ZmZlcihUcmFja1ByaXZhdGVSZW1vdGVJZGVudGlmaWVyKTsKICAgICB2b2lkIHJl
c2V0VHJhY2tCdWZmZXJzKCk7CiAgICAgdm9pZCBjbGVhclRyYWNrQnVmZmVycygpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNvdXJjZUJ1ZmZlclBy
b3h5Lm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9HUFVQcm9jZXNzL21lZGlhL1JlbW90ZVNv
dXJjZUJ1ZmZlclByb3h5Lm1lc3NhZ2VzLmluCmluZGV4IGVkZjZlZTg2ZGVjYmYwNGExMDAyOWYz
YjQ2ODFiZGYwZjBkZTNjYTIuLjVlYTYwZjdmZDg2OTQxZDFjYWFmNTBmOGI4ODY1NDc4YjkzZTEx
YzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvR1BVUHJvY2Vzcy9tZWRpYS9SZW1vdGVTb3Vy
Y2VCdWZmZXJQcm94eS5tZXNzYWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L0dQVVByb2Nlc3Mv
bWVkaWEvUmVtb3RlU291cmNlQnVmZmVyUHJveHkubWVzc2FnZXMuaW4KQEAgLTQxLDggKzQxLDgg
QEAgbWVzc2FnZXMgLT4gUmVtb3RlU291cmNlQnVmZmVyUHJveHkgTm90UmVmQ291bnRlZCB7CiAg
ICAgUmVzZXRUcmFja0J1ZmZlcnMoKQogICAgIENsZWFyVHJhY2tCdWZmZXJzKCkKICAgICBTZXRB
bGxUcmFja0J1ZmZlcnNOZWVkUmFuZG9tQWNjZXNzKCkKLSAgICBSZW1vdmVDb2RlZEZyYW1lcyhN
ZWRpYVRpbWUgc3RhcnQsIE1lZGlhVGltZSBlbmQsIE1lZGlhVGltZSBjdXJyZW50VGltZSwgYm9v
bCBpc0VuZGVkKSAtPiAoV2ViQ29yZTo6UGxhdGZvcm1UaW1lUmFuZ2VzIGJ1ZmZlcmVkKSBBc3lu
YwotICAgIEV2aWN0Q29kZWRGcmFtZXModWludDY0X3QgbmV3RGF0YVNpemUsIHVpbnQ2NF90IHBl
bmRpbmdBcHBlbmREYXRhQ2FwYWNpdHksIHVpbnQ2NF90IG1heGltdW1CdWZmZXJTaXplLCBNZWRp
YVRpbWUgY3VycmVudFRpbWUsIE1lZGlhVGltZSBkdXJhdGlvbiwgYm9vbCBpc0VuZGVkKSAtPiAo
Ym9vbCBidWZmZXJGdWxsKSBTeW5jaHJvbm91cworICAgIFJlbW92ZUNvZGVkRnJhbWVzKE1lZGlh
VGltZSBzdGFydCwgTWVkaWFUaW1lIGVuZCwgTWVkaWFUaW1lIGN1cnJlbnRUaW1lLCBib29sIGlz
RW5kZWQpIC0+IChXZWJDb3JlOjpQbGF0Zm9ybVRpbWVSYW5nZXMgYnVmZmVyZWQsIHVpbnQ2NF90
IHRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlcykgQXN5bmMKKyAgICBFdmljdENvZGVkRnJhbWVz
KHVpbnQ2NF90IG5ld0RhdGFTaXplLCB1aW50NjRfdCBwZW5kaW5nQXBwZW5kRGF0YUNhcGFjaXR5
LCB1aW50NjRfdCBtYXhpbXVtQnVmZmVyU2l6ZSwgTWVkaWFUaW1lIGN1cnJlbnRUaW1lLCBNZWRp
YVRpbWUgZHVyYXRpb24sIGJvb2wgaXNFbmRlZCkgLT4gKGJvb2wgYnVmZmVyRnVsbCwgdWludDY0
X3QgdG90YWxUcmFja0J1ZmZlclNpemVJbkJ5dGVzKSBTeW5jaHJvbm91cwogICAgIFJlZW5xdWV1
ZU1lZGlhSWZOZWVkZWQoTWVkaWFUaW1lIGN1cnJlbnRNZWRpYVRpbWUsIHVpbnQ2NF90IHBlbmRp
bmdBcHBlbmREYXRhQ2FwYWNpdHksIHVpbnQ2NF90IG1heGltdW1CdWZmZXJTaXplKSAtPiAoYm9v
bCBidWZmZXJGdWxsKSBBc3luYwogICAgIFNldEdyb3VwU3RhcnRUaW1lc3RhbXAoTWVkaWFUaW1l
IHRpbWVzdGFtcCkKICAgICBTZXRHcm91cFN0YXJ0VGltZXN0YW1wVG9FbmRUaW1lc3RhbXAoKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZm
ZXJQcml2YXRlUmVtb3RlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5jcHAKaW5kZXggMzY5NDNkYWFkYjJhNWI3ODY3MmEw
ODU4ZmE2NTMwYjFjZThkYzliNi4uYWMyZGYxNTI1MThhYTU0NTE5MDQyM2UyYWVmZGE3MTU2NWM3
ZGEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3Vy
Y2VCdWZmZXJQcml2YXRlUmVtb3RlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
R1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuY3BwCkBAIC05MSw2ICs5MSw5IEBA
IHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6YWJvcnQoKQogICAgIGlmICghbV9ncHVQ
cm9jZXNzQ29ubmVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCisgICAgLy8gV2hlbiBhYm9ydCgp
IGlzIGJlaW5nIGlzc3VlZDsgdGhpcyB3aWxsIGZvcmNlIHRoZSBSZW1vdGVTb3VyY2VCdWZmZXJQ
cm94eSB0byBhYm9ydCB0aGUgY3VycmVudCByZW1vdGUgc291cmNlIGJ1ZmZlciBvcGVyYXRpb24K
KyAgICAvLyBUaGUgdG90YWxUcmFja0J1ZmZlclNpemVJbkJ5dGVzIHdpbGwgYmUgcmVjYWxjdWxh
dGVkIGFmdGVyIHRoZSBuZXh0IG9wZXJhdGlvbiB3aGljaCBhbGxvd3MgZm9yIHBvdGVudGlhbGx5
IGhhdmluZworICAgIC8vIG1fdG90YWxUcmFja0J1ZmZlclNpemVJbkJ5dGVzIGJlaW5nIHRlbXBv
cmFyaWx5IHN0YWxlIGFzIGl0IHdvbid0IGJlIHVzZWQgdW50aWwgdGhlbi4KICAgICBtX2dwdVBy
b2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNzYWdlczo6UmVtb3RlU291cmNl
QnVmZmVyUHJveHk6OkFib3J0KCksIG1fcmVtb3RlU291cmNlQnVmZmVySWRlbnRpZmllcik7CiB9
CiAKQEAgLTE4OCwxMCArMTkxLDEzIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6
cmVtb3ZlQ29kZWRGcmFtZXMoY29uc3QgTWVkaWFUaW1lJiBzdGFydCwgY29uc3QKICAgICBpZiAo
IW1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZ3B1UHJv
Y2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kV2l0aEFzeW5jUmVwbHkoTWVzc2FnZXM6
OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpSZW1vdmVDb2RlZEZyYW1lcyhzdGFydCwgZW5kLCBj
dXJyZW50TWVkaWFUaW1lLCBpc0VuZGVkKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVm
KCp0aGlzKSwgY29tcGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0o
YXV0byYmIGJ1ZmZlcmVkKSBtdXRhYmxlIHsKLSAgICAgICAgc2V0QnVmZmVyZWRSYW5nZXMoYnVm
ZmVyZWQpOwotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOwotICAgIH0sIG1fcmVtb3RlU291
cmNlQnVmZmVySWRlbnRpZmllcik7CisgICAgbV9ncHVQcm9jZXNzQ29ubmVjdGlvbi0+Y29ubmVj
dGlvbigpLnNlbmRXaXRoQXN5bmNSZXBseSgKKyAgICAgICAgTWVzc2FnZXM6OlJlbW90ZVNvdXJj
ZUJ1ZmZlclByb3h5OjpSZW1vdmVDb2RlZEZyYW1lcyhzdGFydCwgZW5kLCBjdXJyZW50TWVkaWFU
aW1lLCBpc0VuZGVkKSwgW3RoaXMsIHByb3RlY3RlZFRoaXMgPSBtYWtlUmVmKCp0aGlzKSwgY29t
cGxldGlvbkhhbmRsZXIgPSBXVEZNb3ZlKGNvbXBsZXRpb25IYW5kbGVyKV0oYXV0byYmIGJ1ZmZl
cmVkLCB1aW50NjRfdCB0b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMpIG11dGFibGUgeworICAg
ICAgICAgICAgc2V0QnVmZmVyZWRSYW5nZXMoYnVmZmVyZWQpOworICAgICAgICAgICAgbV90b3Rh
bFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMgPSB0b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXM7Cisg
ICAgICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigpOworICAgICAgICB9LAorICAgICAgICBtX3Jl
bW90ZVNvdXJjZUJ1ZmZlcklkZW50aWZpZXIpOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZh
dGVSZW1vdGU6OmV2aWN0Q29kZWRGcmFtZXModWludDY0X3QgbmV3RGF0YVNpemUsIHVpbnQ2NF90
IHBlbmRpbmdBcHBlbmREYXRhQ2FwYWNpdHksIHVpbnQ2NF90IG1heGltdW1CdWZmZXJTaXplLCBj
b25zdCBNZWRpYVRpbWUmIGN1cnJlbnRUaW1lLCBjb25zdCBNZWRpYVRpbWUmIGR1cmF0aW9uLCBi
b29sIGlzRW5kZWQpCkBAIC0yMDAsOCArMjA2LDExIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0
ZVJlbW90ZTo6ZXZpY3RDb2RlZEZyYW1lcyh1aW50NjRfdCBuZXdEYXRhU2l6ZSwgdWludDY0X3QK
ICAgICAgICAgcmV0dXJuOwogCiAgICAgYm9vbCBidWZmZXJGdWxsID0gZmFsc2U7Ci0gICAgaWYg
KG1fZ3B1UHJvY2Vzc0Nvbm5lY3Rpb24tPmNvbm5lY3Rpb24oKS5zZW5kU3luYyhNZXNzYWdlczo6
UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OkV2aWN0Q29kZWRGcmFtZXMobmV3RGF0YVNpemUsIHBl
bmRpbmdBcHBlbmREYXRhQ2FwYWNpdHksIG1heGltdW1CdWZmZXJTaXplLCBjdXJyZW50VGltZSwg
ZHVyYXRpb24sIGlzRW5kZWQpLCBNZXNzYWdlczo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OkV2
aWN0Q29kZWRGcmFtZXM6OlJlcGx5KGJ1ZmZlckZ1bGwpLCBtX3JlbW90ZVNvdXJjZUJ1ZmZlcklk
ZW50aWZpZXIpKQorICAgIHVpbnQ2NF90IHRvdGFsQnVmZmVyU2l6ZUluQnl0ZXMgPSAwOworICAg
IGlmIChtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZFN5bmMoTWVzc2Fn
ZXM6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5OjpFdmljdENvZGVkRnJhbWVzKG5ld0RhdGFTaXpl
LCBwZW5kaW5nQXBwZW5kRGF0YUNhcGFjaXR5LCBtYXhpbXVtQnVmZmVyU2l6ZSwgY3VycmVudFRp
bWUsIGR1cmF0aW9uLCBpc0VuZGVkKSwgTWVzc2FnZXM6OlJlbW90ZVNvdXJjZUJ1ZmZlclByb3h5
OjpFdmljdENvZGVkRnJhbWVzOjpSZXBseShidWZmZXJGdWxsLCB0b3RhbEJ1ZmZlclNpemVJbkJ5
dGVzKSwgbV9yZW1vdGVTb3VyY2VCdWZmZXJJZGVudGlmaWVyKSkgewogICAgICAgICBzZXRCdWZm
ZXJGdWxsKGJ1ZmZlckZ1bGwpOworICAgICAgICBtX3RvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRl
cyA9IHRvdGFsQnVmZmVyU2l6ZUluQnl0ZXM7CisgICAgfQogfQogCiB2b2lkIFNvdXJjZUJ1ZmZl
clByaXZhdGVSZW1vdGU6OmFkZFRyYWNrQnVmZmVyKGNvbnN0IEF0b21TdHJpbmcmIHRyYWNrSWQs
IFJlZlB0cjxNZWRpYURlc2NyaXB0aW9uPiYmKQpAQCAtMjI3LDYgKzIzNiw3IEBAIHZvaWQgU291
cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6Y2xlYXJUcmFja0J1ZmZlcnMoKQogICAgICAgICByZXR1
cm47CiAKICAgICBtX2dwdVByb2Nlc3NDb25uZWN0aW9uLT5jb25uZWN0aW9uKCkuc2VuZChNZXNz
YWdlczo6UmVtb3RlU291cmNlQnVmZmVyUHJveHk6OkNsZWFyVHJhY2tCdWZmZXJzKCksIG1fcmVt
b3RlU291cmNlQnVmZmVySWRlbnRpZmllcik7CisgICAgbV90b3RhbFRyYWNrQnVmZmVyU2l6ZUlu
Qnl0ZXMgPSAwOwogfQogCiB2b2lkIFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnNldEFsbFRy
YWNrQnVmZmVyc05lZWRSYW5kb21BY2Nlc3MoKQpAQCAtNDA4LDkgKzQxOCwxMCBAQCB2b2lkIFNv
dXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OnNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRFcnJvcihi
b29sIGRlY29kZUVycm9yKQogICAgICAgICBtX2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZUFw
cGVuZEVycm9yKGRlY29kZUVycm9yKTsKIH0KIAotdm9pZCBTb3VyY2VCdWZmZXJQcml2YXRlUmVt
b3RlOjpzb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUoU291cmNlQnVmZmVyUHJpdmF0
ZUNsaWVudDo6QXBwZW5kUmVzdWx0IGFwcGVuZFJlc3VsdCwgY29uc3QgUGxhdGZvcm1UaW1lUmFu
Z2VzJiBidWZmZXJlZCkKK3ZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6c291cmNlQnVm
ZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKFNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkFwcGVu
ZFJlc3VsdCBhcHBlbmRSZXN1bHQsIGNvbnN0IFBsYXRmb3JtVGltZVJhbmdlcyYgYnVmZmVyZWQs
IHVpbnQ2NF90IHRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlcykKIHsKICAgICBzZXRCdWZmZXJl
ZFJhbmdlcyhidWZmZXJlZCk7CisgICAgbV90b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXMgPSB0
b3RhbFRyYWNrQnVmZmVyU2l6ZUluQnl0ZXM7CiAgICAgaWYgKG1fY2xpZW50KQogICAgICAgICBt
X2NsaWVudC0+c291cmNlQnVmZmVyUHJpdmF0ZUFwcGVuZENvbXBsZXRlKGFwcGVuZFJlc3VsdCk7
CiB9CkBAIC00NTcsNiArNDY4LDExIEBAIHZvaWQgU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6
c291cmNlQnVmZmVyUHJpdmF0ZVJlcG9ydEV4dHJhTWVtb3J5Q29zdCh1aW50NjRfCiAgICAgICAg
IG1fY2xpZW50LT5zb3VyY2VCdWZmZXJQcml2YXRlUmVwb3J0RXh0cmFNZW1vcnlDb3N0KGV4dHJh
TWVtb3J5KTsKIH0KIAordWludDY0X3QgU291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZTo6dG90YWxU
cmFja0J1ZmZlclNpemVJbkJ5dGVzKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV90b3RhbFRyYWNr
QnVmZmVyU2l6ZUluQnl0ZXM7Cit9CisKICNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKIFdURkxv
Z0NoYW5uZWwmIFNvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGU6OmxvZ0NoYW5uZWwoKSBjb25zdAog
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VC
dWZmZXJQcml2YXRlUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlh
L1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuaAppbmRleCA5YWMyYWRiODBlYzcxYzMyMjhlYzRl
OGE2ZmU0NTQzYzJlYWJlMmM0Li44YjZkMTAwMmM3NjMzNjQzMGM5YmRhYjY5MmRhNjg3NmNhOTUx
NDU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJj
ZUJ1ZmZlclByaXZhdGVSZW1vdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BV
L21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUuaApAQCAtOTksNiArOTksNyBAQCBwcml2
YXRlOgogICAgIHZvaWQgc2V0QXBwZW5kV2luZG93RW5kKGNvbnN0IE1lZGlhVGltZSYpIGZpbmFs
OwogICAgIHZvaWQgc2Vla1RvVGltZShjb25zdCBNZWRpYVRpbWUmKSBmaW5hbDsKICAgICB2b2lk
IHVwZGF0ZVRyYWNrSWRzKFZlY3RvcjxzdGQ6OnBhaXI8QXRvbVN0cmluZywgQXRvbVN0cmluZz4+
JiYpIGZpbmFsOworICAgIHVpbnQ2NF90IHRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlcygpIGNv
bnN0IGZpbmFsOwogCiAgICAgYm9vbCBpc0FjdGl2ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
aXNBY3RpdmU7IH0KIApAQCAtMTEwLDcgKzExMSw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzb3Vy
Y2VCdWZmZXJQcml2YXRlRGlkUmVjZWl2ZUluaXRpYWxpemF0aW9uU2VnbWVudChJbml0aWFsaXph
dGlvblNlZ21lbnRJbmZvJiYsIENvbXBsZXRpb25IYW5kbGVyPHZvaWQoKT4mJik7CiAgICAgdm9p
ZCBzb3VyY2VCdWZmZXJQcml2YXRlU3RyZWFtRW5kZWRXaXRoRGVjb2RlRXJyb3IoKTsKICAgICB2
b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRFcnJvcihib29sIGRlY29kZUVycm9yKTsKLSAg
ICB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVBcHBlbmRDb21wbGV0ZShXZWJDb3JlOjpTb3VyY2VC
dWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRSZXN1bHQsIGNvbnN0IFdlYkNvcmU6OlBsYXRmb3Jt
VGltZVJhbmdlcyYgYnVmZmVyZWQpOworICAgIHZvaWQgc291cmNlQnVmZmVyUHJpdmF0ZUFwcGVu
ZENvbXBsZXRlKFdlYkNvcmU6OlNvdXJjZUJ1ZmZlclByaXZhdGVDbGllbnQ6OkFwcGVuZFJlc3Vs
dCwgY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1UaW1lUmFuZ2VzJiBidWZmZXJlZCwgdWludDY0X3Qg
dG90YWxUcmFja0J1ZmZlclNpemVJbkJ5dGVzKTsKICAgICB2b2lkIHNvdXJjZUJ1ZmZlclByaXZh
dGVIaWdoZXN0UHJlc2VudGF0aW9uVGltZXN0YW1wQ2hhbmdlZChjb25zdCBNZWRpYVRpbWUmKTsK
ICAgICB2b2lkIHNvdXJjZUJ1ZmZlclByaXZhdGVEdXJhdGlvbkNoYW5nZWQoY29uc3QgTWVkaWFU
aW1lJik7CiAgICAgdm9pZCBzb3VyY2VCdWZmZXJQcml2YXRlRGlkUGFyc2VTYW1wbGUoZG91Ymxl
IHNhbXBsZUR1cmF0aW9uKTsKQEAgLTEyNyw2ICsxMjgsNyBAQCBwcml2YXRlOgogICAgIEhhc2hN
YXA8QXRvbVN0cmluZywgVHJhY2tQcml2YXRlUmVtb3RlSWRlbnRpZmllcj4gbV90cmFja0lkZW50
aWZpZXJNYXA7CiAKICAgICBib29sIG1faXNBY3RpdmUgeyBmYWxzZSB9OworICAgIHVpbnQ2NF90
IG1fdG90YWxUcmFja0J1ZmZlclNpemVJbkJ5dGVzID0geyAwIH07CiAKICNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKICAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fbG9nZ2VyLmdldCgpOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUubWVzc2FnZXMuaW4gYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvR1BVL21lZGlhL1NvdXJjZUJ1ZmZlclByaXZhdGVSZW1vdGUu
bWVzc2FnZXMuaW4KaW5kZXggYWVjMDM3ZGIyNzdjNDNhMTBhZmNiODk5YzQ1YzhkODNkMjZmNjc0
MS4uYzgwNTlhNjgxNGMzZGZhZjQxNzdhNGYyMmUxYTM1NmE1MWE2MWRkYyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0dQVS9tZWRpYS9Tb3VyY2VCdWZmZXJQcml2YXRlUmVt
b3RlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9HUFUvbWVkaWEv
U291cmNlQnVmZmVyUHJpdmF0ZVJlbW90ZS5tZXNzYWdlcy5pbgpAQCAtMjksNyArMjksNyBAQCBt
ZXNzYWdlcyAtPiBTb3VyY2VCdWZmZXJQcml2YXRlUmVtb3RlIE5vdFJlZkNvdW50ZWQgewogICAg
IFNvdXJjZUJ1ZmZlclByaXZhdGVEaWRSZWNlaXZlSW5pdGlhbGl6YXRpb25TZWdtZW50KHN0cnVj
dCBXZWJLaXQ6OkluaXRpYWxpemF0aW9uU2VnbWVudEluZm8gc2VnbWVudENvbmZpZ3VyYXRpb24p
IC0+ICgpIEFzeW5jCiAgICAgU291cmNlQnVmZmVyUHJpdmF0ZVN0cmVhbUVuZGVkV2l0aERlY29k
ZUVycm9yKCkKICAgICBTb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kRXJyb3IoYm9vbCBkZWNvZGVF
cnJvcikKLSAgICBTb3VyY2VCdWZmZXJQcml2YXRlQXBwZW5kQ29tcGxldGUoV2ViQ29yZTo6U291
cmNlQnVmZmVyUHJpdmF0ZUNsaWVudDo6QXBwZW5kUmVzdWx0IGFwcGVuZFJlc3VsdCwgV2ViQ29y
ZTo6UGxhdGZvcm1UaW1lUmFuZ2VzIGJ1ZmZlcmVkKQorICAgIFNvdXJjZUJ1ZmZlclByaXZhdGVB
cHBlbmRDb21wbGV0ZShXZWJDb3JlOjpTb3VyY2VCdWZmZXJQcml2YXRlQ2xpZW50OjpBcHBlbmRS
ZXN1bHQgYXBwZW5kUmVzdWx0LCBXZWJDb3JlOjpQbGF0Zm9ybVRpbWVSYW5nZXMgYnVmZmVyZWQs
IHVpbnQ2NF90IHRvdGFsVHJhY2tCdWZmZXJTaXplSW5CeXRlcykKICAgICBTb3VyY2VCdWZmZXJQ
cml2YXRlSGlnaGVzdFByZXNlbnRhdGlvblRpbWVzdGFtcENoYW5nZWQoTWVkaWFUaW1lIHRpbWVz
dGFtcCkKICAgICBTb3VyY2VCdWZmZXJQcml2YXRlRHVyYXRpb25DaGFuZ2VkKE1lZGlhVGltZSBk
dXJhdGlvbikKICAgICBTb3VyY2VCdWZmZXJQcml2YXRlRGlkUGFyc2VTYW1wbGUoZG91YmxlIHNh
bXBsZUR1cmF0aW9uKQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>