<?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>23705</bug_id>
          
          <creation_ts>2009-02-03 02:48:54 -0800</creation_ts>
          <short_desc>Messages from workers can take over main thread event loop</short_desc>
          <delta_ts>2009-02-11 23:59:04 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebCore Misc.</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P1</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexey Proskuryakov">ap</reporter>
          <assigned_to name="Dmitry Titov">dimich</assigned_to>
          <cc>dimich</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>108105</commentid>
    <comment_count>0</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-03 02:48:54 -0800</bug_when>
    <thetext>Steps to reproduce:
1. Open fast/workers/worker-timeout.html
2. Wait a few seconds for the length of log to become large.
3. Try to use Safari UI (e.g. close the window).

Result: the UI is blocked.

This happens because messages are delivered faster than they can be served. We need to give the main event loop a chance to run - and we also need to ensure that queued events don&apos;t use up all free memory.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108126</commentid>
    <comment_count>1</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-03 09:32:13 -0800</bug_when>
    <thetext>Relevant WHATWG discussion: http://lists.whatwg.org/pipermail/whatwg-whatwg.org/2008-November/017327.html</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108570</commentid>
    <comment_count>2</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-05 20:16:14 -0800</bug_when>
    <thetext>I think there are 2 independent issues here:
1. UI freeze
2. Eventual OOM when message queue gets too large.

I think #1 is more urgent to address. When user can&apos;t even close window it&apos;s bad.
The problem is caused by 2 factors:
- we use [NSObject performSelectorOnMainThread] to schedule the callback on the main thread. This is internally implemented by creating a timer and posting it to the main thread&apos;s run loop. Unfortunately, the run loop picks the timers first and user input second, so in certain conditions user input is never processed.
- once we get to to the work item queue on the main thread, we process all the items and it can take very long time if there are a lot of them. The UI is frozen for that time as well.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108571</commentid>
    <comment_count>3</comment_count>
      <attachid>27376</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-05 20:18:26 -0800</bug_when>
    <thetext>Created attachment 27376
Proposed patch

This patch addresses the issue for Mac platform. I will verify Win as well later.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108609</commentid>
    <comment_count>4</comment_count>
      <attachid>27376</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-06 02:02:59 -0800</bug_when>
    <thetext>Comment on attachment 27376
Proposed patch

+// 0.1 sec delays in UI is approximate threashold when they become noticeable.

Typo: should be threshold (repeated several times).

+static Mutex&amp; creationMutex()
+{
+    DEFINE_STATIC_LOCAL(WTF::Mutex, staticMutex, ());
+    return staticMutex;
+}

I think that this has a race condition. Can you just use AtomicallyInitializedStatic in +[WTFMainThreadCaller mainThreadCaller]? Another option (which I like more) is to initialize WTFMainThreadCaller from WTF::initializeThreading.

+        // If we are running accumulated functions for too long so UI may become unresponsive, we need to
+        // yield so the user input can be processed. Otherwise user may not be able to even close the window.
+        // This code has effect only in case the scheduleDispatchFunctionsOnMainThread() is implemented in a way that
+        // allows input events to be processed before we are back here.

The timeout check happens before fetching the next item from the queue, so we may re-schedule even if the queue is already empty. But this doesn&apos;t seem to affect correctness.

+    // This method can be called from worker threads that do not have autorelease pool. 
+    NSAutoreleasePool*  pool = [[NSAutoreleasePool alloc] init]; 

Is there a reason not to use CFMachPort? Is the behavior we are relying upon documented for either? If CFMachPort is available in Windows CFNetwork, we could even have a common implementation for Mac and Windows.

I&apos;m going to say r- due to WTFMainThreadCaller initialization issues - but this looks really good!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108691</commentid>
    <comment_count>5</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-06 13:12:13 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; (From update of attachment 27376 [review])
&gt; +// 0.1 sec delays in UI is approximate threashold when they become noticeable.
&gt; 
&gt; Typo: should be threshold (repeated several times).

Fixed.

&gt; +static Mutex&amp; creationMutex()
&gt; +{
&gt; +    DEFINE_STATIC_LOCAL(WTF::Mutex, staticMutex, ());
&gt; +    return staticMutex;
&gt; +}
&gt; 
&gt; I think that this has a race condition. Can you just use
&gt; AtomicallyInitializedStatic in +[WTFMainThreadCaller mainThreadCaller]? Another
&gt; option (which I like more) is to initialize WTFMainThreadCaller from
&gt; WTF::initializeThreading.

Ooops, good catch! :-)
Turns out we already have initializemainThread() called from WTF::initializeThreading. So I split it inplatform-independent part and initializeMainThreadPlatform - especially since WIN implementation already goes this route with #ifdef PLATFORM(WIN). So now I don&apos;t really need a mutex in MainThreadMac!

&gt; The timeout check happens before fetching the next item from the queue, so we
&gt; may re-schedule even if the queue is already empty. But this doesn&apos;t seem to
&gt; affect correctness.

It seems that unless we reschedule under a lock, there is always a potential race condition here. I left it as is since it&apos;ll over-schedule at some cases which is harmless.

&gt; +    NSAutoreleasePool*  pool = [[NSAutoreleasePool alloc] init]; 
&gt; 
&gt; Is there a reason not to use CFMachPort? Is the behavior we are relying upon
&gt; documented for either? If CFMachPort is available in Windows CFNetwork, we
&gt; could even have a common implementation for Mac and Windows.

I could use CFMachPort. CF-Win seems to expose them... However, the WIN implementation is currently Win32-based and it&apos;s probably makes sense to keep it this way, for the reason of not splitting it into CF and WIN32 and considering the main message loop in some embedders will be Win32 (not sure CFMachPort will work right without CFRunLoop actuallu being used).
Please let me know what you think about this one.

Updated patch is coming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108692</commentid>
    <comment_count>6</comment_count>
      <attachid>27412</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-06 13:13:39 -0800</bug_when>
    <thetext>Created attachment 27412
Updated patch.

Addressed Alexey&apos;s review comments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108810</commentid>
    <comment_count>7</comment_count>
      <attachid>27412</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-07 03:20:55 -0800</bug_when>
    <thetext>Comment on attachment 27412
Updated patch.

I don&apos;t know how CFMachPort is implemented - it&apos;s possible that it doesn&apos;t work with native Windows message loop indeed. Getting rid of autorelease pools seems good performance-wise, but it&apos;s not worth doing without actually measuring the effect (checking/optimizing Worker messaging performance is something we should definitely do one day).

+    NSPortMessage* messageObj = [[NSPortMessage alloc] initWithSendPort:m_port receivePort:nil components:nil]; 
+    [messageObj sendBeforeDate:[NSDate date]]; 

Is NSPortMessage destroyed automagically, or does it leak?

+    NSAutoreleasePool*  pool = [[NSAutoreleasePool alloc] init]; 

In Objective-C code, we place the stars in a different way.

+// We use NSPort here instead of more obvious [NSObject performSelectorOnMainThread] because the latter is implemented
+// by creating and posting a timer to the main thread&apos;s CFRunLoop. The timers are always fetced first before any other
+// types of messages

I was already going to say r=me, but then I re-read this comment, and realized that the same problem can happen without workers:

---------------------
function test()
{
  setTimeout(test, 0);
  setTimeout(test, 0);
}
setTimeout(test, 0);
---------------------

Should we investigate that separately, or make sure that timers don&apos;t take over the event loop, and fix both cases at once?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108864</commentid>
    <comment_count>8</comment_count>
      <attachid>27458</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-07 22:25:09 -0800</bug_when>
    <thetext>Created attachment 27458
Updated patch, v3

Even better now (thanks for a thorough review!)

- of course the message object is leaking. Fixed.
- moved the &apos;*&apos; to the other side
- got rid of autorelease pool! If the only methods used are alloc-init-release, none is needed.

I thought a bit about investigating main thread timers... If possible, my proposal would be to consider it separately (create another bug?) The reasons are:
- timers (TimerBase objects) are used in WebCore for &apos;delayed work&apos; very widely. Allowing user input to slip in between them can break the world in many subtle ways. For example, if there was a codepath that changes the tree and calls Timer::startOneShot(0) to do layout, then if the user moves the mouse across the page we currently have a guarantee that hittest happens only on a valid layout. startOneShot(0) is used in many places and this change in assumptions may affect some of them.
- it may change behavior for some sites. For example, a page could schedule 2 timers with the close fire time and accidentally depend on the fact that user input will not be dispatched in between - such pages can be broken if we allow user input to go in between close timer firings.
- because of the above, the solution likely will be different for main thread - perhaps we&apos;ll need &apos;urgent&apos; and &apos;less urgent&apos; timers.

Let me know what you think! :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>108876</commentid>
    <comment_count>9</comment_count>
      <attachid>27458</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-08 00:54:27 -0800</bug_when>
    <thetext>Comment on attachment 27458
Updated patch, v3

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109030</commentid>
    <comment_count>10</comment_count>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-09 14:04:43 -0800</bug_when>
    <thetext>I think this is ready for landing. 

Separately, we&apos;ll need to see how Windows Safari behaves when we have a version of Windows Safari which works with ToT WebKit correctly. In version 3.2.1, the callOnMainThread() is not working - the MainThreadWin creates a window and uses PostMessage but the windowproc of that window is never called, indicating some problem with main thread&apos;s message loop that is in Safari itself. So addressing similar issue (or even confirming it) on Windows will need to wait.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109108</commentid>
    <comment_count>11</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-10 03:39:39 -0800</bug_when>
    <thetext>&gt; In version 3.2.1, the callOnMainThread() is not working

Do the tests in fast/workers not work for you in Windows nightly builds? They work for me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109239</commentid>
    <comment_count>12</comment_count>
      <attachid>27458</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-10 20:31:15 -0800</bug_when>
    <thetext>Comment on attachment 27458
Updated patch, v3

Removing r+ since I&apos;ve learned more about the problem and there is a better fix. Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109241</commentid>
    <comment_count>13</comment_count>
      <attachid>27550</attachid>
    <who name="Dmitry Titov">dimich</who>
    <bug_when>2009-02-10 21:18:01 -0800</bug_when>
    <thetext>Created attachment 27550
Proposed patch

I&apos;ve removed NSPort and NSPortMessage. After re-doing experiments looking at bug 23865, I&apos;ve realized the input events are dispatched in between timers. So the MainThreadMac.mm practically reverted.

The change that actually helps (and which remains here) is avoiding processing all the worker events accumulated in a FunctionQueue at once - since at some point it could take many seconds while run loop is not running. Instead measure the time and exit/reschedule if needed.

Also, I keep the initializeMainThreadPlatform to avoid platform ifdefs in MainThread.cpp. 
Also, resolved against current ToT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109263</commentid>
    <comment_count>14</comment_count>
      <attachid>27550</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-10 23:49:36 -0800</bug_when>
    <thetext>Comment on attachment 27550
Proposed patch

r=me

+static WTFMainThreadCaller* staticMainThreadCaller = nil;

We usually rely on the fact that static variables are initialized to zero automagically - but I don&apos;t see a problem with explicitly initializing them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>109438</commentid>
    <comment_count>15</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2009-02-11 23:59:04 -0800</bug_when>
    <thetext>Committed revision 40888.

</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27376</attachid>
            <date>2009-02-05 20:18:26 -0800</date>
            <delta_ts>2009-02-06 13:13:39 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>freeze.txt</filename>
            <type>text/plain</type>
            <size>8389</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzOGQzYjU0Li5iNzBhMGRlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzUg
QEAKKzIwMDktMDItMDUgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA1CisgICAgICAgIEZpeCB0aGUgVUkgZnJl
ZXplIGNhdXNlZCBieSBXb3JrZXIgZ2VuZXJhdGluZyBhIGZsb29kIG9mIG1lc3NhZ2VzLgorCisg
ICAgICAgIFRoaXMgZml4ZXMgdGhlIGJ1ZyBmb3IgTWFjIHBsYXRmb3JtLiBUaGUgZml4IGlzIHR3
b2ZvbGQ6CisgICAgICAgIDEuIE1lYXN1cmUgdGltZSB3ZSBzcGVuZCBpbiBleGVjdXRpbmcgcG9z
dGVkIHdvcmsgaXRlbXMgYW5kIGV4aXQgYW5kIHJlc2NoZWR1bGUgYWZ0ZXIgYSB0aHJlYXNob2xk
LgorICAgICAgICAyLiBVc2Ugc2NoZWR1bGluZyBtZWNoYW5pc20gdGhhdCBkb2VzIG5vdCBwcmV2
ZW50IHVzZXIgaW5wdXQgZXZlbnRzIGZyb20gYmVpbmcgZGlzcGF0Y2hlZCBieSBydW4gbG9vcC4K
KworICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmNwcDoKKyAgICAgICAgKFdURjo6ZGlzcGF0Y2hG
dW5jdGlvbnNGcm9tTWFpblRocmVhZCk6CisgICAgICAgIEluc3RlYWQgb2YgZGlzcGF0Y2hpbmcg
YWxsIHdvcmsgaXRlbXMgaW4gdGhlIHF1ZXVlLCBkaXNwYXRjaCB0aGVtIG9uZSBieSBvbmUKKyAg
ICAgICAgYW5kIG1lYXN1cmUgZWxhcHNlZCB0aW1lLiBBZnRlciBhIHRocmVhc2hvbGQsIHJlc2No
ZWR1bGUgYW5kIHF1aXQuCisKKyAgICAgICAgKFdURjo6Y2FsbE9uTWFpblRocmVhZCk6CisgICAg
ICAgIChXVEY6OmNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KToKKyAgICAgICAgT25seSBzY2hlZHVs
ZSBkaXNwYXRjaCBpZiB0aGUgcXVldWUgd2FzIGVtcHR5IC0gdG8gYXZvaWQgbWFueSBwb3N0ZWQg
bWVzc2FnZXMgaW4gdGhlIHJ1biBsb29wIHF1ZXVlLgorCisgICAgICAgICogd3RmL21hYy9NYWlu
VGhyZWFkTWFjLm1tOgorICAgICAgICBUaGUgV1RGTWFpblRocmVhZENhbGxlciBjbGFzcyBnZXRz
IG5ldyBpbXBsZW1lbnRhdGlvbiAtIGl0IHVzZXMgTlNQb3J0TWVzc2FnZQorICAgICAgICBpbnN0
ZWFkIG9mIHByZXZpb3VzICdwZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQnIHRvIGF2b2lkIGN1
dHRpbmcgb2ZmIGlucHV0IGV2ZW50cy4KKyAgICAgICAgVGhlcmUgaXMgYSBsb25nIGNvbW1lbnQg
aW4gdGhlIGZpbGUgZXhwbGFpbmluZyB0aGUgbW90aXZhdGlvbiBiZWhpbmQgdGhlIGNoYW5nZS4K
KworICAgICAgICAoY3JlYXRpb25NdXRleCk6CisgICAgICAgICgrW1dURk1haW5UaHJlYWRDYWxs
ZXIgbWFpblRocmVhZENhbGxlcl0pOgorICAgICAgICAoLVtXVEZNYWluVGhyZWFkQ2FsbGVyIGlu
aXRdKToKKyAgICAgICAgKC1bV1RGTWFpblRocmVhZENhbGxlciBwb3N0TWVzc2FnZV0pOgorICAg
ICAgICAoLVtXVEZNYWluVGhyZWFkQ2FsbGVyIGhhbmRsZVBvcnRNZXNzYWdlOl0pOgorICAgICAg
ICAoV1RGOjpzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKToKKwogMjAwOS0w
Mi0wNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAg
ICAgUmV2aWV3ZWQgYnkgT2xpdmVyICd0aGUgbnVuJyBIdW50LgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwIGIvSmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJl
YWQuY3BwCmluZGV4IGM3YTZjYWEuLjAwYmIxYWUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L3d0Zi9NYWluVGhyZWFkLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5j
cHAKQEAgLTI5LDkgKzI5LDEwIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiTWFp
blRocmVhZC5oIgogCisjaW5jbHVkZSAiQ3VycmVudFRpbWUuaCIKKyNpbmNsdWRlICJEZXF1ZS5o
IgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2luY2x1ZGUgIlRocmVhZGluZy5oIgotI2lu
Y2x1ZGUgIlZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV1RGIHsKIApAQCAtNDgsNyArNDksNyBAQCBz
dHJ1Y3QgRnVuY3Rpb25XaXRoQ29udGV4dCB7CiAgICAgfQogfTsKIAotdHlwZWRlZiBWZWN0b3I8
RnVuY3Rpb25XaXRoQ29udGV4dD4gRnVuY3Rpb25RdWV1ZTsKK3R5cGVkZWYgRGVxdWU8RnVuY3Rp
b25XaXRoQ29udGV4dD4gRnVuY3Rpb25RdWV1ZTsKIAogc3RhdGljIGJvb2wgY2FsbGJhY2tzUGF1
c2VkOyAvLyBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBvbmx5IGFjY2Vzc2VkIGZyb20gbWFpbiB0
aHJlYWQuCiAKQEAgLTcxLDYgKzcyLDkgQEAgdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpCiB9
CiAjZW5kaWYKIAorLy8gMC4xIHNlYyBkZWxheXMgaW4gVUkgaXMgYXBwcm94aW1hdGUgdGhyZWFz
aG9sZCB3aGVuIHRoZXkgYmVjb21lIG5vdGljZWFibGUuCitzdGF0aWMgY29uc3QgZG91YmxlIG1h
eFJ1bkxvb3BTdXNwZW5zaW9uVGltZSA9IDAuMTsKKwogdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zy
b21NYWluVGhyZWFkKCkKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNzgsMzAg
KzgyLDQ0IEBAIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpCiAgICAgaWYg
KGNhbGxiYWNrc1BhdXNlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgRnVuY3Rpb25RdWV1ZSBx
dWV1ZUNvcHk7Ci0gICAgewotICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobWFpblRocmVhZEZ1
bmN0aW9uUXVldWVNdXRleCgpKTsKLSAgICAgICAgcXVldWVDb3B5LnN3YXAoZnVuY3Rpb25RdWV1
ZSgpKTsKLSAgICB9CisgICAgZG91YmxlIHN0YXJ0VGltZSA9IGN1cnJlbnRUaW1lKCk7CisKKyAg
ICBGdW5jdGlvbldpdGhDb250ZXh0IGludm9jYXRpb247CisgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgeworICAgICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1haW5UaHJlYWRGdW5jdGlv
blF1ZXVlTXV0ZXgoKSk7CisgICAgICAgICAgICBpZiAoIWZ1bmN0aW9uUXVldWUoKS5zaXplKCkp
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpbnZvY2F0aW9uID0gZnVuY3Rp
b25RdWV1ZSgpLmZpcnN0KCk7CisgICAgICAgICAgICBmdW5jdGlvblF1ZXVlKCkucmVtb3ZlRmly
c3QoKTsKKyAgICAgICAgfQogCi0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHF1ZXVlQ29w
eS5zaXplKCk7ICsraSkgewotICAgICAgICBGdW5jdGlvbldpdGhDb250ZXh0JiBpbnZvY2F0aW9u
ID0gcXVldWVDb3B5W2ldOwogICAgICAgICBpbnZvY2F0aW9uLmZ1bmN0aW9uKGludm9jYXRpb24u
Y29udGV4dCk7CiAgICAgICAgIGlmIChpbnZvY2F0aW9uLnN5bmNGbGFnKQogICAgICAgICAgICAg
aW52b2NhdGlvbi5zeW5jRmxhZy0+c2lnbmFsKCk7CisgICAgICAgIAorICAgICAgICAvLyBJZiB3
ZSBhcmUgcnVubmluZyBhY2N1bXVsYXRlZCBmdW5jdGlvbnMgZm9yIHRvbyBsb25nIHNvIFVJIG1h
eSBiZWNvbWUgdW5yZXNwb25zaXZlLCB3ZSBuZWVkIHRvCisgICAgICAgIC8vIHlpZWxkIHNvIHRo
ZSB1c2VyIGlucHV0IGNhbiBiZSBwcm9jZXNzZWQuIE90aGVyd2lzZSB1c2VyIG1heSBub3QgYmUg
YWJsZSB0byBldmVuIGNsb3NlIHRoZSB3aW5kb3cuCisgICAgICAgIC8vIFRoaXMgY29kZSBoYXMg
ZWZmZWN0IG9ubHkgaW4gY2FzZSB0aGUgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRo
cmVhZCgpIGlzIGltcGxlbWVudGVkIGluIGEgd2F5IHRoYXQKKyAgICAgICAgLy8gYWxsb3dzIGlu
cHV0IGV2ZW50cyB0byBiZSBwcm9jZXNzZWQgYmVmb3JlIHdlIGFyZSBiYWNrIGhlcmUuCisgICAg
ICAgIGlmIChjdXJyZW50VGltZSgpIC0gc3RhcnRUaW1lID4gbWF4UnVuTG9vcFN1c3BlbnNpb25U
aW1lKSB7CisgICAgICAgICAgICBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFk
KCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQogICAgIH0KIH0KIAogdm9pZCBjYWxs
T25NYWluVGhyZWFkKE1haW5UaHJlYWRGdW5jdGlvbiogZnVuY3Rpb24sIHZvaWQqIGNvbnRleHQp
CiB7CiAgICAgQVNTRVJUKGZ1bmN0aW9uKTsKLQorICAgIGJvb2wgbmVlZFRvU2NoZWR1bGUgPSBm
YWxzZTsKICAgICB7CiAgICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtYWluVGhyZWFkRnVuY3Rp
b25RdWV1ZU11dGV4KCkpOworICAgICAgICBuZWVkVG9TY2hlZHVsZSA9IGZ1bmN0aW9uUXVldWUo
KS5zaXplKCkgPT0gMDsKICAgICAgICAgZnVuY3Rpb25RdWV1ZSgpLmFwcGVuZChGdW5jdGlvbldp
dGhDb250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0KSk7CiAgICAgfQotCi0gICAgc2NoZWR1bGVEaXNw
YXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpOworICAgIGlmIChuZWVkVG9TY2hlZHVsZSkKKyAg
ICAgICAgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpOwogfQogCiB2b2lk
IGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KE1haW5UaHJlYWRGdW5jdGlvbiogZnVuY3Rpb24sIHZv
aWQqIGNvbnRleHQpCkBAIC0xMTUsMTQgKzEzMywxNiBAQCB2b2lkIGNhbGxPbk1haW5UaHJlYWRB
bmRXYWl0KE1haW5UaHJlYWRGdW5jdGlvbiogZnVuY3Rpb24sIHZvaWQqIGNvbnRleHQpCiAKICAg
ICBUaHJlYWRDb25kaXRpb24gc3luY0ZsYWc7CiAgICAgTXV0ZXggY29uZGl0aW9uTXV0ZXg7Ci0K
KyAgICBib29sIG5lZWRUb1NjaGVkdWxlID0gZmFsc2U7CiAgICAgewogICAgICAgICBNdXRleExv
Y2tlciBsb2NrZXIobWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpKTsKKyAgICAgICAgbmVl
ZFRvU2NoZWR1bGUgPSBmdW5jdGlvblF1ZXVlKCkuc2l6ZSgpID09IDA7CiAgICAgICAgIGZ1bmN0
aW9uUXVldWUoKS5hcHBlbmQoRnVuY3Rpb25XaXRoQ29udGV4dChmdW5jdGlvbiwgY29udGV4dCwg
JnN5bmNGbGFnKSk7CiAgICAgICAgIGNvbmRpdGlvbk11dGV4LmxvY2soKTsKICAgICB9CiAKLSAg
ICBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7CisgICAgaWYgKG5lZWRU
b1NjaGVkdWxlKQorICAgICAgICBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFk
KCk7CiAgICAgc3luY0ZsYWcud2FpdChjb25kaXRpb25NdXRleCk7CiB9CiAKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbSBiL0phdmFTY3JpcHRDb3Jl
L3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQppbmRleCBiMDRlZjBlLi4zZGY5ZWYwIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvbWFjL01haW5UaHJlYWRNYWMubW0KKysrIGIvSmF2YVNj
cmlwdENvcmUvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tCkBAIC0yOSwyOSArMjksODEgQEAKICNp
bXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTWFpblRocmVhZC5oIgogCisjaW1wb3J0IDxGb3Vu
ZGF0aW9uL05TQXV0b3JlbGVhc2VQb29sLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL05TUG9ydC5o
PgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1BvcnRNZXNzYWdlLmg+CisjaW1wb3J0IDxGb3VuZGF0
aW9uL05TUnVuTG9vcC5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RocmVhZC5oPgorI2ltcG9y
dCA8Rm91bmRhdGlvbi9OU1RpbWVyLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFzLmg+Cisj
aW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisjaW1wb3J0IDx3dGYvVW51c2VkUGFyYW0uaD4KKwor
Ly8gV1RGTWFpblRocmVhZENhbGxlciBpcyB1c2VkIHRvICdwb3N0JyBhbiBpdGVtIG9mIHdvcmsg
dG8gdGhlIG1haW4gdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbi4KKy8vIFdlIHVzZSBOU1BvcnQg
aGVyZSBpbnN0ZWFkIG9mIG1vcmUgb2J2aW91cyBbTlNPYmplY3QgcGVyZm9ybVNlbGVjdG9yT25N
YWluVGhyZWFkXSBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMgaW1wbGVtZW50ZWQKKy8vIGJ5IGNyZWF0
aW5nIGFuZCBwb3N0aW5nIGEgdGltZXIgdG8gdGhlIG1haW4gdGhyZWFkJ3MgQ0ZSdW5Mb29wLiBU
aGUgdGltZXJzIGFyZSBhbHdheXMgZmV0Y2VkIGZpcnN0IGJlZm9yZSBhbnkgb3RoZXIKKy8vIHR5
cGVzIG9mIG1lc3NhZ2VzLCBzbyBpZiBzb21lIHdvcmtlciB0aHJlYWQgZ2VuZXJhdGVzIHdvcmsg
aXRlbXMgZmFzdGVyIHRoZW4gbWFpbiBsb29wIGNhbiBwcm9jZXNzLCB0aGUgdXNlciBpbnB1dAor
Ly8gZ2V0cyBlZmZlY3RpdmVseSBibG9ja2VkIGFuZCBhcHBsaWNhdGlvbiBoYW5ncywgaXQncyBu
b3QgZXZlbiBwb3NzaWJsZSB0byBjbG9zZSB0aGUgd2luZG93LgorLy8gTlNQb3J0TWVzc2FnZSBn
ZXRzIGRlbGl2ZXJlZCBvbiB0aGUgc2FtZSAncHJpb3JpdHknIGFzIHVzZXIgaW5wdXQgZXZlbnRz
LCBzbyB0aGUgVUkgaXMgc3RpbGwgcmVzcG9uc2l2ZSBldmVuIHVuZGVyCisvLyBhIGZsb29kIG9m
IHNjaGVkdWxlIHJlcXVlc3RzLgogCiBAaW50ZXJmYWNlIFdURk1haW5UaHJlYWRDYWxsZXIgOiBO
U09iamVjdCB7CisgICAgTlNQb3J0KiBtX3BvcnQ7CiB9Ci0tICh2b2lkKWNhbGw7CisrIChXVEZN
YWluVGhyZWFkQ2FsbGVyKiltYWluVGhyZWFkQ2FsbGVyOworLSAoaWQpaW5pdDsKKy0gKHZvaWQp
cG9zdE1lc3NhZ2U7CistICh2b2lkKWhhbmRsZVBvcnRNZXNzYWdlOihOU1BvcnRNZXNzYWdlICop
cG9ydE1lc3NhZ2U7CiBAZW5kCiAKK3N0YXRpYyBXVEZNYWluVGhyZWFkQ2FsbGVyKiBzdGF0aWNN
YWluVGhyZWFkQ2FsbGVyID0gbmlsOworCitzdGF0aWMgTXV0ZXgmIGNyZWF0aW9uTXV0ZXgoKQor
eworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV1RGOjpNdXRleCwgc3RhdGljTXV0ZXgsICgpKTsK
KyAgICByZXR1cm4gc3RhdGljTXV0ZXg7Cit9CisKIEBpbXBsZW1lbnRhdGlvbiBXVEZNYWluVGhy
ZWFkQ2FsbGVyCiAKLS0gKHZvaWQpY2FsbAorKyAoV1RGTWFpblRocmVhZENhbGxlciopbWFpblRo
cmVhZENhbGxlcgogewotICAgIFdURjo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgp
OworICAgIE11dGV4TG9ja2VyIGxvY2tlcihjcmVhdGlvbk11dGV4KCkpOworICAgIGlmICghc3Rh
dGljTWFpblRocmVhZENhbGxlcikKKyAgICAgICAgc3RhdGljTWFpblRocmVhZENhbGxlciA9IFtb
V1RGTWFpblRocmVhZENhbGxlciBhbGxvY10gaW5pdF07CisgICAgcmV0dXJuIHN0YXRpY01haW5U
aHJlYWRDYWxsZXI7CiB9CiAKKy0gKGlkKWluaXQKK3sKKyAgICBtX3BvcnQgPSBbTlNNYWNoUG9y
dCBwb3J0XTsKKyAgICBbbV9wb3J0IHNldERlbGVnYXRlOnNlbGZdOworICAgIFtbTlNSdW5Mb29w
IG1haW5SdW5Mb29wXSBhZGRQb3J0Om1fcG9ydCBmb3JNb2RlOk5TRGVmYXVsdFJ1bkxvb3BNb2Rl
XTsgCisgICAgcmV0dXJuIHNlbGY7Cit9CisKKy0gKHZvaWQpcG9zdE1lc3NhZ2UKK3sKKyAgICBO
U1BvcnRNZXNzYWdlKiBtZXNzYWdlT2JqID0gW1tOU1BvcnRNZXNzYWdlIGFsbG9jXSBpbml0V2l0
aFNlbmRQb3J0Om1fcG9ydCByZWNlaXZlUG9ydDpuaWwgY29tcG9uZW50czpuaWxdOyAKKyAgICBb
bWVzc2FnZU9iaiBzZW5kQmVmb3JlRGF0ZTpbTlNEYXRlIGRhdGVdXTsgCit9CisKKy0gKHZvaWQp
aGFuZGxlUG9ydE1lc3NhZ2U6KE5TUG9ydE1lc3NhZ2UgKilwb3J0TWVzc2FnZQoreworICAgIFVO
VVNFRF9QQVJBTShwb3J0TWVzc2FnZSk7CisgICAgV1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21N
YWluVGhyZWFkKCk7Cit9IAorCiBAZW5kIC8vIGltcGxlbWVudGF0aW9uIFdURk1haW5UaHJlYWRD
YWxsZXIKIAogbmFtZXNwYWNlIFdURiB7CiAKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9u
c09uTWFpblRocmVhZCgpCiB7Ci0gICAgV1RGTWFpblRocmVhZENhbGxlciAqY2FsbGVyID0gW1tX
VEZNYWluVGhyZWFkQ2FsbGVyIGFsbG9jXSBpbml0XTsKLSAgICBbY2FsbGVyIHBlcmZvcm1TZWxl
Y3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoY2FsbCkgd2l0aE9iamVjdDpuaWwgd2FpdFVudGls
RG9uZTpOT107Ci0gICAgW2NhbGxlciByZWxlYXNlXTsKKyAgICAvLyBUaGlzIG1ldGhvZCBjYW4g
YmUgY2FsbGVkIGZyb20gd29ya2VyIHRocmVhZHMgdGhhdCBkbyBub3QgaGF2ZSBhdXRvcmVsZWFz
ZSBwb29sLiAKKyAgICBOU0F1dG9yZWxlYXNlUG9vbCogIHBvb2wgPSBbW05TQXV0b3JlbGVhc2VQ
b29sIGFsbG9jXSBpbml0XTsgCisgICAgW1tXVEZNYWluVGhyZWFkQ2FsbGVyIG1haW5UaHJlYWRD
YWxsZXJdIHBvc3RNZXNzYWdlXTsKKyAgICBbcG9vbCByZWxlYXNlXTsKIH0KIAogfSAvLyBuYW1l
c3BhY2UgV1RGCg==
</data>
<flag name="review"
          id="13225"
          type_id="1"
          status="-"
          setter="ap"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27412</attachid>
            <date>2009-02-06 13:13:39 -0800</date>
            <delta_ts>2009-02-07 22:25:09 -0800</delta_ts>
            <desc>Updated patch.</desc>
            <filename>freeze_v2.txt</filename>
            <type>text/plain</type>
            <size>11434</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzOGQzYjU0Li4zYzliNzc0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMDktMDItMDYgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA1CisgICAgICAgIEZpeCB0aGUgVUkgZnJl
ZXplIGNhdXNlZCBieSBXb3JrZXIgZ2VuZXJhdGluZyBhIGZsb29kIG9mIG1lc3NhZ2VzLgorCisg
ICAgICAgIFRoaXMgZml4ZXMgdGhlIGJ1ZyBmb3IgTWFjIHBsYXRmb3JtLiBUaGUgZml4IGlzIHR3
b2ZvbGQ6CisgICAgICAgIDEuIE1lYXN1cmUgdGltZSB3ZSBzcGVuZCBpbiBleGVjdXRpbmcgcG9z
dGVkIHdvcmsgaXRlbXMgYW5kIGV4aXQgYW5kIHJlc2NoZWR1bGUgYWZ0ZXIgYSB0aHJlc2hvbGQu
CisgICAgICAgIDIuIFVzZSBzY2hlZHVsaW5nIG1lY2hhbmlzbSB0aGF0IGRvZXMgbm90IHByZXZl
bnQgdXNlciBpbnB1dCBldmVudHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkIGJ5IHJ1biBsb29wLgor
CisgICAgICAgICogd3RmL01haW5UaHJlYWQuaDoKKyAgICAgICAgQWRkZWQgaW5pdGlhbGl6ZU1h
aW5UaHJlYWRQbGF0Zm9ybSgpIHRvIGluaXRpYWxpemUgbG93LWxldmVsIG1lY2hhbmlzbSBmb3Ig
cG9zdGluZworICAgICAgICB3b3JrIGl0ZW1zIGZyb20gdGhyZWFkIHRvIHRocmVhZC4gVGhpcyBy
ZW1vdmVzICNpZmRlZighV0lOKSBmcm9tIHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUKKyAgICAg
ICAgYW5kIGFsc28gbmVlZGVkIHRvIGluaXRpYWxpemUgYSBzdGF0aWMgbWFpblRocmVhZENhbGxl
ciBmb3IgaW4gTWFpblRocmVhZE1hYy5tbS4KKworICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmNw
cDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpk
aXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKToKKyAgICAgICAgSW5zdGVhZCBvZiBkaXNw
YXRjaGluZyBhbGwgd29yayBpdGVtcyBpbiB0aGUgcXVldWUsIGRpc3BhdGNoIHRoZW0gb25lIGJ5
IG9uZQorICAgICAgICBhbmQgbWVhc3VyZSBlbGFwc2VkIHRpbWUuIEFmdGVyIGEgdGhyZXNob2xk
LCByZXNjaGVkdWxlIGFuZCBxdWl0LgorCisgICAgICAgIChXVEY6OmNhbGxPbk1haW5UaHJlYWQp
OgorICAgICAgICAoV1RGOjpjYWxsT25NYWluVGhyZWFkQW5kV2FpdCk6CisgICAgICAgIE9ubHkg
c2NoZWR1bGUgZGlzcGF0Y2ggaWYgdGhlIHF1ZXVlIHdhcyBlbXB0eSAtIHRvIGF2b2lkIG1hbnkg
cG9zdGVkIG1lc3NhZ2VzIGluIHRoZSBydW4gbG9vcCBxdWV1ZS4KKworICAgICAgICAqIHd0Zi9t
YWMvTWFpblRocmVhZE1hYy5tbToKKyAgICAgICAgVGhlIFdURk1haW5UaHJlYWRDYWxsZXIgY2xh
c3MgZ2V0cyBuZXcgaW1wbGVtZW50YXRpb24gLSBpdCB1c2VzIE5TUG9ydE1lc3NhZ2UKKyAgICAg
ICAgaW5zdGVhZCBvZiBwcmV2aW91cyAncGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkJyB0byBh
dm9pZCBjdXR0aW5nIG9mZiBpbnB1dCBldmVudHMuCisgICAgICAgIFRoZXJlIGlzIGEgbG9uZyBj
b21tZW50IGluIHRoZSBmaWxlIGV4cGxhaW5pbmcgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBj
aGFuZ2UuCisKKyAgICAgICAgKC1bV1RGTWFpblRocmVhZENhbGxlciBpbml0XSk6CisgICAgICAg
ICgtW1dURk1haW5UaHJlYWRDYWxsZXIgcG9zdE1lc3NhZ2VdKToKKyAgICAgICAgKC1bV1RGTWFp
blRocmVhZENhbGxlciBoYW5kbGVQb3J0TWVzc2FnZTpdKToKKyAgICAgICAgKFdURjo6aW5pdGlh
bGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSk6CisgICAgICAgIChXVEY6OnNjaGVkdWxlRGlzcGF0Y2hG
dW5jdGlvbnNPbk1haW5UaHJlYWQpOgorCisgICAgICAgICogd3RmL2d0ay9NYWluVGhyZWFkR3Rr
LmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSk6CisgICAg
ICAgICogd3RmL3F0L01haW5UaHJlYWRRdC5jcHA6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVN
YWluVGhyZWFkUGxhdGZvcm0pOgorICAgICAgICAqIHd0Zi93aW4vTWFpblRocmVhZFdpbi5jcHA6
CisgICAgICAgIChXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0pOgorICAgICAgICAq
IHd0Zi93eC9NYWluVGhyZWFkV3guY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFpblRo
cmVhZFBsYXRmb3JtKToKKwogMjAwOS0wMi0wNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNs
b3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyICd0aGUgbnVuJyBI
dW50LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwIGIvSmF2
YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwCmluZGV4IGM3YTZjYWEuLjhmY2I2YjUgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS93dGYvTWFpblRocmVhZC5jcHAKQEAgLTI5LDkgKzI5LDEwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogCisjaW5jbHVkZSAiQ3VycmVudFRp
bWUuaCIKKyNpbmNsdWRlICJEZXF1ZS5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2lu
Y2x1ZGUgIlRocmVhZGluZy5oIgotI2luY2x1ZGUgIlZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV1RG
IHsKIApAQCAtNDgsNyArNDksNyBAQCBzdHJ1Y3QgRnVuY3Rpb25XaXRoQ29udGV4dCB7CiAgICAg
fQogfTsKIAotdHlwZWRlZiBWZWN0b3I8RnVuY3Rpb25XaXRoQ29udGV4dD4gRnVuY3Rpb25RdWV1
ZTsKK3R5cGVkZWYgRGVxdWU8RnVuY3Rpb25XaXRoQ29udGV4dD4gRnVuY3Rpb25RdWV1ZTsKIAog
c3RhdGljIGJvb2wgY2FsbGJhY2tzUGF1c2VkOyAvLyBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBv
bmx5IGFjY2Vzc2VkIGZyb20gbWFpbiB0aHJlYWQuCiAKQEAgLTY0LDEyICs2NSwxNCBAQCBzdGF0
aWMgRnVuY3Rpb25RdWV1ZSYgZnVuY3Rpb25RdWV1ZSgpCiAgICAgcmV0dXJuIHN0YXRpY0Z1bmN0
aW9uUXVldWU7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKQogdm9pZCBpbml0aWFsaXplTWFpblRo
cmVhZCgpCiB7CiAgICAgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpOworICAgIGluaXRp
YWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKTsKIH0KLSNlbmRpZgorCisvLyAwLjEgc2VjIGRlbGF5
cyBpbiBVSSBpcyBhcHByb3hpbWF0ZSB0aHJlc2hvbGQgd2hlbiB0aGV5IGJlY29tZSBub3RpY2Vh
YmxlLgorc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhSdW5Mb29wU3VzcGVuc2lvblRpbWUgPSAwLjE7
CiAKIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpCiB7CkBAIC03OCwzMCAr
ODEsNDQgQEAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCkKICAgICBpZiAo
Y2FsbGJhY2tzUGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBGdW5jdGlvblF1ZXVlIHF1
ZXVlQ29weTsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtYWluVGhyZWFkRnVu
Y3Rpb25RdWV1ZU11dGV4KCkpOwotICAgICAgICBxdWV1ZUNvcHkuc3dhcChmdW5jdGlvblF1ZXVl
KCkpOwotICAgIH0KKyAgICBkb3VibGUgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKworICAg
IEZ1bmN0aW9uV2l0aENvbnRleHQgaW52b2NhdGlvbjsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobWFpblRocmVhZEZ1bmN0aW9u
UXVldWVNdXRleCgpKTsKKyAgICAgICAgICAgIGlmICghZnVuY3Rpb25RdWV1ZSgpLnNpemUoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGludm9jYXRpb24gPSBmdW5jdGlv
blF1ZXVlKCkuZmlyc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uUXVldWUoKS5yZW1vdmVGaXJz
dCgpOworICAgICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcXVldWVDb3B5
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZ1bmN0aW9uV2l0aENvbnRleHQmIGludm9jYXRpb24g
PSBxdWV1ZUNvcHlbaV07CiAgICAgICAgIGludm9jYXRpb24uZnVuY3Rpb24oaW52b2NhdGlvbi5j
b250ZXh0KTsKICAgICAgICAgaWYgKGludm9jYXRpb24uc3luY0ZsYWcpCiAgICAgICAgICAgICBp
bnZvY2F0aW9uLnN5bmNGbGFnLT5zaWduYWwoKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHdl
IGFyZSBydW5uaW5nIGFjY3VtdWxhdGVkIGZ1bmN0aW9ucyBmb3IgdG9vIGxvbmcgc28gVUkgbWF5
IGJlY29tZSB1bnJlc3BvbnNpdmUsIHdlIG5lZWQgdG8KKyAgICAgICAgLy8geWllbGQgc28gdGhl
IHVzZXIgaW5wdXQgY2FuIGJlIHByb2Nlc3NlZC4gT3RoZXJ3aXNlIHVzZXIgbWF5IG5vdCBiZSBh
YmxlIHRvIGV2ZW4gY2xvc2UgdGhlIHdpbmRvdy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIGhhcyBl
ZmZlY3Qgb25seSBpbiBjYXNlIHRoZSBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhy
ZWFkKCkgaXMgaW1wbGVtZW50ZWQgaW4gYSB3YXkgdGhhdAorICAgICAgICAvLyBhbGxvd3MgaW5w
dXQgZXZlbnRzIHRvIGJlIHByb2Nlc3NlZCBiZWZvcmUgd2UgYXJlIGJhY2sgaGVyZS4KKyAgICAg
ICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWUgPiBtYXhSdW5Mb29wU3VzcGVuc2lvblRp
bWUpIHsKKyAgICAgICAgICAgIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCiB2b2lkIGNhbGxP
bk1haW5UaHJlYWQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlvbiwgdm9pZCogY29udGV4dCkK
IHsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwotCisgICAgYm9vbCBuZWVkVG9TY2hlZHVsZSA9IGZh
bHNlOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1haW5UaHJlYWRGdW5jdGlv
blF1ZXVlTXV0ZXgoKSk7CisgICAgICAgIG5lZWRUb1NjaGVkdWxlID0gZnVuY3Rpb25RdWV1ZSgp
LnNpemUoKSA9PSAwOwogICAgICAgICBmdW5jdGlvblF1ZXVlKCkuYXBwZW5kKEZ1bmN0aW9uV2l0
aENvbnRleHQoZnVuY3Rpb24sIGNvbnRleHQpKTsKICAgICB9Ci0KLSAgICBzY2hlZHVsZURpc3Bh
dGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7CisgICAgaWYgKG5lZWRUb1NjaGVkdWxlKQorICAg
ICAgICBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7CiB9CiAKIHZvaWQg
Y2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlvbiwgdm9p
ZCogY29udGV4dCkKQEAgLTExNSwxNCArMTMyLDE2IEBAIHZvaWQgY2FsbE9uTWFpblRocmVhZEFu
ZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlvbiwgdm9pZCogY29udGV4dCkKIAogICAg
IFRocmVhZENvbmRpdGlvbiBzeW5jRmxhZzsKICAgICBNdXRleCBjb25kaXRpb25NdXRleDsKLQor
ICAgIGJvb2wgbmVlZFRvU2NoZWR1bGUgPSBmYWxzZTsKICAgICB7CiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOworICAgICAgICBuZWVk
VG9TY2hlZHVsZSA9IGZ1bmN0aW9uUXVldWUoKS5zaXplKCkgPT0gMDsKICAgICAgICAgZnVuY3Rp
b25RdWV1ZSgpLmFwcGVuZChGdW5jdGlvbldpdGhDb250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0LCAm
c3luY0ZsYWcpKTsKICAgICAgICAgY29uZGl0aW9uTXV0ZXgubG9jaygpOwogICAgIH0KIAotICAg
IHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKTsKKyAgICBpZiAobmVlZFRv
U2NoZWR1bGUpCisgICAgICAgIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQo
KTsKICAgICBzeW5jRmxhZy53YWl0KGNvbmRpdGlvbk11dGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9NYWlu
VGhyZWFkLmgKaW5kZXggOTUzYjk4Ni4uOWYyOThkYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvd3RmL01haW5UaHJlYWQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5o
CkBAIC00NSw5ICs0NSwxMCBAQCB2b2lkIHNldE1haW5UaHJlYWRDYWxsYmFja3NQYXVzZWQoYm9v
bCBwYXVzZWQpOwogdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwogCiAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIGludGVybmFsIHRvIHRoZSBjYWxsT25NYWluVGhyZWFkIGltcGxlbWVudGF0aW9u
Lgotdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Cit2b2lkIGluaXRpYWxp
emVNYWluVGhyZWFkUGxhdGZvcm0oKTsKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09u
TWFpblRocmVhZCgpOwogTXV0ZXgmIG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgoKTsKK3Zv
aWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpOwogCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNw
cCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAKaW5kZXggYTZlMDYx
Zi4uODdlMTk4MCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9NYWluVGhyZWFk
R3RrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwCkBA
IC0zNCw2ICszNCwxMCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAordm9pZCBpbml0aWFsaXplTWFp
blRocmVhZFBsYXRmb3JtKCkKK3sKK30KKwogc3RhdGljIGdib29sZWFuIHRpbWVvdXRGaXJlZChn
cG9pbnRlcikKIHsKICAgICBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7CkBAIC00
NSw1ICs0OSw0IEBAIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgp
CiAgICAgZ190aW1lb3V0X2FkZCgwLCB0aW1lb3V0RmlyZWQsIDApOwogfQogCi0KIH0KZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbSBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQppbmRleCBiMDRlZjBlLi42NDA0MmU2IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvbWFjL01haW5UaHJlYWRNYWMubW0KKysrIGIv
SmF2YVNjcmlwdENvcmUvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tCkBAIC0yOSwyOSArMjksNzMg
QEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTWFpblRocmVhZC5oIgogCisjaW1wb3J0
IDxGb3VuZGF0aW9uL05TQXV0b3JlbGVhc2VQb29sLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL05T
UG9ydC5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1BvcnRNZXNzYWdlLmg+CisjaW1wb3J0IDxG
b3VuZGF0aW9uL05TUnVuTG9vcC5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RocmVhZC5oPgor
I2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RpbWVyLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisjaW1wb3J0IDx3dGYvVW51c2VkUGFyYW0u
aD4KKworLy8gV1RGTWFpblRocmVhZENhbGxlciBpcyB1c2VkIHRvICdwb3N0JyBhbiBpdGVtIG9m
IHdvcmsgdG8gdGhlIG1haW4gdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbi4KKy8vIFdlIHVzZSBO
U1BvcnQgaGVyZSBpbnN0ZWFkIG9mIG1vcmUgb2J2aW91cyBbTlNPYmplY3QgcGVyZm9ybVNlbGVj
dG9yT25NYWluVGhyZWFkXSBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMgaW1wbGVtZW50ZWQKKy8vIGJ5
IGNyZWF0aW5nIGFuZCBwb3N0aW5nIGEgdGltZXIgdG8gdGhlIG1haW4gdGhyZWFkJ3MgQ0ZSdW5M
b29wLiBUaGUgdGltZXJzIGFyZSBhbHdheXMgZmV0Y2VkIGZpcnN0IGJlZm9yZSBhbnkgb3RoZXIK
Ky8vIHR5cGVzIG9mIG1lc3NhZ2VzLCBzbyBpZiBzb21lIHdvcmtlciB0aHJlYWQgZ2VuZXJhdGVz
IHdvcmsgaXRlbXMgZmFzdGVyIHRoZW4gbWFpbiBsb29wIGNhbiBwcm9jZXNzLCB0aGUgdXNlciBp
bnB1dAorLy8gZ2V0cyBlZmZlY3RpdmVseSBibG9ja2VkIGFuZCBhcHBsaWNhdGlvbiBoYW5ncywg
aXQncyBub3QgZXZlbiBwb3NzaWJsZSB0byBjbG9zZSB0aGUgd2luZG93LgorLy8gTlNQb3J0TWVz
c2FnZSBnZXRzIGRlbGl2ZXJlZCBvbiB0aGUgc2FtZSAncHJpb3JpdHknIGFzIHVzZXIgaW5wdXQg
ZXZlbnRzLCBzbyB0aGUgVUkgaXMgc3RpbGwgcmVzcG9uc2l2ZSBldmVuIHVuZGVyCisvLyBhIGZs
b29kIG9mIHNjaGVkdWxlIHJlcXVlc3RzLgogCiBAaW50ZXJmYWNlIFdURk1haW5UaHJlYWRDYWxs
ZXIgOiBOU09iamVjdCB7CisgICAgTlNQb3J0KiBtX3BvcnQ7CiB9Ci0tICh2b2lkKWNhbGw7Cist
IChpZClpbml0OworLSAodm9pZClwb3N0TWVzc2FnZTsKKy0gKHZvaWQpaGFuZGxlUG9ydE1lc3Nh
Z2U6KE5TUG9ydE1lc3NhZ2UgKilwb3J0TWVzc2FnZTsKIEBlbmQKIAogQGltcGxlbWVudGF0aW9u
IFdURk1haW5UaHJlYWRDYWxsZXIKIAotLSAodm9pZCljYWxsCistIChpZClpbml0CiB7Ci0gICAg
V1RGOjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7CisgICAgbV9wb3J0ID0gW05T
TWFjaFBvcnQgcG9ydF07CisgICAgW21fcG9ydCBzZXREZWxlZ2F0ZTpzZWxmXTsKKyAgICBbW05T
UnVuTG9vcCBtYWluUnVuTG9vcF0gYWRkUG9ydDptX3BvcnQgZm9yTW9kZTpOU0RlZmF1bHRSdW5M
b29wTW9kZV07IAorICAgIHJldHVybiBzZWxmOworfQorCistICh2b2lkKXBvc3RNZXNzYWdlCit7
CisgICAgTlNQb3J0TWVzc2FnZSogbWVzc2FnZU9iaiA9IFtbTlNQb3J0TWVzc2FnZSBhbGxvY10g
aW5pdFdpdGhTZW5kUG9ydDptX3BvcnQgcmVjZWl2ZVBvcnQ6bmlsIGNvbXBvbmVudHM6bmlsXTsg
CisgICAgW21lc3NhZ2VPYmogc2VuZEJlZm9yZURhdGU6W05TRGF0ZSBkYXRlXV07IAogfQogCist
ICh2b2lkKWhhbmRsZVBvcnRNZXNzYWdlOihOU1BvcnRNZXNzYWdlICopcG9ydE1lc3NhZ2UKK3sK
KyAgICBVTlVTRURfUEFSQU0ocG9ydE1lc3NhZ2UpOworICAgIFdURjo6ZGlzcGF0Y2hGdW5jdGlv
bnNGcm9tTWFpblRocmVhZCgpOworfSAKKwogQGVuZCAvLyBpbXBsZW1lbnRhdGlvbiBXVEZNYWlu
VGhyZWFkQ2FsbGVyCiAKIG5hbWVzcGFjZSBXVEYgewogCitzdGF0aWMgV1RGTWFpblRocmVhZENh
bGxlciogc3RhdGljTWFpblRocmVhZENhbGxlciA9IG5pbDsKKwordm9pZCBpbml0aWFsaXplTWFp
blRocmVhZFBsYXRmb3JtKCkKK3sKKyAgICBBU1NFUlQoIXN0YXRpY01haW5UaHJlYWRDYWxsZXIp
OworICAgIHN0YXRpY01haW5UaHJlYWRDYWxsZXIgPSBbW1dURk1haW5UaHJlYWRDYWxsZXIgYWxs
b2NdIGluaXRdOworfQorCiB2b2lkIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJl
YWQoKQogewotICAgIFdURk1haW5UaHJlYWRDYWxsZXIgKmNhbGxlciA9IFtbV1RGTWFpblRocmVh
ZENhbGxlciBhbGxvY10gaW5pdF07Ci0gICAgW2NhbGxlciBwZXJmb3JtU2VsZWN0b3JPbk1haW5U
aHJlYWQ6QHNlbGVjdG9yKGNhbGwpIHdpdGhPYmplY3Q6bmlsIHdhaXRVbnRpbERvbmU6Tk9dOwot
ICAgIFtjYWxsZXIgcmVsZWFzZV07CisgICAgQVNTRVJUKHN0YXRpY01haW5UaHJlYWRDYWxsZXIp
OworICAgIC8vIFRoaXMgbWV0aG9kIGNhbiBiZSBjYWxsZWQgZnJvbSB3b3JrZXIgdGhyZWFkcyB0
aGF0IGRvIG5vdCBoYXZlIGF1dG9yZWxlYXNlIHBvb2wuIAorICAgIE5TQXV0b3JlbGVhc2VQb29s
KiAgcG9vbCA9IFtbTlNBdXRvcmVsZWFzZVBvb2wgYWxsb2NdIGluaXRdOyAKKyAgICBbc3RhdGlj
TWFpblRocmVhZENhbGxlciBwb3N0TWVzc2FnZV07CisgICAgW3Bvb2wgcmVsZWFzZV07CiB9CiAK
IH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3F0L01h
aW5UaHJlYWRRdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWFpblRocmVhZFF0LmNwcApp
bmRleCAxOTE0NjAwLi5iZWQ2ZTAwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvcXQv
TWFpblRocmVhZFF0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWFpblRocmVhZFF0
LmNwcApAQCAtNTgsNiArNTgsOSBAQCB2b2lkIE1haW5UaHJlYWRJbnZva2VyOjpkaXNwYXRjaCgp
CiAKIFFfR0xPQkFMX1NUQVRJQyhNYWluVGhyZWFkSW52b2tlciwgd2Via2l0X21haW5fdGhyZWFk
X2ludm9rZXIpCiAKK3ZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCit7Cit9CiAK
IHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCiB7CmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwIGIvSmF2YVNjcmlw
dENvcmUvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcAppbmRleCA1ZjAxNjNjLi5mYWUwNTIwIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCisrKyBi
L0phdmFTY3JpcHRDb3JlL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKQEAgLTUwLDEzICs1MCwx
MSBAQCBMUkVTVUxUIENBTExCQUNLIFRocmVhZGluZ1dpbmRvd1duZFByb2MoSFdORCBoV25kLCBV
SU5UIG1lc3NhZ2UsIFdQQVJBTSB3UGFyYW0sCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgaW5p
dGlhbGl6ZU1haW5UaHJlYWQoKQordm9pZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkK
IHsKICAgICBpZiAodGhyZWFkaW5nV2luZG93SGFuZGxlKQogICAgICAgICByZXR1cm47CiAKLSAg
ICBtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCk7Ci0KICAgICBXTkRDTEFTU0VYIHdjZXg7
CiAgICAgbWVtc2V0KCZ3Y2V4LCAwLCBzaXplb2YoV05EQ0xBU1NFWCkpOwogICAgIHdjZXguY2JT
aXplID0gc2l6ZW9mKFdORENMQVNTRVgpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3Rm
L3d4L01haW5UaHJlYWRXeC5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvd3gvTWFpblRocmVhZFd4
LmNwcAppbmRleCAzMTY2MzMxLi45OGQwMzZjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93
dGYvd3gvTWFpblRocmVhZFd4LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvd3gvTWFpblRo
cmVhZFd4LmNwcApAQCAtMzEsNiArMzEsMTAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK3ZvaWQg
aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCit7Cit9CisKIHZvaWQgc2NoZWR1bGVEaXNw
YXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCiB7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27458</attachid>
            <date>2009-02-07 22:25:09 -0800</date>
            <delta_ts>2009-02-10 20:31:15 -0800</delta_ts>
            <desc>Updated patch, v3</desc>
            <filename>freeze_v3.txt</filename>
            <type>text/plain</type>
            <size>11653</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAzOGQzYjU0Li4zYzliNzc0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDkg
QEAKKzIwMDktMDItMDYgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA1CisgICAgICAgIEZpeCB0aGUgVUkgZnJl
ZXplIGNhdXNlZCBieSBXb3JrZXIgZ2VuZXJhdGluZyBhIGZsb29kIG9mIG1lc3NhZ2VzLgorCisg
ICAgICAgIFRoaXMgZml4ZXMgdGhlIGJ1ZyBmb3IgTWFjIHBsYXRmb3JtLiBUaGUgZml4IGlzIHR3
b2ZvbGQ6CisgICAgICAgIDEuIE1lYXN1cmUgdGltZSB3ZSBzcGVuZCBpbiBleGVjdXRpbmcgcG9z
dGVkIHdvcmsgaXRlbXMgYW5kIGV4aXQgYW5kIHJlc2NoZWR1bGUgYWZ0ZXIgYSB0aHJlc2hvbGQu
CisgICAgICAgIDIuIFVzZSBzY2hlZHVsaW5nIG1lY2hhbmlzbSB0aGF0IGRvZXMgbm90IHByZXZl
bnQgdXNlciBpbnB1dCBldmVudHMgZnJvbSBiZWluZyBkaXNwYXRjaGVkIGJ5IHJ1biBsb29wLgor
CisgICAgICAgICogd3RmL01haW5UaHJlYWQuaDoKKyAgICAgICAgQWRkZWQgaW5pdGlhbGl6ZU1h
aW5UaHJlYWRQbGF0Zm9ybSgpIHRvIGluaXRpYWxpemUgbG93LWxldmVsIG1lY2hhbmlzbSBmb3Ig
cG9zdGluZworICAgICAgICB3b3JrIGl0ZW1zIGZyb20gdGhyZWFkIHRvIHRocmVhZC4gVGhpcyBy
ZW1vdmVzICNpZmRlZighV0lOKSBmcm9tIHBsYXRmb3JtLWluZGVwZW5kZW50IGNvZGUKKyAgICAg
ICAgYW5kIGFsc28gbmVlZGVkIHRvIGluaXRpYWxpemUgYSBzdGF0aWMgbWFpblRocmVhZENhbGxl
ciBmb3IgaW4gTWFpblRocmVhZE1hYy5tbS4KKworICAgICAgICAqIHd0Zi9NYWluVGhyZWFkLmNw
cDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWQpOgorICAgICAgICAoV1RGOjpk
aXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKToKKyAgICAgICAgSW5zdGVhZCBvZiBkaXNw
YXRjaGluZyBhbGwgd29yayBpdGVtcyBpbiB0aGUgcXVldWUsIGRpc3BhdGNoIHRoZW0gb25lIGJ5
IG9uZQorICAgICAgICBhbmQgbWVhc3VyZSBlbGFwc2VkIHRpbWUuIEFmdGVyIGEgdGhyZXNob2xk
LCByZXNjaGVkdWxlIGFuZCBxdWl0LgorCisgICAgICAgIChXVEY6OmNhbGxPbk1haW5UaHJlYWQp
OgorICAgICAgICAoV1RGOjpjYWxsT25NYWluVGhyZWFkQW5kV2FpdCk6CisgICAgICAgIE9ubHkg
c2NoZWR1bGUgZGlzcGF0Y2ggaWYgdGhlIHF1ZXVlIHdhcyBlbXB0eSAtIHRvIGF2b2lkIG1hbnkg
cG9zdGVkIG1lc3NhZ2VzIGluIHRoZSBydW4gbG9vcCBxdWV1ZS4KKworICAgICAgICAqIHd0Zi9t
YWMvTWFpblRocmVhZE1hYy5tbToKKyAgICAgICAgVGhlIFdURk1haW5UaHJlYWRDYWxsZXIgY2xh
c3MgZ2V0cyBuZXcgaW1wbGVtZW50YXRpb24gLSBpdCB1c2VzIE5TUG9ydE1lc3NhZ2UKKyAgICAg
ICAgaW5zdGVhZCBvZiBwcmV2aW91cyAncGVyZm9ybVNlbGVjdG9yT25NYWluVGhyZWFkJyB0byBh
dm9pZCBjdXR0aW5nIG9mZiBpbnB1dCBldmVudHMuCisgICAgICAgIFRoZXJlIGlzIGEgbG9uZyBj
b21tZW50IGluIHRoZSBmaWxlIGV4cGxhaW5pbmcgdGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBj
aGFuZ2UuCisKKyAgICAgICAgKC1bV1RGTWFpblRocmVhZENhbGxlciBpbml0XSk6CisgICAgICAg
ICgtW1dURk1haW5UaHJlYWRDYWxsZXIgcG9zdE1lc3NhZ2VdKToKKyAgICAgICAgKC1bV1RGTWFp
blRocmVhZENhbGxlciBoYW5kbGVQb3J0TWVzc2FnZTpdKToKKyAgICAgICAgKFdURjo6aW5pdGlh
bGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSk6CisgICAgICAgIChXVEY6OnNjaGVkdWxlRGlzcGF0Y2hG
dW5jdGlvbnNPbk1haW5UaHJlYWQpOgorCisgICAgICAgICogd3RmL2d0ay9NYWluVGhyZWFkR3Rr
LmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSk6CisgICAg
ICAgICogd3RmL3F0L01haW5UaHJlYWRRdC5jcHA6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVN
YWluVGhyZWFkUGxhdGZvcm0pOgorICAgICAgICAqIHd0Zi93aW4vTWFpblRocmVhZFdpbi5jcHA6
CisgICAgICAgIChXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0pOgorICAgICAgICAq
IHd0Zi93eC9NYWluVGhyZWFkV3guY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFpblRo
cmVhZFBsYXRmb3JtKToKKwogMjAwOS0wMi0wNCAgR2F2aW4gQmFycmFjbG91Z2ggIDxiYXJyYWNs
b3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgT2xpdmVyICd0aGUgbnVuJyBI
dW50LgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwIGIvSmF2
YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwCmluZGV4IGM3YTZjYWEuLjhmY2I2YjUgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS93dGYvTWFpblRocmVhZC5jcHAKQEAgLTI5LDkgKzI5LDEwIEBACiAjaW5jbHVkZSAi
Y29uZmlnLmgiCiAjaW5jbHVkZSAiTWFpblRocmVhZC5oIgogCisjaW5jbHVkZSAiQ3VycmVudFRp
bWUuaCIKKyNpbmNsdWRlICJEZXF1ZS5oIgogI2luY2x1ZGUgIlN0ZExpYkV4dHJhcy5oIgogI2lu
Y2x1ZGUgIlRocmVhZGluZy5oIgotI2luY2x1ZGUgIlZlY3Rvci5oIgogCiBuYW1lc3BhY2UgV1RG
IHsKIApAQCAtNDgsNyArNDksNyBAQCBzdHJ1Y3QgRnVuY3Rpb25XaXRoQ29udGV4dCB7CiAgICAg
fQogfTsKIAotdHlwZWRlZiBWZWN0b3I8RnVuY3Rpb25XaXRoQ29udGV4dD4gRnVuY3Rpb25RdWV1
ZTsKK3R5cGVkZWYgRGVxdWU8RnVuY3Rpb25XaXRoQ29udGV4dD4gRnVuY3Rpb25RdWV1ZTsKIAog
c3RhdGljIGJvb2wgY2FsbGJhY2tzUGF1c2VkOyAvLyBUaGlzIGdsb2JhbCB2YXJpYWJsZSBpcyBv
bmx5IGFjY2Vzc2VkIGZyb20gbWFpbiB0aHJlYWQuCiAKQEAgLTY0LDEyICs2NSwxNCBAQCBzdGF0
aWMgRnVuY3Rpb25RdWV1ZSYgZnVuY3Rpb25RdWV1ZSgpCiAgICAgcmV0dXJuIHN0YXRpY0Z1bmN0
aW9uUXVldWU7CiB9CiAKLSNpZiAhUExBVEZPUk0oV0lOKQogdm9pZCBpbml0aWFsaXplTWFpblRo
cmVhZCgpCiB7CiAgICAgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpOworICAgIGluaXRp
YWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKTsKIH0KLSNlbmRpZgorCisvLyAwLjEgc2VjIGRlbGF5
cyBpbiBVSSBpcyBhcHByb3hpbWF0ZSB0aHJlc2hvbGQgd2hlbiB0aGV5IGJlY29tZSBub3RpY2Vh
YmxlLgorc3RhdGljIGNvbnN0IGRvdWJsZSBtYXhSdW5Mb29wU3VzcGVuc2lvblRpbWUgPSAwLjE7
CiAKIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpCiB7CkBAIC03OCwzMCAr
ODEsNDQgQEAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCkKICAgICBpZiAo
Y2FsbGJhY2tzUGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBGdW5jdGlvblF1ZXVlIHF1
ZXVlQ29weTsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtYWluVGhyZWFkRnVu
Y3Rpb25RdWV1ZU11dGV4KCkpOwotICAgICAgICBxdWV1ZUNvcHkuc3dhcChmdW5jdGlvblF1ZXVl
KCkpOwotICAgIH0KKyAgICBkb3VibGUgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsKKworICAg
IEZ1bmN0aW9uV2l0aENvbnRleHQgaW52b2NhdGlvbjsKKyAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobWFpblRocmVhZEZ1bmN0aW9u
UXVldWVNdXRleCgpKTsKKyAgICAgICAgICAgIGlmICghZnVuY3Rpb25RdWV1ZSgpLnNpemUoKSkK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGludm9jYXRpb24gPSBmdW5jdGlv
blF1ZXVlKCkuZmlyc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uUXVldWUoKS5yZW1vdmVGaXJz
dCgpOworICAgICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcXVldWVDb3B5
LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZ1bmN0aW9uV2l0aENvbnRleHQmIGludm9jYXRpb24g
PSBxdWV1ZUNvcHlbaV07CiAgICAgICAgIGludm9jYXRpb24uZnVuY3Rpb24oaW52b2NhdGlvbi5j
b250ZXh0KTsKICAgICAgICAgaWYgKGludm9jYXRpb24uc3luY0ZsYWcpCiAgICAgICAgICAgICBp
bnZvY2F0aW9uLnN5bmNGbGFnLT5zaWduYWwoKTsKKyAgICAgICAgCisgICAgICAgIC8vIElmIHdl
IGFyZSBydW5uaW5nIGFjY3VtdWxhdGVkIGZ1bmN0aW9ucyBmb3IgdG9vIGxvbmcgc28gVUkgbWF5
IGJlY29tZSB1bnJlc3BvbnNpdmUsIHdlIG5lZWQgdG8KKyAgICAgICAgLy8geWllbGQgc28gdGhl
IHVzZXIgaW5wdXQgY2FuIGJlIHByb2Nlc3NlZC4gT3RoZXJ3aXNlIHVzZXIgbWF5IG5vdCBiZSBh
YmxlIHRvIGV2ZW4gY2xvc2UgdGhlIHdpbmRvdy4KKyAgICAgICAgLy8gVGhpcyBjb2RlIGhhcyBl
ZmZlY3Qgb25seSBpbiBjYXNlIHRoZSBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhy
ZWFkKCkgaXMgaW1wbGVtZW50ZWQgaW4gYSB3YXkgdGhhdAorICAgICAgICAvLyBhbGxvd3MgaW5w
dXQgZXZlbnRzIHRvIGJlIHByb2Nlc3NlZCBiZWZvcmUgd2UgYXJlIGJhY2sgaGVyZS4KKyAgICAg
ICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWUgPiBtYXhSdW5Mb29wU3VzcGVuc2lvblRp
bWUpIHsKKyAgICAgICAgICAgIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQo
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCiB2b2lkIGNhbGxP
bk1haW5UaHJlYWQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlvbiwgdm9pZCogY29udGV4dCkK
IHsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwotCisgICAgYm9vbCBuZWVkVG9TY2hlZHVsZSA9IGZh
bHNlOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1haW5UaHJlYWRGdW5jdGlv
blF1ZXVlTXV0ZXgoKSk7CisgICAgICAgIG5lZWRUb1NjaGVkdWxlID0gZnVuY3Rpb25RdWV1ZSgp
LnNpemUoKSA9PSAwOwogICAgICAgICBmdW5jdGlvblF1ZXVlKCkuYXBwZW5kKEZ1bmN0aW9uV2l0
aENvbnRleHQoZnVuY3Rpb24sIGNvbnRleHQpKTsKICAgICB9Ci0KLSAgICBzY2hlZHVsZURpc3Bh
dGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7CisgICAgaWYgKG5lZWRUb1NjaGVkdWxlKQorICAg
ICAgICBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7CiB9CiAKIHZvaWQg
Y2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlvbiwgdm9p
ZCogY29udGV4dCkKQEAgLTExNSwxNCArMTMyLDE2IEBAIHZvaWQgY2FsbE9uTWFpblRocmVhZEFu
ZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlvbiwgdm9pZCogY29udGV4dCkKIAogICAg
IFRocmVhZENvbmRpdGlvbiBzeW5jRmxhZzsKICAgICBNdXRleCBjb25kaXRpb25NdXRleDsKLQor
ICAgIGJvb2wgbmVlZFRvU2NoZWR1bGUgPSBmYWxzZTsKICAgICB7CiAgICAgICAgIE11dGV4TG9j
a2VyIGxvY2tlcihtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOworICAgICAgICBuZWVk
VG9TY2hlZHVsZSA9IGZ1bmN0aW9uUXVldWUoKS5zaXplKCkgPT0gMDsKICAgICAgICAgZnVuY3Rp
b25RdWV1ZSgpLmFwcGVuZChGdW5jdGlvbldpdGhDb250ZXh0KGZ1bmN0aW9uLCBjb250ZXh0LCAm
c3luY0ZsYWcpKTsKICAgICAgICAgY29uZGl0aW9uTXV0ZXgubG9jaygpOwogICAgIH0KIAotICAg
IHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKTsKKyAgICBpZiAobmVlZFRv
U2NoZWR1bGUpCisgICAgICAgIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQo
KTsKICAgICBzeW5jRmxhZy53YWl0KGNvbmRpdGlvbk11dGV4KTsKIH0KIApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9NYWlu
VGhyZWFkLmgKaW5kZXggOTUzYjk4Ni4uOWYyOThkYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvd3RmL01haW5UaHJlYWQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5o
CkBAIC00NSw5ICs0NSwxMCBAQCB2b2lkIHNldE1haW5UaHJlYWRDYWxsYmFja3NQYXVzZWQoYm9v
bCBwYXVzZWQpOwogdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwogCiAvLyBUaGVzZSBmdW5j
dGlvbnMgYXJlIGludGVybmFsIHRvIHRoZSBjYWxsT25NYWluVGhyZWFkIGltcGxlbWVudGF0aW9u
Lgotdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Cit2b2lkIGluaXRpYWxp
emVNYWluVGhyZWFkUGxhdGZvcm0oKTsKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09u
TWFpblRocmVhZCgpOwogTXV0ZXgmIG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgoKTsKK3Zv
aWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpOwogCiB9IC8vIG5hbWVzcGFjZSBX
VEYKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNw
cCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvTWFpblRocmVhZEd0ay5jcHAKaW5kZXggYTZlMDYx
Zi4uODdlMTk4MCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL2d0ay9NYWluVGhyZWFk
R3RrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwCkBA
IC0zNCw2ICszNCwxMCBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAordm9pZCBpbml0aWFsaXplTWFp
blRocmVhZFBsYXRmb3JtKCkKK3sKK30KKwogc3RhdGljIGdib29sZWFuIHRpbWVvdXRGaXJlZChn
cG9pbnRlcikKIHsKICAgICBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7CkBAIC00
NSw1ICs0OSw0IEBAIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgp
CiAgICAgZ190aW1lb3V0X2FkZCgwLCB0aW1lb3V0RmlyZWQsIDApOwogfQogCi0KIH0KZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbSBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQppbmRleCBiMDRlZjBlLi5lMTNhZDc4IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvbWFjL01haW5UaHJlYWRNYWMubW0KKysrIGIv
SmF2YVNjcmlwdENvcmUvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tCkBAIC0yOSwyOSArMjksNzYg
QEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiTWFpblRocmVhZC5oIgogCisjaW1wb3J0
IDxGb3VuZGF0aW9uL05TQXV0b3JlbGVhc2VQb29sLmg+CisjaW1wb3J0IDxGb3VuZGF0aW9uL05T
UG9ydC5oPgorI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1BvcnRNZXNzYWdlLmg+CisjaW1wb3J0IDxG
b3VuZGF0aW9uL05TUnVuTG9vcC5oPgogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RocmVhZC5oPgor
I2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RpbWVyLmg+CisjaW1wb3J0IDx3dGYvU3RkTGliRXh0cmFz
Lmg+CisjaW1wb3J0IDx3dGYvVGhyZWFkaW5nLmg+CisjaW1wb3J0IDx3dGYvVW51c2VkUGFyYW0u
aD4KKworLy8gV1RGTWFpblRocmVhZENhbGxlciBpcyB1c2VkIHRvICdwb3N0JyBhbiBpdGVtIG9m
IHdvcmsgdG8gdGhlIG1haW4gdGhyZWFkIG9mIHRoZSBhcHBsaWNhdGlvbi4KKy8vIFdlIHVzZSBO
U1BvcnQgaGVyZSBpbnN0ZWFkIG9mIG1vcmUgb2J2aW91cyBbTlNPYmplY3QgcGVyZm9ybVNlbGVj
dG9yT25NYWluVGhyZWFkXSBiZWNhdXNlIHRoZSBsYXR0ZXIgaXMgaW1wbGVtZW50ZWQKKy8vIGJ5
IGNyZWF0aW5nIGFuZCBwb3N0aW5nIGEgdGltZXIgdG8gdGhlIG1haW4gdGhyZWFkJ3MgQ0ZSdW5M
b29wLiBUaGUgdGltZXJzIGFyZSBhbHdheXMgZmV0Y2hlZCBmaXJzdCBiZWZvcmUgYW55IG90aGVy
CisvLyB0eXBlcyBvZiBtZXNzYWdlcywgc28gaWYgc29tZSB3b3JrZXIgdGhyZWFkIGdlbmVyYXRl
cyB3b3JrIGl0ZW1zIGZhc3RlciB0aGVuIG1haW4gbG9vcCBjYW4gcHJvY2VzcywgdGhlIHVzZXIg
aW5wdXQKKy8vIGdldHMgZWZmZWN0aXZlbHkgYmxvY2tlZCBhbmQgYXBwbGljYXRpb24gaGFuZ3Ms
IGl0J3Mgbm90IGV2ZW4gcG9zc2libGUgdG8gY2xvc2UgdGhlIHdpbmRvdy4KKy8vIE5TUG9ydE1l
c3NhZ2UgZ2V0cyBkZWxpdmVyZWQgb24gdGhlIHNhbWUgJ3ByaW9yaXR5JyBhcyB1c2VyIGlucHV0
IGV2ZW50cywgc28gdGhlIFVJIGlzIHN0aWxsIHJlc3BvbnNpdmUgZXZlbiB1bmRlcgorLy8gYSBm
bG9vZCBvZiBzY2hlZHVsZSByZXF1ZXN0cy4KIAogQGludGVyZmFjZSBXVEZNYWluVGhyZWFkQ2Fs
bGVyIDogTlNPYmplY3QgeworICAgIE5TUG9ydCAqbV9wb3J0OwogfQotLSAodm9pZCljYWxsOwor
LSAoaWQpaW5pdDsKKy0gKHZvaWQpcG9zdE1lc3NhZ2U7CistICh2b2lkKWhhbmRsZVBvcnRNZXNz
YWdlOihOU1BvcnRNZXNzYWdlICopcG9ydE1lc3NhZ2U7CiBAZW5kCiAKIEBpbXBsZW1lbnRhdGlv
biBXVEZNYWluVGhyZWFkQ2FsbGVyCiAKLS0gKHZvaWQpY2FsbAorLSAoaWQpaW5pdAogewotICAg
IFdURjo6ZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpOworICAgIG1fcG9ydCA9IFtO
U01hY2hQb3J0IHBvcnRdOworICAgIFttX3BvcnQgc2V0RGVsZWdhdGU6c2VsZl07CisgICAgW1tO
U1J1bkxvb3AgbWFpblJ1bkxvb3BdIGFkZFBvcnQ6bV9wb3J0IGZvck1vZGU6TlNEZWZhdWx0UnVu
TG9vcE1vZGVdOyAKKyAgICByZXR1cm4gc2VsZjsKK30KKworLSAodm9pZClwb3N0TWVzc2FnZQor
eworICAgIE5TUG9ydE1lc3NhZ2UgKm1lc3NhZ2UgPSBbW05TUG9ydE1lc3NhZ2UgYWxsb2NdIGlu
aXRXaXRoU2VuZFBvcnQ6bV9wb3J0IHJlY2VpdmVQb3J0Om5pbCBjb21wb25lbnRzOm5pbF07Cisg
ICAgTlNEYXRlICpkYXRlID0gW1tOU0RhdGUgYWxsb2NdIGluaXRdOyAKKyAgICBbbWVzc2FnZSBz
ZW5kQmVmb3JlRGF0ZTpkYXRlXTsgCisgICAgW2RhdGUgcmVsZWFzZV07CisgICAgW21lc3NhZ2Ug
cmVsZWFzZV07CiB9CiAKKy0gKHZvaWQpaGFuZGxlUG9ydE1lc3NhZ2U6KE5TUG9ydE1lc3NhZ2Ug
Kilwb3J0TWVzc2FnZQoreworICAgIFVOVVNFRF9QQVJBTShwb3J0TWVzc2FnZSk7CisgICAgV1RG
OjpkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Cit9IAorCiBAZW5kIC8vIGltcGxl
bWVudGF0aW9uIFdURk1haW5UaHJlYWRDYWxsZXIKIAogbmFtZXNwYWNlIFdURiB7CiAKK3N0YXRp
YyBXVEZNYWluVGhyZWFkQ2FsbGVyKiBzdGF0aWNNYWluVGhyZWFkQ2FsbGVyID0gbmlsOworCit2
b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQoreworICAgIEFTU0VSVCghc3RhdGlj
TWFpblRocmVhZENhbGxlcik7CisgICAgc3RhdGljTWFpblRocmVhZENhbGxlciA9IFtbV1RGTWFp
blRocmVhZENhbGxlciBhbGxvY10gaW5pdF07Cit9CisKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1
bmN0aW9uc09uTWFpblRocmVhZCgpCiB7Ci0gICAgV1RGTWFpblRocmVhZENhbGxlciAqY2FsbGVy
ID0gW1tXVEZNYWluVGhyZWFkQ2FsbGVyIGFsbG9jXSBpbml0XTsKLSAgICBbY2FsbGVyIHBlcmZv
cm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoY2FsbCkgd2l0aE9iamVjdDpuaWwgd2Fp
dFVudGlsRG9uZTpOT107Ci0gICAgW2NhbGxlciByZWxlYXNlXTsKKyAgICBBU1NFUlQoc3RhdGlj
TWFpblRocmVhZENhbGxlcik7CisgICAgLy8gRXZlbiB0aG91Z2ggdGhpcyBjYW4gYmUgY2FsbGVk
IG9uIHdvcmtlciB0aHJlYWRzIHRoYXQgZG9uJ3QgaGF2ZSBhdXRvcmVsZWFzZSBwb29sLCB0aGUg
cG9zdE1lc3NhZ2UgbWV0aG9kCisgICAgLy8gYWxsb2NhdGVzIGFuZCByZWxlYXNlcyBhbGwgdGhl
IG9iamVjdHMgZXhwbGljaXRseSBhbmQgYXZvaWRzIHVzaW5nIGNvbnZpbmllbmNlIGFsbG9jYXRv
cnMgKGxpa2UgW05TRGF0ZSBkYXRlXSkKKyAgICAvLyB3aGljaCBzZW5kICdhdXRvcmVsZWFzZScg
bWVzc2FnZS4gQmVjYXVzZSBvZiB0aGF0LCBubyBhdXRvcmVsZWFzZSBwb29sIGlzIG5lZWRlZC4K
KyAgICBbc3RhdGljTWFpblRocmVhZENhbGxlciBwb3N0TWVzc2FnZV07CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3F0L01haW5UaHJlYWRR
dC5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWFpblRocmVhZFF0LmNwcAppbmRleCAxOTE0
NjAwLi5iZWQ2ZTAwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWFpblRocmVh
ZFF0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvcXQvTWFpblRocmVhZFF0LmNwcApAQCAt
NTgsNiArNTgsOSBAQCB2b2lkIE1haW5UaHJlYWRJbnZva2VyOjpkaXNwYXRjaCgpCiAKIFFfR0xP
QkFMX1NUQVRJQyhNYWluVGhyZWFkSW52b2tlciwgd2Via2l0X21haW5fdGhyZWFkX2ludm9rZXIp
CiAKK3ZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCit7Cit9CiAKIHZvaWQgc2No
ZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCiB7CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L3dpbi9NYWluVGhyZWFkV2luLmNwcAppbmRleCA1ZjAxNjNjLi5mYWUwNTIwIDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCisrKyBiL0phdmFTY3Jp
cHRDb3JlL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKQEAgLTUwLDEzICs1MCwxMSBAQCBMUkVT
VUxUIENBTExCQUNLIFRocmVhZGluZ1dpbmRvd1duZFByb2MoSFdORCBoV25kLCBVSU5UIG1lc3Nh
Z2UsIFdQQVJBTSB3UGFyYW0sCiAgICAgcmV0dXJuIDA7CiB9CiAKLXZvaWQgaW5pdGlhbGl6ZU1h
aW5UaHJlYWQoKQordm9pZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkKIHsKICAgICBp
ZiAodGhyZWFkaW5nV2luZG93SGFuZGxlKQogICAgICAgICByZXR1cm47CiAKLSAgICBtYWluVGhy
ZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCk7Ci0KICAgICBXTkRDTEFTU0VYIHdjZXg7CiAgICAgbWVt
c2V0KCZ3Y2V4LCAwLCBzaXplb2YoV05EQ0xBU1NFWCkpOwogICAgIHdjZXguY2JTaXplID0gc2l6
ZW9mKFdORENMQVNTRVgpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3d4L01haW5U
aHJlYWRXeC5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvd3gvTWFpblRocmVhZFd4LmNwcAppbmRl
eCAzMTY2MzMxLi45OGQwMzZjIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYvd3gvTWFp
blRocmVhZFd4LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvd3gvTWFpblRocmVhZFd4LmNw
cApAQCAtMzEsNiArMzEsMTAgQEAKIAogbmFtZXNwYWNlIFdURiB7CiAKK3ZvaWQgaW5pdGlhbGl6
ZU1haW5UaHJlYWRQbGF0Zm9ybSgpCit7Cit9CisKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0
aW9uc09uTWFpblRocmVhZCgpCiB7CiB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>27550</attachid>
            <date>2009-02-10 21:18:01 -0800</date>
            <delta_ts>2009-02-10 23:49:36 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>freeze_v5.txt</filename>
            <type>text/plain</type>
            <size>10038</size>
            <attacher name="Dmitry Titov">dimich</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCAxYjVmY2YzLi5lZDQ5MjRlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEg
QEAKKzIwMDktMDItMTAgIERtaXRyeSBUaXRvdiAgPGRpbWljaEBjaHJvbWl1bS5vcmc+CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNzA1CisgICAgICAgIEZpeCB0aGUgVUkgZnJl
ZXplIGNhdXNlZCBieSBXb3JrZXIgZ2VuZXJhdGluZyBhIGZsb29kIG9mIG1lc3NhZ2VzLgorICAg
ICAgICBNZWFzdXJlIHRpbWUgd2Ugc3BlbmQgaW4gZXhlY3V0aW5nIHBvc3RlZCB3b3JrIGl0ZW1z
LiBJZiB0b28gbXVjaCB0aW1lIGlzIHNwZW50CisgICAgICAgIHcvbyByZXR1cm5pbmcgdG8gdGhl
IHJ1biBsb29wLCBleGl0IGFuZCByZXNjaGVkdWxlLgorCisgICAgICAgICogd3RmL01haW5UaHJl
YWQuaDoKKyAgICAgICAgQWRkZWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSgpIHRvIGlu
aXRpYWxpemUgbG93LWxldmVsIG1lY2hhbmlzbSBmb3IgcG9zdGluZworICAgICAgICB3b3JrIGl0
ZW1zIGZyb20gdGhyZWFkIHRvIHRocmVhZC4gVGhpcyByZW1vdmVzICNpZmRlZnMgZm9yIFdJTiBh
bmQgQ0hST01JVU0gZnJvbSBwbGF0Zm9ybS1pbmRlcGVuZGVudCBjb2RlLgorCisgICAgICAgICog
d3RmL01haW5UaHJlYWQuY3BwOgorICAgICAgICAoV1RGOjppbml0aWFsaXplTWFpblRocmVhZCk6
CisgICAgICAgIChXVEY6OmRpc3BhdGNoRnVuY3Rpb25zRnJvbU1haW5UaHJlYWQpOgorICAgICAg
ICBJbnN0ZWFkIG9mIGRpc3BhdGNoaW5nIGFsbCB3b3JrIGl0ZW1zIGluIHRoZSBxdWV1ZSwgZGlz
cGF0Y2ggdGhlbSBvbmUgYnkgb25lCisgICAgICAgIGFuZCBtZWFzdXJlIGVsYXBzZWQgdGltZS4g
QWZ0ZXIgYSB0aHJlc2hvbGQsIHJlc2NoZWR1bGUgYW5kIHF1aXQuCisKKyAgICAgICAgKFdURjo6
Y2FsbE9uTWFpblRocmVhZCk6CisgICAgICAgIChXVEY6OmNhbGxPbk1haW5UaHJlYWRBbmRXYWl0
KToKKyAgICAgICAgT25seSBzY2hlZHVsZSBkaXNwYXRjaCBpZiB0aGUgcXVldWUgd2FzIGVtcHR5
IC0gdG8gYXZvaWQgbWFueSBwb3N0ZWQgbWVzc2FnZXMgaW4gdGhlIHJ1biBsb29wIHF1ZXVlLgor
CisgICAgICAgICogd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tOgorICAgICAgICAoV1RGOjpzY2hl
ZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKToKKyAgICAgICAgVXNlIHN0YXRpYyBp
bnN0YW5jZSBvZiB0aGUgbWFpblRocmVhZENhbGxlciBpbnN0ZWFkIG9mIGFsbG9jYXRpbmcgYW5k
IHJlbGVhc2luZyBpdCBlYWNoIHRpbWUuCisgICAgICAgIChXVEY6OmluaXRpYWxpemVNYWluVGhy
ZWFkUGxhdGZvcm0pOgorICAgICAgICAqIHd0Zi9ndGsvTWFpblRocmVhZENocm9taXVtLmNwcDoK
KyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0Zm9ybSk6CisgICAgICAgICog
d3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcDoKKyAgICAgICAgKFdURjo6aW5pdGlhbGl6ZU1haW5U
aHJlYWRQbGF0Zm9ybSk6CisgICAgICAgICogd3RmL3F0L01haW5UaHJlYWRRdC5jcHA6CisgICAg
ICAgIChXVEY6OmluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0pOgorICAgICAgICAqIHd0Zi93
aW4vTWFpblRocmVhZFdpbi5jcHA6CisgICAgICAgIChXVEY6OmluaXRpYWxpemVNYWluVGhyZWFk
UGxhdGZvcm0pOgorICAgICAgICAqIHd0Zi93eC9NYWluVGhyZWFkV3guY3BwOgorICAgICAgICAo
V1RGOjppbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKToKKwogMjAwOS0wMi0xMCAgQWRhbSBS
b2JlbiAgPGFyb2JlbkBhcHBsZS5jb20+CiAKICAgICAgICAgV2luZG93cyBidWlsZCBmaXggYWZ0
ZXIgcjQwODEzCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5jcHAg
Yi9KYXZhU2NyaXB0Q29yZS93dGYvTWFpblRocmVhZC5jcHAKaW5kZXggYWQwNDA0Ny4uNDZmMmUw
ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuY3BwCisrKyBiL0ph
dmFTY3JpcHRDb3JlL3d0Zi9NYWluVGhyZWFkLmNwcApAQCAtMjksOSArMjksMTAgQEAKICNpbmNs
dWRlICJjb25maWcuaCIKICNpbmNsdWRlICJNYWluVGhyZWFkLmgiCiAKKyNpbmNsdWRlICJDdXJy
ZW50VGltZS5oIgorI2luY2x1ZGUgIkRlcXVlLmgiCiAjaW5jbHVkZSAiU3RkTGliRXh0cmFzLmgi
CiAjaW5jbHVkZSAiVGhyZWFkaW5nLmgiCi0jaW5jbHVkZSAiVmVjdG9yLmgiCiAKIG5hbWVzcGFj
ZSBXVEYgewogCkBAIC00OCw3ICs0OSw3IEBAIHN0cnVjdCBGdW5jdGlvbldpdGhDb250ZXh0IHsK
ICAgICB9CiB9OwogCi10eXBlZGVmIFZlY3RvcjxGdW5jdGlvbldpdGhDb250ZXh0PiBGdW5jdGlv
blF1ZXVlOwordHlwZWRlZiBEZXF1ZTxGdW5jdGlvbldpdGhDb250ZXh0PiBGdW5jdGlvblF1ZXVl
OwogCiBzdGF0aWMgYm9vbCBjYWxsYmFja3NQYXVzZWQ7IC8vIFRoaXMgZ2xvYmFsIHZhcmlhYmxl
IGlzIG9ubHkgYWNjZXNzZWQgZnJvbSBtYWluIHRocmVhZC4KIApAQCAtNjQsMTIgKzY1LDE0IEBA
IHN0YXRpYyBGdW5jdGlvblF1ZXVlJiBmdW5jdGlvblF1ZXVlKCkKICAgICByZXR1cm4gc3RhdGlj
RnVuY3Rpb25RdWV1ZTsKIH0KIAotI2lmICFQTEFURk9STShXSU4pICYmICFQTEFURk9STShDSFJP
TUlVTSkKIHZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWQoKQogewogICAgIG1haW5UaHJlYWRGdW5j
dGlvblF1ZXVlTXV0ZXgoKTsKKyAgICBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCk7CiB9
Ci0jZW5kaWYKKworLy8gMC4xIHNlYyBkZWxheXMgaW4gVUkgaXMgYXBwcm94aW1hdGUgdGhyZXNo
b2xkIHdoZW4gdGhleSBiZWNvbWUgbm90aWNlYWJsZS4gSGF2ZSBhIGxpbWl0IHRoYXQncyBoYWxm
IG9mIHRoYXQuCitzdGF0aWMgY29uc3QgZG91YmxlIG1heFJ1bkxvb3BTdXNwZW5zaW9uVGltZSA9
IDAuMDU7CiAKIHZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpCiB7CkBAIC03
OCwzMCArODEsNDQgQEAgdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCkKICAg
ICBpZiAoY2FsbGJhY2tzUGF1c2VkKQogICAgICAgICByZXR1cm47CiAKLSAgICBGdW5jdGlvblF1
ZXVlIHF1ZXVlQ29weTsKLSAgICB7Ci0gICAgICAgIE11dGV4TG9ja2VyIGxvY2tlcihtYWluVGhy
ZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOwotICAgICAgICBxdWV1ZUNvcHkuc3dhcChmdW5jdGlv
blF1ZXVlKCkpOwotICAgIH0KKyAgICBkb3VibGUgc3RhcnRUaW1lID0gY3VycmVudFRpbWUoKTsK
KworICAgIEZ1bmN0aW9uV2l0aENvbnRleHQgaW52b2NhdGlvbjsKKyAgICB3aGlsZSAodHJ1ZSkg
eworICAgICAgICB7CisgICAgICAgICAgICBNdXRleExvY2tlciBsb2NrZXIobWFpblRocmVhZEZ1
bmN0aW9uUXVldWVNdXRleCgpKTsKKyAgICAgICAgICAgIGlmICghZnVuY3Rpb25RdWV1ZSgpLnNp
emUoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGludm9jYXRpb24gPSBm
dW5jdGlvblF1ZXVlKCkuZmlyc3QoKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uUXVldWUoKS5yZW1v
dmVGaXJzdCgpOworICAgICAgICB9CiAKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcXVl
dWVDb3B5LnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEZ1bmN0aW9uV2l0aENvbnRleHQmIGludm9j
YXRpb24gPSBxdWV1ZUNvcHlbaV07CiAgICAgICAgIGludm9jYXRpb24uZnVuY3Rpb24oaW52b2Nh
dGlvbi5jb250ZXh0KTsKICAgICAgICAgaWYgKGludm9jYXRpb24uc3luY0ZsYWcpCiAgICAgICAg
ICAgICBpbnZvY2F0aW9uLnN5bmNGbGFnLT5zaWduYWwoKTsKKyAgICAgICAgCisgICAgICAgIC8v
IElmIHdlIGFyZSBydW5uaW5nIGFjY3VtdWxhdGVkIGZ1bmN0aW9ucyBmb3IgdG9vIGxvbmcgc28g
VUkgbWF5IGJlY29tZSB1bnJlc3BvbnNpdmUsIHdlIG5lZWQgdG8KKyAgICAgICAgLy8geWllbGQg
c28gdGhlIHVzZXIgaW5wdXQgY2FuIGJlIHByb2Nlc3NlZC4gT3RoZXJ3aXNlIHVzZXIgbWF5IG5v
dCBiZSBhYmxlIHRvIGV2ZW4gY2xvc2UgdGhlIHdpbmRvdy4KKyAgICAgICAgLy8gVGhpcyBjb2Rl
IGhhcyBlZmZlY3Qgb25seSBpbiBjYXNlIHRoZSBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25N
YWluVGhyZWFkKCkgaXMgaW1wbGVtZW50ZWQgaW4gYSB3YXkgdGhhdAorICAgICAgICAvLyBhbGxv
d3MgaW5wdXQgZXZlbnRzIHRvIGJlIHByb2Nlc3NlZCBiZWZvcmUgd2UgYXJlIGJhY2sgaGVyZS4K
KyAgICAgICAgaWYgKGN1cnJlbnRUaW1lKCkgLSBzdGFydFRpbWUgPiBtYXhSdW5Mb29wU3VzcGVu
c2lvblRpbWUpIHsKKyAgICAgICAgICAgIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5U
aHJlYWQoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgfQogfQogCiB2b2lk
IGNhbGxPbk1haW5UaHJlYWQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlvbiwgdm9pZCogY29u
dGV4dCkKIHsKICAgICBBU1NFUlQoZnVuY3Rpb24pOwotCisgICAgYm9vbCBuZWVkVG9TY2hlZHVs
ZSA9IGZhbHNlOwogICAgIHsKICAgICAgICAgTXV0ZXhMb2NrZXIgbG9ja2VyKG1haW5UaHJlYWRG
dW5jdGlvblF1ZXVlTXV0ZXgoKSk7CisgICAgICAgIG5lZWRUb1NjaGVkdWxlID0gZnVuY3Rpb25R
dWV1ZSgpLnNpemUoKSA9PSAwOwogICAgICAgICBmdW5jdGlvblF1ZXVlKCkuYXBwZW5kKEZ1bmN0
aW9uV2l0aENvbnRleHQoZnVuY3Rpb24sIGNvbnRleHQpKTsKICAgICB9Ci0KLSAgICBzY2hlZHVs
ZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7CisgICAgaWYgKG5lZWRUb1NjaGVkdWxl
KQorICAgICAgICBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCk7CiB9CiAK
IHZvaWQgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlv
biwgdm9pZCogY29udGV4dCkKQEAgLTExNSwxNCArMTMyLDE2IEBAIHZvaWQgY2FsbE9uTWFpblRo
cmVhZEFuZFdhaXQoTWFpblRocmVhZEZ1bmN0aW9uKiBmdW5jdGlvbiwgdm9pZCogY29udGV4dCkK
IAogICAgIFRocmVhZENvbmRpdGlvbiBzeW5jRmxhZzsKICAgICBNdXRleCBjb25kaXRpb25NdXRl
eDsKLQorICAgIGJvb2wgbmVlZFRvU2NoZWR1bGUgPSBmYWxzZTsKICAgICB7CiAgICAgICAgIE11
dGV4TG9ja2VyIGxvY2tlcihtYWluVGhyZWFkRnVuY3Rpb25RdWV1ZU11dGV4KCkpOworICAgICAg
ICBuZWVkVG9TY2hlZHVsZSA9IGZ1bmN0aW9uUXVldWUoKS5zaXplKCkgPT0gMDsKICAgICAgICAg
ZnVuY3Rpb25RdWV1ZSgpLmFwcGVuZChGdW5jdGlvbldpdGhDb250ZXh0KGZ1bmN0aW9uLCBjb250
ZXh0LCAmc3luY0ZsYWcpKTsKICAgICAgICAgY29uZGl0aW9uTXV0ZXgubG9jaygpOwogICAgIH0K
IAotICAgIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKTsKKyAgICBpZiAo
bmVlZFRvU2NoZWR1bGUpCisgICAgICAgIHNjaGVkdWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5U
aHJlYWQoKTsKICAgICBzeW5jRmxhZy53YWl0KGNvbmRpdGlvbk11dGV4KTsKIH0KIApkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL01haW5UaHJlYWQuaCBiL0phdmFTY3JpcHRDb3JlL3d0
Zi9NYWluVGhyZWFkLmgKaW5kZXggOTUzYjk4Ni4uOWYyOThkYSAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvd3RmL01haW5UaHJlYWQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvTWFpblRo
cmVhZC5oCkBAIC00NSw5ICs0NSwxMCBAQCB2b2lkIHNldE1haW5UaHJlYWRDYWxsYmFja3NQYXVz
ZWQoYm9vbCBwYXVzZWQpOwogdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpOwogCiAvLyBUaGVz
ZSBmdW5jdGlvbnMgYXJlIGludGVybmFsIHRvIHRoZSBjYWxsT25NYWluVGhyZWFkIGltcGxlbWVu
dGF0aW9uLgotdm9pZCBkaXNwYXRjaEZ1bmN0aW9uc0Zyb21NYWluVGhyZWFkKCk7Cit2b2lkIGlu
aXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKTsKIHZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0
aW9uc09uTWFpblRocmVhZCgpOwogTXV0ZXgmIG1haW5UaHJlYWRGdW5jdGlvblF1ZXVlTXV0ZXgo
KTsKK3ZvaWQgZGlzcGF0Y2hGdW5jdGlvbnNGcm9tTWFpblRocmVhZCgpOwogCiB9IC8vIG5hbWVz
cGFjZSBXVEYKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL2Nocm9taXVtL01haW5U
aHJlYWRDaHJvbWl1bS5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYvY2hyb21pdW0vTWFpblRocmVh
ZENocm9taXVtLmNwcAppbmRleCA0MGQ1ZTdiLi4zOTQzNzBmIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS93dGYvY2hyb21pdW0vTWFpblRocmVhZENocm9taXVtLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS93dGYvY2hyb21pdW0vTWFpblRocmVhZENocm9taXVtLmNwcApAQCAtMzUsNyArMzUs
NyBAQAogCiBuYW1lc3BhY2UgV1RGIHsKIAotdm9pZCBpbml0aWFsaXplTWFpblRocmVhZCgpCit2
b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQogewogICAgIENocm9taXVtVGhyZWFk
aW5nOjppbml0aWFsaXplTWFpblRocmVhZCgpOwogfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9ndGsvTWFp
blRocmVhZEd0ay5jcHAKaW5kZXggYTZlMDYxZi4uNzYyNDI0NyAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvd3RmL2d0ay9NYWluVGhyZWFkR3RrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS93
dGYvZ3RrL01haW5UaHJlYWRHdGsuY3BwCkBAIC0zNCw2ICszNCwxMCBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAordm9pZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkKK3sKK30KKwogc3Rh
dGljIGdib29sZWFuIHRpbWVvdXRGaXJlZChncG9pbnRlcikKIHsKICAgICBkaXNwYXRjaEZ1bmN0
aW9uc0Zyb21NYWluVGhyZWFkKCk7CkBAIC00NSw1ICs0OSw0IEBAIHZvaWQgc2NoZWR1bGVEaXNw
YXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgpCiAgICAgZ190aW1lb3V0X2FkZCgwLCB0aW1lb3V0
RmlyZWQsIDApOwogfQogCi0KLX0KK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvd3RmL21hYy9NYWluVGhyZWFkTWFjLm1tIGIvSmF2YVNjcmlwdENvcmUvd3Rm
L21hYy9NYWluVGhyZWFkTWFjLm1tCmluZGV4IGIwNGVmMGUuLmM3OWFjYzEgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL3d0Zi9tYWMvTWFpblRocmVhZE1hYy5tbQorKysgYi9KYXZhU2NyaXB0
Q29yZS93dGYvbWFjL01haW5UaHJlYWRNYWMubW0KQEAgLTMwLDYgKzMwLDcgQEAKICNpbXBvcnQg
Ik1haW5UaHJlYWQuaCIKIAogI2ltcG9ydCA8Rm91bmRhdGlvbi9OU1RocmVhZC5oPgorI2ltcG9y
dCA8d3RmL0Fzc2VydGlvbnMuaD4KIAogQGludGVyZmFjZSBXVEZNYWluVGhyZWFkQ2FsbGVyIDog
TlNPYmplY3QgewogfQpAQCAtNDcsMTEgKzQ4LDE4IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCitz
dGF0aWMgV1RGTWFpblRocmVhZENhbGxlciogc3RhdGljTWFpblRocmVhZENhbGxlciA9IG5pbDsK
Kwordm9pZCBpbml0aWFsaXplTWFpblRocmVhZFBsYXRmb3JtKCkKK3sKKyAgICBBU1NFUlQoIXN0
YXRpY01haW5UaHJlYWRDYWxsZXIpOworICAgIHN0YXRpY01haW5UaHJlYWRDYWxsZXIgPSBbW1dU
Rk1haW5UaHJlYWRDYWxsZXIgYWxsb2NdIGluaXRdOworfQorCiB2b2lkIHNjaGVkdWxlRGlzcGF0
Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKQogewotICAgIFdURk1haW5UaHJlYWRDYWxsZXIgKmNh
bGxlciA9IFtbV1RGTWFpblRocmVhZENhbGxlciBhbGxvY10gaW5pdF07Ci0gICAgW2NhbGxlciBw
ZXJmb3JtU2VsZWN0b3JPbk1haW5UaHJlYWQ6QHNlbGVjdG9yKGNhbGwpIHdpdGhPYmplY3Q6bmls
IHdhaXRVbnRpbERvbmU6Tk9dOwotICAgIFtjYWxsZXIgcmVsZWFzZV07CisgICAgQVNTRVJUKHN0
YXRpY01haW5UaHJlYWRDYWxsZXIpOworICAgIFtzdGF0aWNNYWluVGhyZWFkQ2FsbGVyIHBlcmZv
cm1TZWxlY3Rvck9uTWFpblRocmVhZDpAc2VsZWN0b3IoY2FsbCkgd2l0aE9iamVjdDpuaWwgd2Fp
dFVudGlsRG9uZTpOT107CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvd3RmL3F0L01haW5UaHJlYWRRdC5jcHAgYi9KYXZhU2NyaXB0Q29yZS93dGYv
cXQvTWFpblRocmVhZFF0LmNwcAppbmRleCAxOTE0NjAwLi43YjJkMGYyIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS93dGYvcXQvTWFpblRocmVhZFF0LmNwcAorKysgYi9KYXZhU2NyaXB0Q29y
ZS93dGYvcXQvTWFpblRocmVhZFF0LmNwcApAQCAtNTgsMTIgKzU4LDE1IEBAIHZvaWQgTWFpblRo
cmVhZEludm9rZXI6OmRpc3BhdGNoKCkKIAogUV9HTE9CQUxfU1RBVElDKE1haW5UaHJlYWRJbnZv
a2VyLCB3ZWJraXRfbWFpbl90aHJlYWRfaW52b2tlcikKIAordm9pZCBpbml0aWFsaXplTWFpblRo
cmVhZFBsYXRmb3JtKCkKK3sKK30KIAogdm9pZCBzY2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25N
YWluVGhyZWFkKCkKIHsKICAgICBRTWV0YU9iamVjdDo6aW52b2tlTWV0aG9kKHdlYmtpdF9tYWlu
X3RocmVhZF9pbnZva2VyKCksICJkaXNwYXRjaCIsIFF0OjpRdWV1ZWRDb25uZWN0aW9uKTsKIH0K
IAotfQorfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNpbmNsdWRlICJNYWluVGhyZWFkUXQubW9jIgpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNwcCBiL0ph
dmFTY3JpcHRDb3JlL3d0Zi93aW4vTWFpblRocmVhZFdpbi5jcHAKaW5kZXggNWYwMTYzYy4uYjgy
OGI3ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvd3RmL3dpbi9NYWluVGhyZWFkV2luLmNw
cAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvd2luL01haW5UaHJlYWRXaW4uY3BwCkBAIC01MCwx
MyArNTAsMTEgQEAgTFJFU1VMVCBDQUxMQkFDSyBUaHJlYWRpbmdXaW5kb3dXbmRQcm9jKEhXTkQg
aFduZCwgVUlOVCBtZXNzYWdlLCBXUEFSQU0gd1BhcmFtLAogICAgIHJldHVybiAwOwogfQogCi12
b2lkIGluaXRpYWxpemVNYWluVGhyZWFkKCkKK3ZvaWQgaW5pdGlhbGl6ZU1haW5UaHJlYWRQbGF0
Zm9ybSgpCiB7CiAgICAgaWYgKHRocmVhZGluZ1dpbmRvd0hhbmRsZSkKICAgICAgICAgcmV0dXJu
OwogCi0gICAgbWFpblRocmVhZEZ1bmN0aW9uUXVldWVNdXRleCgpOwotCiAgICAgV05EQ0xBU1NF
WCB3Y2V4OwogICAgIG1lbXNldCgmd2NleCwgMCwgc2l6ZW9mKFdORENMQVNTRVgpKTsKICAgICB3
Y2V4LmNiU2l6ZSA9IHNpemVvZihXTkRDTEFTU0VYKTsKQEAgLTc1LDQgKzczLDQgQEAgdm9pZCBz
Y2hlZHVsZURpc3BhdGNoRnVuY3Rpb25zT25NYWluVGhyZWFkKCkKICAgICBQb3N0TWVzc2FnZSh0
aHJlYWRpbmdXaW5kb3dIYW5kbGUsIHRocmVhZGluZ0ZpcmVkTWVzc2FnZSwgMCwgMCk7CiB9CiAK
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKK30gLy8gbmFtZXNwYWNlIFdURgpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3RmL3d4L01haW5UaHJlYWRXeC5jcHAgYi9KYXZhU2NyaXB0Q29yZS93
dGYvd3gvTWFpblRocmVhZFd4LmNwcAppbmRleCAzMTY2MzMxLi5iY2Q1ZjA1IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS93dGYvd3gvTWFpblRocmVhZFd4LmNwcAorKysgYi9KYXZhU2NyaXB0
Q29yZS93dGYvd3gvTWFpblRocmVhZFd4LmNwcApAQCAtMzEsOCArMzEsMTIgQEAKIAogbmFtZXNw
YWNlIFdURiB7CiAKLXZvaWQgc2NoZWR1bGVEaXNwYXRjaEZ1bmN0aW9uc09uTWFpblRocmVhZCgp
Cit2b2lkIGluaXRpYWxpemVNYWluVGhyZWFkUGxhdGZvcm0oKQogewogfQogCit2b2lkIHNjaGVk
dWxlRGlzcGF0Y2hGdW5jdGlvbnNPbk1haW5UaHJlYWQoKQorewogfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYK
</data>
<flag name="review"
          id="13344"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>