<?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>18672</bug_id>
          
          <creation_ts>2008-04-21 17:16:56 -0700</creation_ts>
          <short_desc>SQUIRRELFISH: codegen fails with a large number of temporaries</short_desc>
          <delta_ts>2008-04-23 12:41:13 -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>JavaScriptCore</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>18624</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Cameron Zwarich (cpst)">zwarich</reporter>
          <assigned_to name="Oliver Hunt">oliver</assigned_to>
          <cc>ggaren</cc>
    
    <cc>mjs</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>78489</commentid>
    <comment_count>0</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-21 17:16:56 -0700</bug_when>
    <thetext>On a number of the JavaScriptCore tests, SquirrelFish fails with an assertion during codegen if there is a large number of temporaries. These failures do not get seem to get reported by run-javascriptcore-tests. An example is ecma/Array/15.4.5.2-2.js, which fails with the following assertion:

ASSERTION FAILED: m_temporaries.size() &lt; m_temporaries.capacity()
(./VM/CodeGenerator.cpp:296 KJS::RegisterID* KJS::CodeGenerator::newTemporary())

Many of the array tests fail for the same reason.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78495</commentid>
    <comment_count>1</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-04-21 17:31:02 -0700</bug_when>
    <thetext>Geoff and I agree that a good way to do this would be to use a segmented array for the temporaries (so they don&apos;t move but we still have the ability to allocate more).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78499</commentid>
    <comment_count>2</comment_count>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-04-21 18:06:54 -0700</bug_when>
    <thetext>(In reply to comment #1)
&gt; Geoff and I agree that a good way to do this would be to use a segmented array
&gt; for the temporaries (so they don&apos;t move but we still have the ability to
&gt; allocate more).

I agree with this suggestion.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78612</commentid>
    <comment_count>3</comment_count>
      <attachid>20763</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-22 21:59:32 -0700</bug_when>
    <thetext>Created attachment 20763
Patch-fu!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78629</commentid>
    <comment_count>4</comment_count>
      <attachid>20766</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-23 01:27:23 -0700</bug_when>
    <thetext>Created attachment 20766
Second run

Second run, now actually returns memory, SunSpider reports a 0.4% progression but that seems unlikely to be &quot;real&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78650</commentid>
    <comment_count>5</comment_count>
      <attachid>20766</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-04-23 07:45:52 -0700</bug_when>
    <thetext>Comment on attachment 20766
Second run

+		A7C31DA90DBEBA4300FDF8EB /* SegmentedVector.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */; };
+		A7C31DAA0DBEBA4300FDF8EB /* SegmentedVector.h in Headers */ = {isa = PBXBuildFile; fileRef = A7C31DA80DBEBA4300FDF8EB /* SegmentedVector.h */; };

SegmentedVector is really a component of the compiler, not the VM. I think it
belongs in the compiler folder.

+            if (!(m_size % SegmentSize) &amp;&amp; m_size &gt;= SegmentSize)

Would

if (!(m_size % SegmentSize) &amp;&amp; m_size &gt; 0)

do the same job? If so, I think it would be clearer.

+        void removeLast()
+        {
+            ASSERT(m_size);
+            m_size--;
+            m_buffers.last()-&gt;removeLast();
+            if (!(m_size % SegmentSize) &amp;&amp; m_size &gt;= SegmentSize) {
+                delete m_buffers.last();
+                m_buffers.removeLast();
+            }
+        }

Technically, if you kept adding and removing an item at the segement boundary,
this algorithm would give you really bad performance, because it would
repeatedly malloc/free a large block. You could fix the problem by keeping a
size and a capacity, just like Vector does. I don&apos;t think this is a blocker to
landing, though, since you&apos;d have to get pretty unlucky to hit this case during
codegen.

+            if (index &lt; SegmentSize)
+                return m_inlineBuffer[index];
+            return m_buffers[index / SegmentSize]-&gt;at(index % SegmentSize);

Why do we need to special-case the inline buffer here? Shouldn&apos;t the math &quot;just
work&quot;? I&apos;d recommend removing the special case.

+        void shrink(size_t size)
+        {
...
+        }
+
+        void grow(size_t size)
+        {
...
+        }

These methods look a little long for inlining. I&apos;d recommend moving them out of
the class declaration.

+        void grow(size_t size)
+        {
+            ASSERT(size &gt; m_size);
+            if (size &lt;= SegmentSize) {
+                m_inlineBuffer.resize(size);

You can call &quot;grow&quot; here instead of &quot;resize&quot;. Same thing in a few other places
in this function.

+        Segment m_inlineBuffer;
+        Vector&lt;Segment*, 32&gt; m_buffers;

Quibble: is it a &quot;segment&quot; or a &quot;buffer&quot;? I would call these &quot;m_inlineSegment&quot;
and &quot;m_segments&quot;.

Nice work.

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>78690</commentid>
    <comment_count>6</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2008-04-23 12:41:13 -0700</bug_when>
    <thetext>
&gt; SegmentedVector is really a component of the compiler, not the VM. I think it
&gt; belongs in the compiler folder.
&gt;
There is no Compiler directory -- I did put it in the Compiler group (in xcode), other things (like CodeGenerator.{h,cpp} are there as well.
 
&gt; +            if (!(m_size % SegmentSize) &amp;&amp; m_size &gt;= SegmentSize)
&gt; 
&gt; Would
&gt; 
&gt; if (!(m_size % SegmentSize) &amp;&amp; m_size &gt; 0)

Fixed

&gt; 
&gt; do the same job? If so, I think it would be clearer.
&gt; 
&gt; +        void removeLast()
&gt; +        {
&gt; +            ASSERT(m_size);
&gt; +            m_size--;
&gt; +            m_buffers.last()-&gt;removeLast();
&gt; +            if (!(m_size % SegmentSize) &amp;&amp; m_size &gt;= SegmentSize) {
&gt; +                delete m_buffers.last();
&gt; +                m_buffers.removeLast();
&gt; +            }
&gt; +        }
&gt; 
&gt; Technically, if you kept adding and removing an item at the segement boundary,
&gt; this algorithm would give you really bad performance, because it would
&gt; repeatedly malloc/free a large block. You could fix the problem by keeping a
&gt; size and a capacity, just like Vector does. I don&apos;t think this is a blocker to
&gt; landing, though, since you&apos;d have to get pretty unlucky to hit this case during
&gt; codegen.

Yeah, i know, however in the general case you do not have 512 temporaries so i thought this would be okay (at least for now)

&gt; 
&gt; +            if (index &lt; SegmentSize)
&gt; +                return m_inlineBuffer[index];
&gt; +            return m_buffers[index / SegmentSize]-&gt;at(index % SegmentSize);
&gt; 
&gt; Why do we need to special-case the inline buffer here? Shouldn&apos;t the math &quot;just
&gt; work&quot;? I&apos;d recommend removing the special case.
Performance, no other reason

&gt; 
&gt; +        void shrink(size_t size)
&gt; +        {
&gt; ...
&gt; +        }
&gt; +
&gt; +        void grow(size_t size)
&gt; +        {
&gt; ...
&gt; +        }
&gt; 
&gt; These methods look a little long for inlining. I&apos;d recommend moving them out of
&gt; the class declaration.
&gt; 
&gt; +        void grow(size_t size)
&gt; +        {
&gt; +            ASSERT(size &gt; m_size);
&gt; +            if (size &lt;= SegmentSize) {
&gt; +                m_inlineBuffer.resize(size);
&gt; 
&gt; You can call &quot;grow&quot; here instead of &quot;resize&quot;. Same thing in a few other places
&gt; in this function.

That&apos;s a perf regression :-/

&gt; 
&gt; +        Segment m_inlineBuffer;
&gt; +        Vector&lt;Segment*, 32&gt; m_buffers;
&gt; 
&gt; Quibble: is it a &quot;segment&quot; or a &quot;buffer&quot;? I would call these &quot;m_inlineSegment&quot;
&gt; and &quot;m_segments&quot;.

Agreed, and m_inlineSegment for good measure

&gt; 
&gt; Nice work.
&gt; 
&gt; r=me
&gt; 

Committer r32444</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20763</attachid>
            <date>2008-04-22 21:59:32 -0700</date>
            <delta_ts>2008-04-23 01:27:23 -0700</delta_ts>
            <desc>Patch-fu!</desc>
            <filename>resizing.patch</filename>
            <type>text/plain</type>
            <size>13002</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2MWUwNGUwLi45Y2FlZjVkIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzIg
QEAKKzIwMDgtMDQtMjIgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTg2NzI6IFNRVUlS
UkVMRklTSDogY29kZWdlbiBmYWlscyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHRlbXBvcmFyaWVz
CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2NzI+
CisKKyAgICAgICAgQWRkIGEgU2VnbWVudGVkVmVjdG9yIHR5cGUsIHdoaWNoIHByb3ZpZGVzIGEg
VmVjdG9yPFQ+IHdoaWNoIG1haW50YWlucworICAgICAgICBleGlzdGluZyBtZW1vcnkgbG9jYXRp
b25zIGR1cmluZyByZXNpemUuICBUaGlzIGFsbG93cyBkeW5hbWljYWxseSBzaXppbmcKKyAgICAg
ICAgbG9jYWwsIHRlbXBvcmFyeSBhbmQgbGFiZWwgInZlY3RvcnMiIGluIENvZGVHZW5lcmF0b3Iu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJh
dG9yOjphZGRWYXIpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9y
KToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6bmV3VGVtcG9yYXJ5KToKKyAgICAgICAg
KEtKUzo6Q29kZUdlbmVyYXRvcjo6bmV3TGFiZWwpOgorICAgICAgICAqIFZNL0NvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBWTS9TZWdtZW50ZWRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChL
SlM6OlNlZ21lbnRlZFZlY3Rvcjo6U2VnbWVudGVkVmVjdG9yKToKKyAgICAgICAgKEtKUzo6U2Vn
bWVudGVkVmVjdG9yOjpsYXN0KToKKyAgICAgICAgKEtKUzo6U2VnbWVudGVkVmVjdG9yOjphcHBl
bmQpOgorICAgICAgICAoS0pTOjpTZWdtZW50ZWRWZWN0b3I6OnJlbW92ZUxhc3QpOgorICAgICAg
ICAoS0pTOjpTZWdtZW50ZWRWZWN0b3I6OnNpemUpOgorICAgICAgICAoS0pTOjpTZWdtZW50ZWRW
ZWN0b3I6Om9wZXJhdG9yW10pOgorICAgICAgICAoS0pTOjpTZWdtZW50ZWRWZWN0b3I6OnJlc2l6
ZSk6CisgICAgICAgIChLSlM6OlNlZ21lbnRlZFZlY3Rvcjo6c2hyaW5rKToKKyAgICAgICAgKEtK
Uzo6U2VnbWVudGVkVmVjdG9yOjpncm93KToKKwogMjAwOC0wNC0yMiAgTWFjaWVqIFN0YWNob3dp
YWsgIDxtanNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4KZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHBy
b2ogYi9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCmluZGV4IDU0ZDExMmYuLmYwYmE0NjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE3LDYgKzIx
Nyw4IEBACiAJCUE3MjcwMUI2MERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMUI0
MERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCAqLzsgfTsKIAkJQTcyNzAx
QjkwREFERTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAv
KiBFeGNlcHRpb25IZWxwZXJzLmggKi87IH07CiAJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAv
KiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjdGRjY2MERBMzA1M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5
TmFtZUl0ZXJhdG9yLmNwcCAqLzsgfTsKKwkJQTdDMzFEQTkwREJFQkE0MzAwRkRGOEVCIC8qIFNl
Z21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gQTdDMzFEQTgwREJFQkE0MzAwRkRGOEVCIC8qIFNlZ21lbnRlZFZlY3Rvci5oICovOyB9
OworCQlBN0MzMURBQTBEQkVCQTQzMDBGREY4RUIgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0MzMURBODBEQkVCQTQz
MDBGREY4RUIgLyogU2VnbWVudGVkVmVjdG9yLmggKi87IH07CiAJCUE4RTg5NDMyMENEMDYwMjQw
MDM2NzE3OSAvKiBKU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEU4OTQzMTBDRDA2MDI0MDAzNjcxNzkgLyog
SlNDYWxsYmFja09iamVjdEZ1bmN0aW9ucy5oICovOyB9OwogCQlBOEU4OTQzNDBDRDA2MDNGMDAz
NjcxNzkgLyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEE4RTg5NDMzMENEMDYwM0YwMDM2NzE3OSAvKiBKU0dsb2JhbE9iamVj
dC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJD
OEYzQ0VEMERBRjFBODAwMDU3N0E4MCAvKiBDb25zdHJ1Y3REYXRhLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAg
LyogQ29uc3RydWN0RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01NTYsNiArNTU4LDcgQEAKIAkJQTcyN0ZGNjUwREEzMDUzQjAwRTU0OEQ3
IC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oOyBwYXRoID0gVk0vSlNQcm9wZXJ0eU5hbWVJ
dGVyYXRvci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzI3RkY2NjBEQTMwNTNC
MDBFNTQ4RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IG5hbWUgPSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDsgcGF0aCA9IFZN
L0pTUHJvcGVydHlOYW1lSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQlBNzg1RTMwMzBEOTM0MUFCMDA5NTM3NzIgLyogRXhlY1N0YXRlSW5saW5lcy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjU3RhdGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCUE3QzMxREE4MERCRUJBNDMwMEZERjhFQiAvKiBTZWdtZW50ZWRW
ZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2VnbWVudGVkVmVjdG9y
Lmg7IHBhdGggPSBWTS9TZWdtZW50ZWRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJQThFODk0MzEwQ0QwNjAyNDAwMzY3MTc5IC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsYmFja09iamVjdEZ1
bmN0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEU4OTQzMzBDRDA2MDNG
MDAzNjcxNzkgLyogSlNHbG9iYWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSlNHbG9iYWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4
RjNDQ0YwREFGMTdCQTAwNTc3QTgwIC8qIENvbnN0cnVjdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RydWN0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtODEyLDYgKzgxNSw3IEBACiAJCQkJOTNGMEIzQUEwOUJCNERDMDAwNjhGQ0UzIC8q
IFBhcnNlci5oICovLAogCQkJCTE0OUIxNkI5MEQ4MjU4M0YwMDlDQjhDNyAvKiBSZWdpc3RlcklE
LmNwcCAqLywKIAkJCQkxNDlCMTZCODBEODI1ODNGMDA5Q0I4QzcgLyogUmVnaXN0ZXJJRC5oICov
LAorCQkJCUE3QzMxREE4MERCRUJBNDMwMEZERjhFQiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywK
IAkJCSk7CiAJCQluYW1lID0gQ29tcGlsZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpA
QCAtMTExNCw2ICsxMTE4LDcgQEAKIAkJCQkxNDQwMDVDQzBBNTMzOEY4MDAwNUYwNjEgLyogTm9k
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMTQ0MDA3NEEwQTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVM
aXN0LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI3MDFCOTBEQURFOTQ5MDBFNTQ4RDcgLyogRXhj
ZXB0aW9uSGVscGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdDMzFEQUEwREJFQkE0MzAwRkRG
OEVCIC8qIFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25s
eUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMjYyLDYgKzEyNjcs
NyBAQAogCQkJCTE0RDc5NzgwMERBQzMzMDcwMDFBOUYwNSAvKiBSZWdpc3RlckZpbGVTdGFjay5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkM4RjNDRUQwREFGMUE4MDAwNTc3QTgwIC8qIENvbnN0cnVj
dERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjcwMUI1MERBREU5NDkwMEU1NDhENyAvKiBF
eGNlcHRpb25IZWxwZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0MzMURBOTBEQkVCQTQzMDBG
REY4RUIgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5P
bmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUvVk0vQ29k
ZUdlbmVyYXRvci5jcHAKaW5kZXggNjg0NWNhZC4uOWZkYmNkNyAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvVk0vQ29k
ZUdlbmVyYXRvci5jcHAKQEAgLTE0Nyw4ICsxNDcsNyBAQCBib29sIENvZGVHZW5lcmF0b3I6OmFk
ZFZhcihjb25zdCBJZGVudGlmaWVyJiBpZGVudCwgUmVnaXN0ZXJJRComIHIwKQogICAgIGVsc2Ug
ewogICAgICAgICAtLW1fbmV4dFZhcjsKICAgICAgICAgKyttX2NvZGVCbG9jay0+bnVtVmFyczsK
LSAgICAgICAgCi0gICAgICAgIEFTU0VSVChtX2xvY2Fscy5zaXplKCkgPCBtX2xvY2Fscy5jYXBh
Y2l0eSgpKTsgLy8gRklYTUU6IEhhbmRsZSBncm93aW5nIHRoZSBsb2NhbHMgdmVjdG9yIGR5bmFt
aWNhbGx5LgorCiAgICAgICAgIG1fbG9jYWxzLmFwcGVuZChpbmRleCk7CiAgICAgfQogCkBAIC0y
MzEsNyArMjMwLDYgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlO
b2RlKiBmdW5jdGlvbkJvZHksIGNvbnN0IFNjb3BlQ2hhaW4mIHMKICAgICB9CiAKICAgICBtX25l
eHRQYXJhbWV0ZXIgPSBtX25leHRWYXIgLSBwYXJhbWV0ZXJzLnNpemUoKTsKLSAgICBBU1NFUlQo
bG9jYWxzSW5kZXgobV9uZXh0UGFyYW1ldGVyKSArIDEgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbG9j
YWxzLmNhcGFjaXR5KCkpKTsgLy8gRklYTUU6IEhhbmRsZSBncm93aW5nIHRoZSBsb2NhbHMgdmVj
dG9yIGR5bmFtaWNhbGx5LgogICAgIG1fbG9jYWxzLnJlc2l6ZShsb2NhbHNJbmRleChtX25leHRQ
YXJhbWV0ZXIpICsgMSk7CiAKICAgICBhZGRQYXJhbWV0ZXIobV9wcm9wZXJ0eU5hbWVzLT50aGlz
SWRlbnRpZmllcik7CkBAIC0zMTMsNyArMzExLDYgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRv
cjo6bmV3VGVtcG9yYXJ5KCkKICAgICAgICAgbV90ZW1wb3Jhcmllcy5yZW1vdmVMYXN0KCk7CiAK
ICAgICAvLyBBbGxvY2F0ZSBuZXcgcmVnaXN0ZXIgSUQuCi0gICAgQVNTRVJUKG1fdGVtcG9yYXJp
ZXMuc2l6ZSgpIDwgbV90ZW1wb3Jhcmllcy5jYXBhY2l0eSgpKTsgLy8gRklYTUU6IEhhbmRsZSBn
cm93aW5nIHRoZSB0ZW1wb3JhcmllcyB2ZWN0b3IgZHluYW1pY2FsbHkuCiAgICAgbV90ZW1wb3Jh
cmllcy5hcHBlbmQobV90ZW1wb3Jhcmllcy5zaXplKCkpOwogICAgIG1fY29kZUJsb2NrLT5udW1U
ZW1wb3JhcmllcyA9IG1heDxpbnQ+KG1fY29kZUJsb2NrLT5udW1UZW1wb3JhcmllcywgbV90ZW1w
b3Jhcmllcy5zaXplKCkpOwogICAgIHJldHVybiAmbV90ZW1wb3Jhcmllcy5sYXN0KCk7CkBAIC0z
MjYsNyArMzIzLDYgQEAgUGFzc1JlZlB0cjxMYWJlbElEPiBDb2RlR2VuZXJhdG9yOjpuZXdMYWJl
bCgpCiAgICAgICAgIG1fbGFiZWxzLnJlbW92ZUxhc3QoKTsKIAogICAgIC8vIEFsbG9jYXRlIG5l
dyBsYWJlbCBJRC4KLSAgICBBU1NFUlQobV9sYWJlbHMuc2l6ZSgpIDwgbV9sYWJlbHMuY2FwYWNp
dHkoKSk7IC8vIEZJWE1FOiBIYW5kbGUgZ3Jvd2luZyB0aGUgbGFiZWwgdmVjdG9yIGR5bmFtaWNh
bGx5LgogICAgIG1fbGFiZWxzLmFwcGVuZChtX2NvZGVCbG9jayk7CiAgICAgcmV0dXJuICZtX2xh
YmVscy5sYXN0KCk7CiB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJh
dG9yLmggYi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgKaW5kZXggZWJiODg0ZC4u
NjA0M2UyZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaApAQCAtMzYsNiArMzYsNyBAQAog
I2luY2x1ZGUgIkxhYmVsSUQuaCIKICNpbmNsdWRlICJSZWdpc3RlcklELmgiCiAjaW5jbHVkZSAi
U3ltYm9sVGFibGUuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRWZWN0b3IuaCIKICNpbmNsdWRlICJu
b2Rlcy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rv
ci5oPgpAQCAtMjkzLDkgKzI5NCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAKICAgICAg
ICAgSGFzaFNldDxSZWZQdHI8VVN0cmluZzo6UmVwPiwgSWRlbnRpZmllclJlcEhhc2gsIElkZW50
aWZpZXJSZXBIYXNoVHJhaXRzPiBtX2Z1bmN0aW9uczsKIAotICAgICAgICBWZWN0b3I8UmVnaXN0
ZXJJRCwgNTEyPiBtX2xvY2FsczsKLSAgICAgICAgVmVjdG9yPFJlZ2lzdGVySUQsIDUxMj4gbV90
ZW1wb3JhcmllczsKLSAgICAgICAgVmVjdG9yPExhYmVsSUQsIDUxMj4gbV9sYWJlbHM7CisgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAxPiBtX2xvY2FsczsKKyAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDI+IG1fdGVtcG9yYXJpZXM7CisgICAgICAgIFNlZ21l
bnRlZFZlY3RvcjxMYWJlbElELCAzPiBtX2xhYmVsczsKICAgICAgICAgaW50IG1fZmluYWxseURl
cHRoOwogICAgICAgICBpbnQgbV9keW5hbWljU2NvcGVEZXB0aDsKICAgICAgICAgQ29kZVR5cGUg
bV9jb2RlVHlwZTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL1ZNL1NlZ21lbnRlZFZlY3Rv
ci5oIGIvSmF2YVNjcmlwdENvcmUvVk0vU2VnbWVudGVkVmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4MWFjOQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3Jp
cHRDb3JlL1ZNL1NlZ21lbnRlZFZlY3Rvci5oCkBAIC0wLDAgKzEsMTQ1IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNl
Z21lbnRlZFZlY3Rvcl9oCisjZGVmaW5lIFNlZ21lbnRlZFZlY3Rvcl9oCisKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIAorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCBzaXplX3QgU2VnbWVudFNpemU+IGNsYXNzIFNlZ21lbnRlZFZlY3RvciB7CisgICAg
cHVibGljOgorICAgICAgICBTZWdtZW50ZWRWZWN0b3IoKSAKKyAgICAgICAgICAgIDogbV9zaXpl
KDApCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFQmIGxhc3QoKSAKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKG1fc2l6ZSk7CisgICAgICAgICAgICByZXR1cm4gbV9idWZm
ZXJzLmxhc3QoKS0+bGFzdCgpOworICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVu
YW1lIFU+IHZvaWQgYXBwZW5kKGNvbnN0IFUmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAg
ICBpZiAoIShtX3NpemUgJSBTZWdtZW50U2l6ZSkpCisgICAgICAgICAgICAgICAgbV9idWZmZXJz
LmFwcGVuZChuZXcgU2VnbWVudCk7CisgICAgICAgICAgICBtX2J1ZmZlcnMubGFzdCgpLT5hcHBl
bmQodmFsdWUpOworICAgICAgICAgICAgbV9zaXplKys7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHZvaWQgcmVtb3ZlTGFzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCht
X3NpemUpOworICAgICAgICAgICAgbV9zaXplLS07CisgICAgICAgICAgICBtX2J1ZmZlcnMubGFz
dCgpLT5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBpZiAoIShtX3NpemUgJSBTZWdtZW50U2l6
ZSkpIHsKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9idWZmZXJzLmxhc3QoKTsKKyAgICAgICAg
ICAgICAgICBtX2J1ZmZlcnMucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgfQorICAgICAgICB9
CisKKyAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCAKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fc2l6ZTsgCisgICAgICAgIH0KKworICAgICAgICBUJiBvcGVyYXRvcltdKHNpemVf
dCBpbmRleCkgCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmRleCA8IG1fc2l6ZSk7
CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXJzW2luZGV4IC8gU2VnbWVudFNpemVdLT5hdChp
bmRleCAlIFNlZ21lbnRTaXplKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcmVzaXplKHNp
emVfdCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoc2l6ZSA8IG1fc2l6ZSkKKyAg
ICAgICAgICAgICAgICBzaHJpbmsoc2l6ZSk7CisgICAgICAgICAgICBlbHNlIGlmIChzaXplID4g
bV9zaXplKQorICAgICAgICAgICAgICAgIGdyb3coc2l6ZSk7CisgICAgICAgICAgICBBU1NFUlQo
c2l6ZSA9PSBtX3NpemUpOworICAgICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgdm9pZCBz
aHJpbmsoc2l6ZV90IHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChzaXplIDwg
bV9zaXplKTsKKyAgICAgICAgICAgIHNpemVfdCBudW1TZWdtZW50cyA9IHNpemUgLyBTZWdtZW50
U2l6ZTsKKyAgICAgICAgICAgIHNpemVfdCBleHRyYSA9IHNpemUgJSBTZWdtZW50U2l6ZTsKKwor
ICAgICAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgICAgIG51bVNlZ21lbnRzKys7CisK
KyAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBudW1TZWdtZW50czsgaSA8IG1fYnVmZmVycy5z
aXplKCk7IGkrKykKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9idWZmZXJzW2ldOworCisgICAg
ICAgICAgICBtX2J1ZmZlcnMucmVzaXplKG51bVNlZ21lbnRzKTsKKyAgICAgICAgICAgIGlmIChl
eHRyYSkKKyAgICAgICAgICAgICAgICBtX2J1ZmZlcnMubGFzdCgpLT5yZXNpemUoZXh0cmEpOwor
ICAgICAgICAgICAgbV9zaXplID0gc2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZ3Jv
dyhzaXplX3Qgc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHNpemUgPiBtX3Np
emUpOworICAgICAgICAgICAgc2l6ZV90IG51bVNlZ21lbnRzID0gc2l6ZSAvIFNlZ21lbnRTaXpl
OworICAgICAgICAgICAgc2l6ZV90IGV4dHJhID0gc2l6ZSAlIFNlZ21lbnRTaXplOworICAgICAg
ICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgICAgIG51bVNlZ21lbnRzKys7CisgICAgICAg
ICAgICBzaXplX3Qgb2xkU2l6ZSA9IG1fYnVmZmVycy5zaXplKCk7CisgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGlmIChudW1TZWdtZW50cyA9PSBvbGRTaXplKSB7CisgICAgICAgICAgICAgICAg
bV9idWZmZXJzLmxhc3QoKS0+cmVzaXplKGV4dHJhKTsKKyAgICAgICAgICAgICAgICBtX3NpemUg
PSBzaXplOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgaWYgKG9sZFNpemUpCisgICAgICAgICAgICAgICAgbV9idWZmZXJzLmxhc3QoKS0+cmVz
aXplKFNlZ21lbnRTaXplKTsKKworICAgICAgICAgICAgbV9idWZmZXJzLnJlc2l6ZShudW1TZWdt
ZW50cyk7CisgICAgCisgICAgICAgICAgICBBU1NFUlQob2xkU2l6ZSA8IG1fYnVmZmVycy5zaXpl
KCkpOworICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IG9sZFNpemU7IGkgPCAobnVtU2VnbWVu
dHMgLSAxKTsgaSsrKSB7CisgICAgICAgICAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IG5ldyBT
ZWdtZW50OworICAgICAgICAgICAgICAgIHNlZ21lbnQtPnJlc2l6ZShTZWdtZW50U2l6ZSk7Cisg
ICAgICAgICAgICAgICAgbV9idWZmZXJzW2ldID0gc2VnbWVudDsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgU2VnbWVudCogc2VnbWVudCA9IG5ldyBTZWdtZW50OworICAgICAgICAgICAg
c2VnbWVudC0+cmVzaXplKGV4dHJhID8gZXh0cmEgOiBTZWdtZW50U2l6ZSk7CisgICAgICAgICAg
ICBtX2J1ZmZlcnNbbnVtU2VnbWVudHMgLSAxXSA9IHNlZ21lbnQ7CisgICAgICAgICAgICBtX3Np
emUgPSBzaXplOworICAgICAgICB9CisKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8VCwgU2VnbWVu
dFNpemU+IFNlZ21lbnQ7CisgICAgICAgIHNpemVfdCBtX3NpemU7CisgICAgICAgIFZlY3RvcjxT
ZWdtZW50KiA+IG1fYnVmZmVyczsKKyAgICB9OworfQorCisjZW5kaWYgLy8gU2VnbWVudGVkVmVj
dG9yX2gK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>20766</attachid>
            <date>2008-04-23 01:27:23 -0700</date>
            <delta_ts>2008-04-23 07:45:52 -0700</delta_ts>
            <desc>Second run</desc>
            <filename>resizing.patch</filename>
            <type>text/plain</type>
            <size>13769</size>
            <attacher name="Oliver Hunt">oliver</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwppbmRleCA2MWUwNGUwLi4yMWEyNWU3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzMg
QEAKKzIwMDgtMDQtMjMgIE9saXZlciBIdW50ICA8b2xpdmVyQGFwcGxlLmNvbT4KKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBCdWcgMTg2NzI6IFNRVUlS
UkVMRklTSDogY29kZWdlbiBmYWlscyB3aXRoIGEgbGFyZ2UgbnVtYmVyIG9mIHRlbXBvcmFyaWVz
CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg2NzI+
CisKKyAgICAgICAgQWRkIGEgU2VnbWVudGVkVmVjdG9yIHR5cGUsIHdoaWNoIHByb3ZpZGVzIGEg
VmVjdG9yPFQ+IHdoaWNoIG1haW50YWlucworICAgICAgICBleGlzdGluZyBtZW1vcnkgbG9jYXRp
b25zIGR1cmluZyByZXNpemUuICBUaGlzIGFsbG93cyBkeW5hbWljYWxseSBzaXppbmcKKyAgICAg
ICAgbG9jYWwsIHRlbXBvcmFyeSBhbmQgbGFiZWwgInZlY3RvcnMiIGluIENvZGVHZW5lcmF0b3Iu
CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgor
ICAgICAgICAqIFZNL0NvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJh
dG9yOjphZGRWYXIpOgorICAgICAgICAoS0pTOjpDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9y
KToKKyAgICAgICAgKEtKUzo6Q29kZUdlbmVyYXRvcjo6bmV3VGVtcG9yYXJ5KToKKyAgICAgICAg
KEtKUzo6Q29kZUdlbmVyYXRvcjo6bmV3TGFiZWwpOgorICAgICAgICAqIFZNL0NvZGVHZW5lcmF0
b3IuaDoKKyAgICAgICAgKiBWTS9TZWdtZW50ZWRWZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChL
SlM6OlNlZ21lbnRlZFZlY3Rvcjo6U2VnbWVudGVkVmVjdG9yKToKKyAgICAgICAgKEtKUzo6U2Vn
bWVudGVkVmVjdG9yOjp+U2VnbWVudGVkVmVjdG9yKToKKyAgICAgICAgKEtKUzo6U2VnbWVudGVk
VmVjdG9yOjpsYXN0KToKKyAgICAgICAgKEtKUzo6U2VnbWVudGVkVmVjdG9yOjphcHBlbmQpOgor
ICAgICAgICAoS0pTOjpTZWdtZW50ZWRWZWN0b3I6OnJlbW92ZUxhc3QpOgorICAgICAgICAoS0pT
OjpTZWdtZW50ZWRWZWN0b3I6OnNpemUpOgorICAgICAgICAoS0pTOjpTZWdtZW50ZWRWZWN0b3I6
Om9wZXJhdG9yW10pOgorICAgICAgICAoS0pTOjpTZWdtZW50ZWRWZWN0b3I6OnJlc2l6ZSk6Cisg
ICAgICAgIChLSlM6OlNlZ21lbnRlZFZlY3Rvcjo6c2hyaW5rKToKKyAgICAgICAgKEtKUzo6U2Vn
bWVudGVkVmVjdG9yOjpncm93KToKKwogMjAwOC0wNC0yMiAgTWFjaWVqIFN0YWNob3dpYWsgIDxt
anNAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IFNhbS4KZGlmZiAtLWdpdCBhL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCmlu
ZGV4IDU0ZDExMmYuLmYwYmE0NjggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3Jp
cHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjE3LDYgKzIxNyw4IEBA
CiAJCUE3MjcwMUI2MERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMUI0MERBREU5
NDkwMEU1NDhENyAvKiBFeGNlcHRpb25IZWxwZXJzLmNwcCAqLzsgfTsKIAkJQTcyNzAxQjkwREFE
RTk0OTAwRTU0OEQ3IC8qIEV4Y2VwdGlvbkhlbHBlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEE3MjcwMUIzMERBREU5NDkwMEU1NDhENyAvKiBFeGNl
cHRpb25IZWxwZXJzLmggKi87IH07CiAJCUE3MjdGRjZCMERBMzA5MjIwMEU1NDhENyAvKiBKU1By
b3BlcnR5TmFtZUl0ZXJhdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IEE3MjdGRjY2MERBMzA1M0IwMEU1NDhENyAvKiBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yLmNwcCAqLzsgfTsKKwkJQTdDMzFEQTkwREJFQkE0MzAwRkRGOEVCIC8qIFNlZ21lbnRl
ZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
QTdDMzFEQTgwREJFQkE0MzAwRkRGOEVCIC8qIFNlZ21lbnRlZFZlY3Rvci5oICovOyB9OworCQlB
N0MzMURBQTBEQkVCQTQzMDBGREY4RUIgLyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBN0MzMURBODBEQkVCQTQzMDBGREY4
RUIgLyogU2VnbWVudGVkVmVjdG9yLmggKi87IH07CiAJCUE4RTg5NDMyMENEMDYwMjQwMDM2NzE3
OSAvKiBKU0NhbGxiYWNrT2JqZWN0RnVuY3Rpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBOEU4OTQzMTBDRDA2MDI0MDAzNjcxNzkgLyogSlNDYWxs
YmFja09iamVjdEZ1bmN0aW9ucy5oICovOyB9OwogCQlBOEU4OTQzNDBDRDA2MDNGMDAzNjcxNzkg
LyogSlNHbG9iYWxPYmplY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IEE4RTg5NDMzMENEMDYwM0YwMDM2NzE3OSAvKiBKU0dsb2JhbE9iamVjdC5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUJDOEYzQ0VE
MERBRjFBODAwMDU3N0E4MCAvKiBDb25zdHJ1Y3REYXRhLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBCQzhGM0NDRjBEQUYxN0JBMDA1NzdBODAgLyogQ29u
c3RydWN0RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01NTYsNiArNTU4LDcgQEAKIAkJQTcyN0ZGNjUwREEzMDUzQjAwRTU0OEQ3IC8qIEpT
UHJvcGVydHlOYW1lSXRlcmF0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
SlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5oOyBwYXRoID0gVk0vSlNQcm9wZXJ0eU5hbWVJdGVyYXRv
ci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzI3RkY2NjBEQTMwNTNCMDBFNTQ4
RDcgLyogSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IG5hbWUgPSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmNwcDsgcGF0aCA9IFZNL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBNzg1
RTMwMzBEOTM0MUFCMDA5NTM3NzIgLyogRXhlY1N0YXRlSW5saW5lcy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBFeGVjU3RhdGVJbmxpbmVzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCUE3QzMxREE4MERCRUJBNDMwMEZERjhFQiAvKiBTZWdtZW50ZWRWZWN0b3Iu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gU2VnbWVudGVkVmVjdG9yLmg7IHBh
dGggPSBWTS9TZWdtZW50ZWRWZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
QThFODk0MzEwQ0QwNjAyNDAwMzY3MTc5IC8qIEpTQ2FsbGJhY2tPYmplY3RGdW5jdGlvbnMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDYWxsYmFja09iamVjdEZ1bmN0aW9u
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBOEU4OTQzMzBDRDA2MDNGMDAzNjcx
NzkgLyogSlNHbG9iYWxPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
SlNHbG9iYWxPYmplY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQkM4RjNDQ0Yw
REFGMTdCQTAwNTc3QTgwIC8qIENvbnN0cnVjdERhdGEuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gQ29uc3RydWN0RGF0YS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtODEyLDYgKzgxNSw3IEBACiAJCQkJOTNGMEIzQUEwOUJCNERDMDAwNjhGQ0UzIC8qIFBhcnNl
ci5oICovLAogCQkJCTE0OUIxNkI5MEQ4MjU4M0YwMDlDQjhDNyAvKiBSZWdpc3RlcklELmNwcCAq
LywKIAkJCQkxNDlCMTZCODBEODI1ODNGMDA5Q0I4QzcgLyogUmVnaXN0ZXJJRC5oICovLAorCQkJ
CUE3QzMxREE4MERCRUJBNDMwMEZERjhFQiAvKiBTZWdtZW50ZWRWZWN0b3IuaCAqLywKIAkJCSk7
CiAJCQluYW1lID0gQ29tcGlsZXI7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwpAQCAtMTEx
NCw2ICsxMTE4LDcgQEAKIAkJCQkxNDQwMDVDQzBBNTMzOEY4MDAwNUYwNjEgLyogTm9kZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ0MDA3NEEwQTUzNkNDMjAwMDVGMDYxIC8qIE5vZGVMaXN0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzI3MDFCOTBEQURFOTQ5MDBFNTQ4RDcgLyogRXhjZXB0aW9u
SGVscGVycy5oIGluIEhlYWRlcnMgKi8sCisJCQkJQTdDMzFEQUEwREJFQkE0MzAwRkRGOEVCIC8q
IFNlZ21lbnRlZFZlY3Rvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkBAIC0xMjYyLDYgKzEyNjcsNyBAQAog
CQkJCTE0RDc5NzgwMERBQzMzMDcwMDFBOUYwNSAvKiBSZWdpc3RlckZpbGVTdGFjay5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQkM4RjNDRUQwREFGMUE4MDAwNTc3QTgwIC8qIENvbnN0cnVjdERhdGEu
aCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjcwMUI1MERBREU5NDkwMEU1NDhENyAvKiBFeGNlcHRp
b25IZWxwZXJzLmggaW4gSGVhZGVycyAqLywKKwkJCQlBN0MzMURBOTBEQkVCQTQzMDBGREY4RUIg
LyogU2VnbWVudGVkVmVjdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9y
RGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsKIAkJfTsKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuY3BwIGIvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVy
YXRvci5jcHAKaW5kZXggNjg0NWNhZC4uOWZkYmNkNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvVk0vQ29kZUdlbmVyYXRvci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVy
YXRvci5jcHAKQEAgLTE0Nyw4ICsxNDcsNyBAQCBib29sIENvZGVHZW5lcmF0b3I6OmFkZFZhcihj
b25zdCBJZGVudGlmaWVyJiBpZGVudCwgUmVnaXN0ZXJJRComIHIwKQogICAgIGVsc2UgewogICAg
ICAgICAtLW1fbmV4dFZhcjsKICAgICAgICAgKyttX2NvZGVCbG9jay0+bnVtVmFyczsKLSAgICAg
ICAgCi0gICAgICAgIEFTU0VSVChtX2xvY2Fscy5zaXplKCkgPCBtX2xvY2Fscy5jYXBhY2l0eSgp
KTsgLy8gRklYTUU6IEhhbmRsZSBncm93aW5nIHRoZSBsb2NhbHMgdmVjdG9yIGR5bmFtaWNhbGx5
LgorCiAgICAgICAgIG1fbG9jYWxzLmFwcGVuZChpbmRleCk7CiAgICAgfQogCkBAIC0yMzEsNyAr
MjMwLDYgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcihGdW5jdGlvbkJvZHlOb2RlKiBm
dW5jdGlvbkJvZHksIGNvbnN0IFNjb3BlQ2hhaW4mIHMKICAgICB9CiAKICAgICBtX25leHRQYXJh
bWV0ZXIgPSBtX25leHRWYXIgLSBwYXJhbWV0ZXJzLnNpemUoKTsKLSAgICBBU1NFUlQobG9jYWxz
SW5kZXgobV9uZXh0UGFyYW1ldGVyKSArIDEgPCBzdGF0aWNfY2FzdDxpbnQ+KG1fbG9jYWxzLmNh
cGFjaXR5KCkpKTsgLy8gRklYTUU6IEhhbmRsZSBncm93aW5nIHRoZSBsb2NhbHMgdmVjdG9yIGR5
bmFtaWNhbGx5LgogICAgIG1fbG9jYWxzLnJlc2l6ZShsb2NhbHNJbmRleChtX25leHRQYXJhbWV0
ZXIpICsgMSk7CiAKICAgICBhZGRQYXJhbWV0ZXIobV9wcm9wZXJ0eU5hbWVzLT50aGlzSWRlbnRp
Zmllcik7CkBAIC0zMTMsNyArMzExLDYgQEAgUmVnaXN0ZXJJRCogQ29kZUdlbmVyYXRvcjo6bmV3
VGVtcG9yYXJ5KCkKICAgICAgICAgbV90ZW1wb3Jhcmllcy5yZW1vdmVMYXN0KCk7CiAKICAgICAv
LyBBbGxvY2F0ZSBuZXcgcmVnaXN0ZXIgSUQuCi0gICAgQVNTRVJUKG1fdGVtcG9yYXJpZXMuc2l6
ZSgpIDwgbV90ZW1wb3Jhcmllcy5jYXBhY2l0eSgpKTsgLy8gRklYTUU6IEhhbmRsZSBncm93aW5n
IHRoZSB0ZW1wb3JhcmllcyB2ZWN0b3IgZHluYW1pY2FsbHkuCiAgICAgbV90ZW1wb3Jhcmllcy5h
cHBlbmQobV90ZW1wb3Jhcmllcy5zaXplKCkpOwogICAgIG1fY29kZUJsb2NrLT5udW1UZW1wb3Jh
cmllcyA9IG1heDxpbnQ+KG1fY29kZUJsb2NrLT5udW1UZW1wb3JhcmllcywgbV90ZW1wb3Jhcmll
cy5zaXplKCkpOwogICAgIHJldHVybiAmbV90ZW1wb3Jhcmllcy5sYXN0KCk7CkBAIC0zMjYsNyAr
MzIzLDYgQEAgUGFzc1JlZlB0cjxMYWJlbElEPiBDb2RlR2VuZXJhdG9yOjpuZXdMYWJlbCgpCiAg
ICAgICAgIG1fbGFiZWxzLnJlbW92ZUxhc3QoKTsKIAogICAgIC8vIEFsbG9jYXRlIG5ldyBsYWJl
bCBJRC4KLSAgICBBU1NFUlQobV9sYWJlbHMuc2l6ZSgpIDwgbV9sYWJlbHMuY2FwYWNpdHkoKSk7
IC8vIEZJWE1FOiBIYW5kbGUgZ3Jvd2luZyB0aGUgbGFiZWwgdmVjdG9yIGR5bmFtaWNhbGx5Lgog
ICAgIG1fbGFiZWxzLmFwcGVuZChtX2NvZGVCbG9jayk7CiAgICAgcmV0dXJuICZtX2xhYmVscy5s
YXN0KCk7CiB9CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgg
Yi9KYXZhU2NyaXB0Q29yZS9WTS9Db2RlR2VuZXJhdG9yLmgKaW5kZXggZWJiODg0ZC4uNDNiYTcx
MyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvVk0vQ29kZUdlbmVyYXRvci5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL1ZNL0NvZGVHZW5lcmF0b3IuaApAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1
ZGUgIkxhYmVsSUQuaCIKICNpbmNsdWRlICJSZWdpc3RlcklELmgiCiAjaW5jbHVkZSAiU3ltYm9s
VGFibGUuaCIKKyNpbmNsdWRlICJTZWdtZW50ZWRWZWN0b3IuaCIKICNpbmNsdWRlICJub2Rlcy5o
IgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgpA
QCAtMjkzLDkgKzI5NCw5IEBAIG5hbWVzcGFjZSBLSlMgewogICAgICAgICAKICAgICAgICAgSGFz
aFNldDxSZWZQdHI8VVN0cmluZzo6UmVwPiwgSWRlbnRpZmllclJlcEhhc2gsIElkZW50aWZpZXJS
ZXBIYXNoVHJhaXRzPiBtX2Z1bmN0aW9uczsKIAotICAgICAgICBWZWN0b3I8UmVnaXN0ZXJJRCwg
NTEyPiBtX2xvY2FsczsKLSAgICAgICAgVmVjdG9yPFJlZ2lzdGVySUQsIDUxMj4gbV90ZW1wb3Jh
cmllczsKLSAgICAgICAgVmVjdG9yPExhYmVsSUQsIDUxMj4gbV9sYWJlbHM7CisgICAgICAgIFNl
Z21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCA1MTI+IG1fbG9jYWxzOworICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgNTEyPiBtX3RlbXBvcmFyaWVzOworICAgICAgICBTZWdtZW50
ZWRWZWN0b3I8TGFiZWxJRCwgNTEyPiBtX2xhYmVsczsKICAgICAgICAgaW50IG1fZmluYWxseURl
cHRoOwogICAgICAgICBpbnQgbV9keW5hbWljU2NvcGVEZXB0aDsKICAgICAgICAgQ29kZVR5cGUg
bV9jb2RlVHlwZTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL1ZNL1NlZ21lbnRlZFZlY3Rv
ci5oIGIvSmF2YVNjcmlwdENvcmUvVk0vU2VnbWVudGVkVmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uODg1Y2M5MgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3Jp
cHRDb3JlL1ZNL1NlZ21lbnRlZFZlY3Rvci5oCkBAIC0wLDAgKzEsMTY0IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIENvbXB1dGVyLCBJbmMu
ICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkg
YmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZy
b20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIFNl
Z21lbnRlZFZlY3Rvcl9oCisjZGVmaW5lIFNlZ21lbnRlZFZlY3Rvcl9oCisKKyNpbmNsdWRlIDx3
dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBLSlMgeworICAgIAorICAgIHRlbXBsYXRlIDx0eXBl
bmFtZSBULCBzaXplX3QgU2VnbWVudFNpemU+IGNsYXNzIFNlZ21lbnRlZFZlY3RvciB7CisgICAg
cHVibGljOgorICAgICAgICBTZWdtZW50ZWRWZWN0b3IoKSAKKyAgICAgICAgICAgIDogbV9zaXpl
KDApCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVycy5hcHBlbmQoJm1faW5saW5lQnVm
ZmVyKTsKKyAgICAgICAgfQorCisgICAgICAgIH5TZWdtZW50ZWRWZWN0b3IoKQorICAgICAgICB7
CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1fYnVmZmVycy5zaXplKCk7IGkr
KykKKyAgICAgICAgICAgICAgICBkZWxldGUgbV9idWZmZXJzW2ldOworICAgICAgICB9CisKKyAg
ICAgICAgVCYgbGFzdCgpIAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9zaXplKTsK
KyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlcnMubGFzdCgpLT5sYXN0KCk7CisgICAgICAgIH0K
KworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSYgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghKG1fc2l6ZSAlIFNlZ21lbnRTaXplKSAm
JiBtX3NpemUgPj0gU2VnbWVudFNpemUpCisgICAgICAgICAgICAgICAgbV9idWZmZXJzLmFwcGVu
ZChuZXcgU2VnbWVudCk7CisgICAgICAgICAgICBtX2J1ZmZlcnMubGFzdCgpLT51bmNoZWNrZWRB
cHBlbmQodmFsdWUpOworICAgICAgICAgICAgbV9zaXplKys7CisgICAgICAgIH0KKyAgICAgICAg
CisgICAgICAgIHZvaWQgcmVtb3ZlTGFzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VS
VChtX3NpemUpOworICAgICAgICAgICAgbV9zaXplLS07CisgICAgICAgICAgICBtX2J1ZmZlcnMu
bGFzdCgpLT5yZW1vdmVMYXN0KCk7CisgICAgICAgICAgICBpZiAoIShtX3NpemUgJSBTZWdtZW50
U2l6ZSkgJiYgbV9zaXplID49IFNlZ21lbnRTaXplKSB7CisgICAgICAgICAgICAgICAgZGVsZXRl
IG1fYnVmZmVycy5sYXN0KCk7CisgICAgICAgICAgICAgICAgbV9idWZmZXJzLnJlbW92ZUxhc3Qo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBzaXplKCkgY29u
c3QgCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX3NpemU7IAorICAgICAgICB9CisK
KyAgICAgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIAorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoaW5kZXggPCBtX3NpemUpOworICAgICAgICAgICAgaWYgKGluZGV4IDwgU2Vn
bWVudFNpemUpCisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5saW5lQnVmZmVyW2luZGV4XTsK
KyAgICAgICAgICAgIHJldHVybiBtX2J1ZmZlcnNbaW5kZXggLyBTZWdtZW50U2l6ZV0tPmF0KGlu
ZGV4ICUgU2VnbWVudFNpemUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZXNpemUoc2l6
ZV90IHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChzaXplIDwgbV9zaXplKQorICAg
ICAgICAgICAgICAgIHNocmluayhzaXplKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHNpemUgPiBt
X3NpemUpCisgICAgICAgICAgICAgICAgZ3JvdyhzaXplKTsKKyAgICAgICAgICAgIEFTU0VSVChz
aXplID09IG1fc2l6ZSk7CisgICAgICAgIH0KKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIHNo
cmluayhzaXplX3Qgc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHNpemUgPCBt
X3NpemUpOworICAgICAgICAgICAgc2l6ZV90IG51bVNlZ21lbnRzID0gc2l6ZSAvIFNlZ21lbnRT
aXplOworICAgICAgICAgICAgc2l6ZV90IGV4dHJhID0gc2l6ZSAlIFNlZ21lbnRTaXplOworICAg
ICAgICAgICAgaWYgKGV4dHJhKQorICAgICAgICAgICAgICAgIG51bVNlZ21lbnRzKys7CisgICAg
ICAgICAgICBpZiAoIW51bVNlZ21lbnRzKSB7CisgICAgICAgICAgICAgICAgZm9yIChzaXplX3Qg
aSA9IDE7IGkgPCBtX2J1ZmZlcnMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgICAgIGRl
bGV0ZSBtX2J1ZmZlcnNbaV07CisgICAgICAgICAgICAgICAgbV9idWZmZXJzLnJlc2l6ZSgxKTsK
KyAgICAgICAgICAgICAgICBtX2lubGluZUJ1ZmZlci5yZXNpemUoMCk7CisgICAgICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0g
bnVtU2VnbWVudHM7IGkgPCBtX2J1ZmZlcnMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAg
ZGVsZXRlIG1fYnVmZmVyc1tpXTsKKworICAgICAgICAgICAgbV9idWZmZXJzLnJlc2l6ZShudW1T
ZWdtZW50cyk7CisgICAgICAgICAgICBpZiAoZXh0cmEpCisgICAgICAgICAgICAgICAgbV9idWZm
ZXJzLmxhc3QoKS0+cmVzaXplKGV4dHJhKTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGdyb3coc2l6ZV90IHNpemUpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIEFTU0VSVChzaXplID4gbV9zaXplKTsKKyAgICAgICAgICAgIGlmIChzaXplIDw9
IFNlZ21lbnRTaXplKSB7CisgICAgICAgICAgICAgICAgbV9pbmxpbmVCdWZmZXIucmVzaXplKHNp
emUpOworICAgICAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBzaXplX3QgbnVtU2VnbWVudHMgPSBz
aXplIC8gU2VnbWVudFNpemU7CisgICAgICAgICAgICBzaXplX3QgZXh0cmEgPSBzaXplICUgU2Vn
bWVudFNpemU7CisgICAgICAgICAgICBpZiAoZXh0cmEpCisgICAgICAgICAgICAgICAgbnVtU2Vn
bWVudHMrKzsKKyAgICAgICAgICAgIHNpemVfdCBvbGRTaXplID0gbV9idWZmZXJzLnNpemUoKTsK
KyAgICAgICAgICAgIAorICAgICAgICAgICAgaWYgKG51bVNlZ21lbnRzID09IG9sZFNpemUpIHsK
KyAgICAgICAgICAgICAgICBtX2J1ZmZlcnMubGFzdCgpLT5yZXNpemUoZXh0cmEpOworICAgICAg
ICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICBtX2J1ZmZlcnMucmVzaXplKG51bVNlZ21lbnRzKTsKKyAg
ICAKKyAgICAgICAgICAgIEFTU0VSVChvbGRTaXplIDwgbV9idWZmZXJzLnNpemUoKSk7CisgICAg
ICAgICAgICBmb3IgKHNpemVfdCBpID0gb2xkU2l6ZTsgaSA8IChudW1TZWdtZW50cyAtIDEpOyBp
KyspIHsKKyAgICAgICAgICAgICAgICBTZWdtZW50KiBzZWdtZW50ID0gbmV3IFNlZ21lbnQ7Cisg
ICAgICAgICAgICAgICAgc2VnbWVudC0+cmVzaXplKFNlZ21lbnRTaXplKTsKKyAgICAgICAgICAg
ICAgICBtX2J1ZmZlcnNbaV0gPSBzZWdtZW50OworICAgICAgICAgICAgfQorCisgICAgICAgICAg
ICBTZWdtZW50KiBzZWdtZW50ID0gbmV3IFNlZ21lbnQ7CisgICAgICAgICAgICBzZWdtZW50LT5y
ZXNpemUoZXh0cmEgPyBleHRyYSA6IFNlZ21lbnRTaXplKTsKKyAgICAgICAgICAgIG1fYnVmZmVy
c1tudW1TZWdtZW50cyAtIDFdID0gc2VnbWVudDsKKyAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7
CisgICAgICAgIH0KKworICAgICAgICB0eXBlZGVmIFZlY3RvcjxULCBTZWdtZW50U2l6ZT4gU2Vn
bWVudDsKKyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAgICAgICAgU2VnbWVudCBtX2lubGluZUJ1
ZmZlcjsKKyAgICAgICAgVmVjdG9yPFNlZ21lbnQqLCAzMj4gbV9idWZmZXJzOworICAgIH07Cit9
CisKKyNlbmRpZiAvLyBTZWdtZW50ZWRWZWN0b3JfaAo=
</data>
<flag name="review"
          id="9082"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>