<?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>33268</bug_id>
          
          <creation_ts>2010-01-06 13:52:49 -0800</creation_ts>
          <short_desc>make JPEG image dcoder read segmented SharedBuffer</short_desc>
          <delta_ts>2010-09-23 13:19:35 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Images</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yong Li">yong.li.webkit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>abarth</cc>
    
    <cc>dglazkov</cc>
    
    <cc>pkasting</cc>
    
    <cc>skyul</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>177742</commentid>
    <comment_count>0</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 13:52:49 -0800</bug_when>
    <thetext>patch is coming</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177751</commentid>
    <comment_count>1</comment_count>
      <attachid>45993</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 13:58:41 -0800</bug_when>
    <thetext>Created attachment 45993
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177753</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-06 13:59:19 -0800</bug_when>
    <thetext>Attachment 45993 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:148:  num_bytes is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:168:  Missing space before ( in while(  [whitespace/parens] [5]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177766</commentid>
    <comment_count>3</comment_count>
      <attachid>45993</attachid>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-06 14:13:52 -0800</bug_when>
    <thetext>Comment on attachment 45993
the patch

Other than the style nits the bot pointed out, my comments:

&gt; +unsigned SharedBuffer::extract(char* buffer, unsigned bufferLength, unsigned from)

&quot;from&quot; (and to some degree &quot;buffer&quot;) are a little vague.  How about:

unsigned SharedBuffer::copyToContiguousBuffer(char* destBuffer, size_t bufferLength, size_t readOffset)

&gt; +class SharedBufferDataWalker {

Not totally obvious what this class does, maybe you can write a brief comment above it?

&gt; +        unsigned lastOffset = -1;
&gt; +        Vector&lt;unsigned char, 8192&gt; buffer;

Is it a potential perf issue that we can decode at most 8K at a time?

&gt; +        SharedBufferDataWalker segment;

&quot;segment&quot; is kind of odd as a name... why not &quot;dataWalker&quot; or something?

&gt; +        while(ture) {

Won&apos;t compile (typo)

&gt; +            if (readOffset == lastOffset &amp;&amp; m_bufferLength == data.size())
&gt; +                break;
&gt; +
&gt; +            unsigned segmentLength = 0;
&gt; +            if (readOffset == lastOffset) {

Could just move the first conditional here inside the second conditional.

&gt; +                // Need more data to proceed
&gt; +                if (buffer.isEmpty()) {
&gt; +                    segment.set(data, readOffset);
&gt; +                    segmentLength = segment.length();
&gt; +                    buffer.append(segment.data(), segmentLength);
&gt; +                }
&gt; +                segment.set(data, readOffset + buffer.size());
&gt; +                segmentLength = segment.length();
&gt; +                buffer.append(segment.data(), segmentLength);
&gt; +                m_info.src-&gt;bytes_in_buffer += segmentLength;
&gt; +                m_info.src-&gt;next_input_byte = (JOCTET*)buffer.data();
&gt; +                m_bufferLength = readOffset + buffer.size();
&gt; +            } else {
&gt; +                if (!buffer.isEmpty())
&gt; +                    buffer.clear();
&gt; +
&gt; +                lastOffset = readOffset;
&gt; +
&gt; +                segment.set(data, readOffset);
&gt; +                segmentLength = segment.length();
&gt; +
&gt; +                unsigned totalSize = readOffset + segmentLength;
&gt; +                m_info.src-&gt;bytes_in_buffer += totalSize - m_bufferLength;
&gt; +                m_info.src-&gt;next_input_byte = (JOCTET*)segment.data();
&gt; +
&gt; +                // If we still have bytes to skip, try to skip those now.
&gt; +                if (m_bytesToSkip)
&gt; +                    skipBytes(m_bytesToSkip);
&gt; +
&gt; +                m_bufferLength = totalSize;
&gt; +            }

I confess, I can&apos;t totally follow all this even after peering through it a few times.  There are too many different buffers and lengths.  Maybe some block comment somewhere explaining the algorithm, I dunno.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177771</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-06 14:15:12 -0800</bug_when>
    <thetext>Attachment 45993 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/165045</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177790</commentid>
    <comment_count>5</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 14:46:52 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 45993 [details])
&gt; Other than the style nits the bot pointed out, my comments:
&gt; 
&gt; &gt; +unsigned SharedBuffer::extract(char* buffer, unsigned bufferLength, unsigned from)
&gt; 
&gt; &quot;from&quot; (and to some degree &quot;buffer&quot;) are a little vague.  How about:
&gt; 
&gt; unsigned SharedBuffer::copyToContiguousBuffer(char* destBuffer, size_t
&gt; bufferLength, size_t readOffset)

&quot;readOffset&quot; is good. was thinking &quot;offset&quot; is confusing.

&gt; 
&gt; &gt; +class SharedBufferDataWalker {
&gt; 
&gt; Not totally obvious what this class does, maybe you can write a brief comment
&gt; above it?
sure.
&gt; 
&gt; &gt; +        unsigned lastOffset = -1;
&gt; &gt; +        Vector&lt;unsigned char, 8192&gt; buffer;
&gt; 
&gt; Is it a potential perf issue that we can decode at most 8K at a time?

A segment in SharedBuffer is 4k. in the case JPEG reader needs 2 segments to continue moving, 8k is a good number. The vector can grow when 8k is not enough. but I think 8k is better than 0 for performance (no need to call malloc in most cases)

&gt; 
&gt; &gt; +        SharedBufferDataWalker segment;
&gt; 
&gt; &quot;segment&quot; is kind of odd as a name... why not &quot;dataWalker&quot; or something?
ok.
&gt; 
&gt; &gt; +        while(ture) {
&gt; 
&gt; Won&apos;t compile (typo)
found this too. just replaced for(;;) with it before making the patch
&gt; 
&gt; &gt; +            if (readOffset == lastOffset &amp;&amp; m_bufferLength == data.size())
&gt; &gt; +                break;
&gt; &gt; +
&gt; &gt; +            unsigned segmentLength = 0;
&gt; &gt; +            if (readOffset == lastOffset) {
&gt; 
&gt; Could just move the first conditional here inside the second conditional.
yes.
&gt; 
&gt; &gt; +                // Need more data to proceed
&gt; &gt; +                if (buffer.isEmpty()) {
&gt; &gt; +                    segment.set(data, readOffset);
&gt; &gt; +                    segmentLength = segment.length();
&gt; &gt; +                    buffer.append(segment.data(), segmentLength);
&gt; &gt; +                }
&gt; &gt; +                segment.set(data, readOffset + buffer.size());
&gt; &gt; +                segmentLength = segment.length();
&gt; &gt; +                buffer.append(segment.data(), segmentLength);
&gt; &gt; +                m_info.src-&gt;bytes_in_buffer += segmentLength;
&gt; &gt; +                m_info.src-&gt;next_input_byte = (JOCTET*)buffer.data();
&gt; &gt; +                m_bufferLength = readOffset + buffer.size();
&gt; &gt; +            } else {
&gt; &gt; +                if (!buffer.isEmpty())
&gt; &gt; +                    buffer.clear();
&gt; &gt; +
&gt; &gt; +                lastOffset = readOffset;
&gt; &gt; +
&gt; &gt; +                segment.set(data, readOffset);
&gt; &gt; +                segmentLength = segment.length();
&gt; &gt; +
&gt; &gt; +                unsigned totalSize = readOffset + segmentLength;
&gt; &gt; +                m_info.src-&gt;bytes_in_buffer += totalSize - m_bufferLength;
&gt; &gt; +                m_info.src-&gt;next_input_byte = (JOCTET*)segment.data();
&gt; &gt; +
&gt; &gt; +                // If we still have bytes to skip, try to skip those now.
&gt; &gt; +                if (m_bytesToSkip)
&gt; &gt; +                    skipBytes(m_bytesToSkip);
&gt; &gt; +
&gt; &gt; +                m_bufferLength = totalSize;
&gt; &gt; +            }
&gt; 
&gt; I confess, I can&apos;t totally follow all this even after peering through it a few
&gt; times.  There are too many different buffers and lengths.  Maybe some block
&gt; comment somewhere explaining the algorithm, I dunno.

sometimes the low level decoding doesn&apos;t move on unless you feed it more data in consecutive memory space. &quot;buffer&quot; is there for this purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177791</commentid>
    <comment_count>6</comment_count>
      <attachid>45993</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 14:47:22 -0800</bug_when>
    <thetext>Comment on attachment 45993
the patch

will upload new patch. cleared the flag</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177795</commentid>
    <comment_count>7</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-06 14:52:29 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; (In reply to comment #3)
&gt; &gt; (From update of attachment 45993 [details] [details])
&gt; &gt; &gt; +        Vector&lt;unsigned char, 8192&gt; buffer;
&gt; &gt; 
&gt; &gt; Is it a potential perf issue that we can decode at most 8K at a time?
&gt; 
&gt; A segment in SharedBuffer is 4k. in the case JPEG reader needs 2 segments to
&gt; continue moving, 8k is a good number. The vector can grow when 8k is not
&gt; enough. but I think 8k is better than 0 for performance (no need to call malloc
&gt; in most cases)

Oh, I meant in comparison to the pre-segmented-SharedBuffer case where we could perhaps decode the entire image in one shot.

&gt; sometimes the low level decoding doesn&apos;t move on unless you feed it more data
&gt; in consecutive memory space. &quot;buffer&quot; is there for this purpose.

Yeah, I got the general idea that we were copying segments out to a contiguous buffer to then feed to the decoder.  I was trying to understand the details to double-check if there were any errors/edge cases/etc. but I kept getting lost in how many different offsets we were tracking.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177800</commentid>
    <comment_count>8</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 15:02:13 -0800</bug_when>
    <thetext>(In reply to comment #7)
&gt; (In reply to comment #5)
&gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; (From update of attachment 45993 [details] [details] [details])
&gt; &gt; &gt; &gt; +        Vector&lt;unsigned char, 8192&gt; buffer;
&gt; &gt; &gt; 
&gt; &gt; &gt; Is it a potential perf issue that we can decode at most 8K at a time?
&gt; &gt; 
&gt; &gt; A segment in SharedBuffer is 4k. in the case JPEG reader needs 2 segments to
&gt; &gt; continue moving, 8k is a good number. The vector can grow when 8k is not
&gt; &gt; enough. but I think 8k is better than 0 for performance (no need to call malloc
&gt; &gt; in most cases)
&gt; 
&gt; Oh, I meant in comparison to the pre-segmented-SharedBuffer case where we could
&gt; perhaps decode the entire image in one shot.

in that case &quot;buffer&quot; is not used at all. also &quot;segmenting&quot; can be easy to be disabled in SharedBuffer::append(). probably I should add #if ENABLE() there
&gt; 
&gt; &gt; sometimes the low level decoding doesn&apos;t move on unless you feed it more data
&gt; &gt; in consecutive memory space. &quot;buffer&quot; is there for this purpose.
&gt; 
&gt; Yeah, I got the general idea that we were copying segments out to a contiguous
&gt; buffer to then feed to the decoder.  I was trying to understand the details to
&gt; double-check if there were any errors/edge cases/etc. but I kept getting lost
&gt; in how many different offsets we were tracking.

life is not easy :) 

BTW, this algorithm has been running for a long while in iris browser winmob. (I believe you&apos;ve seen this in one of wince port patches)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>177805</commentid>
    <comment_count>9</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-06 15:08:05 -0800</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; (In reply to comment #5)
&gt; &gt; &gt; (In reply to comment #3)
&gt; &gt; &gt; &gt; (From update of attachment 45993 [details] [details] [details] [details])

&gt; &gt; Oh, I meant in comparison to the pre-segmented-SharedBuffer case where we could
&gt; &gt; perhaps decode the entire image in one shot.
&gt; 
&gt; in that case &quot;buffer&quot; is not used at all. also &quot;segmenting&quot; can be easy to be
&gt; disabled in SharedBuffer::append(). probably I should add #if ENABLE() there
&gt; &gt; 

probably I misunderstood you again. with internally segmented SharedBuffer, we don&apos;t need to maintain a big chunk of memory for the resource data. for perf, we don&apos;t have to move all bytes to a bigger buffer when receiving data from network. When decoding the image, perf could be a little bit worse.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178181</commentid>
    <comment_count>10</comment_count>
      <attachid>46053</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-07 07:48:45 -0800</bug_when>
    <thetext>Created attachment 46053
fixed some style issues</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178183</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-07 07:52:46 -0800</bug_when>
    <thetext>Attachment 46053 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:80:  skip_input_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:433:  skip_input_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178184</commentid>
    <comment_count>12</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-07 07:55:07 -0800</bug_when>
    <thetext>(In reply to comment #11)
&gt; Attachment 46053 [details] did not pass style-queue:
&gt; 
&gt; Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
&gt; WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:80:  skip_input_data
&gt; is incorrectly named. Don&apos;t use underscores in your identifier names. 
&gt; [readability/naming] [4]
&gt; WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:433:  skip_input_data
&gt; is incorrectly named. Don&apos;t use underscores in your identifier names. 
&gt; [readability/naming] [4]
&gt; Total errors found: 2

should I fix all existing style issues in the file?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178185</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-07 07:55:23 -0800</bug_when>
    <thetext>Attachment 46053 did not build on chromium:
Build output: http://webkit-commit-queue.appspot.com/results/166405</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178186</commentid>
    <comment_count>14</comment_count>
      <attachid>46053</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-07 08:06:03 -0800</bug_when>
    <thetext>Comment on attachment 46053
fixed some style issues

need to fix another error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178271</commentid>
    <comment_count>15</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2010-01-07 11:16:33 -0800</bug_when>
    <thetext>&gt; should I fix all existing style issues in the file?

I&apos;m not sure about this file in specific, but the GIF image decoder, for example, is not in WebKit style on purpose.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178272</commentid>
    <comment_count>16</comment_count>
      <attachid>46066</attachid>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-07 11:18:23 -0800</bug_when>
    <thetext>Created attachment 46066
fixed built error</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178274</commentid>
    <comment_count>17</comment_count>
    <who name="Peter Kasting">pkasting</who>
    <bug_when>2010-01-07 11:19:39 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; should I fix all existing style issues in the file?
&gt; 
&gt; I&apos;m not sure about this file in specific, but the GIF image decoder, for
&gt; example, is not in WebKit style on purpose.

Well, the GIF image &quot;reader&quot; (I&apos;m using the names the files give themselves) is not, because the whole file was copied.  The &quot;decoder&quot; portion is.

In the JPEG/PNG cases, the decoders should in theory be in webkit style, except that in some cases we use names that match the libjpeg/libpng interfaces for clarity, even though it violates WK style.

If there are more style problems than those, it&apos;d be nice to fix them, although if it&apos;s very many, I&apos;m not sure it&apos;s fair to Yong to mandate fixing the whole file when it&apos;s touched.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178275</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-01-07 11:20:27 -0800</bug_when>
    <thetext>Attachment 46066 did not pass style-queue:

Failed to run &quot;WebKitTools/Scripts/check-webkit-style&quot; exit_code: 1
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:80:  skip_input_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp:433:  skip_input_data is incorrectly named. Don&apos;t use underscores in your identifier names.  [readability/naming] [4]
Total errors found: 2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178276</commentid>
    <comment_count>19</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-07 11:20:47 -0800</bug_when>
    <thetext>(In reply to comment #15)
&gt; &gt; should I fix all existing style issues in the file?
&gt; 
&gt; I&apos;m not sure about this file in specific, but the GIF image decoder, for
&gt; example, is not in WebKit style on purpose.

I changed argument &quot;num_bytes&quot; to &quot;numBytes&quot;, but then more style errors show up. Seem those functions are following libjpeg style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>178277</commentid>
    <comment_count>20</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-01-07 11:22:13 -0800</bug_when>
    <thetext>(In reply to comment #17)
&gt; (In reply to comment #15)
&gt; &gt; &gt; should I fix all existing style issues in the file?
&gt; &gt; 
&gt; &gt; I&apos;m not sure about this file in specific, but the GIF image decoder, for
&gt; &gt; example, is not in WebKit style on purpose.
&gt; 
&gt; Well, the GIF image &quot;reader&quot; (I&apos;m using the names the files give themselves) is
&gt; not, because the whole file was copied.  The &quot;decoder&quot; portion is.
&gt; 
&gt; In the JPEG/PNG cases, the decoders should in theory be in webkit style, except
&gt; that in some cases we use names that match the libjpeg/libpng interfaces for
&gt; clarity, even though it violates WK style.
&gt; 
&gt; If there are more style problems than those, it&apos;d be nice to fix them, although
&gt; if it&apos;s very many, I&apos;m not sure it&apos;s fair to Yong to mandate fixing the whole
&gt; file when it&apos;s touched.

probably should be fixed in another bug</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>188224</commentid>
    <comment_count>21</comment_count>
      <attachid>46066</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-02-05 10:59:53 -0800</bug_when>
    <thetext>Comment on attachment 46066
fixed built error

I gave this a quick once over since it was sitting in the queue for a while, but it was surface level and needs a more in depth review in the future.

r- for lack of tests/no indication of how the code is tested.


&gt; diff --git a/WebCore/ChangeLog b/WebCore/ChangeLog
&gt; +        Reviewed by NOBODY (OOPS!).
&gt; +
&gt; +        Make JPEGImageDecoder read segmented SharedBuffer
&gt; +        Also move function copyFromSharedBuffer() to SharedBuffer
&gt; +        and rename to extract().
&gt; +        https://bugs.webkit.org/show_bug.cgi?id=33268
&gt; +

This makes no mention of tests. How is this tested? Do new tests need to be added?


&gt; +class SharedBufferDataWalker {
&gt; +public:
&gt; +    SharedBufferDataWalker() : m_buffer(0), m_length(0), m_data(0) {}

This isn&apos;t the style for initializing member variables (and then it would be good to put the braces on separate lines).

&gt; +    // Returns the current pointer

Add a period to the end of the comment.


&gt; diff --git a/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp b/WebCore/platform/image-decoders/jpeg/JPEGImageDecoder.cpp
&gt; + * Copyright (C) Research In Motion Limited 2009-2010. All rights reserved.

WebKit encourages uses comma delimited years instead of ranges.

&gt; +void skip_input_data(j_decompress_ptr jd, long numBytes);

It looks like the parameter name &quot;jd&quot; adds no information so it should be removed.

&gt; +        long bytesToSkip = std::min(numBytes, (long)src-&gt;pub.bytes_in_buffer);

Use C++ casting instead of C style casting.

&gt; +        if (numBytes &gt; bytesToSkip)
&gt; +            m_bytesToSkip = (size_t)(numBytes - bytesToSkip);

Use C++ casting instead of C style casting.

&gt; +
&gt; +            if (readOffset == lastOffset) {
&gt; +                if (m_bufferLength == data.size())
&gt; +                    break;
&gt; +
&gt; +                // Need more contiguous data to proceed

Please add periods to ends of sentences.

&gt; +                m_info.src-&gt;bytes_in_buffer += segmentLength;
&gt; +                m_info.src-&gt;next_input_byte = (JOCTET*)contiguousBuffer.data();

Use C++ casting instead of C style casting.

&gt; +                unsigned totalSize = readOffset + segmentLength;
&gt; +                m_info.src-&gt;bytes_in_buffer += totalSize - m_bufferLength;
&gt; +                m_info.src-&gt;next_input_byte = (JOCTET*)dataWalker.data();

Use C++ casting instead of C style casting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>283895</commentid>
    <comment_count>22</comment_count>
    <who name="Yong Li">yong.li.webkit</who>
    <bug_when>2010-09-23 13:19:35 -0700</bug_when>
    <thetext>Not sure this is still worth doing. Close it for now.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>45993</attachid>
            <date>2010-01-06 13:58:41 -0800</date>
            <delta_ts>2010-01-07 07:48:45 -0800</delta_ts>
            <desc>the patch</desc>
            <filename>33268.patch</filename>
            <type>text/plain</type>
            <size>10345</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWVmOGRhMC4uZTAxMWRmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNSBAQAogMjAxMC0wMS0wNiAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNYWtlIEpQRUdJbWFnZURlY29kZXIgcmVhZCBzZWdtZW50ZWQgU2hhcmVkQnVmZmVyCisg
ICAgICAgIEFsc28gbW92ZSBmdW5jdGlvbiBjb3B5RnJvbVNoYXJlZEJ1ZmZlcigpIHRvIFNoYXJl
ZEJ1ZmZlcgorICAgICAgICBhbmQgcmVuYW1lIHRvIGV4dHJhY3QoKS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMjY4CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpl
eHRyYWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXI6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyRGF0YVdhbGtlcjo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXI6OmRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyRGF0YVdhbGtlcjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlckRhdGFXYWxrZXI6OmFkdmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpza2lwQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlUmVhZGVyOjppbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJl
YWRlcjo6c2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29k
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpydW5EZWNvZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKToKKworMjAxMC0wMS0wNiAgWW9u
ZyBMaSAgPHlvbGlAcmltLmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
IAogICAgICAgICBGaXggdGhlIGJ1ZyBpbiBwcmV2aW91cyBjb21taXQ6IHdlIHNob3VsZG4ndCBm
aW5pc2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCA0YTQ2YzJjLi5mMmE3MThhIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0yMzgsNiArMjM4LDIxIEBAIHVuc2lnbmVk
IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEoY29uc3QgY2hhciomIHNvbWVEYXRhLCB1bnNpZ25l
ZCBwb3NpdGlvbikgY29uCiAgICAgcmV0dXJuIHNlZ21lbnQgPT0gc2VnbWVudHMgLSAxID8gc2Vn
bWVudGVkU2l6ZSAtIHBvc2l0aW9uIDogc2VnbWVudFNpemUgLSBwb3NpdGlvbkluU2VnbWVudDsK
IH0KIAordW5zaWduZWQgU2hhcmVkQnVmZmVyOjpleHRyYWN0KGNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCB1bnNpZ25lZCBmcm9tKQoreworICAgIHVuc2lnbmVkIGJ5dGVzRXh0
cmFjdGVkID0gMDsKKyAgICBjb25zdCBjaGFyKiBtb3JlRGF0YTsKKyAgICB3aGlsZSAodW5zaWdu
ZWQgbW9yZURhdGFMZW5ndGggPSBnZXRTb21lRGF0YShtb3JlRGF0YSwgZnJvbSkpIHsKKyAgICAg
ICAgdW5zaWduZWQgYnl0ZXNUb0NvcHkgPSBtaW4oYnVmZmVyTGVuZ3RoIC0gYnl0ZXNFeHRyYWN0
ZWQsIG1vcmVEYXRhTGVuZ3RoKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciArIGJ5dGVzRXh0cmFj
dGVkLCBtb3JlRGF0YSwgYnl0ZXNUb0NvcHkpOworICAgICAgICBieXRlc0V4dHJhY3RlZCArPSBi
eXRlc1RvQ29weTsKKyAgICAgICAgaWYgKGJ5dGVzRXh0cmFjdGVkID09IGJ1ZmZlckxlbmd0aCkK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBmcm9tICs9IGJ5dGVzVG9Db3B5OworICAgIH0K
KyAgICByZXR1cm4gYnl0ZXNFeHRyYWN0ZWQ7Cit9CisKICNpZiAhUExBVEZPUk0oQ0YpCiAKIGlu
bGluZSB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y2xlYXJQbGF0Zm9ybURhdGEoKQpkaWZmIC0tZ2l0IGEv
V2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVk
QnVmZmVyLmgKaW5kZXggYTU1NjZmMi4uZmU3YjlkNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5o
CkBAIC0xMTQsNiArMTE0LDggQEAgcHVibGljOgogICAgIC8vICAgICAgfQogICAgIHVuc2lnbmVk
IGdldFNvbWVEYXRhKGNvbnN0IGNoYXIqJiBkYXRhLCB1bnNpZ25lZCBwb3NpdGlvbiA9IDApIGNv
bnN0OwogCisgICAgdW5zaWduZWQgZXh0cmFjdChjaGFyKiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZl
ckxlbmd0aCwgdW5zaWduZWQgZnJvbSA9IDApOworCiBwcml2YXRlOgogICAgIFNoYXJlZEJ1ZmZl
cigpOwogICAgIFNoYXJlZEJ1ZmZlcihjb25zdCBjaGFyKiwgaW50KTsKQEAgLTEzMiw3ICsxMzQs
MzYgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBtX2NmRGF0YTsKICNlbmRp
ZgogfTsKLSAgICAKKworY2xhc3MgU2hhcmVkQnVmZmVyRGF0YVdhbGtlciB7CitwdWJsaWM6Cisg
ICAgU2hhcmVkQnVmZmVyRGF0YVdhbGtlcigpIDogbV9idWZmZXIoMCksIG1fbGVuZ3RoKDApLCBt
X2RhdGEoMCkge30KKyAgICBleHBsaWNpdCBTaGFyZWRCdWZmZXJEYXRhV2Fsa2VyKGNvbnN0IFNo
YXJlZEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQorICAgICAgICA6IG1fYnVm
ZmVyKCZidWZmZXIpCisgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQorICAgIHsKKyAgICAgICAg
bV9sZW5ndGggPSBtX2J1ZmZlci0+Z2V0U29tZURhdGEobV9kYXRhLCBtX29mZnNldCk7CisgICAg
fQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIG1fbGVuZ3RoOyB9CisgICAg
Y29uc3QgY2hhciogZGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQorICAgIHZvaWQgc2V0
KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQgPSAwKQorICAgIHsK
KyAgICAgICAgbV9idWZmZXIgPSAmYnVmZmVyOworICAgICAgICBtX29mZnNldCA9IG9mZnNldDsK
KyAgICAgICAgbV9sZW5ndGggPSBtX2J1ZmZlci0+Z2V0U29tZURhdGEobV9kYXRhLCBtX29mZnNl
dCk7CisgICAgfQorICAgIHZvaWQgYWR2YW5jZSgpCisgICAgeworICAgICAgICBtX29mZnNldCAr
PSBtX2xlbmd0aDsKKyAgICAgICAgbV9sZW5ndGggPSBtX2J1ZmZlci0+Z2V0U29tZURhdGEobV9k
YXRhLCBtX29mZnNldCk7CisgICAgfQorcHJpdmF0ZToKKyAgICBjb25zdCBTaGFyZWRCdWZmZXIq
IG1fYnVmZmVyOworICAgIHVuc2lnbmVkIG1fb2Zmc2V0OworICAgIHVuc2lnbmVkIG1fbGVuZ3Ro
OworICAgIGNvbnN0IGNoYXIqIG1fZGF0YTsKK307CisKIH0KIAogI2VuZGlmIC8vIFNoYXJlZEJ1
ZmZlcl9oCmRpZmYgLS1naXQgYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdl
RGVjb2Rlci5jcHAgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rl
ci5jcHAKaW5kZXggMWIyMzExMS4uNGZjY2M4ZCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9y
bS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCisrKyBiL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcApAQCAtMzksMjggKzM5LDEzIEBAIHVzaW5n
IG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIHVuc2lnbmVk
IGNvcHlGcm9tU2hhcmVkQnVmZmVyKGNoYXIqIGJ1ZmZlciwgdW5zaWduZWQgYnVmZmVyTGVuZ3Ro
LCBjb25zdCBTaGFyZWRCdWZmZXImIHNoYXJlZEJ1ZmZlciwgdW5zaWduZWQgb2Zmc2V0KQotewot
ICAgIHVuc2lnbmVkIGJ5dGVzRXh0cmFjdGVkID0gMDsKLSAgICBjb25zdCBjaGFyKiBtb3JlRGF0
YTsKLSAgICB3aGlsZSAodW5zaWduZWQgbW9yZURhdGFMZW5ndGggPSBzaGFyZWRCdWZmZXIuZ2V0
U29tZURhdGEobW9yZURhdGEsIG9mZnNldCkpIHsKLSAgICAgICAgdW5zaWduZWQgYnl0ZXNUb0Nv
cHkgPSBtaW4oYnVmZmVyTGVuZ3RoIC0gYnl0ZXNFeHRyYWN0ZWQsIG1vcmVEYXRhTGVuZ3RoKTsK
LSAgICAgICAgbWVtY3B5KGJ1ZmZlciArIGJ5dGVzRXh0cmFjdGVkLCBtb3JlRGF0YSwgYnl0ZXNU
b0NvcHkpOwotICAgICAgICBieXRlc0V4dHJhY3RlZCArPSBieXRlc1RvQ29weTsKLSAgICAgICAg
aWYgKGJ5dGVzRXh0cmFjdGVkID09IGJ1ZmZlckxlbmd0aCkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBvZmZzZXQgKz0gYnl0ZXNUb0NvcHk7Ci0gICAgfQotICAgIHJldHVybiBieXRlc0V4
dHJhY3RlZDsKLX0KLQogSW1hZ2VEZWNvZGVyKiBJbWFnZURlY29kZXI6OmNyZWF0ZShjb25zdCBT
aGFyZWRCdWZmZXImIGRhdGEpCiB7CiAgICAgLy8gWEJNcyByZXF1aXJlIDggYnl0ZXMgb2YgaW5m
by4KICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgbWF4TWFya2VyTGVuZ3RoID0gODsKIAogICAg
IGNoYXIgY29udGVudHNbbWF4TWFya2VyTGVuZ3RoXTsKLSAgICB1bnNpZ25lZCBsZW5ndGggPSBj
b3B5RnJvbVNoYXJlZEJ1ZmZlcihjb250ZW50cywgbWF4TWFya2VyTGVuZ3RoLCBkYXRhLCAwKTsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBkYXRhLmV4dHJhY3QoY29udGVudHMsIG1heE1hcmtlckxl
bmd0aCk7CiAKICAgICAvLyBXZSBuZWVkIGF0IGxlYXN0IDQgYnl0ZXMgdG8gZmlndXJlIG91dCB3
aGF0IGtpbmQgb2YgaW1hZ2Ugd2UncmUgZGVhbGluZyB3aXRoLgogICAgIGlmIChsZW5ndGggPCA0
KQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQRUdJ
bWFnZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCmluZGV4IDk2OTFjMzguLmNiNzIzZWMgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAor
KysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdlRGVjb2Rl
ci5jcHAKQEAgLTEsNSArMSw2IEBACiAvKgogICogQ29weXJpZ2h0IChDKSAyMDA2IEFwcGxlIENv
bXB1dGVyLCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVk
IDIwMDktMjAxMC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBQb3J0aW9ucyBhcmUgQ29w
eXJpZ2h0IChDKSAyMDAxLTYgbW96aWxsYS5vcmcKICAqCkBAIC0xMzQsNyArMTM1LDggQEAgcHVi
bGljOgogICAgICAgICBjbG9zZSgpOwogICAgIH0KIAotICAgIHZvaWQgY2xvc2UoKSB7CisgICAg
dm9pZCBjbG9zZSgpCisgICAgewogICAgICAgICBkZWNvZGVyX3NvdXJjZV9tZ3IqIHNyYyA9IChk
ZWNvZGVyX3NvdXJjZV9tZ3IqKW1faW5mby5zcmM7CiAgICAgICAgIGlmIChzcmMpCiAgICAgICAg
ICAgICBmYXN0RnJlZShzcmMpOwpAQCAtMTQzLDcgKzE0NSw4IEBAIHB1YmxpYzoKICAgICAgICAg
anBlZ19kZXN0cm95X2RlY29tcHJlc3MoJm1faW5mbyk7CiAgICAgfQogCi0gICAgdm9pZCBza2lw
Qnl0ZXMobG9uZyBudW1fYnl0ZXMpIHsKKyAgICB2b2lkIHNraXBCeXRlcyhsb25nIG51bV9ieXRl
cykKKyAgICB7CiAgICAgICAgIGRlY29kZXJfc291cmNlX21nciogc3JjID0gKGRlY29kZXJfc291
cmNlX21nciopbV9pbmZvLnNyYzsKICAgICAgICAgbG9uZyBieXRlc1RvU2tpcCA9IHN0ZDo6bWlu
KG51bV9ieXRlcywgKGxvbmcpc3JjLT5wdWIuYnl0ZXNfaW5fYnVmZmVyKTsKICAgICAgICAgc3Jj
LT5wdWIuYnl0ZXNfaW5fYnVmZmVyIC09IChzaXplX3QpYnl0ZXNUb1NraXA7CkBAIC0xNTUsMjEg
KzE1OCw2OSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2J5dGVzVG9Ta2lwID0gMDsKICAgICB9
CiAKLSAgICBib29sIGRlY29kZShjb25zdCBWZWN0b3I8Y2hhcj4mIGRhdGEsIGJvb2wgc2l6ZU9u
bHkpIHsKKyAgICBib29sIGRlY29kZShjb25zdCBTaGFyZWRCdWZmZXImIGRhdGEsIGJvb2wgc2l6
ZU9ubHkpCisgICAgewogICAgICAgICBtX2RlY29kaW5nU2l6ZU9ubHkgPSBzaXplT25seTsKLSAg
ICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG5ld0J5dGVDb3VudCA9IGRhdGEuc2l6ZSgpIC0gbV9i
dWZmZXJMZW5ndGg7Ci0gICAgICAgIHVuc2lnbmVkIHJlYWRPZmZzZXQgPSBtX2J1ZmZlckxlbmd0
aCAtIG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZlcjsKLQotICAgICAgICBtX2luZm8uc3JjLT5i
eXRlc19pbl9idWZmZXIgKz0gbmV3Qnl0ZUNvdW50OwotICAgICAgICBtX2luZm8uc3JjLT5uZXh0
X2lucHV0X2J5dGUgPSAoSk9DVEVUKikoZGF0YS5kYXRhKCkpICsgcmVhZE9mZnNldDsKLSAgICAg
ICAgCi0gICAgICAgIC8vIElmIHdlIHN0aWxsIGhhdmUgYnl0ZXMgdG8gc2tpcCwgdHJ5IHRvIHNr
aXAgdGhvc2Ugbm93LgotICAgICAgICBpZiAobV9ieXRlc1RvU2tpcCkKLSAgICAgICAgICAgIHNr
aXBCeXRlcyhtX2J5dGVzVG9Ta2lwKTsKLQotICAgICAgICBtX2J1ZmZlckxlbmd0aCA9IGRhdGEu
c2l6ZSgpOwotICAgICAgICAKKworICAgICAgICB1bnNpZ25lZCBsYXN0T2Zmc2V0ID0gLTE7Cisg
ICAgICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyLCA4MTkyPiBidWZmZXI7CisgICAgICAgIFNoYXJl
ZEJ1ZmZlckRhdGFXYWxrZXIgc2VnbWVudDsKKyAgICAgICAgd2hpbGUodHVyZSkgeworICAgICAg
ICAgICAgaWYgKG1fZGVjb2Rlci0+ZmFpbGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgICAgICAgICB1bnNpZ25lZCByZWFkT2Zmc2V0ID0gbV9idWZmZXJMZW5ndGgg
LSBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXI7CisgICAgICAgICAgICBpZiAocmVhZE9mZnNl
dCA9PSBsYXN0T2Zmc2V0ICYmIG1fYnVmZmVyTGVuZ3RoID09IGRhdGEuc2l6ZSgpKQorICAgICAg
ICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICB1bnNpZ25lZCBzZWdtZW50TGVuZ3RoID0g
MDsKKyAgICAgICAgICAgIGlmIChyZWFkT2Zmc2V0ID09IGxhc3RPZmZzZXQpIHsKKyAgICAgICAg
ICAgICAgICAvLyBOZWVkIG1vcmUgZGF0YSB0byBwcm9jZWVkCisgICAgICAgICAgICAgICAgaWYg
KGJ1ZmZlci5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc2VnbWVudC5zZXQoZGF0
YSwgcmVhZE9mZnNldCk7CisgICAgICAgICAgICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSBzZWdt
ZW50Lmxlbmd0aCgpOworICAgICAgICAgICAgICAgICAgICBidWZmZXIuYXBwZW5kKHNlZ21lbnQu
ZGF0YSgpLCBzZWdtZW50TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg
ICAgc2VnbWVudC5zZXQoZGF0YSwgcmVhZE9mZnNldCArIGJ1ZmZlci5zaXplKCkpOworICAgICAg
ICAgICAgICAgIHNlZ21lbnRMZW5ndGggPSBzZWdtZW50Lmxlbmd0aCgpOworICAgICAgICAgICAg
ICAgIGJ1ZmZlci5hcHBlbmQoc2VnbWVudC5kYXRhKCksIHNlZ21lbnRMZW5ndGgpOworICAgICAg
ICAgICAgICAgIG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZlciArPSBzZWdtZW50TGVuZ3RoOwor
ICAgICAgICAgICAgICAgIG1faW5mby5zcmMtPm5leHRfaW5wdXRfYnl0ZSA9IChKT0NURVQqKWJ1
ZmZlci5kYXRhKCk7CisgICAgICAgICAgICAgICAgbV9idWZmZXJMZW5ndGggPSByZWFkT2Zmc2V0
ICsgYnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAg
aWYgKCFidWZmZXIuaXNFbXB0eSgpKQorICAgICAgICAgICAgICAgICAgICBidWZmZXIuY2xlYXIo
KTsKKworICAgICAgICAgICAgICAgIGxhc3RPZmZzZXQgPSByZWFkT2Zmc2V0OworCisgICAgICAg
ICAgICAgICAgc2VnbWVudC5zZXQoZGF0YSwgcmVhZE9mZnNldCk7CisgICAgICAgICAgICAgICAg
c2VnbWVudExlbmd0aCA9IHNlZ21lbnQubGVuZ3RoKCk7CisKKyAgICAgICAgICAgICAgICB1bnNp
Z25lZCB0b3RhbFNpemUgPSByZWFkT2Zmc2V0ICsgc2VnbWVudExlbmd0aDsKKyAgICAgICAgICAg
ICAgICBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXIgKz0gdG90YWxTaXplIC0gbV9idWZmZXJM
ZW5ndGg7CisgICAgICAgICAgICAgICAgbV9pbmZvLnNyYy0+bmV4dF9pbnB1dF9ieXRlID0gKEpP
Q1RFVCopc2VnbWVudC5kYXRhKCk7CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBzdGlsbCBo
YXZlIGJ5dGVzIHRvIHNraXAsIHRyeSB0byBza2lwIHRob3NlIG5vdy4KKyAgICAgICAgICAgICAg
ICBpZiAobV9ieXRlc1RvU2tpcCkKKyAgICAgICAgICAgICAgICAgICAgc2tpcEJ5dGVzKG1fYnl0
ZXNUb1NraXApOworCisgICAgICAgICAgICAgICAgbV9idWZmZXJMZW5ndGggPSB0b3RhbFNpemU7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXJ1bkRlY29kaW5nKCkpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgaWYgKHNpemVPbmx5ICYmIG1fc3Rh
dGUgIT0gSlBFR19IRUFERVIpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAganBlZ19kZWNvbXByZXNzX3N0cnVjdCog
aW5mbygpIHsgcmV0dXJuICZtX2luZm87IH0KKyAgICBKU0FNUEFSUkFZIHNhbXBsZXMoKSBjb25z
dCB7IHJldHVybiBtX3NhbXBsZXM7IH0KKyAgICBKUEVHSW1hZ2VEZWNvZGVyKiBkZWNvZGVyKCkg
eyByZXR1cm4gbV9kZWNvZGVyOyB9CisKK3ByaXZhdGU6CisgICAgYm9vbCBydW5EZWNvZGluZygp
CisgICAgewogICAgICAgICAvLyBXZSBuZWVkIHRvIGRvIHRoZSBzZXRqbXAgaGVyZS4gT3RoZXJ3
aXNlIGJhZCB0aGluZ3Mgd2lsbCBoYXBwZW4KICAgICAgICAgaWYgKHNldGptcChtX2Vyci5zZXRq
bXBfYnVmZmVyKSkgewogICAgICAgICAgICAgbV9zdGF0ZSA9IEpQRUdfU0lOS19OT05fSlBFR19U
UkFJTEVSOwpAQCAtMzQ5LDE2ICs0MDAsMTAgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAKLSAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvKCkgeyByZXR1cm4g
Jm1faW5mbzsgfQotICAgIEpTQU1QQVJSQVkgc2FtcGxlcygpIGNvbnN0IHsgcmV0dXJuIG1fc2Ft
cGxlczsgfQotICAgIEpQRUdJbWFnZURlY29kZXIqIGRlY29kZXIoKSB7IHJldHVybiBtX2RlY29k
ZXI7IH0KLQotcHJpdmF0ZToKICAgICBKUEVHSW1hZ2VEZWNvZGVyKiBtX2RlY29kZXI7CiAgICAg
dW5zaWduZWQgbV9idWZmZXJMZW5ndGg7CiAgICAgaW50IG1fYnl0ZXNUb1NraXA7CiAgICAgYm9v
bCBtX2RlY29kaW5nU2l6ZU9ubHk7Ci0gICAgYm9vbCBtX2luaXRpYWxpemVkOwogCiAgICAganBl
Z19kZWNvbXByZXNzX3N0cnVjdCBtX2luZm87CiAgICAgZGVjb2Rlcl9lcnJvcl9tZ3IgbV9lcnI7
CkBAIC00NTIsNyArNDk3LDcgQEAgdm9pZCBKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUoYm9vbCBz
aXplT25seSkKICAgICBpZiAobV9mYWlsZWQpCiAgICAgICAgIHJldHVybjsKIAotICAgIG1fZmFp
bGVkID0gIW1fcmVhZGVyLT5kZWNvZGUobV9kYXRhLT5idWZmZXIoKSwgc2l6ZU9ubHkpOworICAg
IG1fZmFpbGVkID0gIW1fcmVhZGVyLT5kZWNvZGUoKm1fZGF0YSwgc2l6ZU9ubHkpOwogCiAgICAg
aWYgKG1fZmFpbGVkIHx8ICghbV9mcmFtZUJ1ZmZlckNhY2hlLmlzRW1wdHkoKSAmJiBtX2ZyYW1l
QnVmZmVyQ2FjaGVbMF0uc3RhdHVzKCkgPT0gUkdCQTMyQnVmZmVyOjpGcmFtZUNvbXBsZXRlKSkg
ewogICAgICAgICBkZWxldGUgbV9yZWFkZXI7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46053</attachid>
            <date>2010-01-07 07:48:45 -0800</date>
            <delta_ts>2010-01-07 08:06:02 -0800</delta_ts>
            <desc>fixed some style issues</desc>
            <filename>33268.patch</filename>
            <type>text/plain</type>
            <size>12087</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWVmOGRhMC4uZTAxMWRmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNSBAQAogMjAxMC0wMS0wNiAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNYWtlIEpQRUdJbWFnZURlY29kZXIgcmVhZCBzZWdtZW50ZWQgU2hhcmVkQnVmZmVyCisg
ICAgICAgIEFsc28gbW92ZSBmdW5jdGlvbiBjb3B5RnJvbVNoYXJlZEJ1ZmZlcigpIHRvIFNoYXJl
ZEJ1ZmZlcgorICAgICAgICBhbmQgcmVuYW1lIHRvIGV4dHJhY3QoKS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMjY4CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpl
eHRyYWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXI6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyRGF0YVdhbGtlcjo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXI6OmRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyRGF0YVdhbGtlcjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlckRhdGFXYWxrZXI6OmFkdmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpza2lwQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlUmVhZGVyOjppbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJl
YWRlcjo6c2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29k
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpydW5EZWNvZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKToKKworMjAxMC0wMS0wNiAgWW9u
ZyBMaSAgPHlvbGlAcmltLmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
IAogICAgICAgICBGaXggdGhlIGJ1ZyBpbiBwcmV2aW91cyBjb21taXQ6IHdlIHNob3VsZG4ndCBm
aW5pc2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCA0YTQ2YzJjLi45MzNjMjU0IDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0yMzgsNiArMjM4LDIxIEBAIHVuc2lnbmVk
IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEoY29uc3QgY2hhciomIHNvbWVEYXRhLCB1bnNpZ25l
ZCBwb3NpdGlvbikgY29uCiAgICAgcmV0dXJuIHNlZ21lbnQgPT0gc2VnbWVudHMgLSAxID8gc2Vn
bWVudGVkU2l6ZSAtIHBvc2l0aW9uIDogc2VnbWVudFNpemUgLSBwb3NpdGlvbkluU2VnbWVudDsK
IH0KIAordW5zaWduZWQgU2hhcmVkQnVmZmVyOjpleHRyYWN0KGNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCB1bnNpZ25lZCByZWFkT2Zmc2V0KQoreworICAgIHVuc2lnbmVkIGJ5
dGVzRXh0cmFjdGVkID0gMDsKKyAgICBjb25zdCBjaGFyKiBtb3JlRGF0YTsKKyAgICB3aGlsZSAo
dW5zaWduZWQgbW9yZURhdGFMZW5ndGggPSBnZXRTb21lRGF0YShtb3JlRGF0YSwgcmVhZE9mZnNl
dCkpIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZXNUb0NvcHkgPSBtaW4oYnVmZmVyTGVuZ3RoIC0g
Ynl0ZXNFeHRyYWN0ZWQsIG1vcmVEYXRhTGVuZ3RoKTsKKyAgICAgICAgbWVtY3B5KGJ1ZmZlciAr
IGJ5dGVzRXh0cmFjdGVkLCBtb3JlRGF0YSwgYnl0ZXNUb0NvcHkpOworICAgICAgICBieXRlc0V4
dHJhY3RlZCArPSBieXRlc1RvQ29weTsKKyAgICAgICAgaWYgKGJ5dGVzRXh0cmFjdGVkID09IGJ1
ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZWFkT2Zmc2V0ICs9IGJ5
dGVzVG9Db3B5OworICAgIH0KKyAgICByZXR1cm4gYnl0ZXNFeHRyYWN0ZWQ7Cit9CisKICNpZiAh
UExBVEZPUk0oQ0YpCiAKIGlubGluZSB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y2xlYXJQbGF0Zm9ybURh
dGEoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBiL1dlYkNv
cmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggYTU1NjZmMi4uNWYxNzAyYSAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9XZWJDb3JlL3BsYXRm
b3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0xMTQsNiArMTE0LDggQEAgcHVibGljOgogICAgIC8vICAg
ICAgfQogICAgIHVuc2lnbmVkIGdldFNvbWVEYXRhKGNvbnN0IGNoYXIqJiBkYXRhLCB1bnNpZ25l
ZCBwb3NpdGlvbiA9IDApIGNvbnN0OwogCisgICAgdW5zaWduZWQgZXh0cmFjdChjaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgdW5zaWduZWQgcmVhZE9mZnNldCA9IDApOworCiBw
cml2YXRlOgogICAgIFNoYXJlZEJ1ZmZlcigpOwogICAgIFNoYXJlZEJ1ZmZlcihjb25zdCBjaGFy
KiwgaW50KTsKQEAgLTEzMiw3ICsxMzQsNDUgQEAgcHJpdmF0ZToKICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiBtX2NmRGF0YTsKICNlbmRpZgogfTsKLSAgICAKKworLy8gQSBoZWxwZXIgY2xhc3Mg
dGhhdCBjYW4gYmUgdXNlZCB0byB3YWxrIHRocm91Z2ggYSBTaGFyZWRCdWZmZXIgbm8gbWF0dGVy
IGl0J3Mgc2VnbWVudGVkIG9yIG5vdC4KK2NsYXNzIFNoYXJlZEJ1ZmZlckRhdGFXYWxrZXIgewor
cHVibGljOgorICAgIFNoYXJlZEJ1ZmZlckRhdGFXYWxrZXIoKSA6IG1fYnVmZmVyKDApLCBtX2xl
bmd0aCgwKSwgbV9kYXRhKDApIHt9CisgICAgZXhwbGljaXQgU2hhcmVkQnVmZmVyRGF0YVdhbGtl
cihjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlciwgdW5zaWduZWQgb2Zmc2V0ID0gMCkKKyAgICAg
ICAgOiBtX2J1ZmZlcigmYnVmZmVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKKyAgICB7
CisgICAgICAgIG1fbGVuZ3RoID0gbV9idWZmZXItPmdldFNvbWVEYXRhKG1fZGF0YSwgbV9vZmZz
ZXQpOworICAgIH0KKworICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgcG9pbnRlcgorICAgIGNv
bnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKworICAgIC8vIFJldHVy
biBudW1iZXIgb2YgY29uc2VjdXRpdmUgYnl0ZXMgdGhhdCBmb2xsb3dzIGRhdGEoKS4KKyAgICAv
LyBSZXR1cm4gMCB3aGVuIG5vIG1vcmUgZGF0YSBpcyBsZWZ0IGluIHRoZSBTaGFyZWRCdWZmZXIu
CisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5ndGg7IH0KKworICAg
IHZvaWQgc2V0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25lZCBvZmZzZXQgPSAw
KQorICAgIHsKKyAgICAgICAgbV9idWZmZXIgPSAmYnVmZmVyOworICAgICAgICBtX29mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgbV9sZW5ndGggPSBtX2J1ZmZlci0+Z2V0U29tZURhdGEobV9kYXRh
LCBtX29mZnNldCk7CisgICAgfQorCisgICAgLy8gTW92ZSB0aGUgcG9pbnRlciB0byB0aGUgYmVn
aW5uaW5nIG9mIG5leHQgc2VnbWVudC4KKyAgICB2b2lkIGFkdmFuY2UoKQorICAgIHsKKyAgICAg
ICAgbV9vZmZzZXQgKz0gbV9sZW5ndGg7CisgICAgICAgIG1fbGVuZ3RoID0gbV9idWZmZXItPmdl
dFNvbWVEYXRhKG1fZGF0YSwgbV9vZmZzZXQpOworICAgIH0KK3ByaXZhdGU6CisgICAgY29uc3Qg
U2hhcmVkQnVmZmVyKiBtX2J1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX29mZnNldDsKKyAgICB1bnNp
Z25lZCBtX2xlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBtX2RhdGE7Cit9OworCiB9CiAKICNlbmRp
ZiAvLyBTaGFyZWRCdWZmZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1k
ZWNvZGVycy9JbWFnZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVy
cy9JbWFnZURlY29kZXIuY3BwCmluZGV4IDFiMjMxMTEuLjRmY2NjOGQgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNwcAorKysgYi9XZWJD
b3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAKQEAgLTM5LDI4ICsz
OSwxMyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0
YXRpYyB1bnNpZ25lZCBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjaGFyKiBidWZmZXIsIHVuc2lnbmVk
IGJ1ZmZlckxlbmd0aCwgY29uc3QgU2hhcmVkQnVmZmVyJiBzaGFyZWRCdWZmZXIsIHVuc2lnbmVk
IG9mZnNldCkKLXsKLSAgICB1bnNpZ25lZCBieXRlc0V4dHJhY3RlZCA9IDA7Ci0gICAgY29uc3Qg
Y2hhciogbW9yZURhdGE7Ci0gICAgd2hpbGUgKHVuc2lnbmVkIG1vcmVEYXRhTGVuZ3RoID0gc2hh
cmVkQnVmZmVyLmdldFNvbWVEYXRhKG1vcmVEYXRhLCBvZmZzZXQpKSB7Ci0gICAgICAgIHVuc2ln
bmVkIGJ5dGVzVG9Db3B5ID0gbWluKGJ1ZmZlckxlbmd0aCAtIGJ5dGVzRXh0cmFjdGVkLCBtb3Jl
RGF0YUxlbmd0aCk7Ci0gICAgICAgIG1lbWNweShidWZmZXIgKyBieXRlc0V4dHJhY3RlZCwgbW9y
ZURhdGEsIGJ5dGVzVG9Db3B5KTsKLSAgICAgICAgYnl0ZXNFeHRyYWN0ZWQgKz0gYnl0ZXNUb0Nv
cHk7Ci0gICAgICAgIGlmIChieXRlc0V4dHJhY3RlZCA9PSBidWZmZXJMZW5ndGgpCi0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzVG9Db3B5OwotICAgIH0KLSAgICBy
ZXR1cm4gYnl0ZXNFeHRyYWN0ZWQ7Ci19Ci0KIEltYWdlRGVjb2RlciogSW1hZ2VEZWNvZGVyOjpj
cmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhKQogewogICAgIC8vIFhCTXMgcmVxdWlyZSA4
IGJ5dGVzIG9mIGluZm8uCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1heE1hcmtlckxlbmd0
aCA9IDg7CiAKICAgICBjaGFyIGNvbnRlbnRzW21heE1hcmtlckxlbmd0aF07Ci0gICAgdW5zaWdu
ZWQgbGVuZ3RoID0gY29weUZyb21TaGFyZWRCdWZmZXIoY29udGVudHMsIG1heE1hcmtlckxlbmd0
aCwgZGF0YSwgMCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZGF0YS5leHRyYWN0KGNvbnRlbnRz
LCBtYXhNYXJrZXJMZW5ndGgpOwogCiAgICAgLy8gV2UgbmVlZCBhdCBsZWFzdCA0IGJ5dGVzIHRv
IGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcgd2l0aC4KICAgICBp
ZiAobGVuZ3RoIDwgNCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2Rl
cnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVj
b2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA5NjkxYzM4Li45MzlkNmRiIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pwZWcvSlBFR0ltYWdl
RGVjb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNvZGVycy9qcGVnL0pQ
RUdJbWFnZURlY29kZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENvcHlyaWdodCAoQykg
MjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSBSZXNlYXJjaCBJbiBN
b3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUG9y
dGlvbnMgYXJlIENvcHlyaWdodCAoQykgMjAwMS02IG1vemlsbGEub3JnCiAgKgpAQCAtNzYsNyAr
NzcsNyBAQCBlbnVtIGpzdGF0ZSB7CiAKIHZvaWQgaW5pdF9zb3VyY2Uoal9kZWNvbXByZXNzX3B0
ciBqZCk7CiBib29sZWFuIGZpbGxfaW5wdXRfYnVmZmVyKGpfZGVjb21wcmVzc19wdHIgamQpOwot
dm9pZCBza2lwX2lucHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZCwgbG9uZyBudW1fYnl0ZXMp
Owordm9pZCBza2lwX2lucHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZCwgbG9uZyBudW1CeXRl
cyk7CiB2b2lkIHRlcm1fc291cmNlKGpfZGVjb21wcmVzc19wdHIgamQpOwogdm9pZCBlcnJvcl9l
eGl0KGpfY29tbW9uX3B0ciBjaW5mbyk7CiAKQEAgLTEzNCw3ICsxMzUsOCBAQCBwdWJsaWM6CiAg
ICAgICAgIGNsb3NlKCk7CiAgICAgfQogCi0gICAgdm9pZCBjbG9zZSgpIHsKKyAgICB2b2lkIGNs
b3NlKCkKKyAgICB7CiAgICAgICAgIGRlY29kZXJfc291cmNlX21nciogc3JjID0gKGRlY29kZXJf
c291cmNlX21nciopbV9pbmZvLnNyYzsKICAgICAgICAgaWYgKHNyYykKICAgICAgICAgICAgIGZh
c3RGcmVlKHNyYyk7CkBAIC0xNDMsMzMgKzE0NSw4OCBAQCBwdWJsaWM6CiAgICAgICAgIGpwZWdf
ZGVzdHJveV9kZWNvbXByZXNzKCZtX2luZm8pOwogICAgIH0KIAotICAgIHZvaWQgc2tpcEJ5dGVz
KGxvbmcgbnVtX2J5dGVzKSB7CisgICAgdm9pZCBza2lwQnl0ZXMobG9uZyBudW1CeXRlcykKKyAg
ICB7CiAgICAgICAgIGRlY29kZXJfc291cmNlX21nciogc3JjID0gKGRlY29kZXJfc291cmNlX21n
ciopbV9pbmZvLnNyYzsKLSAgICAgICAgbG9uZyBieXRlc1RvU2tpcCA9IHN0ZDo6bWluKG51bV9i
eXRlcywgKGxvbmcpc3JjLT5wdWIuYnl0ZXNfaW5fYnVmZmVyKTsKKyAgICAgICAgbG9uZyBieXRl
c1RvU2tpcCA9IHN0ZDo6bWluKG51bUJ5dGVzLCAobG9uZylzcmMtPnB1Yi5ieXRlc19pbl9idWZm
ZXIpOwogICAgICAgICBzcmMtPnB1Yi5ieXRlc19pbl9idWZmZXIgLT0gKHNpemVfdClieXRlc1Rv
U2tpcDsKICAgICAgICAgc3JjLT5wdWIubmV4dF9pbnB1dF9ieXRlICs9IGJ5dGVzVG9Ta2lwOwog
ICAgIAotICAgICAgICBpZiAobnVtX2J5dGVzID4gYnl0ZXNUb1NraXApCi0gICAgICAgICAgICBt
X2J5dGVzVG9Ta2lwID0gKHNpemVfdCkobnVtX2J5dGVzIC0gYnl0ZXNUb1NraXApOworICAgICAg
ICBpZiAobnVtQnl0ZXMgPiBieXRlc1RvU2tpcCkKKyAgICAgICAgICAgIG1fYnl0ZXNUb1NraXAg
PSAoc2l6ZV90KShudW1CeXRlcyAtIGJ5dGVzVG9Ta2lwKTsKICAgICAgICAgZWxzZQogICAgICAg
ICAgICAgbV9ieXRlc1RvU2tpcCA9IDA7CiAgICAgfQogCi0gICAgYm9vbCBkZWNvZGUoY29uc3Qg
VmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIHNpemVPbmx5KSB7CisgICAgYm9vbCBkZWNvZGUoY29u
c3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQorICAgIHsKICAgICAgICAgbV9k
ZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBu
ZXdCeXRlQ291bnQgPSBkYXRhLnNpemUoKSAtIG1fYnVmZmVyTGVuZ3RoOwotICAgICAgICB1bnNp
Z25lZCByZWFkT2Zmc2V0ID0gbV9idWZmZXJMZW5ndGggLSBtX2luZm8uc3JjLT5ieXRlc19pbl9i
dWZmZXI7Ci0KLSAgICAgICAgbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVyICs9IG5ld0J5dGVD
b3VudDsKLSAgICAgICAgbV9pbmZvLnNyYy0+bmV4dF9pbnB1dF9ieXRlID0gKEpPQ1RFVCopKGRh
dGEuZGF0YSgpKSArIHJlYWRPZmZzZXQ7Ci0gICAgICAgIAotICAgICAgICAvLyBJZiB3ZSBzdGls
bCBoYXZlIGJ5dGVzIHRvIHNraXAsIHRyeSB0byBza2lwIHRob3NlIG5vdy4KLSAgICAgICAgaWYg
KG1fYnl0ZXNUb1NraXApCi0gICAgICAgICAgICBza2lwQnl0ZXMobV9ieXRlc1RvU2tpcCk7Ci0K
LSAgICAgICAgbV9idWZmZXJMZW5ndGggPSBkYXRhLnNpemUoKTsKLSAgICAgICAgCisKKyAgICAg
ICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IC0xOworCisgICAgICAgIC8vIFRoaXMgYnVmZmVyIGlz
IHVzZWQgd2hlbiBsb3cgbGV2ZWwganBlZyByZWFkZXIgcmVxdWlyZXMgbW9yZSBjb25zZWN1dGl2
ZSBkYXRhIHRoZW4gdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gaW50ZXJuYWwgc2VnbWVudCBpbiBT
aGFyZWRCdWZmZXIgaGFzIHRvIG1vdmUgb24uCisgICAgICAgIC8vIFRoaXMgZG9lc24ndCBoYXBw
ZW4gdmVyeSBvZnRlbi4gOEsgaXMgZW5vdWdoIGluIG1vc3QgY2FzZXMuCisgICAgICAgIFZlY3Rv
cjx1bnNpZ25lZCBjaGFyLCA4MTkyPiBjb250aWd1b3VzQnVmZmVyOworCisgICAgICAgIFNoYXJl
ZEJ1ZmZlckRhdGFXYWxrZXIgZGF0YVdhbGtlcjsKKyAgICAgICAgd2hpbGUgKHRydWUpIHsKKyAg
ICAgICAgICAgIGlmIChtX2RlY29kZXItPmZhaWxlZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgdW5zaWduZWQgcmVhZE9mZnNldCA9IG1fYnVmZmVyTGVu
Z3RoIC0gbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOworICAgICAgICAgICAgdW5zaWduZWQg
c2VnbWVudExlbmd0aCA9IDA7CisKKyAgICAgICAgICAgIGlmIChyZWFkT2Zmc2V0ID09IGxhc3RP
ZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJMZW5ndGggPT0gZGF0YS5zaXpl
KCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgLy8gTmVl
ZCBtb3JlIGNvbnRpZ3VvdXMgZGF0YSB0byBwcm9jZWVkCisgICAgICAgICAgICAgICAgaWYgKGNv
bnRpZ3VvdXNCdWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAgICAgIGRhdGFXYWxr
ZXIuc2V0KGRhdGEsIHJlYWRPZmZzZXQpOworICAgICAgICAgICAgICAgICAgICBzZWdtZW50TGVu
Z3RoID0gZGF0YVdhbGtlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAgICAgY29udGlndW91
c0J1ZmZlci5hcHBlbmQoZGF0YVdhbGtlci5kYXRhKCksIHNlZ21lbnRMZW5ndGgpOworICAgICAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYXRhV2Fsa2VyLnNldChkYXRhLCByZWFkT2Zm
c2V0ICsgY29udGlndW91c0J1ZmZlci5zaXplKCkpOworICAgICAgICAgICAgICAgIHNlZ21lbnRM
ZW5ndGggPSBkYXRhV2Fsa2VyLmxlbmd0aCgpOworICAgICAgICAgICAgICAgIGNvbnRpZ3VvdXNC
dWZmZXIuYXBwZW5kKGRhdGFXYWxrZXIuZGF0YSgpLCBzZWdtZW50TGVuZ3RoKTsKKyAgICAgICAg
ICAgICAgICBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXIgKz0gc2VnbWVudExlbmd0aDsKKyAg
ICAgICAgICAgICAgICBtX2luZm8uc3JjLT5uZXh0X2lucHV0X2J5dGUgPSAoSk9DVEVUKiljb250
aWd1b3VzQnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckxlbmd0aCA9IHJl
YWRPZmZzZXQgKyBjb250aWd1b3VzQnVmZmVyLnNpemUoKTsKKyAgICAgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyLmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGlndW91c0J1ZmZlci5jbGVhcigpOworCisgICAgICAgICAgICAg
ICAgbGFzdE9mZnNldCA9IHJlYWRPZmZzZXQ7CisKKyAgICAgICAgICAgICAgICBkYXRhV2Fsa2Vy
LnNldChkYXRhLCByZWFkT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzZWdtZW50TGVuZ3RoID0g
ZGF0YVdhbGtlci5sZW5ndGgoKTsKKworICAgICAgICAgICAgICAgIHVuc2lnbmVkIHRvdGFsU2l6
ZSA9IHJlYWRPZmZzZXQgKyBzZWdtZW50TGVuZ3RoOworICAgICAgICAgICAgICAgIG1faW5mby5z
cmMtPmJ5dGVzX2luX2J1ZmZlciArPSB0b3RhbFNpemUgLSBtX2J1ZmZlckxlbmd0aDsKKyAgICAg
ICAgICAgICAgICBtX2luZm8uc3JjLT5uZXh0X2lucHV0X2J5dGUgPSAoSk9DVEVUKilkYXRhV2Fs
a2VyLmRhdGEoKTsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0aWxsIGhhdmUgYnl0ZXMg
dG8gc2tpcCwgdHJ5IHRvIHNraXAgdGhvc2Ugbm93LgorICAgICAgICAgICAgICAgIGlmIChtX2J5
dGVzVG9Ta2lwKQorICAgICAgICAgICAgICAgICAgICBza2lwQnl0ZXMobV9ieXRlc1RvU2tpcCk7
CisKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckxlbmd0aCA9IHRvdGFsU2l6ZTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIGlmICghcnVuRGVjb2RpbmcoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoc2l6ZU9ubHkgJiYgbV9zdGF0ZSAhPSBKUEVH
X0hFQURFUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0KiBpbmZvKCkgeyBy
ZXR1cm4gJm1faW5mbzsgfQorICAgIEpTQU1QQVJSQVkgc2FtcGxlcygpIGNvbnN0IHsgcmV0dXJu
IG1fc2FtcGxlczsgfQorICAgIEpQRUdJbWFnZURlY29kZXIqIGRlY29kZXIoKSB7IHJldHVybiBt
X2RlY29kZXI7IH0KKworcHJpdmF0ZToKKyAgICBib29sIHJ1bkRlY29kaW5nKCkKKyAgICB7CiAg
ICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhlIHNldGptcCBoZXJlLiBPdGhlcndpc2UgYmFkIHRo
aW5ncyB3aWxsIGhhcHBlbgogICAgICAgICBpZiAoc2V0am1wKG1fZXJyLnNldGptcF9idWZmZXIp
KSB7CiAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19TSU5LX05PTl9KUEVHX1RSQUlMRVI7CkBA
IC0zNDksMTYgKzQwNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
IAotICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8oKSB7IHJldHVybiAmbV9pbmZvOyB9
Ci0gICAgSlNBTVBBUlJBWSBzYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbV9zYW1wbGVzOyB9Ci0g
ICAgSlBFR0ltYWdlRGVjb2RlciogZGVjb2RlcigpIHsgcmV0dXJuIG1fZGVjb2RlcjsgfQotCi1w
cml2YXRlOgogICAgIEpQRUdJbWFnZURlY29kZXIqIG1fZGVjb2RlcjsKICAgICB1bnNpZ25lZCBt
X2J1ZmZlckxlbmd0aDsKICAgICBpbnQgbV9ieXRlc1RvU2tpcDsKICAgICBib29sIG1fZGVjb2Rp
bmdTaXplT25seTsKLSAgICBib29sIG1faW5pdGlhbGl6ZWQ7CiAKICAgICBqcGVnX2RlY29tcHJl
c3Nfc3RydWN0IG1faW5mbzsKICAgICBkZWNvZGVyX2Vycm9yX21nciBtX2VycjsKQEAgLTM3OSwx
MCArNDMwLDEwIEBAIHZvaWQgaW5pdF9zb3VyY2Uoal9kZWNvbXByZXNzX3B0ciBqZCkKIHsKIH0K
IAotdm9pZCBza2lwX2lucHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZCwgbG9uZyBudW1fYnl0
ZXMpCit2b2lkIHNraXBfaW5wdXRfZGF0YShqX2RlY29tcHJlc3NfcHRyIGpkLCBsb25nIG51bUJ5
dGVzKQogewogICAgIGRlY29kZXJfc291cmNlX21nciAqc3JjID0gKGRlY29kZXJfc291cmNlX21n
ciAqKWpkLT5zcmM7Ci0gICAgc3JjLT5kZWNvZGVyLT5za2lwQnl0ZXMobnVtX2J5dGVzKTsKKyAg
ICBzcmMtPmRlY29kZXItPnNraXBCeXRlcyhudW1CeXRlcyk7CiB9CiAKIGJvb2xlYW4gZmlsbF9p
bnB1dF9idWZmZXIoal9kZWNvbXByZXNzX3B0ciBqZCkKQEAgLTQ1Miw3ICs1MDMsNyBAQCB2b2lk
IEpQRUdJbWFnZURlY29kZXI6OmRlY29kZShib29sIHNpemVPbmx5KQogICAgIGlmIChtX2ZhaWxl
ZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPmRlY29kZSht
X2RhdGEtPmJ1ZmZlcigpLCBzaXplT25seSk7CisgICAgbV9mYWlsZWQgPSAhbV9yZWFkZXItPmRl
Y29kZSgqbV9kYXRhLCBzaXplT25seSk7CiAKICAgICBpZiAobV9mYWlsZWQgfHwgKCFtX2ZyYW1l
QnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVswXS5zdGF0dXMoKSA9
PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKSB7CiAgICAgICAgIGRlbGV0ZSBtX3JlYWRl
cjsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>46066</attachid>
            <date>2010-01-07 11:18:23 -0800</date>
            <delta_ts>2010-06-10 20:51:37 -0700</delta_ts>
            <desc>fixed built error</desc>
            <filename>33268.patch</filename>
            <type>text/plain</type>
            <size>12099</size>
            <attacher name="Yong Li">yong.li.webkit</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
MWVmOGRhMC4uZTAxMWRmOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSwzNSBAQAogMjAxMC0wMS0wNiAgWW9uZyBMaSAgPHlv
bGlAcmltLmNvbT4KIAorICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBNYWtlIEpQRUdJbWFnZURlY29kZXIgcmVhZCBzZWdtZW50ZWQgU2hhcmVkQnVmZmVyCisg
ICAgICAgIEFsc28gbW92ZSBmdW5jdGlvbiBjb3B5RnJvbVNoYXJlZEJ1ZmZlcigpIHRvIFNoYXJl
ZEJ1ZmZlcgorICAgICAgICBhbmQgcmVuYW1lIHRvIGV4dHJhY3QoKS4KKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzMjY4CisKKyAgICAgICAgKiBwbGF0
Zm9ybS9TaGFyZWRCdWZmZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyOjpl
eHRyYWN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaDoKKyAgICAgICAgKFdl
YkNvcmU6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXI6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U2hhcmVkQnVmZmVyRGF0YVdhbGtlcjo6bGVuZ3RoKToKKyAgICAg
ICAgKFdlYkNvcmU6OlNoYXJlZEJ1ZmZlckRhdGFXYWxrZXI6OmRhdGEpOgorICAgICAgICAoV2Vi
Q29yZTo6U2hhcmVkQnVmZmVyRGF0YVdhbGtlcjo6c2V0KToKKyAgICAgICAgKFdlYkNvcmU6OlNo
YXJlZEJ1ZmZlckRhdGFXYWxrZXI6OmFkdmFuY2UpOgorICAgICAgICAqIHBsYXRmb3JtL2ltYWdl
LWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbWFnZURlY29k
ZXI6OmNyZWF0ZSk6CisgICAgICAgICogcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVH
SW1hZ2VEZWNvZGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJlYWRlcjo6Y2xv
c2UpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpza2lwQnl0ZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2ViQ29y
ZTo6SlBFR0ltYWdlUmVhZGVyOjppbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkpQRUdJbWFnZVJl
YWRlcjo6c2FtcGxlcyk6CisgICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VSZWFkZXI6OmRlY29k
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6SlBFR0ltYWdlUmVhZGVyOjpydW5EZWNvZGluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpKUEVHSW1hZ2VEZWNvZGVyOjpkZWNvZGUpOgorICAgICAgICAoV2Vi
Q29yZTo6SlBFR0ltYWdlRGVjb2Rlcjo6anBlZ0NvbXBsZXRlKToKKworMjAxMC0wMS0wNiAgWW9u
ZyBMaSAgPHlvbGlAcmltLmNvbT4KKwogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4K
IAogICAgICAgICBGaXggdGhlIGJ1ZyBpbiBwcmV2aW91cyBjb21taXQ6IHdlIHNob3VsZG4ndCBm
aW5pc2gKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcCBiL1dl
YkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmNwcAppbmRleCA0YTQ2YzJjLi43NmJhZTFjIDEw
MDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5jcHAKKysrIGIvV2ViQ29y
ZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuY3BwCkBAIC0yMzgsNiArMjM4LDIxIEBAIHVuc2lnbmVk
IFNoYXJlZEJ1ZmZlcjo6Z2V0U29tZURhdGEoY29uc3QgY2hhciomIHNvbWVEYXRhLCB1bnNpZ25l
ZCBwb3NpdGlvbikgY29uCiAgICAgcmV0dXJuIHNlZ21lbnQgPT0gc2VnbWVudHMgLSAxID8gc2Vn
bWVudGVkU2l6ZSAtIHBvc2l0aW9uIDogc2VnbWVudFNpemUgLSBwb3NpdGlvbkluU2VnbWVudDsK
IH0KIAordW5zaWduZWQgU2hhcmVkQnVmZmVyOjpleHRyYWN0KGNoYXIqIGJ1ZmZlciwgdW5zaWdu
ZWQgYnVmZmVyTGVuZ3RoLCB1bnNpZ25lZCByZWFkT2Zmc2V0KSBjb25zdAoreworICAgIHVuc2ln
bmVkIGJ5dGVzRXh0cmFjdGVkID0gMDsKKyAgICBjb25zdCBjaGFyKiBtb3JlRGF0YTsKKyAgICB3
aGlsZSAodW5zaWduZWQgbW9yZURhdGFMZW5ndGggPSBnZXRTb21lRGF0YShtb3JlRGF0YSwgcmVh
ZE9mZnNldCkpIHsKKyAgICAgICAgdW5zaWduZWQgYnl0ZXNUb0NvcHkgPSBtaW4oYnVmZmVyTGVu
Z3RoIC0gYnl0ZXNFeHRyYWN0ZWQsIG1vcmVEYXRhTGVuZ3RoKTsKKyAgICAgICAgbWVtY3B5KGJ1
ZmZlciArIGJ5dGVzRXh0cmFjdGVkLCBtb3JlRGF0YSwgYnl0ZXNUb0NvcHkpOworICAgICAgICBi
eXRlc0V4dHJhY3RlZCArPSBieXRlc1RvQ29weTsKKyAgICAgICAgaWYgKGJ5dGVzRXh0cmFjdGVk
ID09IGJ1ZmZlckxlbmd0aCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICByZWFkT2Zmc2V0
ICs9IGJ5dGVzVG9Db3B5OworICAgIH0KKyAgICByZXR1cm4gYnl0ZXNFeHRyYWN0ZWQ7Cit9CisK
ICNpZiAhUExBVEZPUk0oQ0YpCiAKIGlubGluZSB2b2lkIFNoYXJlZEJ1ZmZlcjo6Y2xlYXJQbGF0
Zm9ybURhdGEoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaCBi
L1dlYkNvcmUvcGxhdGZvcm0vU2hhcmVkQnVmZmVyLmgKaW5kZXggYTU1NjZmMi4uNzQ5N2Q2NiAx
MDA2NDQKLS0tIGEvV2ViQ29yZS9wbGF0Zm9ybS9TaGFyZWRCdWZmZXIuaAorKysgYi9XZWJDb3Jl
L3BsYXRmb3JtL1NoYXJlZEJ1ZmZlci5oCkBAIC0xMTQsNiArMTE0LDggQEAgcHVibGljOgogICAg
IC8vICAgICAgfQogICAgIHVuc2lnbmVkIGdldFNvbWVEYXRhKGNvbnN0IGNoYXIqJiBkYXRhLCB1
bnNpZ25lZCBwb3NpdGlvbiA9IDApIGNvbnN0OwogCisgICAgdW5zaWduZWQgZXh0cmFjdChjaGFy
KiBidWZmZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgdW5zaWduZWQgcmVhZE9mZnNldCA9IDAp
IGNvbnN0OworCiBwcml2YXRlOgogICAgIFNoYXJlZEJ1ZmZlcigpOwogICAgIFNoYXJlZEJ1ZmZl
cihjb25zdCBjaGFyKiwgaW50KTsKQEAgLTEzMiw3ICsxMzQsNDUgQEAgcHJpdmF0ZToKICAgICBS
ZXRhaW5QdHI8Q0ZEYXRhUmVmPiBtX2NmRGF0YTsKICNlbmRpZgogfTsKLSAgICAKKworLy8gQSBo
ZWxwZXIgY2xhc3MgdGhhdCBjYW4gYmUgdXNlZCB0byB3YWxrIHRocm91Z2ggYSBTaGFyZWRCdWZm
ZXIgbm8gbWF0dGVyIGl0J3Mgc2VnbWVudGVkIG9yIG5vdC4KK2NsYXNzIFNoYXJlZEJ1ZmZlckRh
dGFXYWxrZXIgeworcHVibGljOgorICAgIFNoYXJlZEJ1ZmZlckRhdGFXYWxrZXIoKSA6IG1fYnVm
ZmVyKDApLCBtX2xlbmd0aCgwKSwgbV9kYXRhKDApIHt9CisgICAgZXhwbGljaXQgU2hhcmVkQnVm
ZmVyRGF0YVdhbGtlcihjb25zdCBTaGFyZWRCdWZmZXImIGJ1ZmZlciwgdW5zaWduZWQgb2Zmc2V0
ID0gMCkKKyAgICAgICAgOiBtX2J1ZmZlcigmYnVmZmVyKQorICAgICAgICAsIG1fb2Zmc2V0KG9m
ZnNldCkKKyAgICB7CisgICAgICAgIG1fbGVuZ3RoID0gbV9idWZmZXItPmdldFNvbWVEYXRhKG1f
ZGF0YSwgbV9vZmZzZXQpOworICAgIH0KKworICAgIC8vIFJldHVybnMgdGhlIGN1cnJlbnQgcG9p
bnRlcgorICAgIGNvbnN0IGNoYXIqIGRhdGEoKSBjb25zdCB7IHJldHVybiBtX2RhdGE7IH0KKwor
ICAgIC8vIFJldHVybiBudW1iZXIgb2YgY29uc2VjdXRpdmUgYnl0ZXMgdGhhdCBmb2xsb3dzIGRh
dGEoKS4KKyAgICAvLyBSZXR1cm4gMCB3aGVuIG5vIG1vcmUgZGF0YSBpcyBsZWZ0IGluIHRoZSBT
aGFyZWRCdWZmZXIuCisgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gbV9sZW5n
dGg7IH0KKworICAgIHZvaWQgc2V0KGNvbnN0IFNoYXJlZEJ1ZmZlciYgYnVmZmVyLCB1bnNpZ25l
ZCBvZmZzZXQgPSAwKQorICAgIHsKKyAgICAgICAgbV9idWZmZXIgPSAmYnVmZmVyOworICAgICAg
ICBtX29mZnNldCA9IG9mZnNldDsKKyAgICAgICAgbV9sZW5ndGggPSBtX2J1ZmZlci0+Z2V0U29t
ZURhdGEobV9kYXRhLCBtX29mZnNldCk7CisgICAgfQorCisgICAgLy8gTW92ZSB0aGUgcG9pbnRl
ciB0byB0aGUgYmVnaW5uaW5nIG9mIG5leHQgc2VnbWVudC4KKyAgICB2b2lkIGFkdmFuY2UoKQor
ICAgIHsKKyAgICAgICAgbV9vZmZzZXQgKz0gbV9sZW5ndGg7CisgICAgICAgIG1fbGVuZ3RoID0g
bV9idWZmZXItPmdldFNvbWVEYXRhKG1fZGF0YSwgbV9vZmZzZXQpOworICAgIH0KK3ByaXZhdGU6
CisgICAgY29uc3QgU2hhcmVkQnVmZmVyKiBtX2J1ZmZlcjsKKyAgICB1bnNpZ25lZCBtX29mZnNl
dDsKKyAgICB1bnNpZ25lZCBtX2xlbmd0aDsKKyAgICBjb25zdCBjaGFyKiBtX2RhdGE7Cit9Owor
CiB9CiAKICNlbmRpZiAvLyBTaGFyZWRCdWZmZXJfaApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9wbGF0
Zm9ybS9pbWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwIGIvV2ViQ29yZS9wbGF0Zm9ybS9p
bWFnZS1kZWNvZGVycy9JbWFnZURlY29kZXIuY3BwCmluZGV4IDFiMjMxMTEuLjRmY2NjOGQgMTAw
NjQ0Ci0tLSBhL1dlYkNvcmUvcGxhdGZvcm0vaW1hZ2UtZGVjb2RlcnMvSW1hZ2VEZWNvZGVyLmNw
cAorKysgYi9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL0ltYWdlRGVjb2Rlci5jcHAK
QEAgLTM5LDI4ICszOSwxMyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKLXN0YXRpYyB1bnNpZ25lZCBjb3B5RnJvbVNoYXJlZEJ1ZmZlcihjaGFyKiBidWZm
ZXIsIHVuc2lnbmVkIGJ1ZmZlckxlbmd0aCwgY29uc3QgU2hhcmVkQnVmZmVyJiBzaGFyZWRCdWZm
ZXIsIHVuc2lnbmVkIG9mZnNldCkKLXsKLSAgICB1bnNpZ25lZCBieXRlc0V4dHJhY3RlZCA9IDA7
Ci0gICAgY29uc3QgY2hhciogbW9yZURhdGE7Ci0gICAgd2hpbGUgKHVuc2lnbmVkIG1vcmVEYXRh
TGVuZ3RoID0gc2hhcmVkQnVmZmVyLmdldFNvbWVEYXRhKG1vcmVEYXRhLCBvZmZzZXQpKSB7Ci0g
ICAgICAgIHVuc2lnbmVkIGJ5dGVzVG9Db3B5ID0gbWluKGJ1ZmZlckxlbmd0aCAtIGJ5dGVzRXh0
cmFjdGVkLCBtb3JlRGF0YUxlbmd0aCk7Ci0gICAgICAgIG1lbWNweShidWZmZXIgKyBieXRlc0V4
dHJhY3RlZCwgbW9yZURhdGEsIGJ5dGVzVG9Db3B5KTsKLSAgICAgICAgYnl0ZXNFeHRyYWN0ZWQg
Kz0gYnl0ZXNUb0NvcHk7Ci0gICAgICAgIGlmIChieXRlc0V4dHJhY3RlZCA9PSBidWZmZXJMZW5n
dGgpCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgb2Zmc2V0ICs9IGJ5dGVzVG9Db3B5Owot
ICAgIH0KLSAgICByZXR1cm4gYnl0ZXNFeHRyYWN0ZWQ7Ci19Ci0KIEltYWdlRGVjb2RlciogSW1h
Z2VEZWNvZGVyOjpjcmVhdGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhKQogewogICAgIC8vIFhC
TXMgcmVxdWlyZSA4IGJ5dGVzIG9mIGluZm8uCiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIG1h
eE1hcmtlckxlbmd0aCA9IDg7CiAKICAgICBjaGFyIGNvbnRlbnRzW21heE1hcmtlckxlbmd0aF07
Ci0gICAgdW5zaWduZWQgbGVuZ3RoID0gY29weUZyb21TaGFyZWRCdWZmZXIoY29udGVudHMsIG1h
eE1hcmtlckxlbmd0aCwgZGF0YSwgMCk7CisgICAgdW5zaWduZWQgbGVuZ3RoID0gZGF0YS5leHRy
YWN0KGNvbnRlbnRzLCBtYXhNYXJrZXJMZW5ndGgpOwogCiAgICAgLy8gV2UgbmVlZCBhdCBsZWFz
dCA0IGJ5dGVzIHRvIGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGltYWdlIHdlJ3JlIGRlYWxpbmcg
d2l0aC4KICAgICBpZiAobGVuZ3RoIDwgNCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvcGxhdGZvcm0v
aW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcCBiL1dlYkNvcmUvcGxhdGZv
cm0vaW1hZ2UtZGVjb2RlcnMvanBlZy9KUEVHSW1hZ2VEZWNvZGVyLmNwcAppbmRleCA5NjkxYzM4
Li45MzlkNmRiIDEwMDY0NAotLS0gYS9XZWJDb3JlL3BsYXRmb3JtL2ltYWdlLWRlY29kZXJzL2pw
ZWcvSlBFR0ltYWdlRGVjb2Rlci5jcHAKKysrIGIvV2ViQ29yZS9wbGF0Zm9ybS9pbWFnZS1kZWNv
ZGVycy9qcGVnL0pQRUdJbWFnZURlY29kZXIuY3BwCkBAIC0xLDUgKzEsNiBAQAogLyoKICAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLgorICogQ29weXJpZ2h0IChDKSBS
ZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDA5LTIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUG9ydGlvbnMgYXJlIENvcHlyaWdodCAoQykgMjAwMS02IG1vemlsbGEub3JnCiAg
KgpAQCAtNzYsNyArNzcsNyBAQCBlbnVtIGpzdGF0ZSB7CiAKIHZvaWQgaW5pdF9zb3VyY2Uoal9k
ZWNvbXByZXNzX3B0ciBqZCk7CiBib29sZWFuIGZpbGxfaW5wdXRfYnVmZmVyKGpfZGVjb21wcmVz
c19wdHIgamQpOwotdm9pZCBza2lwX2lucHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZCwgbG9u
ZyBudW1fYnl0ZXMpOwordm9pZCBza2lwX2lucHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZCwg
bG9uZyBudW1CeXRlcyk7CiB2b2lkIHRlcm1fc291cmNlKGpfZGVjb21wcmVzc19wdHIgamQpOwog
dm9pZCBlcnJvcl9leGl0KGpfY29tbW9uX3B0ciBjaW5mbyk7CiAKQEAgLTEzNCw3ICsxMzUsOCBA
QCBwdWJsaWM6CiAgICAgICAgIGNsb3NlKCk7CiAgICAgfQogCi0gICAgdm9pZCBjbG9zZSgpIHsK
KyAgICB2b2lkIGNsb3NlKCkKKyAgICB7CiAgICAgICAgIGRlY29kZXJfc291cmNlX21nciogc3Jj
ID0gKGRlY29kZXJfc291cmNlX21nciopbV9pbmZvLnNyYzsKICAgICAgICAgaWYgKHNyYykKICAg
ICAgICAgICAgIGZhc3RGcmVlKHNyYyk7CkBAIC0xNDMsMzMgKzE0NSw4OCBAQCBwdWJsaWM6CiAg
ICAgICAgIGpwZWdfZGVzdHJveV9kZWNvbXByZXNzKCZtX2luZm8pOwogICAgIH0KIAotICAgIHZv
aWQgc2tpcEJ5dGVzKGxvbmcgbnVtX2J5dGVzKSB7CisgICAgdm9pZCBza2lwQnl0ZXMobG9uZyBu
dW1CeXRlcykKKyAgICB7CiAgICAgICAgIGRlY29kZXJfc291cmNlX21nciogc3JjID0gKGRlY29k
ZXJfc291cmNlX21nciopbV9pbmZvLnNyYzsKLSAgICAgICAgbG9uZyBieXRlc1RvU2tpcCA9IHN0
ZDo6bWluKG51bV9ieXRlcywgKGxvbmcpc3JjLT5wdWIuYnl0ZXNfaW5fYnVmZmVyKTsKKyAgICAg
ICAgbG9uZyBieXRlc1RvU2tpcCA9IHN0ZDo6bWluKG51bUJ5dGVzLCAobG9uZylzcmMtPnB1Yi5i
eXRlc19pbl9idWZmZXIpOwogICAgICAgICBzcmMtPnB1Yi5ieXRlc19pbl9idWZmZXIgLT0gKHNp
emVfdClieXRlc1RvU2tpcDsKICAgICAgICAgc3JjLT5wdWIubmV4dF9pbnB1dF9ieXRlICs9IGJ5
dGVzVG9Ta2lwOwogICAgIAotICAgICAgICBpZiAobnVtX2J5dGVzID4gYnl0ZXNUb1NraXApCi0g
ICAgICAgICAgICBtX2J5dGVzVG9Ta2lwID0gKHNpemVfdCkobnVtX2J5dGVzIC0gYnl0ZXNUb1Nr
aXApOworICAgICAgICBpZiAobnVtQnl0ZXMgPiBieXRlc1RvU2tpcCkKKyAgICAgICAgICAgIG1f
Ynl0ZXNUb1NraXAgPSAoc2l6ZV90KShudW1CeXRlcyAtIGJ5dGVzVG9Ta2lwKTsKICAgICAgICAg
ZWxzZQogICAgICAgICAgICAgbV9ieXRlc1RvU2tpcCA9IDA7CiAgICAgfQogCi0gICAgYm9vbCBk
ZWNvZGUoY29uc3QgVmVjdG9yPGNoYXI+JiBkYXRhLCBib29sIHNpemVPbmx5KSB7CisgICAgYm9v
bCBkZWNvZGUoY29uc3QgU2hhcmVkQnVmZmVyJiBkYXRhLCBib29sIHNpemVPbmx5KQorICAgIHsK
ICAgICAgICAgbV9kZWNvZGluZ1NpemVPbmx5ID0gc2l6ZU9ubHk7Ci0gICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCBuZXdCeXRlQ291bnQgPSBkYXRhLnNpemUoKSAtIG1fYnVmZmVyTGVuZ3RoOwot
ICAgICAgICB1bnNpZ25lZCByZWFkT2Zmc2V0ID0gbV9idWZmZXJMZW5ndGggLSBtX2luZm8uc3Jj
LT5ieXRlc19pbl9idWZmZXI7Ci0KLSAgICAgICAgbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVy
ICs9IG5ld0J5dGVDb3VudDsKLSAgICAgICAgbV9pbmZvLnNyYy0+bmV4dF9pbnB1dF9ieXRlID0g
KEpPQ1RFVCopKGRhdGEuZGF0YSgpKSArIHJlYWRPZmZzZXQ7Ci0gICAgICAgIAotICAgICAgICAv
LyBJZiB3ZSBzdGlsbCBoYXZlIGJ5dGVzIHRvIHNraXAsIHRyeSB0byBza2lwIHRob3NlIG5vdy4K
LSAgICAgICAgaWYgKG1fYnl0ZXNUb1NraXApCi0gICAgICAgICAgICBza2lwQnl0ZXMobV9ieXRl
c1RvU2tpcCk7Ci0KLSAgICAgICAgbV9idWZmZXJMZW5ndGggPSBkYXRhLnNpemUoKTsKLSAgICAg
ICAgCisKKyAgICAgICAgdW5zaWduZWQgbGFzdE9mZnNldCA9IC0xOworCisgICAgICAgIC8vIFRo
aXMgYnVmZmVyIGlzIHVzZWQgd2hlbiBsb3cgbGV2ZWwganBlZyByZWFkZXIgcmVxdWlyZXMgbW9y
ZSBjb25zZWN1dGl2ZSBkYXRhIHRoZW4gdGhlIGN1cnJlbnQKKyAgICAgICAgLy8gaW50ZXJuYWwg
c2VnbWVudCBpbiBTaGFyZWRCdWZmZXIgaGFzIHRvIG1vdmUgb24uCisgICAgICAgIC8vIFRoaXMg
ZG9lc24ndCBoYXBwZW4gdmVyeSBvZnRlbi4gOEsgaXMgZW5vdWdoIGluIG1vc3QgY2FzZXMuCisg
ICAgICAgIFZlY3Rvcjx1bnNpZ25lZCBjaGFyLCA4MTkyPiBjb250aWd1b3VzQnVmZmVyOworCisg
ICAgICAgIFNoYXJlZEJ1ZmZlckRhdGFXYWxrZXIgZGF0YVdhbGtlcjsKKyAgICAgICAgd2hpbGUg
KHRydWUpIHsKKyAgICAgICAgICAgIGlmIChtX2RlY29kZXItPmZhaWxlZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgdW5zaWduZWQgcmVhZE9mZnNldCA9
IG1fYnVmZmVyTGVuZ3RoIC0gbV9pbmZvLnNyYy0+Ynl0ZXNfaW5fYnVmZmVyOworICAgICAgICAg
ICAgdW5zaWduZWQgc2VnbWVudExlbmd0aCA9IDA7CisKKyAgICAgICAgICAgIGlmIChyZWFkT2Zm
c2V0ID09IGxhc3RPZmZzZXQpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9idWZmZXJMZW5ndGgg
PT0gZGF0YS5zaXplKCkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAg
ICAgICAgLy8gTmVlZCBtb3JlIGNvbnRpZ3VvdXMgZGF0YSB0byBwcm9jZWVkCisgICAgICAgICAg
ICAgICAgaWYgKGNvbnRpZ3VvdXNCdWZmZXIuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIGRhdGFXYWxrZXIuc2V0KGRhdGEsIHJlYWRPZmZzZXQpOworICAgICAgICAgICAgICAgICAg
ICBzZWdtZW50TGVuZ3RoID0gZGF0YVdhbGtlci5sZW5ndGgoKTsKKyAgICAgICAgICAgICAgICAg
ICAgY29udGlndW91c0J1ZmZlci5hcHBlbmQoZGF0YVdhbGtlci5kYXRhKCksIHNlZ21lbnRMZW5n
dGgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBkYXRhV2Fsa2VyLnNldChk
YXRhLCByZWFkT2Zmc2V0ICsgY29udGlndW91c0J1ZmZlci5zaXplKCkpOworICAgICAgICAgICAg
ICAgIHNlZ21lbnRMZW5ndGggPSBkYXRhV2Fsa2VyLmxlbmd0aCgpOworICAgICAgICAgICAgICAg
IGNvbnRpZ3VvdXNCdWZmZXIuYXBwZW5kKGRhdGFXYWxrZXIuZGF0YSgpLCBzZWdtZW50TGVuZ3Ro
KTsKKyAgICAgICAgICAgICAgICBtX2luZm8uc3JjLT5ieXRlc19pbl9idWZmZXIgKz0gc2VnbWVu
dExlbmd0aDsKKyAgICAgICAgICAgICAgICBtX2luZm8uc3JjLT5uZXh0X2lucHV0X2J5dGUgPSAo
Sk9DVEVUKiljb250aWd1b3VzQnVmZmVyLmRhdGEoKTsKKyAgICAgICAgICAgICAgICBtX2J1ZmZl
ckxlbmd0aCA9IHJlYWRPZmZzZXQgKyBjb250aWd1b3VzQnVmZmVyLnNpemUoKTsKKyAgICAgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFjb250aWd1b3VzQnVmZmVyLmlzRW1w
dHkoKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGlndW91c0J1ZmZlci5jbGVhcigpOworCisg
ICAgICAgICAgICAgICAgbGFzdE9mZnNldCA9IHJlYWRPZmZzZXQ7CisKKyAgICAgICAgICAgICAg
ICBkYXRhV2Fsa2VyLnNldChkYXRhLCByZWFkT2Zmc2V0KTsKKyAgICAgICAgICAgICAgICBzZWdt
ZW50TGVuZ3RoID0gZGF0YVdhbGtlci5sZW5ndGgoKTsKKworICAgICAgICAgICAgICAgIHVuc2ln
bmVkIHRvdGFsU2l6ZSA9IHJlYWRPZmZzZXQgKyBzZWdtZW50TGVuZ3RoOworICAgICAgICAgICAg
ICAgIG1faW5mby5zcmMtPmJ5dGVzX2luX2J1ZmZlciArPSB0b3RhbFNpemUgLSBtX2J1ZmZlckxl
bmd0aDsKKyAgICAgICAgICAgICAgICBtX2luZm8uc3JjLT5uZXh0X2lucHV0X2J5dGUgPSAoSk9D
VEVUKilkYXRhV2Fsa2VyLmRhdGEoKTsKKworICAgICAgICAgICAgICAgIC8vIElmIHdlIHN0aWxs
IGhhdmUgYnl0ZXMgdG8gc2tpcCwgdHJ5IHRvIHNraXAgdGhvc2Ugbm93LgorICAgICAgICAgICAg
ICAgIGlmIChtX2J5dGVzVG9Ta2lwKQorICAgICAgICAgICAgICAgICAgICBza2lwQnl0ZXMobV9i
eXRlc1RvU2tpcCk7CisKKyAgICAgICAgICAgICAgICBtX2J1ZmZlckxlbmd0aCA9IHRvdGFsU2l6
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghcnVuRGVjb2RpbmcoKSkKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBpZiAoc2l6ZU9ubHkgJiYgbV9z
dGF0ZSAhPSBKUEVHX0hFQURFUikKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBqcGVnX2RlY29tcHJlc3Nfc3RydWN0
KiBpbmZvKCkgeyByZXR1cm4gJm1faW5mbzsgfQorICAgIEpTQU1QQVJSQVkgc2FtcGxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fc2FtcGxlczsgfQorICAgIEpQRUdJbWFnZURlY29kZXIqIGRlY29kZXIo
KSB7IHJldHVybiBtX2RlY29kZXI7IH0KKworcHJpdmF0ZToKKyAgICBib29sIHJ1bkRlY29kaW5n
KCkKKyAgICB7CiAgICAgICAgIC8vIFdlIG5lZWQgdG8gZG8gdGhlIHNldGptcCBoZXJlLiBPdGhl
cndpc2UgYmFkIHRoaW5ncyB3aWxsIGhhcHBlbgogICAgICAgICBpZiAoc2V0am1wKG1fZXJyLnNl
dGptcF9idWZmZXIpKSB7CiAgICAgICAgICAgICBtX3N0YXRlID0gSlBFR19TSU5LX05PTl9KUEVH
X1RSQUlMRVI7CkBAIC0zNDksMTYgKzQwNiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KIAotICAgIGpwZWdfZGVjb21wcmVzc19zdHJ1Y3QqIGluZm8oKSB7IHJldHVy
biAmbV9pbmZvOyB9Ci0gICAgSlNBTVBBUlJBWSBzYW1wbGVzKCkgY29uc3QgeyByZXR1cm4gbV9z
YW1wbGVzOyB9Ci0gICAgSlBFR0ltYWdlRGVjb2RlciogZGVjb2RlcigpIHsgcmV0dXJuIG1fZGVj
b2RlcjsgfQotCi1wcml2YXRlOgogICAgIEpQRUdJbWFnZURlY29kZXIqIG1fZGVjb2RlcjsKICAg
ICB1bnNpZ25lZCBtX2J1ZmZlckxlbmd0aDsKICAgICBpbnQgbV9ieXRlc1RvU2tpcDsKICAgICBi
b29sIG1fZGVjb2RpbmdTaXplT25seTsKLSAgICBib29sIG1faW5pdGlhbGl6ZWQ7CiAKICAgICBq
cGVnX2RlY29tcHJlc3Nfc3RydWN0IG1faW5mbzsKICAgICBkZWNvZGVyX2Vycm9yX21nciBtX2Vy
cjsKQEAgLTM3OSwxMCArNDMwLDEwIEBAIHZvaWQgaW5pdF9zb3VyY2Uoal9kZWNvbXByZXNzX3B0
ciBqZCkKIHsKIH0KIAotdm9pZCBza2lwX2lucHV0X2RhdGEoal9kZWNvbXByZXNzX3B0ciBqZCwg
bG9uZyBudW1fYnl0ZXMpCit2b2lkIHNraXBfaW5wdXRfZGF0YShqX2RlY29tcHJlc3NfcHRyIGpk
LCBsb25nIG51bUJ5dGVzKQogewogICAgIGRlY29kZXJfc291cmNlX21nciAqc3JjID0gKGRlY29k
ZXJfc291cmNlX21nciAqKWpkLT5zcmM7Ci0gICAgc3JjLT5kZWNvZGVyLT5za2lwQnl0ZXMobnVt
X2J5dGVzKTsKKyAgICBzcmMtPmRlY29kZXItPnNraXBCeXRlcyhudW1CeXRlcyk7CiB9CiAKIGJv
b2xlYW4gZmlsbF9pbnB1dF9idWZmZXIoal9kZWNvbXByZXNzX3B0ciBqZCkKQEAgLTQ1Miw3ICs1
MDMsNyBAQCB2b2lkIEpQRUdJbWFnZURlY29kZXI6OmRlY29kZShib29sIHNpemVPbmx5KQogICAg
IGlmIChtX2ZhaWxlZCkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9mYWlsZWQgPSAhbV9yZWFk
ZXItPmRlY29kZShtX2RhdGEtPmJ1ZmZlcigpLCBzaXplT25seSk7CisgICAgbV9mYWlsZWQgPSAh
bV9yZWFkZXItPmRlY29kZSgqbV9kYXRhLCBzaXplT25seSk7CiAKICAgICBpZiAobV9mYWlsZWQg
fHwgKCFtX2ZyYW1lQnVmZmVyQ2FjaGUuaXNFbXB0eSgpICYmIG1fZnJhbWVCdWZmZXJDYWNoZVsw
XS5zdGF0dXMoKSA9PSBSR0JBMzJCdWZmZXI6OkZyYW1lQ29tcGxldGUpKSB7CiAgICAgICAgIGRl
bGV0ZSBtX3JlYWRlcjsK
</data>
<flag name="review"
          id="28275"
          type_id="1"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>