Closed Bug 653133 Opened 13 years ago Closed 13 years ago

Fennec crashes when loading a page with huge background-attachment:fixed background

Categories

(Core :: Layout, defect)

defect
Not set
critical

Tracking

()

RESOLVED FIXED
mozilla5
Tracking Status
firefox5 + fixed
firefox6 --- fixed
fennec 5+ ---

People

(Reporter: ehsan.akhgari, Assigned: tatiana)

References

()

Details

(4 keywords)

Crash Data

Attachments

(9 files, 10 obsolete files)

3.01 KB, text/html
Details
14.68 KB, image/png
Details
16.21 KB, image/png
Details
28.12 KB, image/png
Details
3.24 KB, text/html
Details
14.16 KB, patch
tatiana
: review+
Details | Diff | Splinter Review
2.00 KB, patch
roc
: review+
Details | Diff | Splinter Review
1.13 KB, patch
cjones
: review+
Details | Diff | Splinter Review
4.15 KB, patch
roc
: review+
Details | Diff | Splinter Review
This might be an OOM situation, but filing anyways.

bp-039f60c7-e76b-4626-a4e1-26b5a2110427
3057d869-30de-daea-43474e88-26ae20fc
bp-c7083ee1-2955-43c9-8918-72a052110427
230d3d99-3b40-7e3f-7290d77d-59cac243
bp-e30652fd-f67e-4d0a-b850-46d412110427
bp-d5dfe8ce-e5a0-4f5f-8b34-9b4382110427
27888589-b481-5fdf-72d4ac8c-2316a9ad
270ce863-f4be-18c8-5f33a08f-4eb79c88
Seems odd that we are going oom in a 27kb html page.
OS: Mac OS X → Android
Hardware: x86 → ARM
Those stacks look pretty busted, unless you really believe that the image surface destructor calling moz_free will land us in mozilla::ipc::RPCChannel::Send...
I'm not seeing the crash on 4.0, working on a regression range.
Good 2011-04-08-04-mozilla-central-android-r7
Bad 2011-04-10-05-mozilla-central-android-r7
http://hg.mozilla.org/mozilla-central/pushloghtml?fromchange=27d6a4a5e20f&tochange=fe3f7889918b
Working on hg bisecting this.
http://hg.mozilla.org/mozilla-central/rev/288be41b2473

The first bad revision is:
changeset:   67670:288be41b2473
user:        Tatiana Meshkova <tanya.meshkova@gmail.com>
date:        Fri Apr 08 09:35:16 2011 -0700
summary:     Bug 607417 - Part 3: Visibility tricks for fixed items r=roc
Blocks: 607417
there is huge background-attachment:fixed background
CanvasBackground 0xb33bed48(Canvas(html)(-1)) (0,-383700,48000,2127180)(0,0,0,0) opaque

and it's item bounds are not restricted by visible region.
Component: General → Layout
OS: Android → All
Product: Fennec → Core
QA Contact: general → layout
Hardware: ARM → All
Summary: Fennec crashes when loading a page from the CSS 2.1 spec → Fennec crashes when loading a page with huge background-attachment:fixed background
Attached patch patch (obsolete) — Splinter Review
Assignee: nobody → tanya.meshkova
Attachment #529979 - Flags: review?(roc)
Comment on attachment 529979 [details] [diff] [review]
patch

Review of attachment 529979 [details] [diff] [review]:

::: layout/base/nsDisplayList.cpp
@@ +477,5 @@
     nsRect bounds = item->GetBounds(aBuilder);
 
     nsRegion itemVisible;
+    if (ForceVisiblityForFixedItem(aBuilder, item)) {
+      itemVisible.And(nsRect(nsPoint(), aBuilder->GetDisplayPort()->Size()), bounds);

This seems like a good idea but this code isn't enough; due to CSS transforms, the display port might not be in the same coordinate system as the item's visible region.
This effects Firefox Mobile 5 Aurora builds.
This crashes Fennec even on pages with small background-attachment:fixed background images, if you zoom in far enough.  See steps to reproduce in bug 654485.
tracking-fennec: --- → ?
Can the test page in bug 654485 be converted into a crashtest?  (Thanks Matt!)
It sounds like we should back out bug 607417 until this is fixed.
let's backout just Part3, fixed elements will disappear on long scroll,
but the rest is almost fine
(In reply to comment #9)
> ::: layout/base/nsDisplayList.cpp
> @@ +477,5 @@
>      nsRect bounds = item->GetBounds(aBuilder);
> 
>      nsRegion itemVisible;
> +    if (ForceVisiblityForFixedItem(aBuilder, item)) {
> +      itemVisible.And(nsRect(nsPoint(), aBuilder->GetDisplayPort()->Size()),
> bounds);
> 
> This seems like a good idea but this code isn't enough; due to CSS transforms,
> the display port might not be in the same coordinate system as the item's
> visible region.

Hmm, however, fixed-pos content in a CSS transform uses the transformed element as the fixed-pos container, in which case ForceVisiblityForFixedItem should return false.

Can you check that's what happens? If so, we can take this patch.
(In reply to comment #16)
> That would break Web pages.

this would not break pages, it will remove fixed pos items from display list when viewport scroll and scrollport positions are not equals or too far from each other.

without all patches, we have definitely broken rendering because fixed pos elements are moving together with viewport and disappear when it is moved too far.  with fixed pos patches (and without visibility display list tricks), we have layers positioned correctly, and disappear when it is moved too far, (scrollport not intersects with remote-viewport-layer)
Attached file transform_test
Attached image screenshot_expected.png
Attached image screenshot_actual.png
(In reply to comment #17)

we can't apply it as is. With this patch on transform_test we will get screenshot_actual.png instead of screenshot_expected.png
Attached patch patch v2 WIP (obsolete) — Splinter Review
Attachment #529979 - Attachment is obsolete: true
Attachment #529979 - Flags: review?(roc)
How severe is this bug? should we worry about resolving this before we ship our beta on May 17?
(In reply to comment #18)
> without all patches, we have definitely broken rendering because fixed pos
> elements are moving together with viewport and disappear when it is moved too
> far.  with fixed pos patches (and without visibility display list tricks), we
> have layers positioned correctly, and disappear when it is moved too far,
> (scrollport not intersects with remote-viewport-layer)

This is from part 3:
+    if (ForceVisiblityForFixedItem(aBuilder, item)) {
+      item->mVisibleRect = bounds;
+    }

Seems to me that without this, fixed elements could be partially cut off before they disappear. That would be bad.
(In reply to comment #24)
> How severe is this bug? should we worry about resolving this before we ship our
> beta on May 17?

It's pretty bad IMHO. I think we should back out all of bug 607417 from Firefox 5 but leave it on central.
Possibly we should back it out of central as well and reland once we've sorted out this bug.
OK, to fix patch 2, you need to expose GetCTMAt from nsLayoutUtils.cpp and let it take an additional frame parameter specifying an ancestor frame to stop at. We could call that GetTransformToAncestor. Then you can call GetTransformToAncestor, invert the matrix and use that to transform the display bounds down to your fixed frame to take the intersection with.
Attached patch patch v3 WIP (obsolete) — Splinter Review
comparing to v2 background-attachment:fixed visible bounds are correct now
Attachment #530375 - Attachment is obsolete: true
Attachment #530645 - Flags: feedback?(roc)
GetCTMAt code is not shared yet
Attached patch patch v4 (obsolete) — Splinter Review
introduced GetTransformToAncestor
Attachment #530645 - Attachment is obsolete: true
Attachment #530645 - Flags: feedback?(roc)
Attachment #530996 - Flags: review?(roc)
when would IsFixedItem return true, but *aShouldFixToViewport return false?
(In reply to comment #32)
> when would IsFixedItem return true, but *aShouldFixToViewport return false?

when item's underlying frame is toplevel position:fixed
I see, aShouldFixToViewport really means "is background-attachment:fixed" at the moment...

Does GetDisplayPortBounds need to check aShouldFixToViewport? It seems to me that if you remove the "if (!aShouldFixToViewport)" code, things should work fine.
Attached image scroll_eats_bg.png
Attached file bg_transform_test
without aShouldFixToViewport check transform for background-attachment:fixed items includes scroll position translate, i.e. with attached bg_transform_test we'll have scroll_eats_bg.png
OK.

Can you use a better name for aShouldFixToViewport?
Attached patch patch v4.1 renaming (obsolete) — Splinter Review
using aIsBackgroundFixed name in IsFixedItem and aIgnoreTransform in GetDisplayPortBounds
Attachment #530996 - Attachment is obsolete: true
Attachment #530996 - Flags: review?(roc)
Attachment #531275 - Flags: review?(roc)
Comment on attachment 531275 [details] [diff] [review]
patch v4.1 renaming

Review of attachment 531275 [details] [diff] [review]:
-----------------------------------------------------------------

Good work!

::: layout/base/nsDisplayList.cpp
@@ +498,5 @@
>  
>      nsRect bounds = item->GetBounds(aBuilder);
>  
>      nsRegion itemVisible;
> +    PRBool shouldFixToViewport;

Rename to "isFixedBackground".

::: layout/base/nsLayoutUtils.cpp
@@ +1109,2 @@
>      ctm *= aFrame->GetTransformMatrix(&aFrame);
>    return ctm;

Add an assertion here that aFrame == aStopAtAncestor, in case we somehow miss the ancestor.
Attachment #531275 - Flags: review?(roc) → review+
Need a crashtest here. A reftest for bg_transform_test would also be a good idea.
moving r+ from v4.1
Attachment #531275 - Attachment is obsolete: true
Attachment #531568 - Flags: review+
Can we land crash_fix before tests?
Shouldn't this bug be marked fixed?
Flags: in-testsuite?
Comment on attachment 531568 [details] [diff] [review]
patch v4.2 fixed nits - checked in

>diff --git a/layout/base/nsDisplayList.h b/layout/base/nsDisplayList.h
>--- a/layout/base/nsDisplayList.h
>+++ b/layout/base/nsDisplayList.h
>@@ -505,16 +508,17 @@ private:
>   PRPackedBool                   mAccurateVisibleRegions;
>   // True when we're building a display list that's directly or indirectly
>   // under an nsDisplayTransform
>   PRPackedBool                   mInTransform;
>   PRPackedBool                   mSyncDecodeImages;
>   PRPackedBool                   mIsPaintingToWindow;
>   PRPackedBool                   mSnappingEnabled;
>   PRPackedBool                   mHasDisplayPort;
>+  nsRect                         mDisplayPort;
>   PRPackedBool                   mHasFixedItems;
> };

Doesn't putting an nsRect between these PRPackedBools defeat the point of using PRPackedBools?
Yes, I think you are right.
Yeah, oops. Someone post a patch to fix that :-)
Attached patch Recover PRPackedBools order (obsolete) — Splinter Review
Attachment #532177 - Flags: review?(roc)
Attached patch crashtest (obsolete) — Splinter Review
Attachment #532218 - Flags: review?(jones.chris.g)
tracking-fennec: ? → 5+
Comment on attachment 531275 [details] [diff] [review]
patch v4.1 renaming

Requesting mozilla-approval-aurora.  Even with the patch to disable fixed layers (from bug 656167), I still see this crash on Aurora (Firefox 5).
Attachment #531275 - Flags: approval-mozilla-aurora?
Attachment #531275 - Flags: approval-mozilla-aurora?
Attachment #531568 - Flags: approval-mozilla-aurora?
Attachment #531568 - Flags: approval-mozilla-aurora? → approval-mozilla-aurora+
Comment on attachment 531568 [details] [diff] [review]
patch v4.2 fixed nits - checked in

Pushed to Aurora (accidentally pushed v4.1 first, then v4.2 as a followup):
http://hg.mozilla.org/mozilla-aurora/rev/1bcce86b9139
http://hg.mozilla.org/mozilla-aurora/rev/f428a36c7d78

Should we request aurora/beta approval for the crashtest and PRPackedBool-order patches once they are reviewend and landed on mozilla-central?
Comment on attachment 532177 [details] [diff] [review]
Recover PRPackedBools order

Review of attachment 532177 [details] [diff] [review]:
-----------------------------------------------------------------

::: layout/base/nsDisplayList.h
@@ +516,2 @@
>    PRPackedBool                   mHasDisplayPort;
>    nsRect                         mDisplayPort;

Move mDisplayPort up to be just after mFinalTransparentRegion. We try to order fields in decreasing order of alignment requirements.
Comment on attachment 532218 [details] [diff] [review]
crashtest

>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />
>+<br />

Um ... can you use <div style="height: 10000px"> or something instead of this?

>+load 653133-huge-background-attachment-fixed.html

Nit: naming convention is "653133-1.html".

Looks ok other than those two things.
Attachment #532218 - Flags: review?(jones.chris.g)
Attachment #532177 - Attachment is obsolete: true
Attachment #532177 - Flags: review?(roc)
Attachment #532592 - Flags: review?(roc)
Attachment #532218 - Attachment is obsolete: true
Attachment #532604 - Flags: review?(jones.chris.g)
Whiteboard: patch v4.2 landed on Aurora
Whiteboard: patch v4.2 landed on Aurora → patch v4.2 landed on Aurora, comment 52 still open issue for Beta
Attached patch reftest (obsolete) — Splinter Review
reftest for scroll_eats_bg.png case
Attachment #534725 - Flags: review?(roc)
Attachment #534725 - Flags: review?(jones.chris.g)
Comment on attachment 532592 [details] [diff] [review]
Recover PRPackedBools order (v2) - checked in

Review of attachment 532592 [details] [diff] [review]:
-----------------------------------------------------------------
Attachment #532592 - Flags: review?(roc) → review+
Comment on attachment 534725 [details] [diff] [review]
reftest

Review of attachment 534725 [details] [diff] [review]:
-----------------------------------------------------------------

Can't the test just call window.scrollTo itself instead of having the reftest harness do it?
Attached patch reftest (v2) (obsolete) — Splinter Review
Attachment #534725 - Attachment is obsolete: true
Attachment #534725 - Flags: review?(roc)
Attachment #534725 - Flags: review?(jones.chris.g)
Attachment #535021 - Flags: review?(roc)
Comment on attachment 535021 [details] [diff] [review]
reftest (v2)

Review of attachment 535021 [details] [diff] [review]:
-----------------------------------------------------------------
Attachment #535021 - Flags: review?(roc) → review+
Attachment #532604 - Flags: review?(jones.chris.g) → review+
Please request beta approval for the followup patches, we should take them there.
Comment on attachment 532604 [details] [diff] [review]
crashtest (v2) - checked in

Requesting approval-mozilla-beta for a patch that only adds a new test.
Attachment #532604 - Flags: approval-mozilla-beta?
Comment on attachment 535021 [details] [diff] [review]
reftest (v2)

Requesting approval-mozilla-beta for a patch that only adds a new test.
Attachment #535021 - Flags: approval-mozilla-beta?
Comment on attachment 532592 [details] [diff] [review]
Recover PRPackedBools order (v2) - checked in

Requesting approval-mozilla-aurora and approval-mozilla-beta for a trivial followup to a crash-fix patch that landed for Firefox 5.  This is a two-line change that just re-orders struct fields for better packing.

It looks like these followup patches also still need to land on mozilla-central...
Attachment #532592 - Flags: approval-mozilla-beta?
Attachment #532592 - Flags: approval-mozilla-aurora?
Attachment #532604 - Flags: approval-mozilla-aurora?
Attachment #535021 - Flags: approval-mozilla-aurora?
Pushed all three followup patches to Try:
http://tbpl.mozilla.org/?tree=Try&rev=afeba18f322e
Comment on attachment 535021 [details] [diff] [review]
reftest (v2)

This reftest is failing on Try:
http://tinderbox.mozilla.org/showlog.cgi?log=Try/1307407700.1307410099.22397.gz

The test file shows a scrollbar, while the reference file does not.
Attachment #535021 - Flags: approval-mozilla-beta?
Attachment #535021 - Flags: approval-mozilla-aurora?
Attached patch reftest (v3) (obsolete) — Splinter Review
(In reply to comment #67)
> Comment on attachment 535021 [details] [diff] [review] [review]
> reftest (v2)
> 
> This reftest is failing on Try:
> http://tinderbox.mozilla.org/showlog.cgi?log=Try/1307407700.1307410099.22397.
> gz
> 
> The test file shows a scrollbar, while the reference file does not.

We need this test for remote only. Suggesting to skip-if(!browserIsRemote)
Attachment #535021 - Attachment is obsolete: true
Attachment #537772 - Flags: review?(roc)
Comment on attachment 532592 [details] [diff] [review]
Recover PRPackedBools order (v2) - checked in

http://hg.mozilla.org/mozilla-central/rev/e37998002eb5
Attachment #532592 - Attachment description: Recover PRPackedBools order (v2) → Recover PRPackedBools order (v2) - checked in
Comment on attachment 532604 [details] [diff] [review]
crashtest (v2) - checked in

http://hg.mozilla.org/mozilla-central/rev/04ba4b847cba
Attachment #532604 - Attachment description: crashtest (v2) → crashtest (v2) - checked in
Attachment #531568 - Attachment description: patch v4.2 fixed nits → patch v4.2 fixed nits - checked in
Don't make it skip-if, just make the root element overflow:hidden so the scrollbar never shows up.
Attached patch reftest (v4)Splinter Review
Attachment #537772 - Attachment is obsolete: true
Attachment #537772 - Flags: review?(roc)
Attachment #537977 - Flags: review?(roc)
Comment on attachment 537977 [details] [diff] [review]
reftest (v4)

Review of attachment 537977 [details] [diff] [review]:
-----------------------------------------------------------------
Attachment #537977 - Flags: review?(roc) → review+
Attachment #532592 - Flags: approval-mozilla-beta?
Attachment #532592 - Flags: approval-mozilla-beta+
Attachment #532592 - Flags: approval-mozilla-aurora?
Attachment #532592 - Flags: approval-mozilla-aurora+
Attachment #532604 - Flags: approval-mozilla-beta?
Attachment #532604 - Flags: approval-mozilla-beta+
Attachment #532604 - Flags: approval-mozilla-aurora?
Attachment #532604 - Flags: approval-mozilla-aurora+
Pushed PRPackedBool reordering and crashtest patchest to Aurora and Beta for Firefox 5 and 6:

http://hg.mozilla.org/releases/mozilla-aurora/rev/2df9e796bfe3
http://hg.mozilla.org/releases/mozilla-aurora/rev/04e8c88bed76
http://hg.mozilla.org/releases/mozilla-beta/rev/3524ac4292a7
http://hg.mozilla.org/releases/mozilla-beta/rev/0320d470abea

Tatiana, can you push the new reftest patch to Try or mozilla-inbound or set checkin-needed or whatever?
Flags: in-testsuite? → in-testsuite+
Target Milestone: --- → mozilla5
Whiteboard: patch v4.2 landed on Aurora, comment 52 still open issue for Beta → patch v4.2, PRPackedBool followup, and crashtest all landed on trunk+Aurora+Beta. reftest has not landed anywhere.
Pushed reftest to mozilla-central (Firefox 7):
http://hg.mozilla.org/mozilla-central/rev/a23d0f7e3e13
Status: NEW → RESOLVED
Closed: 13 years ago
Keywords: checkin-needed
Resolution: --- → FIXED
Whiteboard: patch v4.2, PRPackedBool followup, and crashtest all landed on trunk+Aurora+Beta. reftest has not landed anywhere. → patch v4.2, PRPackedBool followup, and crashtest all landed on trunk+Aurora+Beta. reftest has landed on mozilla-central only.
Comment on attachment 537977 [details] [diff] [review]
reftest (v4)

Requesting approval‑mozilla‑aurora and approval-mozilla-beta for a patch that only adds a new test.
Attachment #537977 - Flags: approval-mozilla-beta?
Attachment #537977 - Flags: approval-mozilla-aurora?
Comment on attachment 537977 [details] [diff] [review]
reftest (v4)

too late for beta but please land in aurora.
Attachment #537977 - Flags: approval-mozilla-beta?
Attachment #537977 - Flags: approval-mozilla-beta-
Attachment #537977 - Flags: approval-mozilla-aurora?
Attachment #537977 - Flags: approval-mozilla-aurora-
Comment on attachment 537977 [details] [diff] [review]
reftest (v4)

(In reply to comment #78)
> too late for beta but please land in aurora.

Then did you mean to set aurora+ instead of aurora-?
Attachment #537977 - Flags: approval-mozilla-aurora- → approval-mozilla-aurora?
Comment on attachment 537977 [details] [diff] [review]
reftest (v4)

yeah
Attachment #537977 - Flags: approval-mozilla-aurora? → approval-mozilla-aurora+
checkin-needed for reftest on mozilla-aurora
Keywords: checkin-needed
(In reply to Tatiana Meshkova (:tatiana) from comment #77)
> Comment on attachment 537977 [details] [diff] [review] [diff] [details] [review]
> reftest (v4)
> 
> Requesting approval‑mozilla‑aurora and approval-mozilla-beta for a patch
> that only adds a new test.

(In reply to Asa Dotzler [:asa] from comment #78)
> Comment on attachment 537977 [details] [diff] [review] [diff] [details] [review]
> reftest (v4)
> 
> too late for beta but please land in aurora.

Unfortunately it missed that aurora cycle, and is now too late for beta again (Gecko 6)

Luckily its in Gecko 7, based on that m-c push during the Gecko 7 lifetime.

https://hg.mozilla.org/releases/mozilla-aurora/rev/a23d0f7e3e13 was the rev it landed on.
Keywords: checkin-needed
Whiteboard: patch v4.2, PRPackedBool followup, and crashtest all landed on trunk+Aurora+Beta. reftest has landed on mozilla-central only.
Severity: normal → critical
Crash Signature: [@ libc.so@0x11f74 ]
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: