<?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>33954</bug_id>
          
          <creation_ts>2010-01-21 08:17:14 -0800</creation_ts>
          <short_desc>YouTube HTML5 video never starts playing on Windows</short_desc>
          <delta_ts>2010-03-08 09:37:28 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows XP</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc>http://www.youtube.com/watch?v=pd7ILa_mhgA&amp;feature=related</bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar, PlatformOnly</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Adam Roben (:aroben)">aroben</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>eric</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>183193</commentid>
    <comment_count>0</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-01-21 08:17:14 -0800</bug_when>
    <thetext>To reproduce:

1. Go to http://www.youtube.com/html5 and join the HTML5 beta
2. Go to http://www.youtube.com/watch?v=pd7ILa_mhgA&amp;feature=related

The video never starts playing. The spinner just spins forever.

The video does start playing on Mac.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183194</commentid>
    <comment_count>1</comment_count>
    <who name="Adam Roben (:aroben)">aroben</who>
    <bug_when>2010-01-21 08:17:45 -0800</bug_when>
    <thetext>&lt;rdar://problem/7565100&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188250</commentid>
    <comment_count>2</comment_count>
      <attachid>48250</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-02-05 12:39:49 -0800</bug_when>
    <thetext>Created attachment 48250
Proposed patch

No test added because http://bugs.webkit.org/show_bug.cgi?id=33954 should cover it, but still fails. That failure happens because the test tries to load an mp4 file directly into an iframe, which still doesn&apos;t work on Windows. 

I would like to get these changes in and fix the test later because they have been sitting in my tree for a week now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188254</commentid>
    <comment_count>3</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-02-05 12:47:28 -0800</bug_when>
    <thetext>Attachment 48250 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:208:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188281</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-02-05 13:49:20 -0800</bug_when>
    <thetext>The &quot;offending&quot; line is testing the first character of a string:

    if (cookieURL.find(&apos;.&apos;) == 0)
        cookieURL.remove(0);

I think the &quot;correct&quot; style would make the purpose of the test less clear.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188284</commentid>
    <comment_count>5</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-05 13:53:11 -0800</bug_when>
    <thetext>(In reply to comment #4)
&gt; The &quot;offending&quot; line is testing the first character of a string:
&gt; 
&gt;     if (cookieURL.find(&apos;.&apos;) == 0)
&gt;         cookieURL.remove(0);
&gt; 
&gt; I think the &quot;correct&quot; style would make the purpose of the test less clear.

That&apos;s an unnecessarily-inefficient idiom for checking the first character. Instead you should write:

    if (cookieURL[0] == &apos;.&apos;)
        cookieURL.remove(0);

The reason that works is that indexing with WebCore::String does a range check and returns a 0 character if you index past the end.

This code is quite fast and won&apos;t scan the whole string.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188285</commentid>
    <comment_count>6</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-05 13:53:31 -0800</bug_when>
    <thetext>Another option that is clearer than using find is to use the String::startsWith function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188286</commentid>
    <comment_count>7</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-05 13:54:08 -0800</bug_when>
    <thetext>And if we wanted, we could overload String::startsWith to take a UChar and so make a clear way to write the s[0] == c code too.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188293</commentid>
    <comment_count>8</comment_count>
      <attachid>48250</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-02-05 14:01:34 -0800</bug_when>
    <thetext>Comment on attachment 48250
Proposed patch

&gt;  
&gt; +
&gt; +typedef DWORD (WINAPI* InternetSetCookieExWFunction)(LPCWSTR lpszUrl, LPCWSTR lpszCookieName, LPCWSTR lpszCookieData, DWORD dwFlags, DWORD_PTR dwReserved);

Would be better to put this typedef at the top of the file instead of just before it&apos;s going to be used. But you won&apos;t even need it if you use the SoftLinking.h header as I suggest below.

&gt; +static InternetSetCookieExWFunction findInternetSetCookieExWFunction()
&gt; +{
&gt; +    HMODULE dll = LoadLibraryA(&quot;Wininet.dll&quot;);
&gt; +    if (dll == INVALID_HANDLE_VALUE)
&gt; +        return 0;
&gt; +    return reinterpret_cast&lt;InternetSetCookieExWFunction&gt;(GetProcAddress(dll, &quot;InternetSetCookieExW&quot;));
&gt; +}
&gt; +
&gt; +static DWORD internetSetCookieEx(LPCWSTR lpszUrl, LPCWSTR lpszCookieName, LPCWSTR lpszCookieData, DWORD dwFlags, DWORD_PTR dwReserved)
&gt; +{
&gt; +    static InternetSetCookieExWFunction function = findInternetSetCookieExWFunction();
&gt; +    if (!function)
&gt; +        return FALSE;
&gt; +    return function(lpszUrl, lpszCookieName, lpszCookieData, dwFlags, dwReserved);
&gt; +}

The header SoftLinking.h is supposed to make it easier to do this type of thing correctly. You just use the SOFT_LINK_LIBRARY and SOFT_LINK macros. There are examples in files like ScrollbarThemeWin.h.

The code you wrote looks fine, but it&apos;s better to not reinvent the wheel if possible.

&gt; +void MediaPlayerPrivate::setupCookiesForQuickTime(const String&amp; url)

The verb is &quot;set up&quot; so I normally capitalize the &quot;U&quot;.

&gt; +    if (frame-&gt;page() &amp;&amp; !frame-&gt;page()-&gt;cookieEnabled())
&gt; +        return;

If frame-&gt;page() is zero do we really want to do this cookie work at all?

&gt; +        Cookie cookie = documentCookies[ndx];

I think it&apos;s more efficient to use const Cookie&amp; here instead of copying the cookie.

&gt; +        String cookieString = cookie.name;
&gt; +        if (!cookie.value.isEmpty())
&gt; +            cookieString += &quot;=&quot; + cookie.value + &quot;;&quot;;

Sadly, although easy to write, this is an inefficient way to build a string with WebCore::String, which will require a lot of memory allocation. It would be better to use either StringBuilder or Vector&lt;UChar&gt;.

&gt; +    String dateStringFromTime(CFAbsoluteTime time);

I think you left this in by accident.

I would have suggested removing the argument name &quot;time&quot;, if we were keeping this.

I’m going to say review+ but I think this could use a bit of refinement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188698</commentid>
    <comment_count>9</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2010-02-08 11:21:19 -0800</bug_when>
    <thetext>Attachment 48250 was posted by a committer and has review+, assigning to Eric Carlson for commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196667</commentid>
    <comment_count>10</comment_count>
      <attachid>48250</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-03-05 14:26:46 -0800</bug_when>
    <thetext>Comment on attachment 48250
Proposed patch

Preparing a new patch, this doesn&apos;t do everything is should.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196703</commentid>
    <comment_count>11</comment_count>
      <attachid>50128</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-03-05 14:55:57 -0800</bug_when>
    <thetext>Created attachment 50128
Updated patch

This version copies all cookie parameters, not just the value, so WinINet knows if it can be cached, etc. Also use StringBuilder to create cookie and url.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196768</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-03-05 16:10:56 -0800</bug_when>
    <thetext>Attachment 50128 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/graphics/win/MediaPlayerPrivateQuickTimeWin.cpp:177:  Tab found; better to use spaces  [whitespace/tab] [1]
Total errors found: 1 in 2 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>196774</commentid>
    <comment_count>13</comment_count>
      <attachid>50138</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-03-05 16:15:35 -0800</bug_when>
    <thetext>Created attachment 50138
no-tabs patch

Oh the horrors!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197017</commentid>
    <comment_count>14</comment_count>
      <attachid>50138</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-03-07 09:54:14 -0800</bug_when>
    <thetext>Comment on attachment 50138
no-tabs patch

Great patch, with really good attention to detail in the code. I found a few small anomalies, but generally it seems superb.

&gt; +    static const char* dayStrs[] = {&quot;Mon&quot;, &quot;Tue&quot;, &quot;Wed&quot;, &quot;Thu&quot;, &quot;Fri&quot;, &quot;Sat&quot;, &quot;Sun&quot;};
&gt; +    static const char* monthStrs[] = {&quot;Jan&quot;, &quot;Feb&quot;, &quot;Mar&quot;, &quot;Apr&quot;, &quot;May&quot;, &quot;Jun&quot;, &quot;Jul&quot;, &quot;Aug&quot;, &quot;Sep&quot;, &quot;Oct&quot;, &quot;Nov&quot;, &quot;Dec&quot;};

Should have spaces before and after the &quot;}&quot; and &quot;{&quot; charactesr to fit our usual format.

These should be:

    static const char* const

so that the arrays are constant, not just the strings in them.

I would prefer that we not use the abbreviation &quot;Str&quot; in the names of these arrays.

&gt; +    // WebCore loaded the page with the movie url with CFNetwork but QuickTime will 

In the comment I suggest we use &quot;URL&quot; instead of &quot;url&quot;.

&gt; +    // use WinINet to download the movie, so we need to copie any cookies needed to

Typo: &quot;copie&quot; -&gt; &quot;copy&quot;. I think typing &quot;cookie&quot; all those times fried the &quot;y&quot; circuit.

&gt; +    KURL movieURL = KURL(KURL(), url);

The names here are not so great. The string is named &quot;url&quot; but the URL object is named &quot;movieURL&quot;, yet both are the same movie URL.

Is it right to just convert the string to a KURL? Should we be doing a completeURL operation or something along those lines? What about if the URL is not a valid one? Does the getRawCookies function handle that correctly?

&gt; +    for (unsigned ndx = 0; ndx &lt; documentCookies.size(); ndx++) {

The variable name &quot;ndx&quot; here is a bit unusual. Why not just use &quot;int&quot;?

Typically we use size_t for indexing into Vector. Not sure if there&apos;s a real benefit either way, but it would be good to be consistent if possible.

My comments are all minor editorial ones, so r=me either as-is or with some of these addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197194</commentid>
    <comment_count>15</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2010-03-08 09:37:15 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/55668</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>48250</attachid>
            <date>2010-02-05 12:39:49 -0800</date>
            <delta_ts>2010-03-05 14:55:57 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>patch_4.txt</filename>
            <type>text/plain</type>
            <size>5238</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1NDQzOCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTkgQEAKKzIwMTAtMDItMDUgIEVyaWMgQ2FybHNvbiAgPGVyaWMuY2FybHNvbkBh
cHBsZS5jb20+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgWW91VHViZSBIVE1MNSB2aWRlbyBuZXZlciBzdGFydHMgcGxheWluZyBvbiBXaW5kb3dzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMzk1NAorCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGlt
ZVdpbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSW50ZXJuZXRTZXRDb29raWVFeFdGdW5j
dGlvbik6IE5ldywgbG9hZCBXaW5JTmV0IGRsbCBhbmQgbG9va3VwIHRoZSBhZGRyZXNzCisgICAg
ICAgICAgICBvZiBJbnRlcm5ldFNldENvb2tpZUV4Vy4KKyAgICAgICAgKFdlYkNvcmU6OmludGVy
bmV0U2V0Q29va2llRXgpOiBOZXcsIGNhbGwgSW50ZXJuZXRTZXRDb29raWVFeC4KKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhUGxheWVyUHJpdmF0ZTo6c2V0dXBDb29raWVzRm9yUXVpY2tUaW1lKTog
Q29weSBjb29raWVzIGZvciB0aGUgbW92aWUgdG8KKyAgICAgICAgICAgIGJlIGxvYWRlZCBmcm9t
IENGTmV0d29yayBpbnRvIFdpbklOZXQgc28gdGhleSBhcmUgYXZhaWxhYmxlIHdoZW4gUXVpY2tU
aW1lIGRvd25sb2FkcworICAgICAgICAgICAgdGhlIG1vdmllLgorICAgICAgICAoV2ViQ29yZTo6
TWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKTogQ2FsbCBzZXR1cENvb2tpZXNGb3JRdWlja1RpbWUu
CisKIDIwMTAtMDItMDUgIFNpbW9uIEZyYXNlciAgPHNpbW9uLmZyYXNlckBhcHBsZS5jb20+CiAK
ICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4KSW5kZXg6IFdlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93aW4vTWVkaWFQbGF5ZXJQcml2YXRl
UXVpY2tUaW1lV2luLmNwcAkocmV2aXNpb24gNTQ0MzgpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yOCw2ICsyOCwxMCBAQAogI2lmIEVOQUJMRShWSURFTykKICNpbmNsdWRlICJNZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaCIKIAorI2luY2x1ZGUgIkNvb2tpZS5oIgorI2lu
Y2x1ZGUgIkNvb2tpZUphci5oIgorI2luY2x1ZGUgIkZyYW1lLmgiCisjaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCiAjaW5jbHVkZSAiR3JhcGhpY3NDb250ZXh0LmgiCiAjaW5jbHVkZSAiS1VSTC5oIgog
I2luY2x1ZGUgIlFUTW92aWVXaW4uaCIKQEAgLTM1LDYgKzM5LDcgQEAKICNpbmNsdWRlICJTdHJp
bmdIYXNoLmgiCiAjaW5jbHVkZSAiVGltZVJhbmdlcy5oIgogI2luY2x1ZGUgIlRpbWVyLmgiCisj
aW5jbHVkZSA8V2luaW5ldC5oPgogI2luY2x1ZGUgPHd0Zi9DdXJyZW50VGltZS5oPgogI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KQEAgLTE1Miw2
ICsxNTcsNjYgQEAgdm9pZCBUYXNrVGltZXI6OmZpcmVkKCkKICAgICBRVE1vdmllV2luOjp0YXNr
VGltZXJGaXJlZCgpOwogfQogCisKK3R5cGVkZWYgRFdPUkQgKFdJTkFQSSogSW50ZXJuZXRTZXRD
b29raWVFeFdGdW5jdGlvbikoTFBDV1NUUiBscHN6VXJsLCBMUENXU1RSIGxwc3pDb29raWVOYW1l
LCBMUENXU1RSIGxwc3pDb29raWVEYXRhLCBEV09SRCBkd0ZsYWdzLCBEV09SRF9QVFIgZHdSZXNl
cnZlZCk7CitzdGF0aWMgSW50ZXJuZXRTZXRDb29raWVFeFdGdW5jdGlvbiBmaW5kSW50ZXJuZXRT
ZXRDb29raWVFeFdGdW5jdGlvbigpCit7CisgICAgSE1PRFVMRSBkbGwgPSBMb2FkTGlicmFyeUEo
IldpbmluZXQuZGxsIik7CisgICAgaWYgKGRsbCA9PSBJTlZBTElEX0hBTkRMRV9WQUxVRSkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SW50ZXJuZXRTZXRD
b29raWVFeFdGdW5jdGlvbj4oR2V0UHJvY0FkZHJlc3MoZGxsLCAiSW50ZXJuZXRTZXRDb29raWVF
eFciKSk7Cit9CisKK3N0YXRpYyBEV09SRCBpbnRlcm5ldFNldENvb2tpZUV4KExQQ1dTVFIgbHBz
elVybCwgTFBDV1NUUiBscHN6Q29va2llTmFtZSwgTFBDV1NUUiBscHN6Q29va2llRGF0YSwgRFdP
UkQgZHdGbGFncywgRFdPUkRfUFRSIGR3UmVzZXJ2ZWQpCit7CisgICAgc3RhdGljIEludGVybmV0
U2V0Q29va2llRXhXRnVuY3Rpb24gZnVuY3Rpb24gPSBmaW5kSW50ZXJuZXRTZXRDb29raWVFeFdG
dW5jdGlvbigpOworICAgIGlmICghZnVuY3Rpb24pCisgICAgICAgIHJldHVybiBGQUxTRTsKKyAg
ICByZXR1cm4gZnVuY3Rpb24obHBzelVybCwgbHBzekNvb2tpZU5hbWUsIGxwc3pDb29raWVEYXRh
LCBkd0ZsYWdzLCBkd1Jlc2VydmVkKTsKK30KKwordm9pZCBNZWRpYVBsYXllclByaXZhdGU6OnNl
dHVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBTdHJpbmcmIHVybCkKK3sKKyAgICAvLyBXZWJD
b3JlIGxvYWRlZCB0aGUgcGFnZSB3aXRoIG1vdmllIHVybCB3aXRoIENGTmV0d29yayBidXQgUXVp
Y2tUaW1lIHdpbGwgdXNlCisgICAgLy8gV2luSU5ldCB0byBkb3dubG9hZCB0aGUgbW92aWUsIHNv
IHdlIG5lZWQgdG8gY29waWUgYW55IGNvb2tpZXMgbmVlZGVkIHRvCisgICAgLy8gZG93bmxvYWQg
dGhlIG1vdmllIGludG8gV2luSW5ldCBiZWZvcmUgYXNraW5nIFF1aWNrVGltZSB0byBvcGVuIGl0
LgorICAgIEZyYW1lKiBmcmFtZSA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKSA/IG1fcGxheWVyLT5m
cmFtZVZpZXcoKS0+ZnJhbWUoKSA6IDA7CisgICAgaWYgKCFmcmFtZSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgaWYgKGZyYW1lLT5wYWdlKCkgJiYgIWZyYW1lLT5wYWdlKCktPmNvb2tpZUVuYWJs
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgS1VSTCBtb3ZpZVVSTCA9IEtVUkwoS1VSTCgp
LCB1cmwpOworICAgIFZlY3RvcjxDb29raWU+IGRvY3VtZW50Q29va2llczsKKyAgICBpZiAoIWdl
dFJhd0Nvb2tpZXMoZnJhbWUtPmRvY3VtZW50KCksIG1vdmllVVJMLCBkb2N1bWVudENvb2tpZXMp
KQorICAgICAgICByZXR1cm47CisKKyAgICBmb3IgKHVuc2lnbmVkIG5keCA9IDA7IG5keCA8IGRv
Y3VtZW50Q29va2llcy5zaXplKCk7IG5keCsrKSB7CisgICAgICAgIENvb2tpZSBjb29raWUgPSBk
b2N1bWVudENvb2tpZXNbbmR4XTsKKworICAgICAgICBpZiAoY29va2llLm5hbWUuaXNFbXB0eSgp
KQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgU3RyaW5nIGNvb2tpZVN0cmluZyA9
IGNvb2tpZS5uYW1lOworICAgICAgICBpZiAoIWNvb2tpZS52YWx1ZS5pc0VtcHR5KCkpCisgICAg
ICAgICAgICBjb29raWVTdHJpbmcgKz0gIj0iICsgY29va2llLnZhbHVlICsgIjsiOworCisgICAg
ICAgIFN0cmluZyBjb29raWVVUkw7CisgICAgICAgIGlmICghY29va2llLmRvbWFpbi5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGNvb2tpZVVSTCA9IGNvb2tpZS5kb21haW47CisgICAgICAgICAg
ICBpZiAoY29va2llVVJMLmZpbmQoJy4nKSA9PSAwKQorICAgICAgICAgICAgICAgIGNvb2tpZVVS
TC5yZW1vdmUoMCk7CisgICAgICAgICAgICBjb29raWVVUkwuaW5zZXJ0KG1vdmllVVJMLnByb3Rv
Y29sKCkgKyAiOi8vIiwgMCk7CisgICAgICAgICAgICBpZiAoY29va2llLnBhdGgubGVuZ3RoKCkg
PiAxKQorICAgICAgICAgICAgICAgIGNvb2tpZVVSTCArPSBjb29raWUucGF0aDsKKyAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICBjb29raWVVUkwgPSBtb3ZpZVVSTDsKKworICAgICAgICBpbnRl
cm5ldFNldENvb2tpZUV4KGNvb2tpZVVSTC5jaGFyYWN0ZXJzV2l0aE51bGxUZXJtaW5hdGlvbigp
LCAwLCBjb29raWVTdHJpbmcuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgMCk7
CisgICAgfQorfQorCiB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBTdHJpbmcm
IHVybCkKIHsKICAgICBpZiAoIVFUTW92aWVXaW46OmluaXRpYWxpemVRdWlja1RpbWUoKSkgewpA
QCAtMTc0LDYgKzIzOSw4IEBAIHZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpsb2FkKGNvbnN0IFN0
cmkKICAgICB9CiAgICAgY2FuY2VsU2VlaygpOwogCisgICAgc2V0dXBDb29raWVzRm9yUXVpY2tU
aW1lKHVybCk7CisKICAgICBtX3F0TW92aWUuc2V0KG5ldyBRVE1vdmllV2luKHRoaXMpKTsKICAg
ICBtX3F0TW92aWUtPmxvYWQodXJsLmNoYXJhY3RlcnMoKSwgdXJsLmxlbmd0aCgpLCBtX3BsYXll
ci0+cHJlc2VydmVzUGl0Y2goKSk7CiAgICAgbV9xdE1vdmllLT5zZXRWb2x1bWUobV9wbGF5ZXIt
PnZvbHVtZSgpKTsKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxh
eWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1aWNrVGltZVdpbi5oCShyZXZpc2lvbiA1
NDQzOCkKKysrIFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0
ZVF1aWNrVGltZVdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNTUsNiArMTU1LDkgQEAgcHJpdmF0
ZToKICAgICB2b2lkIGNyZWF0ZUxheWVyRm9yTW92aWUoKTsKICAgICB2b2lkIGRlc3Ryb3lMYXll
ckZvck1vdmllKCk7CiAKKyAgICB2b2lkIHNldHVwQ29va2llc0ZvclF1aWNrVGltZShjb25zdCBT
dHJpbmcmIHVybCk7CisgICAgU3RyaW5nIGRhdGVTdHJpbmdGcm9tVGltZShDRkFic29sdXRlVGlt
ZSB0aW1lKTsKKwogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBPd25QdHI8UVRNb3Zp
ZVdpbj4gbV9xdE1vdmllOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50128</attachid>
            <date>2010-03-05 14:55:57 -0800</date>
            <delta_ts>2010-03-05 16:15:35 -0800</delta_ts>
            <desc>Updated patch</desc>
            <filename>patch_8.txt</filename>
            <type>text/plain</type>
            <size>6039</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcAkocmV2aXNpb24gNTU1OTMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMjAgQEAKICNpZiBFTkFCTEUo
VklERU8pCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgiCiAKKyNp
bmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJRVE1vdmllV2luLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiU3RyaW5n
QnVpbGRlci5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lUmFuZ2Vz
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxXaW5pbmV0Lmg+CiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtNTksNiArNjYsOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1NPRlRfTElOS19MSUJSQVJZKFdpbmluZXQpCitTT0ZU
X0xJTksoV2luaW5ldCwgSW50ZXJuZXRTZXRDb29raWVFeFcsIERXT1JELCBXSU5BUEksIChMUENX
U1RSIGxwc3pVcmwsIExQQ1dTVFIgbHBzekNvb2tpZU5hbWUsIExQQ1dTVFIgbHBzekNvb2tpZURh
dGEsIERXT1JEIGR3RmxhZ3MsIERXT1JEX1BUUiBkd1Jlc2VydmVkKSwgKGxwc3pVcmwsIGxwc3pD
b29raWVOYW1lLCBscHN6Q29va2llRGF0YSwgZHdGbGFncywgZHdSZXNlcnZlZCkpCisKIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQ
bGF5ZXIqIHBsYXllcikgCiB7IAogICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHBs
YXllcik7CkBAIC0xNTksNiArMTY5LDk3IEBAIHZvaWQgVGFza1RpbWVyOjpmaXJlZCgpCiAgICAg
UVRNb3ZpZVdpbjo6dGFza1RpbWVyRmlyZWQoKTsKIH0KIAorU3RyaW5nIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cmZjMjYxNkRhdGVTdHJpbmdGcm9tVGltZShDRkFic29sdXRlVGltZSB0aW1lKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYXlTdHJzW10gPSB7Ik1vbiIsICJUdWUiLCAiV2VkIiwg
IlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biJ9OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBtb250
aFN0cnNbXSA9IHsiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVs
IiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMifTsKKyAgICBzdGF0aWMgY29uc3Qg
Q0ZTdHJpbmdSZWYgZGF0ZUZvcm1hdFN0cmluZyA9IENGU1RSKCIlcywgJTAyZCAlcyAlMDRkICUw
MmQ6JTAyZDolMDJkIEdNVCIpOworCXN0YXRpYyBDRlRpbWVab25lUmVmIGdtdFRpbWU7CisgICAg
aWYgKCFnbXRUaW1lKQorICAgICAgICBnbXRUaW1lID0gQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0KCk7
CisKKyAgICBDRkdyZWdvcmlhbkRhdGUgZGF0ZVZhbHVlID0gQ0ZBYnNvbHV0ZVRpbWVHZXRHcmVn
b3JpYW5EYXRlKHRpbWUsIGdtdFRpbWUpOyAKKyAgICBpZiAoIUNGR3JlZ29yaWFuRGF0ZUlzVmFs
aWQoZGF0ZVZhbHVlLCBrQ0ZHcmVnb3JpYW5BbGxVbml0cykpCisgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIHRpbWUgPSBDRkdyZWdvcmlhbkRhdGVHZXRBYnNvbHV0ZVRpbWUoZGF0ZVZh
bHVlLCBnbXRUaW1lKTsKKyAgICBTSW50MzIgZGF5ID0gQ0ZBYnNvbHV0ZVRpbWVHZXREYXlPZldl
ZWsodGltZSwgMCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRhdGVDRlN0cmluZyhB
ZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhGb3JtYXQoMCwgMCwgZGF0ZUZvcm1hdFN0cmluZywg
ZGF5U3Ryc1tkYXkgLSAxXSwgZGF0ZVZhbHVlLmRheSwgCisgICAgICAgIG1vbnRoU3Ryc1tkYXRl
VmFsdWUubW9udGggLSAxXSwgZGF0ZVZhbHVlLnllYXIsIGRhdGVWYWx1ZS5ob3VyLCBkYXRlVmFs
dWUubWludXRlLCAoaW50KWRhdGVWYWx1ZS5zZWNvbmQpKTsKKyAgICByZXR1cm4gZGF0ZUNGU3Ry
aW5nLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBhZGRDb29raWVQYXJhbShTdHJpbmdCdWlsZGVy
JiBjb29raWVCdWlsZGVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUp
Cit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBJ
ZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgYWRkZWQsIHRlcm1pbmF0ZSB0aGUgcHJl
dmlvdXMgb25lLgorICAgIGlmIChjb29raWVCdWlsZGVyLmxlbmd0aCgpKQorICAgICAgICBjb29r
aWVCdWlsZGVyLmFwcGVuZCgiOyAiKTsKKworICAgIC8vIEFkZCBwYXJhbWV0ZXIgbmFtZSwgYW5k
IHZhbHVlIGlmIHRoZXJlIGlzIG9uZS4KKyAgICBjb29raWVCdWlsZGVyLmFwcGVuZChuYW1lKTsK
KyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBjb29raWVCdWlsZGVyLmFwcGVu
ZCgiPSIpOworICAgICAgICBjb29raWVCdWlsZGVyLmFwcGVuZCh2YWx1ZSk7CisgICAgfQorfQor
CisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcENvb2tpZXNGb3JRdWlja1RpbWUoY29u
c3QgU3RyaW5nJiB1cmwpCit7CisgICAgLy8gV2ViQ29yZSBsb2FkZWQgdGhlIHBhZ2Ugd2l0aCB0
aGUgbW92aWUgdXJsIHdpdGggQ0ZOZXR3b3JrIGJ1dCBRdWlja1RpbWUgd2lsbCAKKyAgICAvLyB1
c2UgV2luSU5ldCB0byBkb3dubG9hZCB0aGUgbW92aWUsIHNvIHdlIG5lZWQgdG8gY29waWUgYW55
IGNvb2tpZXMgbmVlZGVkIHRvCisgICAgLy8gZG93bmxvYWQgdGhlIG1vdmllIGludG8gV2luSW5l
dCBiZWZvcmUgYXNraW5nIFF1aWNrVGltZSB0byBvcGVuIGl0LgorICAgIEZyYW1lKiBmcmFtZSA9
IG1fcGxheWVyLT5mcmFtZVZpZXcoKSA/IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZnJhbWUoKSA6
IDA7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBhZ2UoKSB8fCAhZnJhbWUtPnBhZ2UoKS0+
Y29va2llRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBLVVJMIG1vdmllVVJMID0g
S1VSTChLVVJMKCksIHVybCk7CisgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVzOwor
ICAgIGlmICghZ2V0UmF3Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRvY3Vt
ZW50Q29va2llcykpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgbmR4ID0g
MDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsKKyAgICAgICAgY29uc3Qg
Q29va2llJiBjb29raWUgPSBkb2N1bWVudENvb2tpZXNbbmR4XTsKKworICAgICAgICBpZiAoY29v
a2llLm5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgLy8g
QnVpbGQgdXAgdGhlIGNvb2tpZSBzdHJpbmcgd2l0aCBhcyBtdWNoIGluZm9ybWF0aW9uIGFzIHdl
IGNhbiBnZXQgc28gV2luSU5ldAorICAgICAgICAvLyBrbm93cyB3aGF0IHRvIGRvIHdpdGggaXQu
CisgICAgICAgIFN0cmluZ0J1aWxkZXIgY29va2llQnVpbGRlcjsKKyAgICAgICAgYWRkQ29va2ll
UGFyYW0oY29va2llQnVpbGRlciwgY29va2llLm5hbWUsIGNvb2tpZS52YWx1ZSk7CisgICAgICAg
IGFkZENvb2tpZVBhcmFtKGNvb2tpZUJ1aWxkZXIsICJwYXRoIiwgY29va2llLnBhdGgpOworICAg
ICAgICBpZiAoY29va2llLmV4cGlyZXMpIAorICAgICAgICAgICAgYWRkQ29va2llUGFyYW0oY29v
a2llQnVpbGRlciwgImV4cGlyZXMiLCByZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKGNvb2tpZS5l
eHBpcmVzKSk7CisgICAgICAgIGlmIChjb29raWUuaHR0cE9ubHkpIAorICAgICAgICAgICAgYWRk
Q29va2llUGFyYW0oY29va2llQnVpbGRlciwgImh0dHBPbmx5IiwgU3RyaW5nKCkpOworICAgICAg
ICBjb29raWVCdWlsZGVyLmFwcGVuZCgiOyIpOworCisgICAgICAgIFN0cmluZyBjb29raWVVUkw7
CisgICAgICAgIGlmICghY29va2llLmRvbWFpbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIFN0
cmluZ0J1aWxkZXIgdXJsQnVpbGRlcjsKKworICAgICAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQo
bW92aWVVUkwucHJvdG9jb2woKSk7CisgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZCgiOi8v
Iik7CisgICAgICAgICAgICBpZiAoY29va2llLmRvbWFpblswXSA9PSAnLicpCisgICAgICAgICAg
ICAgICAgdXJsQnVpbGRlci5hcHBlbmQoY29va2llLmRvbWFpbi5zdWJzdHJpbmcoMSkpOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKGNvb2tpZS5k
b21haW4pOworICAgICAgICAgICAgaWYgKGNvb2tpZS5wYXRoLmxlbmd0aCgpID4gMSkKKyAgICAg
ICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChjb29raWUucGF0aCk7CisKKyAgICAgICAgICAg
IGNvb2tpZVVSTCA9IHVybEJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBjb29raWVVUkwgPSBtb3ZpZVVSTDsKKworICAgICAgICBJbnRlcm5ldFNldENvb2tp
ZUV4Vyhjb29raWVVUkwuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgY29va2ll
QnVpbGRlci50b1N0cmluZygpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAsIDAp
OworICAgIH0KK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3RyaW5n
JiB1cmwpCiB7CiAgICAgaWYgKCFRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkpIHsK
QEAgLTE4MSw2ICsyODIsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25zdCBT
dHJpCiAgICAgfQogICAgIGNhbmNlbFNlZWsoKTsKIAorICAgIHNldFVwQ29va2llc0ZvclF1aWNr
VGltZSh1cmwpOworCiAgICAgbV9xdE1vdmllLnNldChuZXcgUVRNb3ZpZVdpbih0aGlzKSk7CiAg
ICAgbV9xdE1vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVybC5sZW5ndGgoKSwgbV9wbGF5
ZXItPnByZXNlcnZlc1BpdGNoKCkpOwogICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKG1fcGxheWVy
LT52b2x1bWUoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBs
YXllclByaXZhdGVRdWlja1RpbWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaAkocmV2aXNpb24g
NTU1OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZh
dGVRdWlja1RpbWVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw5IEBAIHByaXZh
dGU6CiAgICAgdm9pZCBjcmVhdGVMYXllckZvck1vdmllKCk7CiAgICAgdm9pZCBkZXN0cm95TGF5
ZXJGb3JNb3ZpZSgpOwogCisgICAgdm9pZCBzZXRVcENvb2tpZXNGb3JRdWlja1RpbWUoY29uc3Qg
U3RyaW5nJiB1cmwpOworICAgIFN0cmluZyByZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENGQWJz
b2x1dGVUaW1lKTsKKwogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBPd25QdHI8UVRN
b3ZpZVdpbj4gbV9xdE1vdmllOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50138</attachid>
            <date>2010-03-05 16:15:35 -0800</date>
            <delta_ts>2010-03-08 09:37:28 -0800</delta_ts>
            <desc>no-tabs patch</desc>
            <filename>patch_8.txt</filename>
            <type>text/plain</type>
            <size>6042</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvd2luL01lZGlhUGxheWVyUHJpdmF0ZVF1
aWNrVGltZVdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy93
aW4vTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmNwcAkocmV2aXNpb24gNTU1OTMpCisr
KyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1Rp
bWVXaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCwxMyArMjgsMjAgQEAKICNpZiBFTkFCTEUo
VklERU8pCiAjaW5jbHVkZSAiTWVkaWFQbGF5ZXJQcml2YXRlUXVpY2tUaW1lV2luLmgiCiAKKyNp
bmNsdWRlICJDb29raWUuaCIKKyNpbmNsdWRlICJDb29raWVKYXIuaCIKKyNpbmNsdWRlICJGcmFt
ZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5o
IgogI2luY2x1ZGUgIktVUkwuaCIKICNpbmNsdWRlICJRVE1vdmllV2luLmgiCiAjaW5jbHVkZSAi
U2Nyb2xsVmlldy5oIgorI2luY2x1ZGUgIlNvZnRMaW5raW5nLmgiCisjaW5jbHVkZSAiU3RyaW5n
QnVpbGRlci5oIgogI2luY2x1ZGUgIlN0cmluZ0hhc2guaCIKICNpbmNsdWRlICJUaW1lUmFuZ2Vz
LmgiCiAjaW5jbHVkZSAiVGltZXIuaCIKKyNpbmNsdWRlIDxXaW5pbmV0Lmg+CiAjaW5jbHVkZSA8
d3RmL0N1cnJlbnRUaW1lLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3
dGYvTWF0aEV4dHJhcy5oPgpAQCAtNTksNiArNjYsOSBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK1NPRlRfTElOS19MSUJSQVJZKFdpbmluZXQpCitTT0ZU
X0xJTksoV2luaW5ldCwgSW50ZXJuZXRTZXRDb29raWVFeFcsIERXT1JELCBXSU5BUEksIChMUENX
U1RSIGxwc3pVcmwsIExQQ1dTVFIgbHBzekNvb2tpZU5hbWUsIExQQ1dTVFIgbHBzekNvb2tpZURh
dGEsIERXT1JEIGR3RmxhZ3MsIERXT1JEX1BUUiBkd1Jlc2VydmVkKSwgKGxwc3pVcmwsIGxwc3pD
b29raWVOYW1lLCBscHN6Q29va2llRGF0YSwgZHdGbGFncywgZHdSZXNlcnZlZCkpCisKIE1lZGlh
UGxheWVyUHJpdmF0ZUludGVyZmFjZSogTWVkaWFQbGF5ZXJQcml2YXRlOjpjcmVhdGUoTWVkaWFQ
bGF5ZXIqIHBsYXllcikgCiB7IAogICAgIHJldHVybiBuZXcgTWVkaWFQbGF5ZXJQcml2YXRlKHBs
YXllcik7CkBAIC0xNTksNiArMTY5LDk3IEBAIHZvaWQgVGFza1RpbWVyOjpmaXJlZCgpCiAgICAg
UVRNb3ZpZVdpbjo6dGFza1RpbWVyRmlyZWQoKTsKIH0KIAorU3RyaW5nIE1lZGlhUGxheWVyUHJp
dmF0ZTo6cmZjMjYxNkRhdGVTdHJpbmdGcm9tVGltZShDRkFic29sdXRlVGltZSB0aW1lKQorewor
ICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYXlTdHJzW10gPSB7Ik1vbiIsICJUdWUiLCAiV2VkIiwg
IlRodSIsICJGcmkiLCAiU2F0IiwgIlN1biJ9OworICAgIHN0YXRpYyBjb25zdCBjaGFyKiBtb250
aFN0cnNbXSA9IHsiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLCAiSnVs
IiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMifTsKKyAgICBzdGF0aWMgY29uc3Qg
Q0ZTdHJpbmdSZWYgZGF0ZUZvcm1hdFN0cmluZyA9IENGU1RSKCIlcywgJTAyZCAlcyAlMDRkICUw
MmQ6JTAyZDolMDJkIEdNVCIpOworICAgIHN0YXRpYyBDRlRpbWVab25lUmVmIGdtdFRpbWU7Cisg
ICAgaWYgKCFnbXRUaW1lKQorICAgICAgICBnbXRUaW1lID0gQ0ZUaW1lWm9uZUNvcHlEZWZhdWx0
KCk7CisKKyAgICBDRkdyZWdvcmlhbkRhdGUgZGF0ZVZhbHVlID0gQ0ZBYnNvbHV0ZVRpbWVHZXRH
cmVnb3JpYW5EYXRlKHRpbWUsIGdtdFRpbWUpOyAKKyAgICBpZiAoIUNGR3JlZ29yaWFuRGF0ZUlz
VmFsaWQoZGF0ZVZhbHVlLCBrQ0ZHcmVnb3JpYW5BbGxVbml0cykpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIHRpbWUgPSBDRkdyZWdvcmlhbkRhdGVHZXRBYnNvbHV0ZVRpbWUoZGF0
ZVZhbHVlLCBnbXRUaW1lKTsKKyAgICBTSW50MzIgZGF5ID0gQ0ZBYnNvbHV0ZVRpbWVHZXREYXlP
ZldlZWsodGltZSwgMCk7CisKKyAgICBSZXRhaW5QdHI8Q0ZTdHJpbmdSZWY+IGRhdGVDRlN0cmlu
ZyhBZG9wdENGLCBDRlN0cmluZ0NyZWF0ZVdpdGhGb3JtYXQoMCwgMCwgZGF0ZUZvcm1hdFN0cmlu
ZywgZGF5U3Ryc1tkYXkgLSAxXSwgZGF0ZVZhbHVlLmRheSwgCisgICAgICAgIG1vbnRoU3Ryc1tk
YXRlVmFsdWUubW9udGggLSAxXSwgZGF0ZVZhbHVlLnllYXIsIGRhdGVWYWx1ZS5ob3VyLCBkYXRl
VmFsdWUubWludXRlLCAoaW50KWRhdGVWYWx1ZS5zZWNvbmQpKTsKKyAgICByZXR1cm4gZGF0ZUNG
U3RyaW5nLmdldCgpOworfQorCitzdGF0aWMgdm9pZCBhZGRDb29raWVQYXJhbShTdHJpbmdCdWls
ZGVyJiBjb29raWVCdWlsZGVyLCBjb25zdCBTdHJpbmcmIG5hbWUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCit7CisgICAgaWYgKG5hbWUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBJZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBwYXJhbWV0ZXIgYWRkZWQsIHRlcm1pbmF0ZSB0aGUg
cHJldmlvdXMgb25lLgorICAgIGlmIChjb29raWVCdWlsZGVyLmxlbmd0aCgpKQorICAgICAgICBj
b29raWVCdWlsZGVyLmFwcGVuZCgiOyAiKTsKKworICAgIC8vIEFkZCBwYXJhbWV0ZXIgbmFtZSwg
YW5kIHZhbHVlIGlmIHRoZXJlIGlzIG9uZS4KKyAgICBjb29raWVCdWlsZGVyLmFwcGVuZChuYW1l
KTsKKyAgICBpZiAoIXZhbHVlLmlzRW1wdHkoKSkgeworICAgICAgICBjb29raWVCdWlsZGVyLmFw
cGVuZCgiPSIpOworICAgICAgICBjb29raWVCdWlsZGVyLmFwcGVuZCh2YWx1ZSk7CisgICAgfQor
fQorCisKK3ZvaWQgTWVkaWFQbGF5ZXJQcml2YXRlOjpzZXRVcENvb2tpZXNGb3JRdWlja1RpbWUo
Y29uc3QgU3RyaW5nJiB1cmwpCit7CisgICAgLy8gV2ViQ29yZSBsb2FkZWQgdGhlIHBhZ2Ugd2l0
aCB0aGUgbW92aWUgdXJsIHdpdGggQ0ZOZXR3b3JrIGJ1dCBRdWlja1RpbWUgd2lsbCAKKyAgICAv
LyB1c2UgV2luSU5ldCB0byBkb3dubG9hZCB0aGUgbW92aWUsIHNvIHdlIG5lZWQgdG8gY29waWUg
YW55IGNvb2tpZXMgbmVlZGVkIHRvCisgICAgLy8gZG93bmxvYWQgdGhlIG1vdmllIGludG8gV2lu
SW5ldCBiZWZvcmUgYXNraW5nIFF1aWNrVGltZSB0byBvcGVuIGl0LgorICAgIEZyYW1lKiBmcmFt
ZSA9IG1fcGxheWVyLT5mcmFtZVZpZXcoKSA/IG1fcGxheWVyLT5mcmFtZVZpZXcoKS0+ZnJhbWUo
KSA6IDA7CisgICAgaWYgKCFmcmFtZSB8fCAhZnJhbWUtPnBhZ2UoKSB8fCAhZnJhbWUtPnBhZ2Uo
KS0+Y29va2llRW5hYmxlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBLVVJMIG1vdmllVVJM
ID0gS1VSTChLVVJMKCksIHVybCk7CisgICAgVmVjdG9yPENvb2tpZT4gZG9jdW1lbnRDb29raWVz
OworICAgIGlmICghZ2V0UmF3Q29va2llcyhmcmFtZS0+ZG9jdW1lbnQoKSwgbW92aWVVUkwsIGRv
Y3VtZW50Q29va2llcykpCisgICAgICAgIHJldHVybjsKKworICAgIGZvciAodW5zaWduZWQgbmR4
ID0gMDsgbmR4IDwgZG9jdW1lbnRDb29raWVzLnNpemUoKTsgbmR4KyspIHsKKyAgICAgICAgY29u
c3QgQ29va2llJiBjb29raWUgPSBkb2N1bWVudENvb2tpZXNbbmR4XTsKKworICAgICAgICBpZiAo
Y29va2llLm5hbWUuaXNFbXB0eSgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Ly8gQnVpbGQgdXAgdGhlIGNvb2tpZSBzdHJpbmcgd2l0aCBhcyBtdWNoIGluZm9ybWF0aW9uIGFz
IHdlIGNhbiBnZXQgc28gV2luSU5ldAorICAgICAgICAvLyBrbm93cyB3aGF0IHRvIGRvIHdpdGgg
aXQuCisgICAgICAgIFN0cmluZ0J1aWxkZXIgY29va2llQnVpbGRlcjsKKyAgICAgICAgYWRkQ29v
a2llUGFyYW0oY29va2llQnVpbGRlciwgY29va2llLm5hbWUsIGNvb2tpZS52YWx1ZSk7CisgICAg
ICAgIGFkZENvb2tpZVBhcmFtKGNvb2tpZUJ1aWxkZXIsICJwYXRoIiwgY29va2llLnBhdGgpOwor
ICAgICAgICBpZiAoY29va2llLmV4cGlyZXMpIAorICAgICAgICAgICAgYWRkQ29va2llUGFyYW0o
Y29va2llQnVpbGRlciwgImV4cGlyZXMiLCByZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKGNvb2tp
ZS5leHBpcmVzKSk7CisgICAgICAgIGlmIChjb29raWUuaHR0cE9ubHkpIAorICAgICAgICAgICAg
YWRkQ29va2llUGFyYW0oY29va2llQnVpbGRlciwgImh0dHBPbmx5IiwgU3RyaW5nKCkpOworICAg
ICAgICBjb29raWVCdWlsZGVyLmFwcGVuZCgiOyIpOworCisgICAgICAgIFN0cmluZyBjb29raWVV
Ukw7CisgICAgICAgIGlmICghY29va2llLmRvbWFpbi5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAg
IFN0cmluZ0J1aWxkZXIgdXJsQnVpbGRlcjsKKworICAgICAgICAgICAgdXJsQnVpbGRlci5hcHBl
bmQobW92aWVVUkwucHJvdG9jb2woKSk7CisgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZCgi
Oi8vIik7CisgICAgICAgICAgICBpZiAoY29va2llLmRvbWFpblswXSA9PSAnLicpCisgICAgICAg
ICAgICAgICAgdXJsQnVpbGRlci5hcHBlbmQoY29va2llLmRvbWFpbi5zdWJzdHJpbmcoMSkpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHVybEJ1aWxkZXIuYXBwZW5kKGNvb2tp
ZS5kb21haW4pOworICAgICAgICAgICAgaWYgKGNvb2tpZS5wYXRoLmxlbmd0aCgpID4gMSkKKyAg
ICAgICAgICAgICAgICB1cmxCdWlsZGVyLmFwcGVuZChjb29raWUucGF0aCk7CisKKyAgICAgICAg
ICAgIGNvb2tpZVVSTCA9IHVybEJ1aWxkZXIudG9TdHJpbmcoKTsKKyAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICBjb29raWVVUkwgPSBtb3ZpZVVSTDsKKworICAgICAgICBJbnRlcm5ldFNldENv
b2tpZUV4Vyhjb29raWVVUkwuY2hhcmFjdGVyc1dpdGhOdWxsVGVybWluYXRpb24oKSwgMCwgY29v
a2llQnVpbGRlci50b1N0cmluZygpLmNoYXJhY3RlcnNXaXRoTnVsbFRlcm1pbmF0aW9uKCksIDAs
IDApOworICAgIH0KK30KKwogdm9pZCBNZWRpYVBsYXllclByaXZhdGU6OmxvYWQoY29uc3QgU3Ry
aW5nJiB1cmwpCiB7CiAgICAgaWYgKCFRVE1vdmllV2luOjppbml0aWFsaXplUXVpY2tUaW1lKCkp
IHsKQEAgLTE4MSw2ICsyODIsOCBAQCB2b2lkIE1lZGlhUGxheWVyUHJpdmF0ZTo6bG9hZChjb25z
dCBTdHJpCiAgICAgfQogICAgIGNhbmNlbFNlZWsoKTsKIAorICAgIHNldFVwQ29va2llc0ZvclF1
aWNrVGltZSh1cmwpOworCiAgICAgbV9xdE1vdmllLnNldChuZXcgUVRNb3ZpZVdpbih0aGlzKSk7
CiAgICAgbV9xdE1vdmllLT5sb2FkKHVybC5jaGFyYWN0ZXJzKCksIHVybC5sZW5ndGgoKSwgbV9w
bGF5ZXItPnByZXNlcnZlc1BpdGNoKCkpOwogICAgIG1fcXRNb3ZpZS0+c2V0Vm9sdW1lKG1fcGxh
eWVyLT52b2x1bWUoKSk7CkluZGV4OiBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRp
YVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclByaXZhdGVRdWlja1RpbWVXaW4uaAkocmV2aXNp
b24gNTU1OTMpCisrKyBXZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3dpbi9NZWRpYVBsYXllclBy
aXZhdGVRdWlja1RpbWVXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMTU4LDYgKzE1OCw5IEBAIHBy
aXZhdGU6CiAgICAgdm9pZCBjcmVhdGVMYXllckZvck1vdmllKCk7CiAgICAgdm9pZCBkZXN0cm95
TGF5ZXJGb3JNb3ZpZSgpOwogCisgICAgdm9pZCBzZXRVcENvb2tpZXNGb3JRdWlja1RpbWUoY29u
c3QgU3RyaW5nJiB1cmwpOworICAgIFN0cmluZyByZmMyNjE2RGF0ZVN0cmluZ0Zyb21UaW1lKENG
QWJzb2x1dGVUaW1lKTsKKwogICAgIE1lZGlhUGxheWVyKiBtX3BsYXllcjsKICAgICBPd25QdHI8
UVRNb3ZpZVdpbj4gbV9xdE1vdmllOwogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01QT1NJVElORykK
</data>

          </attachment>
      

    </bug>

</bugzilla>