<?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>30710</bug_id>
          
          <creation_ts>2009-10-23 01:41:22 -0700</creation_ts>
          <short_desc>[Qt] QWebHistory::saveState() is inconsistent with the Qt API</short_desc>
          <delta_ts>2009-11-24 07:48:06 -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>WebKit Qt</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Qt</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>29843</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Benjamin Poulain">benjamin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>benjamin</cc>
    
    <cc>jedrzej.nowacki</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>manyoso</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>vestbo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>157123</commentid>
    <comment_count>0</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-23 01:41:22 -0700</bug_when>
    <thetext>In Qt, there is classically two ways to serialize an object to a QByteArray: Q...::saveState() and QDataStream &amp; operator&lt;&lt;(Q...).

The function saveState is used for visible object like widgets (QFileDialog, QSplitter, etc). The bytearray returned is typically small, and is saved with QSettings.

For all other objects (QColor, QImage, etc), QDataStream &amp; operator&lt;&lt;(Q...) is preferred since it can be used to write directly on the filesystem.


Since, QWebHistory is not a Widget, the functions QWebHistory::saveState() and QWebHistory::restoreState() should be removed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158156</commentid>
    <comment_count>1</comment_count>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-10-27 05:38:40 -0700</bug_when>
    <thetext>Agree, let&apos;s remove these for now and keep the stream operators.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158385</commentid>
    <comment_count>2</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-27 15:04:10 -0700</bug_when>
    <thetext>OK, I&apos;m working on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158490</commentid>
    <comment_count>3</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-10-28 01:47:55 -0700</bug_when>
    <thetext>Few month ago there was a discussion in the Oslo office about these functions. The main argument for having saveState() and restoreState() was to keep coherence with other Qt classes (like QApplication, QMainWindow...). Second issue was a problem of multiple version of QWebHistory. The QDataSteream version was changed on most of Qt minor, but not in bug fix releases and the version format is X.Y (enum QDataStream::Version). As most of the QtWebkit bug fix are done by upstreaming the Webkit part, there is a chance that we will have to bump the version in a bug fix release. Qt&apos;s and Webkit&apos;s version number are out of sync.

(In reply to comment #0)
&gt; The function saveState is used for visible object like widgets (QFileDialog,
&gt; QSplitter, etc). The bytearray returned is typically small, and is saved with
&gt; QSettings.
&gt; 
&gt; For all other objects (QColor, QImage, etc), QDataStream &amp; operator&lt;&lt;(Q...) is
&gt; preferred since it can be used to write directly on the filesystem.
The QApplication is not a widget and it is hard to say that it is visible part of an application.
QWebHistory is not so big, so comparison to QImage is an abuse. I don&apos;t think that writing history is a bottle neck, and it have to be done as a real stream. But of course optimizations are welcomed :-).

Summary:
The case is not so obvious, but I prefer streaming operators too. And I think that removing of save&amp;restore functions is perfectly save for the first Qt 4.6 release.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158493</commentid>
    <comment_count>4</comment_count>
    <who name="Benjamin Poulain">benjamin</who>
    <bug_when>2009-10-28 02:13:37 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; Few month ago there was a discussion in the Oslo office about these functions.
&gt; The main argument for having saveState() and restoreState() was to keep
&gt; coherence with other Qt classes (like QApplication, QMainWindow...). Second
&gt; issue was a problem of multiple version of QWebHistory. The QDataSteream
&gt; version was changed on most of Qt minor, but not in bug fix releases and the
&gt; version format is X.Y (enum QDataStream::Version). As most of the QtWebkit bug
&gt; fix are done by upstreaming the Webkit part, there is a chance that we will
&gt; have to bump the version in a bug fix release. Qt&apos;s and Webkit&apos;s version number
&gt; are out of sync.

To be able to work around a possible bug, maybe we should introduce a version number in the stream?
This way we can deal with the bug silently by using this version number and we will not ask the user to change an arbitrary version number for bugs of Webkit

&gt; The QApplication is not a widget and it is hard to say that it is visible part
&gt; of an application.

QApplication::saveState() is different. This function is used for session management, it does not return a QByteArray.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158502</commentid>
    <comment_count>5</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-10-28 03:02:35 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; To be able to work around a possible bug, maybe we should introduce a version
&gt; number in the stream?
&gt; This way we can deal with the bug silently by using this version number and we
&gt; will not ask the user to change an arbitrary version number for bugs of Webkit
No and yes. If you look at QWebHistory implementation there is an QWebHistory version saved in a stream. Current API permit you to save a history in specified version and protect you from shooting in the foot by restoring a bad version. I found it a bit more safe than the QDataStream API, witch give you full control on versions. What is sens of loading a history version 3 with an algorithm version 1, apart from nasty side effects? The real problem is in the stream class that for CPU and memory reasons doesn&apos;t include the stream version.
The problem isn&apos;t new. I think that most of Qt users know that they need to save somehow the QDataStream version. So I strongly believe that if we want to get rid of the saveState() and the restoreState() we shouldn&apos;t include a version number in a stream. Just use the standard enum QDataStream::Version. In case of problems we will add new value to the enum changing the version on bug fix releases too.

&gt; &gt; The QApplication is not a widget and it is hard to say that it is visible part
&gt; &gt; of an application.
&gt;
&gt; QApplication::saveState() is different. This function is used for session
&gt; management, it does not return a QByteArray.
It is more complex and have different signature, true, but purpose of this function is the same.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158507</commentid>
    <comment_count>6</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-10-28 03:34:25 -0700</bug_when>
    <thetext>(In reply to comment #5)
In replay to replay... To clarify...
1. I agree, we should remove the saveState() and the restoreState().
2. We should remove the QWebHistory::HistoryStateVersion and use the QDataStream::Version instead.
3. We should _not_ save version number in a stream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158533</commentid>
    <comment_count>7</comment_count>
      <attachid>42018</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-28 05:40:34 -0700</bug_when>
    <thetext>Created attachment 42018
Remove the methods</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158536</commentid>
    <comment_count>8</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-28 05:43:06 -0700</bug_when>
    <thetext>This patch does the 1) part. I think Jedrzej wanted to do the follow up patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158547</commentid>
    <comment_count>9</comment_count>
      <attachid>42018</attachid>
    <who name="Holger Freyther">zecke</who>
    <bug_when>2009-10-28 06:12:54 -0700</bug_when>
    <thetext>Comment on attachment 42018
Remove the methods

Okay, based on the promise that the internal QDataStream/QByteArray will go away before Qt4.6 let us progress on this one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158556</commentid>
    <comment_count>10</comment_count>
      <attachid>42027</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-28 07:46:47 -0700</bug_when>
    <thetext>Created attachment 42027
Improve the versioning</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158558</commentid>
    <comment_count>11</comment_count>
      <attachid>42018</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-28 07:47:23 -0700</bug_when>
    <thetext>Comment on attachment 42018
Remove the methods

Landed in 50214.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158623</commentid>
    <comment_count>12</comment_count>
      <attachid>42027</attachid>
    <who name="Tor Arne Vestbø">vestbo</who>
    <bug_when>2009-10-28 10:06:43 -0700</bug_when>
    <thetext>Comment on attachment 42027
Improve the versioning

QDataStream&apos;s version is for the internal format of QDataStream. We should follow the example in the docs:

http://doc.trolltech.com/4.5/qdatastream.html

Ie, a payload-spesific version where we try to load whatever we can from earlier versions, etc.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158634</commentid>
    <comment_count>13</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-28 10:41:50 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 42027 [details])
&gt; QDataStream&apos;s version is for the internal format of QDataStream. We should
&gt; follow the example in the docs:
&gt; 
&gt; http://doc.trolltech.com/4.5/qdatastream.html
&gt; 
&gt; Ie, a payload-spesific version where we try to load whatever we can from
&gt; earlier versions, etc.

We should keep the versioning internal, and always save in the latest format. Reading will read only if the version is supported.

This is more or less what me and Tor Arne agreed upon.

If needed in the future, it will still be possible to add support for saving in older formats.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158640</commentid>
    <comment_count>14</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-28 11:02:55 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 42027 [details] [details])
&gt; &gt; QDataStream&apos;s version is for the internal format of QDataStream. We should
&gt; &gt; follow the example in the docs:
&gt; &gt; 
&gt; &gt; http://doc.trolltech.com/4.5/qdatastream.html
&gt; &gt; 
&gt; &gt; Ie, a payload-spesific version where we try to load whatever we can from
&gt; &gt; earlier versions, etc.
&gt; 
&gt; We should keep the versioning internal, and always save in the latest format.
&gt; Reading will read only if the version is supported.
&gt; 
&gt; This is more or less what me and Tor Arne agreed upon.
&gt; 
&gt; If needed in the future, it will still be possible to add support for saving in
&gt; older formats.

The above was implemented and landed in 50224.

The only thing missing is making the internal QDataStream/QByteArray in the stream operators go away.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158724</commentid>
    <comment_count>15</comment_count>
      <attachid>42056</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-28 15:05:05 -0700</bug_when>
    <thetext>Created attachment 42056
Avoid serializing to immediate QByteArray</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158849</commentid>
    <comment_count>16</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-10-29 01:49:47 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (From update of attachment 42027 [details])
&gt; QDataStream&apos;s version is for the internal format of QDataStream. We should
&gt; follow the example in the docs:
&gt; 
&gt; http://doc.trolltech.com/4.5/qdatastream.html
&gt; 
&gt; Ie, a payload-spesific version where we try to load whatever we can from
&gt; earlier versions, etc.

This example is created for developers using Qt, not for internal Qt development. I have checked a few classes (QImage, QColor, QRect, QVector). None of them save the version into a stream.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158875</commentid>
    <comment_count>17</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-29 06:17:40 -0700</bug_when>
    <thetext>(In reply to comment #16)
&gt; (In reply to comment #12)
&gt; &gt; (From update of attachment 42027 [details] [details])
&gt; &gt; QDataStream&apos;s version is for the internal format of QDataStream. We should
&gt; &gt; follow the example in the docs:
&gt; &gt; 
&gt; &gt; http://doc.trolltech.com/4.5/qdatastream.html
&gt; &gt; 
&gt; &gt; Ie, a payload-spesific version where we try to load whatever we can from
&gt; &gt; earlier versions, etc.
&gt; 
&gt; This example is created for developers using Qt, not for internal Qt
&gt; development. I have checked a few classes (QImage, QColor, QRect, QVector).
&gt; None of them save the version into a stream.

They don&apos;t need to (directly) as they are distributed with Qt. But we won&apos;t continue being distributed with Qt, so we definately needs this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>158881</commentid>
    <comment_count>18</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-10-29 06:54:31 -0700</bug_when>
    <thetext>Landed in 50269</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>166078</commentid>
    <comment_count>19</comment_count>
    <who name="Jędrzej Nowacki">jedrzej.nowacki</who>
    <bug_when>2009-11-24 07:48:06 -0800</bug_when>
    <thetext>*** Bug 26452 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42018</attachid>
            <date>2009-10-28 05:40:34 -0700</date>
            <delta_ts>2009-10-28 07:47:22 -0700</delta_ts>
            <desc>Remove the methods</desc>
            <filename>bug-30710-20091028094038.patch</filename>
            <type>text/plain</type>
            <size>13120</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwIGIvV2ViS2l0L3F0L0Fw
aS9xd2ViaGlzdG9yeS5jcHAKaW5kZXggNTc1MmQ2Ni4uM2RmNThmYyAxMDA2NDQKLS0tIGEvV2Vi
S2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9y
eS5jcHAKQEAgLTIyNiw3ICsyMjYsOCBAQCBib29sIFFXZWJIaXN0b3J5SXRlbTo6aXNWYWxpZCgp
IGNvbnN0CiAgIG51bWJlciBvZiBpdGVtcyBpcyBnaXZlbiBieSBjb3VudCgpLCBhbmQgdGhlIGhp
c3RvcnkgY2FuIGJlIGNsZWFyZWQgd2l0aCB0aGUKICAgY2xlYXIoKSBmdW5jdGlvbi4KIAotICBR
V2ViSGlzdG9yeSdzIHN0YXRlIGNhbiBiZSBzYXZlZCB3aXRoIHNhdmVTdGF0ZSgpIGFuZCBsb2Fk
ZWQgd2l0aCByZXN0b3JlU3RhdGUoKS4KKyAgUVdlYkhpc3RvcnkncyBzdGF0ZSBjYW4gYmUgc2F2
ZWQgdG8gYSBRRGF0YVN0cmVhbSB1c2luZyB0aGUgPj4gb3BlcmF0b3IgYW5kIGxvYWRlZAorICBi
eSB1c2luZyB0aGUgPDwgb3BlcmF0b3IuCiAKICAgXHNhIFFXZWJIaXN0b3J5SXRlbSwgUVdlYkhp
c3RvcnlJbnRlcmZhY2UsIFFXZWJQYWdlCiAqLwpAQCAtNDc3LDc3ICs0NzgsMzIgQEAgdm9pZCBR
V2ViSGlzdG9yeTo6c2V0TWF4aW11bUl0ZW1Db3VudChpbnQgY291bnQpCiAvKiEKICAgIFxlbnVt
IFFXZWJIaXN0b3J5OjpIaXN0b3J5U3RhdGVWZXJzaW9uCiAKLSAgIFRoaXMgZW51bSBkZXNjcmli
ZXMgdGhlIHZlcnNpb25zIGF2YWlsYWJsZSBmb3IgUVdlYkhpc3RvcnkncyBzYXZlU3RhdGUoKSBm
dW5jdGlvbjoKLQogICAgXHZhbHVlIEhpc3RvcnlWZXJzaW9uXzEgVmVyc2lvbiAxIChRdCA0LjYp
CiAgICBcdmFsdWUgRGVmYXVsdEhpc3RvcnlWZXJzaW9uIFRoZSBjdXJyZW50IGRlZmF1bHQgdmVy
c2lvbiBpbiAxLgogKi8KIAogLyohCiAgIFxzaW5jZSA0LjYKKyAgXGZuIFFEYXRhU3RyZWFtJiBv
cGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBzdHJlYW0sIGNvbnN0IFFXZWJIaXN0b3J5JiBoaXN0b3J5
KQorICBccmVsYXRlcyBRV2ViSGlzdG9yeQogCi0gIFJlc3RvcmVzIHRoZSBzdGF0ZSBvZiBRV2Vi
SGlzdG9yeSBmcm9tIHRoZSBnaXZlbiBcYSBidWZmZXIuIFJldHVybnMgdHJ1ZQotICBpZiB0aGUg
aGlzdG9yeSB3YXMgc3VjY2Vzc2Z1bGx5IHJlc3RvcmVkOyBvdGhlcndpc2UgcmV0dXJucyBmYWxz
ZS4KKyAgXGJyaWVmIFRoZSBvcGVyYXRvcjw8IGZ1bmN0aW9uIHN0cmVhbXMgYSBoaXN0b3J5IGlu
dG8gYSBkYXRhIHN0cmVhbS4KIAotICBcc2Egc2F2ZVN0YXRlKCkKKyAgSXQgc2F2ZXMgdGhlIFxh
IGhpc3RvcnkgaW50byB0aGUgc3BlY2lmaWVkIFxhIHN0cmVhbS4KICovCi1ib29sIFFXZWJIaXN0
b3J5OjpyZXN0b3JlU3RhdGUoY29uc3QgUUJ5dGVBcnJheSYgYnVmZmVyKQotewotICAgIFFEYXRh
U3RyZWFtIHN0cmVhbShidWZmZXIpOwotICAgIGludCB2ZXJzaW9uOwotICAgIGJvb2wgcmVzdWx0
ID0gZmFsc2U7Ci0gICAgc3RyZWFtID4+IHZlcnNpb247Ci0KLSAgICBzd2l0Y2ggKHZlcnNpb24p
IHsKLSAgICBjYXNlIEhpc3RvcnlWZXJzaW9uXzE6IHsKLSAgICAgICAgaW50IGNvdW50OwotICAg
ICAgICBpbnQgY3VycmVudEluZGV4OwotICAgICAgICBzdHJlYW0gPj4gY291bnQgPj4gY3VycmVu
dEluZGV4OwotCi0gICAgICAgIGNsZWFyKCk7Ci0gICAgICAgIC8vIG9ubHkgaWYgdGhlcmUgYXJl
IGVsZW1lbnRzCi0gICAgICAgIGlmIChjb3VudCkgewotICAgICAgICAgICAgLy8gYWZ0ZXIgY2xl
YXIoKSBpcyBuZXcgY2xlYXIgSGlzdG9yeUl0ZW0gKGF0IHRoZSBlbmQgd2UgaGFkIHRvIHJlbW92
ZSBpdCkKLSAgICAgICAgICAgIFdlYkNvcmU6Okhpc3RvcnlJdGVtICpudWxsSXRlbSA9IGQtPmxz
dC0+Y3VycmVudEl0ZW0oKTsKLSAgICAgICAgICAgIGZvciAoaW50IGkgPSAwO2kgPCBjb3VudDtp
KyspIHsKLSAgICAgICAgICAgICAgICBXVEY6OlBhc3NSZWZQdHI8V2ViQ29yZTo6SGlzdG9yeUl0
ZW0+IGl0ZW0gPSBXZWJDb3JlOjpIaXN0b3J5SXRlbTo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICAg
ICAgaXRlbS0+cmVzdG9yZVN0YXRlKHN0cmVhbSwgdmVyc2lvbik7Ci0gICAgICAgICAgICAgICAg
ZC0+bHN0LT5hZGRJdGVtKGl0ZW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgZC0+bHN0
LT5yZW1vdmVJdGVtKG51bGxJdGVtKTsKLSAgICAgICAgICAgIGdvVG9JdGVtKGl0ZW1BdChjdXJy
ZW50SW5kZXgpKTsKLSAgICAgICAgICAgIHJlc3VsdCA9IHN0cmVhbS5zdGF0dXMoKSA9PSBRRGF0
YVN0cmVhbTo6T2s7Ci0gICAgICAgIH0KLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIGRlZmF1
bHQ6IHt9IC8vIHJlc3VsdCBpcyBmYWxzZTsKLSAgICB9Ci0KLSAgICBkLT5wYWdlKCktPnVwZGF0
ZU5hdmlnYXRpb25BY3Rpb25zKCk7Ci0KLSAgICByZXR1cm4gcmVzdWx0OwotfTsKIAotLyohCi0g
IFxzaW5jZSA0LjYKLSAgU2F2ZXMgdGhlIHN0YXRlIG9mIHRoaXMgUVdlYkhpc3RvcnkgaW50byBh
IFFCeXRlQXJyYXkuCi0KLSAgU2F2ZXMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhpcyBRV2ViSGlz
dG9yeS4gVGhlIHZlcnNpb24gbnVtYmVyLCBcYSB2ZXJzaW9uLCBpcwotICBzdG9yZWQgYXMgcGFy
dCBvZiB0aGUgZGF0YS4KLQotICBUbyByZXN0b3JlIHRoZSBzYXZlZCBzdGF0ZSwgcGFzcyB0aGUg
cmV0dXJuIHZhbHVlIHRvIHJlc3RvcmVTdGF0ZSgpLgotCi0gIFxzYSByZXN0b3JlU3RhdGUoKQot
Ki8KLVFCeXRlQXJyYXkgUVdlYkhpc3Rvcnk6OnNhdmVTdGF0ZShIaXN0b3J5U3RhdGVWZXJzaW9u
IHZlcnNpb24pIGNvbnN0CitRRGF0YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgdGFy
Z2V0LCBjb25zdCBRV2ViSGlzdG9yeSYgaGlzdG9yeSkKIHsKKyAgICBRV2ViSGlzdG9yeVByaXZh
dGUqIGQgPSBoaXN0b3J5LmQ7CisKICAgICBRQnl0ZUFycmF5IGJ1ZmZlcjsKICAgICBRRGF0YVN0
cmVhbSBzdHJlYW0oJmJ1ZmZlciwgUUlPRGV2aWNlOjpXcml0ZU9ubHkpOworICAgIGludCB2ZXJz
aW9uID0gUVdlYkhpc3Rvcnk6OkRlZmF1bHRIaXN0b3J5VmVyc2lvbjsKICAgICBzdHJlYW0gPDwg
dmVyc2lvbjsKIAogICAgIHN3aXRjaCAodmVyc2lvbikgewotICAgIGNhc2UgSGlzdG9yeVZlcnNp
b25fMTogewotICAgICAgICBzdHJlYW0gPDwgY291bnQoKSA8PCBjdXJyZW50SXRlbUluZGV4KCk7
CisgICAgY2FzZSBRV2ViSGlzdG9yeTo6SGlzdG9yeVZlcnNpb25fMTogeworICAgICAgICBzdHJl
YW0gPDwgaGlzdG9yeS5jb3VudCgpIDw8IGhpc3RvcnkuY3VycmVudEl0ZW1JbmRleCgpOwogCiAg
ICAgICAgIGNvbnN0IFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVjdG9yICZpdGVtcyA9IGQtPmxzdC0+
ZW50cmllcygpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaXRlbXMuc2l6ZSgp
OyBpKyspCkBAIC01NTksMjkgKzUxNSw5IEBAIFFCeXRlQXJyYXkgUVdlYkhpc3Rvcnk6OnNhdmVT
dGF0ZShIaXN0b3J5U3RhdGVWZXJzaW9uIHZlcnNpb24pIGNvbnN0CiAgICAgfQogICAgIGRlZmF1
bHQ6CiAgICAgICAgIGJ1ZmZlci5jbGVhcigpOwotCiAgICAgfQogCi0gICAgcmV0dXJuIGJ1ZmZl
cjsKLX0KLQotLyohCi0gIFxzaW5jZSA0LjYKLSAgXGZuIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8
KFFEYXRhU3RyZWFtJiBzdHJlYW0sIGNvbnN0IFFXZWJIaXN0b3J5JiBoaXN0b3J5KQotICBccmVs
YXRlcyBRV2ViSGlzdG9yeQotCi0gIFxicmllZiBUaGUgb3BlcmF0b3I8PCBmdW5jdGlvbiBzdHJl
YW1zIGEgaGlzdG9yeSBpbnRvIGEgZGF0YSBzdHJlYW0uCi0KLSAgSXQgc2F2ZXMgdGhlIFxhIGhp
c3RvcnkgaW50byB0aGUgc3BlY2lmaWVkIFxhIHN0cmVhbS4gVGhpcyBpcyBhCi0gIGNvbnZlbmll
bmNlIGZ1bmN0aW9uIGFuZCBpcyBlcXVpdmFsZW50IHRvIGNhbGxpbmcgdGhlIHNhdmVTdGF0ZSgp
Ci0gIG1ldGhvZC4KLQotICBcc2EgUVdlYkhpc3Rvcnk6OnNhdmVTdGF0ZSgpCi0qLwotCi1RRGF0
YVN0cmVhbSYgb3BlcmF0b3I8PChRRGF0YVN0cmVhbSYgc3RyZWFtLCBjb25zdCBRV2ViSGlzdG9y
eSYgaGlzdG9yeSkKLXsKLSAgICByZXR1cm4gc3RyZWFtIDw8IGhpc3Rvcnkuc2F2ZVN0YXRlKCk7
CisgICAgcmV0dXJuIHRhcmdldCA8PCBidWZmZXI7CiB9CiAKIC8qIQpAQCAtNTkyLDE4ICs1Mjgs
NDggQEAgUURhdGFTdHJlYW0mIG9wZXJhdG9yPDwoUURhdGFTdHJlYW0mIHN0cmVhbSwgY29uc3Qg
UVdlYkhpc3RvcnkmIGhpc3RvcnkpCiAgIFxicmllZiBUaGUgb3BlcmF0b3I+PiBmdW5jdGlvbiBs
b2FkcyBhIGhpc3RvcnkgZnJvbSBhIGRhdGEgc3RyZWFtLgogCiAgIExvYWRzIGEgUVdlYkhpc3Rv
cnkgZnJvbSB0aGUgc3BlY2lmaWVkIFxhIHN0cmVhbSBpbnRvIHRoZSBnaXZlbiBcYSBoaXN0b3J5
LgotICBUaGlzIGlzIGEgY29udmVuaWVuY2UgZnVuY3Rpb24gYW5kIGl0IGlzIGVxdWl2YWxlbnQg
dG8gY2FsbGluZyB0aGUgcmVzdG9yZVN0YXRlKCkKLSAgbWV0aG9kLgotCi0gIFxzYSBRV2ViSGlz
dG9yeTo6cmVzdG9yZVN0YXRlKCkKICovCiAKLVFEYXRhU3RyZWFtJiBvcGVyYXRvcj4+KFFEYXRh
U3RyZWFtJiBzdHJlYW0sIFFXZWJIaXN0b3J5JiBoaXN0b3J5KQorUURhdGFTdHJlYW0mIG9wZXJh
dG9yPj4oUURhdGFTdHJlYW0mIHNvdXJjZSwgUVdlYkhpc3RvcnkmIGhpc3RvcnkpCiB7CisgICAg
UVdlYkhpc3RvcnlQcml2YXRlKiBkID0gaGlzdG9yeS5kOworCiAgICAgUUJ5dGVBcnJheSBidWZm
ZXI7Ci0gICAgc3RyZWFtID4+IGJ1ZmZlcjsKLSAgICBoaXN0b3J5LnJlc3RvcmVTdGF0ZShidWZm
ZXIpOwotICAgIHJldHVybiBzdHJlYW07CisgICAgc291cmNlID4+IGJ1ZmZlcjsKKworICAgIFFE
YXRhU3RyZWFtIHN0cmVhbShidWZmZXIpOworICAgIGludCB2ZXJzaW9uOworICAgIGJvb2wgcmVz
dWx0ID0gZmFsc2U7CisgICAgc3RyZWFtID4+IHZlcnNpb247CisKKyAgICBzd2l0Y2ggKHZlcnNp
b24pIHsKKyAgICBjYXNlIFFXZWJIaXN0b3J5OjpIaXN0b3J5VmVyc2lvbl8xOiB7CisgICAgICAg
IGludCBjb3VudDsKKyAgICAgICAgaW50IGN1cnJlbnRJbmRleDsKKyAgICAgICAgc3RyZWFtID4+
IGNvdW50ID4+IGN1cnJlbnRJbmRleDsKKworICAgICAgICBoaXN0b3J5LmNsZWFyKCk7CisgICAg
ICAgIC8vIG9ubHkgaWYgdGhlcmUgYXJlIGVsZW1lbnRzCisgICAgICAgIGlmIChjb3VudCkgewor
ICAgICAgICAgICAgLy8gYWZ0ZXIgY2xlYXIoKSBpcyBuZXcgY2xlYXIgSGlzdG9yeUl0ZW0gKGF0
IHRoZSBlbmQgd2UgaGFkIHRvIHJlbW92ZSBpdCkKKyAgICAgICAgICAgIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKiBudWxsSXRlbSA9IGQtPmxzdC0+Y3VycmVudEl0ZW0oKTsKKyAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgeworICAgICAgICAgICAgICAgIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4gaXRlbSA9IFdlYkNvcmU6Okhpc3RvcnlJdGVt
OjpjcmVhdGUoKTsKKyAgICAgICAgICAgICAgICBpdGVtLT5yZXN0b3JlU3RhdGUoc3RyZWFtLCB2
ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICBkLT5sc3QtPmFkZEl0ZW0oaXRlbSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBkLT5sc3QtPnJlbW92ZUl0ZW0obnVsbEl0ZW0pOworICAgICAg
ICAgICAgaGlzdG9yeS5nb1RvSXRlbShoaXN0b3J5Lml0ZW1BdChjdXJyZW50SW5kZXgpKTsKKyAg
ICAgICAgICAgIHJlc3VsdCA9IHN0cmVhbS5zdGF0dXMoKSA9PSBRRGF0YVN0cmVhbTo6T2s7Cisg
ICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6IHt9IC8vIHJlc3Vs
dCBpcyBmYWxzZTsKKyAgICB9CisKKyAgICBkLT5wYWdlKCktPnVwZGF0ZU5hdmlnYXRpb25BY3Rp
b25zKCk7CisKKyAgICByZXR1cm4gc291cmNlOwogfQogCiBRV2ViUGFnZVByaXZhdGUqIFFXZWJI
aXN0b3J5UHJpdmF0ZTo6cGFnZSgpCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0
b3J5LmggYi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmgKaW5kZXggZTQ2ZjEyNC4uODU0YTI3
OCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5oCisrKyBiL1dlYktpdC9x
dC9BcGkvcXdlYmhpc3RvcnkuaApAQCAtNDIsOSArNDIsNiBAQCBwdWJsaWM6CiAgICAgUVdlYkhp
c3RvcnlJdGVtICZvcGVyYXRvcj0oY29uc3QgUVdlYkhpc3RvcnlJdGVtICZvdGhlcik7CiAgICAg
flFXZWJIaXN0b3J5SXRlbSgpOwogCi0gICAgLy9ib29sIHJlc3RvcmVTdGF0ZShRQnl0ZUFycmF5
JiBidWZmZXIpOwotICAgIC8vUUJ5dGVBcnJheSBzYXZlU3RhdGUoUVdlYkhpc3Rvcnk6Okhpc3Rv
cnlTdGF0ZVZlcnNpb24gdmVyc2lvbiA9IERlZmF1bHRIaXN0b3J5VmVyc2lvbikgY29uc3Q7Ci0K
ICAgICBRVXJsIG9yaWdpbmFsVXJsKCkgY29uc3Q7CiAgICAgUVVybCB1cmwoKSBjb25zdDsKIApA
QCAtNjksOSArNjYsNiBAQCBwcml2YXRlOgogICAgIFFFeHBsaWNpdGx5U2hhcmVkRGF0YVBvaW50
ZXI8UVdlYkhpc3RvcnlJdGVtUHJpdmF0ZT4gZDsKIH07CiAKLS8vUVdFQktJVF9FWFBPUlQgUURh
dGFTdHJlYW0gJiBvcGVyYXRvcjw8KFFEYXRhU3RyZWFtJiBvdXQsY29uc3QgUVdlYkhpc3RvcnlJ
dGVtJiBoaXN0KTsKLS8vUVdFQktJVF9FWFBPUlQgUURhdGFTdHJlYW0gJiBvcGVyYXRvcj4+KFFE
YXRhU3RyZWFtJiBpbixRV2ViSGlzdG9yeUl0ZW0mIGhpc3QpOwotCiAKIGNsYXNzIFFXZWJIaXN0
b3J5UHJpdmF0ZTsKIGNsYXNzIFFXRUJLSVRfRVhQT1JUIFFXZWJIaXN0b3J5IHsKQEAgLTgyLDkg
Kzc2LDYgQEAgcHVibGljOgogICAgICAgICBEZWZhdWx0SGlzdG9yeVZlcnNpb24gPSBIaXN0b3J5
VmVyc2lvbl8xCiAgICAgfTsKIAotICAgIGJvb2wgcmVzdG9yZVN0YXRlKGNvbnN0IFFCeXRlQXJy
YXkmIGJ1ZmZlcik7Ci0gICAgUUJ5dGVBcnJheSBzYXZlU3RhdGUoSGlzdG9yeVN0YXRlVmVyc2lv
biB2ZXJzaW9uID0gRGVmYXVsdEhpc3RvcnlWZXJzaW9uKSBjb25zdDsKLQogICAgIHZvaWQgY2xl
YXIoKTsKIAogICAgIFFMaXN0PFFXZWJIaXN0b3J5SXRlbT4gaXRlbXMoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1dlYktpdC9xdC9DaGFuZ2VMb2cgYi9XZWJLaXQvcXQvQ2hhbmdlTG9nCmluZGV4IDg5
M2MzNTguLjBlNzYyNTEgMTAwNjQ0Ci0tLSBhL1dlYktpdC9xdC9DaGFuZ2VMb2cKKysrIGIvV2Vi
S2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDI3IEBACisyMDA5LTEwLTI4ICBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbiAgPGtlbm5ldGhAd2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBbUXRdIFFXZWJIaXN0b3J5OjpzYXZlU3Rh
dGUoKSBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgUXQgQVBJCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0zMDcxMAorCisgICAgICAgIFJlbW92ZSB0aGUg
UVdlYkhpc3Rvcnk6OnNhdmVTdGF0ZSgpIGFuZCA6OnJlc3RvcmVTdGF0ZSgpIGFzCisgICAgICAg
IHRoZXkgYXJlIGluY29uc2lzdGVudCB3aXRoIHRoZSBRdCBBUEkuCisKKyAgICAgICAgVXBkYXRl
IHVuaXR0ZXN0cyB0byByZWZsZWN0IHRoZSBjaGFuZ2UuCisKKyAgICAgICAgKiBBcGkvcXdlYmhp
c3RvcnkuY3BwOgorICAgICAgICAob3BlcmF0b3I8PCk6CisgICAgICAgIChvcGVyYXRvcj4+KToK
KyAgICAgICAgKiBBcGkvcXdlYmhpc3RvcnkuaDoKKyAgICAgICAgKiB0ZXN0cy9xd2ViaGlzdG9y
eS90c3RfcXdlYmhpc3RvcnkuY3BwOgorICAgICAgICAoc2F2ZUhpc3RvcnkpOgorICAgICAgICAo
cmVzdG9yZUhpc3RvcnkpOgorICAgICAgICAodHN0X1FXZWJIaXN0b3J5OjpzYXZlQW5kUmVzdG9y
ZV9jcmFzaF8xKToKKyAgICAgICAgKHRzdF9RV2ViSGlzdG9yeTo6c2F2ZUFuZFJlc3RvcmVfY3Jh
c2hfMik6CisgICAgICAgICh0c3RfUVdlYkhpc3Rvcnk6OnNhdmVBbmRSZXN0b3JlX2NyYXNoXzMp
OgorICAgICAgICAodHN0X1FXZWJIaXN0b3J5OjpjbGVhcik6CisKIDIwMDktMTAtMjcgIEtlbm5l
dGggUm9oZGUgQ2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCiAgICAgICAgIFJ1
YmJlcnN0YW1wZWQgYnkgT2xpdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9XZWJLaXQvcXQvdGVzdHMv
cXdlYmhpc3RvcnkvdHN0X3F3ZWJoaXN0b3J5LmNwcCBiL1dlYktpdC9xdC90ZXN0cy9xd2ViaGlz
dG9yeS90c3RfcXdlYmhpc3RvcnkuY3BwCmluZGV4IDRmNGQzYzQuLmVjMmQ0OTcgMTAwNjQ0Ci0t
LSBhL1dlYktpdC9xdC90ZXN0cy9xd2ViaGlzdG9yeS90c3RfcXdlYmhpc3RvcnkuY3BwCisrKyBi
L1dlYktpdC9xdC90ZXN0cy9xd2ViaGlzdG9yeS90c3RfcXdlYmhpc3RvcnkuY3BwCkBAIC01Niw5
ICs1Niw2IEBAIHByaXZhdGUgc2xvdHM6CiAgICAgdm9pZCBzZXJpYWxpemVfMSgpOyAvL1FXZWJI
aXN0b3J5IGNvdW50aXR5CiAgICAgdm9pZCBzZXJpYWxpemVfMigpOyAvL1FXZWJIaXN0b3J5IGlu
ZGV4CiAgICAgdm9pZCBzZXJpYWxpemVfMygpOyAvL1FXZWJIaXN0b3J5SXRlbQotICAgIHZvaWQg
c2F2ZUFuZFJlc3RvcmVfMSgpOyAgLy9zaW1wbGUgY2hlY2tzIHNhdmVTdGF0ZSBhbmQgcmVzdG9y
ZVN0YXRlCi0gICAgdm9pZCBzYXZlQW5kUmVzdG9yZV8yKCk7ICAvL2JhZCBwYXJhbWV0ZXJzIHNh
dmVTdGF0ZSBhbmQgcmVzdG9yZVN0YXRlCi0gICAgdm9pZCBzYXZlQW5kUmVzdG9yZV8zKCk7ICAv
L3RyeSB1c2UgZGlmZmVyZW50IHZlcnNpb24KICAgICB2b2lkIHNhdmVBbmRSZXN0b3JlX2NyYXNo
XzEoKTsKICAgICB2b2lkIHNhdmVBbmRSZXN0b3JlX2NyYXNoXzIoKTsKICAgICB2b2lkIHNhdmVB
bmRSZXN0b3JlX2NyYXNoXzMoKTsKQEAgLTI5NCw2NyArMjkxLDQwIEBAIHZvaWQgdHN0X1FXZWJI
aXN0b3J5OjpzZXJpYWxpemVfMygpCiAgICAgUVZFUklGWShsb2FkLmF0RW5kKCkpOwogfQogCi0v
KiogU2ltcGxlIGNoZWNrcyBzaG91bGQgYmUgYSBiaXQgcmVkdW5kYW50IHRvIHN0cmVhbWluZyBv
cGVyYXRvcnMgKi8KLXZvaWQgdHN0X1FXZWJIaXN0b3J5OjpzYXZlQW5kUmVzdG9yZV8xKCkgCitz
dGF0aWMgdm9pZCBzYXZlSGlzdG9yeShRV2ViSGlzdG9yeSogaGlzdG9yeSwgUUJ5dGVBcnJheSog
aW4pCiB7Ci0gICAgUUFjdGlvbiogYWN0aW9uQmFjayA9IHBhZ2UtPmFjdGlvbihRV2ViUGFnZTo6
QmFjayk7Ci0gICAgaGlzdC0+YmFjaygpOwotICAgIHdhaXRGb3JMb2FkRmluaXNoZWQuZXhlYygp
OwotICAgIFFWRVJJRlkoYWN0aW9uQmFjay0+aXNFbmFibGVkKCkpOwotICAgIFFCeXRlQXJyYXkg
YnVmZmVyKGhpc3QtPnNhdmVTdGF0ZSgpKTsKLSAgICBoaXN0LT5jbGVhcigpOwotICAgIFFWRVJJ
RlkoIWFjdGlvbkJhY2stPmlzRW5hYmxlZCgpKTsKLSAgICBRVkVSSUZZKGhpc3QtPmNvdW50KCkg
PT0gMSk7Ci0gICAgaGlzdC0+cmVzdG9yZVN0YXRlKGJ1ZmZlcik7Ci0KLSAgICAvL2NoZWNrIG9u
bHkgZmV3IHZhbHVlcywgZG8gbm90IG1ha2UgZnVsbCB0ZXN0Ci0gICAgLy9iZWNhdXNlIG1vc3Qg
b2YgdGhlIGNvZGUgaXMgc2hhcmVkIHdpdGggc3RyZWFtaW5nIG9wZXJhdG9ycwotICAgIC8vYW5k
IHRoZXNlIGFyZSBjaGVja2VkIGJlZm9yZQotICAgIFFDT01QQVJFKGhpc3QtPmNvdW50KCksIGhp
c3RzaXplKTsKLSAgICBRQ09NUEFSRShoaXN0LT5jdXJyZW50SXRlbUluZGV4KCksIGhpc3RzaXpl
IC0gMik7Ci0gICAgUUNPTVBBUkUoaGlzdC0+aXRlbUF0KDApLnRpdGxlKCksIFFTdHJpbmcoInBh
Z2UxIikpOwotICAgIFFDT01QQVJFKGhpc3QtPml0ZW1BdChoaXN0c2l6ZSAtIDEpLnRpdGxlKCks
IFFTdHJpbmcoInBhZ2UiKSArIFFTdHJpbmc6Om51bWJlcihoaXN0c2l6ZSkpOwotICAgIFFWRVJJ
RlkoYWN0aW9uQmFjay0+aXNFbmFibGVkKCkpOworICAgIGluLT5jbGVhcigpOworICAgIFFEYXRh
U3RyZWFtIHNhdmUoaW4sIFFJT0RldmljZTo6V3JpdGVPbmx5KTsKKyAgICBzYXZlIDw8ICpoaXN0
b3J5OwogfQogCi0vKiogQ2hlY2sgcmV0dXJucyB2YWx1ZSBpZiB0aGVyZSBhcmUgYmFkIHBhcmFt
ZXRlcnMuIEFjdHVhbGx5LCByZXN1bHQKLSAgKiBpcyBubyBzbyBpbXBvcnRlbnQuIFRoZSB0ZXN0
IHNob3VsZG4ndCBjcmFzaCA6LSkgKi8KLXZvaWQgdHN0X1FXZWJIaXN0b3J5OjpzYXZlQW5kUmVz
dG9yZV8yKCkgCitzdGF0aWMgdm9pZCByZXN0b3JlSGlzdG9yeShRV2ViSGlzdG9yeSogaGlzdG9y
eSwgUUJ5dGVBcnJheSogb3V0KQogewotICAgIFFCeXRlQXJyYXkgYnVmZmVyOwotICAgIGhpc3Qt
PnJlc3RvcmVTdGF0ZShidWZmZXIpOwotICAgIFFWRVJJRlkoaGlzdC0+Y291bnQoKSA9PSAxKTsK
LSAgICBRVkVSSUZZKGhpc3QtPml0ZW1BdCgwKS5pc1ZhbGlkKCkpOwotfQotCi0vKiogVHJ5IHRv
IHVzZSBiYWQgdmVyc2lvbiB2YWx1ZSAqLwotdm9pZCB0c3RfUVdlYkhpc3Rvcnk6OnNhdmVBbmRS
ZXN0b3JlXzMoKSAKLXsKLSAgICBRQnl0ZUFycmF5IHRtcCA9IGhpc3QtPnNhdmVTdGF0ZSgoUVdl
Ykhpc3Rvcnk6Okhpc3RvcnlTdGF0ZVZlcnNpb24pMjk5OTkpOwotICAgIFFWRVJJRlkoaGlzdC0+
c2F2ZVN0YXRlKChRV2ViSGlzdG9yeTo6SGlzdG9yeVN0YXRlVmVyc2lvbikyOTk5OSkuaXNFbXB0
eSgpKTsKLSAgICBRVkVSSUZZKGhpc3QtPmNvdW50KCkgPT0gaGlzdHNpemUpOwotICAgIFFWRVJJ
RlkoaGlzdC0+aXRlbUF0KDMpLmlzVmFsaWQoKSk7CisgICAgUURhdGFTdHJlYW0gbG9hZChvdXQs
IFFJT0RldmljZTo6UmVhZE9ubHkpOworICAgIGxvYWQgPj4gKmhpc3Rvcnk7CiB9CiAKIC8qKiBU
aGUgdGVzdCBzaG91bGRuJ3QgY3Jhc2ggKi8KIHZvaWQgdHN0X1FXZWJIaXN0b3J5OjpzYXZlQW5k
UmVzdG9yZV9jcmFzaF8xKCkKIHsKLSAgICBRQnl0ZUFycmF5IHRtcCA9IGhpc3QtPnNhdmVTdGF0
ZSgpOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCA1OyBpKyspewotICAgICAgICBoaXN0
LT5yZXN0b3JlU3RhdGUodG1wKTsKLSAgICAgICAgaGlzdC0+c2F2ZVN0YXRlKCk7CisgICAgUUJ5
dGVBcnJheSBidWZmZXI7CisgICAgc2F2ZUhpc3RvcnkoaGlzdCwgJmJ1ZmZlcik7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICByZXN0b3JlSGlzdG9yeSho
aXN0LCAmYnVmZmVyKTsKKyAgICAgICAgc2F2ZUhpc3RvcnkoaGlzdCwgJmJ1ZmZlcik7CiAgICAg
fQogfQogCiAvKiogVGhlIHRlc3Qgc2hvdWxkbid0IGNyYXNoICovCiB2b2lkIHRzdF9RV2ViSGlz
dG9yeTo6c2F2ZUFuZFJlc3RvcmVfY3Jhc2hfMigpCiB7Ci0gICAgUUJ5dGVBcnJheSB0bXAgPSBo
aXN0LT5zYXZlU3RhdGUoKTsKKyAgICBRQnl0ZUFycmF5IGJ1ZmZlcjsKKyAgICBzYXZlSGlzdG9y
eShoaXN0LCAmYnVmZmVyKTsKICAgICBRV2ViUGFnZSogcGFnZTIgPSBuZXcgUVdlYlBhZ2UodGhp
cyk7CiAgICAgUVdlYkhpc3RvcnkqIGhpc3QyID0gcGFnZTItPmhpc3RvcnkoKTsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgNTsgaSsrKXsKLSAgICAgICAgaGlzdDItPnJlc3RvcmVTdGF0
ZSh0bXApOwotICAgICAgICBoaXN0Mi0+c2F2ZVN0YXRlKCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICByZXN0b3JlSGlzdG9yeShoaXN0MiwgJmJ1ZmZl
cik7CisgICAgICAgIHNhdmVIaXN0b3J5KGhpc3QyLCAmYnVmZmVyKTsKICAgICB9CiAgICAgZGVs
ZXRlIHBhZ2UyOwogfQpAQCAtMzYyLDE3ICszMzIsMTggQEAgdm9pZCB0c3RfUVdlYkhpc3Rvcnk6
OnNhdmVBbmRSZXN0b3JlX2NyYXNoXzIoKQogLyoqIFRoZSB0ZXN0IHNob3VsZG4ndCBjcmFzaCAq
Lwogdm9pZCB0c3RfUVdlYkhpc3Rvcnk6OnNhdmVBbmRSZXN0b3JlX2NyYXNoXzMoKQogewotICAg
IFFCeXRlQXJyYXkgdG1wID0gaGlzdC0+c2F2ZVN0YXRlKCk7CisgICAgUUJ5dGVBcnJheSBidWZm
ZXI7CisgICAgc2F2ZUhpc3RvcnkoaGlzdCwgJmJ1ZmZlcik7CiAgICAgUVdlYlBhZ2UqIHBhZ2Uy
ID0gbmV3IFFXZWJQYWdlKHRoaXMpOwogICAgIFFXZWJIaXN0b3J5KiBoaXN0MSA9IGhpc3Q7CiAg
ICAgUVdlYkhpc3RvcnkqIGhpc3QyID0gcGFnZTItPmhpc3RvcnkoKTsKLSAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgNTsgaSsrKXsKLSAgICAgICAgaGlzdDEtPnJlc3RvcmVTdGF0ZSh0bXAp
OwotICAgICAgICBoaXN0Mi0+cmVzdG9yZVN0YXRlKHRtcCk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IDU7IGkrKykgeworICAgICAgICByZXN0b3JlSGlzdG9yeShoaXN0MSwgJmJ1ZmZl
cik7CisgICAgICAgIHJlc3RvcmVIaXN0b3J5KGhpc3QyLCAmYnVmZmVyKTsKICAgICAgICAgUVZF
UklGWShoaXN0MS0+Y291bnQoKSA9PSBoaXN0Mi0+Y291bnQoKSk7CiAgICAgICAgIFFWRVJJRlko
aGlzdDEtPmNvdW50KCkgPT0gaGlzdHNpemUpOwogICAgICAgICBoaXN0Mi0+YmFjaygpOwotICAg
ICAgICB0bXAgPSBoaXN0Mi0+c2F2ZVN0YXRlKCk7CisgICAgICAgIHNhdmVIaXN0b3J5KGhpc3Qy
LCAmYnVmZmVyKTsKICAgICAgICAgaGlzdDItPmNsZWFyKCk7CiAgICAgfQogICAgIGRlbGV0ZSBw
YWdlMjsKQEAgLTM4MSwxNSArMzUyLDE2IEBAIHZvaWQgdHN0X1FXZWJIaXN0b3J5OjpzYXZlQW5k
UmVzdG9yZV9jcmFzaF8zKCkKIC8qKiA6OmNsZWFyICovCiB2b2lkIHRzdF9RV2ViSGlzdG9yeTo6
Y2xlYXIoKQogeworICAgIFFCeXRlQXJyYXkgYnVmZmVyOworCiAgICAgUUFjdGlvbiogYWN0aW9u
QmFjayA9IHBhZ2UtPmFjdGlvbihRV2ViUGFnZTo6QmFjayk7CiAgICAgUVZFUklGWShhY3Rpb25C
YWNrLT5pc0VuYWJsZWQoKSk7Ci0gICAgaGlzdC0+c2F2ZVN0YXRlKCk7CisgICAgc2F2ZUhpc3Rv
cnkoaGlzdCwgJmJ1ZmZlcik7CiAgICAgUVZFUklGWShoaXN0LT5jb3VudCgpID4gMSk7CiAgICAg
aGlzdC0+Y2xlYXIoKTsKICAgICBRVkVSSUZZKGhpc3QtPmNvdW50KCkgPT0gMSk7ICAvLyBMZWF2
ZSBjdXJyZW50IGl0ZW0uCiAgICAgUVZFUklGWSghYWN0aW9uQmFjay0+aXNFbmFibGVkKCkpOwog
Ci0KICAgICBRV2ViUGFnZSogcGFnZTIgPSBuZXcgUVdlYlBhZ2UodGhpcyk7CiAgICAgUVdlYkhp
c3RvcnkqIGhpc3QyID0gcGFnZTItPmhpc3RvcnkoKTsKICAgICBRVkVSSUZZKGhpc3QyLT5jb3Vu
dCgpID09IDApOw==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42027</attachid>
            <date>2009-10-28 07:46:47 -0700</date>
            <delta_ts>2009-10-28 15:04:58 -0700</delta_ts>
            <desc>Improve the versioning</desc>
            <filename>bug-30710-20091028114651.patch</filename>
            <type>text/plain</type>
            <size>7334</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXgg
NjZhOWUxMC4uM2NlNTUxNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2Vi
Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAwOS0xMC0yOCAgS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgW1F0XSBRV2ViSGlzdG9yeTo6c2F2ZVN0YXRl
KCkgaXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIFF0IEFQSQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MzA3MTAKKworICAgICAgICBSZW1vdmUgdGhlIFFX
ZWJIaXN0b3J5OjpIaXN0b3J5U3RhdGVWZXJzaW9uIGFuZCB1c2UgdGhlCisgICAgICAgIFFEYXRh
U3RyZWFtOjpWZXJzaW9uIGluc3RlYWQuCisKKyAgICAgICAgKiBoaXN0b3J5L3F0L0hpc3RvcnlJ
dGVtUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnJlc3RvcmVTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpIaXN0b3J5SXRlbTo6c2F2ZVN0YXRlKToKKwogMjAwOS0xMC0y
NiAgSG9sZ2VyIEhhbnMgUGV0ZXIgRnJleXRoZXIgIDx6ZWNrZUBzZWxmaXNoLm9yZz4KIAogICAg
ICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvaGlzdG9y
eS9xdC9IaXN0b3J5SXRlbVF0LmNwcCBiL1dlYkNvcmUvaGlzdG9yeS9xdC9IaXN0b3J5SXRlbVF0
LmNwcAppbmRleCAwOThhNzg2Li44MjczZjBhIDEwMDY0NAotLS0gYS9XZWJDb3JlL2hpc3Rvcnkv
cXQvSGlzdG9yeUl0ZW1RdC5jcHAKKysrIGIvV2ViQ29yZS9oaXN0b3J5L3F0L0hpc3RvcnlJdGVt
UXQuY3BwCkBAIC0yMywxMCArMjMsMTEgQEAKICNpbmNsdWRlICJDU3RyaW5nLmgiCiAjaW5jbHVk
ZSAiRm9ybURhdGEuaCIKIAotYm9vbCBXZWJDb3JlOjpIaXN0b3J5SXRlbTo6cmVzdG9yZVN0YXRl
KFFEYXRhU3RyZWFtJiBpbiwgaW50IC8qdmVyc2lvbiovKQorYm9vbCBXZWJDb3JlOjpIaXN0b3J5
SXRlbTo6cmVzdG9yZVN0YXRlKFFEYXRhU3RyZWFtJiBpbiwgaW50IHZlcnNpb24pCiB7Ci0gICAg
Ly8gdGhlcmUgaXMgbm8gZGlmZmVyZW50IHZlcnNpb24gcmlnaHQgbm93Ci0gICAgLy8gc3dpdGNo
ICAodmVyc2lvbikgeworICAgIGlmICh2ZXJzaW9uIDwgUURhdGFTdHJlYW06OlF0XzRfNSkKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCiAgICAgV2ViQ29yZTo6U3RyaW5nIHVybDsKICAgICBXZWJD
b3JlOjpTdHJpbmcgdGl0bGU7CiAgICAgV2ViQ29yZTo6U3RyaW5nIGFsdFRpdGxlOwpAQCAtODcs
MTAgKzg4LDExIEBAIGJvb2wgV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnJlc3RvcmVTdGF0ZShRRGF0
YVN0cmVhbSYgaW4sIGludCAvKnZlcnNpb24qLykKICAgICByZXR1cm4gaW4uc3RhdHVzKCkgPT0g
UURhdGFTdHJlYW06Ok9rOwogfQogCi1RRGF0YVN0cmVhbSYgV2ViQ29yZTo6SGlzdG9yeUl0ZW06
OnNhdmVTdGF0ZShRRGF0YVN0cmVhbSYgb3V0LCBpbnQgLyp2ZXJzaW9uKi8pIGNvbnN0CitRRGF0
YVN0cmVhbSYgV2ViQ29yZTo6SGlzdG9yeUl0ZW06OnNhdmVTdGF0ZShRRGF0YVN0cmVhbSYgb3V0
LCBpbnQgdmVyc2lvbikgY29uc3QKIHsKLSAgICAvLyB0aGVyZSBpcyBubyBkaWZmZXJlbnQgdmVy
c2lvbiByaWdodCBub3cKLSAgICAvLyBzd2l0Y2ggICh2ZXJzaW9uKSB7CisgICAgaWYgKHZlcnNp
b24gPCBRRGF0YVN0cmVhbTo6UXRfNF81KQorICAgICAgICByZXR1cm4gb3V0OworCiAgICAgb3V0
IDw8IHVybFN0cmluZygpIDw8IHRpdGxlKCkgPDwgYWx0ZXJuYXRlVGl0bGUoKSA8PCBsYXN0Vmlz
aXRlZFRpbWUoKTsKICAgICBvdXQgPDwgb3JpZ2luYWxVUkxTdHJpbmcoKSA8PCByZWZlcnJlcigp
IDw8IHRhcmdldCgpIDw8IHBhcmVudCgpOwogICAgIG91dCA8PCBsYXN0VmlzaXRXYXNIVFRQTm9u
R2V0KCkgPDwgbGFzdFZpc2l0V2FzRmFpbHVyZSgpIDw8IGlzVGFyZ2V0SXRlbSgpOwpkaWZmIC0t
Z2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAgYi9XZWJLaXQvcXQvQXBpL3F3ZWJo
aXN0b3J5LmNwcAppbmRleCAzZGY1OGZjLi4xNWE3MDU2IDEwMDY0NAotLS0gYS9XZWJLaXQvcXQv
QXBpL3F3ZWJoaXN0b3J5LmNwcAorKysgYi9XZWJLaXQvcXQvQXBpL3F3ZWJoaXN0b3J5LmNwcApA
QCAtNDc2LDEzICs0NzYsNiBAQCB2b2lkIFFXZWJIaXN0b3J5OjpzZXRNYXhpbXVtSXRlbUNvdW50
KGludCBjb3VudCkKIH0KIAogLyohCi0gICBcZW51bSBRV2ViSGlzdG9yeTo6SGlzdG9yeVN0YXRl
VmVyc2lvbgotCi0gICBcdmFsdWUgSGlzdG9yeVZlcnNpb25fMSBWZXJzaW9uIDEgKFF0IDQuNikK
LSAgIFx2YWx1ZSBEZWZhdWx0SGlzdG9yeVZlcnNpb24gVGhlIGN1cnJlbnQgZGVmYXVsdCB2ZXJz
aW9uIGluIDEuCi0qLwotCi0vKiEKICAgXHNpbmNlIDQuNgogICBcZm4gUURhdGFTdHJlYW0mIG9w
ZXJhdG9yPDwoUURhdGFTdHJlYW0mIHN0cmVhbSwgY29uc3QgUVdlYkhpc3RvcnkmIGhpc3Rvcnkp
CiAgIFxyZWxhdGVzIFFXZWJIaXN0b3J5CkBAIC00OTQsMjggKzQ4NywyMiBAQCB2b2lkIFFXZWJI
aXN0b3J5OjpzZXRNYXhpbXVtSXRlbUNvdW50KGludCBjb3VudCkKIAogUURhdGFTdHJlYW0mIG9w
ZXJhdG9yPDwoUURhdGFTdHJlYW0mIHRhcmdldCwgY29uc3QgUVdlYkhpc3RvcnkmIGhpc3Rvcnkp
CiB7CisgICAgaWYgKHRhcmdldC52ZXJzaW9uKCkgPCBRRGF0YVN0cmVhbTo6UXRfNF81KQorICAg
ICAgICByZXR1cm4gdGFyZ2V0OworCiAgICAgUVdlYkhpc3RvcnlQcml2YXRlKiBkID0gaGlzdG9y
eS5kOwogCiAgICAgUUJ5dGVBcnJheSBidWZmZXI7CiAgICAgUURhdGFTdHJlYW0gc3RyZWFtKCZi
dWZmZXIsIFFJT0RldmljZTo6V3JpdGVPbmx5KTsKLSAgICBpbnQgdmVyc2lvbiA9IFFXZWJIaXN0
b3J5OjpEZWZhdWx0SGlzdG9yeVZlcnNpb247Ci0gICAgc3RyZWFtIDw8IHZlcnNpb247CiAKLSAg
ICBzd2l0Y2ggKHZlcnNpb24pIHsKLSAgICBjYXNlIFFXZWJIaXN0b3J5OjpIaXN0b3J5VmVyc2lv
bl8xOiB7Ci0gICAgICAgIHN0cmVhbSA8PCBoaXN0b3J5LmNvdW50KCkgPDwgaGlzdG9yeS5jdXJy
ZW50SXRlbUluZGV4KCk7CisgICAgc3RyZWFtIDw8IGhpc3RvcnkuY291bnQoKSA8PCBoaXN0b3J5
LmN1cnJlbnRJdGVtSW5kZXgoKTsKIAotICAgICAgICBjb25zdCBXZWJDb3JlOjpIaXN0b3J5SXRl
bVZlY3RvciAmaXRlbXMgPSBkLT5sc3QtPmVudHJpZXMoKTsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZW1zLnNpemUoKTsgaSsrKQotICAgICAgICAgICAgaXRlbXNbaV0uZ2V0
KCktPnNhdmVTdGF0ZShzdHJlYW0sIHZlcnNpb24pOworICAgIGNvbnN0IFdlYkNvcmU6Okhpc3Rv
cnlJdGVtVmVjdG9yICZpdGVtcyA9IGQtPmxzdC0+ZW50cmllcygpOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykKKyAgICAgICAgaXRlbXNbaV0uZ2V0KCkt
PnNhdmVTdGF0ZShzdHJlYW0sIHRhcmdldC52ZXJzaW9uKCkpOwogCi0gICAgICAgIGlmIChzdHJl
YW0uc3RhdHVzKCkgIT0gUURhdGFTdHJlYW06Ok9rKQotICAgICAgICAgICAgYnVmZmVyID0gUUJ5
dGVBcnJheSgpOyAgLy8gbWFrZSBidWZmZXIgaXNOdWxsKCk9PXRydWUgYW5kIGlzRW1wdHkoKT09
dHJ1ZQotICAgICAgICBicmVhazsKLSAgICB9Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnVmZmVy
LmNsZWFyKCk7Ci0gICAgfQorICAgIGlmIChzdHJlYW0uc3RhdHVzKCkgIT0gUURhdGFTdHJlYW06
Ok9rKQorICAgICAgICBidWZmZXIgPSBRQnl0ZUFycmF5KCk7ICAvLyBtYWtlIGJ1ZmZlciBpc051
bGwoKT09dHJ1ZSBhbmQgaXNFbXB0eSgpPT10cnVlCiAKICAgICByZXR1cm4gdGFyZ2V0IDw8IGJ1
ZmZlcjsKIH0KQEAgLTUzMiwzOSArNTE5LDM0IEBAIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KFFE
YXRhU3RyZWFtJiB0YXJnZXQsIGNvbnN0IFFXZWJIaXN0b3J5JiBoaXN0b3J5KQogCiBRRGF0YVN0
cmVhbSYgb3BlcmF0b3I+PihRRGF0YVN0cmVhbSYgc291cmNlLCBRV2ViSGlzdG9yeSYgaGlzdG9y
eSkKIHsKKyAgICBpZiAoc291cmNlLnZlcnNpb24oKSA8IFFEYXRhU3RyZWFtOjpRdF80XzUpCisg
ICAgICAgIHJldHVybiBzb3VyY2U7CisKICAgICBRV2ViSGlzdG9yeVByaXZhdGUqIGQgPSBoaXN0
b3J5LmQ7CiAKICAgICBRQnl0ZUFycmF5IGJ1ZmZlcjsKICAgICBzb3VyY2UgPj4gYnVmZmVyOwog
CiAgICAgUURhdGFTdHJlYW0gc3RyZWFtKGJ1ZmZlcik7Ci0gICAgaW50IHZlcnNpb247CiAgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKLSAgICBzdHJlYW0gPj4gdmVyc2lvbjsKLQotICAgIHN3aXRj
aCAodmVyc2lvbikgewotICAgIGNhc2UgUVdlYkhpc3Rvcnk6Okhpc3RvcnlWZXJzaW9uXzE6IHsK
LSAgICAgICAgaW50IGNvdW50OwotICAgICAgICBpbnQgY3VycmVudEluZGV4OwotICAgICAgICBz
dHJlYW0gPj4gY291bnQgPj4gY3VycmVudEluZGV4OwotCi0gICAgICAgIGhpc3RvcnkuY2xlYXIo
KTsKLSAgICAgICAgLy8gb25seSBpZiB0aGVyZSBhcmUgZWxlbWVudHMKLSAgICAgICAgaWYgKGNv
dW50KSB7Ci0gICAgICAgICAgICAvLyBhZnRlciBjbGVhcigpIGlzIG5ldyBjbGVhciBIaXN0b3J5
SXRlbSAoYXQgdGhlIGVuZCB3ZSBoYWQgdG8gcmVtb3ZlIGl0KQotICAgICAgICAgICAgV2ViQ29y
ZTo6SGlzdG9yeUl0ZW0qIG51bGxJdGVtID0gZC0+bHN0LT5jdXJyZW50SXRlbSgpOwotICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Ci0gICAgICAgICAgICAgICAg
V1RGOjpQYXNzUmVmUHRyPFdlYkNvcmU6Okhpc3RvcnlJdGVtPiBpdGVtID0gV2ViQ29yZTo6SGlz
dG9yeUl0ZW06OmNyZWF0ZSgpOwotICAgICAgICAgICAgICAgIGl0ZW0tPnJlc3RvcmVTdGF0ZShz
dHJlYW0sIHZlcnNpb24pOwotICAgICAgICAgICAgICAgIGQtPmxzdC0+YWRkSXRlbShpdGVtKTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGQtPmxzdC0+cmVtb3ZlSXRlbShudWxsSXRlbSk7
Ci0gICAgICAgICAgICBoaXN0b3J5LmdvVG9JdGVtKGhpc3RvcnkuaXRlbUF0KGN1cnJlbnRJbmRl
eCkpOwotICAgICAgICAgICAgcmVzdWx0ID0gc3RyZWFtLnN0YXR1cygpID09IFFEYXRhU3RyZWFt
OjpPazsKKworICAgIGludCBjb3VudDsKKyAgICBpbnQgY3VycmVudEluZGV4OworICAgIHN0cmVh
bSA+PiBjb3VudCA+PiBjdXJyZW50SW5kZXg7CisKKyAgICBoaXN0b3J5LmNsZWFyKCk7CisgICAg
Ly8gb25seSBpZiB0aGVyZSBhcmUgZWxlbWVudHMKKyAgICBpZiAoY291bnQpIHsKKyAgICAgICAg
Ly8gYWZ0ZXIgY2xlYXIoKSBpcyBuZXcgY2xlYXIgSGlzdG9yeUl0ZW0gKGF0IHRoZSBlbmQgd2Ug
aGFkIHRvIHJlbW92ZSBpdCkKKyAgICAgICAgV2ViQ29yZTo6SGlzdG9yeUl0ZW0qIG51bGxJdGVt
ID0gZC0+bHN0LT5jdXJyZW50SXRlbSgpOworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGNv
dW50OyBpKyspIHsKKyAgICAgICAgICAgIFdURjo6UGFzc1JlZlB0cjxXZWJDb3JlOjpIaXN0b3J5
SXRlbT4gaXRlbSA9IFdlYkNvcmU6Okhpc3RvcnlJdGVtOjpjcmVhdGUoKTsKKyAgICAgICAgICAg
IGl0ZW0tPnJlc3RvcmVTdGF0ZShzdHJlYW0sIHNvdXJjZS52ZXJzaW9uKCkpOworICAgICAgICAg
ICAgZC0+bHN0LT5hZGRJdGVtKGl0ZW0pOwogICAgICAgICB9Ci0gICAgICAgIGJyZWFrOwotICAg
IH0KLSAgICBkZWZhdWx0OiB7fSAvLyByZXN1bHQgaXMgZmFsc2U7CisgICAgICAgIGQtPmxzdC0+
cmVtb3ZlSXRlbShudWxsSXRlbSk7CisgICAgICAgIGhpc3RvcnkuZ29Ub0l0ZW0oaGlzdG9yeS5p
dGVtQXQoY3VycmVudEluZGV4KSk7CisgICAgICAgIHJlc3VsdCA9IHN0cmVhbS5zdGF0dXMoKSA9
PSBRRGF0YVN0cmVhbTo6T2s7CiAgICAgfQogCiAgICAgZC0+cGFnZSgpLT51cGRhdGVOYXZpZ2F0
aW9uQWN0aW9ucygpOwpkaWZmIC0tZ2l0IGEvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5oIGIv
V2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5oCmluZGV4IDg1NGEyNzguLmNjZTQ1NTMgMTAwNjQ0
Ci0tLSBhL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuaAorKysgYi9XZWJLaXQvcXQvQXBpL3F3
ZWJoaXN0b3J5LmgKQEAgLTcwLDEyICs3MCw2IEBAIHByaXZhdGU6CiBjbGFzcyBRV2ViSGlzdG9y
eVByaXZhdGU7CiBjbGFzcyBRV0VCS0lUX0VYUE9SVCBRV2ViSGlzdG9yeSB7CiBwdWJsaWM6Ci0g
ICAgZW51bSBIaXN0b3J5U3RhdGVWZXJzaW9uIHsKLSAgICAgICAgSGlzdG9yeVZlcnNpb25fMSwK
LSAgICAgICAgLyosIEhpc3RvcnlWZXJzaW9uXzIsICovCi0gICAgICAgIERlZmF1bHRIaXN0b3J5
VmVyc2lvbiA9IEhpc3RvcnlWZXJzaW9uXzEKLSAgICB9OwotCiAgICAgdm9pZCBjbGVhcigpOwog
CiAgICAgUUxpc3Q8UVdlYkhpc3RvcnlJdGVtPiBpdGVtcygpIGNvbnN0OwpkaWZmIC0tZ2l0IGEv
V2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggNzUxZTcxOC4u
NjFmYWZhZCAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQvcXQv
Q2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIgQEAKIDIwMDktMTAtMjggIEtlbm5ldGggUm9oZGUgQ2hy
aXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgogCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFtRdF0gUVdlYkhpc3Rvcnk6OnNhdmVTdGF0ZSgpIGlz
IGluY29uc2lzdGVudCB3aXRoIHRoZSBRdCBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTMwNzEwCisKKyAgICAgICAgUmVtb3ZlIHRoZSBRV2ViSGlz
dG9yeTo6SGlzdG9yeVN0YXRlVmVyc2lvbiBhbmQgdXNlIHRoZQorICAgICAgICBRRGF0YVN0cmVh
bTo6VmVyc2lvbiBpbnN0ZWFkLgorCisgICAgICAgIEFsc28gZG8gbm90IHNhdmUgdGhlIHZlcnNp
b24gbnVtYmVyIGluIGEgc3RyZWFtIGFzIGFncmVlZCB1cG9uCisKKyAgICAgICAgKiBBcGkvcXdl
Ymhpc3RvcnkuY3BwOgorICAgICAgICAob3BlcmF0b3I8PCk6CisgICAgICAgIChvcGVyYXRvcj4+
KToKKyAgICAgICAgKiBBcGkvcXdlYmhpc3RvcnkuaDoKKworMjAwOS0xMC0yOCAgS2VubmV0aCBS
b2hkZSBDaHJpc3RpYW5zZW4gIDxrZW5uZXRoQHdlYmtpdC5vcmc+CisKICAgICAgICAgUmV2aWV3
ZWQgYnkgSG9sZ2VyIEZyZXl0aGVyLgogCiAgICAgICAgIFtRdF0gUVdlYkhpc3Rvcnk6OnNhdmVT
dGF0ZSgpIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSBRdCBBUEk=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>42056</attachid>
            <date>2009-10-28 15:05:05 -0700</date>
            <delta_ts>2009-10-29 06:19:23 -0700</delta_ts>
            <desc>Avoid serializing to immediate QByteArray</desc>
            <filename>bug-30710-20091028190510.patch</filename>
            <type>text/plain</type>
            <size>2621</size>
            <attacher name="Kenneth Rohde Christiansen">kenneth</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1dlYktpdC9xdC9BcGkvcXdlYmhpc3RvcnkuY3BwIGIvV2ViS2l0L3F0L0Fw
aS9xd2ViaGlzdG9yeS5jcHAKaW5kZXggZjc2NWRhYS4uZDg1MjAxMiAxMDA2NDQKLS0tIGEvV2Vi
S2l0L3F0L0FwaS9xd2ViaGlzdG9yeS5jcHAKKysrIGIvV2ViS2l0L3F0L0FwaS9xd2ViaGlzdG9y
eS5jcHAKQEAgLTQ5NCwyMiArNDk0LDE2IEBAIFFEYXRhU3RyZWFtJiBvcGVyYXRvcjw8KFFEYXRh
U3RyZWFtJiB0YXJnZXQsIGNvbnN0IFFXZWJIaXN0b3J5JiBoaXN0b3J5KQogewogICAgIFFXZWJI
aXN0b3J5UHJpdmF0ZSogZCA9IGhpc3RvcnkuZDsKIAotICAgIFFCeXRlQXJyYXkgYnVmZmVyOwot
ICAgIFFEYXRhU3RyZWFtIHN0cmVhbSgmYnVmZmVyLCBRSU9EZXZpY2U6OldyaXRlT25seSk7Ci0K
ICAgICBpbnQgdmVyc2lvbiA9IERlZmF1bHRIaXN0b3J5VmVyc2lvbjsKIAotICAgIHN0cmVhbSA8
PCB2ZXJzaW9uOwotICAgIHN0cmVhbSA8PCBoaXN0b3J5LmNvdW50KCkgPDwgaGlzdG9yeS5jdXJy
ZW50SXRlbUluZGV4KCk7CisgICAgdGFyZ2V0IDw8IHZlcnNpb247CisgICAgdGFyZ2V0IDw8IGhp
c3RvcnkuY291bnQoKSA8PCBoaXN0b3J5LmN1cnJlbnRJdGVtSW5kZXgoKTsKIAogICAgIGNvbnN0
IFdlYkNvcmU6Okhpc3RvcnlJdGVtVmVjdG9yICZpdGVtcyA9IGQtPmxzdC0+ZW50cmllcygpOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpdGVtcy5zaXplKCk7IGkrKykKLSAgICAgICAg
aXRlbXNbaV0uZ2V0KCktPnNhdmVTdGF0ZShzdHJlYW0sIHZlcnNpb24pOwotCi0gICAgaWYgKHN0
cmVhbS5zdGF0dXMoKSAhPSBRRGF0YVN0cmVhbTo6T2spCi0gICAgICAgIGJ1ZmZlciA9IFFCeXRl
QXJyYXkoKTsgIC8vIG1ha2UgYnVmZmVyIGlzTnVsbCgpPT10cnVlIGFuZCBpc0VtcHR5KCk9PXRy
dWUKKyAgICAgICAgaXRlbXNbaV0uZ2V0KCktPnNhdmVTdGF0ZSh0YXJnZXQsIHZlcnNpb24pOwog
Ci0gICAgcmV0dXJuIHRhcmdldCA8PCBidWZmZXI7CisgICAgcmV0dXJuIHRhcmdldDsKIH0KIAog
LyohCkBAIC01MjYsMTggKzUyMCwxNCBAQCBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+PihRRGF0YVN0
cmVhbSYgc291cmNlLCBRV2ViSGlzdG9yeSYgaGlzdG9yeSkKIHsKICAgICBRV2ViSGlzdG9yeVBy
aXZhdGUqIGQgPSBoaXN0b3J5LmQ7CiAKLSAgICBRQnl0ZUFycmF5IGJ1ZmZlcjsKLSAgICBzb3Vy
Y2UgPj4gYnVmZmVyOwotCi0gICAgUURhdGFTdHJlYW0gc3RyZWFtKGJ1ZmZlcik7CiAgICAgaW50
IHZlcnNpb247CiAKLSAgICBzdHJlYW0gPj4gdmVyc2lvbjsKKyAgICBzb3VyY2UgPj4gdmVyc2lv
bjsKIAogICAgIGlmICh2ZXJzaW9uID09IDEpIHsKICAgICAgICAgaW50IGNvdW50OwogICAgICAg
ICBpbnQgY3VycmVudEluZGV4OwotICAgICAgICBzdHJlYW0gPj4gY291bnQgPj4gY3VycmVudElu
ZGV4OworICAgICAgICBzb3VyY2UgPj4gY291bnQgPj4gY3VycmVudEluZGV4OwogCiAgICAgICAg
IGhpc3RvcnkuY2xlYXIoKTsKICAgICAgICAgLy8gb25seSBpZiB0aGVyZSBhcmUgZWxlbWVudHMK
QEAgLTU0Niw3ICs1MzYsNyBAQCBRRGF0YVN0cmVhbSYgb3BlcmF0b3I+PihRRGF0YVN0cmVhbSYg
c291cmNlLCBRV2ViSGlzdG9yeSYgaGlzdG9yeSkKICAgICAgICAgICAgIFdlYkNvcmU6Okhpc3Rv
cnlJdGVtKiBudWxsSXRlbSA9IGQtPmxzdC0+Y3VycmVudEl0ZW0oKTsKICAgICAgICAgICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewogICAgICAgICAgICAgICAgIFdURjo6UGFz
c1JlZlB0cjxXZWJDb3JlOjpIaXN0b3J5SXRlbT4gaXRlbSA9IFdlYkNvcmU6Okhpc3RvcnlJdGVt
OjpjcmVhdGUoKTsKLSAgICAgICAgICAgICAgICBpdGVtLT5yZXN0b3JlU3RhdGUoc3RyZWFtLCB2
ZXJzaW9uKTsKKyAgICAgICAgICAgICAgICBpdGVtLT5yZXN0b3JlU3RhdGUoc291cmNlLCB2ZXJz
aW9uKTsKICAgICAgICAgICAgICAgICBkLT5sc3QtPmFkZEl0ZW0oaXRlbSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICBkLT5sc3QtPnJlbW92ZUl0ZW0obnVsbEl0ZW0pOwpkaWZmIC0tZ2l0
IGEvV2ViS2l0L3F0L0NoYW5nZUxvZyBiL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggM2Y5M2U2
Yi4uYmUxNmJkOSAxMDA2NDQKLS0tIGEvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9XZWJLaXQv
cXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMDktMTAtMjggIEtlbm5ldGggUm9oZGUg
Q2hyaXN0aWFuc2VuICA8a2VubmV0aEB3ZWJraXQub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNlcmlhbGl6ZSBkaXJlY3RseSB0byB0aGUgc3Ry
ZWFtLCBhbmQgbm90IGZpcnN0IHRvIGFuIFFCeXRlQXJyYXksCisgICAgICAgIHRoYXQgaXMgbGF0
ZXIgc2VyaWFsaXplZC4gVGhhdCBpcyBzbG93ZXIgYW5kIGFsc28gdXNlcyBtb3JlIGJ5dGVzLgor
CisgICAgICAgICogQXBpL3F3ZWJoaXN0b3J5LmNwcDoKKyAgICAgICAgKG9wZXJhdG9yPDwpOgor
ICAgICAgICAob3BlcmF0b3I+Pik6CisKIDIwMDktMTAtMjcgIFNoaW5pY2hpcm8gSGFtYWppICA8
aGFtYWppQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4=
</data>
<flag name="review"
          id="23556"
          type_id="1"
          status="+"
          setter="vestbo"
    />
          </attachment>
      

    </bug>

</bugzilla>