<?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>18654</bug_id>
          
          <creation_ts>2008-04-21 07:31:32 -0700</creation_ts>
          <short_desc>[XHR] onProgress event needs to be dispatched according to what the specification states</short_desc>
          <delta_ts>2010-03-31 23:53:33 -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>XML</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>36531</dependson>
          <blocked>36934</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Julien Chaffraix">jchaffraix</reporter>
          <assigned_to name="Julien Chaffraix">jchaffraix</assigned_to>
          <cc>ap</cc>
    
    <cc>eric</cc>
    
    <cc>gustavo</cc>
    
    <cc>jesus</cc>
    
    <cc>levin</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>78394</commentid>
    <comment_count>0</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2008-04-21 07:31:32 -0700</bug_when>
    <thetext>We have to use the least frequent between when we receive data and every 350ms (±200ms). The current behaviour is to dispatch the event every time we receive the data (which induces big performance hit on big files).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193598</commentid>
    <comment_count>1</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-02-24 18:57:39 -0800</bug_when>
    <thetext>The specification has changed an now it is:

&quot;When it is said to make progress notifications, while the download is progressing, queue a task to dispatch a progress event called progress about every 50ms or for every byte received, whichever is least frequent.&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193630</commentid>
    <comment_count>2</comment_count>
      <attachid>49467</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-02-24 21:43:30 -0800</bug_when>
    <thetext>Created attachment 49467
Proposed fix: add an XMLHttpRequestProgressEventDispatcher to handle the throttling of progress events</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193757</commentid>
    <comment_count>3</comment_count>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-25 09:12:48 -0800</bug_when>
    <thetext>Both GNUMakefile.am, WebCore.gypi, and WebCore.vcproj/WebCore.vcproj are all missing XMLHttpRequestProgressEventDispatcher.h</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193892</commentid>
    <comment_count>4</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-02-25 15:04:37 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; Both GNUMakefile.am, WebCore.gypi, and WebCore.vcproj/WebCore.vcproj are all
&gt; missing XMLHttpRequestProgressEventDispatcher.h

Right, I will attach an updated patch with this corrected. Do you have other comments on this patch before I modify it?

Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>193903</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-25 15:57:34 -0800</bug_when>
    <thetext>+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY

It&apos;s just &quot;APPLE INC&quot; now: &lt;http://webkit.org/coding/bsd-license.html&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194110</commentid>
    <comment_count>6</comment_count>
      <attachid>49587</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-02-26 08:23:13 -0800</bug_when>
    <thetext>Created attachment 49587
Updated patch: corrected build systems and licenses</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194111</commentid>
    <comment_count>7</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-02-26 08:25:21 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; + * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS&apos;&apos; AND ANY
&gt; 
&gt; It&apos;s just &quot;APPLE INC&quot; now: &lt;http://webkit.org/coding/bsd-license.html&gt;.

This snippet is copied from another file (can&apos;t remember which one it is). Maybe it is worth checking if there are no other discrepancies in WebKit&apos;s licenses?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194122</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-02-26 08:45:59 -0800</bug_when>
    <thetext>Yes, there are lots of files with obsolete license text. For now, the approach was to fix them on a case by case basis - I don&apos;t know if it&apos;s right or wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>194180</commentid>
    <comment_count>9</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-02-26 11:31:40 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; Yes, there are lots of files with obsolete license text. For now, the approach
&gt; was to fix them on a case by case basis - I don&apos;t know if it&apos;s right or wrong.

Trying a small search (grep -R &quot;APPLE COMPUTER, INC.&quot; .|cut -d&apos;:&apos; -f1|uniq|wc -l) showed out that more than 1400 files have the obsolete licenses in WebCore. Some of them are idl files which are unlikely to be modified soon. Some are just new files that just replicated an existing obsolete license (as I was going to do).

It has been quite a long time since this switch occurred so I think it is worth opening a renaming bug if we want to stop this spreading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197403</commentid>
    <comment_count>10</comment_count>
      <attachid>49587</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-08 17:01:39 -0800</bug_when>
    <thetext>Comment on attachment 49587
Updated patch: corrected build systems and licenses

+header(&quot;Cache-Control: no-cache, must-revalidate&quot;);
+header(&quot;Pragma: no-cache&quot;);

Maybe you also want no-store here?

+You should see a serie of 5 PASSED.

Typo: should be &quot;series&quot;. I&apos;d say &quot;sequence&quot;, but I&apos;m not a native speaker, so take that suggestion with a grain of salt.

I have some doubts whether this test will be stable on buildbots. But besides supporting this change, it tests a peculiar server-side timing, which would be nice to run through regression tests, even if we decide that it&apos;s impossible to test timing.

I&apos;m not a fan of designs that involve &quot;dispatcher&quot; objects. Those are not objects, as they don&apos;t describe behavior of an entity a human can think about. I don&apos;t have any suggestions though.

+        m_progressEventDispatcher.dispatchEvent(expectedLength &amp;&amp; m_receivedLength &lt;= expectedLength, static_cast&lt;unsigned&gt;(m_receivedLength), static_cast&lt;unsigned&gt;(expectedLength));

Could you add parentheses here? Some ports&apos; compilers will emit warning about ambiguous code, I think.

+    // FIXME: This is a temporary measure as we do not have the concept of task and thus cannot post a task.
+    void dispatchEventNow();

We have ScriptExecutionContext::postTask. Is that a different kind of task than needed here?

But I think that the spec is just being misleading here, and the event should be dispatched synchronously. The &quot;task&quot; it talks about is just the fact that network loading is asynchronous.

+    static const double progressEventDispatchingTime = .05; // 50 ms per specification.

I&apos;d call this &quot;minimumProgressEventDispatchingIntervalInSeconds&quot;.

The timer can fire behind an alert or another modal dialog. It shouldn&apos;t. Perhaps XHR should tell the dispatcher when it&apos;s suspended. It currently doesn&apos;t override ActiveDOMObject::suspend, because pages with active XHRs cannot go into b/f cache, and existing progress events do not fire simply because all loading is paused behind modal dialogs.

+        m_progressEventDispatcher.dispatchEvent(expectedLength &amp;&amp; m_receivedLength &lt;= expectedLength, static_cast&lt;unsigned&gt;(m_receivedLength), static_cast&lt;unsigned&gt;(expectedLength));

I believe that when expected length is not known, it&apos;s set to -1 (NSURLResponseUnknownLength), not to 0. Maybe there are platform differences here, and maybe even pre-existing bugs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197415</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-08 17:48:00 -0800</bug_when>
    <thetext>I&apos;ve been talking about this patch with some others, and one idea is that the progress object could (or should?) incapsulate more state related to progress, and be responsible for firing load and readystatechange events.

Since these events are closely tied together, and it is important to fire them in a correct order, it makes sense to have a single class do it. And moving more state to that class could help us realize what it really is (as a noun, and not a verb disguised as a noun with &quot;er&quot; appended to the end).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198631</commentid>
    <comment_count>12</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-11 08:06:00 -0800</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 49587 [details])
&gt; +header(&quot;Cache-Control: no-cache, must-revalidate&quot;);
&gt; +header(&quot;Pragma: no-cache&quot;);
&gt; 
&gt; Maybe you also want no-store here?

Right, we do not want the server to cache the response too.

&gt; Typo: should be &quot;series&quot;. I&apos;d say &quot;sequence&quot;, but I&apos;m not a native speaker, so
&gt; take that suggestion with a grain of salt.

I will change that (I was not aware that there is no singular for &quot;series&quot;).

&gt; I have some doubts whether this test will be stable on buildbots. But besides
&gt; supporting this change, it tests a peculiar server-side timing, which would be
&gt; nice to run through regression tests, even if we decide that it&apos;s impossible to
&gt; test timing.

I think the test can be less timing depend. What we need is to check that we throttle the number of events and do not blindly dispatch for every bits we receive (the current behaviour). I will address that in the next iteration.

&gt; I&apos;m not a fan of designs that involve &quot;dispatcher&quot; objects. Those are not
&gt; objects, as they don&apos;t describe behavior of an entity a human can think about.
&gt; I don&apos;t have any suggestions though.

The purpose of this object is to dispatch events (thus this name) but it is also limiting the rate of dispatching. Perhaps something along this could work like XMLHTTPRequestProgressEventThrottle?

&gt; +        m_progressEventDispatcher.dispatchEvent(expectedLength &amp;&amp;
&gt; m_receivedLength &lt;= expectedLength, static_cast&lt;unsigned&gt;(m_receivedLength),
&gt; static_cast&lt;unsigned&gt;(expectedLength));
&gt; 
&gt; Could you add parentheses here? Some ports&apos; compilers will emit warning about
&gt; ambiguous code, I think.

I did not change the code here but worth making this change to avoid such warnings in the future.

&gt; +    // FIXME: This is a temporary measure as we do not have the concept of
&gt; task and thus cannot post a task.
&gt; +    void dispatchEventNow();
&gt; 
&gt; We have ScriptExecutionContext::postTask. Is that a different kind of task than
&gt; needed here?

I was under the false assumption that this was for webworkers only. It will fit the purpose indeed.

&gt; But I think that the spec is just being misleading here, and the event should
&gt; be dispatched synchronously. The &quot;task&quot; it talks about is just the fact that
&gt; network loading is asynchronous.

I think the latest XHR level 2 WD is pretty clear:

&quot;When it is said to make progress notifications, while the download is progressing, queue a task to dispatch a progress event called progress about every 50ms or for every byte received, whichever is least frequent.&quot;

where queue a task is defined in HTML5. Other timers may share the same queue or use seperated queues. IMHO we can just stay with a separate &quot;queue&quot; for XHR and just dispatch this synchronously as you were suggesting.

&gt; +    static const double progressEventDispatchingTime = .05; // 50 ms per
&gt; specification.
&gt; 
&gt; I&apos;d call this &quot;minimumProgressEventDispatchingIntervalInSeconds&quot;.

Seems fair!

&gt; The timer can fire behind an alert or another modal dialog. It shouldn&apos;t.
&gt; Perhaps XHR should tell the dispatcher when it&apos;s suspended. It currently
&gt; doesn&apos;t override ActiveDOMObject::suspend, because pages with active XHRs
&gt; cannot go into b/f cache, and existing progress events do not fire simply
&gt; because all loading is paused behind modal dialogs.

Right, I will add the logic for suspending / resuming the events.

&gt; +        m_progressEventDispatcher.dispatchEvent(expectedLength &amp;&amp;
&gt; m_receivedLength &lt;= expectedLength, static_cast&lt;unsigned&gt;(m_receivedLength),
&gt; static_cast&lt;unsigned&gt;(expectedLength));
&gt; 
&gt; I believe that when expected length is not known, it&apos;s set to -1
&gt; (NSURLResponseUnknownLength), not to 0. Maybe there are platform differences
&gt; here, and maybe even pre-existing bugs.

Right, currently the code assumes that expectedLength &gt;= 0. It is not strictly related to the current change so I will file a bug about that as the change is already large enough.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198654</commentid>
    <comment_count>13</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-11 09:14:08 -0800</bug_when>
    <thetext>&gt;&gt; Maybe you also want no-store here?
&gt; Right, we do not want the server to cache the response too.

HTTP is actually very misleading in this regard. No-cache means that intermediate proxies shouldn&apos;t cache the response, while no-store means that UA shouldn&apos;t cache it.

I didn&apos;t know this before, and made some tests that only had no-cache. This didn&apos;t seem to cause issues in practice, probably because DRT starts with an empty cache each time anyway.

&gt; I think the latest XHR level 2 WD is pretty clear:

It&apos;s equally misleading. What we want to guarantee is that within a progress event handler, reported length matches the length of responseText. We also want readyState and other state accessors return results that match the data in progress event.

Dispatching progress events synchronously is not the only way to achieve this, but it&apos;s the simplest by far, and it&apos;s indistinguishable from JS code, since network callbacks themselves are async.

&gt; The purpose of this object is to dispatch events (thus this name) but it is
&gt; also limiting the rate of dispatching. Perhaps something along this could work
&gt; like XMLHTTPRequestProgressEventThrottle?

I thought throttle was a verb, but dictionary suggests that it&apos;s a noun, too. With that understanding, it looks good to me (&quot;XMLHttp&quot; though). Maybe worth double-checking with someone else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>198670</commentid>
    <comment_count>14</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-11 10:16:22 -0800</bug_when>
    <thetext>&gt; Right, currently the code assumes that expectedLength &gt;= 0. It is not strictly
&gt; related to the current change so I will file a bug about that as the change is
&gt; already large enough.

OK. Please double-check that this change doesn&apos;t introduce major new badness due to this issue though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200020</commentid>
    <comment_count>15</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-15 23:10:32 -0700</bug_when>
    <thetext>&gt; &gt; I think the latest XHR level 2 WD is pretty clear:
&gt; 
&gt; It&apos;s equally misleading. What we want to guarantee is that within a progress
&gt; event handler, reported length matches the length of responseText. We also want
&gt; readyState and other state accessors return results that match the data in
&gt; progress event.
&gt; 
&gt; Dispatching progress events synchronously is not the only way to achieve this,
&gt; but it&apos;s the simplest by far, and it&apos;s indistinguishable from JS code, since
&gt; network callbacks themselves are async.

Right, I had overlooked the XHR properties that have to be consistent. It is better to just dispatch synchronously.

&gt; 
&gt; &gt; The purpose of this object is to dispatch events (thus this name) but it is
&gt; &gt; also limiting the rate of dispatching. Perhaps something along this could work
&gt; &gt; like XMLHTTPRequestProgressEventThrottle?
&gt; 
&gt; I thought throttle was a verb, but dictionary suggests that it&apos;s a noun, too.
&gt; With that understanding, it looks good to me (&quot;XMLHttp&quot; though). Maybe worth
&gt; double-checking with someone else.

I was thinking of the noun&apos;s meaning when I made this proposition (more precisely the motorcycle&apos;s throttle as it is also used to limit the speed).

&gt;&gt; Right, currently the code assumes that expectedLength &gt;= 0. It is not strictly
&gt;&gt; related to the current change so I will file a bug about that as the change is
&gt;&gt; already large enough.

&gt; OK. Please double-check that this change doesn&apos;t introduce major new badness
&gt; due to this issue though.

PHP automatically fills the &quot;Content-Length&quot; so it is unlikely to be hit at this point. We will need some as-is magic to avoid sending the header.

Filed https://bugs.webkit.org/show_bug.cgi?id=36156 for the expected length assumption.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200190</commentid>
    <comment_count>16</comment_count>
      <attachid>50790</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-16 08:11:06 -0700</bug_when>
    <thetext>Created attachment 50790
Take two: Renamed new file to XMLHttpRequestProgressEventThrottle, added suspend/resume support, refactored the code a bit to avoid duplication, made the test more reliable

This should address all Alexey&apos;s comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200432</commentid>
    <comment_count>17</comment_count>
      <attachid>50790</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-16 14:21:05 -0700</bug_when>
    <thetext>Comment on attachment 50790
Take two: Renamed new file to XMLHttpRequestProgressEventThrottle, added suspend/resume support, refactored the code a bit to avoid duplication, made the test more reliable

&gt; +header(&quot;Cache-Control: no-cache, must-revalidate&quot;);
&gt; +header(&quot;Pragma: no-cache&quot;);
&gt; +header(&quot;Pragma: no-store&quot;);

I think no-store should go into Cache-Control. Did such a pragma even exist in HTTP 1.0? 

&gt; +void XMLHttpRequest::suspend()
&gt; +{
&gt; +    ActiveDOMObject::suspend();
&gt; +    m_progressEventThrottle.suspend();
&gt; +}
&gt; +
&gt; +void XMLHttpRequest::resume()
&gt; +{
&gt; +    ActiveDOMObject::resume();
&gt; +    m_progressEventThrottle.resume();
&gt; +}

We don&apos;t call the base class methods in other overrides of suspend/resume, I think it&apos;s better to be consistent.

+     EventTarget* m_target;

This is correct, but it looks suspicious - what guarantees that m_target doesn&apos;t get destroyed? Perhaps having type be XMLHttpRequest would make it less surprising to people looking at this.

+     Vector&lt;RefPtr&lt;Event&gt; &gt; m_pausedEvents;

Does this need to be vector? Isn&apos;t it that we can have no more than one pending event?

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200473</commentid>
    <comment_count>18</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-16 15:29:28 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; (From update of attachment 50790 [details])
&gt; &gt; +header(&quot;Cache-Control: no-cache, must-revalidate&quot;);
&gt; &gt; +header(&quot;Pragma: no-cache&quot;);
&gt; &gt; +header(&quot;Pragma: no-store&quot;);
&gt; 
&gt; I think no-store should go into Cache-Control. Did such a pragma even exist in
&gt; HTTP 1.0?

Right, I read your comment wrong. It will be changed before landing.

&gt; We don&apos;t call the base class methods in other overrides of suspend/resume, I
&gt; think it&apos;s better to be consistent.

I also think consistence is better.

&gt; +     EventTarget* m_target;
&gt; 
&gt; This is correct, but it looks suspicious - what guarantees that m_target
&gt; doesn&apos;t get destroyed? Perhaps having type be XMLHttpRequest would make it less
&gt; surprising to people looking at this.

Actually this is intentional: it makes it possible to implement the upload throttling very easily as both XMLHttpRequest and XMLHttpRequestUpload inherit from EventTarget. I guess adding a comment about that could help. I was thinking of something along those line (from now):

// Weak pointer to our XMLHttpRequest object as it is the one holding us.
EventTarget* m_target;
  
Alternatively, it could be changed as you said then just changed back to what I am proposing later on.

&gt; +     Vector&lt;RefPtr&lt;Event&gt; &gt; m_pausedEvents;
&gt; 
&gt; Does this need to be vector? Isn&apos;t it that we can have no more than one pending
&gt; event?

I think we can have multiple events queued. The example I am thinking of is if we suspend the throttle and then get the last bit of data from the network:
- the code in XMLHttpRequestProgressEventThrottle::dispatchEvent will queue 2 events (ready state &apos;DONE&apos; and a progress event).
- XMLHttpRequest::callReadyStateChangeListener will queue another &apos;load&apos; event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200483</commentid>
    <comment_count>19</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-16 15:51:56 -0700</bug_when>
    <thetext>&gt; // Weak pointer to our XMLHttpRequest object as it is the one holding us.
&gt; EventTarget* m_target;

OK.

&gt; I think we can have multiple events queued. The example I am thinking of is if
&gt; we suspend the throttle and then get the last bit of data from the network:
&gt; - the code in XMLHttpRequestProgressEventThrottle::dispatchEvent will queue 2
&gt; events (ready state &apos;DONE&apos; and a progress event).
&gt; - XMLHttpRequest::callReadyStateChangeListener will queue another &apos;load&apos; event.

We shouldn&apos;t be getting any data from network while suspended. Perhaps some platforms don&apos;t implement that correctly, so the failure mode should be non-catastrophic, but the same PageLoadDeferrer that calls suspend() also pauses loading.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200492</commentid>
    <comment_count>20</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-16 16:10:15 -0700</bug_when>
    <thetext>&gt; We shouldn&apos;t be getting any data from network while suspended. Perhaps some
&gt; platforms don&apos;t implement that correctly, so the failure mode should be
&gt; non-catastrophic, but the same PageLoadDeferrer that calls suspend() also
&gt; pauses loading.

I was not sure about that, which is why I played safely and went for a Vector. This means that the code could be simplified:
- we should not call dispatchProgressEvent, dispatchEvent or fired if we are suspended.
- we can use a single slot for a pending progress event.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200588</commentid>
    <comment_count>21</comment_count>
      <attachid>50875</attachid>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-16 22:30:00 -0700</bug_when>
    <thetext>Created attachment 50875
Third version: use a more tailored version of suspend / resume. Also takes Alexey comments into account.

This patch implements the previous items.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>200830</commentid>
    <comment_count>22</comment_count>
      <attachid>50875</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-03-17 09:53:16 -0700</bug_when>
    <thetext>Comment on attachment 50875
Third version: use a more tailored version of suspend / resume. Also takes Alexey comments into account.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203066</commentid>
    <comment_count>23</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-23 09:08:50 -0700</bug_when>
    <thetext>Committed fix in r56394. For the record, the windows build bot choked on:

static const double minimumProgressEventDispatchingIntervalInSeconds = 0.5;

It only accept such initialization for type &apos;int&apos; so we need to put the initialization in the cpp files (see fix in r56397).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203150</commentid>
    <comment_count>24</comment_count>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2010-03-23 12:37:20 -0700</bug_when>
    <thetext>This change seems to have regressed http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html on GTK+. It was passing consistently before, and is failing consistently after the change. Any idea what may be causing it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203232</commentid>
    <comment_count>25</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-23 14:57:43 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; This change seems to have regressed
&gt; http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html
&gt; on GTK+. It was passing consistently before, and is failing consistently after
&gt; the change. Any idea what may be causing it?

I really have no clue about that. When I saw this test failing, I was wondering if it was related to the land or just flaky.

As GTK+ is the only platform impacted, I would look into the network stack (wrong initialization of the new response or maybe deeper in libsoup). Running the http tests with --random could maybe help.

If you want me to add it to the skipped list and file a bug, just state it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203367</commentid>
    <comment_count>26</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2010-03-24 02:41:55 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; This change seems to have regressed
&gt; http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html
&gt; on GTK+. It was passing consistently before, and is failing consistently after
&gt; the change. Any idea what may be causing it?

Unfortunately http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html fails on Qt port too. I reverted r56394 and r56397 locally, and it passes again as previously, so these patches caused this bug, or they revealed a hidden bug.

If I run only http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html, it passes.

If I run WebKitTools/Scripts/run-webkit-tests http/tests/xmlhttprequest/xmlhttprequest-50ms-download-dispatch.html http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html
the test sometimes passes and sometimes fails.

But skipping http/tests/xmlhttprequest/xmlhttprequest-50ms-download-dispatch.html didn&apos;t solve the problem.

Skipping http/tests/xmlhttprequest/xmlhttprequest-onProgress-open-should-zero-length.html works, the bots would be happy, but it won&apos;t fix the bug.

I reopened the bug. We should determine if it is a regression or it is a new bug revealed by this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>203587</commentid>
    <comment_count>27</comment_count>
      <attachid>50790</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-24 14:31:22 -0700</bug_when>
    <thetext>Comment on attachment 50790
Take two: Renamed new file to XMLHttpRequestProgressEventThrottle, added suspend/resume support, refactored the code a bit to avoid duplication, made the test more reliable

Cleared Alexey Proskuryakov&apos;s review+ from obsolete attachment 50790 so that this bug does not appear in http://webkit.org/pending-commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>204557</commentid>
    <comment_count>28</comment_count>
    <who name="Julien Chaffraix">jchaffraix</who>
    <bug_when>2010-03-26 07:15:44 -0700</bug_when>
    <thetext>Closing the bug now that bug 36531 is solved.

Opened a follow-up bug 36661 to deal with upload progress event that should be handled in the same way.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>206781</commentid>
    <comment_count>29</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-03-31 15:58:19 -0700</bug_when>
    <thetext>http/tests/xmlhttprequest/xmlhttprequest-50ms-download-dispatch.html has failed on the Tiger bot ever since this commit.  Please fix. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49467</attachid>
            <date>2010-02-24 21:43:30 -0800</date>
            <delta_ts>2010-02-26 08:23:13 -0800</delta_ts>
            <desc>Proposed fix: add an XMLHttpRequestProgressEventDispatcher to handle the throttling of progress events</desc>
            <filename>18654-XHR-onProgress-dispatch-CL.diff</filename>
            <type>text/plain</type>
            <size>22687</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0NGFjN2E5Li40MDRkNjgyIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDIt
MjQgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1hIUl0gb25Qcm9ncmVzcyBl
dmVudCBuZWVkcyB0byBiZSBkaXNwYXRjaGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZp
Y2F0aW9uIHN0YXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg2NTQKKworICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL2Rvd25sb2FkLXdpdGgtZGVsYXkucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0Y2gtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0Y2guaHRtbDogQWRkZWQuCisKIDIwMTAt
MDItMjQgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIt
c3RhbXBlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9kb3dubG9hZC13aXRoLWRlbGF5LnBocCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Rvd25sb2Fk
LXdpdGgtZGVsYXkucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZWRm
MDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy9kb3dubG9hZC13aXRoLWRlbGF5LnBocApAQCAtMCwwICsxLDE5IEBACis8
P3BocAoraGVhZGVyKCJFeHBpcmVzOiBUaHUsIDAxIERlYyAyMDAzIDE2OjAwOjAwIEdNVCIpOwor
aGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7CitoZWFk
ZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKKworJGl0ZXJhdGlvbiA9ICRfR0VUWydpdGVyYXRpb24n
XTsKKyRkZWxheSA9ICRfR0VUWydkZWxheSddOworCitlY2hvICIkaXRlcmF0aW9uXG4iOworZWNo
byAiJGRlbGF5XG4iOworCitmb3IgKCRpID0gMTsgJGkgPD0gJGl0ZXJhdGlvbjsgKyskaSkgewor
ICAgIGVjaG8gImZvb2JhclxuIjsKKyAgICAvLyBGb3JjZSBjb250ZW50IHRvIGJlIHNlbnQgdG8g
dGhlIGJyb3dzZXIgYXMgaXMuCisgICAgb2JfZmx1c2goKTsKKyAgICBmbHVzaCgpOworICAgIHVz
bGVlcCgkZGVsYXkgKiAxMDAwKTsKK30KKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0
Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC01MG1zLWRvd25sb2FkLWRpc3BhdGNoLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzBhNjA1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC01MG1z
LWRvd25sb2FkLWRpc3BhdGNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUZXN0IGNh
c2UgZm9yIEJ1ZyAxODY1NTogW1hIUl0gb25Qcm9ncmVzcyBldmVudCBuZWVkcyB0byBiZSBkaXNw
YXRjaGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZpY2F0aW9uIHN0YXRlcworCitUaGlz
IHRlc3QgdmVyaWZ5IHRoYXQgd2UgImRpc3BhdGNoIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHBy
b2dyZXNzIGFib3V0IGV2ZXJ5IDUwbXMgb3IgZm9yIGV2ZXJ5IGJ5dGUgcmVjZWl2ZWQsIHdoaWNo
ZXZlciBpcyBsZWFzdCBmcmVxdWVudCIuCisKK1lvdSBzaG91bGQgc2VlIGEgc2VyaWUgb2YgNSBQ
QVNTRUQuCisKK1BBU1NFRAorUEFTU0VECitQQVNTRUQKK1BBU1NFRAorUEFTU0VECisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC01MG1zLWRvd25sb2FkLWRpc3BhdGNoLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwNTI1OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sPgor
PGhlYWQ+CisgICAgPHRpdGxlPiBUZXN0IGNhc2UgZm9yIGJ1ZyAxODY1NSA8L3RpdGxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8cD4gVGVzdCBjYXNlIGZvciBCdWcgPGEgaHJlZj0iaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjU1Ij4xODY1NTwvYT46IFtYSFJdIG9uUHJv
Z3Jlc3MgZXZlbnQKK25lZWRzIHRvIGJlIGRpc3BhdGNoZWQgYWNjb3JkaW5nIHRvIHdoYXQgdGhl
IHNwZWNpZmljYXRpb24gc3RhdGVzIDwvcD4KKzxwPiBUaGlzIHRlc3QgdmVyaWZ5IHRoYXQgd2Ug
ImRpc3BhdGNoIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHByb2dyZXNzIGFib3V0CitldmVyeSA1
MG1zIG9yIGZvciBldmVyeSBieXRlIHJlY2VpdmVkLCB3aGljaGV2ZXIgaXMgbGVhc3QgZnJlcXVl
bnQiLjwvcD4KKzxwPiBZb3Ugc2hvdWxkIHNlZSBhIHNlcmllIG9mIDUgUEFTU0VELiA8L3A+Cis8
cCBpZD0iY29uc29sZSI+PC9wPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShtZXNzYWdlKSk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKworZnVuY3Rpb24g
dGVzdChpdGVyYXRpb24sIGRlbGF5LCBleHBlY3RlZENvdW50LCBzdHJpY3QpCit7CisgICAgdmFy
IGNvdW50ID0gMDsKKyAgICBmdW5jdGlvbiBvblByb2dyZXNzKGUpIHsKKyAgICAgICAgKytjb3Vu
dDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvblJlYWR5U3RhdGUoZSkgeworICAgICAgICBpZiAo
dGhpcy5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAgICAgICAgIC8vIFRlc3Qgc2VlbXMgZmxha3kg
b24gbXkgbWFjaGluZSBzbyB0b2xlcmF0ZSBvbmUgbW9yZSBldmVudCB0aGFuIGV4cGVjdGVkIGZv
cgorICAgICAgICAgICAgLy8gdGVzdCBsb25nZXIgdGhhbiB+MTAwbXMuCisgICAgICAgICAgICB2
YXIgdG9sZXJhbmNlID0gKGl0ZXJhdGlvbiAqIGRlbGF5KSAlIDEwMCA/IDEgOiAwOworICAgICAg
ICAgICAgaWYgKHN0cmljdCkKKyAgICAgICAgICAgICAgICB0b2xlcmFuY2UgPSAwOworCisgICAg
ICAgICAgICB2YXIgZGlmZiA9IChjb3VudCAtIGV4cGVjdGVkQ291bnQpOworICAgICAgICAgICAg
dmFyIHBhc3NlZCA9ICBkaWZmID49IDAgJiYgZGlmZiA8PSB0b2xlcmFuY2U7CisgICAgICAgICAg
ICBsb2cocGFzc2VkID8gIlBBU1NFRCIgOiAiRkFJTEVEIChjb3VudCB3YXMgIiArIGNvdW50ICsg
IiBleHBlY3RlZCAiICsgZXhwZWN0ZWRDb3VudCArICIpIik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgcmVxLm9ucHJvZ3Jlc3Mg
PSBvblByb2dyZXNzOworICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBvblJlYWR5U3RhdGU7
CisgICAgcmVxLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvZG93bmxvYWQtd2l0aC1kZWxheS5waHA/
aXRlcmF0aW9uPSIgKyBpdGVyYXRpb24gKyAiJmRlbGF5PSIgKyBkZWxheSwgdHJ1ZSk7CisgICAg
cmVxLnNlbmQobnVsbCk7Cit9CisKKy8vIE51bWJlciBvZiBjaHVua3MgdG8gc2VuZCwgZGVsYXkg
YmV0d2VlbiBjaHVua3MsIGV4cGVjdGVkIG51bWJlciBvZiBldmVudHMsCisvLyBzdHJpY3QgbW9k
ZSBvciBub3QuCit2YXIgdGVzdHMgPSBbIFsgNSwgMjAsIDMgLCBmYWxzZV0sCisgICAgICAgICAg
ICAgIFsgMiwgODAsIDIgLCB0cnVlXSwKKyAgICAgICAgICAgICAgWyA2LCAzMCwgNCwgZmFsc2Vd
LAorICAgICAgICAgICAgICBbIDEsIDEwMDAsIDEsIHRydWVdLAorICAgICAgICAgICAgICBbIDIs
IDUwLCAyLCB0cnVlXQorICAgICAgICAgICAgXTsKKwordHJ5IHsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgY3VycmVudFRlc3QgPSB0ZXN0c1tpXTsK
KyAgICB0ZXN0KGN1cnJlbnRUZXN0WzBdLCBjdXJyZW50VGVzdFsxXSwgY3VycmVudFRlc3RbMl0s
IGN1cnJlbnRUZXN0WzNdKTsKK30KK30gY2F0Y2goZSkgeworICAgIGxvZygiRkFJTEVEOiBlcnJv
ciEiKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9BbmRyb2lkLm1rIGIvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IGMyNDExYjEuLmEzNGQzNzEg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQW5kcm9pZC5taworKysgYi9XZWJDb3JlL0FuZHJvaWQubWsK
QEAgLTg5NCw1ICs4OTQsNiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMp
IFwKIAlcCiAJeG1sL0RPTVBhcnNlci5jcHAgXAogCXhtbC9YTUxIdHRwUmVxdWVzdC5jcHAgXAor
CXhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAJeG1sL1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCiAJeG1sL1hNTFNlcmlhbGl6ZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU4YjI1N2Eu
Ljk0Mzg2YzIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTAtMDItMjQgIEp1bGllbiBDaGFmZnJhaXggIDxq
Y2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1hIUl0gb25Qcm9ncmVzcyBldmVudCBuZWVkcyB0byBiZSBkaXNwYXRj
aGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZpY2F0aW9uIHN0YXRlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2NTQKKworICAgICAgICBU
ZXN0OiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxv
YWQtZGlzcGF0Y2guaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyIHRvIHRoZSBidWlsZCBzeXN0ZW1zLgorCisg
ICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdCk6IEluaXRpYWxpemUgdGhlIHRpbWVyLgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIp
OiBBcyB3ZSBkbyBub3QgaW1wbGVtZW50IHRoZSBxdWV1ZSB0YXNrcywKKyAgICAgICAgbWFudWFs
bHkgZGlzcGF0Y2ggdGhlIHJlbWFpbmluZyBwcm9ncmVzcyBldmVudC4KKyAgICAgICAgKFdlYkNv
cmU6OlhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNlaXZlRGF0YSk6IFVzZSB0aGUgWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlciB0byBkaXNwYXRjaCBldmVudHMuCisgICAgICAgICog
eG1sL1hNTEh0dHBSZXF1ZXN0Lmg6IEFkZCB0aGUgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
RGlzcGF0Y2hlci4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlz
cGF0Y2hlci5jcHA6IEFkZGVkLgorCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnREaXNwYXRjaGVyOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRj
aGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3Bh
dGNoZXI6On5YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXI6OmRpc3BhdGNo
RXZlbnQpOiBUaGlzIG1ldGhvZCBlaXRoZXIgZGlzcGF0Y2ggdGhlIGV2ZW50IG9yIHJlZ2lzdGVy
IGl0CisgICAgICAgIGZvciBsYXRlciBkaXNwYXRjaCAodGhpcyBpcyBuZWVkZWQgdG8gbWF0Y2gg
dGhlIHNwZWNpZmljYXRpb24pLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50RGlzcGF0Y2hlcjo6ZGlzcGF0Y2hFdmVudE5vdyk6IERpc3BhdGNoIHRoZSBldmVu
dCBzdHJhaWdodCBhd2F5LgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50RGlzcGF0Y2hlcjo6ZmlyZWQpOiBEaXNwYXRjaCBhbiBldmVudCBpZiB3ZSBoYXZlIG9u
ZSByZWdpc3RlcmVkLiBJZiBub3QsIGp1c3Qgc3RvcCB0aGUKKyAgICAgICAgdGltZXIgYXMgaXQg
bWVhbnQgd2UgZGlkIG5vdCBoYXZlIGFueSB1cGRhdGUgaW4gdGhlIHByZXZpb3VzIGludGVydmFs
IGFuZCBzaG91bGQgZGlzcGF0Y2ggYSBwcm9ncmVzcyBldmVudCBmb3IgdGhlIG5leHQgYnl0ZS4K
KyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlci5oOiBB
ZGRlZC4KKwogMjAxMC0wMi0yNCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUuY29tPgog
CiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9H
TlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5kZXggOTJmODEwMy4uMTg0
M2M5ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQorKysgYi9XZWJDb3JlL0dO
VW1ha2VmaWxlLmFtCkBAIC0xOTU0LDYgKzE5NTQsNyBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAog
CVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmggXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0RXhjZXB0aW9uLmggXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dC5oIFwKKwlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVy
LmNwcCBcCiAJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIFwKIAlXZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oIFwKIAlXZWJDb3JlL3htbC9YTUxTZXJpYWxpemVy
LmNwcCBcCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUuZ3lwaSBiL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCmluZGV4IGIzYmQwOGEuLjhmNzM0ZTEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpCisrKyBiL1dlYkNvcmUvV2ViQ29yZS5neXBpCkBAIC0zNjYzLDYgKzM2NjMsNyBAQAog
ICAgICAgICAgICAgJ3htbC9YTUxIdHRwUmVxdWVzdC5oJywKICAgICAgICAgICAgICd4bWwvWE1M
SHR0cFJlcXVlc3RFeGNlcHRpb24uaCcsCiAgICAgICAgICAgICAneG1sL1hNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudC5oJywKKyAgICAgICAgICAgICd4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50RGlzcGF0Y2hlci5jcHAnLAogICAgICAgICAgICAgJ3htbC9YTUxIdHRwUmVxdWVzdFVw
bG9hZC5jcHAnLAogICAgICAgICAgICAgJ3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5oJywKICAg
ICAgICAgICAgICd4bWwvWE1MU2VyaWFsaXplci5jcHAnLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9X
ZWJDb3JlLnBybyBiL1dlYkNvcmUvV2ViQ29yZS5wcm8KaW5kZXggYTEwNjgzZC4uNjdhM2M5MiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnBybworKysgYi9XZWJDb3JlL1dlYkNvcmUucHJv
CkBAIC05NzYsNiArOTc2LDcgQEAgU09VUkNFUyArPSBcCiAgICAgcmVuZGVyaW5nL3N0eWxlL1N0
eWxlVmlzdWFsRGF0YS5jcHAgXAogICAgIHhtbC9ET01QYXJzZXIuY3BwIFwKICAgICB4bWwvWE1M
SHR0cFJlcXVlc3QuY3BwIFwKKyAgICB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlz
cGF0Y2hlci5jcHAgXAogICAgIHhtbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAgXAogICAgIHht
bC9YTUxTZXJpYWxpemVyLmNwcCAKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvaiBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oK
aW5kZXggZTUzN2UzNS4uZGI5NTQwZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNw
cm9qCkBAIC0yODI4Nyw2ICsyODI4NywxMCBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
RGlzcGF0Y2hlci5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVs
YXRpdmVQYXRoPSIuLlx4bWxcWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIg0KIAkJCQk+DQogCQkJ
PC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MDRkNDAyOS4uYTZjMDc0MyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9w
cm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oKQEAgLTQzNjIsNiArNDM2Miw4IEBACiAJCUJDNzcyQjQwMEM0RUE5MUUwMDgzMjg1RiAv
KiBDU1NTdHlsZVNlbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzc3MkIzQTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rvci5o
ICovOyB9OwogCQlCQzc3MkM0NjBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNDQw
QzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCAqLzsgfTsKIAkJQkM3NzJDNDcw
QzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0NTBDNEVCMkM2MDA4MzI4NUYgLyogWE1M
SHR0cFJlcXVlc3QuaCAqLzsgfTsKKwkJQTEzNkEwMEMxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwICovOyB9OworCQlBMTM2QTAw
RDExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hl
ci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzNkEw
MEIxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNo
ZXIuaCAqLzsgfTsKIAkJQkM3NzJDNEUwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0
cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3
NzJDNEMwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwICovOyB9OwogCQlC
Qzc3MkM0RjBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEQwQzRFQjMwNDAwODMy
ODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYgLyogTUlNRVR5cGVS
ZWdpc3RyeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IEJDNzcyQzVEMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tICov
OyB9OwpAQCAtNzgyNCw2ICs3ODI2LDggQEAKIAkJOUY3MjMwNEMxMTE4NEI0MTAwQUQwMTI2IC8q
IFNjcmlwdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0
UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjcyMzA0RDExMTg0QjQx
MDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gU2NyaXB0UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk5RjcyMzA0RTExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlci5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMzZBMDBCMTEzNERCRDIwMENDOEQ1MCAvKiBY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVCIC8q
IEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBIVE1MRWxlbWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBMTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE4NzYwRDBCMkExMjAxMDBBMTZFQ0UgLyogRHJhZ0Fj
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0FjdGlvbnMuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MzA2LDYgKzE1MzEwLDggQEAKIAkJCQlC
QzYwRDlDODBEMkEyOUU1MDBCOTkxOEYgLyogWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaWRsICov
LAogCQkJCUY5RjBFRDc3MERCNTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnQuaCAqLywKIAkJCQlGOUYwRUQ3ODBEQjUwQ0EyMDBEMTZEQjkgLyogWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50LmlkbCAqLywKKwkJCQlBMTM2QTAwQTExMzREQkQyMDBDQzhENTAgLyog
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJQTEzNkEw
MEIxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNo
ZXIuaCAqLywKIAkJCQlCQ0RGRDQ4RDBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RV
cGxvYWQuY3BwICovLAogCQkJCUJDREZENDhDMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRwUmVx
dWVzdFVwbG9hZC5oICovLAogCQkJCUJDREZENDkwMEUzMDU2NDQwMDlEMTBBRCAvKiBYTUxIdHRw
UmVxdWVzdFVwbG9hZC5pZGwgKi8sCkBAIC0xODUxMCw2ICsxODUxNiw3IEBACiAJCQkJQkM3NzJD
NDcwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzYwRDlDOTBEMkEyOUU1MDBCOTkxOEYgLyogWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUY5RjBFRDdBMERCNTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUExMzZBMDBEMTEzNERCRDIw
MENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQ0RGRDQ4RTBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RV
cGxvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MzNDODBEMEEyQ0YyNTYwMEQ1NzY2NCAvKiBY
TUxOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5IC8q
IFhNTE5TTmFtZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjA2OTcsNiArMjA3MDQsNyBAQAogCQkJ
CUE4MzNDN0NDMEEyQ0YwNzQwMEQ1NzY2NCAvKiBYTGlua05hbWVzLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCUJDNzcyQzQ2MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCQ0RGRDQ4RjBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVl
c3RVcGxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTEzNkEwMEMxMTM0REJEMjAwQ0M4RDUw
IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJQTgzM0M4MEMwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCUUxNUEzNkQ5MTEwNDU3MjcwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTFBQ0U1M0VBMEE4RDE4RTcwMDIyOTQ3RCAvKiBYTUxTZXJpYWxp
emVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDMyODE4ZGYu
LjNlNDQ5YTIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAorKysg
Yi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTE1Nyw2ICsxNTcsNyBAQCBYTUxI
dHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29udGV4
dCkKICAgICAsIG1fcmVjZWl2ZWRMZW5ndGgoMCkKICAgICAsIG1fbGFzdFNlbmRMaW5lTnVtYmVy
KDApCiAgICAgLCBtX2V4Y2VwdGlvbkNvZGUoMCkKKyAgICAsIG1fcHJvZ3Jlc3NFdmVudERpc3Bh
dGNoZXIodGhpcykKIHsKICAgICBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCk7
CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjU4LDYgKzI1OSwxMCBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0
OjpjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCkKICAgICAgICAgdGltZWxpbmVBZ2VudC0+
d2lsbENoYW5nZVhIUlJlYWR5U3RhdGUobV91cmwuc3RyaW5nKCksIG1fc3RhdGUpOwogI2VuZGlm
CiAKKyAgICAvLyBGbHVzaCBvdXIgcGVuZGluZyBldmVudHMgaWYgbmVlZGVkLgorICAgIGlmICht
X3N0YXRlID09IERPTkUpCisgICAgICAgIG1fcHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuZGlzcGF0
Y2hFdmVudE5vdygpOworCiAgICAgZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50KSk7CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtOTE4LDkgKzkyMyw3IEBAIHZvaWQgWE1MSHR0cFJlcXVl
c3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiAgICAgICAgIGxv
bmcgbG9uZyBleHBlY3RlZExlbmd0aCA9IG1fcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVuZ3Ro
KCk7CiAgICAgICAgIG1fcmVjZWl2ZWRMZW5ndGggKz0gbGVuOwogCi0gICAgICAgIC8vIEZJWE1F
OiB0aGUgc3BlYyByZXF1aXJlcyB0aGF0IHdlIGRpc3BhdGNoIHRoZSBldmVudCBhY2NvcmRpbmcg
dG8gdGhlIGxlYXN0Ci0gICAgICAgIC8vIGZyZXF1ZW50IG1ldGhvZCBiZXR3ZWVuIGV2ZXJ5IDM1
MG1zICgrLy0yMDBtcykgYW5kIGZvciBldmVyeSBieXRlIHJlY2VpdmVkLgotICAgICAgICBkaXNw
YXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMo
KS5wcm9ncmVzc0V2ZW50LCBleHBlY3RlZExlbmd0aCAmJiBtX3JlY2VpdmVkTGVuZ3RoIDw9IGV4
cGVjdGVkTGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9yZWNlaXZlZExlbmd0aCksIHN0
YXRpY19jYXN0PHVuc2lnbmVkPihleHBlY3RlZExlbmd0aCkpKTsKKyAgICAgICAgbV9wcm9ncmVz
c0V2ZW50RGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVjZWl2
ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlY2Vp
dmVkTGVuZ3RoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cGVjdGVkTGVuZ3RoKSk7CiAKICAg
ICAgICAgaWYgKG1fc3RhdGUgIT0gTE9BRElORykKICAgICAgICAgICAgIGNoYW5nZVN0YXRlKExP
QURJTkcpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaCBiL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXggMmNlYTVjNi4uODA0NGVhYiAxMDA2NDQKLS0t
IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRw
UmVxdWVzdC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5o
IgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2FkZXJD
bGllbnQuaCIKKyNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVy
LmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC0x
ODQsNiArMTg1LDggQEAgcHJpdmF0ZToKICAgICBFeGNlcHRpb25Db2RlIG1fZXhjZXB0aW9uQ29k
ZTsKIAogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKworICAgIFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIgbV9wcm9ncmVzc0V2ZW50RGlzcGF0Y2hl
cjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1s
L1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwIGIvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwNTVmYwotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwCkBAIC0wLDAgKzEs
OTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEp1bGllbiBDaGFmZnJhaXggPGpjaGFm
ZnJhaXhAd2Via2l0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuaCIKKworI2luY2x1ZGUgIkV2
ZW50VGFyZ2V0LmgiCisjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0
Y2hlcjo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcihFdmVudFRhcmdldCog
dGFyZ2V0KQorICAgIDogbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9sb2FkZWQoMCkKKyAgICAs
IG1fdG90YWwoMCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0KTsKK30KKworWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50RGlzcGF0Y2hlcjo6flhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3Bh
dGNoZXIoKQoreworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNo
ZXI6OmRpc3BhdGNoRXZlbnQoYm9vbCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb2FkZWQs
IHVuc2lnbmVkIHRvdGFsKQoreworICAgIGlmICghaXNBY3RpdmUoKSkgeworICAgICAgICAvLyBU
aGUgdGltZXIgaXMgbm90IGFjdGl2ZSBzbyB0aGUgbGVhc3QgZnJlcXVlbnQgZXZlbnQgZm9yIG5v
dyBpcyBldmVyeSBieXRlIHNvIGp1c3QgZ28gYWhlYWQgYW5kIGRpc3BhdGNoIHRoZSBldmVudC4K
KworICAgICAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHBlbmRpbmcgbG9hZGVkICYgdG90
YWwgaW5mb3JtYXRpb24gZnJvbSBhIHByZXZpb3VzIHJ1bi4KKyAgICAgICAgQVNTRVJUKCFtX2xv
YWRlZCk7CisgICAgICAgIEFTU0VSVCghbV90b3RhbCk7CisKKyAgICAgICAgbV90YXJnZXQtPmRp
c3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnByb2dyZXNzRXZlbnQsIGxlbmd0aENvbXB1dGFibGUsIGxvYWRlZCwgdG90YWwpKTsKKyAg
ICAgICAgc3RhcnRSZXBlYXRpbmcocHJvZ3Jlc3NFdmVudERpc3BhdGNoaW5nVGltZSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBUaGUgdGltZXIgaXMgYWxyZWFkeSBhY3RpdmUg
c28gNTAgbXMgaXMgdGhlIGxlYXN0IGZyZXF1ZW50IGV2ZW50LgorICAgIG1fbGVuZ3RoQ29tcHV0
YWJsZSA9IGxlbmd0aENvbXB1dGFibGU7CisgICAgbV9sb2FkZWQgPSBsb2FkZWQ7CisgICAgbV90
b3RhbCA9IHRvdGFsOworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnROb3coKQoreworICAgIGlmICghaXNBY3RpdmUoKSB8fCAoIW1f
bG9hZGVkICYmICFtX3RvdGFsKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90YXJnZXQtPmRp
c3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLnByb2dyZXNzRXZlbnQsIG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwp
KTsKKyAgICBtX3RvdGFsID0gMDsKKyAgICBtX2xvYWRlZCA9IDA7Cit9CisKK3ZvaWQgWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcjo6ZmlyZWQoKQoreworICAgIC8vIENoZWNr
IGZvciBlbXB0eSBpbmZvcm1hdGlvbjogd2hpY2ggbWVhbnMgdGhhdCBubyBwcm9ncmVzcyBldmVu
dCB3YXMgcXVldWVkIHNpbmNlIHRoZSBwcmV2aW91cyBkaXNwYXRjaC4KKyAgICAvLyBXZSBjYW4g
c2FmZWx5IHN0b3AgdGhlIHRpbWVyLgorICAgIGlmICghbV9sb2FkZWQgJiYgIW1fdG90YWwpIHsK
KyAgICAgICAgc3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV90YXJnZXQt
PmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLnByb2dyZXNzRXZlbnQsIG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90
YWwpKTsKKyAgICBtX3RvdGFsID0gMDsKKyAgICBtX2xvYWRlZCA9IDA7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudERpc3BhdGNoZXIuaCBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudERpc3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4z
NTE5MGZiCi0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50RGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTAsIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4uCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpZm5kZWYgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcl9oCisjZGVm
aW5lIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXJfaAorCisjaW5jbHVkZSAi
VGltZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFdmVudFRhcmdldDsKKwor
Ly8gVGhpcyBpbXBsZW1lbnRzIHRoZSBYSFIyIHByb2dyZXNzIGV2ZW50IGRpc3BhdGNoaW5nOiAi
ZGlzcGF0Y2ggYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MKKy8vIGFib3V0IGV2ZXJ5
IDUwbXMgb3IgZm9yIGV2ZXJ5IGJ5dGUgcmVjZWl2ZWQsIHdoaWNoZXZlciBpcyBsZWFzdCBmcmVx
dWVudCIuCitjbGFzcyBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyIDogcHVi
bGljIFRpbWVyQmFzZSB7CitwdWJsaWM6CisgICAgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
RGlzcGF0Y2hlcihFdmVudFRhcmdldCopOworICAgIHZpcnR1YWwgflhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudERpc3BhdGNoZXIoKTsKKworICAgIHZvaWQgZGlzcGF0Y2hFdmVudChib29sIGxl
bmd0aENvbXB1dGFibGUsIHVuc2lnbmVkIGxvYWRlZCwgdW5zaWduZWQgdG90YWwpOworCisgICAg
Ly8gRklYTUU6IFRoaXMgaXMgYSB0ZW1wb3JhcnkgbWVhc3VyZSBhcyB3ZSBkbyBub3QgaGF2ZSB0
aGUgY29uY2VwdCBvZiB0YXNrIGFuZCB0aHVzIGNhbm5vdCBwb3N0IGEgdGFzay4KKyAgICB2b2lk
IGRpc3BhdGNoRXZlbnROb3coKTsKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29uc3QgZG91Ymxl
IHByb2dyZXNzRXZlbnREaXNwYXRjaGluZ1RpbWUgPSAuMDU7IC8vIDUwIG1zIHBlciBzcGVjaWZp
Y2F0aW9uLgorCisgICAgdmlydHVhbCB2b2lkIGZpcmVkKCk7CisKKyAgICBFdmVudFRhcmdldCog
bV90YXJnZXQ7CisKKyAgICBib29sIG1fbGVuZ3RoQ29tcHV0YWJsZTsKKyAgICB1bnNpZ25lZCBt
X2xvYWRlZDsKKyAgICB1bnNpZ25lZCBtX3RvdGFsOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcl9o
Cg==
</data>
<flag name="commit-queue"
          id="32343"
          type_id="3"
          status="-"
          setter="jchaffraix"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>49587</attachid>
            <date>2010-02-26 08:23:13 -0800</date>
            <delta_ts>2010-03-16 08:11:06 -0700</delta_ts>
            <desc>Updated patch: corrected build systems and licenses</desc>
            <filename>18654-XHR-onProgress-dispatch-CL.diff</filename>
            <type>text/plain</type>
            <size>23406</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0NGFjN2E5Li5lZjc5YWYwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMTAtMDIt
MjYgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1hIUl0gb25Qcm9ncmVzcyBl
dmVudCBuZWVkcyB0byBiZSBkaXNwYXRjaGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZp
Y2F0aW9uIHN0YXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg2NTQKKworICAgICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3Vy
Y2VzL2Rvd25sb2FkLXdpdGgtZGVsYXkucGhwOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0Y2gtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0Y2guaHRtbDogQWRkZWQuCisKIDIwMTAt
MDItMjQgIERhbiBCZXJuc3RlaW4gIDxtaXR6QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIt
c3RhbXBlZCBieSBBbmRlcnMgQ2FybHNzb24uCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9kb3dubG9hZC13aXRoLWRlbGF5LnBocCBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2VzL2Rvd25sb2Fk
LXdpdGgtZGVsYXkucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwZWRm
MDAKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1
ZXN0L3Jlc291cmNlcy9kb3dubG9hZC13aXRoLWRlbGF5LnBocApAQCAtMCwwICsxLDE5IEBACis8
P3BocAoraGVhZGVyKCJFeHBpcmVzOiBUaHUsIDAxIERlYyAyMDAzIDE2OjAwOjAwIEdNVCIpOwor
aGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7CitoZWFk
ZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKKworJGl0ZXJhdGlvbiA9ICRfR0VUWydpdGVyYXRpb24n
XTsKKyRkZWxheSA9ICRfR0VUWydkZWxheSddOworCitlY2hvICIkaXRlcmF0aW9uXG4iOworZWNo
byAiJGRlbGF5XG4iOworCitmb3IgKCRpID0gMTsgJGkgPD0gJGl0ZXJhdGlvbjsgKyskaSkgewor
ICAgIGVjaG8gImZvb2JhclxuIjsKKyAgICAvLyBGb3JjZSBjb250ZW50IHRvIGJlIHNlbnQgdG8g
dGhlIGJyb3dzZXIgYXMgaXMuCisgICAgb2JfZmx1c2goKTsKKyAgICBmbHVzaCgpOworICAgIHVz
bGVlcCgkZGVsYXkgKiAxMDAwKTsKK30KKz8+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0
Y2gtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94
bWxodHRwcmVxdWVzdC01MG1zLWRvd25sb2FkLWRpc3BhdGNoLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYzBhNjA1Ci0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC01MG1z
LWRvd25sb2FkLWRpc3BhdGNoLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDEyIEBACitUZXN0IGNh
c2UgZm9yIEJ1ZyAxODY1NTogW1hIUl0gb25Qcm9ncmVzcyBldmVudCBuZWVkcyB0byBiZSBkaXNw
YXRjaGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZpY2F0aW9uIHN0YXRlcworCitUaGlz
IHRlc3QgdmVyaWZ5IHRoYXQgd2UgImRpc3BhdGNoIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHBy
b2dyZXNzIGFib3V0IGV2ZXJ5IDUwbXMgb3IgZm9yIGV2ZXJ5IGJ5dGUgcmVjZWl2ZWQsIHdoaWNo
ZXZlciBpcyBsZWFzdCBmcmVxdWVudCIuCisKK1lvdSBzaG91bGQgc2VlIGEgc2VyaWUgb2YgNSBQ
QVNTRUQuCisKK1BBU1NFRAorUEFTU0VECitQQVNTRUQKK1BBU1NFRAorUEFTU0VECisKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94
bWxodHRwcmVxdWVzdC94bWxodHRwcmVxdWVzdC01MG1zLWRvd25sb2FkLWRpc3BhdGNoLmh0bWwK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAwNTI1OQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVl
c3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC5odG1sCkBAIC0wLDAgKzEsNzAgQEAKKzxodG1sPgor
PGhlYWQ+CisgICAgPHRpdGxlPiBUZXN0IGNhc2UgZm9yIGJ1ZyAxODY1NSA8L3RpdGxlPgorPC9o
ZWFkPgorPGJvZHk+Cis8cD4gVGVzdCBjYXNlIGZvciBCdWcgPGEgaHJlZj0iaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NjU1Ij4xODY1NTwvYT46IFtYSFJdIG9uUHJv
Z3Jlc3MgZXZlbnQKK25lZWRzIHRvIGJlIGRpc3BhdGNoZWQgYWNjb3JkaW5nIHRvIHdoYXQgdGhl
IHNwZWNpZmljYXRpb24gc3RhdGVzIDwvcD4KKzxwPiBUaGlzIHRlc3QgdmVyaWZ5IHRoYXQgd2Ug
ImRpc3BhdGNoIGEgcHJvZ3Jlc3MgZXZlbnQgY2FsbGVkIHByb2dyZXNzIGFib3V0CitldmVyeSA1
MG1zIG9yIGZvciBldmVyeSBieXRlIHJlY2VpdmVkLCB3aGljaGV2ZXIgaXMgbGVhc3QgZnJlcXVl
bnQiLjwvcD4KKzxwPiBZb3Ugc2hvdWxkIHNlZSBhIHNlcmllIG9mIDUgUEFTU0VELiA8L3A+Cis8
cCBpZD0iY29uc29sZSI+PC9wPgorCis8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Citp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgIGxheW91dFRlc3RDb250cm9sbGVy
LmR1bXBBc1RleHQoKTsKKworZnVuY3Rpb24gbG9nKG1lc3NhZ2UpCit7CisgICAgZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0
Tm9kZShtZXNzYWdlKSk7CisgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKS5h
cHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJiciIpKTsKK30KKworZnVuY3Rpb24g
dGVzdChpdGVyYXRpb24sIGRlbGF5LCBleHBlY3RlZENvdW50LCBzdHJpY3QpCit7CisgICAgdmFy
IGNvdW50ID0gMDsKKyAgICBmdW5jdGlvbiBvblByb2dyZXNzKGUpIHsKKyAgICAgICAgKytjb3Vu
dDsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBvblJlYWR5U3RhdGUoZSkgeworICAgICAgICBpZiAo
dGhpcy5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAgICAgICAgIC8vIFRlc3Qgc2VlbXMgZmxha3kg
b24gbXkgbWFjaGluZSBzbyB0b2xlcmF0ZSBvbmUgbW9yZSBldmVudCB0aGFuIGV4cGVjdGVkIGZv
cgorICAgICAgICAgICAgLy8gdGVzdCBsb25nZXIgdGhhbiB+MTAwbXMuCisgICAgICAgICAgICB2
YXIgdG9sZXJhbmNlID0gKGl0ZXJhdGlvbiAqIGRlbGF5KSAlIDEwMCA/IDEgOiAwOworICAgICAg
ICAgICAgaWYgKHN0cmljdCkKKyAgICAgICAgICAgICAgICB0b2xlcmFuY2UgPSAwOworCisgICAg
ICAgICAgICB2YXIgZGlmZiA9IChjb3VudCAtIGV4cGVjdGVkQ291bnQpOworICAgICAgICAgICAg
dmFyIHBhc3NlZCA9ICBkaWZmID49IDAgJiYgZGlmZiA8PSB0b2xlcmFuY2U7CisgICAgICAgICAg
ICBsb2cocGFzc2VkID8gIlBBU1NFRCIgOiAiRkFJTEVEIChjb3VudCB3YXMgIiArIGNvdW50ICsg
IiBleHBlY3RlZCAiICsgZXhwZWN0ZWRDb3VudCArICIpIik7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgcmVxLm9ucHJvZ3Jlc3Mg
PSBvblByb2dyZXNzOworICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBvblJlYWR5U3RhdGU7
CisgICAgcmVxLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvZG93bmxvYWQtd2l0aC1kZWxheS5waHA/
aXRlcmF0aW9uPSIgKyBpdGVyYXRpb24gKyAiJmRlbGF5PSIgKyBkZWxheSwgdHJ1ZSk7CisgICAg
cmVxLnNlbmQobnVsbCk7Cit9CisKKy8vIE51bWJlciBvZiBjaHVua3MgdG8gc2VuZCwgZGVsYXkg
YmV0d2VlbiBjaHVua3MsIGV4cGVjdGVkIG51bWJlciBvZiBldmVudHMsCisvLyBzdHJpY3QgbW9k
ZSBvciBub3QuCit2YXIgdGVzdHMgPSBbIFsgNSwgMjAsIDMgLCBmYWxzZV0sCisgICAgICAgICAg
ICAgIFsgMiwgODAsIDIgLCB0cnVlXSwKKyAgICAgICAgICAgICAgWyA2LCAzMCwgNCwgZmFsc2Vd
LAorICAgICAgICAgICAgICBbIDEsIDEwMDAsIDEsIHRydWVdLAorICAgICAgICAgICAgICBbIDIs
IDUwLCAyLCB0cnVlXQorICAgICAgICAgICAgXTsKKwordHJ5IHsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgdGVzdHMubGVuZ3RoOyArK2kpIHsKKyAgICB2YXIgY3VycmVudFRlc3QgPSB0ZXN0c1tpXTsK
KyAgICB0ZXN0KGN1cnJlbnRUZXN0WzBdLCBjdXJyZW50VGVzdFsxXSwgY3VycmVudFRlc3RbMl0s
IGN1cnJlbnRUZXN0WzNdKTsKK30KK30gY2F0Y2goZSkgeworICAgIGxvZygiRkFJTEVEOiBlcnJv
ciEiKTsKK30KKzwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvV2ViQ29y
ZS9BbmRyb2lkLm1rIGIvV2ViQ29yZS9BbmRyb2lkLm1rCmluZGV4IGMyNDExYjEuLmI1OWU4YzAg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQW5kcm9pZC5taworKysgYi9XZWJDb3JlL0FuZHJvaWQubWsK
QEAgLTg5NCw1ICs4OTQsNiBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NBTF9TUkNfRklMRVMp
IFwKIAlcCiAJeG1sL0RPTVBhcnNlci5jcHAgXAogCXhtbC9YTUxIdHRwUmVxdWVzdC5jcHAgXAor
CXhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAJeG1sL1hN
TEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCiAJeG1sL1hNTFNlcmlhbGl6ZXIuY3BwCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGU4YjI1N2Eu
LmRkNmE4MDUgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMzggQEAKKzIwMTAtMDItMjYgIEp1bGllbiBDaGFmZnJhaXggIDxq
Y2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgW1hIUl0gb25Qcm9ncmVzcyBldmVudCBuZWVkcyB0byBiZSBkaXNwYXRj
aGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZpY2F0aW9uIHN0YXRlcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2NTQKKworICAgICAgICBU
ZXN0OiBodHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxv
YWQtZGlzcGF0Y2guaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVt
YWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5w
cm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICog
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyIHRvIHRoZSBidWlsZCBzeXN0ZW1zLgorCisg
ICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0
dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdCk6IEluaXRpYWxpemVkIHRoZSB0aW1lci4KKyAgICAg
ICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVy
KTogQXMgd2UgZG8gbm90IGltcGxlbWVudCB0aGUgcXVldWUgdGFza3MsCisgICAgICAgIHdlIGhh
dmUgdG8gbWFudWFsbHkgZGlzcGF0Y2ggdGhlIHJlbWFpbmluZyBwcm9ncmVzcyBldmVudCB3aGVu
IGluIHRoZSBET05FIHN0YXRlLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmRp
ZFJlY2VpdmVEYXRhKTogVXNlZCB0aGUgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0
Y2hlciB0byBkaXNwYXRjaCBldmVudHMuCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0Lmg6
IEFkZGVkIGEgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlciBtZW1iZXIuCisg
ICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwOiBB
ZGRlZC4KKworICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlz
cGF0Y2hlcjo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcik6CisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyOjp+WE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcik6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyOjpkaXNwYXRjaEV2ZW50KTogVGhpcyBt
ZXRob2QgZWl0aGVyIGRpc3BhdGNoIHRoZSBldmVudCBvciByZWdpc3RlciBpdAorICAgICAgICBm
b3IgbGF0ZXIgZGlzcGF0Y2ggKHRoaXMgaXMgbmVlZGVkIHRvIG1hdGNoIHRoZSBzcGVjaWZpY2F0
aW9uKS4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3Bh
dGNoZXI6OmRpc3BhdGNoRXZlbnROb3cpOiBDYWxsZWQgdG8gZGlzcGF0Y2ggdGhlIGV2ZW50IHN0
cmFpZ2h0IGF3YXkuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnREaXNwYXRjaGVyOjpmaXJlZCk6IENhbGxlZCB0byBkaXNwYXRjaCBhbiBldmVudCBpZiB3ZSBo
YXZlIG9uZSByZWdpc3RlcmVkLiBJZiBub3QsCisgICAgICAgIGp1c3Qgc3RvcCB0aGUgdGltZXIg
YXMgaXQgbWVhbnQgd2UgZGlkIG5vdCBoYXZlIGFueSB1cGRhdGUgaW4gdGhlIHByZXZpb3VzIGlu
dGVydmFsIGFuZCBzaG91bGQgZGlzcGF0Y2ggYSBwcm9ncmVzcyBldmVudAorICAgICAgICBmb3Ig
dGhlIG5leHQgYnl0ZS4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
RGlzcGF0Y2hlci5oOiBBZGRlZC4KKwogMjAxMC0wMi0yNCAgTWFjaWVqIFN0YWNob3dpYWsgIDxt
anNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE9saXZlciBIdW50LgpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbSBiL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KaW5k
ZXggOTJmODEwMy4uYWMxOGYxZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQor
KysgYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCkBAIC0xOTU0LDYgKzE5NTQsOCBAQCB3ZWJjb3Jl
X3NvdXJjZXMgKz0gXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmggXAogCVdlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmggXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudC5oIFwKKwlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnREaXNwYXRjaGVyLmNwcCBcCisJV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50RGlzcGF0Y2hlci5oIFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5j
cHAgXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmggXAogCVdlYkNvcmUveG1s
L1hNTFNlcmlhbGl6ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggYjNiZDA4YS4uNjgzMGMzYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2NjMs
NiArMzY2Myw4IEBACiAgICAgICAgICAgICAneG1sL1hNTEh0dHBSZXF1ZXN0LmgnLAogICAgICAg
ICAgICAgJ3htbC9YTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oJywKICAgICAgICAgICAgICd4bWwv
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgnLAorICAgICAgICAgICAgJ3htbC9YTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmNwcCcsCisgICAgICAgICAgICAneG1sL1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuaCcsCiAgICAgICAgICAgICAneG1s
L1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCcsCiAgICAgICAgICAgICAneG1sL1hNTEh0dHBSZXF1
ZXN0VXBsb2FkLmgnLAogICAgICAgICAgICAgJ3htbC9YTUxTZXJpYWxpemVyLmNwcCcsCmRpZmYg
LS1naXQgYS9XZWJDb3JlL1dlYkNvcmUucHJvIGIvV2ViQ29yZS9XZWJDb3JlLnBybwppbmRleCBh
MTA2ODNkLi41MWJjNzkzIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUucHJvCisrKyBiL1dl
YkNvcmUvV2ViQ29yZS5wcm8KQEAgLTk3Niw2ICs5NzYsNyBAQCBTT1VSQ0VTICs9IFwKICAgICBy
ZW5kZXJpbmcvc3R5bGUvU3R5bGVWaXN1YWxEYXRhLmNwcCBcCiAgICAgeG1sL0RPTVBhcnNlci5j
cHAgXAogICAgIHhtbC9YTUxIdHRwUmVxdWVzdC5jcHAgXAorICAgIHhtbC9YTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmNwcCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0VXBs
b2FkLmNwcCBcCiAgICAgeG1sL1hNTFNlcmlhbGl6ZXIuY3BwIAogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvagppbmRleCBlNTM3ZTM1Li44NTM2NjFkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29yZS52
Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI4Mjg3LDYgKzI4Mjg3LDE0IEBACiAJCQkJPg0KIAkJ
CTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmNwcCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJ
CQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnREaXNwYXRjaGVyLmgiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJ
UmVsYXRpdmVQYXRoPSIuLlx4bWxcWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIg0KIAkJCQk+DQog
CQkJPC9GaWxlPg0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5k
ZXggMDRkNDAyOS4uMWZkOTQyNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJv
ai9wcm9qZWN0LnBieHByb2oKKysrIGIvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2oKQEAgLTQzNjIsNiArNDM2Miw4IEBACiAJCUJDNzcyQjQwMEM0RUE5MUUwMDgzMjg1
RiAvKiBDU1NTdHlsZVNlbGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBCQzc3MkIzQTBDNEVBOTFFMDA4MzI4NUYgLyogQ1NTU3R5bGVTZWxlY3Rv
ci5oICovOyB9OwogCQlCQzc3MkM0NjBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3Qu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJD
NDQwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmNwcCAqLzsgfTsKIAkJQkM3NzJD
NDcwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0NTBDNEVCMkM2MDA4MzI4NUYgLyog
WE1MSHR0cFJlcXVlc3QuaCAqLzsgfTsKKwkJQTEzNkEwMEMxMTM0REJEMjAwQ0M4RDUwIC8qIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8q
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwICovOyB9OworCQlBMTM2
QTAwRDExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0
Y2hlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEz
NkEwMEIxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3Bh
dGNoZXIuaCAqLzsgfTsKIAkJQkM3NzJDNEUwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVn
aXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QkM3NzJDNEMwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwICovOyB9Owog
CQlCQzc3MkM0RjBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEQwQzRFQjMwNDAw
ODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9
IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYgLyogTUlNRVR5
cGVSZWdpc3RyeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEJDNzcyQzVEMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1t
ICovOyB9OwpAQCAtNzgyNCw2ICs3ODI2LDggQEAKIAkJOUY3MjMwNEMxMTE4NEI0MTAwQUQwMTI2
IC8qIFNjcmlwdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2Ny
aXB0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjcyMzA0RDExMTg0
QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gU2NyaXB0UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQk5RjcyMzA0RTExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0UHJvZmlsZXIuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlci5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUExMzZBMDBCMTEzNERCRDIwMENDOEQ1MCAv
KiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjAwRjJBNUNGNzAwNURBQUVC
IC8qIEhUTUxFbGVtZW50RmFjdG9yeS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBMTdDODEyMTBGMkE1Q0Y3MDA1REFBRUIgLyogSFRNTEVsZW1lbnRGYWN0b3J5LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEhUTUxFbGVtZW50RmFjdG9yeS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzE4NzYwRDBCMkExMjAxMDBBMTZFQ0UgLyogRHJh
Z0FjdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRHJhZ0FjdGlvbnMu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE1MzA2LDYgKzE1MzEwLDggQEAKIAkJ
CQlCQzYwRDlDODBEMkEyOUU1MDBCOTkxOEYgLyogWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaWRs
ICovLAogCQkJCUY5RjBFRDc3MERCNTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQuaCAqLywKIAkJCQlGOUYwRUQ3ODBEQjUwQ0EyMDBEMTZEQjkgLyogWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50LmlkbCAqLywKKwkJCQlBMTM2QTAwQTExMzREQkQyMDBDQzhENTAg
LyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlci5jcHAgKi8sCisJCQkJQTEz
NkEwMEIxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3Bh
dGNoZXIuaCAqLywKIAkJCQlCQ0RGRDQ4RDBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVl
c3RVcGxvYWQuY3BwICovLAogCQkJCUJDREZENDhDMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRw
UmVxdWVzdFVwbG9hZC5oICovLAogCQkJCUJDREZENDkwMEUzMDU2NDQwMDlEMTBBRCAvKiBYTUxI
dHRwUmVxdWVzdFVwbG9hZC5pZGwgKi8sCkBAIC0xODUxMCw2ICsxODUxNiw3IEBACiAJCQkJQkM3
NzJDNDcwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzYwRDlDOTBEMkEyOUU1MDBCOTkxOEYgLyogWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCUY5RjBFRDdBMERCNTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUExMzZBMDBEMTEzNERC
RDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQlCQ0RGRDQ4RTBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVl
c3RVcGxvYWQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MzNDODBEMEEyQ0YyNTYwMEQ1NzY2NCAv
KiBYTUxOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTE1QTM2RDcxMTA0NTcyMDAwQjdCNjM5
IC8qIFhNTE5TTmFtZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMjA2OTcsNiArMjA3MDQsNyBAQAog
CQkJCUE4MzNDN0NDMEEyQ0YwNzQwMEQ1NzY2NCAvKiBYTGlua05hbWVzLmNwcCBpbiBTb3VyY2Vz
ICovLAogCQkJCUJDNzcyQzQ2MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQlCQ0RGRDQ4RjBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJl
cXVlc3RVcGxvYWQuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJQTEzNkEwMEMxMTM0REJEMjAwQ0M4
RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJQTgzM0M4MEMwQTJDRjI1NjAwRDU3NjY0IC8qIFhNTE5hbWVzLmNwcCBpbiBT
b3VyY2VzICovLAogCQkJCUUxNUEzNkQ5MTEwNDU3MjcwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTFBQ0U1M0VBMEE4RDE4RTcwMDIyOTQ3RCAvKiBYTUxTZXJp
YWxpemVyLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0
cFJlcXVlc3QuY3BwIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCmluZGV4IDMyODE4
ZGYuLjIzMjc2ZTYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcAor
KysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKQEAgLTE1Nyw2ICsxNTcsNyBAQCBY
TUxIdHRwUmVxdWVzdDo6WE1MSHR0cFJlcXVlc3QoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCogY29u
dGV4dCkKICAgICAsIG1fcmVjZWl2ZWRMZW5ndGgoMCkKICAgICAsIG1fbGFzdFNlbmRMaW5lTnVt
YmVyKDApCiAgICAgLCBtX2V4Y2VwdGlvbkNvZGUoMCkKKyAgICAsIG1fcHJvZ3Jlc3NFdmVudERp
c3BhdGNoZXIodGhpcykKIHsKICAgICBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRh
KCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjU4LDYgKzI1OSwxMCBAQCB2b2lkIFhNTEh0dHBSZXF1
ZXN0OjpjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKCkKICAgICAgICAgdGltZWxpbmVBZ2Vu
dC0+d2lsbENoYW5nZVhIUlJlYWR5U3RhdGUobV91cmwuc3RyaW5nKCksIG1fc3RhdGUpOwogI2Vu
ZGlmCiAKKyAgICAvLyBGbHVzaCBvdXIgcGVuZGluZyBldmVudHMgaWYgbmVlZGVkLgorICAgIGlm
IChtX3N0YXRlID09IERPTkUpCisgICAgICAgIG1fcHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuZGlz
cGF0Y2hFdmVudE5vdygpOworCiAgICAgZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dy
ZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucmVhZHlzdGF0ZWNoYW5nZUV2ZW50KSk7CiAK
ICNpZiBFTkFCTEUoSU5TUEVDVE9SKQpAQCAtOTE4LDkgKzkyMyw3IEBAIHZvaWQgWE1MSHR0cFJl
cXVlc3Q6OmRpZFJlY2VpdmVEYXRhKGNvbnN0IGNoYXIqIGRhdGEsIGludCBsZW4pCiAgICAgICAg
IGxvbmcgbG9uZyBleHBlY3RlZExlbmd0aCA9IG1fcmVzcG9uc2UuZXhwZWN0ZWRDb250ZW50TGVu
Z3RoKCk7CiAgICAgICAgIG1fcmVjZWl2ZWRMZW5ndGggKz0gbGVuOwogCi0gICAgICAgIC8vIEZJ
WE1FOiB0aGUgc3BlYyByZXF1aXJlcyB0aGF0IHdlIGRpc3BhdGNoIHRoZSBldmVudCBhY2NvcmRp
bmcgdG8gdGhlIGxlYXN0Ci0gICAgICAgIC8vIGZyZXF1ZW50IG1ldGhvZCBiZXR3ZWVuIGV2ZXJ5
IDM1MG1zICgrLy0yMDBtcykgYW5kIGZvciBldmVyeSBieXRlIHJlY2VpdmVkLgotICAgICAgICBk
aXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5wcm9ncmVzc0V2ZW50LCBleHBlY3RlZExlbmd0aCAmJiBtX3JlY2VpdmVkTGVuZ3RoIDw9
IGV4cGVjdGVkTGVuZ3RoLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4obV9yZWNlaXZlZExlbmd0aCks
IHN0YXRpY19jYXN0PHVuc2lnbmVkPihleHBlY3RlZExlbmd0aCkpKTsKKyAgICAgICAgbV9wcm9n
cmVzc0V2ZW50RGlzcGF0Y2hlci5kaXNwYXRjaEV2ZW50KGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVj
ZWl2ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3Jl
Y2VpdmVkTGVuZ3RoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cGVjdGVkTGVuZ3RoKSk7CiAK
ICAgICAgICAgaWYgKG1fc3RhdGUgIT0gTE9BRElORykKICAgICAgICAgICAgIGNoYW5nZVN0YXRl
KExPQURJTkcpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaCBiL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXggMmNlYTVjNi4uZGEyYmNiZiAxMDA2NDQK
LS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAorKysgYi9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25z
ZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2luY2x1ZGUgIlRocmVhZGFibGVMb2Fk
ZXJDbGllbnQuaCIKKyNpbmNsdWRlICJYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRj
aGVyLmgiCiAjaW5jbHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBA
IC0xODQsNiArMTg1LDggQEAgcHJpdmF0ZToKICAgICBFeGNlcHRpb25Db2RlIG1fZXhjZXB0aW9u
Q29kZTsKIAogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFyZ2V0RGF0YTsKKworICAgIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIgbV9wcm9ncmVzc0V2ZW50RGlzcGF0
Y2hlcjsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
eG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwIGIvV2ViQ29yZS94
bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIzZWQwNgotLS0gL2Rldi9udWxsCisrKyBiL1dlYkNv
cmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuY3BwCkBAIC0wLDAg
KzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEp1bGllbiBDaGFmZnJhaXggPGpj
aGFmZnJhaXhAd2Via2l0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJl
CisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAqIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHly
aWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5laXRoZXIgdGhl
IG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9t
CisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBI
T0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAq
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBU
SEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIuaCIKKworI2luY2x1ZGUgIkV2ZW50VGFyZ2V0
LmgiCisjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcjo6WE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcihFdmVudFRhcmdldCogdGFyZ2V0KQor
ICAgIDogbV90YXJnZXQodGFyZ2V0KQorICAgICwgbV9sb2FkZWQoMCkKKyAgICAsIG1fdG90YWwo
MCkKK3sKKyAgICBBU1NFUlQodGFyZ2V0KTsKK30KKworWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50RGlzcGF0Y2hlcjo6flhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIoKQor
eworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXI6OmRpc3Bh
dGNoRXZlbnQoYm9vbCBsZW5ndGhDb21wdXRhYmxlLCB1bnNpZ25lZCBsb2FkZWQsIHVuc2lnbmVk
IHRvdGFsKQoreworICAgIGlmICghaXNBY3RpdmUoKSkgeworICAgICAgICAvLyBUaGUgdGltZXIg
aXMgbm90IGFjdGl2ZSBzbyB0aGUgbGVhc3QgZnJlcXVlbnQgZXZlbnQgZm9yIG5vdyBpcyBldmVy
eSBieXRlIHNvIGp1c3QgZ28gYWhlYWQgYW5kIGRpc3BhdGNoIHRoZSBldmVudC4KKworICAgICAg
ICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHBlbmRpbmcgbG9hZGVkICYgdG90YWwgaW5mb3Jt
YXRpb24gZnJvbSBhIHByZXZpb3VzIHJ1bi4KKyAgICAgICAgQVNTRVJUKCFtX2xvYWRlZCk7Cisg
ICAgICAgIEFTU0VSVCghbV90b3RhbCk7CisKKyAgICAgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZl
bnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dy
ZXNzRXZlbnQsIGxlbmd0aENvbXB1dGFibGUsIGxvYWRlZCwgdG90YWwpKTsKKyAgICAgICAgc3Rh
cnRSZXBlYXRpbmcocHJvZ3Jlc3NFdmVudERpc3BhdGNoaW5nVGltZSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBUaGUgdGltZXIgaXMgYWxyZWFkeSBhY3RpdmUgc28gNTAgbXMg
aXMgdGhlIGxlYXN0IGZyZXF1ZW50IGV2ZW50LgorICAgIG1fbGVuZ3RoQ29tcHV0YWJsZSA9IGxl
bmd0aENvbXB1dGFibGU7CisgICAgbV9sb2FkZWQgPSBsb2FkZWQ7CisgICAgbV90b3RhbCA9IHRv
dGFsOworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXI6OmRp
c3BhdGNoRXZlbnROb3coKQoreworICAgIGlmICghaXNBY3RpdmUoKSB8fCAoIW1fbG9hZGVkICYm
ICFtX3RvdGFsKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZl
bnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dy
ZXNzRXZlbnQsIG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwpKTsKKyAgICBt
X3RvdGFsID0gMDsKKyAgICBtX2xvYWRlZCA9IDA7Cit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50RGlzcGF0Y2hlcjo6ZmlyZWQoKQoreworICAgIC8vIENoZWNrIGZvciBlbXB0
eSBpbmZvcm1hdGlvbjogd2hpY2ggbWVhbnMgdGhhdCBubyBwcm9ncmVzcyBldmVudCB3YXMgcXVl
dWVkIHNpbmNlIHRoZSBwcmV2aW91cyBkaXNwYXRjaC4KKyAgICAvLyBXZSBjYW4gc2FmZWx5IHN0
b3AgdGhlIHRpbWVyLgorICAgIGlmICghbV9sb2FkZWQgJiYgIW1fdG90YWwpIHsKKyAgICAgICAg
c3RvcCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV90YXJnZXQtPmRpc3BhdGNo
RXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnBy
b2dyZXNzRXZlbnQsIG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwpKTsKKyAg
ICBtX3RvdGFsID0gMDsKKyAgICBtX2xvYWRlZCA9IDA7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dERpc3BhdGNoZXIuaCBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudERp
c3BhdGNoZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjNhNWRjCi0t
LSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
RGlzcGF0Y2hlci5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAs
IEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4uCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4K
KyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1lcyBv
ZiBpdHMKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIg
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
CisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05FUiBPUiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKKyAqIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyX2gKKyNkZWZpbmUgWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50RGlzcGF0Y2hlcl9oCisKKyNpbmNsdWRlICJUaW1lci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEV2ZW50VGFyZ2V0OworCisvLyBUaGlzIGltcGxlbWVudHMgdGhl
IFhIUjIgcHJvZ3Jlc3MgZXZlbnQgZGlzcGF0Y2hpbmc6ICJkaXNwYXRjaCBhIHByb2dyZXNzIGV2
ZW50IGNhbGxlZCBwcm9ncmVzcworLy8gYWJvdXQgZXZlcnkgNTBtcyBvciBmb3IgZXZlcnkgYnl0
ZSByZWNlaXZlZCwgd2hpY2hldmVyIGlzIGxlYXN0IGZyZXF1ZW50Ii4KK2NsYXNzIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudERpc3BhdGNoZXIgOiBwdWJsaWMgVGltZXJCYXNlIHsKK3B1Ymxp
YzoKKyAgICBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyKEV2ZW50VGFyZ2V0
Kik7CisgICAgdmlydHVhbCB+WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50RGlzcGF0Y2hlcigp
OworCisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWdu
ZWQgbG9hZGVkLCB1bnNpZ25lZCB0b3RhbCk7CisKKyAgICAvLyBGSVhNRTogVGhpcyBpcyBhIHRl
bXBvcmFyeSBtZWFzdXJlIGFzIHdlIGRvIG5vdCBoYXZlIHRoZSBjb25jZXB0IG9mIHRhc2sgYW5k
IHRodXMgY2Fubm90IHBvc3QgYSB0YXNrLgorICAgIHZvaWQgZGlzcGF0Y2hFdmVudE5vdygpOwor
Citwcml2YXRlOgorICAgIHN0YXRpYyBjb25zdCBkb3VibGUgcHJvZ3Jlc3NFdmVudERpc3BhdGNo
aW5nVGltZSA9IC4wNTsgLy8gNTAgbXMgcGVyIHNwZWNpZmljYXRpb24uCisKKyAgICB2aXJ0dWFs
IHZvaWQgZmlyZWQoKTsKKworICAgIEV2ZW50VGFyZ2V0KiBtX3RhcmdldDsKKworICAgIGJvb2wg
bV9sZW5ndGhDb21wdXRhYmxlOworICAgIHVuc2lnbmVkIG1fbG9hZGVkOworICAgIHVuc2lnbmVk
IG1fdG90YWw7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnREaXNwYXRjaGVyX2gK
</data>
<flag name="review"
          id="32506"
          type_id="1"
          status="-"
          setter="ap"
    />
    <flag name="commit-queue"
          id="32507"
          type_id="3"
          status="-"
          setter="jchaffraix"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50790</attachid>
            <date>2010-03-16 08:11:06 -0700</date>
            <delta_ts>2010-03-24 14:31:22 -0700</delta_ts>
            <desc>Take two: Renamed new file to XMLHttpRequestProgressEventThrottle, added suspend/resume support, refactored the code a bit to avoid duplication, made the test more reliable</desc>
            <filename>18654-XHR-onProgress-dispatch-2.diff</filename>
            <type>text/plain</type>
            <size>30299</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4M2RkZDM0Li4xN2YxNTljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMt
MTUgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1hIUl0gb25Qcm9ncmVzcyBl
dmVudCBuZWVkcyB0byBiZSBkaXNwYXRjaGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZp
Y2F0aW9uIHN0YXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg2NTQKKworICAgICAgICBBZGQgYSB0ZXN0IHRvIGNoZWNrIHRoYXQgcHJvZ3Jlc3Mg
ZXZlbnRzIGFyZSByZWFsbHkgdGhyb3R0bGVkLgorCisgICAgICAgICogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9yZXNvdXJjZXMvZG93bmxvYWQtd2l0aC1kZWxheS5waHA6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtNTBtcy1kb3du
bG9hZC1kaXNwYXRjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC5odG1s
OiBBZGRlZC4KKwogMjAxMC0wMi0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtRdF0gU2tpcCBuZXcgdGVzdCBpbnRyb2R1Y2VkIGluIHI1NTM1MyBi
ZWNhdXNlIG9mIG1pc3NpbmcgZHJhZyZkcm9wIHN1cHBvcnQuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9kb3dubG9hZC13aXRoLWRl
bGF5LnBocCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L2Rvd25sb2FkLXdpdGgtZGVsYXkucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjAyNDU1ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3Jlc291cmNlcy9kb3dubG9hZC13aXRoLWRlbGF5LnBocApAQCAtMCwwICsx
LDIxIEBACis8P3BocAoraGVhZGVyKCJFeHBpcmVzOiBUaHUsIDAxIERlYyAyMDAzIDE2OjAwOjAw
IEdNVCIpOworaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRl
Iik7CitoZWFkZXIoIlByYWdtYTogbm8tY2FjaGUiKTsKK2hlYWRlcigiUHJhZ21hOiBuby1zdG9y
ZSIpOworCiskaXRlcmF0aW9uID0gJF9HRVRbJ2l0ZXJhdGlvbiddOworJGRlbGF5ID0gJF9HRVRb
J2RlbGF5J107CisKK2VjaG8gIiRpdGVyYXRpb25cbiI7CitlY2hvICIkZGVsYXlcbiI7CisKK2Zv
ciAoJGkgPSAxOyAkaSA8PSAkaXRlcmF0aW9uOyArKyRpKSB7CisgICAgZWNobyAiJGlcbiI7Cisg
ICAgZWNobyAiZm9vYmFyXG4iOworICAgIC8vIEZvcmNlIGNvbnRlbnQgdG8gYmUgc2VudCB0byB0
aGUgYnJvd3NlciBhcyBpcy4KKyAgICBvYl9mbHVzaCgpOworICAgIGZsdXNoKCk7CisgICAgdXNs
ZWVwKCRkZWxheSAqIDEwMDApOworfQorPz4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAv
dGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtNTBtcy1kb3dubG9hZC1kaXNwYXRj
aC1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3ht
bGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0Y2gtZXhwZWN0ZWQudHh0Cm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NmU5YjkKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMt
ZG93bmxvYWQtZGlzcGF0Y2gtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTIgQEAKK1Rlc3QgY2Fz
ZSBmb3IgQnVnIDE4NjU1OiBbWEhSXSBvblByb2dyZXNzIGV2ZW50IG5lZWRzIHRvIGJlIGRpc3Bh
dGNoZWQgYWNjb3JkaW5nIHRvIHdoYXQgdGhlIHNwZWNpZmljYXRpb24gc3RhdGVzCisKK1RoaXMg
dGVzdCB2ZXJpZnkgdGhhdCB3ZSAiZGlzcGF0Y2ggYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJv
Z3Jlc3MgYWJvdXQgZXZlcnkgNTBtcyBvciBmb3IgZXZlcnkgYnl0ZSByZWNlaXZlZCwgd2hpY2hl
dmVyIGlzIGxlYXN0IGZyZXF1ZW50Ii4KKworWW91IHNob3VsZCBzZWUgYSBzZXF1ZW5jZSBvZiA1
IFBBU1NFRC4KKworUEFTU0VECitQQVNTRUQKK1BBU1NFRAorUEFTU0VECitQQVNTRUQKKwpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVx
dWVzdC01MG1zLWRvd25sb2FkLWRpc3BhdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0Y2guaHRt
bApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTgyMGMzCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVzdC94bWxodHRwcmVx
dWVzdC01MG1zLWRvd25sb2FkLWRpc3BhdGNoLmh0bWwKQEAgLTAsMCArMSw4MCBAQAorPGh0bWw+
Cis8aGVhZD4KKyAgICA8dGl0bGU+IFRlc3QgY2FzZSBmb3IgYnVnIDE4NjU1IDwvdGl0bGU+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxwPiBUZXN0IGNhc2UgZm9yIEJ1ZyA8YSBocmVmPSJodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2NTUiPjE4NjU1PC9hPjogW1hIUl0gb25Q
cm9ncmVzcyBldmVudAorbmVlZHMgdG8gYmUgZGlzcGF0Y2hlZCBhY2NvcmRpbmcgdG8gd2hhdCB0
aGUgc3BlY2lmaWNhdGlvbiBzdGF0ZXMgPC9wPgorPHA+IFRoaXMgdGVzdCB2ZXJpZnkgdGhhdCB3
ZSAiZGlzcGF0Y2ggYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jlc3MgYWJvdXQKK2V2ZXJ5
IDUwbXMgb3IgZm9yIGV2ZXJ5IGJ5dGUgcmVjZWl2ZWQsIHdoaWNoZXZlciBpcyBsZWFzdCBmcmVx
dWVudCIuPC9wPgorPHA+IFlvdSBzaG91bGQgc2VlIGEgc2VxdWVuY2Ugb2YgNSBQQVNTRUQuIDwv
cD4KKzxwIGlkPSJjb25zb2xlIj48L3A+CisKKzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0
Ij4KK2lmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAgbGF5b3V0VGVzdENvbnRy
b2xsZXIuZHVtcEFzVGV4dCgpOworCitmdW5jdGlvbiBsb2cobWVzc2FnZSkKK3sKKyAgICBkb2N1
bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0
ZVRleHROb2RlKG1lc3NhZ2UpKTsKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29s
ZSIpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpOworfQorCitmdW5j
dGlvbiB0ZXN0KGl0ZXJhdGlvbiwgZGVsYXksIGNvbXBhcmUpCit7CisgICAgdmFyIGNvdW50ID0g
MDsKKyAgICB2YXIgc2F3UmVhZHlTdGF0ZURPTkUgPSBmYWxzZTsKKyAgICBmdW5jdGlvbiBvblBy
b2dyZXNzKGUpIHsKKyAgICAgICAgKytjb3VudDsKKyAgICAgICAgaWYgKHNhd1JlYWR5U3RhdGVE
T05FKQorICAgICAgICAgICAgbG9nKCJGQUlMRUQ6IHNhdyAncHJvZ3Jlc3MnIGV2ZW50IGFmdGVy
IHJlYWR5c3RhdGUgJ0RPTkUnIGV2ZW50LiIpOworICAgIH0KKworICAgIGZ1bmN0aW9uIG9uUmVh
ZHlTdGF0ZShlKSB7CisgICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAg
ICAgICAgc2F3UmVhZHlTdGF0ZURPTkUgPSB0cnVlOworICAgICAgICAgICAgdmFyIHBhc3NlZCA9
ICBjb21wYXJlKGNvdW50LCBpdGVyYXRpb24pOworICAgICAgICAgICAgbG9nKHBhc3NlZCA/ICJQ
QVNTRUQiIDogIkZBSUxFRCAoY291bnQgd2FzICIgKyBjb3VudCArICIpIik7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICB2YXIgcmVxID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAgcmVxLm9u
cHJvZ3Jlc3MgPSBvblByb2dyZXNzOworICAgIHJlcS5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBvblJl
YWR5U3RhdGU7CisgICAgcmVxLm9wZW4oIkdFVCIsICJyZXNvdXJjZXMvZG93bmxvYWQtd2l0aC1k
ZWxheS5waHA/aXRlcmF0aW9uPSIgKyBpdGVyYXRpb24gKyAiJmRlbGF5PSIgKyBkZWxheSwgdHJ1
ZSk7CisgICAgcmVxLnNlbmQobnVsbCk7Cit9CisKKy8vIE51bWJlciBvZiBjaHVua3MgdG8gc2Vu
ZCwgZGVsYXkgYmV0d2VlbiBjaHVua3MKK3ZhciBzdHJpY3RUZXN0cyA9IFsgMiwgODAsCisgICAg
ICAgICAgICAgICAgICAgIDEsIDEwMDAsCisgICAgICAgICAgICAgICAgICAgIDIsIDUwIF07Citm
dW5jdGlvbiBjb21wYXJlU3RyaWN0KGNvdW50LCBpdGVyYXRpb24pCit7CisgICAgcmV0dXJuIGNv
dW50ID09IGl0ZXJhdGlvbjsKK30KKwordmFyIHRocm90dGxlZFRlc3RzID0gWyA1LCAyMCwKKyAg
ICAgICAgICAgICAgICAgICAgICAgNiwgMzAgXTsKK2Z1bmN0aW9uIGNvbXBhcmVUaHJvdHRsZWQo
Y291bnQsIGl0ZXJhdGlvbikKK3sKKyAgICByZXR1cm4gY291bnQgPCBpdGVyYXRpb247Cit9CisK
K3RyeSB7Cit3aGlsZSAoc3RyaWN0VGVzdHMubGVuZ3RoKSB7CisgICAgdmFyIGl0ZXJhdGlvbiA9
IHN0cmljdFRlc3RzLnNoaWZ0KCk7CisgICAgdmFyIGRlbGF5ID0gc3RyaWN0VGVzdHMuc2hpZnQo
KTsKKyAgICB0ZXN0KGl0ZXJhdGlvbiwgZGVsYXksIGNvbXBhcmVTdHJpY3QpOworfQord2hpbGUo
dGhyb3R0bGVkVGVzdHMubGVuZ3RoKSB7CisgICAgdmFyIGl0ZXJhdGlvbiA9IHRocm90dGxlZFRl
c3RzLnNoaWZ0KCk7CisgICAgdmFyIGRlbGF5ID0gdGhyb3R0bGVkVGVzdHMuc2hpZnQoKTsKKyAg
ICB0ZXN0KGl0ZXJhdGlvbiwgZGVsYXksIGNvbXBhcmVUaHJvdHRsZWQpOworfQorfSBjYXRjaChl
KSB7CisgICAgbG9nKCJGQUlMRUQ6IGV4Y2VwdGlvbiByYWlzZWQ6ICIgKyBlLm1lc3NhZ2UpOwor
fQorPC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0FuZHJv
aWQubWsgYi9XZWJDb3JlL0FuZHJvaWQubWsKaW5kZXggZjI2NzVlMC4uMWMyMjI5MyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9BbmRyb2lkLm1rCisrKyBiL1dlYkNvcmUvQW5kcm9pZC5tawpAQCAtODk0
LDUgKzg5NCw2IEBAIExPQ0FMX1NSQ19GSUxFUyA6PSAkKExPQ0FMX1NSQ19GSUxFUykgXAogCVwK
IAl4bWwvRE9NUGFyc2VyLmNwcCBcCiAJeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCisJeG1sL1hN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBcCiAJeG1sL1hNTEh0dHBSZXF1
ZXN0VXBsb2FkLmNwcCBcCiAJeG1sL1hNTFNlcmlhbGl6ZXIuY3BwCmRpZmYgLS1naXQgYS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGJiN2I4ZGQuLjEzOGNmMjcg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMDMtMTUgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgW1hIUl0gb25Qcm9ncmVzcyBldmVudCBuZWVkcyB0byBiZSBkaXNwYXRjaGVkIGFjY29y
ZGluZyB0byB3aGF0IHRoZSBzcGVjaWZpY2F0aW9uIHN0YXRlcworICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2NTQKKworICAgICAgICBUZXN0OiBodHRw
L3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQtZGlzcGF0
Y2guaHRtbAorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAgKiBHTlVtYWtlZmlsZS5h
bToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2ViQ29yZS5wcm86CisgICAg
ICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAgICAgICogV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICBBZGRlZCBYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnRUaHJvdHRsZSB0byB0aGUgYnVpbGQgc3lzdGVtcy4KKworICAgICAgICAqIHht
bC9YTUxIdHRwUmVxdWVzdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6
WE1MSHR0cFJlcXVlc3QpOiBDcmVhdGVkIHRoZSB0aHJvdHRsZS4KKyAgICAgICAgKFdlYkNvcmU6
OlhNTEh0dHBSZXF1ZXN0OjpjYWxsUmVhZHlTdGF0ZUNoYW5nZUxpc3RlbmVyKTogVGhlICdyZWFk
eVN0YXRlJyBldmVudCBhcmUKKyAgICAgICAgZGlzcGF0Y2hlZCB1c2luZyB0aGUgWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUgbm93LiBGb3IgdGhlIERPTkUgc3RhdGUsIHdlCisg
ICAgICAgIG5lZWQgdG8gZmx1c2ggYW55IHBlbmRpbmcgcHJvZ3Jlc3MgZXZlbnQgYXMgd2UgZG8g
bm90IHdhbnQgaXQgdG8gYmUgZGlzcGF0Y2hlZCBhZnRlcgorICAgICAgICB0aGUgRE9ORSByZWFk
eVN0YXRlIGV2ZW50LgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNyZWF0ZVJl
cXVlc3QpOiBNYWRlIHRoaXMgZXZlbnQgdXNlIHRoZQorICAgICAgICBYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnRUaHJvdHRsZSBmb3IgZXZlbnQgZGlzcGF0Y2hpbmcuCisgICAgICAgIChXZWJD
b3JlOjpYTUxIdHRwUmVxdWVzdDo6YWJvcnQpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0OjpuZXR3b3JrRXJyb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0OjphYm9ydEVycm9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEpOiBEaXR0by4gQWxzbyBmaXhlZCBhIHBvdGVudGlh
bCB3YXJuaW5nLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnN1c3BlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OnJlc3VtZSk6IEltcGxlbWVudGVkIHRo
ZSBsb2dpYyBmb3Igc3VzcGVuZCAvIHJlc3VtZS4KKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVl
c3QuaDoKKyAgICAgICAgKiB4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSk6CisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6flhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQpOiBJbXBs
ZW1lbnRlZCB0aGUgYnVsaworICAgICAgICBvZiB0aGUgZXZlbnQgdGhyb3R0bGluZyBoZXJlOiB3
ZSB1c2UgYSB0aW1lciB0byBkbyBzbywgYXMgbG9uZyBhcyB0aGUgdGltZXIgaXMgYWN0aXZlIGl0
IG1lYW5zCisgICAgICAgIHRoYXQgZXZlbnRzIGFyZSBjb21pbmcgZmFzdGVyIHRoYW4gdGhlIHRo
cm90dGxpbmcgdGltZSBhbmQgd2UgY29hbGVzY2UgdGhlbS4KKyAgICAgICAgKFdlYkNvcmU6OlhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaEV2ZW50KTogR2VuZXJp
YyBtZXRob2QgdG8gZGlzcGF0Y2ggYW4gZXZlbnQuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KTogQ2FsbGVk
IHdoZW4gd2Ugd2FudCB0byBkaXNwYXRjaAorICAgICAgICBhbnkgcGVuZGluZyBldmVudHMgYW5k
IHN0b3BwaW5nIGFueSBmdXJ0aGVyIGRpc3BhdGNoaW5nLgorICAgICAgICAoV2ViQ29yZTo6WE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoUGF1c2VkRXZlbnRzKTog
VXNlZCB0byBkaXNwYXRjaCBhbnkgZXZlbnQKKyAgICAgICAgdGhhdCB3YXMgcXVldWVkIGR1ZSB0
byB0aGUgb2JqZWN0IGJlaW5nIHN1c3BlbmRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpmaXJlZCk6IFVzZWQgdG8gZGlzcGF0Y2ggYW55
IGNvYWxlc2NlZCBldmVudC4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlOjpoYXNFdmVudFRvRGlzcGF0Y2gpOiBVc2VkIHRvIGNoZWNrIGlmIHdl
IGhhdmUKKyAgICAgICAgYW4gZXZlbnQgdG8gZGlzcGF0Y2guCisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6c3VzcGVuZCk6IE1hcmtlZCB0aGUg
b2JqZWN0IGFzIHN1c3BlbmRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlOjpyZXN1bWUpOiBEaXNwYXRjaGVkIGV2ZW50cyB0aGF0IHdlcmUg
cXVldWVkLgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZS5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6c3VzcGVuZGVkKToKKwogMjAxMC0wMi0y
NyAgRGFuIEJlcm5zdGVpbiAgPG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5
IE1hY2llaiBTdGFjaG93aWFrLgpAQCAtNDIyLDcgKzQ3NCw2IEBACiAgICAgICAgICogV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgogICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMv
Q29kZUdlbmVyYXRvckpTLnBtOgogCi0+Pj4+Pj4+IC5yNTUzMTcKIDIwMTAtMDItMjYgIEFsZXgg
TWlsb3dza2kgIDxhbGV4QG1pbG93c2tpLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5u
ZXRoIFJvaGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUu
YW0gYi9XZWJDb3JlL0dOVW1ha2VmaWxlLmFtCmluZGV4IDNlY2M2MzYuLjU1NWM4NzQgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5h
bQpAQCAtMTk1Niw2ICsxOTU2LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5oIFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdEV4Y2VwdGlv
bi5oIFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBcCisJV2Vi
Q29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIFwKKwlXZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIFwKIAlXZWJDb3Jl
L3htbC9YTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAgXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0VXBsb2FkLmggXAogCVdlYkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwIFwKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvV2ViQ29yZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjhh
MjgwZS4uNDQ2YWIxYSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2Vi
Q29yZS9XZWJDb3JlLmd5cGkKQEAgLTM2NjMsNiArMzY2Myw4IEBACiAgICAgICAgICAgICAneG1s
L1hNTEh0dHBSZXF1ZXN0LmgnLAogICAgICAgICAgICAgJ3htbC9YTUxIdHRwUmVxdWVzdEV4Y2Vw
dGlvbi5oJywKICAgICAgICAgICAgICd4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50Lmgn
LAorICAgICAgICAgICAgJ3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5j
cHAnLAorICAgICAgICAgICAgJ3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRs
ZS5oJywKICAgICAgICAgICAgICd4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwJywKICAgICAg
ICAgICAgICd4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuaCcsCiAgICAgICAgICAgICAneG1sL1hN
TFNlcmlhbGl6ZXIuY3BwJywKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJD
b3JlL1dlYkNvcmUucHJvCmluZGV4IGQwNjhjMDQuLjNiMzI0YjAgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvV2ViQ29yZS5wcm8KKysrIGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTc3LDYgKzk3Nyw3
IEBAIFNPVVJDRVMgKz0gXAogICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3Bw
IFwKICAgICB4bWwvRE9NUGFyc2VyLmNwcCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBc
CisgICAgeG1sL1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBcCiAgICAg
eG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBcCiAgICAgeG1sL1hNTFNlcmlhbGl6ZXIuY3Bw
IAogCmRpZmYgLS1naXQgYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIv
V2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5YmZjYjI3Li44ZWIx
MTA5IDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisr
KyBiL1dlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI4Mjk1LDYgKzI4
Mjk1LDE0IEBACiAJCQkJPg0KIAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBh
dGg9Ii4uXHhtbFxYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAiDQorCQkJ
CT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4N
CisJCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYTUxIdHRwUmVxdWVzdFVwbG9h
ZC5jcHAiDQogCQkJCT4NCiAJCQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCBkNzBlNmQ2Li5hYjIxNTdkIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtNDM2Miw2ICs0MzYyLDggQEAKIAkJQkM3NzJC
NDAwQzRFQTkxRTAwODMyODVGIC8qIENTU1N0eWxlU2VsZWN0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQjNBMEM0RUE5MUUwMDgzMjg1RiAv
KiBDU1NTdHlsZVNlbGVjdG9yLmggKi87IH07CiAJCUJDNzcyQzQ2MEM0RUIyQzYwMDgzMjg1RiAv
KiBYTUxIdHRwUmVxdWVzdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBCQzc3MkM0NDBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3Bw
ICovOyB9OwogCQlCQzc3MkM0NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQzQ1MEM0
RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5oICovOyB9OworCQlBMTM2QTAwQzExMzRE
QkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzNkEwMEExMTM0
REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAq
LzsgfTsKKwkJQTEzNkEwMEQxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBBMTM2QTAwQjExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGUuaCAqLzsgfTsKIAkJQkM3NzJDNEUwQzRFQjMwNDAwODMyODVGIC8qIE1J
TUVUeXBlUmVnaXN0cnkuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gQkM3NzJDNEMwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3Bw
ICovOyB9OwogCQlCQzc3MkM0RjBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEQw
QzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYg
LyogTUlNRVR5cGVSZWdpc3RyeU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEJDNzcyQzVEMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lz
dHJ5TWFjLm1tICovOyB9OwpAQCAtNzgzNCw2ICs3ODM2LDggQEAKIAkJOUY3MjMwNEMxMTE4NEI0
MTAwQUQwMTI2IC8qIFNjcmlwdFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gU2NyaXB0UHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5Rjcy
MzA0RDExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU2NyaXB0UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk5RjcyMzA0RTExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmls
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0UHJvZmlsZXIuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8q
IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTEzNkEwMEIxMTM0REJEMjAwQ0M4
RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUExN0M4MTIwMEYyQTVDRjcwMDVEQUFF
QiAvKiBIVE1MRWxlbWVudEZhY3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSFRNTEVsZW1lbnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQTE3QzgxMjEwRjJBNUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERy
YWdBY3Rpb25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYWdBY3Rpb25z
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xNTMyNiw2ICsxNTMzMCw4IEBACiAJ
CQkJQkM2MEQ5QzgwRDJBMjlFNTAwQjk5MThGIC8qIFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlk
bCAqLywKIAkJCQlGOUYwRUQ3NzBEQjUwQ0EyMDBEMTZEQjkgLyogWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50LmggKi8sCiAJCQkJRjlGMEVENzgwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudC5pZGwgKi8sCisJCQkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUw
IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLywKKwkJCQlBMTM2
QTAwQjExMzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0
bGUuaCAqLywKIAkJCQlCQ0RGRDQ4RDBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RV
cGxvYWQuY3BwICovLAogCQkJCUJDREZENDhDMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRwUmVx
dWVzdFVwbG9hZC5oICovLAogCQkJCUJDREZENDkwMEUzMDU2NDQwMDlEMTBBRCAvKiBYTUxIdHRw
UmVxdWVzdFVwbG9hZC5pZGwgKi8sCkBAIC0xODUzNCw2ICsxODU0MCw3IEBACiAJCQkJQkM3NzJD
NDcwQzRFQjJDNjAwODMyODVGIC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlCQzYwRDlDOTBEMkEyOUU1MDBCOTkxOEYgLyogWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCBp
biBIZWFkZXJzICovLAogCQkJCUY5RjBFRDdBMERCNTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQuaCBpbiBIZWFkZXJzICovLAorCQkJCUExMzZBMDBEMTEzNERCRDIw
MENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkNERkQ0OEUwRTMwNTI5MDAwOUQxMEFEIC8qIFhNTEh0dHBSZXF1ZXN0VXBs
b2FkLmggaW4gSGVhZGVycyAqLywKIAkJCQlBODMzQzgwRDBBMkNGMjU2MDBENTc2NjQgLyogWE1M
TmFtZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxNUEzNkQ3MTEwNDU3MjAwMEI3QjYzOSAvKiBY
TUxOU05hbWVzLmggaW4gSGVhZGVycyAqLywKQEAgLTIwNzI1LDYgKzIwNzMyLDcgQEAKIAkJCQlB
ODMzQzdDQzBBMkNGMDc0MDBENTc2NjQgLyogWExpbmtOYW1lcy5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQzc3MkM0NjBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQkNERkQ0OEYwRTMwNTI5MDAwOUQxMEFEIC8qIFhNTEh0dHBSZXF1ZXN0
VXBsb2FkLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAv
KiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlBODMzQzgwQzBBMkNGMjU2MDBENTc2NjQgLyogWE1MTmFtZXMuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJRTE1QTM2RDkxMTA0NTcyNzAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJMUFDRTUzRUEwQThEMThFNzAwMjI5NDdEIC8qIFhNTFNlcmlhbGl6ZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dC5jcHAgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggMzI4MThkZi4uNmQw
MWY5OSAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1dl
YkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmNwcApAQCAtMTU3LDYgKzE1Nyw3IEBAIFhNTEh0dHBS
ZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQog
ICAgICwgbV9yZWNlaXZlZExlbmd0aCgwKQogICAgICwgbV9sYXN0U2VuZExpbmVOdW1iZXIoMCkK
ICAgICAsIG1fZXhjZXB0aW9uQ29kZSgwKQorICAgICwgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUo
dGhpcykKIHsKICAgICBpbml0aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCk7CiAjaWZu
ZGVmIE5ERUJVRwpAQCAtMjU4LDcgKzI1OSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNhbGxS
ZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIoKQogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsQ2hh
bmdlWEhSUmVhZHlTdGF0ZShtX3VybC5zdHJpbmcoKSwgbV9zdGF0ZSk7CiAjZW5kaWYKIAotICAg
IGRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnRO
YW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCkpOworICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90
dGxlLmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLnJlYWR5c3RhdGVjaGFuZ2VFdmVudCksIG1fc3RhdGUgPT0gRE9ORSA/IEZsdXNo
UHJvZ3Jlc3NFdmVudCA6IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKIAogI2lmIEVOQUJMRShJ
TlNQRUNUT1IpCiAgICAgaWYgKGNhbGxUaW1lbGluZUFnZW50T25SZWFkeVN0YXRlQ2hhbmdlICYm
ICh0aW1lbGluZUFnZW50ID0gSW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cmV0cmlldmUoc2NyaXB0
RXhlY3V0aW9uQ29udGV4dCgpKSkpCkBAIC0yNzMsNyArMjc0LDcgQEAgdm9pZCBYTUxIdHRwUmVx
dWVzdDo6Y2FsbFJlYWR5U3RhdGVDaGFuZ2VMaXN0ZW5lcigpCiAgICAgICAgICAgICB0aW1lbGlu
ZUFnZW50LT53aWxsTG9hZFhIUihtX3VybC5zdHJpbmcoKSk7CiAjZW5kaWYKIAotICAgICAgICBk
aXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5sb2FkRXZlbnQpKTsKKyAgICAgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0
Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
bG9hZEV2ZW50KSk7CiAKICNpZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBpZiAoY2FsbFRp
bWVsaW5lQWdlbnRPbkxvYWQgJiYgKHRpbWVsaW5lQWdlbnQgPSBJbnNwZWN0b3JUaW1lbGluZUFn
ZW50OjpyZXRyaWV2ZShzY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpKSkKQEAgLTQ1Nyw3ICs0NTgs
NyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVj
KQogICAgIC8vIEFsc28sIG9ubHkgYXN5bmMgcmVxdWVzdHMgc3VwcG9ydCB1cGxvYWQgcHJvZ3Jl
c3MgZXZlbnRzLgogICAgIGJvb2wgZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKICAgICBpZiAobV9h
c3luYykgewotICAgICAgICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCkpOworICAgICAgICBtX3Byb2dy
ZXNzRXZlbnRUaHJvdHRsZS5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCkpOwogICAgICAgICBpZiAobV9y
ZXF1ZXN0RW50aXR5Qm9keSAmJiBtX3VwbG9hZCkgewogICAgICAgICAgICAgZm9yY2VQcmVmbGln
aHQgPSBtX3VwbG9hZC0+aGFzRXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgICAgIG1fdXBsb2Fk
LT5kaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5sb2Fkc3RhcnRFdmVudCkpOwpAQCAtNTQ5LDcgKzU1MCw3IEBAIHZvaWQgWE1MSHR0
cFJlcXVlc3Q6OmFib3J0KCkKICAgICAgICAgbV9zdGF0ZSA9IFVOU0VOVDsKICAgICB9CiAKLSAg
ICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5hYm9ydEV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0
Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
YWJvcnRFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0ZSkgewogICAgICAgICBtX3Vw
bG9hZENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKG1fdXBsb2FkICYmIG1fdXBsb2FkRXZl
bnRzQWxsb3dlZCkKQEAgLTYwMyw3ICs2MDQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpnZW5l
cmljRXJyb3IoKQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6bmV0d29ya0Vycm9yKCkKIHsKICAgICBn
ZW5lcmljRXJyb3IoKTsKLSAgICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5lcnJvckV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2
ZW50VGhyb3R0bGUuZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZXJyb3JFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0
ZSkgewogICAgICAgICBtX3VwbG9hZENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKG1fdXBs
b2FkICYmIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCkKQEAgLTYxNSw3ICs2MTYsNyBAQCB2b2lkIFhN
TEh0dHBSZXF1ZXN0OjpuZXR3b3JrRXJyb3IoKQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnRF
cnJvcigpCiB7CiAgICAgZ2VuZXJpY0Vycm9yKCk7Ci0gICAgZGlzcGF0Y2hFdmVudChYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCkpOwor
ICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsKICAgICBpZiAo
IW1fdXBsb2FkQ29tcGxldGUpIHsKICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAg
ICAgICAgIGlmIChtX3VwbG9hZCAmJiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCkBAIC05MTgsOSAr
OTE5LDggQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciog
ZGF0YSwgaW50IGxlbikKICAgICAgICAgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoID0gbV9yZXNw
b25zZS5leHBlY3RlZENvbnRlbnRMZW5ndGgoKTsKICAgICAgICAgbV9yZWNlaXZlZExlbmd0aCAr
PSBsZW47CiAKLSAgICAgICAgLy8gRklYTUU6IHRoZSBzcGVjIHJlcXVpcmVzIHRoYXQgd2UgZGlz
cGF0Y2ggdGhlIGV2ZW50IGFjY29yZGluZyB0byB0aGUgbGVhc3QKLSAgICAgICAgLy8gZnJlcXVl
bnQgbWV0aG9kIGJldHdlZW4gZXZlcnkgMzUwbXMgKCsvLTIwMG1zKSBhbmQgZm9yIGV2ZXJ5IGJ5
dGUgcmVjZWl2ZWQuCi0gICAgICAgIGRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIGV4cGVjdGVkTGVuZ3Ro
ICYmIG1fcmVjZWl2ZWRMZW5ndGggPD0gZXhwZWN0ZWRMZW5ndGgsIHN0YXRpY19jYXN0PHVuc2ln
bmVkPihtX3JlY2VpdmVkTGVuZ3RoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cGVjdGVkTGVu
Z3RoKSkpOworICAgICAgICBib29sIGxlbmd0aENvbXB1dGFibGUgPSBleHBlY3RlZExlbmd0aCAm
JiBtX3JlY2VpdmVkTGVuZ3RoIDw9IGV4cGVjdGVkTGVuZ3RoOworICAgICAgICBtX3Byb2dyZXNz
RXZlbnRUaHJvdHRsZS5kaXNwYXRjaFByb2dyZXNzRXZlbnQobGVuZ3RoQ29tcHV0YWJsZSwgc3Rh
dGljX2Nhc3Q8dW5zaWduZWQ+KG1fcmVjZWl2ZWRMZW5ndGgpLCBzdGF0aWNfY2FzdDx1bnNpZ25l
ZD4oZXhwZWN0ZWRMZW5ndGgpKTsKIAogICAgICAgICBpZiAobV9zdGF0ZSAhPSBMT0FESU5HKQog
ICAgICAgICAgICAgY2hhbmdlU3RhdGUoTE9BRElORyk7CkBAIC05MzUsNiArOTM1LDE4IEBAIGJv
b2wgWE1MSHR0cFJlcXVlc3Q6OmNhblN1c3BlbmQoKSBjb25zdAogICAgIHJldHVybiAhbV9sb2Fk
ZXI7CiB9CiAKK3ZvaWQgWE1MSHR0cFJlcXVlc3Q6OnN1c3BlbmQoKQoreworICAgIEFjdGl2ZURP
TU9iamVjdDo6c3VzcGVuZCgpOworICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLnN1c3BlbmQo
KTsKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6cmVzdW1lKCkKK3sKKyAgICBBY3RpdmVET01P
YmplY3Q6OnJlc3VtZSgpOworICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLnJlc3VtZSgpOwor
fQorCiB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpzdG9wKCkKIHsKICAgICBpbnRlcm5hbEFib3J0KCk7
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oIGIvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuaAppbmRleCAyY2VhNWM2Li43ZTJjNDRkIDEwMDY0NAotLS0gYS9XZWJD
b3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0
LmgKQEAgLTI5LDYgKzI5LDcgQEAKICNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCiAjaW5j
bHVkZSAiU2NyaXB0U3RyaW5nLmgiCiAjaW5jbHVkZSAiVGhyZWFkYWJsZUxvYWRlckNsaWVudC5o
IgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgiCiAjaW5j
bHVkZSA8d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CkBAIC01Nyw2ICs1OCw4
IEBAIHB1YmxpYzoKIAogICAgIHZpcnR1YWwgdm9pZCBjb250ZXh0RGVzdHJveWVkKCk7CiAgICAg
dmlydHVhbCBib29sIGNhblN1c3BlbmQoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc3VzcGVu
ZCgpOworICAgIHZpcnR1YWwgdm9pZCByZXN1bWUoKTsKICAgICB2aXJ0dWFsIHZvaWQgc3RvcCgp
OwogCiAgICAgdmlydHVhbCBTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBzY3JpcHRFeGVjdXRpb25D
b250ZXh0KCkgY29uc3Q7CkBAIC0xODQsNiArMTg3LDggQEAgcHJpdmF0ZToKICAgICBFeGNlcHRp
b25Db2RlIG1fZXhjZXB0aW9uQ29kZTsKIAogICAgIEV2ZW50VGFyZ2V0RGF0YSBtX2V2ZW50VGFy
Z2V0RGF0YTsKKworICAgIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlIG1fcHJv
Z3Jlc3NFdmVudFRocm90dGxlOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3Bw
IGIvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2MGY5YTMKLS0tIC9kZXYvbnVsbAor
KysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAK
QEAgLTAsMCArMSwxNjAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTAsIEp1bGllbiBDaGFm
ZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAgICAq
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUK
KyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlvbi4KKyAqICAgICAqIE5l
aXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIHRoZQorICogY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCIKKworI2luY2x1ZGUgIkV2ZW50
VGFyZ2V0LmgiCisjaW5jbHVkZSAiWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6
OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlKEV2ZW50VGFyZ2V0KiB0YXJnZXQp
CisgICAgOiBtX3RhcmdldCh0YXJnZXQpCisgICAgLCBtX2xvYWRlZCgwKQorICAgICwgbV90b3Rh
bCgwKQorICAgICwgbV9zdXNwZW5kZWQoZmFsc2UpCit7CisgICAgQVNTRVJUKHRhcmdldCk7Cit9
CisKK1hNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjp+WE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGUoKQoreworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jl
c3NFdmVudFRocm90dGxlOjpkaXNwYXRjaFByb2dyZXNzRXZlbnQoYm9vbCBsZW5ndGhDb21wdXRh
YmxlLCB1bnNpZ25lZCBsb2FkZWQsIHVuc2lnbmVkIHRvdGFsKQoreworICAgIGlmICghaXNBY3Rp
dmUoKSkgeworICAgICAgICAvLyBUaGUgdGltZXIgaXMgbm90IGFjdGl2ZSBzbyB0aGUgbGVhc3Qg
ZnJlcXVlbnQgZXZlbnQgZm9yIG5vdyBpcyBldmVyeSBieXRlLgorICAgICAgICAvLyBKdXN0IGdv
IGFoZWFkIGFuZCBkaXNwYXRjaCB0aGUgZXZlbnQuCisKKyAgICAgICAgLy8gV2Ugc2hvdWxkIG5v
dCBoYXZlIGFueSBwZW5kaW5nIGxvYWRlZCAmIHRvdGFsIGluZm9ybWF0aW9uIGZyb20gYSBwcmV2
aW91cyBydW4uCisgICAgICAgIEFTU0VSVCghbV9sb2FkZWQpOworICAgICAgICBBU1NFUlQoIW1f
dG90YWwpOworCisgICAgICAgIGRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQsIGxlbmd0aENvbXB1dGFibGUs
IGxvYWRlZCwgdG90YWwpKTsKKyAgICAgICAgc3RhcnRSZXBlYXRpbmcobWluaW11bVByb2dyZXNz
RXZlbnREaXNwYXRjaGluZ0ludGVydmFsSW5TZWNvbmRzKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIC8vIFRoZSB0aW1lciBpcyBhbHJlYWR5IGFjdGl2ZSBzbyBtaW5pbXVtUHJvZ3Jl
c3NFdmVudERpc3BhdGNoaW5nSW50ZXJ2YWxJblNlY29uZHMgaXMgdGhlIGxlYXN0IGZyZXF1ZW50
IGV2ZW50LgorICAgIG1fbGVuZ3RoQ29tcHV0YWJsZSA9IGxlbmd0aENvbXB1dGFibGU7CisgICAg
bV9sb2FkZWQgPSBsb2FkZWQ7CisgICAgbV90b3RhbCA9IHRvdGFsOworfQorCit2b2lkIFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8
RXZlbnQ+IGV2ZW50LCBQcm9ncmVzc0V2ZW50QWN0aW9uIHByb2dyZXNzRXZlbnRBY3Rpb24pCit7
CisgICAgaWYgKHN1c3BlbmRlZCgpKSB7CisgICAgICAgIGlmIChwcm9ncmVzc0V2ZW50QWN0aW9u
ID09IEZsdXNoUHJvZ3Jlc3NFdmVudCkKKyAgICAgICAgICAgIGZsdXNoUHJvZ3Jlc3NFdmVudCgp
OworCisgICAgICAgIG1fcGF1c2VkRXZlbnRzLmFwcGVuZChldmVudCk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICAvLyBXZSBzaG91bGQgbm90IGhhdmUgYW55IHBlbmRpbmcgZXZlbnRz
IGZyb20gYSByZXN1bWUuCisgICAgQVNTRVJUKCFtX3BhdXNlZEV2ZW50cy5zaXplKCkpOworICAg
IGlmIChwcm9ncmVzc0V2ZW50QWN0aW9uID09IEZsdXNoUHJvZ3Jlc3NFdmVudCkKKyAgICAgICAg
Zmx1c2hQcm9ncmVzc0V2ZW50KCk7CisKKyAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7Cit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZsdXNo
UHJvZ3Jlc3NFdmVudCgpCit7CisgICAgaWYgKCFoYXNFdmVudFRvRGlzcGF0Y2goKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgUGFzc1JlZlB0cjxFdmVudD4gZXZlbnQgPSBYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwgbV9sZW5n
dGhDb21wdXRhYmxlLCBtX2xvYWRlZCwgbV90b3RhbCk7CisgICAgbV9sb2FkZWQgPSAwOworICAg
IG1fdG90YWwgPSAwOworCisgICAgLy8gV2Ugc3RvcCB0aGUgdGltZXIgYXMgdGhpcyBpcyBjYWxs
ZWQgd2hlbiBubyBtb3JlIGV2ZW50cyBhcmUgc3VwcG9zZWQgdG8gb2NjdXIuCisgICAgc3RvcCgp
OworCisgICAgaWYgKHN1c3BlbmRlZCgpKQorICAgICAgICBtX3BhdXNlZEV2ZW50cy5hcHBlbmQo
ZXZlbnQpOworICAgIGVsc2UKKyAgICAgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZlbnQoZXZlbnQp
OworfQorCit2b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpkaXNwYXRj
aFBhdXNlZEV2ZW50cygpCit7CisgICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7CisKKyAgICAvLyBE
aXNwYXRjaCBhbnkgcGVuZGluZyBldmVudHMuCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBt
X3BhdXNlZEV2ZW50cy5zaXplKCk7ICsraSkKKyAgICAgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZl
bnQobV9wYXVzZWRFdmVudHMuYXQoaSkpOworICAgIG1fcGF1c2VkRXZlbnRzLmNsZWFyKCk7Cit9
CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZpcmVkKCkKK3sK
KyAgICBBU1NFUlQoaXNBY3RpdmUoKSk7CisgICAgaWYgKCFoYXNFdmVudFRvRGlzcGF0Y2goKSkg
eworICAgICAgICAvLyBObyBwcm9ncmVzcyBldmVudCB3YXMgcXVldWVkIHNpbmNlIHRoZSBwcmV2
aW91cyBkaXNwYXRjaCwgd2UgY2FuIHNhZmVseSBzdG9wIHRoZSB0aW1lci4KKyAgICAgICAgc3Rv
cCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV90YXJnZXQtPmRpc3BhdGNoRXZl
bnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dy
ZXNzRXZlbnQsIG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwpKTsKKyAgICBt
X3RvdGFsID0gMDsKKyAgICBtX2xvYWRlZCA9IDA7Cit9CisKK2Jvb2wgWE1MSHR0cFJlcXVlc3RQ
cm9ncmVzc0V2ZW50VGhyb3R0bGU6Omhhc0V2ZW50VG9EaXNwYXRjaCgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIChtX3RvdGFsIHx8IG1fbG9hZGVkKSAmJiBpc0FjdGl2ZSgpOworfQorCit2b2lkIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpzdXNwZW5kKCkKK3sKKyAgICBtX3N1
c3BlbmRlZCA9IHRydWU7CisgICAgLy8gSWYgd2UgaGF2ZSBhIHByb2dyZXNzIGV2ZW50IHdhaXRp
bmcgdG8gYmUgZGlzcGF0Y2hlZCwKKyAgICAvLyBqdXN0IHF1ZXVlIGl0LgorICAgIGlmIChoYXNF
dmVudFRvRGlzcGF0Y2goKSkgeworICAgICAgICBtX3BhdXNlZEV2ZW50cy5hcHBlbmQoWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnByb2dyZXNzRXZlbnQs
IG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwpKTsKKyAgICAgICAgbV90b3Rh
bCA9IDA7CisgICAgICAgIG1fbG9hZGVkID0gMDsKKyAgICB9CisgICAgc3RvcCgpOworfQorCit2
b2lkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpyZXN1bWUoKQoreworICAg
IEFTU0VSVCghbV9sb2FkZWQpOworICAgIEFTU0VSVCghbV90b3RhbCk7CisKKyAgICBtX3N1c3Bl
bmRlZCA9IGZhbHNlOworICAgIGRpc3BhdGNoUGF1c2VkRXZlbnRzKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlLmggYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1MTk3
MjUKLS0tIC9kZXYvbnVsbAorKysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZS5oCkBAIC0wLDAgKzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTAsIEp1bGllbiBDaGFmZnJhaXggPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4uCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCisgKiBtZXQ6CisgKgorICogICAgICogUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqICAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKKyAqIGluIHRoZSBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqIGRpc3RyaWJ1dGlv
bi4KKyAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVz
IG9mIHRoZQorICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAqIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElT
IiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICog
U1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlX2gKKyNkZWZpbmUgWE1MSHR0cFJlcXVlc3RQcm9n
cmVzc0V2ZW50VGhyb3R0bGVfaAorCisjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlICJ3dGYv
UGFzc1JlZlB0ci5oIgorI2luY2x1ZGUgInd0Zi9WZWN0b3IuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBFdmVudDsKK2NsYXNzIEV2ZW50VGFyZ2V0OworCitlbnVtIFByb2dyZXNz
RXZlbnRBY3Rpb24geworICAgIERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50LAorICAgIEZsdXNoUHJv
Z3Jlc3NFdmVudAorfTsKKworLy8gVGhpcyBpbXBsZW1lbnRzIHRoZSBYSFIyIHByb2dyZXNzIGV2
ZW50IGRpc3BhdGNoaW5nOiAiZGlzcGF0Y2ggYSBwcm9ncmVzcyBldmVudCBjYWxsZWQgcHJvZ3Jl
c3MKKy8vIGFib3V0IGV2ZXJ5IDUwbXMgb3IgZm9yIGV2ZXJ5IGJ5dGUgcmVjZWl2ZWQsIHdoaWNo
ZXZlciBpcyBsZWFzdCBmcmVxdWVudCIuCitjbGFzcyBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZSA6IHB1YmxpYyBUaW1lckJhc2UgeworcHVibGljOgorICAgIFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlKEV2ZW50VGFyZ2V0Kik7CisgICAgdmlydHVhbCB+WE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUoKTsKKworICAgIHZvaWQgZGlzcGF0Y2hQ
cm9ncmVzc0V2ZW50KGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWduZWQgbG9hZGVkLCB1bnNp
Z25lZCB0b3RhbCk7CisgICAgdm9pZCBkaXNwYXRjaEV2ZW50KFBhc3NSZWZQdHI8RXZlbnQ+LCBQ
cm9ncmVzc0V2ZW50QWN0aW9uID0gRG9Ob3RGbHVzaFByb2dyZXNzRXZlbnQpOworCisgICAgdm9p
ZCBzdXNwZW5kKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIGJvb2wgc3VzcGVuZGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9zdXNwZW5kZWQ7IH0KKworcHJpdmF0ZToKKyAgICBzdGF0aWMgY29u
c3QgZG91YmxlIG1pbmltdW1Qcm9ncmVzc0V2ZW50RGlzcGF0Y2hpbmdJbnRlcnZhbEluU2Vjb25k
cyA9IC4wNTsgLy8gNTAgbXMgcGVyIHNwZWNpZmljYXRpb24uCisKKyAgICB2aXJ0dWFsIHZvaWQg
ZmlyZWQoKTsKKyAgICB2b2lkIGRpc3BhdGNoUGF1c2VkRXZlbnRzKCk7CisgICAgdm9pZCBmbHVz
aFByb2dyZXNzRXZlbnQoKTsKKworICAgIGJvb2wgaGFzRXZlbnRUb0Rpc3BhdGNoKCkgY29uc3Q7
CisKKyAgICBFdmVudFRhcmdldCogbV90YXJnZXQ7CisKKyAgICBib29sIG1fbGVuZ3RoQ29tcHV0
YWJsZTsKKyAgICB1bnNpZ25lZCBtX2xvYWRlZDsKKyAgICB1bnNpZ25lZCBtX3RvdGFsOworCisg
ICAgYm9vbCBtX3N1c3BlbmRlZDsKKyAgICBWZWN0b3I8UmVmUHRyPEV2ZW50PiA+IG1fcGF1c2Vk
RXZlbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gWE1MSHR0
cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGVfaAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50875</attachid>
            <date>2010-03-16 22:30:00 -0700</date>
            <delta_ts>2010-03-17 09:53:16 -0700</delta_ts>
            <desc>Third version: use a more tailored version of suspend / resume. Also takes Alexey comments into account.</desc>
            <filename>18654-XHR-onProgress-dispatch-3.diff</filename>
            <type>text/plain</type>
            <size>30095</size>
            <attacher name="Julien Chaffraix">jchaffraix</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4M2RkZDM0Li4xN2YxNTljIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTYgQEAKKzIwMTAtMDMt
MTUgIEp1bGllbiBDaGFmZnJhaXggIDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1hIUl0gb25Qcm9ncmVzcyBl
dmVudCBuZWVkcyB0byBiZSBkaXNwYXRjaGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZp
Y2F0aW9uIHN0YXRlcworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg2NTQKKworICAgICAgICBBZGQgYSB0ZXN0IHRvIGNoZWNrIHRoYXQgcHJvZ3Jlc3Mg
ZXZlbnRzIGFyZSByZWFsbHkgdGhyb3R0bGVkLgorCisgICAgICAgICogaHR0cC90ZXN0cy94bWxo
dHRwcmVxdWVzdC9yZXNvdXJjZXMvZG93bmxvYWQtd2l0aC1kZWxheS5waHA6IEFkZGVkLgorICAg
ICAgICAqIGh0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtNTBtcy1kb3du
bG9hZC1kaXNwYXRjaC1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
eG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC5odG1s
OiBBZGRlZC4KKwogMjAxMC0wMi0yNyAgQ3NhYmEgT3N6dHJvZ29uw6FjICA8b3NzeUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtRdF0gU2tpcCBuZXcgdGVzdCBpbnRyb2R1Y2VkIGluIHI1NTM1MyBi
ZWNhdXNlIG9mIG1pc3NpbmcgZHJhZyZkcm9wIHN1cHBvcnQuCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3Jlc291cmNlcy9kb3dubG9hZC13aXRoLWRl
bGF5LnBocCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QvcmVzb3VyY2Vz
L2Rvd25sb2FkLXdpdGgtZGVsYXkucGhwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAuLjI2OGI1OWYKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL3ht
bGh0dHByZXF1ZXN0L3Jlc291cmNlcy9kb3dubG9hZC13aXRoLWRlbGF5LnBocApAQCAtMCwwICsx
LDIwIEBACis8P3BocAoraGVhZGVyKCJFeHBpcmVzOiBUaHUsIDAxIERlYyAyMDAzIDE2OjAwOjAw
IEdNVCIpOworaGVhZGVyKCJDYWNoZS1Db250cm9sOiBuby1jYWNoZSwgbm8tc3RvcmUsIG11c3Qt
cmV2YWxpZGF0ZSIpOworaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7CisKKyRpdGVyYXRpb24g
PSAkX0dFVFsnaXRlcmF0aW9uJ107CiskZGVsYXkgPSAkX0dFVFsnZGVsYXknXTsKKworZWNobyAi
JGl0ZXJhdGlvblxuIjsKK2VjaG8gIiRkZWxheVxuIjsKKworZm9yICgkaSA9IDE7ICRpIDw9ICRp
dGVyYXRpb247ICsrJGkpIHsKKyAgICBlY2hvICIkaVxuIjsKKyAgICBlY2hvICJmb29iYXJcbiI7
CisgICAgLy8gRm9yY2UgY29udGVudCB0byBiZSBzZW50IHRvIHRoZSBicm93c2VyIGFzIGlzLgor
ICAgIG9iX2ZsdXNoKCk7CisgICAgZmx1c2goKTsKKyAgICB1c2xlZXAoJGRlbGF5ICogMTAwMCk7
Cit9Cis/PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy94bWxodHRwcmVxdWVz
dC94bWxodHRwcmVxdWVzdC01MG1zLWRvd25sb2FkLWRpc3BhdGNoLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtNTBtcy1k
b3dubG9hZC1kaXNwYXRjaC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uNDc2ZTliOQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMveG1saHR0cHJlcXVlc3QveG1saHR0cHJlcXVlc3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC1l
eHBlY3RlZC50eHQKQEAgLTAsMCArMSwxMiBAQAorVGVzdCBjYXNlIGZvciBCdWcgMTg2NTU6IFtY
SFJdIG9uUHJvZ3Jlc3MgZXZlbnQgbmVlZHMgdG8gYmUgZGlzcGF0Y2hlZCBhY2NvcmRpbmcgdG8g
d2hhdCB0aGUgc3BlY2lmaWNhdGlvbiBzdGF0ZXMKKworVGhpcyB0ZXN0IHZlcmlmeSB0aGF0IHdl
ICJkaXNwYXRjaCBhIHByb2dyZXNzIGV2ZW50IGNhbGxlZCBwcm9ncmVzcyBhYm91dCBldmVyeSA1
MG1zIG9yIGZvciBldmVyeSBieXRlIHJlY2VpdmVkLCB3aGljaGV2ZXIgaXMgbGVhc3QgZnJlcXVl
bnQiLgorCitZb3Ugc2hvdWxkIHNlZSBhIHNlcXVlbmNlIG9mIDUgUEFTU0VELgorCitQQVNTRUQK
K1BBU1NFRAorUEFTU0VECitQQVNTRUQKK1BBU1NFRAorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQt
ZGlzcGF0Y2guaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMveG1saHR0cHJlcXVlc3QveG1s
aHR0cHJlcXVlc3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC5odG1sCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAuLmQ5ODIwYzMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL3htbGh0dHByZXF1ZXN0L3htbGh0dHByZXF1ZXN0LTUwbXMtZG93bmxvYWQt
ZGlzcGF0Y2guaHRtbApAQCAtMCwwICsxLDgwIEBACis8aHRtbD4KKzxoZWFkPgorICAgIDx0aXRs
ZT4gVGVzdCBjYXNlIGZvciBidWcgMTg2NTUgPC90aXRsZT4KKzwvaGVhZD4KKzxib2R5PgorPHA+
IFRlc3QgY2FzZSBmb3IgQnVnIDxhIGhyZWY9Imh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODY1NSI+MTg2NTU8L2E+OiBbWEhSXSBvblByb2dyZXNzIGV2ZW50CituZWVk
cyB0byBiZSBkaXNwYXRjaGVkIGFjY29yZGluZyB0byB3aGF0IHRoZSBzcGVjaWZpY2F0aW9uIHN0
YXRlcyA8L3A+Cis8cD4gVGhpcyB0ZXN0IHZlcmlmeSB0aGF0IHdlICJkaXNwYXRjaCBhIHByb2dy
ZXNzIGV2ZW50IGNhbGxlZCBwcm9ncmVzcyBhYm91dAorZXZlcnkgNTBtcyBvciBmb3IgZXZlcnkg
Ynl0ZSByZWNlaXZlZCwgd2hpY2hldmVyIGlzIGxlYXN0IGZyZXF1ZW50Ii48L3A+Cis8cD4gWW91
IHNob3VsZCBzZWUgYSBzZXF1ZW5jZSBvZiA1IFBBU1NFRC4gPC9wPgorPHAgaWQ9ImNvbnNvbGUi
PjwvcD4KKworPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoraWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci5kdW1wQXNUZXh0KCk7
CisKK2Z1bmN0aW9uIGxvZyhtZXNzYWdlKQoreworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobWVzc2FnZSkp
OworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIikuYXBwZW5kQ2hpbGQoZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgiYnIiKSk7Cit9CisKK2Z1bmN0aW9uIHRlc3QoaXRlcmF0aW9u
LCBkZWxheSwgY29tcGFyZSkKK3sKKyAgICB2YXIgY291bnQgPSAwOworICAgIHZhciBzYXdSZWFk
eVN0YXRlRE9ORSA9IGZhbHNlOworICAgIGZ1bmN0aW9uIG9uUHJvZ3Jlc3MoZSkgeworICAgICAg
ICArK2NvdW50OworICAgICAgICBpZiAoc2F3UmVhZHlTdGF0ZURPTkUpCisgICAgICAgICAgICBs
b2coIkZBSUxFRDogc2F3ICdwcm9ncmVzcycgZXZlbnQgYWZ0ZXIgcmVhZHlzdGF0ZSAnRE9ORScg
ZXZlbnQuIik7CisgICAgfQorCisgICAgZnVuY3Rpb24gb25SZWFkeVN0YXRlKGUpIHsKKyAgICAg
ICAgaWYgKHRoaXMucmVhZHlTdGF0ZSA9PSA0KSB7CisgICAgICAgICAgICBzYXdSZWFkeVN0YXRl
RE9ORSA9IHRydWU7CisgICAgICAgICAgICB2YXIgcGFzc2VkID0gIGNvbXBhcmUoY291bnQsIGl0
ZXJhdGlvbik7CisgICAgICAgICAgICBsb2cocGFzc2VkID8gIlBBU1NFRCIgOiAiRkFJTEVEIChj
b3VudCB3YXMgIiArIGNvdW50ICsgIikiKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHZhciBy
ZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgICByZXEub25wcm9ncmVzcyA9IG9uUHJvZ3Jl
c3M7CisgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IG9uUmVhZHlTdGF0ZTsKKyAgICByZXEu
b3BlbigiR0VUIiwgInJlc291cmNlcy9kb3dubG9hZC13aXRoLWRlbGF5LnBocD9pdGVyYXRpb249
IiArIGl0ZXJhdGlvbiArICImZGVsYXk9IiArIGRlbGF5LCB0cnVlKTsKKyAgICByZXEuc2VuZChu
dWxsKTsKK30KKworLy8gTnVtYmVyIG9mIGNodW5rcyB0byBzZW5kLCBkZWxheSBiZXR3ZWVuIGNo
dW5rcwordmFyIHN0cmljdFRlc3RzID0gWyAyLCA4MCwKKyAgICAgICAgICAgICAgICAgICAgMSwg
MTAwMCwKKyAgICAgICAgICAgICAgICAgICAgMiwgNTAgXTsKK2Z1bmN0aW9uIGNvbXBhcmVTdHJp
Y3QoY291bnQsIGl0ZXJhdGlvbikKK3sKKyAgICByZXR1cm4gY291bnQgPT0gaXRlcmF0aW9uOwor
fQorCit2YXIgdGhyb3R0bGVkVGVzdHMgPSBbIDUsIDIwLAorICAgICAgICAgICAgICAgICAgICAg
ICA2LCAzMCBdOworZnVuY3Rpb24gY29tcGFyZVRocm90dGxlZChjb3VudCwgaXRlcmF0aW9uKQor
eworICAgIHJldHVybiBjb3VudCA8IGl0ZXJhdGlvbjsKK30KKwordHJ5IHsKK3doaWxlIChzdHJp
Y3RUZXN0cy5sZW5ndGgpIHsKKyAgICB2YXIgaXRlcmF0aW9uID0gc3RyaWN0VGVzdHMuc2hpZnQo
KTsKKyAgICB2YXIgZGVsYXkgPSBzdHJpY3RUZXN0cy5zaGlmdCgpOworICAgIHRlc3QoaXRlcmF0
aW9uLCBkZWxheSwgY29tcGFyZVN0cmljdCk7Cit9Cit3aGlsZSh0aHJvdHRsZWRUZXN0cy5sZW5n
dGgpIHsKKyAgICB2YXIgaXRlcmF0aW9uID0gdGhyb3R0bGVkVGVzdHMuc2hpZnQoKTsKKyAgICB2
YXIgZGVsYXkgPSB0aHJvdHRsZWRUZXN0cy5zaGlmdCgpOworICAgIHRlc3QoaXRlcmF0aW9uLCBk
ZWxheSwgY29tcGFyZVRocm90dGxlZCk7Cit9Cit9IGNhdGNoKGUpIHsKKyAgICBsb2coIkZBSUxF
RDogZXhjZXB0aW9uIHJhaXNlZDogIiArIGUubWVzc2FnZSk7Cit9Cis8L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQW5kcm9pZC5tayBiL1dlYkNvcmUvQW5k
cm9pZC5tawppbmRleCBmMjY3NWUwLi4xYzIyMjkzIDEwMDY0NAotLS0gYS9XZWJDb3JlL0FuZHJv
aWQubWsKKysrIGIvV2ViQ29yZS9BbmRyb2lkLm1rCkBAIC04OTQsNSArODk0LDYgQEAgTE9DQUxf
U1JDX0ZJTEVTIDo9ICQoTE9DQUxfU1JDX0ZJTEVTKSBcCiAJXAogCXhtbC9ET01QYXJzZXIuY3Bw
IFwKIAl4bWwvWE1MSHR0cFJlcXVlc3QuY3BwIFwKKwl4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGUuY3BwIFwKIAl4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwIFwKIAl4
bWwvWE1MU2VyaWFsaXplci5jcHAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKaW5kZXggYmI3YjhkZC4uNmU4MmU1ZSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1NSBAQAorMjAx
MC0wMy0xNSAgSnVsaWVuIENoYWZmcmFpeCAgPGpjaGFmZnJhaXhAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbWEhSXSBvblByb2dy
ZXNzIGV2ZW50IG5lZWRzIHRvIGJlIGRpc3BhdGNoZWQgYWNjb3JkaW5nIHRvIHdoYXQgdGhlIHNw
ZWNpZmljYXRpb24gc3RhdGVzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xODY1NAorCisgICAgICAgIFRlc3Q6IGh0dHAvdGVzdHMveG1saHR0cHJlcXVl
c3QveG1saHR0cHJlcXVlc3QtNTBtcy1kb3dubG9hZC1kaXNwYXRjaC5odG1sCisKKyAgICAgICAg
KiBBbmRyb2lkLm1rOgorICAgICAgICAqIEdOVW1ha2VmaWxlLmFtOgorICAgICAgICAqIFdlYkNv
cmUuZ3lwaToKKyAgICAgICAgKiBXZWJDb3JlLnBybzoKKyAgICAgICAgKiBXZWJDb3JlLnZjcHJv
ai9XZWJDb3JlLnZjcHJvajoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgIEFkZGVkIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
IHRvIHRoZSBidWlsZCBzeXN0ZW1zLgorCisgICAgICAgICogeG1sL1hNTEh0dHBSZXF1ZXN0LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVxdWVzdCk6IENy
ZWF0ZWQgdGhlIHRocm90dGxlLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmNh
bGxSZWFkeVN0YXRlQ2hhbmdlTGlzdGVuZXIpOiBUaGUgJ3JlYWR5U3RhdGUnIGV2ZW50IGFyZQor
ICAgICAgICBkaXNwYXRjaGVkIHVzaW5nIHRoZSBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZSBub3cuIEZvciB0aGUgRE9ORSBzdGF0ZSwgd2UKKyAgICAgICAgbmVlZCB0byBmbHVz
aCBhbnkgcGVuZGluZyBwcm9ncmVzcyBldmVudCBhcyB3ZSBkbyBub3Qgd2FudCBpdCB0byBiZSBk
aXNwYXRjaGVkIGFmdGVyCisgICAgICAgIHRoZSBET05FIHJlYWR5U3RhdGUgZXZlbnQuCisgICAg
ICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6Y3JlYXRlUmVxdWVzdCk6IE1hZGUgdGhpcyBl
dmVudCB1c2UgdGhlCisgICAgICAgIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxl
IGZvciBldmVudCBkaXNwYXRjaGluZy4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0
OjphYm9ydCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6Om5ldHdv
cmtFcnJvcik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3Q6OmFib3J0
RXJyb3IpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0OjpkaWRSZWNl
aXZlRGF0YSk6IERpdHRvLiBBbHNvIGZpeGVkIGEgcG90ZW50aWFsIHdhcm5pbmcuCisgICAgICAg
IChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpY
TUxIdHRwUmVxdWVzdDo6cmVzdW1lKTogSW1wbGVtZW50ZWQgdGhlIGxvZ2ljIGZvciBzdXNwZW5k
IC8gcmVzdW1lLgorICAgICAgICAqIHhtbC9YTUxIdHRwUmVxdWVzdC5oOgorICAgICAgICAqIHht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OlhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlKToKKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjp+WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGUpOgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50
VGhyb3R0bGU6OmRpc3BhdGNoUHJvZ3Jlc3NFdmVudCk6IEltcGxlbWVudGVkIHRoZSBidWxrCisg
ICAgICAgIG9mIHRoZSBldmVudCB0aHJvdHRsaW5nIGhlcmU6IHdlIHVzZSBhIHRpbWVyIHRvIGRv
IHNvLCBhcyBsb25nIGFzIHRoZSB0aW1lciBpcyBhY3RpdmUgaXQgbWVhbnMKKyAgICAgICAgdGhh
dCBldmVudHMgYXJlIGNvbWluZyBmYXN0ZXIgdGhhbiB0aGUgdGhyb3R0bGluZyB0aW1lIGFuZCB3
ZSBjb2FsZXNjZSB0aGVtLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGU6OmRpc3BhdGNoRXZlbnQpOiBHZW5lcmljIG1ldGhvZCB0byBkaXNwYXRj
aCBhbiBldmVudC4KKyAgICAgICAgKFdlYkNvcmU6OlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlOjpmbHVzaFByb2dyZXNzRXZlbnQpOiBDYWxsZWQgd2hlbiB3ZSB3YW50IHRvIGRp
c3BhdGNoCisgICAgICAgIGFueSBwZW5kaW5nIGV2ZW50cyBhbmQgc3RvcHBpbmcgYW55IGZ1cnRo
ZXIgZGlzcGF0Y2hpbmcuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQYXVzZWRFdmVudCk6IFVzZWQgdG8gZGlzcGF0Y2ggdGhl
IGV2ZW50CisgICAgICAgIHRoYXQgd2FzIHF1ZXVlZCBkdWUgdG8gdGhlIG9iamVjdCBiZWluZyBz
dXNwZW5kZWQuCisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRU
aHJvdHRsZTo6ZmlyZWQpOiBVc2VkIHRvIGRpc3BhdGNoIGFueSBjb2FsZXNjZWQgZXZlbnQuCisg
ICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6aGFz
RXZlbnRUb0Rpc3BhdGNoKTogVXNlZCB0byBjaGVjayBpZiB3ZSBoYXZlCisgICAgICAgIGFuIGV2
ZW50IHRvIGRpc3BhdGNoLgorICAgICAgICAoV2ViQ29yZTo6WE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGU6OnN1c3BlbmQpOiBNYXJrZWQgdGhlIG9iamVjdCBhcyBzdXNwZW5kZWQu
CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6
cmVzdW1lKTogRGlzcGF0Y2hlZCB0aGUgZXZlbnQgdGhhdCB3YXMgcXVldWVkLgorICAgICAgICAq
IHhtbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Oik6CisgICAgICAgIChXZWJDb3JlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6c3VzcGVuZGVkKToKKwogMjAxMC0wMi0yNyAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE1hY2llaiBTdGFjaG93aWFr
LgpAQCAtNDIyLDcgKzQ3NCw2IEBACiAgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVj
dC5wYnhwcm9qOgogICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvQ29kZUdlbmVyYXRvckpTLnBt
OgogCi0+Pj4+Pj4+IC5yNTUzMTcKIDIwMTAtMDItMjYgIEFsZXggTWlsb3dza2kgIDxhbGV4QG1p
bG93c2tpLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJvaGRlIENocmlzdGlh
bnNlbi4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvR05VbWFrZWZpbGUuYW0gYi9XZWJDb3JlL0dOVW1h
a2VmaWxlLmFtCmluZGV4IDNlY2M2MzYuLjU1NWM4NzQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvR05V
bWFrZWZpbGUuYW0KKysrIGIvV2ViQ29yZS9HTlVtYWtlZmlsZS5hbQpAQCAtMTk1Niw2ICsxOTU2
LDggQEAgd2ViY29yZV9zb3VyY2VzICs9IFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5o
IFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oIFwKIAlXZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQuaCBcCisJV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIFwKKwlXZWJDb3JlL3htbC9YTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIFwKIAlXZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVz
dFVwbG9hZC5jcHAgXAogCVdlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0VXBsb2FkLmggXAogCVdl
YkNvcmUveG1sL1hNTFNlcmlhbGl6ZXIuY3BwIFwKZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29y
ZS5neXBpIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkKaW5kZXggZjhhMjgwZS4uNDQ2YWIxYSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9XZWJDb3JlLmd5cGkKKysrIGIvV2ViQ29yZS9XZWJDb3JlLmd5cGkK
QEAgLTM2NjMsNiArMzY2Myw4IEBACiAgICAgICAgICAgICAneG1sL1hNTEh0dHBSZXF1ZXN0Lmgn
LAogICAgICAgICAgICAgJ3htbC9YTUxIdHRwUmVxdWVzdEV4Y2VwdGlvbi5oJywKICAgICAgICAg
ICAgICd4bWwvWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmgnLAorICAgICAgICAgICAgJ3ht
bC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAnLAorICAgICAgICAgICAg
J3htbC9YTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oJywKICAgICAgICAgICAg
ICd4bWwvWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwJywKICAgICAgICAgICAgICd4bWwvWE1MSHR0
cFJlcXVlc3RVcGxvYWQuaCcsCiAgICAgICAgICAgICAneG1sL1hNTFNlcmlhbGl6ZXIuY3BwJywK
ZGlmZiAtLWdpdCBhL1dlYkNvcmUvV2ViQ29yZS5wcm8gYi9XZWJDb3JlL1dlYkNvcmUucHJvCmlu
ZGV4IGQwNjhjMDQuLjNiMzI0YjAgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvV2ViQ29yZS5wcm8KKysr
IGIvV2ViQ29yZS9XZWJDb3JlLnBybwpAQCAtOTc3LDYgKzk3Nyw3IEBAIFNPVVJDRVMgKz0gXAog
ICAgIHJlbmRlcmluZy9zdHlsZS9TdHlsZVZpc3VhbERhdGEuY3BwIFwKICAgICB4bWwvRE9NUGFy
c2VyLmNwcCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0LmNwcCBcCisgICAgeG1sL1hNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBcCiAgICAgeG1sL1hNTEh0dHBSZXF1ZXN0
VXBsb2FkLmNwcCBcCiAgICAgeG1sL1hNTFNlcmlhbGl6ZXIuY3BwIAogCmRpZmYgLS1naXQgYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qIGIvV2ViQ29yZS9XZWJDb3JlLnZj
cHJvai9XZWJDb3JlLnZjcHJvagppbmRleCA5YmZjYjI3Li44ZWIxMTA5IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCisrKyBiL1dlYkNvcmUvV2ViQ29y
ZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oKQEAgLTI4Mjk1LDYgKzI4Mjk1LDE0IEBACiAJCQkJPg0K
IAkJCTwvRmlsZT4NCiAJCQk8RmlsZQ0KKwkJCQlSZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAiDQorCQkJCT4NCisJCQk8L0ZpbGU+DQor
CQkJPEZpbGUNCisJCQkJUmVsYXRpdmVQYXRoPSIuLlx4bWxcWE1MSHR0cFJlcXVlc3RQcm9ncmVz
c0V2ZW50VGhyb3R0bGUuaCINCisJCQkJPg0KKwkJCTwvRmlsZT4NCisJCQk8RmlsZQ0KIAkJCQlS
ZWxhdGl2ZVBhdGg9Ii4uXHhtbFxYTUxIdHRwUmVxdWVzdFVwbG9hZC5jcHAiDQogCQkJCT4NCiAJ
CQk8L0ZpbGU+DQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0
LnBieHByb2ogYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRl
eCBkNzBlNmQ2Li5hYjIxNTdkIDEwMDY0NAotLS0gYS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9q
L3Byb2plY3QucGJ4cHJvagorKysgYi9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagpAQCAtNDM2Miw2ICs0MzYyLDggQEAKIAkJQkM3NzJCNDAwQzRFQTkxRTAwODMyODVG
IC8qIENTU1N0eWxlU2VsZWN0b3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEJDNzcyQjNBMEM0RUE5MUUwMDgzMjg1RiAvKiBDU1NTdHlsZVNlbGVjdG9y
LmggKi87IH07CiAJCUJDNzcyQzQ2MEM0RUIyQzYwMDgzMjg1RiAvKiBYTUxIdHRwUmVxdWVzdC5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzc3MkM0
NDBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwICovOyB9OwogCQlCQzc3MkM0
NzBDNEVCMkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJDNzcyQzQ1MEM0RUIyQzYwMDgzMjg1RiAvKiBY
TUxIdHRwUmVxdWVzdC5oICovOyB9OworCQlBMTM2QTAwQzExMzREQkQyMDBDQzhENTAgLyogWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLzsgfTsKKwkJQTEzNkEwMEQx
MTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBMTM2QTAwQjEx
MzREQkQyMDBDQzhENTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAq
LzsgfTsKIAkJQkM3NzJDNEUwQzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEMw
QzRFQjMwNDAwODMyODVGIC8qIE1JTUVUeXBlUmVnaXN0cnkuY3BwICovOyB9OwogCQlCQzc3MkM0
RjBDNEVCMzA0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3RyeS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gQkM3NzJDNEQwQzRFQjMwNDAwODMyODVGIC8q
IE1JTUVUeXBlUmVnaXN0cnkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwogCQlCQzc3MkM1RTBDNEVCMzQ0MDA4MzI4NUYgLyogTUlNRVR5cGVSZWdpc3Ry
eU1hYy5tbSBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEJD
NzcyQzVEMEM0RUIzNDQwMDgzMjg1RiAvKiBNSU1FVHlwZVJlZ2lzdHJ5TWFjLm1tICovOyB9OwpA
QCAtNzgzNCw2ICs3ODM2LDggQEAKIAkJOUY3MjMwNEMxMTE4NEI0MTAwQUQwMTI2IC8qIFNjcmlw
dFByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0UHJvZmls
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5RjcyMzA0RDExMTg0QjQxMDBBRDAx
MjYgLyogU2NyaXB0UHJvZmlsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gU2NyaXB0UHJvZmlsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk5
RjcyMzA0RTExMTg0QjQxMDBBRDAxMjYgLyogU2NyaXB0UHJvZmlsZXIuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2NyaXB0UHJvZmlsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0UHJv
Z3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKKwkJQTEzNkEwMEIxMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUExN0M4MTIwMEYyQTVDRjcwMDVEQUFFQiAvKiBIVE1MRWxlbWVudEZh
Y3RvcnkuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSFRNTEVsZW1l
bnRGYWN0b3J5LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTE3QzgxMjEwRjJB
NUNGNzAwNURBQUVCIC8qIEhUTUxFbGVtZW50RmFjdG9yeS5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBIVE1MRWxlbWVudEZhY3RvcnkuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJQTcxODc2MEQwQjJBMTIwMTAwQTE2RUNFIC8qIERyYWdBY3Rpb25zLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IERyYWdBY3Rpb25zLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CkBAIC0xNTMyNiw2ICsxNTMzMCw4IEBACiAJCQkJQkM2MEQ5QzgwRDJBMjlF
NTAwQjk5MThGIC8qIFhNTEh0dHBSZXF1ZXN0RXhjZXB0aW9uLmlkbCAqLywKIAkJCQlGOUYwRUQ3
NzBEQjUwQ0EyMDBEMTZEQjkgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50LmggKi8sCiAJ
CQkJRjlGMEVENzgwREI1MENBMjAwRDE2REI5IC8qIFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dC5pZGwgKi8sCisJCQkJQTEzNkEwMEExMTM0REJEMjAwQ0M4RDUwIC8qIFhNTEh0dHBSZXF1ZXN0
UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCAqLywKKwkJCQlBMTM2QTAwQjExMzREQkQyMDBDQzhE
NTAgLyogWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaCAqLywKIAkJCQlCQ0RG
RDQ4RDBFMzA1MjkwMDA5RDEwQUQgLyogWE1MSHR0cFJlcXVlc3RVcGxvYWQuY3BwICovLAogCQkJ
CUJDREZENDhDMEUzMDUyOTAwMDlEMTBBRCAvKiBYTUxIdHRwUmVxdWVzdFVwbG9hZC5oICovLAog
CQkJCUJDREZENDkwMEUzMDU2NDQwMDlEMTBBRCAvKiBYTUxIdHRwUmVxdWVzdFVwbG9hZC5pZGwg
Ki8sCkBAIC0xODUzNCw2ICsxODU0MCw3IEBACiAJCQkJQkM3NzJDNDcwQzRFQjJDNjAwODMyODVG
IC8qIFhNTEh0dHBSZXF1ZXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzYwRDlDOTBEMkEyOUU1
MDBCOTkxOEYgLyogWE1MSHR0cFJlcXVlc3RFeGNlcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CUY5RjBFRDdBMERCNTBDQTIwMEQxNkRCOSAvKiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQu
aCBpbiBIZWFkZXJzICovLAorCQkJCUExMzZBMDBEMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkNERkQ0
OEUwRTMwNTI5MDAwOUQxMEFEIC8qIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLmggaW4gSGVhZGVycyAq
LywKIAkJCQlBODMzQzgwRDBBMkNGMjU2MDBENTc2NjQgLyogWE1MTmFtZXMuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUUxNUEzNkQ3MTEwNDU3MjAwMEI3QjYzOSAvKiBYTUxOU05hbWVzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTIwNzI1LDYgKzIwNzMyLDcgQEAKIAkJCQlBODMzQzdDQzBBMkNGMDc0MDBE
NTc2NjQgLyogWExpbmtOYW1lcy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlCQzc3MkM0NjBDNEVC
MkM2MDA4MzI4NUYgLyogWE1MSHR0cFJlcXVlc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQkNE
RkQ0OEYwRTMwNTI5MDAwOUQxMEFEIC8qIFhNTEh0dHBSZXF1ZXN0VXBsb2FkLmNwcCBpbiBTb3Vy
Y2VzICovLAorCQkJCUExMzZBMDBDMTEzNERCRDIwMENDOEQ1MCAvKiBYTUxIdHRwUmVxdWVzdFBy
b2dyZXNzRXZlbnRUaHJvdHRsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBODMzQzgwQzBBMkNG
MjU2MDBENTc2NjQgLyogWE1MTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJRTE1QTM2RDkx
MTA0NTcyNzAwQjdCNjM5IC8qIFhNTE5TTmFtZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMUFD
RTUzRUEwQThEMThFNzAwMjI5NDdEIC8qIFhNTFNlcmlhbGl6ZXIuY3BwIGluIFNvdXJjZXMgKi8s
CmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5jcHAgYi9XZWJDb3JlL3ht
bC9YTUxIdHRwUmVxdWVzdC5jcHAKaW5kZXggMzI4MThkZi4uNzdkYTZhYyAxMDA2NDQKLS0tIGEv
V2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuY3BwCisrKyBiL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0LmNwcApAQCAtMTU3LDYgKzE1Nyw3IEBAIFhNTEh0dHBSZXF1ZXN0OjpYTUxIdHRwUmVx
dWVzdChTY3JpcHRFeGVjdXRpb25Db250ZXh0KiBjb250ZXh0KQogICAgICwgbV9yZWNlaXZlZExl
bmd0aCgwKQogICAgICwgbV9sYXN0U2VuZExpbmVOdW1iZXIoMCkKICAgICAsIG1fZXhjZXB0aW9u
Q29kZSgwKQorICAgICwgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUodGhpcykKIHsKICAgICBpbml0
aWFsaXplWE1MSHR0cFJlcXVlc3RTdGF0aWNEYXRhKCk7CiAjaWZuZGVmIE5ERUJVRwpAQCAtMjU4
LDcgKzI1OSw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmNhbGxSZWFkeVN0YXRlQ2hhbmdlTGlz
dGVuZXIoKQogICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsQ2hhbmdlWEhSUmVhZHlTdGF0ZSht
X3VybC5zdHJpbmcoKSwgbV9zdGF0ZSk7CiAjZW5kaWYKIAotICAgIGRpc3BhdGNoRXZlbnQoWE1M
SHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlYWR5c3RhdGVj
aGFuZ2VFdmVudCkpOworICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLmRpc3BhdGNoRXZlbnQo
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnJlYWR5c3Rh
dGVjaGFuZ2VFdmVudCksIG1fc3RhdGUgPT0gRE9ORSA/IEZsdXNoUHJvZ3Jlc3NFdmVudCA6IERv
Tm90Rmx1c2hQcm9ncmVzc0V2ZW50KTsKIAogI2lmIEVOQUJMRShJTlNQRUNUT1IpCiAgICAgaWYg
KGNhbGxUaW1lbGluZUFnZW50T25SZWFkeVN0YXRlQ2hhbmdlICYmICh0aW1lbGluZUFnZW50ID0g
SW5zcGVjdG9yVGltZWxpbmVBZ2VudDo6cmV0cmlldmUoc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgp
KSkpCkBAIC0yNzMsNyArMjc0LDcgQEAgdm9pZCBYTUxIdHRwUmVxdWVzdDo6Y2FsbFJlYWR5U3Rh
dGVDaGFuZ2VMaXN0ZW5lcigpCiAgICAgICAgICAgICB0aW1lbGluZUFnZW50LT53aWxsTG9hZFhI
UihtX3VybC5zdHJpbmcoKSk7CiAjZW5kaWYKIAotICAgICAgICBkaXNwYXRjaEV2ZW50KFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2FkRXZlbnQpKTsK
KyAgICAgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkubG9hZEV2ZW50KSk7CiAKICNp
ZiBFTkFCTEUoSU5TUEVDVE9SKQogICAgICAgICBpZiAoY2FsbFRpbWVsaW5lQWdlbnRPbkxvYWQg
JiYgKHRpbWVsaW5lQWdlbnQgPSBJbnNwZWN0b3JUaW1lbGluZUFnZW50OjpyZXRyaWV2ZShzY3Jp
cHRFeGVjdXRpb25Db250ZXh0KCkpKSkKQEAgLTQ1Nyw3ICs0NTgsNyBAQCB2b2lkIFhNTEh0dHBS
ZXF1ZXN0OjpjcmVhdGVSZXF1ZXN0KEV4Y2VwdGlvbkNvZGUmIGVjKQogICAgIC8vIEFsc28sIG9u
bHkgYXN5bmMgcmVxdWVzdHMgc3VwcG9ydCB1cGxvYWQgcHJvZ3Jlc3MgZXZlbnRzLgogICAgIGJv
b2wgZm9yY2VQcmVmbGlnaHQgPSBmYWxzZTsKICAgICBpZiAobV9hc3luYykgewotICAgICAgICBk
aXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5sb2Fkc3RhcnRFdmVudCkpOworICAgICAgICBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5k
aXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS5sb2Fkc3RhcnRFdmVudCkpOwogICAgICAgICBpZiAobV9yZXF1ZXN0RW50aXR5Qm9keSAm
JiBtX3VwbG9hZCkgewogICAgICAgICAgICAgZm9yY2VQcmVmbGlnaHQgPSBtX3VwbG9hZC0+aGFz
RXZlbnRMaXN0ZW5lcnMoKTsKICAgICAgICAgICAgIG1fdXBsb2FkLT5kaXNwYXRjaEV2ZW50KFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5sb2Fkc3RhcnRF
dmVudCkpOwpAQCAtNTQ5LDcgKzU1MCw3IEBAIHZvaWQgWE1MSHR0cFJlcXVlc3Q6OmFib3J0KCkK
ICAgICAgICAgbV9zdGF0ZSA9IFVOU0VOVDsKICAgICB9CiAKLSAgICBkaXNwYXRjaEV2ZW50KFhN
TEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5hYm9ydEV2ZW50
KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCkpOwogICAg
IGlmICghbV91cGxvYWRDb21wbGV0ZSkgewogICAgICAgICBtX3VwbG9hZENvbXBsZXRlID0gdHJ1
ZTsKICAgICAgICAgaWYgKG1fdXBsb2FkICYmIG1fdXBsb2FkRXZlbnRzQWxsb3dlZCkKQEAgLTYw
Myw3ICs2MDQsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpnZW5lcmljRXJyb3IoKQogdm9pZCBY
TUxIdHRwUmVxdWVzdDo6bmV0d29ya0Vycm9yKCkKIHsKICAgICBnZW5lcmljRXJyb3IoKTsKLSAg
ICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50
TmFtZXMoKS5lcnJvckV2ZW50KSk7CisgICAgbV9wcm9ncmVzc0V2ZW50VGhyb3R0bGUuZGlzcGF0
Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
ZXJyb3JFdmVudCkpOwogICAgIGlmICghbV91cGxvYWRDb21wbGV0ZSkgewogICAgICAgICBtX3Vw
bG9hZENvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgaWYgKG1fdXBsb2FkICYmIG1fdXBsb2FkRXZl
bnRzQWxsb3dlZCkKQEAgLTYxNSw3ICs2MTYsNyBAQCB2b2lkIFhNTEh0dHBSZXF1ZXN0OjpuZXR3
b3JrRXJyb3IoKQogdm9pZCBYTUxIdHRwUmVxdWVzdDo6YWJvcnRFcnJvcigpCiB7CiAgICAgZ2Vu
ZXJpY0Vycm9yKCk7Ci0gICAgZGlzcGF0Y2hFdmVudChYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuYWJvcnRFdmVudCkpOworICAgIG1fcHJvZ3Jlc3NFdmVu
dFRocm90dGxlLmRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLmFib3J0RXZlbnQpKTsKICAgICBpZiAoIW1fdXBsb2FkQ29tcGxldGUp
IHsKICAgICAgICAgbV91cGxvYWRDb21wbGV0ZSA9IHRydWU7CiAgICAgICAgIGlmIChtX3VwbG9h
ZCAmJiBtX3VwbG9hZEV2ZW50c0FsbG93ZWQpCkBAIC05MTgsOSArOTE5LDggQEAgdm9pZCBYTUxI
dHRwUmVxdWVzdDo6ZGlkUmVjZWl2ZURhdGEoY29uc3QgY2hhciogZGF0YSwgaW50IGxlbikKICAg
ICAgICAgbG9uZyBsb25nIGV4cGVjdGVkTGVuZ3RoID0gbV9yZXNwb25zZS5leHBlY3RlZENvbnRl
bnRMZW5ndGgoKTsKICAgICAgICAgbV9yZWNlaXZlZExlbmd0aCArPSBsZW47CiAKLSAgICAgICAg
Ly8gRklYTUU6IHRoZSBzcGVjIHJlcXVpcmVzIHRoYXQgd2UgZGlzcGF0Y2ggdGhlIGV2ZW50IGFj
Y29yZGluZyB0byB0aGUgbGVhc3QKLSAgICAgICAgLy8gZnJlcXVlbnQgbWV0aG9kIGJldHdlZW4g
ZXZlcnkgMzUwbXMgKCsvLTIwMG1zKSBhbmQgZm9yIGV2ZXJ5IGJ5dGUgcmVjZWl2ZWQuCi0gICAg
ICAgIGRpc3BhdGNoRXZlbnQoWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZl
bnROYW1lcygpLnByb2dyZXNzRXZlbnQsIGV4cGVjdGVkTGVuZ3RoICYmIG1fcmVjZWl2ZWRMZW5n
dGggPD0gZXhwZWN0ZWRMZW5ndGgsIHN0YXRpY19jYXN0PHVuc2lnbmVkPihtX3JlY2VpdmVkTGVu
Z3RoKSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGV4cGVjdGVkTGVuZ3RoKSkpOworICAgICAgICBi
b29sIGxlbmd0aENvbXB1dGFibGUgPSBleHBlY3RlZExlbmd0aCAmJiBtX3JlY2VpdmVkTGVuZ3Ro
IDw9IGV4cGVjdGVkTGVuZ3RoOworICAgICAgICBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZS5kaXNw
YXRjaFByb2dyZXNzRXZlbnQobGVuZ3RoQ29tcHV0YWJsZSwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KG1fcmVjZWl2ZWRMZW5ndGgpLCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oZXhwZWN0ZWRMZW5ndGgp
KTsKIAogICAgICAgICBpZiAobV9zdGF0ZSAhPSBMT0FESU5HKQogICAgICAgICAgICAgY2hhbmdl
U3RhdGUoTE9BRElORyk7CkBAIC05MzUsNiArOTM1LDE2IEBAIGJvb2wgWE1MSHR0cFJlcXVlc3Q6
OmNhblN1c3BlbmQoKSBjb25zdAogICAgIHJldHVybiAhbV9sb2FkZXI7CiB9CiAKK3ZvaWQgWE1M
SHR0cFJlcXVlc3Q6OnN1c3BlbmQoKQoreworICAgIG1fcHJvZ3Jlc3NFdmVudFRocm90dGxlLnN1
c3BlbmQoKTsKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdDo6cmVzdW1lKCkKK3sKKyAgICBtX3By
b2dyZXNzRXZlbnRUaHJvdHRsZS5yZXN1bWUoKTsKK30KKwogdm9pZCBYTUxIdHRwUmVxdWVzdDo6
c3RvcCgpCiB7CiAgICAgaW50ZXJuYWxBYm9ydCgpOwpkaWZmIC0tZ2l0IGEvV2ViQ29yZS94bWwv
WE1MSHR0cFJlcXVlc3QuaCBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1ZXN0LmgKaW5kZXggMmNl
YTVjNi4uN2UyYzQ0ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS94bWwvWE1MSHR0cFJlcXVlc3QuaAor
KysgYi9XZWJDb3JlL3htbC9YTUxIdHRwUmVxdWVzdC5oCkBAIC0yOSw2ICsyOSw3IEBACiAjaW5j
bHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgogI2luY2x1ZGUgIlNjcmlwdFN0cmluZy5oIgogI2lu
Y2x1ZGUgIlRocmVhZGFibGVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJYTUxIdHRwUmVxdWVz
dFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIgogI2luY2x1ZGUgPHd0Zi9Pd25QdHIuaD4KIAogbmFt
ZXNwYWNlIFdlYkNvcmUgewpAQCAtNTcsNiArNTgsOCBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFs
IHZvaWQgY29udGV4dERlc3Ryb3llZCgpOwogICAgIHZpcnR1YWwgYm9vbCBjYW5TdXNwZW5kKCkg
Y29uc3Q7CisgICAgdmlydHVhbCB2b2lkIHN1c3BlbmQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgcmVz
dW1lKCk7CiAgICAgdmlydHVhbCB2b2lkIHN0b3AoKTsKIAogICAgIHZpcnR1YWwgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dCogc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpIGNvbnN0OwpAQCAtMTg0LDYg
KzE4Nyw4IEBAIHByaXZhdGU6CiAgICAgRXhjZXB0aW9uQ29kZSBtX2V4Y2VwdGlvbkNvZGU7CiAK
ICAgICBFdmVudFRhcmdldERhdGEgbV9ldmVudFRhcmdldERhdGE7CisKKyAgICBYTUxIdHRwUmVx
dWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZSBtX3Byb2dyZXNzRXZlbnRUaHJvdHRsZTsKIH07CiAK
IH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUveG1sL1hNTEh0dHBS
ZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcCBiL1dlYkNvcmUveG1sL1hNTEh0dHBSZXF1
ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi44YzgwOGY3Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuY3BwCkBAIC0wLDAgKzEsMTU2IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDEwLCBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5v
cmc+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAq
ICAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0
aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
CisgKiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdXRo
b3Igbm9yIHRoZSBuYW1lcyBvZiB0aGUKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklC
VVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBP
V05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
CisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVu
dFRocm90dGxlLmgiCisKKyNpbmNsdWRlICJFdmVudFRhcmdldC5oIgorI2luY2x1ZGUgIlhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1hNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlOjpYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZShFdmVudFRhcmdldCogdGFyZ2V0KQorICAgIDogbV90YXJnZXQodGFyZ2V0KQor
ICAgICwgbV9sb2FkZWQoMCkKKyAgICAsIG1fdG90YWwoMCkKKyAgICAsIG1fc3VzcGVuZGVkKGZh
bHNlKQoreworICAgIEFTU0VSVCh0YXJnZXQpOworfQorCitYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6flhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlKCkKK3sK
K30KKwordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hQ
cm9ncmVzc0V2ZW50KGJvb2wgbGVuZ3RoQ29tcHV0YWJsZSwgdW5zaWduZWQgbG9hZGVkLCB1bnNp
Z25lZCB0b3RhbCkKK3sKKyAgICBBU1NFUlQoIXN1c3BlbmRlZCgpKTsKKyAgICBpZiAoIWlzQWN0
aXZlKCkpIHsKKyAgICAgICAgLy8gVGhlIHRpbWVyIGlzIG5vdCBhY3RpdmUgc28gdGhlIGxlYXN0
IGZyZXF1ZW50IGV2ZW50IGZvciBub3cgaXMgZXZlcnkgYnl0ZS4KKyAgICAgICAgLy8gSnVzdCBn
byBhaGVhZCBhbmQgZGlzcGF0Y2ggdGhlIGV2ZW50LgorCisgICAgICAgIC8vIFdlIHNob3VsZCBu
b3QgaGF2ZSBhbnkgcGVuZGluZyBsb2FkZWQgJiB0b3RhbCBpbmZvcm1hdGlvbiBmcm9tIGEgcHJl
dmlvdXMgcnVuLgorICAgICAgICBBU1NFUlQoIW1fbG9hZGVkKTsKKyAgICAgICAgQVNTRVJUKCFt
X3RvdGFsKTsKKworICAgICAgICBkaXNwYXRjaEV2ZW50KFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NF
dmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5wcm9ncmVzc0V2ZW50LCBsZW5ndGhDb21wdXRhYmxl
LCBsb2FkZWQsIHRvdGFsKSk7CisgICAgICAgIHN0YXJ0UmVwZWF0aW5nKG1pbmltdW1Qcm9ncmVz
c0V2ZW50RGlzcGF0Y2hpbmdJbnRlcnZhbEluU2Vjb25kcyk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICAvLyBUaGUgdGltZXIgaXMgYWxyZWFkeSBhY3RpdmUgc28gbWluaW11bVByb2dy
ZXNzRXZlbnREaXNwYXRjaGluZ0ludGVydmFsSW5TZWNvbmRzIGlzIHRoZSBsZWFzdCBmcmVxdWVu
dCBldmVudC4KKyAgICBtX2xlbmd0aENvbXB1dGFibGUgPSBsZW5ndGhDb21wdXRhYmxlOworICAg
IG1fbG9hZGVkID0gbG9hZGVkOworICAgIG1fdG90YWwgPSB0b3RhbDsKK30KKwordm9pZCBYTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZTo6ZGlzcGF0Y2hFdmVudChQYXNzUmVmUHRy
PEV2ZW50PiBldmVudCwgUHJvZ3Jlc3NFdmVudEFjdGlvbiBwcm9ncmVzc0V2ZW50QWN0aW9uKQor
eworICAgIEFTU0VSVCghc3VzcGVuZGVkKCkpOworICAgIC8vIFdlIHNob3VsZCBub3QgaGF2ZSBh
bnkgcGVuZGluZyBldmVudHMgZnJvbSBhIHByZXZpb3VzIHJlc3VtZS4KKyAgICBBU1NFUlQoIW1f
cGF1c2VkRXZlbnQpOworCisgICAgaWYgKHByb2dyZXNzRXZlbnRBY3Rpb24gPT0gRmx1c2hQcm9n
cmVzc0V2ZW50KQorICAgICAgICBmbHVzaFByb2dyZXNzRXZlbnQoKTsKKworICAgIG1fdGFyZ2V0
LT5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKK30KKwordm9pZCBYTUxIdHRwUmVxdWVzdFByb2dyZXNz
RXZlbnRUaHJvdHRsZTo6Zmx1c2hQcm9ncmVzc0V2ZW50KCkKK3sKKyAgICBpZiAoIWhhc0V2ZW50
VG9EaXNwYXRjaCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBQYXNzUmVmUHRyPEV2ZW50PiBl
dmVudCA9IFhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5w
cm9ncmVzc0V2ZW50LCBtX2xlbmd0aENvbXB1dGFibGUsIG1fbG9hZGVkLCBtX3RvdGFsKTsKKyAg
ICBtX2xvYWRlZCA9IDA7CisgICAgbV90b3RhbCA9IDA7CisKKyAgICAvLyBXZSBzdG9wIHRoZSB0
aW1lciBhcyB0aGlzIGlzIGNhbGxlZCB3aGVuIG5vIG1vcmUgZXZlbnRzIGFyZSBzdXBwb3NlZCB0
byBvY2N1ci4KKyAgICBzdG9wKCk7CisKKyAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChldmVu
dCk7Cit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmRpc3Bh
dGNoUGF1c2VkRXZlbnQoKQoreworICAgIEFTU0VSVCghc3VzcGVuZGVkKCkpOworICAgIGlmICgh
bV9wYXVzZWRFdmVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV90YXJnZXQtPmRpc3BhdGNo
RXZlbnQobV9wYXVzZWRFdmVudCk7CisgICAgbV9wYXVzZWRFdmVudCA9IDA7Cit9CisKK3ZvaWQg
WE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OmZpcmVkKCkKK3sKKyAgICBBU1NF
UlQoaXNBY3RpdmUoKSk7CisgICAgQVNTRVJUKCFzdXNwZW5kZWQoKSk7CisgICAgQVNTRVJUKCFt
X3BhdXNlZEV2ZW50KTsKKyAgICBpZiAoIWhhc0V2ZW50VG9EaXNwYXRjaCgpKSB7CisgICAgICAg
IC8vIE5vIHByb2dyZXNzIGV2ZW50IHdhcyBxdWV1ZWQgc2luY2UgdGhlIHByZXZpb3VzIGRpc3Bh
dGNoLCB3ZSBjYW4gc2FmZWx5IHN0b3AgdGhlIHRpbWVyLgorICAgICAgICBzdG9wKCk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtX3RhcmdldC0+ZGlzcGF0Y2hFdmVudChYTUxIdHRw
UmVxdWVzdFByb2dyZXNzRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkucHJvZ3Jlc3NFdmVudCwg
bV9sZW5ndGhDb21wdXRhYmxlLCBtX2xvYWRlZCwgbV90b3RhbCkpOworICAgIG1fdG90YWwgPSAw
OworICAgIG1fbG9hZGVkID0gMDsKK30KKworYm9vbCBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZl
bnRUaHJvdHRsZTo6aGFzRXZlbnRUb0Rpc3BhdGNoKCkgY29uc3QKK3sKKyAgICByZXR1cm4gKG1f
dG90YWwgfHwgbV9sb2FkZWQpICYmIGlzQWN0aXZlKCk7Cit9CisKK3ZvaWQgWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OnN1c3BlbmQoKQoreworICAgIEFTU0VSVCghbV9wYXVz
ZWRFdmVudCk7CisKKyAgICBtX3N1c3BlbmRlZCA9IHRydWU7CisgICAgLy8gSWYgd2UgaGF2ZSBh
IHByb2dyZXNzIGV2ZW50IHdhaXRpbmcgdG8gYmUgZGlzcGF0Y2hlZCwKKyAgICAvLyBqdXN0IHF1
ZXVlIGl0LgorICAgIGlmIChoYXNFdmVudFRvRGlzcGF0Y2goKSkgeworICAgICAgICBtX3BhdXNl
ZEV2ZW50ID0gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnByb2dyZXNzRXZlbnQsIG1fbGVuZ3RoQ29tcHV0YWJsZSwgbV9sb2FkZWQsIG1fdG90YWwpOwor
ICAgICAgICBtX3RvdGFsID0gMDsKKyAgICAgICAgbV9sb2FkZWQgPSAwOworICAgIH0KKyAgICBz
dG9wKCk7Cit9CisKK3ZvaWQgWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGU6OnJl
c3VtZSgpCit7CisgICAgQVNTRVJUKCFtX2xvYWRlZCk7CisgICAgQVNTRVJUKCFtX3RvdGFsKTsK
KworICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7CisgICAgZGlzcGF0Y2hQYXVzZWRFdmVudCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL3htbC9YTUxI
dHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZS5oIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwLi5jYTQ1Mzg2Ci0tLSAvZGV2L251bGwKKysrIGIvV2ViQ29yZS94bWwvWE1MSHR0cFJl
cXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDEwLCBKdWxpZW4gQ2hhZmZyYWl4IDxqY2hhZmZyYWl4QHdlYmtpdC5vcmc+
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorICogbWV0OgorICoKKyAqICAg
ICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyCisgKiBpbiB0aGUg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisg
KiBkaXN0cmlidXRpb24uCisgKiAgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdXRob3Ig
bm9yIHRoZSBuYW1lcyBvZiB0aGUKKyAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgKiB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRP
UlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyAqIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgKiBPV05F
UiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwKKyAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisg
KiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lm
bmRlZiBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZV9oCisjZGVmaW5lIFhNTEh0
dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlX2gKKworI2luY2x1ZGUgIlRpbWVyLmgiCisj
aW5jbHVkZSAid3RmL1Bhc3NSZWZQdHIuaCIKKyNpbmNsdWRlICJ3dGYvVmVjdG9yLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRXZlbnQ7CitjbGFzcyBFdmVudFRhcmdldDsKKwor
ZW51bSBQcm9ncmVzc0V2ZW50QWN0aW9uIHsKKyAgICBEb05vdEZsdXNoUHJvZ3Jlc3NFdmVudCwK
KyAgICBGbHVzaFByb2dyZXNzRXZlbnQKK307CisKKy8vIFRoaXMgaW1wbGVtZW50cyB0aGUgWEhS
MiBwcm9ncmVzcyBldmVudCBkaXNwYXRjaGluZzogImRpc3BhdGNoIGEgcHJvZ3Jlc3MgZXZlbnQg
Y2FsbGVkIHByb2dyZXNzCisvLyBhYm91dCBldmVyeSA1MG1zIG9yIGZvciBldmVyeSBieXRlIHJl
Y2VpdmVkLCB3aGljaGV2ZXIgaXMgbGVhc3QgZnJlcXVlbnQiLgorY2xhc3MgWE1MSHR0cFJlcXVl
c3RQcm9ncmVzc0V2ZW50VGhyb3R0bGUgOiBwdWJsaWMgVGltZXJCYXNlIHsKK3B1YmxpYzoKKyAg
ICBYTUxIdHRwUmVxdWVzdFByb2dyZXNzRXZlbnRUaHJvdHRsZShFdmVudFRhcmdldCopOworICAg
IHZpcnR1YWwgflhNTEh0dHBSZXF1ZXN0UHJvZ3Jlc3NFdmVudFRocm90dGxlKCk7CisKKyAgICB2
b2lkIGRpc3BhdGNoUHJvZ3Jlc3NFdmVudChib29sIGxlbmd0aENvbXB1dGFibGUsIHVuc2lnbmVk
IGxvYWRlZCwgdW5zaWduZWQgdG90YWwpOworICAgIHZvaWQgZGlzcGF0Y2hFdmVudChQYXNzUmVm
UHRyPEV2ZW50PiwgUHJvZ3Jlc3NFdmVudEFjdGlvbiA9IERvTm90Rmx1c2hQcm9ncmVzc0V2ZW50
KTsKKworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgcmVzdW1lKCk7CisKKyAgICBib29s
IHN1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZGVkOyB9CisKK3ByaXZhdGU6Cisg
ICAgc3RhdGljIGNvbnN0IGRvdWJsZSBtaW5pbXVtUHJvZ3Jlc3NFdmVudERpc3BhdGNoaW5nSW50
ZXJ2YWxJblNlY29uZHMgPSAuMDU7IC8vIDUwIG1zIHBlciBzcGVjaWZpY2F0aW9uLgorCisgICAg
dmlydHVhbCB2b2lkIGZpcmVkKCk7CisgICAgdm9pZCBkaXNwYXRjaFBhdXNlZEV2ZW50KCk7Cisg
ICAgdm9pZCBmbHVzaFByb2dyZXNzRXZlbnQoKTsKKworICAgIGJvb2wgaGFzRXZlbnRUb0Rpc3Bh
dGNoKCkgY29uc3Q7CisKKyAgICAvLyBXZWFrIHBvaW50ZXIgdG8gb3VyIFhNTEh0dHBSZXF1ZXN0
IG9iamVjdCBhcyBpdCBpcyB0aGUgb25lIGhvbGRpbmcgdXMuCisgICAgRXZlbnRUYXJnZXQqIG1f
dGFyZ2V0OworCisgICAgYm9vbCBtX2xlbmd0aENvbXB1dGFibGU7CisgICAgdW5zaWduZWQgbV9s
b2FkZWQ7CisgICAgdW5zaWduZWQgbV90b3RhbDsKKworICAgIGJvb2wgbV9zdXNwZW5kZWQ7Cisg
ICAgUmVmUHRyPEV2ZW50PiBtX3BhdXNlZEV2ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gWE1MSHR0cFJlcXVlc3RQcm9ncmVzc0V2ZW50VGhyb3R0bGVfaAo=
</data>
<flag name="review"
          id="34048"
          type_id="1"
          status="+"
          setter="ap"
    />
    <flag name="commit-queue"
          id="34049"
          type_id="3"
          status="-"
          setter="jchaffraix"
    />
          </attachment>
      

    </bug>

</bugzilla>