| author | Kyle Huey <khuey@kylehuey.com> |
| Sat, 09 Jul 2011 20:19:36 -0700 | |
| changeset 72576 | 518a79e90444cce2919b4e13a559b45aef080360 |
| parent 72563 | d3537bbc4e6ae2b3fffe396a4779979179df0438 (current diff) |
| parent 72575 | acc1dab8593ca54e674370e75a4b4cbcad475bfa (diff) |
| child 72577 | 18c8c2ea4caf07635792b70168fad1d8a6694a38 |
| child 72591 | cc0bc9946386b9bdf41f755fe877218db5ea136a |
| push id | 20738 |
| push user | khuey@mozilla.com |
| push date | Sun, 10 Jul 2011 03:19:43 +0000 |
| treeherder | mozilla-central@518a79e90444 [default view] [failures only] |
| perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
| milestone | 8.0a1 |
| first release with | nightly linux32
518a79e90444
/
8.0a1
/
20110710030756
/
files
nightly linux64
518a79e90444
/
8.0a1
/
20110710030756
/
files
nightly mac
518a79e90444
/
8.0a1
/
20110710030756
/
files
nightly win32
518a79e90444
/
8.0a1
/
20110710030756
/
files
nightly win64
|
| last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
| releases | nightly linux32
8.0a1
/
20110710030756
/
pushlog to previous
nightly linux64
8.0a1
/
20110710030756
/
pushlog to previous
nightly mac
8.0a1
/
20110710030756
/
pushlog to previous
nightly win32
8.0a1
/
20110710030756
/
pushlog to previous
|
--- a/content/canvas/public/nsICanvasRenderingContextInternal.h +++ b/content/canvas/public/nsICanvasRenderingContextInternal.h @@ -117,16 +117,21 @@ public: NS_IMETHOD Reset() = 0; // Return the CanvasLayer for this context, creating // one for the given layer manager if not available. virtual already_AddRefed<CanvasLayer> GetCanvasLayer(nsDisplayListBuilder* aBuilder, CanvasLayer *aOldLayer, LayerManager *aManager) = 0; + // Return true if the canvas should be forced to be "inactive" to ensure + // it can be drawn to the screen even if it's too large to be blitted by + // an accelerated CanvasLayer. + virtual PRBool ShouldForceInactiveLayer(LayerManager *aManager) { return PR_FALSE; } + virtual void MarkContextClean() = 0; // Redraw the dirty rectangle of this canvas. NS_IMETHOD Redraw(const gfxRect &dirty) = 0; // Passes a generic nsIPropertyBag options argument, along with the // previous one, if any. Optional. NS_IMETHOD SetContextOptions(nsIPropertyBag *aNewOptions) { return NS_OK; }
--- a/content/canvas/src/nsCanvasRenderingContext2D.cpp +++ b/content/canvas/src/nsCanvasRenderingContext2D.cpp @@ -344,20 +344,21 @@ public: const PRUnichar* aEncoderOptions, nsIInputStream **aStream); NS_IMETHOD GetThebesSurface(gfxASurface **surface); mozilla::TemporaryRef<mozilla::gfx::SourceSurface> GetSurfaceSnapshot() { return nsnull; } NS_IMETHOD SetIsOpaque(PRBool isOpaque); NS_IMETHOD Reset(); - already_AddRefed<CanvasLayer> GetCanvasLayer(nsDisplayListBuilder* aBuilder, - CanvasLayer *aOldLayer, - LayerManager *aManager); - void MarkContextClean(); + virtual already_AddRefed<CanvasLayer> GetCanvasLayer(nsDisplayListBuilder* aBuilder, + CanvasLayer *aOldLayer, + LayerManager *aManager); + virtual PRBool ShouldForceInactiveLayer(LayerManager *aManager); + virtual void MarkContextClean(); NS_IMETHOD SetIsIPC(PRBool isIPC); // this rect is in canvas device space NS_IMETHOD Redraw(const gfxRect &r); // this rect is in mThebes's current user space NS_IMETHOD RedrawUser(const gfxRect &r); // nsISupports interface + CC NS_DECL_CYCLE_COLLECTING_ISUPPORTS @@ -1066,19 +1067,17 @@ nsCanvasRenderingContext2D::SetDimension if (height == 0 || width == 0) { mZero = PR_TRUE; height = 1; width = 1; } gfxASurface::gfxImageFormat format = GetImageFormat(); - if (PR_GetEnv("MOZ_CANVAS_IMAGE_SURFACE")) { - surface = new gfxImageSurface(gfxIntSize(width, height), format); - } else { + if (!PR_GetEnv("MOZ_CANVAS_IMAGE_SURFACE")) { nsCOMPtr<nsIContent> content = do_QueryInterface(static_cast<nsIDOMHTMLCanvasElement*>(mCanvasElement)); nsIDocument* ownerDoc = nsnull; if (content) ownerDoc = content->GetOwnerDoc(); nsRefPtr<LayerManager> layerManager = nsnull; if (ownerDoc) @@ -1088,18 +1087,25 @@ nsCanvasRenderingContext2D::SetDimension if (layerManager) { surface = layerManager->CreateOptimalSurface(gfxIntSize(width, height), format); } else { surface = gfxPlatform::GetPlatform()-> CreateOffscreenSurface(gfxIntSize(width, height), gfxASurface::ContentFromFormat(format)); } } - if (surface && surface->CairoStatus() != 0) - surface = NULL; + if (!surface || surface->CairoStatus()) { + // If we couldn't create a surface of the type we want, fall back + // to an image surface. This lets us handle surface sizes that + // the underlying cairo backend might not handle. + surface = new gfxImageSurface(gfxIntSize(width, height), format); + if (!surface || surface->CairoStatus()) { + surface = nsnull; + } + } } if (surface) { if (gCanvasMemoryReporter == nsnull) { gCanvasMemoryReporter = new NS_MEMORY_REPORTER_NAME(CanvasMemory); NS_RegisterMemoryReporter(gCanvasMemoryReporter); } gCanvasMemoryUsed += width * height * 4; @@ -4012,16 +4018,22 @@ nsCanvasRenderingContext2D::GetCanvasLay canvasLayer->SetContentFlags(flags); canvasLayer->Updated(); mResetLayer = PR_FALSE; return canvasLayer.forget(); } +PRBool +nsCanvasRenderingContext2D::ShouldForceInactiveLayer(LayerManager *aManager) +{ + return !aManager->CanUseCanvasLayerForSize(gfxIntSize(mWidth, mHeight)); +} + void nsCanvasRenderingContext2D::MarkContextClean() { if (mInvalidateCount > 0) { mPredictManyRedrawCalls = mInvalidateCount > kCanvasMaxInvalidateCount; } mIsEntireFrameInvalid = PR_FALSE; mInvalidateCount = 0;
--- a/content/canvas/src/nsCanvasRenderingContext2DAzure.cpp +++ b/content/canvas/src/nsCanvasRenderingContext2DAzure.cpp @@ -189,89 +189,16 @@ public: mStops = aRT->CreateGradientStops(mRawStops.Elements(), mRawStops.Length()); return mStops; } NS_DECL_ISUPPORTS -protected: - nsCanvasGradientAzure(Type aType) : mType(aType) - {} - - nsTArray<GradientStop> mRawStops; - RefPtr<GradientStops> mStops; - Type mType; -}; - -class nsCanvasRadialGradientAzure : public nsCanvasGradientAzure -{ -public: - nsCanvasRadialGradientAzure(const Point &aBeginOrigin, Float aBeginRadius, - const Point &aEndOrigin, Float aEndRadius) - : nsCanvasGradientAzure(RADIAL) - , mCenter(aEndOrigin) - , mRadius(aEndRadius) - { - mOffsetStart = aBeginRadius / mRadius; - - mOffsetRatio = 1 - mOffsetStart; - mOrigin = ((mCenter * aBeginRadius) - (aBeginOrigin * mRadius)) / - (aBeginRadius - mRadius); - } - - - /* nsIDOMCanvasGradient */ - NS_IMETHOD AddColorStop (float offset, - const nsAString& colorstr) - { - if (!FloatValidate(offset) || offset < 0.0 || offset > 1.0) { - return NS_ERROR_DOM_INDEX_SIZE_ERR; - } - - nscolor color; - nsCSSParser parser; - nsresult rv = parser.ParseColorString(nsString(colorstr), - nsnull, 0, &color); - if (NS_FAILED(rv)) { - return NS_ERROR_DOM_SYNTAX_ERR; - } - - mStops = nsnull; - - GradientStop newStop; - - newStop.offset = offset * mOffsetRatio + mOffsetStart; - newStop.color = Color::FromABGR(color); - - mRawStops.AppendElement(newStop); - - return NS_OK; - } - - // XXX - Temporary gradient code, this will be fixed soon as per bug 666097 - Point mCenter; - Float mRadius; - Point mOrigin; - - Float mOffsetStart; - Float mOffsetRatio; -}; - -class nsCanvasLinearGradientAzure : public nsCanvasGradientAzure -{ -public: - nsCanvasLinearGradientAzure(const Point &aBegin, const Point &aEnd) - : nsCanvasGradientAzure(LINEAR) - , mBegin(aBegin) - , mEnd(aEnd) - { - } - /* nsIDOMCanvasGradient */ NS_IMETHOD AddColorStop (float offset, const nsAString& colorstr) { if (!FloatValidate(offset) || offset < 0.0 || offset > 1.0) { return NS_ERROR_DOM_INDEX_SIZE_ERR; } @@ -291,16 +218,54 @@ public: newStop.color = Color::FromABGR(color); mRawStops.AppendElement(newStop); return NS_OK; } protected: + nsCanvasGradientAzure(Type aType) : mType(aType) + {} + + nsTArray<GradientStop> mRawStops; + RefPtr<GradientStops> mStops; + Type mType; +}; + +class nsCanvasRadialGradientAzure : public nsCanvasGradientAzure +{ +public: + nsCanvasRadialGradientAzure(const Point &aBeginOrigin, Float aBeginRadius, + const Point &aEndOrigin, Float aEndRadius) + : nsCanvasGradientAzure(RADIAL) + , mCenter1(aBeginOrigin) + , mCenter2(aEndOrigin) + , mRadius1(aBeginRadius) + , mRadius2(aEndRadius) + { + } + + Point mCenter1; + Point mCenter2; + Float mRadius1; + Float mRadius2; +}; + +class nsCanvasLinearGradientAzure : public nsCanvasGradientAzure +{ +public: + nsCanvasLinearGradientAzure(const Point &aBegin, const Point &aEnd) + : nsCanvasGradientAzure(LINEAR) + , mBegin(aBegin) + , mEnd(aEnd) + { + } + +protected: friend class nsCanvasRenderingContext2DAzure; // Beginning of linear gradient. Point mBegin; // End of linear gradient. Point mEnd; }; @@ -822,18 +787,18 @@ protected: LinearGradientPattern(gradient->mBegin, gradient->mEnd, gradient->GetGradientStopsForTarget(aRT)); } else if (state.gradientStyles[aStyle] && state.gradientStyles[aStyle]->GetType() == nsCanvasGradientAzure::RADIAL) { nsCanvasRadialGradientAzure *gradient = static_cast<nsCanvasRadialGradientAzure*>(state.gradientStyles[aStyle].get()); mPattern = new (mRadialGradientPattern.addr()) - RadialGradientPattern(gradient->mCenter, gradient->mOrigin, gradient->mRadius, - gradient->GetGradientStopsForTarget(aRT)); + RadialGradientPattern(gradient->mCenter1, gradient->mCenter2, gradient->mRadius1, + gradient->mRadius2, gradient->GetGradientStopsForTarget(aRT)); } else if (state.patternStyles[aStyle]) { if (aCtx->mCanvasElement) { CanvasUtils::DoDrawImageSecurityCheck(aCtx->HTMLCanvasElement(), state.patternStyles[aStyle]->mPrincipal, state.patternStyles[aStyle]->mForceWriteOnly); } ExtendMode mode;
--- a/content/canvas/test/test_2d.gradient.radial.cone.top.html +++ b/content/canvas/test/test_2d.gradient.radial.cone.top.html @@ -1,27 +1,16 @@ <!DOCTYPE HTML> <title>Canvas test: 2d.gradient.radial.cone.top</title> <script src="/MochiKit/packed.js"></script> <script src="/tests/SimpleTest/SimpleTest.js"></script> <link rel="stylesheet" href="/tests/SimpleTest/test.css"> <body> <canvas id="c" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> <script> - -function IsAzureEnabled() { - var enabled = false; - - try { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - enabled = Components.classes["@mozilla.org/gfx/info;1"].getService(Components.interfaces.nsIGfxInfo).AzureEnabled; - } catch (e) { } - - return enabled; -} function isPixel(ctx, x,y, r,g,b,a, pos, colour, d) { var pixel = ctx.getImageData(x, y, 1, 1); var pr = pixel.data[0], pg = pixel.data[1], pb = pixel.data[2], pa = pixel.data[3]; ok(r-d <= pr && pr <= r+d && @@ -54,36 +43,23 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); -if (IsAzureEnabled()) { - // XXX - See Bug 666097. - todo_isPixel(ctx, 1,1, 0,255,0,255, "1,1", "0,255,0,255", 0); - todo_isPixel(ctx, 50,1, 0,255,0,255, "50,1", "0,255,0,255", 0); - todo_isPixel(ctx, 98,1, 0,255,0,255, "98,1", "0,255,0,255", 0); - todo_isPixel(ctx, 1,25, 0,255,0,255, "1,25", "0,255,0,255", 0); - todo_isPixel(ctx, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 0); - todo_isPixel(ctx, 98,25, 0,255,0,255, "98,25", "0,255,0,255", 0); - todo_isPixel(ctx, 1,48, 0,255,0,255, "1,48", "0,255,0,255", 0); - todo_isPixel(ctx, 50,48, 0,255,0,255, "50,48", "0,255,0,255", 0); - todo_isPixel(ctx, 98,48, 0,255,0,255, "98,48", "0,255,0,255", 0); -} else { - isPixel(ctx, 1,1, 0,255,0,255, "1,1", "0,255,0,255", 0); - isPixel(ctx, 50,1, 0,255,0,255, "50,1", "0,255,0,255", 0); - isPixel(ctx, 98,1, 0,255,0,255, "98,1", "0,255,0,255", 0); - isPixel(ctx, 1,25, 0,255,0,255, "1,25", "0,255,0,255", 0); - isPixel(ctx, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 0); - isPixel(ctx, 98,25, 0,255,0,255, "98,25", "0,255,0,255", 0); - isPixel(ctx, 1,48, 0,255,0,255, "1,48", "0,255,0,255", 0); - isPixel(ctx, 50,48, 0,255,0,255, "50,48", "0,255,0,255", 0); - isPixel(ctx, 98,48, 0,255,0,255, "98,48", "0,255,0,255", 0); -} +isPixel(ctx, 1,1, 0,255,0,255, "1,1", "0,255,0,255", 0); +isPixel(ctx, 50,1, 0,255,0,255, "50,1", "0,255,0,255", 0); +isPixel(ctx, 98,1, 0,255,0,255, "98,1", "0,255,0,255", 0); +isPixel(ctx, 1,25, 0,255,0,255, "1,25", "0,255,0,255", 0); +isPixel(ctx, 50,25, 0,255,0,255, "50,25", "0,255,0,255", 0); +isPixel(ctx, 98,25, 0,255,0,255, "98,25", "0,255,0,255", 0); +isPixel(ctx, 1,48, 0,255,0,255, "1,48", "0,255,0,255", 0); +isPixel(ctx, 50,48, 0,255,0,255, "50,48", "0,255,0,255", 0); +isPixel(ctx, 98,48, 0,255,0,255, "98,48", "0,255,0,255", 0); SimpleTest.finish(); }); </script>
--- a/content/canvas/test/test_canvas.html +++ b/content/canvas/test/test_canvas.html @@ -6394,38 +6394,25 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); var g = ctx.createRadialGradient(210, 25, 100, 230, 25, 100); g.addColorStop(0, '#0f0'); g.addColorStop(1, '#f00'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); -if (IsAzureEnabled()) { - // XXX - See Bug 666097. - todo_isPixel(ctx, 1, 1, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 50, 1, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 98, 1, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 1, 25, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 50, 25, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 98, 25, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 1, 48, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 50, 48, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 98, 48, 0, 255, 0, 255, 0); -} else { - isPixel(ctx, 1, 1, 0, 255, 0, 255, 0); - isPixel(ctx, 50, 1, 0, 255, 0, 255, 0); - isPixel(ctx, 98, 1, 0, 255, 0, 255, 0); - isPixel(ctx, 1, 25, 0, 255, 0, 255, 0); - isPixel(ctx, 50, 25, 0, 255, 0, 255, 0); - isPixel(ctx, 98, 25, 0, 255, 0, 255, 0); - isPixel(ctx, 1, 48, 0, 255, 0, 255, 0); - isPixel(ctx, 50, 48, 0, 255, 0, 255, 0); - isPixel(ctx, 98, 48, 0, 255, 0, 255, 0); -} +isPixel(ctx, 1, 1, 0, 255, 0, 255, 0); +isPixel(ctx, 50, 1, 0, 255, 0, 255, 0); +isPixel(ctx, 98, 1, 0, 255, 0, 255, 0); +isPixel(ctx, 1, 25, 0, 255, 0, 255, 0); +isPixel(ctx, 50, 25, 0, 255, 0, 255, 0); +isPixel(ctx, 98, 25, 0, 255, 0, 255, 0); +isPixel(ctx, 1, 48, 0, 255, 0, 255, 0); +isPixel(ctx, 50, 48, 0, 255, 0, 255, 0); +isPixel(ctx, 98, 48, 0, 255, 0, 255, 0); } </script> <!-- [[[ test_2d.gradient.radial.cone.front.html ]]] --> <p>Canvas test: 2d.gradient.radial.cone.front</p> <canvas id="c235" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas> @@ -6565,39 +6552,25 @@ ctx.fillStyle = '#f00'; ctx.fillRect(0, 0, 100, 50); var g = ctx.createRadialGradient(230, 25, 100, 100, 25, 101); g.addColorStop(0, '#f00'); g.addColorStop(1, '#0f0'); ctx.fillStyle = g; ctx.fillRect(0, 0, 100, 50); - -if (IsAzureEnabled()) { - // XXX - See Bug 666097. - todo_isPixel(ctx, 1, 1, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 50, 1, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 98, 1, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 1, 25, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 50, 25, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 98, 25, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 1, 48, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 50, 48, 0, 255, 0, 255, 0); - todo_isPixel(ctx, 98, 48, 0, 255, 0, 255, 0); -} else { - isPixel(ctx, 1, 1, 0, 255, 0, 255, 0); - isPixel(ctx, 50, 1, 0, 255, 0, 255, 0); - isPixel(ctx, 98, 1, 0, 255, 0, 255, 0); - isPixel(ctx, 1, 25, 0, 255, 0, 255, 0); - isPixel(ctx, 50, 25, 0, 255, 0, 255, 0); - isPixel(ctx, 98, 25, 0, 255, 0, 255, 0); - isPixel(ctx, 1, 48, 0, 255, 0, 255, 0); - isPixel(ctx, 50, 48, 0, 255, 0, 255, 0); - isPixel(ctx, 98, 48, 0, 255, 0, 255, 0); -} +isPixel(ctx, 1, 1, 0, 255, 0, 255, 0); +isPixel(ctx, 50, 1, 0, 255, 0, 255, 0); +isPixel(ctx, 98, 1, 0, 255, 0, 255, 0); +isPixel(ctx, 1, 25, 0, 255, 0, 255, 0); +isPixel(ctx, 50, 25, 0, 255, 0, 255, 0); +isPixel(ctx, 98, 25, 0, 255, 0, 255, 0); +isPixel(ctx, 1, 48, 0, 255, 0, 255, 0); +isPixel(ctx, 50, 48, 0, 255, 0, 255, 0); +isPixel(ctx, 98, 48, 0, 255, 0, 255, 0); } </script> <!-- [[[ test_2d.gradient.radial.equal.html ]]] --> <p>Canvas test: 2d.gradient.radial.equal</p> <canvas id="c239" width="100" height="50"><p class="fallback">FAIL (fallback content)</p></canvas>
--- a/content/html/content/public/nsHTMLCanvasElement.h +++ b/content/html/content/public/nsHTMLCanvasElement.h @@ -165,16 +165,20 @@ public: /* * Helpers called by various users of Canvas */ already_AddRefed<CanvasLayer> GetCanvasLayer(nsDisplayListBuilder* aBuilder, CanvasLayer *aOldLayer, LayerManager *aManager); + // Should return true if the canvas layer should always be marked inactive. + // We should return true here if we can't do accelerated compositing with + // a non-BasicCanvasLayer. + PRBool ShouldForceInactiveLayer(LayerManager *aManager); // Call this whenever we need future changes to the canvas // to trigger fresh invalidation requests. This needs to be called // whenever we render the canvas contents to the screen, or whenever we // take a snapshot of the canvas that needs to be "live" (e.g. -moz-element). void MarkContextClean(); virtual nsXPCClassInfo* GetClassInfo(); @@ -188,16 +192,17 @@ protected: bool& aFellBackToPNG); nsresult ToDataURLImpl(const nsAString& aMimeType, nsIVariant* aEncoderOptions, nsAString& aDataURL); nsresult MozGetAsFileImpl(const nsAString& aName, const nsAString& aType, nsIDOMFile** aResult); nsresult GetContextHelper(const nsAString& aContextId, + PRBool aForceThebes, nsICanvasRenderingContextInternal **aContext); nsString mCurrentContextId; nsCOMPtr<nsICanvasRenderingContextInternal> mCurrentContext; public: // Record whether this canvas should be write-only or not. // We set this when script paints an image from a different origin.
--- a/content/html/content/src/nsHTMLCanvasElement.cpp +++ b/content/html/content/src/nsHTMLCanvasElement.cpp @@ -375,21 +375,22 @@ nsHTMLCanvasElement::MozGetAsFileImpl(co nsRefPtr<nsDOMMemoryFile> file = new nsDOMMemoryFile(imgData, imgSize, aName, type); return CallQueryInterface(file, aResult); } nsresult nsHTMLCanvasElement::GetContextHelper(const nsAString& aContextId, + PRBool aForceThebes, nsICanvasRenderingContextInternal **aContext) { NS_ENSURE_ARG(aContext); - NS_LossyConvertUTF16toASCII ctxId(aContextId); + NS_ConvertUTF16toUTF8 ctxId(aContextId); // check that ctxId is clamped to A-Za-z0-9_- for (PRUint32 i = 0; i < ctxId.Length(); i++) { if ((ctxId[i] < 'A' || ctxId[i] > 'Z') && (ctxId[i] < 'a' || ctxId[i] > 'z') && (ctxId[i] < '0' || ctxId[i] > '9') && (ctxId[i] != '-') && (ctxId[i] != '_')) @@ -397,16 +398,20 @@ nsHTMLCanvasElement::GetContextHelper(co // XXX ERRMSG we need to report an error to developers here! (bug 329026) return NS_OK; } } nsCString ctxString("@mozilla.org/content/canvas-rendering-context;1?id="); ctxString.Append(ctxId); + if (aForceThebes && ctxId.EqualsASCII("2d")) { + ctxString.AssignASCII("@mozilla.org/content/2dthebes-canvas-rendering-context;1"); + } + nsresult rv; nsCOMPtr<nsICanvasRenderingContextInternal> ctx = do_CreateInstance(ctxString.get(), &rv); if (rv == NS_ERROR_OUT_OF_MEMORY) { *aContext = nsnull; return NS_ERROR_OUT_OF_MEMORY; } if (NS_FAILED(rv)) { @@ -428,18 +433,20 @@ nsHTMLCanvasElement::GetContextHelper(co NS_IMETHODIMP nsHTMLCanvasElement::GetContext(const nsAString& aContextId, const jsval& aContextOptions, nsISupports **aContext) { nsresult rv; - if (mCurrentContextId.IsEmpty()) { - rv = GetContextHelper(aContextId, getter_AddRefs(mCurrentContext)); + PRBool forceThebes = PR_FALSE; + + while (mCurrentContextId.IsEmpty()) { + rv = GetContextHelper(aContextId, forceThebes, getter_AddRefs(mCurrentContext)); NS_ENSURE_SUCCESS(rv, rv); if (!mCurrentContext) { return NS_OK; } // Ensure that the context participates in CC. Note that returning a // CC participant from QI doesn't addref. nsXPCOMCycleCollectionParticipant *cp = nsnull; @@ -501,21 +508,28 @@ nsHTMLCanvasElement::GetContext(const ns } contextProps = newProps; } rv = UpdateContext(contextProps); if (NS_FAILED(rv)) { mCurrentContext = nsnull; + if (!forceThebes) { + // Try again with a Thebes context + forceThebes = PR_TRUE; + continue; + } return rv; } mCurrentContextId.Assign(aContextId); - } else if (!mCurrentContextId.Equals(aContextId)) { + break; + } + if (!mCurrentContextId.Equals(aContextId)) { //XXX eventually allow for more than one active context on a given canvas return NS_OK; } NS_ADDREF (*aContext = mCurrentContext); return NS_OK; } @@ -530,17 +544,17 @@ nsHTMLCanvasElement::MozGetIPCContext(co // We only support 2d shmem contexts for now. if (!aContextId.Equals(NS_LITERAL_STRING("2d"))) return NS_ERROR_INVALID_ARG; nsresult rv; if (mCurrentContextId.IsEmpty()) { - rv = GetContextHelper(aContextId, getter_AddRefs(mCurrentContext)); + rv = GetContextHelper(aContextId, PR_FALSE, getter_AddRefs(mCurrentContext)); NS_ENSURE_SUCCESS(rv, rv); if (!mCurrentContext) { return NS_OK; } mCurrentContext->SetIsIPC(PR_TRUE); rv = UpdateContext(); @@ -695,16 +709,22 @@ nsHTMLCanvasElement::GetCanvasLayer(nsDi LayerManager *aManager) { if (!mCurrentContext) return nsnull; return mCurrentContext->GetCanvasLayer(aBuilder, aOldLayer, aManager); } +PRBool +nsHTMLCanvasElement::ShouldForceInactiveLayer(LayerManager *aManager) +{ + return !mCurrentContext || mCurrentContext->ShouldForceInactiveLayer(aManager); +} + void nsHTMLCanvasElement::MarkContextClean() { if (!mCurrentContext) return; mCurrentContext->MarkContextClean(); }
--- a/content/media/nsBuiltinDecoderReader.cpp +++ b/content/media/nsBuiltinDecoderReader.cpp @@ -305,34 +305,77 @@ nsresult nsBuiltinDecoderReader::DecodeT return NS_ERROR_FAILURE; } } LOG(PR_LOG_DEBUG, ("First video frame after decode is %lld", startTime)); } if (HasAudio()) { // Decode audio forward to the seek target. + PRInt64 targetSample = 0; + if (!UsecsToSamples(aTarget, mInfo.mAudioRate, targetSample)) { + return NS_ERROR_FAILURE; + } PRBool eof = PR_FALSE; while (HasAudio() && !eof) { while (!eof && mAudioQueue.GetSize() == 0) { eof = !DecodeAudioData(); { ReentrantMonitorAutoExit exitReaderMon(mReentrantMonitor); ReentrantMonitorAutoEnter decoderMon(mDecoder->GetReentrantMonitor()); if (mDecoder->GetDecodeState() == nsBuiltinDecoderStateMachine::DECODER_STATE_SHUTDOWN) { return NS_ERROR_FAILURE; } } } - nsAutoPtr<SoundData> audio(mAudioQueue.PeekFront()); - if (audio && audio->mTime + audio->mDuration <= aTarget) { - mAudioQueue.PopFront(); + const SoundData* audio = mAudioQueue.PeekFront(); + if (!audio) + break; + PRInt64 startSample = 0; + if (!UsecsToSamples(audio->mTime, mInfo.mAudioRate, startSample)) { + return NS_ERROR_FAILURE; + } + if (startSample + audio->mSamples <= targetSample) { + // Our seek target lies after the samples in this SoundData. Pop it + // off the queue, and keep decoding forwards. + delete mAudioQueue.PopFront(); audio = nsnull; - } else { - audio.forget(); + continue; + } + + // The seek target lies somewhere in this SoundData's samples, strip off + // any samples which lie before the seek target, so we'll begin playback + // exactly at the seek target. + NS_ASSERTION(targetSample >= startSample, "Target must at or be after data start."); + NS_ASSERTION(startSample + audio->mSamples > targetSample, "Data must end after target."); + + PRInt64 samplesToPrune = targetSample - startSample; + if (samplesToPrune > audio->mSamples) { + // We've messed up somehow. Don't try to trim samples, the |samples| + // variable below will overflow. + NS_WARNING("Can't prune more samples that we have!"); break; } + PRUint32 samples = audio->mSamples - static_cast<PRUint32>(samplesToPrune); + PRUint32 channels = audio->mChannels; + nsAutoArrayPtr<SoundDataValue> audioData(new SoundDataValue[samples * channels]); + memcpy(audioData.get(), + audio->mAudioData.get() + (samplesToPrune * channels), + samples * channels * sizeof(SoundDataValue)); + PRInt64 duration; + if (!SamplesToUsecs(samples, mInfo.mAudioRate, duration)) { + return NS_ERROR_FAILURE; + } + nsAutoPtr<SoundData> data(new SoundData(audio->mOffset, + aTarget, + duration, + samples, + audioData.forget(), + channels)); + delete mAudioQueue.PopFront(); + mAudioQueue.PushFront(data.forget()); + break; } } return NS_OK; }
--- a/docshell/shistory/src/nsSHistory.cpp +++ b/docshell/shistory/src/nsSHistory.cpp @@ -1491,16 +1491,17 @@ nsSHistory::LoadEntry(PRInt32 aIndex, lo listener->OnHistoryGotoIndex(aIndex, nextURI, &canNavigate); } } } if (!canNavigate) { // If the listener asked us not to proceed with // the operation, simply return. + mRequestedIndex = -1; return NS_OK; // XXX Maybe I can return some other error code? } nsCOMPtr<nsIURI> nexturi; PRInt32 pCount=0, nCount=0; nsCOMPtr<nsISHContainer> prevAsContainer(do_QueryInterface(prevEntry)); nsCOMPtr<nsISHContainer> nextAsContainer(do_QueryInterface(nextEntry)); if (prevAsContainer && nextAsContainer) {
--- a/dom/base/nsGlobalWindow.cpp +++ b/dom/base/nsGlobalWindow.cpp @@ -9084,16 +9084,18 @@ nsGlobalWindow::RunTimeout(nsTimeout *aT PR_INSERT_AFTER(&dummy_timeout, last_expired_timeout); // Don't let ClearWindowTimeouts throw away our stack-allocated // dummy timeout. dummy_timeout.AddRef(); dummy_timeout.AddRef(); last_insertion_point = mTimeoutInsertionPoint; + // If we ever start setting mTimeoutInsertionPoint to a non-dummy timeout, + // the logic in ResetTimersForNonBackgroundWindow will need to change. mTimeoutInsertionPoint = &dummy_timeout; for (timeout = FirstTimeout(); timeout != &dummy_timeout && !IsFrozen(); timeout = nextTimeout) { nextTimeout = timeout->Next(); if (timeout->mFiringDepth != firingDepth) { @@ -9421,17 +9423,26 @@ nsresult nsGlobalWindow::ResetTimersForN NS_ERROR_NOT_INITIALIZED); if (IsFrozen() || mTimeoutsSuspendDepth) { return NS_OK; } TimeStamp now = TimeStamp::Now(); - for (nsTimeout *timeout = FirstTimeout(); IsTimeout(timeout); ) { + // If mTimeoutInsertionPoint is non-null, we're in the middle of firing + // timers and the timers we're planning to fire all come before + // mTimeoutInsertionPoint; mTimeoutInsertionPoint itself is a dummy timeout + // with an mWhen that may be semi-bogus. In that case, we don't need to do + // anything with mTimeoutInsertionPoint or anything before it, so should + // start at the timer after mTimeoutInsertionPoint, if there is one. + // Otherwise, start at the beginning of the list. + for (nsTimeout *timeout = mTimeoutInsertionPoint ? + mTimeoutInsertionPoint->Next() : FirstTimeout(); + IsTimeout(timeout); ) { // It's important that this check be <= so that we guarantee that // taking NS_MAX with |now| won't make a quantity equal to // timeout->mWhen below. if (timeout->mWhen <= now) { timeout = timeout->Next(); continue; }
--- a/dom/base/nsGlobalWindow.h +++ b/dom/base/nsGlobalWindow.h @@ -909,18 +909,24 @@ protected: nsCOMPtr<nsIDOMStorage> mSessionStorage; nsCOMPtr<nsIXPConnectJSObjectHolder> mInnerWindowHolder; nsCOMPtr<nsIPrincipal> mOpenerScriptPrincipal; // strong; used to determine // whether to clear scope // These member variable are used only on inner windows. nsRefPtr<nsEventListenerManager> mListenerManager; + // mTimeouts is generally sorted by mWhen, unless mTimeoutInsertionPoint is + // non-null. In that case, the dummy timeout pointed to by + // mTimeoutInsertionPoint may have a later mWhen than some of the timeouts + // that come after it. PRCList mTimeouts; // If mTimeoutInsertionPoint is non-null, insertions should happen after it. + // This is a dummy timeout at the moment; if that ever changes, the logic in + // ResetTimersForNonBackgroundWindow needs to change. nsTimeout* mTimeoutInsertionPoint; PRUint32 mTimeoutPublicIdCounter; PRUint32 mTimeoutFiringDepth; nsRefPtr<nsLocation> mLocation; nsRefPtr<nsHistory> mHistory; // Holder of the dummy java plugin, used to expose window.java and // window.packages.
--- a/gfx/2d/2D.h +++ b/gfx/2d/2D.h @@ -241,32 +241,35 @@ class RadialGradientPattern : public Pat { public: /* * aBegin Start of the linear gradient * aEnd End of the linear gradient * aStops GradientStops object for this gradient, this should match the * backend type of the draw target this pattern will be used with. */ - RadialGradientPattern(const Point &aCenter, - const Point &aOrigin, - Float aRadius, + RadialGradientPattern(const Point &aCenter1, + const Point &aCenter2, + Float aRadius1, + Float aRadius2, GradientStops *aStops) - : mCenter(aCenter) - , mOrigin(aOrigin) - , mRadius(aRadius) + : mCenter1(aCenter1) + , mCenter2(aCenter2) + , mRadius1(aRadius1) + , mRadius2(aRadius2) , mStops(aStops) { } virtual PatternType GetType() const { return PATTERN_RADIAL_GRADIENT; } - Point mCenter; - Point mOrigin; - Float mRadius; + Point mCenter1; + Point mCenter2; + Float mRadius1; + Float mRadius2; RefPtr<GradientStops> mStops; }; /* * This class is used for Surface Patterns, they wrap a surface and a * repetition mode for the surface. This may be used on the stack. */ class SurfacePattern : public Pattern
--- a/gfx/2d/DrawTargetD2D.cpp +++ b/gfx/2d/DrawTargetD2D.cpp @@ -224,17 +224,17 @@ void DrawTargetD2D::DrawSurface(SourceSurface *aSurface, const Rect &aDest, const Rect &aSource, const DrawSurfaceOptions &aSurfOptions, const DrawOptions &aOptions) { RefPtr<ID2D1Bitmap> bitmap; - ID2D1RenderTarget *rt = GetRTForOperator(aOptions.mCompositionOp); + ID2D1RenderTarget *rt = GetRTForOperation(aOptions.mCompositionOp, ColorPattern(Color())); PrepareForDrawing(rt); Rect srcRect = aSource; switch (aSurface->GetType()) { case SURFACE_D2D1_BITMAP: @@ -274,17 +274,17 @@ DrawTargetD2D::DrawSurface(SourceSurface srcSurf->mDrawTarget->mDependentTargets.push_back(this); } } break; } rt->DrawBitmap(bitmap, D2DRect(aDest), aOptions.mAlpha, D2DFilter(aSurfOptions.mFilter), D2DRect(srcRect)); - FinalizeRTForOperator(aOptions.mCompositionOp, aDest); + FinalizeRTForOperation(aOptions.mCompositionOp, ColorPattern(Color()), aDest); } void DrawTargetD2D::DrawSurfaceWithShadow(SourceSurface *aSurface, const Point &aDest, const Color &aColor, const Point &aOffset, Float aSigma, @@ -688,145 +688,145 @@ DrawTargetD2D::CopySurface(SourceSurface D2DRect(srcRect)); } void DrawTargetD2D::FillRect(const Rect &aRect, const Pattern &aPattern, const DrawOptions &aOptions) { - ID2D1RenderTarget *rt = GetRTForOperator(aOptions.mCompositionOp); + ID2D1RenderTarget *rt = GetRTForOperation(aOptions.mCompositionOp, aPattern); PrepareForDrawing(rt); RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions.mAlpha); if (brush) { rt->FillRectangle(D2DRect(aRect), brush); } - FinalizeRTForOperator(aOptions.mCompositionOp, aRect); + FinalizeRTForOperation(aOptions.mCompositionOp, aPattern, aRect); } void DrawTargetD2D::StrokeRect(const Rect &aRect, const Pattern &aPattern, const StrokeOptions &aStrokeOptions, const DrawOptions &aOptions) { - ID2D1RenderTarget *rt = GetRTForOperator(aOptions.mCompositionOp); + ID2D1RenderTarget *rt = GetRTForOperation(aOptions.mCompositionOp, aPattern); PrepareForDrawing(rt); RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions.mAlpha); RefPtr<ID2D1StrokeStyle> strokeStyle = CreateStrokeStyleForOptions(aStrokeOptions); if (brush && strokeStyle) { rt->DrawRectangle(D2DRect(aRect), brush, aStrokeOptions.mLineWidth, strokeStyle); } - FinalizeRTForOperator(aOptions.mCompositionOp, aRect); + FinalizeRTForOperation(aOptions.mCompositionOp, aPattern, aRect); } void DrawTargetD2D::StrokeLine(const Point &aStart, const Point &aEnd, const Pattern &aPattern, const StrokeOptions &aStrokeOptions, const DrawOptions &aOptions) { - ID2D1RenderTarget *rt = GetRTForOperator(aOptions.mCompositionOp); + ID2D1RenderTarget *rt = GetRTForOperation(aOptions.mCompositionOp, aPattern); PrepareForDrawing(rt); RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions.mAlpha); RefPtr<ID2D1StrokeStyle> strokeStyle = CreateStrokeStyleForOptions(aStrokeOptions); if (brush && strokeStyle) { rt->DrawLine(D2DPoint(aStart), D2DPoint(aEnd), brush, aStrokeOptions.mLineWidth, strokeStyle); } - FinalizeRTForOperator(aOptions.mCompositionOp, Rect(0, 0, Float(mSize.width), Float(mSize.height))); + FinalizeRTForOperation(aOptions.mCompositionOp, aPattern, Rect(0, 0, Float(mSize.width), Float(mSize.height))); } void DrawTargetD2D::Stroke(const Path *aPath, const Pattern &aPattern, const StrokeOptions &aStrokeOptions, const DrawOptions &aOptions) { if (aPath->GetBackendType() != BACKEND_DIRECT2D) { gfxDebug() << *this << ": Ignoring drawing call for incompatible path."; return; } const PathD2D *d2dPath = static_cast<const PathD2D*>(aPath); - ID2D1RenderTarget *rt = GetRTForOperator(aOptions.mCompositionOp); + ID2D1RenderTarget *rt = GetRTForOperation(aOptions.mCompositionOp, aPattern); PrepareForDrawing(rt); RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions.mAlpha); RefPtr<ID2D1StrokeStyle> strokeStyle = CreateStrokeStyleForOptions(aStrokeOptions); if (brush && strokeStyle) { rt->DrawGeometry(d2dPath->mGeometry, brush, aStrokeOptions.mLineWidth, strokeStyle); } - FinalizeRTForOperator(aOptions.mCompositionOp, Rect(0, 0, Float(mSize.width), Float(mSize.height))); + FinalizeRTForOperation(aOptions.mCompositionOp, aPattern, Rect(0, 0, Float(mSize.width), Float(mSize.height))); } void DrawTargetD2D::Fill(const Path *aPath, const Pattern &aPattern, const DrawOptions &aOptions) { if (aPath->GetBackendType() != BACKEND_DIRECT2D) { gfxDebug() << *this << ": Ignoring drawing call for incompatible path."; return; } const PathD2D *d2dPath = static_cast<const PathD2D*>(aPath); - ID2D1RenderTarget *rt = GetRTForOperator(aOptions.mCompositionOp); + ID2D1RenderTarget *rt = GetRTForOperation(aOptions.mCompositionOp, aPattern); PrepareForDrawing(rt); RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions.mAlpha); if (brush) { rt->FillGeometry(d2dPath->mGeometry, brush); } Rect bounds; if (aOptions.mCompositionOp != OP_OVER) { D2D1_RECT_F d2dbounds; d2dPath->mGeometry->GetBounds(D2D1::IdentityMatrix(), &d2dbounds); bounds = ToRect(d2dbounds); } - FinalizeRTForOperator(aOptions.mCompositionOp, bounds); + FinalizeRTForOperation(aOptions.mCompositionOp, aPattern, bounds); } void DrawTargetD2D::FillGlyphs(ScaledFont *aFont, const GlyphBuffer &aBuffer, const Pattern &aPattern, const DrawOptions &aOptions) { if (aFont->GetType() != FONT_DWRITE) { gfxDebug() << *this << ": Ignoring drawing call for incompatible font."; return; } ScaledFontDWrite *font = static_cast<ScaledFontDWrite*>(aFont); - ID2D1RenderTarget *rt = GetRTForOperator(aOptions.mCompositionOp); + ID2D1RenderTarget *rt = GetRTForOperation(aOptions.mCompositionOp, aPattern); PrepareForDrawing(rt); RefPtr<ID2D1Brush> brush = CreateBrushForPattern(aPattern, aOptions.mAlpha); DWRITE_GLYPH_RUN glyphRun; glyphRun.bidiLevel = 0; @@ -852,17 +852,17 @@ DrawTargetD2D::FillGlyphs(ScaledFont *aF glyphRun.glyphAdvances = &advances.front(); glyphRun.glyphIndices = &indices.front(); glyphRun.glyphOffsets = &offsets.front(); if (brush) { rt->DrawGlyphRun(D2D1::Point2F(), &glyphRun, brush); } - FinalizeRTForOperator(aOptions.mCompositionOp, Rect(0, 0, (Float)mSize.width, (Float)mSize.height)); + FinalizeRTForOperation(aOptions.mCompositionOp, aPattern, Rect(0, 0, (Float)mSize.width, (Float)mSize.height)); } void DrawTargetD2D::PushClip(const Path *aPath) { if (aPath->GetBackendType() != BACKEND_DIRECT2D) { gfxDebug() << *this << ": Ignoring clipping call for incompatible path."; return; @@ -981,23 +981,23 @@ DrawTargetD2D::CreatePathBuilder(FillRul if (aFillRule == FILL_WINDING) { sink->SetFillMode(D2D1_FILL_MODE_WINDING); } return new PathBuilderD2D(sink, path, aFillRule); } TemporaryRef<GradientStops> -DrawTargetD2D::CreateGradientStops(GradientStop *aStops, uint32_t aNumStops) const +DrawTargetD2D::CreateGradientStops(GradientStop *rawStops, uint32_t aNumStops) const { D2D1_GRADIENT_STOP *stops = new D2D1_GRADIENT_STOP[aNumStops]; for (uint32_t i = 0; i < aNumStops; i++) { - stops[i].position = aStops[i].offset; - stops[i].color = D2DColor(aStops[i].color); + stops[i].position = rawStops[i].offset; + stops[i].color = D2DColor(rawStops[i].color); } RefPtr<ID2D1GradientStopCollection> stopCollection; HRESULT hr = mRT->CreateGradientStopCollection(stops, aNumStops, byRef(stopCollection)); if (FAILED(hr)) { gfxWarning() << "Failed to create GradientStopCollection. Code: " << hr; @@ -1285,19 +1285,19 @@ DrawTargetD2D::GetBlendStateForOperator( return mPrivateData->mBlendStates[aOperator]; } /* This function prepares the temporary RT for drawing and returns it when a * drawing operation other than OVER is required. */ ID2D1RenderTarget* -DrawTargetD2D::GetRTForOperator(CompositionOp aOperator) +DrawTargetD2D::GetRTForOperation(CompositionOp aOperator, const Pattern &aPattern) { - if (aOperator == OP_OVER) { + if (aOperator == OP_OVER && !IsPatternSupportedByD2D(aPattern)) { return mRT; } PopAllClips(); if (mTempRT) { mTempRT->Clear(D2D1::ColorF(0, 0)); return mTempRT; @@ -1326,19 +1326,19 @@ DrawTargetD2D::GetRTForOperator(Composit /* This function blends back the content of a drawing operation (drawn to an * empty surface with OVER, so the surface now contains the source operation * contents) to the rendertarget using the requested composition operation. * In order to respect clip for operations which are unbound by their mask, * the old content of the surface outside the clipped area may be blended back * to the surface. */ void -DrawTargetD2D::FinalizeRTForOperator(CompositionOp aOperator, const Rect &aBounds) +DrawTargetD2D::FinalizeRTForOperation(CompositionOp aOperator, const Pattern &aPattern, const Rect &aBounds) { - if (aOperator == OP_OVER) { + if (aOperator == OP_OVER && !IsPatternSupportedByD2D(aPattern)) { return; } if (!mTempRT) { return; } for (unsigned int i = 0; i < mPushedClips.size(); i++) { @@ -1372,23 +1372,36 @@ DrawTargetD2D::FinalizeRTForOperator(Com viewport.MaxDepth = 1; viewport.MinDepth = 0; viewport.Height = mSize.height; viewport.Width = mSize.width; viewport.TopLeftX = 0; viewport.TopLeftY = 0; mDevice->RSSetViewports(1, &viewport); - mPrivateData->mEffect->GetVariableByName("tex")->AsShaderResource()->SetResource(mSRView); mPrivateData->mEffect->GetVariableByName("QuadDesc")->AsVector()-> SetFloatVector(ShaderConstantRectD3D10(-1.0f, 1.0f, 2.0f, -2.0f)); - mPrivateData->mEffect->GetVariableByName("TexCoords")->AsVector()-> - SetFloatVector(ShaderConstantRectD3D10(0, 0, 1.0f, 1.0f)); + + if (!IsPatternSupportedByD2D(aPattern)) { + mPrivateData->mEffect->GetVariableByName("TexCoords")->AsVector()-> + SetFloatVector(ShaderConstantRectD3D10(0, 0, 1.0f, 1.0f)); + mPrivateData->mEffect->GetVariableByName("tex")->AsShaderResource()->SetResource(mSRView); + mPrivateData->mEffect->GetTechniqueByName("SampleTexture")->GetPassByIndex(0)->Apply(0); + } else if (aPattern.GetType() == PATTERN_RADIAL_GRADIENT) { + const RadialGradientPattern *pat = static_cast<const RadialGradientPattern*>(&aPattern); - mPrivateData->mEffect->GetTechniqueByName("SampleTexture")->GetPassByIndex(0)->Apply(0); + if (pat->mCenter1 == pat->mCenter2 && pat->mRadius1 == pat->mRadius2) { + // Draw nothing! + return; + } + + mPrivateData->mEffect->GetVariableByName("mask")->AsShaderResource()->SetResource(mSRView); + + SetupEffectForRadialGradient(pat); + } mDevice->OMSetBlendState(GetBlendStateForOperator(aOperator), NULL, 0xffffffff); mDevice->Draw(4, 0); } TemporaryRef<ID2D1Geometry> DrawTargetD2D::GetClippedGeometry() @@ -1499,16 +1512,22 @@ DrawTargetD2D::PopAllClips() mClipsArePushed = false; } } TemporaryRef<ID2D1Brush> DrawTargetD2D::CreateBrushForPattern(const Pattern &aPattern, Float aAlpha) { + if (IsPatternSupportedByD2D(aPattern)) { + RefPtr<ID2D1SolidColorBrush> colBrush; + mRT->CreateSolidColorBrush(D2D1::ColorF(1.0f, 1.0f, 1.0f, 1.0f), byRef(colBrush)); + return colBrush; + } + if (aPattern.GetType() == PATTERN_COLOR) { RefPtr<ID2D1SolidColorBrush> colBrush; Color color = static_cast<const ColorPattern*>(&aPattern)->mColor; mRT->CreateSolidColorBrush(D2D1::ColorF(color.r, color.g, color.b, color.a), D2D1::BrushProperties(aAlpha), byRef(colBrush)); return colBrush; @@ -1537,23 +1556,25 @@ DrawTargetD2D::CreateBrushForPattern(con GradientStopsD2D *stops = static_cast<GradientStopsD2D*>(pat->mStops.get()); if (!stops) { gfxDebug() << "No stops specified for gradient pattern."; return NULL; } - mRT->CreateRadialGradientBrush(D2D1::RadialGradientBrushProperties(D2DPoint(pat->mCenter), - D2DPoint(pat->mOrigin - pat->mCenter), - pat->mRadius, - pat->mRadius), - D2D1::BrushProperties(aAlpha), - stops->mStopCollection, - byRef(gradBrush)); + // This will not be a complex radial gradient brush. + mRT->CreateRadialGradientBrush( + D2D1::RadialGradientBrushProperties(D2DPoint(pat->mCenter1), + D2D1::Point2F(), + pat->mRadius2, pat->mRadius2), + D2D1::BrushProperties(aAlpha), + stops->mStopCollection, + byRef(gradBrush)); + return gradBrush; } else if (aPattern.GetType() == PATTERN_SURFACE) { RefPtr<ID2D1BitmapBrush> bmBrush; const SurfacePattern *pat = static_cast<const SurfacePattern*>(&aPattern); if (!pat->mSurface) { gfxDebug() << "No source surface specified for surface pattern"; @@ -1682,16 +1703,143 @@ DrawTargetD2D::CreateStrokeStyleForOptio if (FAILED(hr)) { gfxWarning() << "Failed to create Direct2D stroke style."; } return style; } +TemporaryRef<ID3D10Texture1D> +DrawTargetD2D::CreateGradientTexture(const GradientStopsD2D *aStops) +{ + CD3D10_TEXTURE1D_DESC desc(DXGI_FORMAT_B8G8R8A8_UNORM, 4096, 1, 1); + + std::vector<D2D1_GRADIENT_STOP> rawStops; + rawStops.resize(aStops->mStopCollection->GetGradientStopCount()); + aStops->mStopCollection->GetGradientStops(&rawStops.front(), rawStops.size()); + + std::vector<unsigned char> textureData; + textureData.resize(4096 * 4); + unsigned char *texData = &textureData.front(); + + float prevColorPos = 0; + float nextColorPos = 1.0f; + D2D1_COLOR_F prevColor = rawStops[0].color; + D2D1_COLOR_F nextColor = prevColor; + + if (rawStops.size() >= 2) { + nextColor = rawStops[1].color; + nextColorPos = rawStops[1].position; + } + + uint32_t stopPosition = 2; + + // Not the most optimized way but this will do for now. + for (int i = 0; i < 4096; i++) { + // The 4095 seems a little counter intuitive, but we want the gradient + // color at offset 0 at the first pixel, and at offset 1.0f at the last + // pixel. + float pos = float(i) / 4095; + + if (pos > nextColorPos) { + prevColor = nextColor; + prevColorPos = nextColorPos; + if (rawStops.size() > stopPosition) { + nextColor = rawStops[stopPosition].color; + nextColorPos = rawStops[stopPosition++].position; + } else { + nextColorPos = 1.0f; + } + } + + float interp = (pos - prevColorPos) / (nextColorPos - prevColorPos); + + Color newColor(prevColor.r + (nextColor.r - prevColor.r) * interp, + prevColor.g + (nextColor.g - prevColor.g) * interp, + prevColor.b + (nextColor.b - prevColor.b) * interp, + prevColor.a + (nextColor.a - prevColor.a) * interp); + + texData[i * 4] = (char)(255.0f * newColor.b); + texData[i * 4 + 1] = (char)(255.0f * newColor.g); + texData[i * 4 + 2] = (char)(255.0f * newColor.r); + texData[i * 4 + 3] = (char)(255.0f * newColor.a); + } + + D3D10_SUBRESOURCE_DATA data; + data.pSysMem = &textureData.front(); + + RefPtr<ID3D10Texture1D> tex; + mDevice->CreateTexture1D(&desc, &data, byRef(tex)); + + return tex; +} + +void +DrawTargetD2D::SetupEffectForRadialGradient(const RadialGradientPattern *aPattern) +{ + mPrivateData->mEffect->GetTechniqueByName("SampleRadialGradient")->GetPassByIndex(0)->Apply(0); + mPrivateData->mEffect->GetVariableByName("MaskTexCoords")->AsVector()-> + SetFloatVector(ShaderConstantRectD3D10(0, 0, 1.0f, 1.0f)); + + float dimensions[] = { float(mSize.width), float(mSize.height), 0, 0 }; + mPrivateData->mEffect->GetVariableByName("dimensions")->AsVector()-> + SetFloatVector(dimensions); + + const GradientStopsD2D *stops = + static_cast<const GradientStopsD2D*>(aPattern->mStops.get()); + + RefPtr<ID3D10Texture1D> tex = CreateGradientTexture(stops); + + RefPtr<ID3D10ShaderResourceView> srView; + mDevice->CreateShaderResourceView(tex, NULL, byRef(srView)); + + mPrivateData->mEffect->GetVariableByName("tex")->AsShaderResource()->SetResource(srView); + + Point dc = aPattern->mCenter2 - aPattern->mCenter1; + float dr = aPattern->mRadius2 - aPattern->mRadius1; + + float diffv[] = { dc.x, dc.y, dr, 0 }; + mPrivateData->mEffect->GetVariableByName("diff")->AsVector()-> + SetFloatVector(diffv); + + float center1[] = { aPattern->mCenter1.x, aPattern->mCenter1.y, dr, 0 }; + mPrivateData->mEffect->GetVariableByName("center1")->AsVector()-> + SetFloatVector(center1); + + mPrivateData->mEffect->GetVariableByName("radius1")->AsScalar()-> + SetFloat(aPattern->mRadius1); + mPrivateData->mEffect->GetVariableByName("sq_radius1")->AsScalar()-> + SetFloat(pow(aPattern->mRadius1, 2)); + + Matrix invTransform = mTransform; + + if (!invTransform.Invert()) { + // Bail if the matrix is singular. + return; + } + float matrix[] = { invTransform._11, invTransform._12, 0, 0, + invTransform._21, invTransform._22, 0, 0, + invTransform._31, invTransform._32, 1.0f, 0, + 0, 0, 0, 1.0f }; + + mPrivateData->mEffect->GetVariableByName("DeviceSpaceToUserSpace")-> + AsMatrix()->SetMatrix(matrix); + + float A = dc.x * dc.x + dc.y * dc.y - dr * dr; + if (A == 0) { + mPrivateData->mEffect->GetTechniqueByName("SampleRadialGradient")-> + GetPassByIndex(1)->Apply(0); + } else { + mPrivateData->mEffect->GetVariableByName("A")->AsScalar()->SetFloat(A); + mPrivateData->mEffect->GetTechniqueByName("SampleRadialGradient")-> + GetPassByIndex(0)->Apply(0); + } +} + ID2D1Factory* DrawTargetD2D::factory() { if (mFactory) { return mFactory; } D2D1CreateFactoryFunc createD2DFactory;
--- a/gfx/2d/DrawTargetD2D.h +++ b/gfx/2d/DrawTargetD2D.h @@ -45,16 +45,17 @@ #include <vector> #include <sstream> namespace mozilla { namespace gfx { class SourceSurfaceD2DTarget; +class GradientStopsD2D; struct PrivateD3D10DataD2D { RefPtr<ID3D10Effect> mEffect; RefPtr<ID3D10InputLayout> mInputLayout; RefPtr<ID3D10Buffer> mVB; RefPtr<ID3D10BlendState> mBlendStates[OP_COUNT]; }; @@ -149,27 +150,32 @@ private: bool InitD2DRenderTarget(); void PrepareForDrawing(ID2D1RenderTarget *aRT); // This function will mark the surface as changing, and make sure any // copy-on-write snapshots are notified. void MarkChanged(); ID3D10BlendState *GetBlendStateForOperator(CompositionOp aOperator); - ID2D1RenderTarget *GetRTForOperator(CompositionOp aOperator); - void FinalizeRTForOperator(CompositionOp aOperator, const Rect &aBounds); - void EnsureViews(); + ID2D1RenderTarget *GetRTForOperation(CompositionOp aOperator, const Pattern &aPattern); + void FinalizeRTForOperation(CompositionOp aOperator, const Pattern &aPattern, const Rect &aBounds); void EnsureViews(); void PopAllClips(); TemporaryRef<ID2D1RenderTarget> CreateRTForTexture(ID3D10Texture2D *aTexture); TemporaryRef<ID2D1Geometry> GetClippedGeometry(); TemporaryRef<ID2D1Brush> CreateBrushForPattern(const Pattern &aPattern, Float aAlpha = 1.0f); TemporaryRef<ID2D1StrokeStyle> CreateStrokeStyleForOptions(const StrokeOptions &aStrokeOptions); + TemporaryRef<ID3D10Texture1D> CreateGradientTexture(const GradientStopsD2D *aStops); + + void SetupEffectForRadialGradient(const RadialGradientPattern *aPattern); + + static const uint32_t test = 4; + IntSize mSize; RefPtr<ID3D10Device1> mDevice; RefPtr<ID3D10Texture2D> mTexture; mutable RefPtr<ID2D1RenderTarget> mRT; // Temporary texture and render target used for supporting alternative operators. RefPtr<ID3D10Texture2D> mTempTexture;
--- a/gfx/2d/HelpersD2D.h +++ b/gfx/2d/HelpersD2D.h @@ -146,16 +146,39 @@ static inline int BytesPerPixel(SurfaceF switch (aFormat) { case FORMAT_A8: return 1; default: return 4; } } +static bool IsPatternSupportedByD2D(const Pattern &aPattern) +{ + if (aPattern.GetType() != PATTERN_RADIAL_GRADIENT) { + return false; + } + + const RadialGradientPattern *pat = + static_cast<const RadialGradientPattern*>(&aPattern); + + if (pat->mRadius1 != 0) { + return true; + } + + Point diff = pat->mCenter2 - pat->mCenter1; + + if (sqrt(diff.x * diff.x + diff.y * diff.y) >= pat->mRadius2) { + // Inner point lies outside the circle. + return true; + } + + return false; +} + /** * This structure is used to pass rectangles to our shader constant. We can use * this for passing rectangular areas to SetVertexShaderConstant. In the format * of a 4 component float(x,y,width,height). Our vertex shader can then use * this to construct rectangular positions from the 0,0-1,1 quad that we source * it with. */ struct ShaderConstantRectD3D10
--- a/gfx/2d/ShadersD2D.fx +++ b/gfx/2d/ShadersD2D.fx @@ -19,23 +19,42 @@ cbuffer cb0 cbuffer cb1 { float4 BlurOffsetsH[3]; float4 BlurOffsetsV[3]; float4 BlurWeights[3]; float4 ShadowColor; } +cbuffer cb2 +{ + float3x3 DeviceSpaceToUserSpace; + float2 dimensions; + // Precalculate as much as we can! + float3 diff; + float2 center1; + float A; + float radius1; + float sq_radius1; +} + struct VS_OUTPUT { float4 Position : SV_Position; float2 TexCoord : TEXCOORD0; float2 MaskTexCoord : TEXCOORD1; }; +struct VS_RADIAL_OUTPUT +{ + float4 Position : SV_Position; + float2 MaskTexCoord : TEXCOORD0; + float2 PixelCoord : TEXCOORD1; +}; + Texture2D tex; Texture2D mask; sampler sSampler = sampler_state { Filter = MIN_MAG_MIP_LINEAR; Texture = tex; AddressU = Clamp; AddressV = Clamp; @@ -89,26 +108,107 @@ VS_OUTPUT SampleTextureVS(float3 pos : P Output.Position.z = 0; Output.TexCoord.x = pos.x * TexCoords.z + TexCoords.x; Output.TexCoord.y = pos.y * TexCoords.w + TexCoords.y; Output.MaskTexCoord.x = pos.x * MaskTexCoords.z + MaskTexCoords.x; Output.MaskTexCoord.y = pos.y * MaskTexCoords.w + MaskTexCoords.y; return Output; } +VS_RADIAL_OUTPUT SampleRadialVS(float3 pos : POSITION) +{ + VS_RADIAL_OUTPUT Output; + Output.Position.w = 1.0f; + Output.Position.x = pos.x * QuadDesc.z + QuadDesc.x; + Output.Position.y = pos.y * QuadDesc.w + QuadDesc.y; + Output.Position.z = 0; + Output.MaskTexCoord.x = pos.x * MaskTexCoords.z + MaskTexCoords.x; + Output.MaskTexCoord.y = pos.y * MaskTexCoords.w + MaskTexCoords.y; + + // For the radial gradient pixel shader we need to pass in the pixel's + // coordinates in user space for the color to be correctly determined. + + Output.PixelCoord.x = ((Output.Position.x + 1.0f) / 2.0f) * dimensions.x; + Output.PixelCoord.y = ((1.0f - Output.Position.y) / 2.0f) * dimensions.y; + Output.PixelCoord.xy = mul(float3(Output.PixelCoord.x, Output.PixelCoord.y, 1.0f), DeviceSpaceToUserSpace).xy; + return Output; +} + float4 SampleTexturePS( VS_OUTPUT In) : SV_Target { return tex.Sample(sSampler, In.TexCoord); }; float4 SampleMaskTexturePS( VS_OUTPUT In) : SV_Target { return tex.Sample(sSampler, In.TexCoord) * mask.Sample(sMaskSampler, In.MaskTexCoord).a; }; +float4 SampleRadialGradientPS( VS_RADIAL_OUTPUT In) : SV_Target +{ + // Radial gradient painting is defined as the set of circles whose centers + // are described by C(t) = (C2 - C1) * t + C1; with radii + // R(t) = (R2 - R1) * t + R1; for R(t) > 0. This shader solves the + // quadratic equation that arises when calculating t for pixel (x, y). + // + // A more extensive derrivation can be found in the pixman radial gradient + // code. + + float2 p = In.PixelCoord; + float3 dp = float3(p - center1, radius1); + + // dpx * dcx + dpy * dcy + r * dr + float B = dot(dp, diff); + + float C = pow(dp.x, 2) + pow(dp.y, 2) - sq_radius1; + + float det = pow(B, 2) - A * C; + + if (det < 0) { + return float4(0, 0, 0, 0); + } + + float sqrt_det = sqrt(abs(det)); + + float2 t = (B + float2(sqrt_det, -sqrt_det)) / A; + + float2 isValid = step(float2(-radius1, -radius1), t * diff.z); + + if (max(isValid.x, isValid.y) <= 0) { + return float4(0, 0, 0, 0); + } + + float upper_t = lerp(t.y, t.x, isValid.x); + + // Multiply the output color by the input mask for the operation. + return tex.Sample(sSampler, float2(upper_t, 0.5)) * mask.Sample(sMaskSampler, In.MaskTexCoord).a; +}; + +float4 SampleRadialGradientA0PS( VS_RADIAL_OUTPUT In) : SV_Target +{ + // This simpler shader is used for the degenerate case where A is 0, + // i.e. we're actually solving a linear equation. + + float2 p = In.PixelCoord; + float3 dp = float3(p - center1, radius1); + + // dpx * dcx + dpy * dcy + r * dr + float B = dot(dp, diff); + + float C = pow(dp.x, 2) + pow(dp.y, 2) - pow(radius1, 2); + + float t = 0.5 * C / B; + + if (-radius1 >= t * diff.z) { + return float4(0, 0, 0, 0); + } + + return tex.Sample(sSampler, float2(t, 0.5)) * mask.Sample(sMaskSampler, In.MaskTexCoord).a; +}; + float4 SampleShadowHPS( VS_OUTPUT In) : SV_Target { float outputStrength = 0; outputStrength += BlurWeights[0].x * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[0].x, In.TexCoord.y)).a; outputStrength += BlurWeights[0].y * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[0].y, In.TexCoord.y)).a; outputStrength += BlurWeights[0].z * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[0].z, In.TexCoord.y)).a; outputStrength += BlurWeights[0].w * tex.Sample(sShadowSampler, float2(In.TexCoord.x + BlurOffsetsH[0].w, In.TexCoord.y)).a; @@ -161,16 +261,34 @@ technique10 SampleTexture { SetRasterizerState(TextureRast); SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS())); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleTexturePS())); } } +technique10 SampleRadialGradient +{ + pass P0 + { + SetRasterizerState(TextureRast); + SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleRadialVS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleRadialGradientPS())); + } + pass P1 + { + SetRasterizerState(TextureRast); + SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleRadialVS())); + SetGeometryShader(NULL); + SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleRadialGradientA0PS())); + } +} + technique10 SampleMaskedTexture { pass P0 { SetRasterizerState(TextureRast); SetVertexShader(CompileShader(vs_4_0_level_9_3, SampleTextureVS())); SetGeometryShader(NULL); SetPixelShader(CompileShader(ps_4_0_level_9_3, SampleMaskTexturePS()));
--- a/gfx/2d/ShadersD2D.h +++ b/gfx/2d/ShadersD2D.h @@ -1,30 +1,41 @@ #if 0 // // FX Version: fx_4_0 // Child effect (requires effect pool): false // -// 2 local buffer(s) +// 3 local buffer(s) // cbuffer cb0 { float4 QuadDesc; // Offset: 0, size: 16 float4 TexCoords; // Offset: 16, size: 16 float4 MaskTexCoords; // Offset: 32, size: 16 } cbuffer cb1 { float4 BlurOffsetsH[3]; // Offset: 0, size: 48 float4 BlurOffsetsV[3]; // Offset: 48, size: 48 float4 BlurWeights[3]; // Offset: 96, size: 48 float4 ShadowColor; // Offset: 144, size: 16 } +cbuffer cb2 +{ + float3x3 DeviceSpaceToUserSpace; // Offset: 0, size: 44 + float2 dimensions; // Offset: 48, size: 8 + float3 diff; // Offset: 64, size: 12 + float2 center1; // Offset: 80, size: 8 + float A; // Offset: 88, size: 4 + float radius1; // Offset: 92, size: 4 + float sq_radius1; // Offset: 96, size: 4 +} + // // 8 local object(s) // Texture2D tex; Texture2D mask; SamplerState sSampler { Filter = uint(MIN_MAG_MIP_LINEAR /* 21 */); @@ -65,17 +76,17 @@ BlendState ShadowBlendV BlendOp[0] = uint(ADD /* 1 */); SrcBlendAlpha[0] = uint(ONE /* 2 */); DestBlendAlpha[0] = uint(INV_SRC_ALPHA /* 6 */); BlendOpAlpha[0] = uint(ADD /* 1 */); RenderTargetWriteMask[0] = byte(0x0f); }; // -// 3 technique(s) +// 4 technique(s) // technique10 SampleTexture { pass P0 { RasterizerState = TextureRast; VertexShader = asm { // @@ -214,16 +225,527 @@ technique10 SampleTexture ret // Approximately 2 instruction slots used }; } } +technique10 SampleRadialGradient +{ + pass P0 + { + RasterizerState = TextureRast; + VertexShader = asm { + // + // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 + // + // + // Buffer Definitions: + // + // cbuffer cb0 + // { + // + // float4 QuadDesc; // Offset: 0 Size: 16 + // float4 TexCoords; // Offset: 16 Size: 16 [unused] + // float4 MaskTexCoords; // Offset: 32 Size: 16 + // + // } + // + // cbuffer cb2 + // { + // + // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 + // float2 dimensions; // Offset: 48 Size: 8 + // float3 diff; // Offset: 64 Size: 12 [unused] + // float2 center1; // Offset: 80 Size: 8 [unused] + // float A; // Offset: 88 Size: 4 [unused] + // float radius1; // Offset: 92 Size: 4 [unused] + // float sq_radius1; // Offset: 96 Size: 4 [unused] + // + // } + // + // + // Resource Bindings: + // + // Name Type Format Dim Slot Elements + // ------------------------------ ---------- ------- ----------- ---- -------- + // cb0 cbuffer NA NA 0 1 + // cb2 cbuffer NA NA 1 1 + // + // + // + // Input signature: + // + // Name Index Mask Register SysValue Format Used + // -------------------- ----- ------ -------- -------- ------ ------ + // POSITION 0 xyz 0 NONE float xy + // + // + // Output signature: + // + // Name Index Mask Register SysValue Format Used + // -------------------- ----- ------ -------- -------- ------ ------ + // SV_Position 0 xyzw 0 POS float xyzw + // TEXCOORD 0 xy 1 NONE float xy + // TEXCOORD 1 zw 1 NONE float zw + // + // + // Constant buffer to DX9 shader constant mappings: + // + // Target Reg Buffer Start Reg # of Regs Data Conversion + // ---------- ------- --------- --------- ---------------------- + // c1 cb0 0 1 ( FLT, FLT, FLT, FLT) + // c2 cb0 2 1 ( FLT, FLT, FLT, FLT) + // c3 cb1 0 2 ( FLT, FLT, FLT, FLT) + // c5 cb1 3 1 ( FLT, FLT, FLT, FLT) + // + // + // Runtime generated constant mappings: + // + // Target Reg Constant Description + // ---------- -------------------------------------------------- + // c0 Vertex Shader position offset + // + // + // Level9 shader bytecode: + // + vs_2_x + def c6, 1, 0.5, 0, 0 + dcl_texcoord v0 + mad oT0.xy, v0, c2.zwzw, c2 + mad r0.xy, v0, c1.zwzw, c1 + add r0.z, r0.x, c6.x + mul r0.z, r0.z, c5.x + mul r1.x, r0.z, c6.y + add r0.z, -r0.y, c6.x + add oPos.xy, r0, c0 + mul r0.x, r0.z, c5.y + mul r1.y, r0.x, c6.y + mov r1.z, c6.x + dp3 oT0.w, r1, c3 + dp3 oT0.z, r1, c4 + mov oPos.zw, c6.xyzx + + // approximately 13 instruction slots used + vs_4_0 + dcl_constantbuffer cb0[3], immediateIndexed + dcl_constantbuffer cb1[4], immediateIndexed + dcl_input v0.xy + dcl_output_siv o0.xyzw, position + dcl_output o1.xy + dcl_output o1.zw + dcl_temps 2 + mov o0.zw, l(0,0,0,1.000000) + mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx + mov o0.xy, r0.xyxx + add r0.x, r0.x, l(1.000000) + add r0.y, -r0.y, l(1.000000) + mul r0.xy, r0.xyxx, cb1[3].xyxx + mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) + mov r1.z, l(1.000000) + dp3 o1.z, r1.xyzx, cb1[0].xyzx + dp3 o1.w, r1.xyzx, cb1[1].xyzx + mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx + ret + // Approximately 12 instruction slots used + + }; + GeometryShader = NULL; + PixelShader = asm { + // + // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 + // + // + // Buffer Definitions: + // + // cbuffer cb2 + // { + // + // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 [unused] + // float2 dimensions; // Offset: 48 Size: 8 [unused] + // float3 diff; // Offset: 64 Size: 12 + // float2 center1; // Offset: 80 Size: 8 + // float A; // Offset: 88 Size: 4 + // float radius1; // Offset: 92 Size: 4 + // float sq_radius1; // Offset: 96 Size: 4 + // + // } + // + // + // Resource Bindings: + // + // Name Type Format Dim Slot Elements + // ------------------------------ ---------- ------- ----------- ---- -------- + // sSampler sampler NA NA 0 1 + // sMaskSampler sampler NA NA 1 1 + // tex texture float4 2d 0 1 + // mask texture float4 2d 1 1 + // cb2 cbuffer NA NA 0 1 + // + // + // + // Input signature: + // + // Name Index Mask Register SysValue Format Used + // -------------------- ----- ------ -------- -------- ------ ------ + // SV_Position 0 xyzw 0 POS float + // TEXCOORD 0 xy 1 NONE float xy + // TEXCOORD 1 zw 1 NONE float zw + // + // + // Output signature: + // + // Name Index Mask Register SysValue Format Used + // -------------------- ----- ------ -------- -------- ------ ------ + // SV_Target 0 xyzw 0 TARGET float xyzw + // + // + // Constant buffer to DX9 shader constant mappings: + // + // Target Reg Buffer Start Reg # of Regs Data Conversion + // ---------- ------- --------- --------- ---------------------- + // c0 cb0 4 3 ( FLT, FLT, FLT, FLT) + // + // + // Sampler/Resource to DX9 shader sampler mappings: + // + // Target Sampler Source Sampler Source Resource + // -------------- --------------- ---------------- + // s0 s0 t0 + // s1 s1 t1 + // + // + // Level9 shader bytecode: + // + ps_2_x + def c3, 0.5, 0, 0, 0 + def c4, 1, -1, 0, -0 + dcl t0 + dcl_2d s0 + dcl_2d s1 + add r0.xy, t0.wzzw, -c1 + dp2add r0.w, r0, r0, -c2.x + mul r0.w, r0.w, c1.z + mov r0.z, c1.w + dp3 r0.x, r0, c0 + mad r0.y, r0.x, r0.x, -r0.w + abs r0.z, r0.y + rsq r0.z, r0.z + rcp r1.x, r0.z + mov r1.yz, -r1.x + add r0.xzw, r0.x, r1.xyyz + rcp r1.x, c1.z + mul r0.xzw, r0, r1.x + mov r1.w, c1.w + mad r1.xyz, r0.xzww, c0.z, r1.w + cmp r2.x, r1.x, r0.x, r0.w + cmp r0.xzw, r1.xyyz, c4.xyxy, c4.zyzw + mov r2.y, c3.x + texld r1, t0, s1 + texld r2, r2, s0 + mul r1, r1.w, r2 + add r0.w, r0.w, r0.x + cmp r0.x, r0.w, r0.x, r0.z + cmp r1, -r0.x, c4.z, r1 + cmp r0, r0.y, r1, c4.z + mov oC0, r0 + + // approximately 27 instruction slots used (2 texture, 25 arithmetic) + ps_4_0 + dcl_constantbuffer cb0[7], immediateIndexed + dcl_sampler s0, mode_default + dcl_sampler s1, mode_default + dcl_resource_texture2d (float,float,float,float) t0 + dcl_resource_texture2d (float,float,float,float) t1 + dcl_input_ps linear v1.xy + dcl_input_ps linear v1.zw + dcl_output o0.xyzw + dcl_temps 3 + add r0.xy, v1.zwzz, -cb0[5].xyxx + mov r0.z, cb0[5].w + dp3 r0.z, r0.xyzx, cb0[4].xyzx + dp2 r0.x, r0.xyxx, r0.xyxx + add r0.x, r0.x, -cb0[6].x + mul r0.x, r0.x, cb0[5].z + mad r0.x, r0.z, r0.z, -r0.x + lt r0.y, r0.x, l(0.000000) + sqrt r1.x, |r0.x| + mov r1.y, -r1.x + add r0.xz, r0.zzzz, r1.xxyx + div r0.xz, r0.xxzx, cb0[5].zzzz + mul r1.xy, r0.xzxx, cb0[4].zzzz + ge r1.xy, r1.xyxx, -cb0[5].wwww + and r1.xy, r1.xyxx, l(0x3f800000, 0x3f800000, 0, 0) + add r0.x, -r0.z, r0.x + mad r2.x, r1.x, r0.x, r0.z + mov r2.y, l(0.500000) + sample r2.xyzw, r2.xyxx, t0.xyzw, s0 + if_nz r0.y + mov o0.xyzw, l(0,0,0,0) + ret + endif + max r0.x, r1.y, r1.x + ge r0.x, l(0.000000), r0.x + if_nz r0.x + mov o0.xyzw, l(0,0,0,0) + ret + endif + sample r0.xyzw, v1.xyxx, t1.xyzw, s1 + mul o0.xyzw, r0.wwww, r2.xyzw + ret + // Approximately 32 instruction slots used + + }; + } + + pass P1 + { + RasterizerState = TextureRast; + VertexShader = asm { + // + // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 + // + // + // Buffer Definitions: + // + // cbuffer cb0 + // { + // + // float4 QuadDesc; // Offset: 0 Size: 16 + // float4 TexCoords; // Offset: 16 Size: 16 [unused] + // float4 MaskTexCoords; // Offset: 32 Size: 16 + // + // } + // + // cbuffer cb2 + // { + // + // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 + // float2 dimensions; // Offset: 48 Size: 8 + // float3 diff; // Offset: 64 Size: 12 [unused] + // float2 center1; // Offset: 80 Size: 8 [unused] + // float A; // Offset: 88 Size: 4 [unused] + // float radius1; // Offset: 92 Size: 4 [unused] + // float sq_radius1; // Offset: 96 Size: 4 [unused] + // + // } + // + // + // Resource Bindings: + // + // Name Type Format Dim Slot Elements + // ------------------------------ ---------- ------- ----------- ---- -------- + // cb0 cbuffer NA NA 0 1 + // cb2 cbuffer NA NA 1 1 + // + // + // + // Input signature: + // + // Name Index Mask Register SysValue Format Used + // -------------------- ----- ------ -------- -------- ------ ------ + // POSITION 0 xyz 0 NONE float xy + // + // + // Output signature: + // + // Name Index Mask Register SysValue Format Used + // -------------------- ----- ------ -------- -------- ------ ------ + // SV_Position 0 xyzw 0 POS float xyzw + // TEXCOORD 0 xy 1 NONE float xy + // TEXCOORD 1 zw 1 NONE float zw + // + // + // Constant buffer to DX9 shader constant mappings: + // + // Target Reg Buffer Start Reg # of Regs Data Conversion + // ---------- ------- --------- --------- ---------------------- + // c1 cb0 0 1 ( FLT, FLT, FLT, FLT) + // c2 cb0 2 1 ( FLT, FLT, FLT, FLT) + // c3 cb1 0 2 ( FLT, FLT, FLT, FLT) + // c5 cb1 3 1 ( FLT, FLT, FLT, FLT) + // + // + // Runtime generated constant mappings: + // + // Target Reg Constant Description + // ---------- -------------------------------------------------- + // c0 Vertex Shader position offset + // + // + // Level9 shader bytecode: + // + vs_2_x + def c6, 1, 0.5, 0, 0 + dcl_texcoord v0 + mad oT0.xy, v0, c2.zwzw, c2 + mad r0.xy, v0, c1.zwzw, c1 + add r0.z, r0.x, c6.x + mul r0.z, r0.z, c5.x + mul r1.x, r0.z, c6.y + add r0.z, -r0.y, c6.x + add oPos.xy, r0, c0 + mul r0.x, r0.z, c5.y + mul r1.y, r0.x, c6.y + mov r1.z, c6.x + dp3 oT0.w, r1, c3 + dp3 oT0.z, r1, c4 + mov oPos.zw, c6.xyzx + + // approximately 13 instruction slots used + vs_4_0 + dcl_constantbuffer cb0[3], immediateIndexed + dcl_constantbuffer cb1[4], immediateIndexed + dcl_input v0.xy + dcl_output_siv o0.xyzw, position + dcl_output o1.xy + dcl_output o1.zw + dcl_temps 2 + mov o0.zw, l(0,0,0,1.000000) + mad r0.xy, v0.xyxx, cb0[0].zwzz, cb0[0].xyxx + mov o0.xy, r0.xyxx + add r0.x, r0.x, l(1.000000) + add r0.y, -r0.y, l(1.000000) + mul r0.xy, r0.xyxx, cb1[3].xyxx + mul r1.xy, r0.xyxx, l(0.500000, 0.500000, 0.000000, 0.000000) + mov r1.z, l(1.000000) + dp3 o1.z, r1.xyzx, cb1[0].xyzx + dp3 o1.w, r1.xyzx, cb1[1].xyzx + mad o1.xy, v0.xyxx, cb0[2].zwzz, cb0[2].xyxx + ret + // Approximately 12 instruction slots used + + }; + GeometryShader = NULL; + PixelShader = asm { + // + // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 + // + // + // Buffer Definitions: + // + // cbuffer cb2 + // { + // + // float3x3 DeviceSpaceToUserSpace; // Offset: 0 Size: 44 [unused] + // float2 dimensions; // Offset: 48 Size: 8 [unused] + // float3 diff; // Offset: 64 Size: 12 + // float2 center1; // Offset: 80 Size: 8 + // float A; // Offset: 88 Size: 4 [unused] + // float radius1; // Offset: 92 Size: 4 + // float sq_radius1; // Offset: 96 Size: 4 [unused] + // + // } + // + // + // Resource Bindings: + // + // Name Type Format Dim Slot Elements + // ------------------------------ ---------- ------- ----------- ---- -------- + // sSampler sampler NA NA 0 1 + // sMaskSampler sampler NA NA 1 1 + // tex texture float4 2d 0 1 + // mask texture float4 2d 1 1 + // cb2 cbuffer NA NA 0 1 + // + // + // + // Input signature: + // + // Name Index Mask Register SysValue Format Used + // -------------------- ----- ------ -------- -------- ------ ------ + // SV_Position 0 xyzw 0 POS float + // TEXCOORD 0 xy 1 NONE float xy + // TEXCOORD 1 zw 1 NONE float zw + // + // + // Output signature: + // + // Name Index Mask Register SysValue Format Used + // -------------------- ----- ------ -------- -------- ------ ------ + // SV_Target 0 xyzw 0 TARGET float xyzw + // + // + // Constant buffer to DX9 shader constant mappings: + // + // Target Reg Buffer Start Reg # of Regs Data Conversion + // ---------- ------- --------- --------- ---------------------- + // c0 cb0 4 2 ( FLT, FLT, FLT, FLT) + // + // + // Sampler/Resource to DX9 shader sampler mappings: + // + // Target Sampler Source Sampler Source Resource + // -------------- --------------- ---------------- + // s0 s0 t0 + // s1 s1 t1 + // + // + // Level9 shader bytecode: + // + ps_2_x + def c2, 0.5, 0, 0, 0 + dcl t0 + dcl_2d s0 + dcl_2d s1 + mul r0.w, c1.w, c1.w + add r0.xy, t0.wzzw, -c1 + dp2add r0.w, r0, r0, -r0.w + mul r0.w, r0.w, c2.x + mov r0.z, c1.w + dp3 r0.x, r0, c0 + rcp r0.x, r0.x + mul r0.x, r0.x, r0.w + mov r0.y, c2.x + texld r1, t0, s1 + texld r2, r0, s0 + mov r0.w, c1.w + mad r0.x, r0.x, -c0.z, -r0.w + mul r1, r1.w, r2 + cmp r0, r0.x, c2.y, r1 + mov oC0, r0 + + // approximately 17 instruction slots used (2 texture, 15 arithmetic) + ps_4_0 + dcl_constantbuffer cb0[6], immediateIndexed + dcl_sampler s0, mode_default + dcl_sampler s1, mode_default + dcl_resource_texture2d (float,float,float,float) t0 + dcl_resource_texture2d (float,float,float,float) t1 + dcl_input_ps linear v1.xy + dcl_input_ps linear v1.zw + dcl_output o0.xyzw + dcl_temps 2 + add r0.xy, v1.zwzz, -cb0[5].xyxx + mov r0.z, cb0[5].w + dp3 r0.z, r0.xyzx, cb0[4].xyzx + dp2 r0.x, r0.xyxx, r0.xyxx + mad r0.x, -cb0[5].w, cb0[5].w, r0.x + mul r0.x, r0.x, l(0.500000) + div r0.x, r0.x, r0.z + mul r0.z, r0.x, cb0[4].z + ge r0.z, -cb0[5].w, r0.z + mov r0.y, l(0.500000) + sample r1.xyzw, r0.xyxx, t0.xyzw, s0 + if_nz r0.z + mov o0.xyzw, l(0,0,0,0) + ret + endif + sample r0.xyzw, v1.xyxx, t1.xyzw, s1 + mul o0.xyzw, r0.wwww, r1.xyzw + ret + // Approximately 18 instruction slots used + + }; + } + +} + technique10 SampleMaskedTexture { pass P0 { RasterizerState = TextureRast; VertexShader = asm { // // Generated by Microsoft (R) HLSL Shader Compiler 9.29.952.3111 @@ -1090,36 +1612,36 @@ technique10 SampleTextureWithShadow } } #endif const BYTE d2deffect[] = { - 68, 88, 66, 67, 244, 198, - 222, 61, 43, 19, 42, 56, - 130, 197, 151, 242, 151, 57, - 208, 42, 1, 0, 0, 0, - 175, 67, 0, 0, 1, 0, + 68, 88, 66, 67, 85, 69, + 6, 83, 35, 167, 246, 209, + 147, 86, 117, 76, 228, 140, + 253, 202, 1, 0, 0, 0, + 169, 101, 0, 0, 1, 0, 0, 0, 36, 0, 0, 0, - 70, 88, 49, 48, 131, 67, + 70, 88, 49, 48, 125, 101, 0, 0, 1, 16, 255, 254, - 2, 0, 0, 0, 7, 0, + 3, 0, 0, 0, 14, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 3, 0, 0, 0, 203, 61, + 4, 0, 0, 0, 69, 94, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 10, 0, - 0, 0, 10, 0, 0, 0, + 0, 0, 0, 0, 14, 0, + 0, 0, 14, 0, 0, 0, 0, 0, 0, 0, 99, 98, 48, 0, 102, 108, 111, 97, 116, 52, 0, 8, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 16, 0, 0, 0, 10, 33, 0, 0, 81, 117, 97, 100, 68, @@ -1136,259 +1658,724 @@ const BYTE d2deffect[] = 66, 108, 117, 114, 79, 102, 102, 115, 101, 116, 115, 72, 0, 66, 108, 117, 114, 79, 102, 102, 115, 101, 116, 115, 86, 0, 66, 108, 117, 114, 87, 101, 105, 103, 104, 116, 115, 0, 83, 104, 97, 100, 111, 119, 67, 111, 108, 111, - 114, 0, 84, 101, 120, 116, - 117, 114, 101, 50, 68, 0, - 158, 0, 0, 0, 2, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 12, 0, 0, 0, 116, 101, - 120, 0, 109, 97, 115, 107, - 0, 83, 97, 109, 112, 108, - 101, 114, 83, 116, 97, 116, - 101, 0, 205, 0, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, + 114, 0, 99, 98, 50, 0, + 102, 108, 111, 97, 116, 51, + 120, 51, 0, 162, 0, 0, + 0, 1, 0, 0, 0, 0, + 0, 0, 0, 44, 0, 0, + 0, 48, 0, 0, 0, 36, + 0, 0, 0, 11, 91, 0, + 0, 68, 101, 118, 105, 99, + 101, 83, 112, 97, 99, 101, + 84, 111, 85, 115, 101, 114, + 83, 112, 97, 99, 101, 0, + 102, 108, 111, 97, 116, 50, + 0, 222, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, + 0, 8, 0, 0, 0, 16, + 0, 0, 0, 8, 0, 0, + 0, 10, 17, 0, 0, 100, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 102, 108, + 111, 97, 116, 51, 0, 12, + 1, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 12, + 0, 0, 0, 16, 0, 0, + 0, 12, 0, 0, 0, 10, + 25, 0, 0, 100, 105, 102, + 102, 0, 99, 101, 110, 116, + 101, 114, 49, 0, 102, 108, + 111, 97, 116, 0, 60, 1, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 16, 0, 0, 0, + 4, 0, 0, 0, 9, 9, + 0, 0, 65, 0, 114, 97, + 100, 105, 117, 115, 49, 0, + 115, 113, 95, 114, 97, 100, + 105, 117, 115, 49, 0, 84, + 101, 120, 116, 117, 114, 101, + 50, 68, 0, 115, 1, 0, + 0, 2, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 12, 0, 0, + 0, 116, 101, 120, 0, 109, + 97, 115, 107, 0, 83, 97, + 109, 112, 108, 101, 114, 83, + 116, 97, 116, 101, 0, 162, + 1, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 21, + 0, 0, 0, 115, 83, 97, + 109, 112, 108, 101, 114, 0, + 1, 0, 0, 0, 2, 0, 0, 0, 21, 0, 0, 0, - 115, 83, 97, 109, 112, 108, - 101, 114, 0, 1, 0, 0, - 0, 2, 0, 0, 0, 21, - 0, 0, 0, 1, 0, 0, - 0, 2, 0, 0, 0, 3, - 0, 0, 0, 1, 0, 0, - 0, 2, 0, 0, 0, 3, - 0, 0, 0, 115, 77, 97, - 115, 107, 83, 97, 109, 112, - 108, 101, 114, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 21, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 1, 0, - 0, 0, 2, 0, 0, 0, - 3, 0, 0, 0, 115, 83, - 104, 97, 100, 111, 119, 83, + 1, 0, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 1, 0, 0, 0, 2, 0, + 0, 0, 3, 0, 0, 0, + 115, 77, 97, 115, 107, 83, 97, 109, 112, 108, 101, 114, 0, 1, 0, 0, 0, 2, 0, 0, 0, 21, 0, 0, 0, 1, 0, 0, 0, 2, - 0, 0, 0, 4, 0, 0, + 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 2, - 0, 0, 0, 4, 0, 0, - 0, 4, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 82, 97, 115, 116, 101, - 114, 105, 122, 101, 114, 83, - 116, 97, 116, 101, 0, 171, - 1, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 4, - 0, 0, 0, 84, 101, 120, - 116, 117, 114, 101, 82, 97, - 115, 116, 0, 1, 0, 0, - 0, 2, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, + 0, 0, 0, 3, 0, 0, + 0, 115, 83, 104, 97, 100, + 111, 119, 83, 97, 109, 112, + 108, 101, 114, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 21, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 4, 0, 0, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 4, 0, 0, 0, 4, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 82, 97, + 115, 116, 101, 114, 105, 122, + 101, 114, 83, 116, 97, 116, + 101, 0, 128, 2, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 84, 101, 120, 116, 117, 114, + 101, 82, 97, 115, 116, 0, + 1, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, + 0, 0, 1, 0, 0, 0, + 66, 108, 101, 110, 100, 83, + 116, 97, 116, 101, 0, 208, + 2, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 2, + 0, 0, 0, 83, 104, 97, + 100, 111, 119, 66, 108, 101, + 110, 100, 72, 0, 1, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 15, 0, 0, 0, 83, 104, + 97, 100, 111, 119, 66, 108, + 101, 110, 100, 86, 0, 1, + 0, 0, 0, 2, 0, 0, + 0, 1, 0, 0, 0, 1, + 0, 0, 0, 2, 0, 0, + 0, 2, 0, 0, 0, 1, + 0, 0, 0, 2, 0, 0, + 0, 6, 0, 0, 0, 1, + 0, 0, 0, 2, 0, 0, + 0, 1, 0, 0, 0, 1, + 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0, 1, - 0, 0, 0, 66, 108, 101, - 110, 100, 83, 116, 97, 116, - 101, 0, 251, 1, 0, 0, - 2, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, + 0, 6, 0, 0, 0, 1, + 0, 0, 0, 2, 0, 0, + 0, 1, 0, 0, 0, 1, + 0, 0, 0, 3, 0, 0, + 0, 15, 0, 0, 0, 83, + 97, 109, 112, 108, 101, 84, + 101, 120, 116, 117, 114, 101, + 0, 80, 48, 0, 36, 4, + 0, 0, 68, 88, 66, 67, + 116, 139, 68, 62, 73, 113, + 92, 4, 72, 76, 225, 161, + 30, 132, 222, 233, 1, 0, + 0, 0, 36, 4, 0, 0, + 6, 0, 0, 0, 56, 0, + 0, 0, 248, 0, 0, 0, + 244, 1, 0, 0, 112, 2, + 0, 0, 128, 3, 0, 0, + 180, 3, 0, 0, 65, 111, + 110, 57, 184, 0, 0, 0, + 184, 0, 0, 0, 0, 2, + 254, 255, 132, 0, 0, 0, + 52, 0, 0, 0, 1, 0, + 36, 0, 0, 0, 48, 0, + 0, 0, 48, 0, 0, 0, + 36, 0, 1, 0, 48, 0, + 0, 0, 0, 0, 3, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 2, + 254, 255, 81, 0, 0, 5, + 4, 0, 15, 160, 0, 0, + 0, 0, 0, 0, 128, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 31, 0, 0, 2, + 5, 0, 0, 128, 0, 0, + 15, 144, 4, 0, 0, 4, + 0, 0, 3, 224, 0, 0, + 228, 144, 2, 0, 238, 160, + 2, 0, 228, 160, 4, 0, + 0, 4, 0, 0, 12, 224, + 0, 0, 20, 144, 3, 0, + 180, 160, 3, 0, 20, 160, + 4, 0, 0, 4, 0, 0, + 3, 128, 0, 0, 228, 144, + 1, 0, 238, 160, 1, 0, + 228, 160, 2, 0, 0, 3, + 0, 0, 3, 192, 0, 0, + 228, 128, 0, 0, 228, 160, + 1, 0, 0, 2, 0, 0, + 12, 192, 4, 0, 68, 160, + 255, 255, 0, 0, 83, 72, + 68, 82, 244, 0, 0, 0, + 64, 0, 1, 0, 61, 0, + 0, 0, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 95, 0, 0, 3, 50, 16, + 16, 0, 0, 0, 0, 0, + 103, 0, 0, 4, 242, 32, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 101, 0, + 0, 3, 50, 32, 16, 0, + 1, 0, 0, 0, 101, 0, + 0, 3, 194, 32, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 32, 16, 0, + 0, 0, 0, 0, 70, 16, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 8, 194, 32, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 128, 63, 50, 0, 0, 11, + 50, 32, 16, 0, 1, 0, + 0, 0, 70, 16, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 194, 32, 16, 0, + 1, 0, 0, 0, 6, 20, + 16, 0, 0, 0, 0, 0, + 166, 142, 32, 0, 0, 0, 0, 0, 2, 0, 0, 0, - 83, 104, 97, 100, 111, 119, - 66, 108, 101, 110, 100, 72, - 0, 1, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 3, - 0, 0, 0, 15, 0, 0, - 0, 83, 104, 97, 100, 111, - 119, 66, 108, 101, 110, 100, - 86, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 2, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 6, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 62, 0, 0, 1, 83, 84, + 65, 84, 116, 0, 0, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 82, 68, 69, 70, + 8, 1, 0, 0, 1, 0, + 0, 0, 64, 0, 0, 0, + 1, 0, 0, 0, 28, 0, + 0, 0, 0, 4, 254, 255, + 0, 1, 0, 0, 212, 0, + 0, 0, 60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 99, 98, + 48, 0, 60, 0, 0, 0, + 3, 0, 0, 0, 88, 0, + 0, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 160, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 172, 0, 0, 0, 0, 0, + 0, 0, 188, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 172, 0, 0, 0, 0, 0, + 0, 0, 198, 0, 0, 0, + 32, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 172, 0, 0, 0, 0, 0, + 0, 0, 81, 117, 97, 100, + 68, 101, 115, 99, 0, 171, + 171, 171, 1, 0, 3, 0, + 1, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 84, 101, 120, 67, 111, 111, + 114, 100, 115, 0, 77, 97, + 115, 107, 84, 101, 120, 67, + 111, 111, 114, 100, 115, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 57, + 46, 50, 57, 46, 57, 53, + 50, 46, 51, 49, 49, 49, + 0, 171, 171, 171, 73, 83, + 71, 78, 44, 0, 0, 0, + 1, 0, 0, 0, 8, 0, + 0, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 7, 3, + 0, 0, 80, 79, 83, 73, + 84, 73, 79, 78, 0, 171, + 171, 171, 79, 83, 71, 78, + 104, 0, 0, 0, 3, 0, + 0, 0, 8, 0, 0, 0, + 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 6, 0, - 0, 0, 1, 0, 0, 0, - 2, 0, 0, 0, 1, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, + 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 3, 12, 0, 0, + 92, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 12, 3, 0, 0, + 83, 86, 95, 80, 111, 115, + 105, 116, 105, 111, 110, 0, + 84, 69, 88, 67, 79, 79, + 82, 68, 0, 171, 171, 171, + 154, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, - 3, 0, 0, 0, 15, 0, - 0, 0, 83, 97, 109, 112, - 108, 101, 84, 101, 120, 116, - 117, 114, 101, 0, 80, 48, - 0, 36, 4, 0, 0, 68, - 88, 66, 67, 116, 139, 68, - 62, 73, 113, 92, 4, 72, - 76, 225, 161, 30, 132, 222, - 233, 1, 0, 0, 0, 36, - 4, 0, 0, 6, 0, 0, - 0, 56, 0, 0, 0, 248, - 0, 0, 0, 244, 1, 0, - 0, 112, 2, 0, 0, 128, - 3, 0, 0, 180, 3, 0, - 0, 65, 111, 110, 57, 184, - 0, 0, 0, 184, 0, 0, - 0, 0, 2, 254, 255, 132, - 0, 0, 0, 52, 0, 0, - 0, 1, 0, 36, 0, 0, - 0, 48, 0, 0, 0, 48, - 0, 0, 0, 36, 0, 1, - 0, 48, 0, 0, 0, 0, - 0, 3, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 1, 2, 254, 255, 81, - 0, 0, 5, 4, 0, 15, - 160, 0, 0, 0, 0, 0, - 0, 128, 63, 0, 0, 0, - 0, 0, 0, 0, 0, 31, - 0, 0, 2, 5, 0, 0, - 128, 0, 0, 15, 144, 4, - 0, 0, 4, 0, 0, 3, - 224, 0, 0, 228, 144, 2, - 0, 238, 160, 2, 0, 228, - 160, 4, 0, 0, 4, 0, - 0, 12, 224, 0, 0, 20, - 144, 3, 0, 180, 160, 3, - 0, 20, 160, 4, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 212, 2, 0, 0, + 68, 88, 66, 67, 22, 206, + 82, 103, 196, 235, 84, 233, + 156, 39, 210, 152, 32, 145, + 169, 162, 1, 0, 0, 0, + 212, 2, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 164, 0, 0, 0, 16, 1, + 0, 0, 140, 1, 0, 0, + 48, 2, 0, 0, 160, 2, + 0, 0, 65, 111, 110, 57, + 100, 0, 0, 0, 100, 0, + 0, 0, 0, 2, 255, 255, + 60, 0, 0, 0, 40, 0, + 0, 0, 0, 0, 40, 0, + 0, 0, 40, 0, 0, 0, + 40, 0, 1, 0, 36, 0, + 0, 0, 40, 0, 0, 0, + 0, 0, 1, 2, 255, 255, + 31, 0, 0, 2, 0, 0, + 0, 128, 0, 0, 15, 176, + 31, 0, 0, 2, 0, 0, + 0, 144, 0, 8, 15, 160, + 66, 0, 0, 3, 0, 0, + 15, 128, 0, 0, 228, 176, + 0, 8, 228, 160, 1, 0, + 0, 2, 0, 8, 15, 128, + 0, 0, 228, 128, 255, 255, + 0, 0, 83, 72, 68, 82, + 100, 0, 0, 0, 64, 0, + 0, 0, 25, 0, 0, 0, + 90, 0, 0, 3, 0, 96, + 16, 0, 0, 0, 0, 0, + 88, 24, 0, 4, 0, 112, + 16, 0, 0, 0, 0, 0, + 85, 85, 0, 0, 98, 16, + 0, 3, 50, 16, 16, 0, + 1, 0, 0, 0, 101, 0, + 0, 3, 242, 32, 16, 0, + 0, 0, 0, 0, 69, 0, + 0, 9, 242, 32, 16, 0, + 0, 0, 0, 0, 70, 16, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 116, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 82, 68, 69, 70, 156, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 2, 0, + 0, 0, 28, 0, 0, 0, + 0, 4, 255, 255, 0, 1, + 0, 0, 105, 0, 0, 0, + 92, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 101, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 4, 0, 0, 0, + 255, 255, 255, 255, 0, 0, + 0, 0, 1, 0, 0, 0, + 12, 0, 0, 0, 115, 83, + 97, 109, 112, 108, 101, 114, + 0, 116, 101, 120, 0, 77, + 105, 99, 114, 111, 115, 111, + 102, 116, 32, 40, 82, 41, + 32, 72, 76, 83, 76, 32, + 83, 104, 97, 100, 101, 114, + 32, 67, 111, 109, 112, 105, + 108, 101, 114, 32, 57, 46, + 50, 57, 46, 57, 53, 50, + 46, 51, 49, 49, 49, 0, + 171, 171, 73, 83, 71, 78, + 104, 0, 0, 0, 3, 0, + 0, 0, 8, 0, 0, 0, + 80, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, + 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 3, 3, 0, 0, + 92, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 12, 0, 0, 0, + 83, 86, 95, 80, 111, 115, + 105, 116, 105, 111, 110, 0, + 84, 69, 88, 67, 79, 79, + 82, 68, 0, 171, 171, 171, + 79, 83, 71, 78, 44, 0, + 0, 0, 1, 0, 0, 0, + 8, 0, 0, 0, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 83, 86, + 95, 84, 97, 114, 103, 101, + 116, 0, 171, 171, 214, 7, + 0, 0, 0, 0, 0, 0, + 83, 97, 109, 112, 108, 101, + 82, 97, 100, 105, 97, 108, + 71, 114, 97, 100, 105, 101, + 110, 116, 0, 4, 7, 0, + 0, 68, 88, 66, 67, 171, + 7, 14, 215, 173, 41, 24, + 247, 237, 1, 38, 39, 209, + 221, 241, 232, 1, 0, 0, + 0, 4, 7, 0, 0, 6, + 0, 0, 0, 56, 0, 0, + 0, 148, 1, 0, 0, 104, + 3, 0, 0, 228, 3, 0, + 0, 96, 6, 0, 0, 148, + 6, 0, 0, 65, 111, 110, + 57, 84, 1, 0, 0, 84, + 1, 0, 0, 0, 2, 254, + 255, 252, 0, 0, 0, 88, + 0, 0, 0, 4, 0, 36, + 0, 0, 0, 84, 0, 0, + 0, 84, 0, 0, 0, 36, + 0, 1, 0, 84, 0, 0, + 0, 0, 0, 1, 0, 1, + 0, 0, 0, 0, 0, 0, + 0, 2, 0, 1, 0, 2, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 2, 0, 3, + 0, 0, 0, 0, 0, 1, + 0, 3, 0, 1, 0, 5, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 2, 254, + 255, 81, 0, 0, 5, 6, + 0, 15, 160, 0, 0, 128, + 63, 0, 0, 0, 63, 0, + 0, 0, 0, 0, 0, 0, + 0, 31, 0, 0, 2, 5, + 0, 0, 128, 0, 0, 15, + 144, 4, 0, 0, 4, 0, + 0, 3, 224, 0, 0, 228, + 144, 2, 0, 238, 160, 2, + 0, 228, 160, 4, 0, 0, 4, 0, 0, 3, 128, 0, 0, 228, 144, 1, 0, 238, 160, 1, 0, 228, 160, 2, - 0, 0, 3, 0, 0, 3, - 192, 0, 0, 228, 128, 0, - 0, 228, 160, 1, 0, 0, - 2, 0, 0, 12, 192, 4, - 0, 68, 160, 255, 255, 0, - 0, 83, 72, 68, 82, 244, - 0, 0, 0, 64, 0, 1, - 0, 61, 0, 0, 0, 89, + 0, 0, 3, 0, 0, 4, + 128, 0, 0, 0, 128, 6, + 0, 0, 160, 5, 0, 0, + 3, 0, 0, 4, 128, 0, + 0, 170, 128, 5, 0, 0, + 160, 5, 0, 0, 3, 1, + 0, 1, 128, 0, 0, 170, + 128, 6, 0, 85, 160, 2, + 0, 0, 3, 0, 0, 4, + 128, 0, 0, 85, 129, 6, + 0, 0, 160, 2, 0, 0, + 3, 0, 0, 3, 192, 0, + 0, 228, 128, 0, 0, 228, + 160, 5, 0, 0, 3, 0, + 0, 1, 128, 0, 0, 170, + 128, 5, 0, 85, 160, 5, + 0, 0, 3, 1, 0, 2, + 128, 0, 0, 0, 128, 6, + 0, 85, 160, 1, 0, 0, + 2, 1, 0, 4, 128, 6, + 0, 0, 160, 8, 0, 0, + 3, 0, 0, 8, 224, 1, + 0, 228, 128, 3, 0, 228, + 160, 8, 0, 0, 3, 0, + 0, 4, 224, 1, 0, 228, + 128, 4, 0, 228, 160, 1, + 0, 0, 2, 0, 0, 12, + 192, 6, 0, 36, 160, 255, + 255, 0, 0, 83, 72, 68, + 82, 204, 1, 0, 0, 64, + 0, 1, 0, 115, 0, 0, + 0, 89, 0, 0, 4, 70, + 142, 32, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 89, 0, 0, 4, 70, 142, 32, - 0, 0, 0, 0, 0, 3, + 0, 1, 0, 0, 0, 4, 0, 0, 0, 95, 0, 0, 3, 50, 16, 16, 0, 0, 0, 0, 0, 103, 0, 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, 0, 0, 0, 101, 0, 0, 3, 50, 32, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 194, 32, 16, 0, 1, 0, 0, - 0, 50, 0, 0, 11, 50, - 32, 16, 0, 0, 0, 0, - 0, 70, 16, 16, 0, 0, - 0, 0, 0, 230, 138, 32, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 70, 128, 32, - 0, 0, 0, 0, 0, 0, + 0, 104, 0, 0, 2, 2, 0, 0, 0, 54, 0, 0, 8, 194, 32, 16, 0, 0, 0, 0, 0, 2, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128, 63, 50, - 0, 0, 11, 50, 32, 16, - 0, 1, 0, 0, 0, 70, + 0, 0, 11, 50, 0, 16, + 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, - 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 50, 0, 0, 11, 194, + 0, 0, 0, 0, 0, 0, + 0, 54, 0, 0, 5, 50, + 32, 16, 0, 0, 0, 0, + 0, 70, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, + 7, 18, 0, 16, 0, 0, + 0, 0, 0, 10, 0, 16, + 0, 0, 0, 0, 0, 1, + 64, 0, 0, 0, 0, 128, + 63, 0, 0, 0, 8, 34, + 0, 16, 0, 0, 0, 0, + 0, 26, 0, 16, 128, 65, + 0, 0, 0, 0, 0, 0, + 0, 1, 64, 0, 0, 0, + 0, 128, 63, 56, 0, 0, + 8, 50, 0, 16, 0, 0, + 0, 0, 0, 70, 0, 16, + 0, 0, 0, 0, 0, 70, + 128, 32, 0, 1, 0, 0, + 0, 3, 0, 0, 0, 56, + 0, 0, 10, 50, 0, 16, + 0, 1, 0, 0, 0, 70, + 0, 16, 0, 0, 0, 0, + 0, 2, 64, 0, 0, 0, + 0, 0, 63, 0, 0, 0, + 63, 0, 0, 0, 0, 0, + 0, 0, 0, 54, 0, 0, + 5, 66, 0, 16, 0, 1, + 0, 0, 0, 1, 64, 0, + 0, 0, 0, 128, 63, 16, + 0, 0, 8, 66, 32, 16, + 0, 1, 0, 0, 0, 70, + 2, 16, 0, 1, 0, 0, + 0, 70, 130, 32, 0, 1, + 0, 0, 0, 0, 0, 0, + 0, 16, 0, 0, 8, 130, 32, 16, 0, 1, 0, 0, - 0, 6, 20, 16, 0, 0, - 0, 0, 0, 166, 142, 32, - 0, 0, 0, 0, 0, 2, - 0, 0, 0, 6, 132, 32, - 0, 0, 0, 0, 0, 2, - 0, 0, 0, 62, 0, 0, - 1, 83, 84, 65, 84, 116, - 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 70, 2, 16, 0, 1, + 0, 0, 0, 70, 130, 32, + 0, 1, 0, 0, 0, 1, + 0, 0, 0, 50, 0, 0, + 11, 50, 32, 16, 0, 1, + 0, 0, 0, 70, 16, 16, + 0, 0, 0, 0, 0, 230, + 138, 32, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 70, + 128, 32, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 62, + 0, 0, 1, 83, 84, 65, + 84, 116, 0, 0, 0, 12, + 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 4, + 0, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 82, 68, 69, 70, 116, + 2, 0, 0, 2, 0, 0, + 0, 100, 0, 0, 0, 2, + 0, 0, 0, 28, 0, 0, + 0, 0, 4, 254, 255, 0, + 1, 0, 0, 67, 2, 0, + 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 82, - 68, 69, 70, 8, 1, 0, - 0, 1, 0, 0, 0, 64, - 0, 0, 0, 1, 0, 0, - 0, 28, 0, 0, 0, 0, - 4, 254, 255, 0, 1, 0, - 0, 212, 0, 0, 0, 60, - 0, 0, 0, 0, 0, 0, + 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 99, 98, 48, 0, 60, - 0, 0, 0, 3, 0, 0, - 0, 88, 0, 0, 0, 48, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 160, - 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 2, - 0, 0, 0, 172, 0, 0, - 0, 0, 0, 0, 0, 188, + 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 99, + 98, 48, 0, 99, 98, 50, + 0, 92, 0, 0, 0, 3, + 0, 0, 0, 148, 0, 0, + 0, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 96, 0, 0, 0, 7, + 0, 0, 0, 16, 1, 0, + 0, 112, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 220, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, + 0, 2, 0, 0, 0, 232, + 0, 0, 0, 0, 0, 0, + 0, 248, 0, 0, 0, 16, + 0, 0, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 232, + 0, 0, 0, 0, 0, 0, + 0, 2, 1, 0, 0, 32, 0, 0, 0, 16, 0, 0, - 0, 16, 0, 0, 0, 2, - 0, 0, 0, 172, 0, 0, - 0, 0, 0, 0, 0, 198, - 0, 0, 0, 32, 0, 0, - 0, 16, 0, 0, 0, 2, - 0, 0, 0, 172, 0, 0, - 0, 0, 0, 0, 0, 81, - 117, 97, 100, 68, 101, 115, - 99, 0, 171, 171, 171, 1, - 0, 3, 0, 1, 0, 4, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 101, 120, - 67, 111, 111, 114, 100, 115, - 0, 77, 97, 115, 107, 84, + 0, 2, 0, 0, 0, 232, + 0, 0, 0, 0, 0, 0, + 0, 81, 117, 97, 100, 68, + 101, 115, 99, 0, 171, 171, + 171, 1, 0, 3, 0, 1, + 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, 101, 120, 67, 111, 111, 114, - 100, 115, 0, 77, 105, 99, - 114, 111, 115, 111, 102, 116, - 32, 40, 82, 41, 32, 72, - 76, 83, 76, 32, 83, 104, - 97, 100, 101, 114, 32, 67, - 111, 109, 112, 105, 108, 101, - 114, 32, 57, 46, 50, 57, - 46, 57, 53, 50, 46, 51, - 49, 49, 49, 0, 171, 171, - 171, 73, 83, 71, 78, 44, + 100, 115, 0, 77, 97, 115, + 107, 84, 101, 120, 67, 111, + 111, 114, 100, 115, 0, 184, + 1, 0, 0, 0, 0, 0, + 0, 44, 0, 0, 0, 2, + 0, 0, 0, 208, 1, 0, + 0, 0, 0, 0, 0, 224, + 1, 0, 0, 48, 0, 0, + 0, 8, 0, 0, 0, 2, + 0, 0, 0, 236, 1, 0, + 0, 0, 0, 0, 0, 252, + 1, 0, 0, 64, 0, 0, + 0, 12, 0, 0, 0, 0, + 0, 0, 0, 4, 2, 0, + 0, 0, 0, 0, 0, 20, + 2, 0, 0, 80, 0, 0, + 0, 8, 0, 0, 0, 0, + 0, 0, 0, 236, 1, 0, + 0, 0, 0, 0, 0, 28, + 2, 0, 0, 88, 0, 0, + 0, 4, 0, 0, 0, 0, + 0, 0, 0, 32, 2, 0, + 0, 0, 0, 0, 0, 48, + 2, 0, 0, 92, 0, 0, + 0, 4, 0, 0, 0, 0, + 0, 0, 0, 32, 2, 0, + 0, 0, 0, 0, 0, 56, + 2, 0, 0, 96, 0, 0, + 0, 4, 0, 0, 0, 0, + 0, 0, 0, 32, 2, 0, + 0, 0, 0, 0, 0, 68, + 101, 118, 105, 99, 101, 83, + 112, 97, 99, 101, 84, 111, + 85, 115, 101, 114, 83, 112, + 97, 99, 101, 0, 171, 3, + 0, 3, 0, 3, 0, 3, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 105, 109, + 101, 110, 115, 105, 111, 110, + 115, 0, 171, 1, 0, 3, + 0, 1, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 100, 105, 102, 102, 0, + 171, 171, 171, 1, 0, 3, + 0, 1, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 99, 101, 110, 116, 101, + 114, 49, 0, 65, 0, 171, + 171, 0, 0, 3, 0, 1, + 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 114, + 97, 100, 105, 117, 115, 49, + 0, 115, 113, 95, 114, 97, + 100, 105, 117, 115, 49, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 57, + 46, 50, 57, 46, 57, 53, + 50, 46, 51, 49, 49, 49, + 0, 73, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 7, 3, 0, 0, 80, 79, 83, 73, 84, 73, 79, 78, 0, 171, 171, 171, 79, @@ -1405,455 +2392,399 @@ const BYTE d2deffect[] = 12, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, - 171, 171, 171, 197, 2, 0, + 171, 171, 171, 203, 10, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 212, - 2, 0, 0, 68, 88, 66, - 67, 22, 206, 82, 103, 196, - 235, 84, 233, 156, 39, 210, - 152, 32, 145, 169, 162, 1, - 0, 0, 0, 212, 2, 0, + 0, 0, 0, 0, 0, 176, + 9, 0, 0, 68, 88, 66, + 67, 240, 161, 162, 174, 38, + 162, 195, 139, 184, 115, 158, + 154, 113, 22, 188, 37, 1, + 0, 0, 0, 176, 9, 0, 0, 6, 0, 0, 0, 56, - 0, 0, 0, 164, 0, 0, - 0, 16, 1, 0, 0, 140, - 1, 0, 0, 48, 2, 0, - 0, 160, 2, 0, 0, 65, - 111, 110, 57, 100, 0, 0, - 0, 100, 0, 0, 0, 0, - 2, 255, 255, 60, 0, 0, - 0, 40, 0, 0, 0, 0, - 0, 40, 0, 0, 0, 40, - 0, 0, 0, 40, 0, 1, - 0, 36, 0, 0, 0, 40, + 0, 0, 0, 112, 2, 0, + 0, 44, 6, 0, 0, 168, + 6, 0, 0, 12, 9, 0, + 0, 124, 9, 0, 0, 65, + 111, 110, 57, 48, 2, 0, + 0, 48, 2, 0, 0, 0, + 2, 255, 255, 248, 1, 0, + 0, 56, 0, 0, 0, 1, + 0, 44, 0, 0, 0, 56, + 0, 0, 0, 56, 0, 2, + 0, 36, 0, 0, 0, 56, 0, 0, 0, 0, 0, 1, - 2, 255, 255, 31, 0, 0, - 2, 0, 0, 0, 128, 0, - 0, 15, 176, 31, 0, 0, - 2, 0, 0, 0, 144, 0, - 8, 15, 160, 66, 0, 0, - 3, 0, 0, 15, 128, 0, - 0, 228, 176, 0, 8, 228, - 160, 1, 0, 0, 2, 0, - 8, 15, 128, 0, 0, 228, - 128, 255, 255, 0, 0, 83, - 72, 68, 82, 100, 0, 0, - 0, 64, 0, 0, 0, 25, - 0, 0, 0, 90, 0, 0, - 3, 0, 96, 16, 0, 0, - 0, 0, 0, 88, 24, 0, - 4, 0, 112, 16, 0, 0, + 1, 1, 0, 0, 0, 4, + 0, 3, 0, 0, 0, 0, + 0, 0, 0, 1, 2, 255, + 255, 81, 0, 0, 5, 3, + 0, 15, 160, 0, 0, 0, + 63, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 81, 0, 0, 5, 4, + 0, 15, 160, 0, 0, 128, + 63, 0, 0, 128, 191, 0, + 0, 0, 0, 0, 0, 0, + 128, 31, 0, 0, 2, 0, + 0, 0, 128, 0, 0, 15, + 176, 31, 0, 0, 2, 0, + 0, 0, 144, 0, 8, 15, + 160, 31, 0, 0, 2, 0, + 0, 0, 144, 1, 8, 15, + 160, 2, 0, 0, 3, 0, + 0, 3, 128, 0, 0, 235, + 176, 1, 0, 228, 161, 90, + 0, 0, 4, 0, 0, 8, + 128, 0, 0, 228, 128, 0, + 0, 228, 128, 2, 0, 0, + 161, 5, 0, 0, 3, 0, + 0, 8, 128, 0, 0, 255, + 128, 1, 0, 170, 160, 1, + 0, 0, 2, 0, 0, 4, + 128, 1, 0, 255, 160, 8, + 0, 0, 3, 0, 0, 1, + 128, 0, 0, 228, 128, 0, + 0, 228, 160, 4, 0, 0, + 4, 0, 0, 2, 128, 0, + 0, 0, 128, 0, 0, 0, + 128, 0, 0, 255, 129, 35, + 0, 0, 2, 0, 0, 4, + 128, 0, 0, 85, 128, 7, + 0, 0, 2, 0, 0, 4, + 128, 0, 0, 170, 128, 6, + 0, 0, 2, 1, 0, 1, + 128, 0, 0, 170, 128, 1, + 0, 0, 2, 1, 0, 6, + 128, 1, 0, 0, 129, 2, + 0, 0, 3, 0, 0, 13, + 128, 0, 0, 0, 128, 1, + 0, 148, 128, 6, 0, 0, + 2, 1, 0, 1, 128, 1, + 0, 170, 160, 5, 0, 0, + 3, 0, 0, 13, 128, 0, + 0, 228, 128, 1, 0, 0, + 128, 1, 0, 0, 2, 1, + 0, 8, 128, 1, 0, 255, + 160, 4, 0, 0, 4, 1, + 0, 7, 128, 0, 0, 248, + 128, 0, 0, 170, 160, 1, + 0, 255, 128, 88, 0, 0, + 4, 2, 0, 1, 128, 1, + 0, 0, 128, 0, 0, 0, + 128, 0, 0, 255, 128, 88, + 0, 0, 4, 0, 0, 13, + 128, 1, 0, 148, 128, 4, + 0, 68, 160, 4, 0, 230, + 160, 1, 0, 0, 2, 2, + 0, 2, 128, 3, 0, 0, + 160, 66, 0, 0, 3, 1, + 0, 15, 128, 0, 0, 228, + 176, 1, 8, 228, 160, 66, + 0, 0, 3, 2, 0, 15, + 128, 2, 0, 228, 128, 0, + 8, 228, 160, 5, 0, 0, + 3, 1, 0, 15, 128, 1, + 0, 255, 128, 2, 0, 228, + 128, 2, 0, 0, 3, 0, + 0, 8, 128, 0, 0, 255, + 128, 0, 0, 0, 128, 88, + 0, 0, 4, 0, 0, 1, + 128, 0, 0, 255, 128, 0, + 0, 0, 128, 0, 0, 170, + 128, 88, 0, 0, 4, 1, + 0, 15, 128, 0, 0, 0, + 129, 4, 0, 170, 160, 1, + 0, 228, 128, 88, 0, 0, + 4, 0, 0, 15, 128, 0, + 0, 85, 128, 1, 0, 228, + 128, 4, 0, 170, 160, 1, + 0, 0, 2, 0, 8, 15, + 128, 0, 0, 228, 128, 255, + 255, 0, 0, 83, 72, 68, + 82, 180, 3, 0, 0, 64, + 0, 0, 0, 237, 0, 0, + 0, 89, 0, 0, 4, 70, + 142, 32, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 90, + 0, 0, 3, 0, 96, 16, + 0, 0, 0, 0, 0, 90, + 0, 0, 3, 0, 96, 16, + 0, 1, 0, 0, 0, 88, + 24, 0, 4, 0, 112, 16, + 0, 0, 0, 0, 0, 85, + 85, 0, 0, 88, 24, 0, + 4, 0, 112, 16, 0, 1, 0, 0, 0, 85, 85, 0, 0, 98, 16, 0, 3, 50, 16, 16, 0, 1, 0, 0, + 0, 98, 16, 0, 3, 194, + 16, 16, 0, 1, 0, 0, 0, 101, 0, 0, 3, 242, 32, 16, 0, 0, 0, 0, - 0, 69, 0, 0, 9, 242, - 32, 16, 0, 0, 0, 0, - 0, 70, 16, 16, 0, 1, - 0, 0, 0, 70, 126, 16, - 0, 0, 0, 0, 0, 0, - 96, 16, 0, 0, 0, 0, + 0, 104, 0, 0, 2, 3, + 0, 0, 0, 0, 0, 0, + 9, 50, 0, 16, 0, 0, + 0, 0, 0, 230, 26, 16, + 0, 1, 0, 0, 0, 70, + 128, 32, 128, 65, 0, 0, + 0, 0, 0, 0, 0, 5, + 0, 0, 0, 54, 0, 0, + 6, 66, 0, 16, 0, 0, + 0, 0, 0, 58, 128, 32, + 0, 0, 0, 0, 0, 5, + 0, 0, 0, 16, 0, 0, + 8, 66, 0, 16, 0, 0, + 0, 0, 0, 70, 2, 16, + 0, 0, 0, 0, 0, 70, + 130, 32, 0, 0, 0, 0, + 0, 4, 0, 0, 0, 15, + 0, 0, 7, 18, 0, 16, + 0, 0, 0, 0, 0, 70, + 0, 16, 0, 0, 0, 0, + 0, 70, 0, 16, 0, 0, + 0, 0, 0, 0, 0, 0, + 9, 18, 0, 16, 0, 0, + 0, 0, 0, 10, 0, 16, + 0, 0, 0, 0, 0, 10, + 128, 32, 128, 65, 0, 0, + 0, 0, 0, 0, 0, 6, + 0, 0, 0, 56, 0, 0, + 8, 18, 0, 16, 0, 0, + 0, 0, 0, 10, 0, 16, + 0, 0, 0, 0, 0, 42, + 128, 32, 0, 0, 0, 0, + 0, 5, 0, 0, 0, 50, + 0, 0, 10, 18, 0, 16, + 0, 0, 0, 0, 0, 42, + 0, 16, 0, 0, 0, 0, + 0, 42, 0, 16, 0, 0, + 0, 0, 0, 10, 0, 16, + 128, 65, 0, 0, 0, 0, + 0, 0, 0, 49, 0, 0, + 7, 34, 0, 16, 0, 0, + 0, 0, 0, 10, 0, 16, + 0, 0, 0, 0, 0, 1, + 64, 0, 0, 0, 0, 0, + 0, 75, 0, 0, 6, 18, + 0, 16, 0, 1, 0, 0, + 0, 10, 0, 16, 128, 129, + 0, 0, 0, 0, 0, 0, + 0, 54, 0, 0, 6, 34, + 0, 16, 0, 1, 0, 0, + 0, 10, 0, 16, 128, 65, + 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 7, 82, + 0, 16, 0, 0, 0, 0, + 0, 166, 10, 16, 0, 0, + 0, 0, 0, 6, 1, 16, + 0, 1, 0, 0, 0, 14, + 0, 0, 8, 82, 0, 16, + 0, 0, 0, 0, 0, 6, + 2, 16, 0, 0, 0, 0, + 0, 166, 138, 32, 0, 0, + 0, 0, 0, 5, 0, 0, + 0, 56, 0, 0, 8, 50, + 0, 16, 0, 1, 0, 0, + 0, 134, 0, 16, 0, 0, + 0, 0, 0, 166, 138, 32, + 0, 0, 0, 0, 0, 4, + 0, 0, 0, 29, 0, 0, + 9, 50, 0, 16, 0, 1, + 0, 0, 0, 70, 0, 16, + 0, 1, 0, 0, 0, 246, + 143, 32, 128, 65, 0, 0, + 0, 0, 0, 0, 0, 5, + 0, 0, 0, 1, 0, 0, + 10, 50, 0, 16, 0, 1, + 0, 0, 0, 70, 0, 16, + 0, 1, 0, 0, 0, 2, + 64, 0, 0, 0, 0, 128, + 63, 0, 0, 128, 63, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 8, 18, + 0, 16, 0, 0, 0, 0, + 0, 42, 0, 16, 128, 65, + 0, 0, 0, 0, 0, 0, + 0, 10, 0, 16, 0, 0, + 0, 0, 0, 50, 0, 0, + 9, 18, 0, 16, 0, 2, + 0, 0, 0, 10, 0, 16, + 0, 1, 0, 0, 0, 10, + 0, 16, 0, 0, 0, 0, + 0, 42, 0, 16, 0, 0, + 0, 0, 0, 54, 0, 0, + 5, 34, 0, 16, 0, 2, + 0, 0, 0, 1, 64, 0, + 0, 0, 0, 0, 63, 69, + 0, 0, 9, 242, 0, 16, + 0, 2, 0, 0, 0, 70, + 0, 16, 0, 2, 0, 0, + 0, 70, 126, 16, 0, 0, + 0, 0, 0, 0, 96, 16, + 0, 0, 0, 0, 0, 31, + 0, 4, 3, 26, 0, 16, + 0, 0, 0, 0, 0, 54, + 0, 0, 8, 242, 32, 16, + 0, 0, 0, 0, 0, 2, + 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 62, 0, 0, 1, 21, + 0, 0, 1, 52, 0, 0, + 7, 18, 0, 16, 0, 0, + 0, 0, 0, 26, 0, 16, + 0, 1, 0, 0, 0, 10, + 0, 16, 0, 1, 0, 0, + 0, 29, 0, 0, 7, 18, + 0, 16, 0, 0, 0, 0, + 0, 1, 64, 0, 0, 0, + 0, 0, 0, 10, 0, 16, + 0, 0, 0, 0, 0, 31, + 0, 4, 3, 10, 0, 16, + 0, 0, 0, 0, 0, 54, + 0, 0, 8, 242, 32, 16, + 0, 0, 0, 0, 0, 2, + 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 62, 0, 0, 1, 21, + 0, 0, 1, 69, 0, 0, + 9, 242, 0, 16, 0, 0, + 0, 0, 0, 70, 16, 16, + 0, 1, 0, 0, 0, 70, + 126, 16, 0, 1, 0, 0, + 0, 0, 96, 16, 0, 1, + 0, 0, 0, 56, 0, 0, + 7, 242, 32, 16, 0, 0, + 0, 0, 0, 246, 15, 16, + 0, 0, 0, 0, 0, 70, + 14, 16, 0, 2, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, 116, 0, 0, - 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 32, 0, 0, 0, 3, + 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 3, + 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 82, 68, 69, - 70, 156, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 28, + 70, 92, 2, 0, 0, 1, + 0, 0, 0, 224, 0, 0, + 0, 5, 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, - 255, 0, 1, 0, 0, 105, - 0, 0, 0, 92, 0, 0, + 255, 0, 1, 0, 0, 43, + 2, 0, 0, 188, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 101, - 0, 0, 0, 2, 0, 0, - 0, 5, 0, 0, 0, 4, - 0, 0, 0, 255, 255, 255, - 255, 0, 0, 0, 0, 1, - 0, 0, 0, 12, 0, 0, - 0, 115, 83, 97, 109, 112, - 108, 101, 114, 0, 116, 101, - 120, 0, 77, 105, 99, 114, - 111, 115, 111, 102, 116, 32, - 40, 82, 41, 32, 72, 76, - 83, 76, 32, 83, 104, 97, - 100, 101, 114, 32, 67, 111, - 109, 112, 105, 108, 101, 114, - 32, 57, 46, 50, 57, 46, - 57, 53, 50, 46, 51, 49, - 49, 49, 0, 171, 171, 73, - 83, 71, 78, 104, 0, 0, - 0, 3, 0, 0, 0, 8, - 0, 0, 0, 80, 0, 0, - 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 197, 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 15, - 0, 0, 0, 92, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 1, 0, 0, 0, 3, - 3, 0, 0, 92, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, + 0, 210, 0, 0, 0, 2, + 0, 0, 0, 5, 0, 0, + 0, 4, 0, 0, 0, 255, + 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 12, - 0, 0, 0, 83, 86, 95, - 80, 111, 115, 105, 116, 105, - 111, 110, 0, 84, 69, 88, - 67, 79, 79, 82, 68, 0, - 171, 171, 171, 79, 83, 71, - 78, 44, 0, 0, 0, 1, - 0, 0, 0, 8, 0, 0, - 0, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, - 0, 83, 86, 95, 84, 97, - 114, 103, 101, 116, 0, 171, - 171, 1, 7, 0, 0, 0, - 0, 0, 0, 83, 97, 109, - 112, 108, 101, 77, 97, 115, - 107, 101, 100, 84, 101, 120, - 116, 117, 114, 101, 0, 36, - 4, 0, 0, 68, 88, 66, - 67, 116, 139, 68, 62, 73, - 113, 92, 4, 72, 76, 225, - 161, 30, 132, 222, 233, 1, - 0, 0, 0, 36, 4, 0, - 0, 6, 0, 0, 0, 56, - 0, 0, 0, 248, 0, 0, - 0, 244, 1, 0, 0, 112, - 2, 0, 0, 128, 3, 0, - 0, 180, 3, 0, 0, 65, - 111, 110, 57, 184, 0, 0, - 0, 184, 0, 0, 0, 0, - 2, 254, 255, 132, 0, 0, - 0, 52, 0, 0, 0, 1, - 0, 36, 0, 0, 0, 48, - 0, 0, 0, 48, 0, 0, - 0, 36, 0, 1, 0, 48, - 0, 0, 0, 0, 0, 3, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - 2, 254, 255, 81, 0, 0, - 5, 4, 0, 15, 160, 0, - 0, 0, 0, 0, 0, 128, - 63, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 0, 0, - 2, 5, 0, 0, 128, 0, - 0, 15, 144, 4, 0, 0, - 4, 0, 0, 3, 224, 0, - 0, 228, 144, 2, 0, 238, - 160, 2, 0, 228, 160, 4, - 0, 0, 4, 0, 0, 12, - 224, 0, 0, 20, 144, 3, - 0, 180, 160, 3, 0, 20, - 160, 4, 0, 0, 4, 0, - 0, 3, 128, 0, 0, 228, - 144, 1, 0, 238, 160, 1, - 0, 228, 160, 2, 0, 0, - 3, 0, 0, 3, 192, 0, - 0, 228, 128, 0, 0, 228, - 160, 1, 0, 0, 2, 0, - 0, 12, 192, 4, 0, 68, - 160, 255, 255, 0, 0, 83, - 72, 68, 82, 244, 0, 0, - 0, 64, 0, 1, 0, 61, - 0, 0, 0, 89, 0, 0, - 4, 70, 142, 32, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 95, 0, 0, 3, 50, - 16, 16, 0, 0, 0, 0, - 0, 103, 0, 0, 4, 242, - 32, 16, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 101, - 0, 0, 3, 50, 32, 16, - 0, 1, 0, 0, 0, 101, - 0, 0, 3, 194, 32, 16, - 0, 1, 0, 0, 0, 50, - 0, 0, 11, 50, 32, 16, - 0, 0, 0, 0, 0, 70, - 16, 16, 0, 0, 0, 0, - 0, 230, 138, 32, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 70, 128, 32, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 54, 0, 0, 8, 194, - 32, 16, 0, 0, 0, 0, - 0, 2, 64, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 128, 63, 50, 0, 0, - 11, 50, 32, 16, 0, 1, - 0, 0, 0, 70, 16, 16, - 0, 0, 0, 0, 0, 230, - 138, 32, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 70, - 128, 32, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 50, - 0, 0, 11, 194, 32, 16, - 0, 1, 0, 0, 0, 6, - 20, 16, 0, 0, 0, 0, - 0, 166, 142, 32, 0, 0, - 0, 0, 0, 2, 0, 0, - 0, 6, 132, 32, 0, 0, - 0, 0, 0, 2, 0, 0, - 0, 62, 0, 0, 1, 83, - 84, 65, 84, 116, 0, 0, - 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 0, 0, 214, 0, 0, + 0, 2, 0, 0, 0, 5, + 0, 0, 0, 4, 0, 0, + 0, 255, 255, 255, 255, 1, + 0, 0, 0, 1, 0, 0, + 0, 12, 0, 0, 0, 219, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 82, 68, 69, - 70, 8, 1, 0, 0, 1, - 0, 0, 0, 64, 0, 0, - 0, 1, 0, 0, 0, 28, - 0, 0, 0, 0, 4, 254, - 255, 0, 1, 0, 0, 212, - 0, 0, 0, 60, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 99, - 98, 48, 0, 60, 0, 0, - 0, 3, 0, 0, 0, 88, - 0, 0, 0, 48, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 0, - 0, 0, 0, 0, 0, 16, - 0, 0, 0, 2, 0, 0, - 0, 172, 0, 0, 0, 0, - 0, 0, 0, 188, 0, 0, - 0, 16, 0, 0, 0, 16, - 0, 0, 0, 2, 0, 0, - 0, 172, 0, 0, 0, 0, - 0, 0, 0, 198, 0, 0, - 0, 32, 0, 0, 0, 16, - 0, 0, 0, 2, 0, 0, - 0, 172, 0, 0, 0, 0, - 0, 0, 0, 81, 117, 97, - 100, 68, 101, 115, 99, 0, - 171, 171, 171, 1, 0, 3, - 0, 1, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 84, 101, 120, 67, 111, - 111, 114, 100, 115, 0, 77, - 97, 115, 107, 84, 101, 120, - 67, 111, 111, 114, 100, 115, - 0, 77, 105, 99, 114, 111, - 115, 111, 102, 116, 32, 40, - 82, 41, 32, 72, 76, 83, - 76, 32, 83, 104, 97, 100, - 101, 114, 32, 67, 111, 109, - 112, 105, 108, 101, 114, 32, - 57, 46, 50, 57, 46, 57, - 53, 50, 46, 51, 49, 49, - 49, 0, 171, 171, 171, 73, - 83, 71, 78, 44, 0, 0, - 0, 1, 0, 0, 0, 8, - 0, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 7, - 3, 0, 0, 80, 79, 83, - 73, 84, 73, 79, 78, 0, - 171, 171, 171, 79, 83, 71, - 78, 104, 0, 0, 0, 3, - 0, 0, 0, 8, 0, 0, - 0, 80, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 3, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, - 0, 92, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 1, - 0, 0, 0, 3, 12, 0, - 0, 92, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 1, - 0, 0, 0, 12, 3, 0, - 0, 83, 86, 95, 80, 111, - 115, 105, 116, 105, 111, 110, - 0, 84, 69, 88, 67, 79, - 79, 82, 68, 0, 171, 171, - 171, 245, 9, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 2, 0, 0, 0, 0, - 0, 0, 0, 208, 3, 0, - 0, 68, 88, 66, 67, 145, - 96, 208, 189, 244, 147, 57, - 205, 242, 133, 35, 176, 39, - 143, 121, 235, 1, 0, 0, - 0, 208, 3, 0, 0, 6, - 0, 0, 0, 56, 0, 0, - 0, 224, 0, 0, 0, 188, - 1, 0, 0, 56, 2, 0, - 0, 44, 3, 0, 0, 156, - 3, 0, 0, 65, 111, 110, - 57, 160, 0, 0, 0, 160, - 0, 0, 0, 0, 2, 255, - 255, 116, 0, 0, 0, 44, - 0, 0, 0, 0, 0, 44, - 0, 0, 0, 44, 0, 0, - 0, 44, 0, 2, 0, 36, - 0, 0, 0, 44, 0, 0, - 0, 0, 0, 1, 1, 1, - 0, 1, 2, 255, 255, 31, - 0, 0, 2, 0, 0, 0, - 128, 0, 0, 15, 176, 31, - 0, 0, 2, 0, 0, 0, - 144, 0, 8, 15, 160, 31, - 0, 0, 2, 0, 0, 0, - 144, 1, 8, 15, 160, 1, - 0, 0, 2, 0, 0, 3, - 128, 0, 0, 235, 176, 66, - 0, 0, 3, 1, 0, 15, - 128, 0, 0, 228, 176, 0, - 8, 228, 160, 66, 0, 0, - 3, 0, 0, 15, 128, 0, - 0, 228, 128, 1, 8, 228, - 160, 5, 0, 0, 3, 0, - 0, 15, 128, 0, 0, 255, - 128, 1, 0, 228, 128, 1, - 0, 0, 2, 0, 8, 15, - 128, 0, 0, 228, 128, 255, - 255, 0, 0, 83, 72, 68, - 82, 212, 0, 0, 0, 64, - 0, 0, 0, 53, 0, 0, - 0, 90, 0, 0, 3, 0, - 96, 16, 0, 0, 0, 0, - 0, 90, 0, 0, 3, 0, - 96, 16, 0, 1, 0, 0, - 0, 88, 24, 0, 4, 0, - 112, 16, 0, 0, 0, 0, - 0, 85, 85, 0, 0, 88, - 24, 0, 4, 0, 112, 16, - 0, 1, 0, 0, 0, 85, - 85, 0, 0, 98, 16, 0, - 3, 50, 16, 16, 0, 1, - 0, 0, 0, 98, 16, 0, - 3, 194, 16, 16, 0, 1, - 0, 0, 0, 101, 0, 0, - 3, 242, 32, 16, 0, 0, - 0, 0, 0, 104, 0, 0, - 2, 2, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 0, 0, 0, 0, 70, - 16, 16, 0, 1, 0, 0, - 0, 70, 126, 16, 0, 0, - 0, 0, 0, 0, 96, 16, - 0, 0, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 1, 0, 0, 0, 230, - 26, 16, 0, 1, 0, 0, - 0, 70, 126, 16, 0, 1, - 0, 0, 0, 0, 96, 16, - 0, 1, 0, 0, 0, 56, - 0, 0, 7, 242, 32, 16, - 0, 0, 0, 0, 0, 70, - 14, 16, 0, 0, 0, 0, - 0, 246, 15, 16, 0, 1, - 0, 0, 0, 62, 0, 0, - 1, 83, 84, 65, 84, 116, - 0, 0, 0, 4, 0, 0, - 0, 2, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 2, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 82, - 68, 69, 70, 236, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, - 0, 28, 0, 0, 0, 0, - 4, 255, 255, 0, 1, 0, - 0, 187, 0, 0, 0, 156, - 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 165, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 178, 0, 0, - 0, 2, 0, 0, 0, 5, - 0, 0, 0, 4, 0, 0, - 0, 255, 255, 255, 255, 0, - 0, 0, 0, 1, 0, 0, - 0, 12, 0, 0, 0, 182, - 0, 0, 0, 2, 0, 0, - 0, 5, 0, 0, 0, 4, - 0, 0, 0, 255, 255, 255, - 255, 1, 0, 0, 0, 1, - 0, 0, 0, 12, 0, 0, 0, 115, 83, 97, 109, 112, 108, 101, 114, 0, 115, 77, 97, 115, 107, 83, 97, 109, 112, 108, 101, 114, 0, 116, 101, 120, 0, 109, 97, 115, - 107, 0, 77, 105, 99, 114, + 107, 0, 99, 98, 50, 0, + 171, 219, 0, 0, 0, 7, + 0, 0, 0, 248, 0, 0, + 0, 112, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 160, 1, 0, 0, 0, + 0, 0, 0, 44, 0, 0, + 0, 0, 0, 0, 0, 184, + 1, 0, 0, 0, 0, 0, + 0, 200, 1, 0, 0, 48, + 0, 0, 0, 8, 0, 0, + 0, 0, 0, 0, 0, 212, + 1, 0, 0, 0, 0, 0, + 0, 228, 1, 0, 0, 64, + 0, 0, 0, 12, 0, 0, + 0, 2, 0, 0, 0, 236, + 1, 0, 0, 0, 0, 0, + 0, 252, 1, 0, 0, 80, + 0, 0, 0, 8, 0, 0, + 0, 2, 0, 0, 0, 212, + 1, 0, 0, 0, 0, 0, + 0, 4, 2, 0, 0, 88, + 0, 0, 0, 4, 0, 0, + 0, 2, 0, 0, 0, 8, + 2, 0, 0, 0, 0, 0, + 0, 24, 2, 0, 0, 92, + 0, 0, 0, 4, 0, 0, + 0, 2, 0, 0, 0, 8, + 2, 0, 0, 0, 0, 0, + 0, 32, 2, 0, 0, 96, + 0, 0, 0, 4, 0, 0, + 0, 2, 0, 0, 0, 8, + 2, 0, 0, 0, 0, 0, + 0, 68, 101, 118, 105, 99, + 101, 83, 112, 97, 99, 101, + 84, 111, 85, 115, 101, 114, + 83, 112, 97, 99, 101, 0, + 171, 3, 0, 3, 0, 3, + 0, 3, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 100, + 105, 109, 101, 110, 115, 105, + 111, 110, 115, 0, 171, 1, + 0, 3, 0, 1, 0, 2, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 100, 105, 102, + 102, 0, 171, 171, 171, 1, + 0, 3, 0, 1, 0, 3, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 99, 101, 110, + 116, 101, 114, 49, 0, 65, + 0, 171, 171, 0, 0, 3, + 0, 1, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 114, 97, 100, 105, 117, + 115, 49, 0, 115, 113, 95, + 114, 97, 100, 105, 117, 115, + 49, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 57, 46, 50, 57, 46, 57, 53, 50, 46, 51, 49, 49, 49, 0, 73, 83, 71, @@ -1878,644 +2809,650 @@ const BYTE d2deffect[] = 171, 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103, - 101, 116, 0, 171, 171, 49, - 14, 0, 0, 0, 0, 0, - 0, 83, 97, 109, 112, 108, - 101, 84, 101, 120, 116, 117, - 114, 101, 87, 105, 116, 104, - 83, 104, 97, 100, 111, 119, - 0, 4, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 128, - 63, 1, 0, 0, 0, 0, - 0, 128, 63, 1, 0, 0, - 0, 0, 0, 128, 63, 1, - 0, 0, 0, 0, 0, 128, - 63, 1, 0, 0, 0, 3, - 0, 0, 0, 255, 255, 255, - 255, 36, 4, 0, 0, 68, - 88, 66, 67, 116, 139, 68, - 62, 73, 113, 92, 4, 72, - 76, 225, 161, 30, 132, 222, - 233, 1, 0, 0, 0, 36, - 4, 0, 0, 6, 0, 0, - 0, 56, 0, 0, 0, 248, - 0, 0, 0, 244, 1, 0, - 0, 112, 2, 0, 0, 128, - 3, 0, 0, 180, 3, 0, - 0, 65, 111, 110, 57, 184, - 0, 0, 0, 184, 0, 0, - 0, 0, 2, 254, 255, 132, - 0, 0, 0, 52, 0, 0, - 0, 1, 0, 36, 0, 0, - 0, 48, 0, 0, 0, 48, - 0, 0, 0, 36, 0, 1, - 0, 48, 0, 0, 0, 0, - 0, 3, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 1, 2, 254, 255, 81, - 0, 0, 5, 4, 0, 15, - 160, 0, 0, 0, 0, 0, - 0, 128, 63, 0, 0, 0, - 0, 0, 0, 0, 0, 31, - 0, 0, 2, 5, 0, 0, - 128, 0, 0, 15, 144, 4, - 0, 0, 4, 0, 0, 3, - 224, 0, 0, 228, 144, 2, - 0, 238, 160, 2, 0, 228, - 160, 4, 0, 0, 4, 0, - 0, 12, 224, 0, 0, 20, - 144, 3, 0, 180, 160, 3, - 0, 20, 160, 4, 0, 0, - 4, 0, 0, 3, 128, 0, - 0, 228, 144, 1, 0, 238, - 160, 1, 0, 228, 160, 2, - 0, 0, 3, 0, 0, 3, - 192, 0, 0, 228, 128, 0, - 0, 228, 160, 1, 0, 0, - 2, 0, 0, 12, 192, 4, - 0, 68, 160, 255, 255, 0, - 0, 83, 72, 68, 82, 244, - 0, 0, 0, 64, 0, 1, - 0, 61, 0, 0, 0, 89, - 0, 0, 4, 70, 142, 32, - 0, 0, 0, 0, 0, 3, - 0, 0, 0, 95, 0, 0, - 3, 50, 16, 16, 0, 0, - 0, 0, 0, 103, 0, 0, - 4, 242, 32, 16, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 101, 0, 0, 3, 50, - 32, 16, 0, 1, 0, 0, - 0, 101, 0, 0, 3, 194, - 32, 16, 0, 1, 0, 0, - 0, 50, 0, 0, 11, 50, - 32, 16, 0, 0, 0, 0, - 0, 70, 16, 16, 0, 0, - 0, 0, 0, 230, 138, 32, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 70, 128, 32, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 54, 0, 0, - 8, 194, 32, 16, 0, 0, - 0, 0, 0, 2, 64, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 128, 63, 50, - 0, 0, 11, 50, 32, 16, - 0, 1, 0, 0, 0, 70, - 16, 16, 0, 0, 0, 0, - 0, 230, 138, 32, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 70, 128, 32, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 50, 0, 0, 11, 194, - 32, 16, 0, 1, 0, 0, - 0, 6, 20, 16, 0, 0, - 0, 0, 0, 166, 142, 32, - 0, 0, 0, 0, 0, 2, - 0, 0, 0, 6, 132, 32, - 0, 0, 0, 0, 0, 2, - 0, 0, 0, 62, 0, 0, - 1, 83, 84, 65, 84, 116, - 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 82, - 68, 69, 70, 8, 1, 0, - 0, 1, 0, 0, 0, 64, - 0, 0, 0, 1, 0, 0, - 0, 28, 0, 0, 0, 0, - 4, 254, 255, 0, 1, 0, - 0, 212, 0, 0, 0, 60, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 99, 98, 48, 0, 60, - 0, 0, 0, 3, 0, 0, - 0, 88, 0, 0, 0, 48, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 160, - 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 2, - 0, 0, 0, 172, 0, 0, - 0, 0, 0, 0, 0, 188, - 0, 0, 0, 16, 0, 0, - 0, 16, 0, 0, 0, 2, - 0, 0, 0, 172, 0, 0, - 0, 0, 0, 0, 0, 198, - 0, 0, 0, 32, 0, 0, - 0, 16, 0, 0, 0, 2, - 0, 0, 0, 172, 0, 0, - 0, 0, 0, 0, 0, 81, - 117, 97, 100, 68, 101, 115, - 99, 0, 171, 171, 171, 1, - 0, 3, 0, 1, 0, 4, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 84, 101, 120, - 67, 111, 111, 114, 100, 115, - 0, 77, 97, 115, 107, 84, - 101, 120, 67, 111, 111, 114, - 100, 115, 0, 77, 105, 99, - 114, 111, 115, 111, 102, 116, - 32, 40, 82, 41, 32, 72, - 76, 83, 76, 32, 83, 104, - 97, 100, 101, 114, 32, 67, - 111, 109, 112, 105, 108, 101, - 114, 32, 57, 46, 50, 57, - 46, 57, 53, 50, 46, 51, - 49, 49, 49, 0, 171, 171, - 171, 73, 83, 71, 78, 44, - 0, 0, 0, 1, 0, 0, - 0, 8, 0, 0, 0, 32, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, - 0, 7, 3, 0, 0, 80, - 79, 83, 73, 84, 73, 79, - 78, 0, 171, 171, 171, 79, - 83, 71, 78, 104, 0, 0, - 0, 3, 0, 0, 0, 8, - 0, 0, 0, 80, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 15, - 0, 0, 0, 92, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 1, 0, 0, 0, 3, - 12, 0, 0, 92, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 1, 0, 0, 0, 12, - 3, 0, 0, 83, 86, 95, - 80, 111, 115, 105, 116, 105, - 111, 110, 0, 84, 69, 88, - 67, 79, 79, 82, 68, 0, - 171, 171, 171, 85, 18, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 2, 0, 0, - 0, 0, 0, 0, 0, 232, - 9, 0, 0, 68, 88, 66, - 67, 45, 80, 33, 8, 5, - 16, 134, 134, 115, 16, 129, - 43, 103, 216, 255, 210, 1, - 0, 0, 0, 232, 9, 0, - 0, 6, 0, 0, 0, 56, - 0, 0, 0, 248, 2, 0, - 0, 8, 7, 0, 0, 132, - 7, 0, 0, 68, 9, 0, - 0, 180, 9, 0, 0, 65, - 111, 110, 57, 184, 2, 0, - 0, 184, 2, 0, 0, 0, - 2, 255, 255, 120, 2, 0, - 0, 64, 0, 0, 0, 2, - 0, 40, 0, 0, 0, 64, - 0, 0, 0, 64, 0, 1, - 0, 36, 0, 0, 0, 64, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 6, 0, 4, 0, 3, - 0, 0, 0, 0, 0, 1, - 2, 255, 255, 31, 0, 0, - 2, 0, 0, 0, 128, 0, - 0, 15, 176, 31, 0, 0, - 2, 0, 0, 0, 144, 0, - 8, 15, 160, 2, 0, 0, - 3, 0, 0, 1, 128, 0, - 0, 0, 176, 0, 0, 85, - 160, 1, 0, 0, 2, 0, - 0, 2, 128, 0, 0, 85, - 176, 2, 0, 0, 3, 1, - 0, 1, 128, 0, 0, 0, - 176, 0, 0, 0, 160, 1, - 0, 0, 2, 1, 0, 2, - 128, 0, 0, 85, 176, 66, - 0, 0, 3, 0, 0, 15, - 128, 0, 0, 228, 128, 0, - 8, 228, 160, 66, 0, 0, - 3, 1, 0, 15, 128, 1, - 0, 228, 128, 0, 8, 228, - 160, 5, 0, 0, 3, 0, - 0, 1, 128, 0, 0, 255, - 128, 3, 0, 85, 160, 4, - 0, 0, 4, 0, 0, 1, - 128, 3, 0, 0, 160, 1, - 0, 255, 128, 0, 0, 0, - 128, 2, 0, 0, 3, 1, - 0, 1, 128, 0, 0, 0, - 176, 0, 0, 170, 160, 1, - 0, 0, 2, 1, 0, 2, - 128, 0, 0, 85, 176, 2, - 0, 0, 3, 2, 0, 1, - 128, 0, 0, 0, 176, 0, - 0, 255, 160, 1, 0, 0, - 2, 2, 0, 2, 128, 0, - 0, 85, 176, 66, 0, 0, - 3, 1, 0, 15, 128, 1, - 0, 228, 128, 0, 8, 228, - 160, 66, 0, 0, 3, 2, - 0, 15, 128, 2, 0, 228, - 128, 0, 8, 228, 160, 4, - 0, 0, 4, 0, 0, 1, - 128, 3, 0, 170, 160, 1, - 0, 255, 128, 0, 0, 0, - 128, 4, 0, 0, 4, 0, - 0, 1, 128, 3, 0, 255, - 160, 2, 0, 255, 128, 0, - 0, 0, 128, 2, 0, 0, - 3, 1, 0, 1, 128, 0, - 0, 0, 176, 1, 0, 0, - 160, 1, 0, 0, 2, 1, - 0, 2, 128, 0, 0, 85, - 176, 2, 0, 0, 3, 2, - 0, 1, 128, 0, 0, 0, - 176, 1, 0, 85, 160, 1, - 0, 0, 2, 2, 0, 2, - 128, 0, 0, 85, 176, 66, - 0, 0, 3, 1, 0, 15, - 128, 1, 0, 228, 128, 0, - 8, 228, 160, 66, 0, 0, - 3, 2, 0, 15, 128, 2, - 0, 228, 128, 0, 8, 228, - 160, 4, 0, 0, 4, 0, - 0, 1, 128, 4, 0, 0, - 160, 1, 0, 255, 128, 0, - 0, 0, 128, 4, 0, 0, - 4, 0, 0, 1, 128, 4, - 0, 85, 160, 2, 0, 255, - 128, 0, 0, 0, 128, 2, - 0, 0, 3, 1, 0, 1, - 128, 0, 0, 0, 176, 1, - 0, 170, 160, 1, 0, 0, - 2, 1, 0, 2, 128, 0, - 0, 85, 176, 2, 0, 0, - 3, 2, 0, 1, 128, 0, - 0, 0, 176, 1, 0, 255, - 160, 1, 0, 0, 2, 2, - 0, 2, 128, 0, 0, 85, - 176, 66, 0, 0, 3, 1, - 0, 15, 128, 1, 0, 228, - 128, 0, 8, 228, 160, 66, - 0, 0, 3, 2, 0, 15, - 128, 2, 0, 228, 128, 0, - 8, 228, 160, 4, 0, 0, - 4, 0, 0, 1, 128, 4, - 0, 170, 160, 1, 0, 255, - 128, 0, 0, 0, 128, 4, - 0, 0, 4, 0, 0, 1, - 128, 4, 0, 255, 160, 2, - 0, 255, 128, 0, 0, 0, - 128, 2, 0, 0, 3, 1, - 0, 1, 128, 0, 0, 0, - 176, 2, 0, 0, 160, 1, - 0, 0, 2, 1, 0, 2, - 128, 0, 0, 85, 176, 66, - 0, 0, 3, 1, 0, 15, - 128, 1, 0, 228, 128, 0, - 8, 228, 160, 4, 0, 0, - 4, 0, 0, 1, 128, 5, - 0, 0, 160, 1, 0, 255, - 128, 0, 0, 0, 128, 5, - 0, 0, 3, 0, 0, 15, - 128, 0, 0, 0, 128, 6, - 0, 228, 160, 1, 0, 0, - 2, 0, 8, 15, 128, 0, - 0, 228, 128, 255, 255, 0, - 0, 83, 72, 68, 82, 8, - 4, 0, 0, 64, 0, 0, - 0, 2, 1, 0, 0, 89, - 0, 0, 4, 70, 142, 32, - 0, 0, 0, 0, 0, 10, - 0, 0, 0, 90, 0, 0, - 3, 0, 96, 16, 0, 0, - 0, 0, 0, 88, 24, 0, - 4, 0, 112, 16, 0, 0, - 0, 0, 0, 85, 85, 0, - 0, 98, 16, 0, 3, 50, - 16, 16, 0, 1, 0, 0, - 0, 101, 0, 0, 3, 242, - 32, 16, 0, 0, 0, 0, - 0, 104, 0, 0, 2, 4, - 0, 0, 0, 0, 0, 0, - 8, 242, 0, 16, 0, 0, - 0, 0, 0, 6, 16, 16, - 0, 1, 0, 0, 0, 38, - 135, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 54, - 0, 0, 5, 82, 0, 16, - 0, 1, 0, 0, 0, 86, - 7, 16, 0, 0, 0, 0, - 0, 54, 0, 0, 5, 162, - 0, 16, 0, 1, 0, 0, - 0, 86, 21, 16, 0, 1, - 0, 0, 0, 69, 0, 0, - 9, 242, 0, 16, 0, 2, - 0, 0, 0, 230, 10, 16, - 0, 1, 0, 0, 0, 70, - 126, 16, 0, 0, 0, 0, - 0, 0, 96, 16, 0, 0, - 0, 0, 0, 69, 0, 0, - 9, 242, 0, 16, 0, 1, - 0, 0, 0, 70, 0, 16, - 0, 1, 0, 0, 0, 70, - 126, 16, 0, 0, 0, 0, - 0, 0, 96, 16, 0, 0, - 0, 0, 0, 56, 0, 0, - 8, 18, 0, 16, 0, 1, - 0, 0, 0, 58, 0, 16, - 0, 2, 0, 0, 0, 26, - 128, 32, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 50, - 0, 0, 10, 18, 0, 16, - 0, 1, 0, 0, 0, 10, - 128, 32, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 58, - 0, 16, 0, 1, 0, 0, - 0, 10, 0, 16, 0, 1, - 0, 0, 0, 54, 0, 0, - 5, 162, 0, 16, 0, 0, - 0, 0, 0, 86, 21, 16, - 0, 1, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 2, 0, 0, 0, 70, - 0, 16, 0, 0, 0, 0, - 0, 70, 126, 16, 0, 0, - 0, 0, 0, 0, 96, 16, - 0, 0, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 0, 0, 0, 0, 230, - 10, 16, 0, 0, 0, 0, - 0, 70, 126, 16, 0, 0, - 0, 0, 0, 0, 96, 16, - 0, 0, 0, 0, 0, 50, - 0, 0, 10, 18, 0, 16, - 0, 0, 0, 0, 0, 42, - 128, 32, 0, 0, 0, 0, - 0, 6, 0, 0, 0, 58, - 0, 16, 0, 2, 0, 0, - 0, 10, 0, 16, 0, 1, - 0, 0, 0, 50, 0, 0, - 10, 18, 0, 16, 0, 0, - 0, 0, 0, 58, 128, 32, - 0, 0, 0, 0, 0, 6, - 0, 0, 0, 58, 0, 16, - 0, 0, 0, 0, 0, 10, - 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 242, - 0, 16, 0, 1, 0, 0, - 0, 6, 16, 16, 0, 1, - 0, 0, 0, 38, 135, 32, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 54, 0, 0, - 5, 82, 0, 16, 0, 2, - 0, 0, 0, 86, 7, 16, - 0, 1, 0, 0, 0, 54, - 0, 0, 5, 162, 0, 16, - 0, 2, 0, 0, 0, 86, - 21, 16, 0, 1, 0, 0, - 0, 69, 0, 0, 9, 242, - 0, 16, 0, 3, 0, 0, - 0, 70, 0, 16, 0, 2, - 0, 0, 0, 70, 126, 16, - 0, 0, 0, 0, 0, 0, - 96, 16, 0, 0, 0, 0, - 0, 69, 0, 0, 9, 242, - 0, 16, 0, 2, 0, 0, - 0, 230, 10, 16, 0, 2, - 0, 0, 0, 70, 126, 16, - 0, 0, 0, 0, 0, 0, - 96, 16, 0, 0, 0, 0, - 0, 50, 0, 0, 10, 18, - 0, 16, 0, 0, 0, 0, - 0, 10, 128, 32, 0, 0, - 0, 0, 0, 7, 0, 0, - 0, 58, 0, 16, 0, 3, - 0, 0, 0, 10, 0, 16, - 0, 0, 0, 0, 0, 50, - 0, 0, 10, 18, 0, 16, - 0, 0, 0, 0, 0, 26, - 128, 32, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 58, - 0, 16, 0, 2, 0, 0, - 0, 10, 0, 16, 0, 0, - 0, 0, 0, 54, 0, 0, - 5, 162, 0, 16, 0, 1, - 0, 0, 0, 86, 21, 16, - 0, 1, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 2, 0, 0, 0, 70, - 0, 16, 0, 1, 0, 0, - 0, 70, 126, 16, 0, 0, - 0, 0, 0, 0, 96, 16, - 0, 0, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 1, 0, 0, 0, 230, - 10, 16, 0, 1, 0, 0, - 0, 70, 126, 16, 0, 0, - 0, 0, 0, 0, 96, 16, - 0, 0, 0, 0, 0, 50, - 0, 0, 10, 18, 0, 16, - 0, 0, 0, 0, 0, 42, - 128, 32, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 58, - 0, 16, 0, 2, 0, 0, - 0, 10, 0, 16, 0, 0, - 0, 0, 0, 50, 0, 0, - 10, 18, 0, 16, 0, 0, - 0, 0, 0, 58, 128, 32, - 0, 0, 0, 0, 0, 7, - 0, 0, 0, 58, 0, 16, - 0, 1, 0, 0, 0, 10, - 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 8, 18, - 0, 16, 0, 1, 0, 0, - 0, 10, 16, 16, 0, 1, - 0, 0, 0, 10, 128, 32, - 0, 0, 0, 0, 0, 2, - 0, 0, 0, 54, 0, 0, - 5, 34, 0, 16, 0, 1, - 0, 0, 0, 26, 16, 16, - 0, 1, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 1, 0, 0, 0, 70, - 0, 16, 0, 1, 0, 0, - 0, 70, 126, 16, 0, 0, - 0, 0, 0, 0, 96, 16, - 0, 0, 0, 0, 0, 50, - 0, 0, 10, 18, 0, 16, - 0, 0, 0, 0, 0, 10, - 128, 32, 0, 0, 0, 0, - 0, 8, 0, 0, 0, 58, - 0, 16, 0, 1, 0, 0, - 0, 10, 0, 16, 0, 0, - 0, 0, 0, 56, 0, 0, - 8, 242, 32, 16, 0, 0, - 0, 0, 0, 6, 0, 16, - 0, 0, 0, 0, 0, 70, - 142, 32, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 62, - 0, 0, 1, 83, 84, 65, - 84, 116, 0, 0, 0, 30, - 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 2, - 0, 0, 0, 5, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 9, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 82, 68, 69, 70, 184, - 1, 0, 0, 1, 0, 0, - 0, 148, 0, 0, 0, 3, - 0, 0, 0, 28, 0, 0, - 0, 0, 4, 255, 255, 0, - 1, 0, 0, 132, 1, 0, - 0, 124, 0, 0, 0, 3, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 139, 0, 0, - 0, 2, 0, 0, 0, 5, - 0, 0, 0, 4, 0, 0, - 0, 255, 255, 255, 255, 0, - 0, 0, 0, 1, 0, 0, - 0, 12, 0, 0, 0, 143, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 115, 83, 104, 97, 100, - 111, 119, 83, 97, 109, 112, - 108, 101, 114, 0, 116, 101, - 120, 0, 99, 98, 49, 0, - 171, 143, 0, 0, 0, 4, - 0, 0, 0, 172, 0, 0, - 0, 160, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 12, 1, 0, 0, 0, - 0, 0, 0, 48, 0, 0, - 0, 2, 0, 0, 0, 28, + 101, 116, 0, 171, 171, 231, + 17, 0, 0, 0, 0, 0, + 0, 80, 49, 0, 4, 7, + 0, 0, 68, 88, 66, 67, + 171, 7, 14, 215, 173, 41, + 24, 247, 237, 1, 38, 39, + 209, 221, 241, 232, 1, 0, + 0, 0, 4, 7, 0, 0, + 6, 0, 0, 0, 56, 0, + 0, 0, 148, 1, 0, 0, + 104, 3, 0, 0, 228, 3, + 0, 0, 96, 6, 0, 0, + 148, 6, 0, 0, 65, 111, + 110, 57, 84, 1, 0, 0, + 84, 1, 0, 0, 0, 2, + 254, 255, 252, 0, 0, 0, + 88, 0, 0, 0, 4, 0, + 36, 0, 0, 0, 84, 0, + 0, 0, 84, 0, 0, 0, + 36, 0, 1, 0, 84, 0, + 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, - 0, 44, 1, 0, 0, 48, - 0, 0, 0, 48, 0, 0, - 0, 0, 0, 0, 0, 60, - 1, 0, 0, 0, 0, 0, - 0, 76, 1, 0, 0, 96, - 0, 0, 0, 48, 0, 0, - 0, 2, 0, 0, 0, 88, - 1, 0, 0, 0, 0, 0, - 0, 104, 1, 0, 0, 144, - 0, 0, 0, 16, 0, 0, - 0, 2, 0, 0, 0, 116, + 0, 0, 2, 0, 1, 0, + 2, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, + 3, 0, 0, 0, 0, 0, + 1, 0, 3, 0, 1, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 2, + 254, 255, 81, 0, 0, 5, + 6, 0, 15, 160, 0, 0, + 128, 63, 0, 0, 0, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 31, 0, 0, 2, + 5, 0, 0, 128, 0, 0, + 15, 144, 4, 0, 0, 4, + 0, 0, 3, 224, 0, 0, + 228, 144, 2, 0, 238, 160, + 2, 0, 228, 160, 4, 0, + 0, 4, 0, 0, 3, 128, + 0, 0, 228, 144, 1, 0, + 238, 160, 1, 0, 228, 160, + 2, 0, 0, 3, 0, 0, + 4, 128, 0, 0, 0, 128, + 6, 0, 0, 160, 5, 0, + 0, 3, 0, 0, 4, 128, + 0, 0, 170, 128, 5, 0, + 0, 160, 5, 0, 0, 3, + 1, 0, 1, 128, 0, 0, + 170, 128, 6, 0, 85, 160, + 2, 0, 0, 3, 0, 0, + 4, 128, 0, 0, 85, 129, + 6, 0, 0, 160, 2, 0, + 0, 3, 0, 0, 3, 192, + 0, 0, 228, 128, 0, 0, + 228, 160, 5, 0, 0, 3, + 0, 0, 1, 128, 0, 0, + 170, 128, 5, 0, 85, 160, + 5, 0, 0, 3, 1, 0, + 2, 128, 0, 0, 0, 128, + 6, 0, 85, 160, 1, 0, + 0, 2, 1, 0, 4, 128, + 6, 0, 0, 160, 8, 0, + 0, 3, 0, 0, 8, 224, + 1, 0, 228, 128, 3, 0, + 228, 160, 8, 0, 0, 3, + 0, 0, 4, 224, 1, 0, + 228, 128, 4, 0, 228, 160, + 1, 0, 0, 2, 0, 0, + 12, 192, 6, 0, 36, 160, + 255, 255, 0, 0, 83, 72, + 68, 82, 204, 1, 0, 0, + 64, 0, 1, 0, 115, 0, + 0, 0, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 89, 0, 0, 4, 70, 142, + 32, 0, 1, 0, 0, 0, + 4, 0, 0, 0, 95, 0, + 0, 3, 50, 16, 16, 0, + 0, 0, 0, 0, 103, 0, + 0, 4, 242, 32, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 101, 0, 0, 3, + 50, 32, 16, 0, 1, 0, + 0, 0, 101, 0, 0, 3, + 194, 32, 16, 0, 1, 0, + 0, 0, 104, 0, 0, 2, + 2, 0, 0, 0, 54, 0, + 0, 8, 194, 32, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 128, 63, + 50, 0, 0, 11, 50, 0, + 16, 0, 0, 0, 0, 0, + 70, 16, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 50, 32, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 128, 63, 0, 0, 0, 8, + 34, 0, 16, 0, 0, 0, + 0, 0, 26, 0, 16, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 1, 64, 0, 0, + 0, 0, 128, 63, 56, 0, + 0, 8, 50, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 70, 128, 32, 0, 1, 0, + 0, 0, 3, 0, 0, 0, + 56, 0, 0, 10, 50, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 63, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 66, 0, 16, 0, + 1, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 128, 63, + 16, 0, 0, 8, 66, 32, + 16, 0, 1, 0, 0, 0, + 70, 2, 16, 0, 1, 0, + 0, 0, 70, 130, 32, 0, 1, 0, 0, 0, 0, 0, - 0, 66, 108, 117, 114, 79, - 102, 102, 115, 101, 116, 115, - 72, 0, 171, 171, 171, 1, - 0, 3, 0, 1, 0, 4, - 0, 3, 0, 0, 0, 0, - 0, 0, 0, 66, 108, 117, - 114, 79, 102, 102, 115, 101, - 116, 115, 86, 0, 171, 171, - 171, 1, 0, 3, 0, 1, - 0, 4, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 66, - 108, 117, 114, 87, 101, 105, - 103, 104, 116, 115, 0, 1, - 0, 3, 0, 1, 0, 4, - 0, 3, 0, 0, 0, 0, - 0, 0, 0, 83, 104, 97, - 100, 111, 119, 67, 111, 108, - 111, 114, 0, 1, 0, 3, - 0, 1, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 8, + 130, 32, 16, 0, 1, 0, + 0, 0, 70, 2, 16, 0, + 1, 0, 0, 0, 70, 130, + 32, 0, 1, 0, 0, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 32, 16, 0, + 1, 0, 0, 0, 70, 16, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 62, 0, 0, 1, 83, 84, + 65, 84, 116, 0, 0, 0, + 12, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 6, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 82, 68, 69, 70, + 116, 2, 0, 0, 2, 0, + 0, 0, 100, 0, 0, 0, + 2, 0, 0, 0, 28, 0, + 0, 0, 0, 4, 254, 255, + 0, 1, 0, 0, 67, 2, + 0, 0, 92, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 96, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 99, 98, 48, 0, 99, 98, + 50, 0, 92, 0, 0, 0, + 3, 0, 0, 0, 148, 0, + 0, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 96, 0, 0, 0, + 7, 0, 0, 0, 16, 1, + 0, 0, 112, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 220, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 232, 0, 0, 0, 0, 0, + 0, 0, 248, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 0, 0, 0, 0, + 232, 0, 0, 0, 0, 0, + 0, 0, 2, 1, 0, 0, + 32, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 232, 0, 0, 0, 0, 0, + 0, 0, 81, 117, 97, 100, + 68, 101, 115, 99, 0, 171, + 171, 171, 1, 0, 3, 0, + 1, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 84, 101, 120, 67, 111, 111, + 114, 100, 115, 0, 77, 97, + 115, 107, 84, 101, 120, 67, + 111, 111, 114, 100, 115, 0, + 184, 1, 0, 0, 0, 0, + 0, 0, 44, 0, 0, 0, + 2, 0, 0, 0, 208, 1, + 0, 0, 0, 0, 0, 0, + 224, 1, 0, 0, 48, 0, + 0, 0, 8, 0, 0, 0, + 2, 0, 0, 0, 236, 1, + 0, 0, 0, 0, 0, 0, + 252, 1, 0, 0, 64, 0, + 0, 0, 12, 0, 0, 0, + 0, 0, 0, 0, 4, 2, + 0, 0, 0, 0, 0, 0, + 20, 2, 0, 0, 80, 0, + 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 236, 1, + 0, 0, 0, 0, 0, 0, + 28, 2, 0, 0, 88, 0, + 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 32, 2, + 0, 0, 0, 0, 0, 0, + 48, 2, 0, 0, 92, 0, + 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 32, 2, + 0, 0, 0, 0, 0, 0, + 56, 2, 0, 0, 96, 0, + 0, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 32, 2, + 0, 0, 0, 0, 0, 0, + 68, 101, 118, 105, 99, 101, + 83, 112, 97, 99, 101, 84, + 111, 85, 115, 101, 114, 83, + 112, 97, 99, 101, 0, 171, + 3, 0, 3, 0, 3, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 100, 105, + 109, 101, 110, 115, 105, 111, + 110, 115, 0, 171, 1, 0, + 3, 0, 1, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 100, 105, 102, 102, + 0, 171, 171, 171, 1, 0, + 3, 0, 1, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 99, 101, 110, 116, + 101, 114, 49, 0, 65, 0, + 171, 171, 0, 0, 3, 0, + 1, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 114, 97, 100, 105, 117, 115, + 49, 0, 115, 113, 95, 114, + 97, 100, 105, 117, 115, 49, 0, 77, 105, 99, 114, 111, 115, 111, 102, 116, 32, 40, 82, 41, 32, 72, 76, 83, 76, 32, 83, 104, 97, 100, 101, 114, 32, 67, 111, 109, 112, 105, 108, 101, 114, 32, 57, 46, 50, 57, 46, 57, 53, 50, 46, 51, 49, 49, - 49, 0, 171, 171, 171, 73, - 83, 71, 78, 104, 0, 0, - 0, 3, 0, 0, 0, 8, - 0, 0, 0, 80, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 15, - 0, 0, 0, 92, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 1, 0, 0, 0, 3, - 3, 0, 0, 92, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 1, 0, 0, 0, 12, - 0, 0, 0, 83, 86, 95, - 80, 111, 115, 105, 116, 105, - 111, 110, 0, 84, 69, 88, - 67, 79, 79, 82, 68, 0, - 171, 171, 171, 79, 83, 71, - 78, 44, 0, 0, 0, 1, - 0, 0, 0, 8, 0, 0, - 0, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, - 0, 83, 86, 95, 84, 97, - 114, 103, 101, 116, 0, 171, - 171, 145, 22, 0, 0, 0, - 0, 0, 0, 80, 49, 0, - 4, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 128, 63, + 49, 0, 73, 83, 71, 78, + 44, 0, 0, 0, 1, 0, + 0, 0, 8, 0, 0, 0, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 7, 3, 0, 0, + 80, 79, 83, 73, 84, 73, + 79, 78, 0, 171, 171, 171, + 79, 83, 71, 78, 104, 0, + 0, 0, 3, 0, 0, 0, + 8, 0, 0, 0, 80, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 92, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 3, 12, 0, 0, 92, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 12, 3, 0, 0, 83, 86, + 95, 80, 111, 115, 105, 116, + 105, 111, 110, 0, 84, 69, + 88, 67, 79, 79, 82, 68, + 0, 171, 171, 171, 166, 27, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 144, 7, 0, 0, 68, 88, + 66, 67, 35, 93, 208, 85, + 241, 8, 66, 139, 231, 63, + 6, 177, 181, 56, 138, 103, + 1, 0, 0, 0, 144, 7, + 0, 0, 6, 0, 0, 0, + 56, 0, 0, 0, 180, 1, + 0, 0, 12, 4, 0, 0, + 136, 4, 0, 0, 236, 6, + 0, 0, 92, 7, 0, 0, + 65, 111, 110, 57, 116, 1, + 0, 0, 116, 1, 0, 0, + 0, 2, 255, 255, 60, 1, + 0, 0, 56, 0, 0, 0, + 1, 0, 44, 0, 0, 0, + 56, 0, 0, 0, 56, 0, + 2, 0, 36, 0, 0, 0, + 56, 0, 0, 0, 0, 0, + 1, 1, 1, 0, 0, 0, + 4, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 1, 2, + 255, 255, 81, 0, 0, 5, + 2, 0, 15, 160, 0, 0, + 0, 63, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 31, 0, 0, 2, + 0, 0, 0, 128, 0, 0, + 15, 176, 31, 0, 0, 2, + 0, 0, 0, 144, 0, 8, + 15, 160, 31, 0, 0, 2, + 0, 0, 0, 144, 1, 8, + 15, 160, 5, 0, 0, 3, + 0, 0, 8, 128, 1, 0, + 255, 160, 1, 0, 255, 160, + 2, 0, 0, 3, 0, 0, + 3, 128, 0, 0, 235, 176, + 1, 0, 228, 161, 90, 0, + 0, 4, 0, 0, 8, 128, + 0, 0, 228, 128, 0, 0, + 228, 128, 0, 0, 255, 129, + 5, 0, 0, 3, 0, 0, + 8, 128, 0, 0, 255, 128, + 2, 0, 0, 160, 1, 0, + 0, 2, 0, 0, 4, 128, + 1, 0, 255, 160, 8, 0, + 0, 3, 0, 0, 1, 128, + 0, 0, 228, 128, 0, 0, + 228, 160, 6, 0, 0, 2, + 0, 0, 1, 128, 0, 0, + 0, 128, 5, 0, 0, 3, + 0, 0, 1, 128, 0, 0, + 0, 128, 0, 0, 255, 128, + 1, 0, 0, 2, 0, 0, + 2, 128, 2, 0, 0, 160, + 66, 0, 0, 3, 1, 0, + 15, 128, 0, 0, 228, 176, + 1, 8, 228, 160, 66, 0, + 0, 3, 2, 0, 15, 128, + 0, 0, 228, 128, 0, 8, + 228, 160, 1, 0, 0, 2, + 0, 0, 8, 128, 1, 0, + 255, 160, 4, 0, 0, 4, + 0, 0, 1, 128, 0, 0, + 0, 128, 0, 0, 170, 161, + 0, 0, 255, 129, 5, 0, + 0, 3, 1, 0, 15, 128, + 1, 0, 255, 128, 2, 0, + 228, 128, 88, 0, 0, 4, + 0, 0, 15, 128, 0, 0, + 0, 128, 2, 0, 85, 160, + 1, 0, 228, 128, 1, 0, + 0, 2, 0, 8, 15, 128, + 0, 0, 228, 128, 255, 255, + 0, 0, 83, 72, 68, 82, + 80, 2, 0, 0, 64, 0, + 0, 0, 148, 0, 0, 0, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 0, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 1, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 88, 24, 0, 4, + 0, 112, 16, 0, 1, 0, + 0, 0, 85, 85, 0, 0, + 98, 16, 0, 3, 50, 16, + 16, 0, 1, 0, 0, 0, + 98, 16, 0, 3, 194, 16, + 16, 0, 1, 0, 0, 0, + 101, 0, 0, 3, 242, 32, + 16, 0, 0, 0, 0, 0, + 104, 0, 0, 2, 2, 0, + 0, 0, 0, 0, 0, 9, + 50, 0, 16, 0, 0, 0, + 0, 0, 230, 26, 16, 0, + 1, 0, 0, 0, 70, 128, + 32, 128, 65, 0, 0, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 54, 0, 0, 6, + 66, 0, 16, 0, 0, 0, + 0, 0, 58, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 16, 0, 0, 8, + 66, 0, 16, 0, 0, 0, + 0, 0, 70, 2, 16, 0, + 0, 0, 0, 0, 70, 130, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 15, 0, + 0, 7, 18, 0, 16, 0, + 0, 0, 0, 0, 70, 0, + 16, 0, 0, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 12, + 18, 0, 16, 0, 0, 0, + 0, 0, 58, 128, 32, 128, + 65, 0, 0, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 58, 128, 32, 0, 0, 0, + 0, 0, 5, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 7, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 1, 64, + 0, 0, 0, 0, 0, 63, + 14, 0, 0, 7, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 42, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 66, 0, 16, 0, + 0, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 4, 0, 0, 0, + 29, 0, 0, 9, 66, 0, + 16, 0, 0, 0, 0, 0, + 58, 128, 32, 128, 65, 0, + 0, 0, 0, 0, 0, 0, + 5, 0, 0, 0, 42, 0, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 34, 0, + 16, 0, 0, 0, 0, 0, + 1, 64, 0, 0, 0, 0, + 0, 63, 69, 0, 0, 9, + 242, 0, 16, 0, 1, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 31, 0, 4, 3, + 42, 0, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 8, + 242, 32, 16, 0, 0, 0, + 0, 0, 2, 64, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 62, 0, + 0, 1, 21, 0, 0, 1, + 69, 0, 0, 9, 242, 0, + 16, 0, 0, 0, 0, 0, + 70, 16, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 1, 0, 0, 0, 0, 96, + 16, 0, 1, 0, 0, 0, + 56, 0, 0, 7, 242, 32, + 16, 0, 0, 0, 0, 0, + 246, 15, 16, 0, 0, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 116, 0, 0, 0, 18, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 8, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 128, 63, 1, 0, 0, 0, - 0, 0, 128, 63, 1, 0, - 0, 0, 0, 0, 128, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 82, 68, 69, 70, 92, 2, + 0, 0, 1, 0, 0, 0, + 224, 0, 0, 0, 5, 0, + 0, 0, 28, 0, 0, 0, + 0, 4, 255, 255, 0, 1, + 0, 0, 43, 2, 0, 0, + 188, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 197, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 210, 0, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 12, 0, 0, 0, + 214, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 1, 0, 0, 0, + 1, 0, 0, 0, 12, 0, + 0, 0, 219, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 115, 83, + 97, 109, 112, 108, 101, 114, + 0, 115, 77, 97, 115, 107, + 83, 97, 109, 112, 108, 101, + 114, 0, 116, 101, 120, 0, + 109, 97, 115, 107, 0, 99, + 98, 50, 0, 171, 219, 0, + 0, 0, 7, 0, 0, 0, + 248, 0, 0, 0, 112, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 160, 1, + 0, 0, 0, 0, 0, 0, + 44, 0, 0, 0, 0, 0, + 0, 0, 184, 1, 0, 0, + 0, 0, 0, 0, 200, 1, + 0, 0, 48, 0, 0, 0, + 8, 0, 0, 0, 0, 0, + 0, 0, 212, 1, 0, 0, + 0, 0, 0, 0, 228, 1, + 0, 0, 64, 0, 0, 0, + 12, 0, 0, 0, 2, 0, + 0, 0, 236, 1, 0, 0, + 0, 0, 0, 0, 252, 1, + 0, 0, 80, 0, 0, 0, + 8, 0, 0, 0, 2, 0, + 0, 0, 212, 1, 0, 0, + 0, 0, 0, 0, 4, 2, + 0, 0, 88, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 8, 2, 0, 0, + 0, 0, 0, 0, 24, 2, + 0, 0, 92, 0, 0, 0, + 4, 0, 0, 0, 2, 0, + 0, 0, 8, 2, 0, 0, + 0, 0, 0, 0, 32, 2, + 0, 0, 96, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 8, 2, 0, 0, + 0, 0, 0, 0, 68, 101, + 118, 105, 99, 101, 83, 112, + 97, 99, 101, 84, 111, 85, + 115, 101, 114, 83, 112, 97, + 99, 101, 0, 171, 3, 0, + 3, 0, 3, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 100, 105, 109, 101, + 110, 115, 105, 111, 110, 115, + 0, 171, 1, 0, 3, 0, + 1, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 100, 105, 102, 102, 0, 171, + 171, 171, 1, 0, 3, 0, + 1, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 99, 101, 110, 116, 101, 114, + 49, 0, 65, 0, 171, 171, + 0, 0, 3, 0, 1, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 114, 97, + 100, 105, 117, 115, 49, 0, + 115, 113, 95, 114, 97, 100, + 105, 117, 115, 49, 0, 77, + 105, 99, 114, 111, 115, 111, + 102, 116, 32, 40, 82, 41, + 32, 72, 76, 83, 76, 32, + 83, 104, 97, 100, 101, 114, + 32, 67, 111, 109, 112, 105, + 108, 101, 114, 32, 57, 46, + 50, 57, 46, 57, 53, 50, + 46, 51, 49, 49, 49, 0, + 73, 83, 71, 78, 104, 0, + 0, 0, 3, 0, 0, 0, + 8, 0, 0, 0, 80, 0, + 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, - 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 92, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 3, 3, 0, 0, 92, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 12, 12, 0, 0, 83, 86, + 95, 80, 111, 115, 105, 116, + 105, 111, 110, 0, 84, 69, + 88, 67, 79, 79, 82, 68, + 0, 171, 171, 171, 79, 83, + 71, 78, 44, 0, 0, 0, + 1, 0, 0, 0, 8, 0, + 0, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 15, 0, + 0, 0, 83, 86, 95, 84, + 97, 114, 103, 101, 116, 0, + 171, 171, 194, 34, 0, 0, + 0, 0, 0, 0, 83, 97, + 109, 112, 108, 101, 77, 97, + 115, 107, 101, 100, 84, 101, + 120, 116, 117, 114, 101, 0, 36, 4, 0, 0, 68, 88, 66, 67, 116, 139, 68, 62, 73, 113, 92, 4, 72, 76, 225, 161, 30, 132, 222, 233, 1, 0, 0, 0, 36, 4, 0, 0, 6, 0, 0, 0, 56, 0, 0, 0, 248, 0, 0, 0, 244, 1, 0, 0, @@ -2683,1304 +3620,2339 @@ const BYTE d2deffect[] = 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 12, 3, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, - 171, 171, 184, 32, 0, 0, + 171, 171, 114, 42, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, - 0, 0, 0, 0, 172, 9, + 0, 0, 0, 0, 208, 3, 0, 0, 68, 88, 66, 67, - 110, 68, 159, 211, 251, 173, - 118, 80, 154, 213, 185, 171, - 243, 23, 113, 100, 1, 0, - 0, 0, 172, 9, 0, 0, + 145, 96, 208, 189, 244, 147, + 57, 205, 242, 133, 35, 176, + 39, 143, 121, 235, 1, 0, + 0, 0, 208, 3, 0, 0, 6, 0, 0, 0, 56, 0, - 0, 0, 220, 2, 0, 0, - 204, 6, 0, 0, 72, 7, - 0, 0, 8, 9, 0, 0, - 120, 9, 0, 0, 65, 111, - 110, 57, 156, 2, 0, 0, - 156, 2, 0, 0, 0, 2, - 255, 255, 104, 2, 0, 0, - 52, 0, 0, 0, 1, 0, - 40, 0, 0, 0, 52, 0, - 0, 0, 52, 0, 1, 0, - 36, 0, 0, 0, 52, 0, - 0, 0, 0, 0, 0, 0, - 3, 0, 6, 0, 0, 0, - 0, 0, 0, 0, 1, 2, - 255, 255, 31, 0, 0, 2, - 0, 0, 0, 128, 0, 0, - 15, 176, 31, 0, 0, 2, - 0, 0, 0, 144, 0, 8, - 15, 160, 2, 0, 0, 3, - 0, 0, 2, 128, 0, 0, - 85, 176, 0, 0, 85, 160, + 0, 0, 224, 0, 0, 0, + 188, 1, 0, 0, 56, 2, + 0, 0, 44, 3, 0, 0, + 156, 3, 0, 0, 65, 111, + 110, 57, 160, 0, 0, 0, + 160, 0, 0, 0, 0, 2, + 255, 255, 116, 0, 0, 0, + 44, 0, 0, 0, 0, 0, + 44, 0, 0, 0, 44, 0, + 0, 0, 44, 0, 2, 0, + 36, 0, 0, 0, 44, 0, + 0, 0, 0, 0, 1, 1, + 1, 0, 1, 2, 255, 255, + 31, 0, 0, 2, 0, 0, + 0, 128, 0, 0, 15, 176, + 31, 0, 0, 2, 0, 0, + 0, 144, 0, 8, 15, 160, + 31, 0, 0, 2, 0, 0, + 0, 144, 1, 8, 15, 160, 1, 0, 0, 2, 0, 0, - 1, 128, 0, 0, 0, 176, - 2, 0, 0, 3, 1, 0, - 2, 128, 0, 0, 85, 176, - 0, 0, 0, 160, 1, 0, - 0, 2, 1, 0, 1, 128, - 0, 0, 0, 176, 66, 0, + 3, 128, 0, 0, 235, 176, + 66, 0, 0, 3, 1, 0, + 15, 128, 0, 0, 228, 176, + 0, 8, 228, 160, 66, 0, 0, 3, 0, 0, 15, 128, - 0, 0, 228, 128, 0, 8, - 228, 160, 66, 0, 0, 3, - 1, 0, 15, 128, 1, 0, - 228, 128, 0, 8, 228, 160, - 5, 0, 0, 3, 0, 0, + 0, 0, 228, 128, 1, 8, + 228, 160, 5, 0, 0, 3, + 0, 0, 15, 128, 0, 0, + 255, 128, 1, 0, 228, 128, + 1, 0, 0, 2, 0, 8, 15, 128, 0, 0, 228, 128, - 3, 0, 85, 160, 4, 0, - 0, 4, 0, 0, 15, 128, - 3, 0, 0, 160, 1, 0, - 228, 128, 0, 0, 228, 128, - 2, 0, 0, 3, 1, 0, - 2, 128, 0, 0, 85, 176, - 0, 0, 170, 160, 1, 0, - 0, 2, 1, 0, 1, 128, - 0, 0, 0, 176, 2, 0, - 0, 3, 2, 0, 2, 128, - 0, 0, 85, 176, 0, 0, - 255, 160, 1, 0, 0, 2, - 2, 0, 1, 128, 0, 0, - 0, 176, 66, 0, 0, 3, - 1, 0, 15, 128, 1, 0, - 228, 128, 0, 8, 228, 160, - 66, 0, 0, 3, 2, 0, - 15, 128, 2, 0, 228, 128, - 0, 8, 228, 160, 4, 0, - 0, 4, 0, 0, 15, 128, - 3, 0, 170, 160, 1, 0, - 228, 128, 0, 0, 228, 128, - 4, 0, 0, 4, 0, 0, - 15, 128, 3, 0, 255, 160, - 2, 0, 228, 128, 0, 0, - 228, 128, 2, 0, 0, 3, - 1, 0, 2, 128, 0, 0, - 85, 176, 1, 0, 0, 160, - 1, 0, 0, 2, 1, 0, - 1, 128, 0, 0, 0, 176, - 2, 0, 0, 3, 2, 0, - 2, 128, 0, 0, 85, 176, - 1, 0, 85, 160, 1, 0, - 0, 2, 2, 0, 1, 128, - 0, 0, 0, 176, 66, 0, - 0, 3, 1, 0, 15, 128, - 1, 0, 228, 128, 0, 8, - 228, 160, 66, 0, 0, 3, - 2, 0, 15, 128, 2, 0, - 228, 128, 0, 8, 228, 160, - 4, 0, 0, 4, 0, 0, - 15, 128, 4, 0, 0, 160, - 1, 0, 228, 128, 0, 0, - 228, 128, 4, 0, 0, 4, - 0, 0, 15, 128, 4, 0, - 85, 160, 2, 0, 228, 128, - 0, 0, 228, 128, 2, 0, - 0, 3, 1, 0, 2, 128, - 0, 0, 85, 176, 1, 0, - 170, 160, 1, 0, 0, 2, - 1, 0, 1, 128, 0, 0, - 0, 176, 2, 0, 0, 3, - 2, 0, 2, 128, 0, 0, - 85, 176, 1, 0, 255, 160, - 1, 0, 0, 2, 2, 0, - 1, 128, 0, 0, 0, 176, - 66, 0, 0, 3, 1, 0, - 15, 128, 1, 0, 228, 128, - 0, 8, 228, 160, 66, 0, - 0, 3, 2, 0, 15, 128, - 2, 0, 228, 128, 0, 8, - 228, 160, 4, 0, 0, 4, - 0, 0, 15, 128, 4, 0, - 170, 160, 1, 0, 228, 128, - 0, 0, 228, 128, 4, 0, - 0, 4, 0, 0, 15, 128, - 4, 0, 255, 160, 2, 0, - 228, 128, 0, 0, 228, 128, - 2, 0, 0, 3, 1, 0, - 2, 128, 0, 0, 85, 176, - 2, 0, 0, 160, 1, 0, - 0, 2, 1, 0, 1, 128, - 0, 0, 0, 176, 66, 0, - 0, 3, 1, 0, 15, 128, - 1, 0, 228, 128, 0, 8, - 228, 160, 4, 0, 0, 4, - 0, 0, 15, 128, 5, 0, - 0, 160, 1, 0, 228, 128, - 0, 0, 228, 128, 1, 0, - 0, 2, 0, 8, 15, 128, - 0, 0, 228, 128, 255, 255, - 0, 0, 83, 72, 68, 82, - 232, 3, 0, 0, 64, 0, - 0, 0, 250, 0, 0, 0, - 89, 0, 0, 4, 70, 142, - 32, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 90, 0, - 0, 3, 0, 96, 16, 0, - 0, 0, 0, 0, 88, 24, - 0, 4, 0, 112, 16, 0, - 0, 0, 0, 0, 85, 85, - 0, 0, 98, 16, 0, 3, - 50, 16, 16, 0, 1, 0, - 0, 0, 101, 0, 0, 3, - 242, 32, 16, 0, 0, 0, - 0, 0, 104, 0, 0, 2, - 4, 0, 0, 0, 54, 0, - 0, 5, 82, 0, 16, 0, - 0, 0, 0, 0, 6, 16, + 255, 255, 0, 0, 83, 72, + 68, 82, 212, 0, 0, 0, + 64, 0, 0, 0, 53, 0, + 0, 0, 90, 0, 0, 3, + 0, 96, 16, 0, 0, 0, + 0, 0, 90, 0, 0, 3, + 0, 96, 16, 0, 1, 0, + 0, 0, 88, 24, 0, 4, + 0, 112, 16, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 88, 24, 0, 4, 0, 112, 16, 0, 1, 0, 0, 0, - 0, 0, 0, 8, 242, 0, - 16, 0, 1, 0, 0, 0, - 86, 21, 16, 0, 1, 0, - 0, 0, 134, 141, 32, 0, - 0, 0, 0, 0, 3, 0, - 0, 0, 54, 0, 0, 5, - 162, 0, 16, 0, 0, 0, - 0, 0, 6, 8, 16, 0, - 1, 0, 0, 0, 69, 0, - 0, 9, 242, 0, 16, 0, - 2, 0, 0, 0, 230, 10, - 16, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 0, 0, - 0, 0, 0, 96, 16, 0, - 0, 0, 0, 0, 69, 0, - 0, 9, 242, 0, 16, 0, - 0, 0, 0, 0, 70, 0, + 85, 85, 0, 0, 98, 16, + 0, 3, 50, 16, 16, 0, + 1, 0, 0, 0, 98, 16, + 0, 3, 194, 16, 16, 0, + 1, 0, 0, 0, 101, 0, + 0, 3, 242, 32, 16, 0, + 0, 0, 0, 0, 104, 0, + 0, 2, 2, 0, 0, 0, + 69, 0, 0, 9, 242, 0, 16, 0, 0, 0, 0, 0, - 70, 126, 16, 0, 0, 0, - 0, 0, 0, 96, 16, 0, - 0, 0, 0, 0, 56, 0, - 0, 8, 242, 0, 16, 0, - 2, 0, 0, 0, 70, 14, - 16, 0, 2, 0, 0, 0, - 86, 133, 32, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 0, 0, 0, 0, - 6, 128, 32, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 70, 14, 16, 0, 0, 0, - 0, 0, 70, 14, 16, 0, - 2, 0, 0, 0, 54, 0, - 0, 5, 82, 0, 16, 0, - 1, 0, 0, 0, 6, 16, - 16, 0, 1, 0, 0, 0, - 69, 0, 0, 9, 242, 0, - 16, 0, 2, 0, 0, 0, - 70, 0, 16, 0, 1, 0, + 70, 16, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 0, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, - 230, 10, 16, 0, 1, 0, + 230, 26, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, - 0, 0, 0, 0, 0, 96, - 16, 0, 0, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 0, 0, 0, 0, - 166, 138, 32, 0, 0, 0, - 0, 0, 6, 0, 0, 0, - 70, 14, 16, 0, 2, 0, - 0, 0, 70, 14, 16, 0, - 0, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 0, 0, 0, 0, 246, 143, - 32, 0, 0, 0, 0, 0, - 6, 0, 0, 0, 70, 14, - 16, 0, 1, 0, 0, 0, - 70, 14, 16, 0, 0, 0, - 0, 0, 54, 0, 0, 5, - 82, 0, 16, 0, 1, 0, - 0, 0, 6, 16, 16, 0, - 1, 0, 0, 0, 0, 0, - 0, 8, 242, 0, 16, 0, - 2, 0, 0, 0, 86, 21, + 1, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, - 134, 141, 32, 0, 0, 0, - 0, 0, 4, 0, 0, 0, - 54, 0, 0, 5, 162, 0, - 16, 0, 1, 0, 0, 0, - 6, 8, 16, 0, 2, 0, - 0, 0, 69, 0, 0, 9, - 242, 0, 16, 0, 3, 0, - 0, 0, 70, 0, 16, 0, - 1, 0, 0, 0, 70, 126, - 16, 0, 0, 0, 0, 0, - 0, 96, 16, 0, 0, 0, - 0, 0, 69, 0, 0, 9, - 242, 0, 16, 0, 1, 0, - 0, 0, 230, 10, 16, 0, - 1, 0, 0, 0, 70, 126, - 16, 0, 0, 0, 0, 0, - 0, 96, 16, 0, 0, 0, - 0, 0, 50, 0, 0, 10, - 242, 0, 16, 0, 0, 0, - 0, 0, 6, 128, 32, 0, - 0, 0, 0, 0, 7, 0, - 0, 0, 70, 14, 16, 0, - 3, 0, 0, 0, 70, 14, - 16, 0, 0, 0, 0, 0, - 50, 0, 0, 10, 242, 0, + 56, 0, 0, 7, 242, 32, 16, 0, 0, 0, 0, 0, - 86, 133, 32, 0, 0, 0, - 0, 0, 7, 0, 0, 0, - 70, 14, 16, 0, 1, 0, - 0, 0, 70, 14, 16, 0, - 0, 0, 0, 0, 54, 0, - 0, 5, 82, 0, 16, 0, - 2, 0, 0, 0, 6, 16, - 16, 0, 1, 0, 0, 0, - 69, 0, 0, 9, 242, 0, - 16, 0, 1, 0, 0, 0, - 70, 0, 16, 0, 2, 0, - 0, 0, 70, 126, 16, 0, - 0, 0, 0, 0, 0, 96, - 16, 0, 0, 0, 0, 0, - 69, 0, 0, 9, 242, 0, - 16, 0, 2, 0, 0, 0, - 230, 10, 16, 0, 2, 0, - 0, 0, 70, 126, 16, 0, - 0, 0, 0, 0, 0, 96, - 16, 0, 0, 0, 0, 0, - 50, 0, 0, 10, 242, 0, - 16, 0, 0, 0, 0, 0, - 166, 138, 32, 0, 0, 0, - 0, 0, 7, 0, 0, 0, - 70, 14, 16, 0, 1, 0, - 0, 0, 70, 14, 16, 0, - 0, 0, 0, 0, 50, 0, - 0, 10, 242, 0, 16, 0, - 0, 0, 0, 0, 246, 143, - 32, 0, 0, 0, 0, 0, - 7, 0, 0, 0, 70, 14, - 16, 0, 2, 0, 0, 0, 70, 14, 16, 0, 0, 0, - 0, 0, 0, 0, 0, 8, - 34, 0, 16, 0, 1, 0, - 0, 0, 26, 16, 16, 0, - 1, 0, 0, 0, 10, 128, - 32, 0, 0, 0, 0, 0, - 5, 0, 0, 0, 54, 0, - 0, 5, 18, 0, 16, 0, - 1, 0, 0, 0, 10, 16, - 16, 0, 1, 0, 0, 0, - 69, 0, 0, 9, 242, 0, - 16, 0, 1, 0, 0, 0, - 70, 0, 16, 0, 1, 0, - 0, 0, 70, 126, 16, 0, - 0, 0, 0, 0, 0, 96, - 16, 0, 0, 0, 0, 0, - 50, 0, 0, 10, 242, 32, - 16, 0, 0, 0, 0, 0, - 6, 128, 32, 0, 0, 0, - 0, 0, 8, 0, 0, 0, - 70, 14, 16, 0, 1, 0, - 0, 0, 70, 14, 16, 0, - 0, 0, 0, 0, 62, 0, + 0, 0, 246, 15, 16, 0, + 1, 0, 0, 0, 62, 0, 0, 1, 83, 84, 65, 84, - 116, 0, 0, 0, 29, 0, - 0, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 2, 0, - 0, 0, 4, 0, 0, 0, + 116, 0, 0, 0, 4, 0, + 0, 0, 2, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 9, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 9, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 82, 68, 69, 70, 184, 1, - 0, 0, 1, 0, 0, 0, - 148, 0, 0, 0, 3, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 82, 68, 69, 70, 236, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, 0, 0, 28, 0, 0, 0, 0, 4, 255, 255, 0, 1, - 0, 0, 132, 1, 0, 0, - 124, 0, 0, 0, 3, 0, + 0, 0, 187, 0, 0, 0, + 156, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, - 0, 0, 139, 0, 0, 0, - 2, 0, 0, 0, 5, 0, - 0, 0, 4, 0, 0, 0, - 255, 255, 255, 255, 0, 0, - 0, 0, 1, 0, 0, 0, - 12, 0, 0, 0, 143, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 0, 165, 0, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, - 0, 0, 0, 0, 0, 0, - 115, 83, 104, 97, 100, 111, - 119, 83, 97, 109, 112, 108, - 101, 114, 0, 116, 101, 120, - 0, 99, 98, 49, 0, 171, - 143, 0, 0, 0, 4, 0, - 0, 0, 172, 0, 0, 0, - 160, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 12, 1, 0, 0, 0, 0, - 0, 0, 48, 0, 0, 0, - 0, 0, 0, 0, 28, 1, - 0, 0, 0, 0, 0, 0, - 44, 1, 0, 0, 48, 0, - 0, 0, 48, 0, 0, 0, - 2, 0, 0, 0, 60, 1, - 0, 0, 0, 0, 0, 0, - 76, 1, 0, 0, 96, 0, - 0, 0, 48, 0, 0, 0, - 2, 0, 0, 0, 88, 1, - 0, 0, 0, 0, 0, 0, - 104, 1, 0, 0, 144, 0, - 0, 0, 16, 0, 0, 0, - 0, 0, 0, 0, 116, 1, - 0, 0, 0, 0, 0, 0, - 66, 108, 117, 114, 79, 102, - 102, 115, 101, 116, 115, 72, - 0, 171, 171, 171, 1, 0, - 3, 0, 1, 0, 4, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 66, 108, 117, 114, - 79, 102, 102, 115, 101, 116, - 115, 86, 0, 171, 171, 171, - 1, 0, 3, 0, 1, 0, - 4, 0, 3, 0, 0, 0, - 0, 0, 0, 0, 66, 108, - 117, 114, 87, 101, 105, 103, - 104, 116, 115, 0, 1, 0, - 3, 0, 1, 0, 4, 0, - 3, 0, 0, 0, 0, 0, - 0, 0, 83, 104, 97, 100, - 111, 119, 67, 111, 108, 111, - 114, 0, 1, 0, 3, 0, - 1, 0, 4, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 77, 105, 99, 114, 111, 115, - 111, 102, 116, 32, 40, 82, - 41, 32, 72, 76, 83, 76, - 32, 83, 104, 97, 100, 101, - 114, 32, 67, 111, 109, 112, - 105, 108, 101, 114, 32, 57, - 46, 50, 57, 46, 57, 53, - 50, 46, 51, 49, 49, 49, - 0, 171, 171, 171, 73, 83, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 178, 0, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 12, 0, 0, 0, + 182, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 1, 0, 0, 0, + 1, 0, 0, 0, 12, 0, + 0, 0, 115, 83, 97, 109, + 112, 108, 101, 114, 0, 115, + 77, 97, 115, 107, 83, 97, + 109, 112, 108, 101, 114, 0, + 116, 101, 120, 0, 109, 97, + 115, 107, 0, 77, 105, 99, + 114, 111, 115, 111, 102, 116, + 32, 40, 82, 41, 32, 72, + 76, 83, 76, 32, 83, 104, + 97, 100, 101, 114, 32, 67, + 111, 109, 112, 105, 108, 101, + 114, 32, 57, 46, 50, 57, + 46, 57, 53, 50, 46, 51, + 49, 49, 49, 0, 73, 83, 71, 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, 0, 80, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 92, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, 0, 3, 3, 0, 0, 92, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, - 1, 0, 0, 0, 12, 0, + 1, 0, 0, 0, 12, 12, 0, 0, 83, 86, 95, 80, 111, 115, 105, 116, 105, 111, 110, 0, 84, 69, 88, 67, 79, 79, 82, 68, 0, 171, 171, 171, 79, 83, 71, 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, 0, 32, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, 0, 83, 86, 95, 84, 97, 114, 103, 101, 116, 0, 171, 171, - 244, 36, 0, 0, 0, 0, - 0, 0, 80, 50, 0, 4, - 0, 0, 0, 1, 0, 0, + 174, 46, 0, 0, 0, 0, + 0, 0, 83, 97, 109, 112, + 108, 101, 84, 101, 120, 116, + 117, 114, 101, 87, 105, 116, + 104, 83, 104, 97, 100, 111, + 119, 0, 4, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 128, 63, 1, 0, 0, 0, + 0, 0, 128, 63, 1, 0, + 0, 0, 0, 0, 128, 63, + 1, 0, 0, 0, 0, 0, + 128, 63, 1, 0, 0, 0, + 3, 0, 0, 0, 255, 255, + 255, 255, 36, 4, 0, 0, + 68, 88, 66, 67, 116, 139, + 68, 62, 73, 113, 92, 4, + 72, 76, 225, 161, 30, 132, + 222, 233, 1, 0, 0, 0, + 36, 4, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 248, 0, 0, 0, 244, 1, + 0, 0, 112, 2, 0, 0, + 128, 3, 0, 0, 180, 3, + 0, 0, 65, 111, 110, 57, + 184, 0, 0, 0, 184, 0, + 0, 0, 0, 2, 254, 255, + 132, 0, 0, 0, 52, 0, + 0, 0, 1, 0, 36, 0, + 0, 0, 48, 0, 0, 0, + 48, 0, 0, 0, 36, 0, + 1, 0, 48, 0, 0, 0, + 0, 0, 3, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 254, 255, + 81, 0, 0, 5, 4, 0, + 15, 160, 0, 0, 0, 0, + 0, 0, 128, 63, 0, 0, + 0, 0, 0, 0, 0, 0, + 31, 0, 0, 2, 5, 0, + 0, 128, 0, 0, 15, 144, + 4, 0, 0, 4, 0, 0, + 3, 224, 0, 0, 228, 144, + 2, 0, 238, 160, 2, 0, + 228, 160, 4, 0, 0, 4, + 0, 0, 12, 224, 0, 0, + 20, 144, 3, 0, 180, 160, + 3, 0, 20, 160, 4, 0, + 0, 4, 0, 0, 3, 128, + 0, 0, 228, 144, 1, 0, + 238, 160, 1, 0, 228, 160, + 2, 0, 0, 3, 0, 0, + 3, 192, 0, 0, 228, 128, + 0, 0, 228, 160, 1, 0, + 0, 2, 0, 0, 12, 192, + 4, 0, 68, 160, 255, 255, + 0, 0, 83, 72, 68, 82, + 244, 0, 0, 0, 64, 0, + 1, 0, 61, 0, 0, 0, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 95, 0, + 0, 3, 50, 16, 16, 0, + 0, 0, 0, 0, 103, 0, + 0, 4, 242, 32, 16, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 101, 0, 0, 3, + 50, 32, 16, 0, 1, 0, + 0, 0, 101, 0, 0, 3, + 194, 32, 16, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 50, 32, 16, 0, 0, 0, + 0, 0, 70, 16, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 54, 0, + 0, 8, 194, 32, 16, 0, + 0, 0, 0, 0, 2, 64, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 128, 63, + 50, 0, 0, 11, 50, 32, + 16, 0, 1, 0, 0, 0, + 70, 16, 16, 0, 0, 0, + 0, 0, 230, 138, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 70, 128, 32, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 50, 0, 0, 11, + 194, 32, 16, 0, 1, 0, + 0, 0, 6, 20, 16, 0, + 0, 0, 0, 0, 166, 142, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 6, 132, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 62, 0, + 0, 1, 83, 84, 65, 84, + 116, 0, 0, 0, 5, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 82, 68, 69, 70, 8, 1, + 0, 0, 1, 0, 0, 0, + 64, 0, 0, 0, 1, 0, + 0, 0, 28, 0, 0, 0, + 0, 4, 254, 255, 0, 1, + 0, 0, 212, 0, 0, 0, + 60, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 99, 98, 48, 0, + 60, 0, 0, 0, 3, 0, + 0, 0, 88, 0, 0, 0, + 48, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 160, 0, 0, 0, 0, 0, + 0, 0, 16, 0, 0, 0, + 2, 0, 0, 0, 172, 0, + 0, 0, 0, 0, 0, 0, + 188, 0, 0, 0, 16, 0, + 0, 0, 16, 0, 0, 0, + 2, 0, 0, 0, 172, 0, + 0, 0, 0, 0, 0, 0, + 198, 0, 0, 0, 32, 0, + 0, 0, 16, 0, 0, 0, + 2, 0, 0, 0, 172, 0, + 0, 0, 0, 0, 0, 0, + 81, 117, 97, 100, 68, 101, + 115, 99, 0, 171, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 84, 101, + 120, 67, 111, 111, 114, 100, + 115, 0, 77, 97, 115, 107, + 84, 101, 120, 67, 111, 111, + 114, 100, 115, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 57, 46, 50, + 57, 46, 57, 53, 50, 46, + 51, 49, 49, 49, 0, 171, + 171, 171, 73, 83, 71, 78, + 44, 0, 0, 0, 1, 0, + 0, 0, 8, 0, 0, 0, + 32, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 7, 3, 0, 0, + 80, 79, 83, 73, 84, 73, + 79, 78, 0, 171, 171, 171, + 79, 83, 71, 78, 104, 0, + 0, 0, 3, 0, 0, 0, + 8, 0, 0, 0, 80, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 92, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 3, 12, 0, 0, 92, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 12, 3, 0, 0, 83, 86, + 95, 80, 111, 115, 105, 116, + 105, 111, 110, 0, 84, 69, + 88, 67, 79, 79, 82, 68, + 0, 171, 171, 171, 210, 50, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 2, 0, + 0, 0, 0, 0, 0, 0, + 232, 9, 0, 0, 68, 88, + 66, 67, 45, 80, 33, 8, + 5, 16, 134, 134, 115, 16, + 129, 43, 103, 216, 255, 210, + 1, 0, 0, 0, 232, 9, + 0, 0, 6, 0, 0, 0, + 56, 0, 0, 0, 248, 2, + 0, 0, 8, 7, 0, 0, + 132, 7, 0, 0, 68, 9, + 0, 0, 180, 9, 0, 0, + 65, 111, 110, 57, 184, 2, + 0, 0, 184, 2, 0, 0, + 0, 2, 255, 255, 120, 2, + 0, 0, 64, 0, 0, 0, + 2, 0, 40, 0, 0, 0, + 64, 0, 0, 0, 64, 0, + 1, 0, 36, 0, 0, 0, + 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 6, 0, 4, 0, + 3, 0, 0, 0, 0, 0, + 1, 2, 255, 255, 31, 0, + 0, 2, 0, 0, 0, 128, + 0, 0, 15, 176, 31, 0, + 0, 2, 0, 0, 0, 144, + 0, 8, 15, 160, 2, 0, + 0, 3, 0, 0, 1, 128, + 0, 0, 0, 176, 0, 0, + 85, 160, 1, 0, 0, 2, + 0, 0, 2, 128, 0, 0, + 85, 176, 2, 0, 0, 3, + 1, 0, 1, 128, 0, 0, + 0, 176, 0, 0, 0, 160, + 1, 0, 0, 2, 1, 0, + 2, 128, 0, 0, 85, 176, + 66, 0, 0, 3, 0, 0, + 15, 128, 0, 0, 228, 128, + 0, 8, 228, 160, 66, 0, + 0, 3, 1, 0, 15, 128, + 1, 0, 228, 128, 0, 8, + 228, 160, 5, 0, 0, 3, + 0, 0, 1, 128, 0, 0, + 255, 128, 3, 0, 85, 160, + 4, 0, 0, 4, 0, 0, + 1, 128, 3, 0, 0, 160, + 1, 0, 255, 128, 0, 0, + 0, 128, 2, 0, 0, 3, + 1, 0, 1, 128, 0, 0, + 0, 176, 0, 0, 170, 160, + 1, 0, 0, 2, 1, 0, + 2, 128, 0, 0, 85, 176, + 2, 0, 0, 3, 2, 0, + 1, 128, 0, 0, 0, 176, + 0, 0, 255, 160, 1, 0, + 0, 2, 2, 0, 2, 128, + 0, 0, 85, 176, 66, 0, + 0, 3, 1, 0, 15, 128, + 1, 0, 228, 128, 0, 8, + 228, 160, 66, 0, 0, 3, + 2, 0, 15, 128, 2, 0, + 228, 128, 0, 8, 228, 160, + 4, 0, 0, 4, 0, 0, + 1, 128, 3, 0, 170, 160, + 1, 0, 255, 128, 0, 0, + 0, 128, 4, 0, 0, 4, + 0, 0, 1, 128, 3, 0, + 255, 160, 2, 0, 255, 128, + 0, 0, 0, 128, 2, 0, + 0, 3, 1, 0, 1, 128, + 0, 0, 0, 176, 1, 0, + 0, 160, 1, 0, 0, 2, + 1, 0, 2, 128, 0, 0, + 85, 176, 2, 0, 0, 3, + 2, 0, 1, 128, 0, 0, + 0, 176, 1, 0, 85, 160, + 1, 0, 0, 2, 2, 0, + 2, 128, 0, 0, 85, 176, + 66, 0, 0, 3, 1, 0, + 15, 128, 1, 0, 228, 128, + 0, 8, 228, 160, 66, 0, + 0, 3, 2, 0, 15, 128, + 2, 0, 228, 128, 0, 8, + 228, 160, 4, 0, 0, 4, + 0, 0, 1, 128, 4, 0, + 0, 160, 1, 0, 255, 128, + 0, 0, 0, 128, 4, 0, + 0, 4, 0, 0, 1, 128, + 4, 0, 85, 160, 2, 0, + 255, 128, 0, 0, 0, 128, + 2, 0, 0, 3, 1, 0, + 1, 128, 0, 0, 0, 176, + 1, 0, 170, 160, 1, 0, + 0, 2, 1, 0, 2, 128, + 0, 0, 85, 176, 2, 0, + 0, 3, 2, 0, 1, 128, + 0, 0, 0, 176, 1, 0, + 255, 160, 1, 0, 0, 2, + 2, 0, 2, 128, 0, 0, + 85, 176, 66, 0, 0, 3, + 1, 0, 15, 128, 1, 0, + 228, 128, 0, 8, 228, 160, + 66, 0, 0, 3, 2, 0, + 15, 128, 2, 0, 228, 128, + 0, 8, 228, 160, 4, 0, + 0, 4, 0, 0, 1, 128, + 4, 0, 170, 160, 1, 0, + 255, 128, 0, 0, 0, 128, + 4, 0, 0, 4, 0, 0, + 1, 128, 4, 0, 255, 160, + 2, 0, 255, 128, 0, 0, + 0, 128, 2, 0, 0, 3, + 1, 0, 1, 128, 0, 0, + 0, 176, 2, 0, 0, 160, + 1, 0, 0, 2, 1, 0, + 2, 128, 0, 0, 85, 176, + 66, 0, 0, 3, 1, 0, + 15, 128, 1, 0, 228, 128, + 0, 8, 228, 160, 4, 0, + 0, 4, 0, 0, 1, 128, + 5, 0, 0, 160, 1, 0, + 255, 128, 0, 0, 0, 128, + 5, 0, 0, 3, 0, 0, + 15, 128, 0, 0, 0, 128, + 6, 0, 228, 160, 1, 0, + 0, 2, 0, 8, 15, 128, + 0, 0, 228, 128, 255, 255, + 0, 0, 83, 72, 68, 82, + 8, 4, 0, 0, 64, 0, + 0, 0, 2, 1, 0, 0, + 89, 0, 0, 4, 70, 142, + 32, 0, 0, 0, 0, 0, + 10, 0, 0, 0, 90, 0, + 0, 3, 0, 96, 16, 0, + 0, 0, 0, 0, 88, 24, + 0, 4, 0, 112, 16, 0, + 0, 0, 0, 0, 85, 85, + 0, 0, 98, 16, 0, 3, + 50, 16, 16, 0, 1, 0, + 0, 0, 101, 0, 0, 3, + 242, 32, 16, 0, 0, 0, + 0, 0, 104, 0, 0, 2, + 4, 0, 0, 0, 0, 0, + 0, 8, 242, 0, 16, 0, + 0, 0, 0, 0, 6, 16, + 16, 0, 1, 0, 0, 0, + 38, 135, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 82, 0, + 16, 0, 1, 0, 0, 0, + 86, 7, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 162, 0, 16, 0, 1, 0, + 0, 0, 86, 21, 16, 0, + 1, 0, 0, 0, 69, 0, + 0, 9, 242, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 69, 0, + 0, 9, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 18, 0, 16, 0, + 1, 0, 0, 0, 58, 0, + 16, 0, 2, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 50, 0, 0, 10, 18, 0, + 16, 0, 1, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 54, 0, + 0, 5, 162, 0, 16, 0, + 0, 0, 0, 0, 86, 21, + 16, 0, 1, 0, 0, 0, + 69, 0, 0, 9, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 69, 0, 0, 9, 242, 0, + 16, 0, 0, 0, 0, 0, + 230, 10, 16, 0, 0, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 6, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 10, 18, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 58, 0, + 16, 0, 0, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 8, + 242, 0, 16, 0, 1, 0, + 0, 0, 6, 16, 16, 0, + 1, 0, 0, 0, 38, 135, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 54, 0, + 0, 5, 82, 0, 16, 0, + 2, 0, 0, 0, 86, 7, + 16, 0, 1, 0, 0, 0, + 54, 0, 0, 5, 162, 0, + 16, 0, 2, 0, 0, 0, + 86, 21, 16, 0, 1, 0, + 0, 0, 69, 0, 0, 9, + 242, 0, 16, 0, 3, 0, + 0, 0, 70, 0, 16, 0, + 2, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 69, 0, 0, 9, + 242, 0, 16, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 2, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 18, 0, 16, 0, 0, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 7, 0, + 0, 0, 58, 0, 16, 0, + 3, 0, 0, 0, 10, 0, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 26, 128, 32, 0, 0, 0, + 0, 0, 7, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 54, 0, + 0, 5, 162, 0, 16, 0, + 1, 0, 0, 0, 86, 21, + 16, 0, 1, 0, 0, 0, + 69, 0, 0, 9, 242, 0, + 16, 0, 2, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 69, 0, 0, 9, 242, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 42, 128, 32, 0, 0, 0, + 0, 0, 7, 0, 0, 0, + 58, 0, 16, 0, 2, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 10, 18, 0, 16, 0, + 0, 0, 0, 0, 58, 128, + 32, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 58, 0, + 16, 0, 1, 0, 0, 0, + 10, 0, 16, 0, 0, 0, + 0, 0, 0, 0, 0, 8, + 18, 0, 16, 0, 1, 0, + 0, 0, 10, 16, 16, 0, + 1, 0, 0, 0, 10, 128, + 32, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 54, 0, + 0, 5, 34, 0, 16, 0, + 1, 0, 0, 0, 26, 16, + 16, 0, 1, 0, 0, 0, + 69, 0, 0, 9, 242, 0, + 16, 0, 1, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 10, 18, 0, + 16, 0, 0, 0, 0, 0, + 10, 128, 32, 0, 0, 0, + 0, 0, 8, 0, 0, 0, + 58, 0, 16, 0, 1, 0, + 0, 0, 10, 0, 16, 0, + 0, 0, 0, 0, 56, 0, + 0, 8, 242, 32, 16, 0, + 0, 0, 0, 0, 6, 0, + 16, 0, 0, 0, 0, 0, + 70, 142, 32, 0, 0, 0, + 0, 0, 9, 0, 0, 0, + 62, 0, 0, 1, 83, 84, + 65, 84, 116, 0, 0, 0, + 30, 0, 0, 0, 4, 0, + 0, 0, 0, 0, 0, 0, + 2, 0, 0, 0, 5, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 9, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 82, 68, 69, 70, + 184, 1, 0, 0, 1, 0, + 0, 0, 148, 0, 0, 0, + 3, 0, 0, 0, 28, 0, + 0, 0, 0, 4, 255, 255, + 0, 1, 0, 0, 132, 1, + 0, 0, 124, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 139, 0, + 0, 0, 2, 0, 0, 0, + 5, 0, 0, 0, 4, 0, + 0, 0, 255, 255, 255, 255, + 0, 0, 0, 0, 1, 0, + 0, 0, 12, 0, 0, 0, + 143, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 115, 83, 104, 97, + 100, 111, 119, 83, 97, 109, + 112, 108, 101, 114, 0, 116, + 101, 120, 0, 99, 98, 49, + 0, 171, 143, 0, 0, 0, + 4, 0, 0, 0, 172, 0, + 0, 0, 160, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 12, 1, 0, 0, + 0, 0, 0, 0, 48, 0, + 0, 0, 2, 0, 0, 0, + 28, 1, 0, 0, 0, 0, + 0, 0, 44, 1, 0, 0, + 48, 0, 0, 0, 48, 0, + 0, 0, 0, 0, 0, 0, + 60, 1, 0, 0, 0, 0, + 0, 0, 76, 1, 0, 0, + 96, 0, 0, 0, 48, 0, + 0, 0, 2, 0, 0, 0, + 88, 1, 0, 0, 0, 0, + 0, 0, 104, 1, 0, 0, + 144, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 116, 1, 0, 0, 0, 0, + 0, 0, 66, 108, 117, 114, + 79, 102, 102, 115, 101, 116, + 115, 72, 0, 171, 171, 171, + 1, 0, 3, 0, 1, 0, + 4, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 66, 108, + 117, 114, 79, 102, 102, 115, + 101, 116, 115, 86, 0, 171, + 171, 171, 1, 0, 3, 0, + 1, 0, 4, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 66, 108, 117, 114, 87, 101, + 105, 103, 104, 116, 115, 0, + 1, 0, 3, 0, 1, 0, + 4, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 83, 104, + 97, 100, 111, 119, 67, 111, + 108, 111, 114, 0, 1, 0, + 3, 0, 1, 0, 4, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 77, 105, 99, 114, + 111, 115, 111, 102, 116, 32, + 40, 82, 41, 32, 72, 76, + 83, 76, 32, 83, 104, 97, + 100, 101, 114, 32, 67, 111, + 109, 112, 105, 108, 101, 114, + 32, 57, 46, 50, 57, 46, + 57, 53, 50, 46, 51, 49, + 49, 49, 0, 171, 171, 171, + 73, 83, 71, 78, 104, 0, + 0, 0, 3, 0, 0, 0, + 8, 0, 0, 0, 80, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 92, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 3, 3, 0, 0, 92, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 1, 0, 0, 0, + 12, 0, 0, 0, 83, 86, + 95, 80, 111, 115, 105, 116, + 105, 111, 110, 0, 84, 69, + 88, 67, 79, 79, 82, 68, + 0, 171, 171, 171, 79, 83, + 71, 78, 44, 0, 0, 0, + 1, 0, 0, 0, 8, 0, + 0, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 15, 0, + 0, 0, 83, 86, 95, 84, + 97, 114, 103, 101, 116, 0, + 171, 171, 14, 55, 0, 0, + 0, 0, 0, 0, 4, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 128, 63, 1, 0, + 0, 0, 0, 0, 128, 63, + 1, 0, 0, 0, 0, 0, + 128, 63, 1, 0, 0, 0, + 0, 0, 128, 63, 1, 0, + 0, 0, 3, 0, 0, 0, + 255, 255, 255, 255, 36, 4, + 0, 0, 68, 88, 66, 67, + 116, 139, 68, 62, 73, 113, + 92, 4, 72, 76, 225, 161, + 30, 132, 222, 233, 1, 0, + 0, 0, 36, 4, 0, 0, + 6, 0, 0, 0, 56, 0, + 0, 0, 248, 0, 0, 0, + 244, 1, 0, 0, 112, 2, + 0, 0, 128, 3, 0, 0, + 180, 3, 0, 0, 65, 111, + 110, 57, 184, 0, 0, 0, + 184, 0, 0, 0, 0, 2, + 254, 255, 132, 0, 0, 0, + 52, 0, 0, 0, 1, 0, + 36, 0, 0, 0, 48, 0, + 0, 0, 48, 0, 0, 0, + 36, 0, 1, 0, 48, 0, + 0, 0, 0, 0, 3, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 2, + 254, 255, 81, 0, 0, 5, + 4, 0, 15, 160, 0, 0, + 0, 0, 0, 0, 128, 63, + 0, 0, 0, 0, 0, 0, + 0, 0, 31, 0, 0, 2, + 5, 0, 0, 128, 0, 0, + 15, 144, 4, 0, 0, 4, + 0, 0, 3, 224, 0, 0, + 228, 144, 2, 0, 238, 160, + 2, 0, 228, 160, 4, 0, + 0, 4, 0, 0, 12, 224, + 0, 0, 20, 144, 3, 0, + 180, 160, 3, 0, 20, 160, + 4, 0, 0, 4, 0, 0, + 3, 128, 0, 0, 228, 144, + 1, 0, 238, 160, 1, 0, + 228, 160, 2, 0, 0, 3, + 0, 0, 3, 192, 0, 0, + 228, 128, 0, 0, 228, 160, + 1, 0, 0, 2, 0, 0, + 12, 192, 4, 0, 68, 160, + 255, 255, 0, 0, 83, 72, + 68, 82, 244, 0, 0, 0, + 64, 0, 1, 0, 61, 0, + 0, 0, 89, 0, 0, 4, + 70, 142, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 95, 0, 0, 3, 50, 16, + 16, 0, 0, 0, 0, 0, + 103, 0, 0, 4, 242, 32, + 16, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 101, 0, + 0, 3, 50, 32, 16, 0, + 1, 0, 0, 0, 101, 0, + 0, 3, 194, 32, 16, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 50, 32, 16, 0, + 0, 0, 0, 0, 70, 16, + 16, 0, 0, 0, 0, 0, + 230, 138, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 70, 128, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 54, 0, 0, 8, 194, 32, + 16, 0, 0, 0, 0, 0, + 2, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 128, 63, 50, 0, 0, 11, + 50, 32, 16, 0, 1, 0, + 0, 0, 70, 16, 16, 0, + 0, 0, 0, 0, 230, 138, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 70, 128, + 32, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 50, 0, + 0, 11, 194, 32, 16, 0, + 1, 0, 0, 0, 6, 20, + 16, 0, 0, 0, 0, 0, + 166, 142, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 6, 132, 32, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 62, 0, 0, 1, 83, 84, + 65, 84, 116, 0, 0, 0, + 5, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 82, 68, 69, 70, + 8, 1, 0, 0, 1, 0, + 0, 0, 64, 0, 0, 0, + 1, 0, 0, 0, 28, 0, + 0, 0, 0, 4, 254, 255, + 0, 1, 0, 0, 212, 0, + 0, 0, 60, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 99, 98, + 48, 0, 60, 0, 0, 0, + 3, 0, 0, 0, 88, 0, + 0, 0, 48, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 160, 0, 0, 0, + 0, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 172, 0, 0, 0, 0, 0, + 0, 0, 188, 0, 0, 0, + 16, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 172, 0, 0, 0, 0, 0, + 0, 0, 198, 0, 0, 0, + 32, 0, 0, 0, 16, 0, + 0, 0, 2, 0, 0, 0, + 172, 0, 0, 0, 0, 0, + 0, 0, 81, 117, 97, 100, + 68, 101, 115, 99, 0, 171, + 171, 171, 1, 0, 3, 0, + 1, 0, 4, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 84, 101, 120, 67, 111, 111, + 114, 100, 115, 0, 77, 97, + 115, 107, 84, 101, 120, 67, + 111, 111, 114, 100, 115, 0, + 77, 105, 99, 114, 111, 115, + 111, 102, 116, 32, 40, 82, + 41, 32, 72, 76, 83, 76, + 32, 83, 104, 97, 100, 101, + 114, 32, 67, 111, 109, 112, + 105, 108, 101, 114, 32, 57, + 46, 50, 57, 46, 57, 53, + 50, 46, 51, 49, 49, 49, + 0, 171, 171, 171, 73, 83, + 71, 78, 44, 0, 0, 0, + 1, 0, 0, 0, 8, 0, + 0, 0, 32, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 7, 3, + 0, 0, 80, 79, 83, 73, + 84, 73, 79, 78, 0, 171, + 171, 171, 79, 83, 71, 78, + 104, 0, 0, 0, 3, 0, + 0, 0, 8, 0, 0, 0, + 80, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, + 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 3, 12, 0, 0, + 92, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 12, 3, 0, 0, + 83, 86, 95, 80, 111, 115, + 105, 116, 105, 111, 110, 0, + 84, 69, 88, 67, 79, 79, + 82, 68, 0, 171, 171, 171, + 50, 65, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 2, 0, 0, 0, 0, 0, + 0, 0, 172, 9, 0, 0, + 68, 88, 66, 67, 110, 68, + 159, 211, 251, 173, 118, 80, + 154, 213, 185, 171, 243, 23, + 113, 100, 1, 0, 0, 0, + 172, 9, 0, 0, 6, 0, + 0, 0, 56, 0, 0, 0, + 220, 2, 0, 0, 204, 6, + 0, 0, 72, 7, 0, 0, + 8, 9, 0, 0, 120, 9, + 0, 0, 65, 111, 110, 57, + 156, 2, 0, 0, 156, 2, + 0, 0, 0, 2, 255, 255, + 104, 2, 0, 0, 52, 0, + 0, 0, 1, 0, 40, 0, + 0, 0, 52, 0, 0, 0, + 52, 0, 1, 0, 36, 0, + 0, 0, 52, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 6, 0, 0, 0, 0, 0, + 0, 0, 1, 2, 255, 255, + 31, 0, 0, 2, 0, 0, + 0, 128, 0, 0, 15, 176, + 31, 0, 0, 2, 0, 0, + 0, 144, 0, 8, 15, 160, + 2, 0, 0, 3, 0, 0, + 2, 128, 0, 0, 85, 176, + 0, 0, 85, 160, 1, 0, + 0, 2, 0, 0, 1, 128, + 0, 0, 0, 176, 2, 0, + 0, 3, 1, 0, 2, 128, + 0, 0, 85, 176, 0, 0, + 0, 160, 1, 0, 0, 2, + 1, 0, 1, 128, 0, 0, + 0, 176, 66, 0, 0, 3, + 0, 0, 15, 128, 0, 0, + 228, 128, 0, 8, 228, 160, + 66, 0, 0, 3, 1, 0, + 15, 128, 1, 0, 228, 128, + 0, 8, 228, 160, 5, 0, + 0, 3, 0, 0, 15, 128, + 0, 0, 228, 128, 3, 0, + 85, 160, 4, 0, 0, 4, + 0, 0, 15, 128, 3, 0, + 0, 160, 1, 0, 228, 128, + 0, 0, 228, 128, 2, 0, + 0, 3, 1, 0, 2, 128, + 0, 0, 85, 176, 0, 0, + 170, 160, 1, 0, 0, 2, + 1, 0, 1, 128, 0, 0, + 0, 176, 2, 0, 0, 3, + 2, 0, 2, 128, 0, 0, + 85, 176, 0, 0, 255, 160, + 1, 0, 0, 2, 2, 0, + 1, 128, 0, 0, 0, 176, + 66, 0, 0, 3, 1, 0, + 15, 128, 1, 0, 228, 128, + 0, 8, 228, 160, 66, 0, + 0, 3, 2, 0, 15, 128, + 2, 0, 228, 128, 0, 8, + 228, 160, 4, 0, 0, 4, + 0, 0, 15, 128, 3, 0, + 170, 160, 1, 0, 228, 128, + 0, 0, 228, 128, 4, 0, + 0, 4, 0, 0, 15, 128, + 3, 0, 255, 160, 2, 0, + 228, 128, 0, 0, 228, 128, + 2, 0, 0, 3, 1, 0, + 2, 128, 0, 0, 85, 176, + 1, 0, 0, 160, 1, 0, + 0, 2, 1, 0, 1, 128, + 0, 0, 0, 176, 2, 0, + 0, 3, 2, 0, 2, 128, + 0, 0, 85, 176, 1, 0, + 85, 160, 1, 0, 0, 2, + 2, 0, 1, 128, 0, 0, + 0, 176, 66, 0, 0, 3, + 1, 0, 15, 128, 1, 0, + 228, 128, 0, 8, 228, 160, + 66, 0, 0, 3, 2, 0, + 15, 128, 2, 0, 228, 128, + 0, 8, 228, 160, 4, 0, + 0, 4, 0, 0, 15, 128, + 4, 0, 0, 160, 1, 0, + 228, 128, 0, 0, 228, 128, + 4, 0, 0, 4, 0, 0, + 15, 128, 4, 0, 85, 160, + 2, 0, 228, 128, 0, 0, + 228, 128, 2, 0, 0, 3, + 1, 0, 2, 128, 0, 0, + 85, 176, 1, 0, 170, 160, + 1, 0, 0, 2, 1, 0, + 1, 128, 0, 0, 0, 176, + 2, 0, 0, 3, 2, 0, + 2, 128, 0, 0, 85, 176, + 1, 0, 255, 160, 1, 0, + 0, 2, 2, 0, 1, 128, + 0, 0, 0, 176, 66, 0, + 0, 3, 1, 0, 15, 128, + 1, 0, 228, 128, 0, 8, + 228, 160, 66, 0, 0, 3, + 2, 0, 15, 128, 2, 0, + 228, 128, 0, 8, 228, 160, + 4, 0, 0, 4, 0, 0, + 15, 128, 4, 0, 170, 160, + 1, 0, 228, 128, 0, 0, + 228, 128, 4, 0, 0, 4, + 0, 0, 15, 128, 4, 0, + 255, 160, 2, 0, 228, 128, + 0, 0, 228, 128, 2, 0, + 0, 3, 1, 0, 2, 128, + 0, 0, 85, 176, 2, 0, + 0, 160, 1, 0, 0, 2, + 1, 0, 1, 128, 0, 0, + 0, 176, 66, 0, 0, 3, + 1, 0, 15, 128, 1, 0, + 228, 128, 0, 8, 228, 160, + 4, 0, 0, 4, 0, 0, + 15, 128, 5, 0, 0, 160, + 1, 0, 228, 128, 0, 0, + 228, 128, 1, 0, 0, 2, + 0, 8, 15, 128, 0, 0, + 228, 128, 255, 255, 0, 0, + 83, 72, 68, 82, 232, 3, + 0, 0, 64, 0, 0, 0, + 250, 0, 0, 0, 89, 0, + 0, 4, 70, 142, 32, 0, + 0, 0, 0, 0, 9, 0, + 0, 0, 90, 0, 0, 3, + 0, 96, 16, 0, 0, 0, + 0, 0, 88, 24, 0, 4, + 0, 112, 16, 0, 0, 0, + 0, 0, 85, 85, 0, 0, + 98, 16, 0, 3, 50, 16, + 16, 0, 1, 0, 0, 0, + 101, 0, 0, 3, 242, 32, + 16, 0, 0, 0, 0, 0, + 104, 0, 0, 2, 4, 0, + 0, 0, 54, 0, 0, 5, + 82, 0, 16, 0, 0, 0, + 0, 0, 6, 16, 16, 0, + 1, 0, 0, 0, 0, 0, + 0, 8, 242, 0, 16, 0, + 1, 0, 0, 0, 86, 21, + 16, 0, 1, 0, 0, 0, + 134, 141, 32, 0, 0, 0, + 0, 0, 3, 0, 0, 0, + 54, 0, 0, 5, 162, 0, + 16, 0, 0, 0, 0, 0, + 6, 8, 16, 0, 1, 0, + 0, 0, 69, 0, 0, 9, + 242, 0, 16, 0, 2, 0, + 0, 0, 230, 10, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 69, 0, 0, 9, + 242, 0, 16, 0, 0, 0, + 0, 0, 70, 0, 16, 0, + 0, 0, 0, 0, 70, 126, + 16, 0, 0, 0, 0, 0, + 0, 96, 16, 0, 0, 0, + 0, 0, 56, 0, 0, 8, + 242, 0, 16, 0, 2, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 50, 0, + 0, 10, 242, 0, 16, 0, + 0, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 70, 14, 16, 0, 2, 0, + 0, 0, 54, 0, 0, 5, + 82, 0, 16, 0, 1, 0, + 0, 0, 6, 16, 16, 0, + 1, 0, 0, 0, 69, 0, + 0, 9, 242, 0, 16, 0, + 2, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 69, 0, + 0, 9, 242, 0, 16, 0, + 1, 0, 0, 0, 230, 10, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 10, 242, 0, 16, 0, + 0, 0, 0, 0, 166, 138, + 32, 0, 0, 0, 0, 0, + 6, 0, 0, 0, 70, 14, + 16, 0, 2, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 242, 0, 16, 0, 0, 0, + 0, 0, 246, 143, 32, 0, + 0, 0, 0, 0, 6, 0, + 0, 0, 70, 14, 16, 0, + 1, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 54, 0, 0, 5, 82, 0, + 16, 0, 1, 0, 0, 0, + 6, 16, 16, 0, 1, 0, + 0, 0, 0, 0, 0, 8, + 242, 0, 16, 0, 2, 0, + 0, 0, 86, 21, 16, 0, + 1, 0, 0, 0, 134, 141, + 32, 0, 0, 0, 0, 0, + 4, 0, 0, 0, 54, 0, + 0, 5, 162, 0, 16, 0, + 1, 0, 0, 0, 6, 8, + 16, 0, 2, 0, 0, 0, + 69, 0, 0, 9, 242, 0, + 16, 0, 3, 0, 0, 0, + 70, 0, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 69, 0, 0, 9, 242, 0, + 16, 0, 1, 0, 0, 0, + 230, 10, 16, 0, 1, 0, + 0, 0, 70, 126, 16, 0, + 0, 0, 0, 0, 0, 96, + 16, 0, 0, 0, 0, 0, + 50, 0, 0, 10, 242, 0, + 16, 0, 0, 0, 0, 0, + 6, 128, 32, 0, 0, 0, + 0, 0, 7, 0, 0, 0, + 70, 14, 16, 0, 3, 0, + 0, 0, 70, 14, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 10, 242, 0, 16, 0, + 0, 0, 0, 0, 86, 133, + 32, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 54, 0, 0, 5, + 82, 0, 16, 0, 2, 0, + 0, 0, 6, 16, 16, 0, + 1, 0, 0, 0, 69, 0, + 0, 9, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 2, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 69, 0, + 0, 9, 242, 0, 16, 0, + 2, 0, 0, 0, 230, 10, + 16, 0, 2, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 10, 242, 0, 16, 0, + 0, 0, 0, 0, 166, 138, + 32, 0, 0, 0, 0, 0, + 7, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 50, 0, 0, 10, + 242, 0, 16, 0, 0, 0, + 0, 0, 246, 143, 32, 0, + 0, 0, 0, 0, 7, 0, + 0, 0, 70, 14, 16, 0, + 2, 0, 0, 0, 70, 14, + 16, 0, 0, 0, 0, 0, + 0, 0, 0, 8, 34, 0, + 16, 0, 1, 0, 0, 0, + 26, 16, 16, 0, 1, 0, + 0, 0, 10, 128, 32, 0, + 0, 0, 0, 0, 5, 0, + 0, 0, 54, 0, 0, 5, + 18, 0, 16, 0, 1, 0, + 0, 0, 10, 16, 16, 0, + 1, 0, 0, 0, 69, 0, + 0, 9, 242, 0, 16, 0, + 1, 0, 0, 0, 70, 0, + 16, 0, 1, 0, 0, 0, + 70, 126, 16, 0, 0, 0, + 0, 0, 0, 96, 16, 0, + 0, 0, 0, 0, 50, 0, + 0, 10, 242, 32, 16, 0, + 0, 0, 0, 0, 6, 128, + 32, 0, 0, 0, 0, 0, + 8, 0, 0, 0, 70, 14, + 16, 0, 1, 0, 0, 0, + 70, 14, 16, 0, 0, 0, + 0, 0, 62, 0, 0, 1, + 83, 84, 65, 84, 116, 0, + 0, 0, 29, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 1, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 9, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 9, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 82, 68, + 69, 70, 184, 1, 0, 0, + 1, 0, 0, 0, 148, 0, + 0, 0, 3, 0, 0, 0, + 28, 0, 0, 0, 0, 4, + 255, 255, 0, 1, 0, 0, + 132, 1, 0, 0, 124, 0, + 0, 0, 3, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 139, 0, 0, 0, 2, 0, + 0, 0, 5, 0, 0, 0, + 4, 0, 0, 0, 255, 255, + 255, 255, 0, 0, 0, 0, + 1, 0, 0, 0, 12, 0, + 0, 0, 143, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 0, 0, 0, 0, 115, 83, + 104, 97, 100, 111, 119, 83, + 97, 109, 112, 108, 101, 114, + 0, 116, 101, 120, 0, 99, + 98, 49, 0, 171, 143, 0, + 0, 0, 4, 0, 0, 0, + 172, 0, 0, 0, 160, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 12, 1, + 0, 0, 0, 0, 0, 0, + 48, 0, 0, 0, 0, 0, + 0, 0, 28, 1, 0, 0, + 0, 0, 0, 0, 44, 1, + 0, 0, 48, 0, 0, 0, + 48, 0, 0, 0, 2, 0, + 0, 0, 60, 1, 0, 0, + 0, 0, 0, 0, 76, 1, + 0, 0, 96, 0, 0, 0, + 48, 0, 0, 0, 2, 0, + 0, 0, 88, 1, 0, 0, + 0, 0, 0, 0, 104, 1, + 0, 0, 144, 0, 0, 0, + 16, 0, 0, 0, 0, 0, + 0, 0, 116, 1, 0, 0, + 0, 0, 0, 0, 66, 108, + 117, 114, 79, 102, 102, 115, + 101, 116, 115, 72, 0, 171, + 171, 171, 1, 0, 3, 0, + 1, 0, 4, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 66, 108, 117, 114, 79, 102, + 102, 115, 101, 116, 115, 86, + 0, 171, 171, 171, 1, 0, + 3, 0, 1, 0, 4, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 66, 108, 117, 114, + 87, 101, 105, 103, 104, 116, + 115, 0, 1, 0, 3, 0, + 1, 0, 4, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 83, 104, 97, 100, 111, 119, + 67, 111, 108, 111, 114, 0, + 1, 0, 3, 0, 1, 0, + 4, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 77, 105, + 99, 114, 111, 115, 111, 102, + 116, 32, 40, 82, 41, 32, + 72, 76, 83, 76, 32, 83, + 104, 97, 100, 101, 114, 32, + 67, 111, 109, 112, 105, 108, + 101, 114, 32, 57, 46, 50, + 57, 46, 57, 53, 50, 46, + 51, 49, 49, 49, 0, 171, + 171, 171, 73, 83, 71, 78, + 104, 0, 0, 0, 3, 0, + 0, 0, 8, 0, 0, 0, + 80, 0, 0, 0, 0, 0, + 0, 0, 1, 0, 0, 0, + 3, 0, 0, 0, 0, 0, + 0, 0, 15, 0, 0, 0, + 92, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 3, 3, 0, 0, + 92, 0, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 0, + 3, 0, 0, 0, 1, 0, + 0, 0, 12, 0, 0, 0, + 83, 86, 95, 80, 111, 115, + 105, 116, 105, 111, 110, 0, + 84, 69, 88, 67, 79, 79, + 82, 68, 0, 171, 171, 171, + 79, 83, 71, 78, 44, 0, + 0, 0, 1, 0, 0, 0, + 8, 0, 0, 0, 32, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 3, 0, + 0, 0, 0, 0, 0, 0, + 15, 0, 0, 0, 83, 86, + 95, 84, 97, 114, 103, 101, + 116, 0, 171, 171, 110, 69, + 0, 0, 0, 0, 0, 0, + 80, 50, 0, 4, 0, 0, + 0, 1, 0, 0, 0, 0, + 0, 128, 63, 1, 0, 0, 0, 0, 0, 128, 63, 1, 0, 0, 0, 0, 0, 128, 63, 1, 0, 0, 0, 0, 0, 128, 63, 1, 0, 0, - 0, 0, 0, 128, 63, 1, - 0, 0, 0, 3, 0, 0, - 0, 255, 255, 255, 255, 36, - 4, 0, 0, 68, 88, 66, - 67, 116, 139, 68, 62, 73, - 113, 92, 4, 72, 76, 225, - 161, 30, 132, 222, 233, 1, - 0, 0, 0, 36, 4, 0, - 0, 6, 0, 0, 0, 56, - 0, 0, 0, 248, 0, 0, - 0, 244, 1, 0, 0, 112, - 2, 0, 0, 128, 3, 0, - 0, 180, 3, 0, 0, 65, - 111, 110, 57, 184, 0, 0, - 0, 184, 0, 0, 0, 0, - 2, 254, 255, 132, 0, 0, - 0, 52, 0, 0, 0, 1, - 0, 36, 0, 0, 0, 48, + 0, 3, 0, 0, 0, 255, + 255, 255, 255, 36, 4, 0, + 0, 68, 88, 66, 67, 116, + 139, 68, 62, 73, 113, 92, + 4, 72, 76, 225, 161, 30, + 132, 222, 233, 1, 0, 0, + 0, 36, 4, 0, 0, 6, + 0, 0, 0, 56, 0, 0, + 0, 248, 0, 0, 0, 244, + 1, 0, 0, 112, 2, 0, + 0, 128, 3, 0, 0, 180, + 3, 0, 0, 65, 111, 110, + 57, 184, 0, 0, 0, 184, + 0, 0, 0, 0, 2, 254, + 255, 132, 0, 0, 0, 52, + 0, 0, 0, 1, 0, 36, 0, 0, 0, 48, 0, 0, - 0, 36, 0, 1, 0, 48, - 0, 0, 0, 0, 0, 3, - 0, 1, 0, 0, 0, 0, + 0, 48, 0, 0, 0, 36, + 0, 1, 0, 48, 0, 0, + 0, 0, 0, 3, 0, 1, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 2, 254, + 255, 81, 0, 0, 5, 4, + 0, 15, 160, 0, 0, 0, + 0, 0, 0, 128, 63, 0, + 0, 0, 0, 0, 0, 0, + 0, 31, 0, 0, 2, 5, + 0, 0, 128, 0, 0, 15, + 144, 4, 0, 0, 4, 0, + 0, 3, 224, 0, 0, 228, + 144, 2, 0, 238, 160, 2, + 0, 228, 160, 4, 0, 0, + 4, 0, 0, 12, 224, 0, + 0, 20, 144, 3, 0, 180, + 160, 3, 0, 20, 160, 4, + 0, 0, 4, 0, 0, 3, + 128, 0, 0, 228, 144, 1, + 0, 238, 160, 1, 0, 228, + 160, 2, 0, 0, 3, 0, + 0, 3, 192, 0, 0, 228, + 128, 0, 0, 228, 160, 1, + 0, 0, 2, 0, 0, 12, + 192, 4, 0, 68, 160, 255, + 255, 0, 0, 83, 72, 68, + 82, 244, 0, 0, 0, 64, + 0, 1, 0, 61, 0, 0, + 0, 89, 0, 0, 4, 70, + 142, 32, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 95, + 0, 0, 3, 50, 16, 16, + 0, 0, 0, 0, 0, 103, + 0, 0, 4, 242, 32, 16, 0, 0, 0, 0, 0, 1, - 2, 254, 255, 81, 0, 0, - 5, 4, 0, 15, 160, 0, - 0, 0, 0, 0, 0, 128, - 63, 0, 0, 0, 0, 0, - 0, 0, 0, 31, 0, 0, - 2, 5, 0, 0, 128, 0, - 0, 15, 144, 4, 0, 0, - 4, 0, 0, 3, 224, 0, - 0, 228, 144, 2, 0, 238, - 160, 2, 0, 228, 160, 4, - 0, 0, 4, 0, 0, 12, - 224, 0, 0, 20, 144, 3, - 0, 180, 160, 3, 0, 20, - 160, 4, 0, 0, 4, 0, - 0, 3, 128, 0, 0, 228, - 144, 1, 0, 238, 160, 1, - 0, 228, 160, 2, 0, 0, - 3, 0, 0, 3, 192, 0, - 0, 228, 128, 0, 0, 228, - 160, 1, 0, 0, 2, 0, - 0, 12, 192, 4, 0, 68, - 160, 255, 255, 0, 0, 83, - 72, 68, 82, 244, 0, 0, - 0, 64, 0, 1, 0, 61, - 0, 0, 0, 89, 0, 0, - 4, 70, 142, 32, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 95, 0, 0, 3, 50, - 16, 16, 0, 0, 0, 0, - 0, 103, 0, 0, 4, 242, - 32, 16, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 101, - 0, 0, 3, 50, 32, 16, - 0, 1, 0, 0, 0, 101, - 0, 0, 3, 194, 32, 16, - 0, 1, 0, 0, 0, 50, - 0, 0, 11, 50, 32, 16, - 0, 0, 0, 0, 0, 70, - 16, 16, 0, 0, 0, 0, - 0, 230, 138, 32, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 70, 128, 32, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 54, 0, 0, 8, 194, - 32, 16, 0, 0, 0, 0, - 0, 2, 64, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 128, 63, 50, 0, 0, - 11, 50, 32, 16, 0, 1, + 0, 0, 0, 101, 0, 0, + 3, 50, 32, 16, 0, 1, + 0, 0, 0, 101, 0, 0, + 3, 194, 32, 16, 0, 1, + 0, 0, 0, 50, 0, 0, + 11, 50, 32, 16, 0, 0, 0, 0, 0, 70, 16, 16, 0, 0, 0, 0, 0, 230, 138, 32, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 70, + 0, 0, 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 50, - 0, 0, 11, 194, 32, 16, - 0, 1, 0, 0, 0, 6, - 20, 16, 0, 0, 0, 0, - 0, 166, 142, 32, 0, 0, - 0, 0, 0, 2, 0, 0, - 0, 6, 132, 32, 0, 0, - 0, 0, 0, 2, 0, 0, - 0, 62, 0, 0, 1, 83, - 84, 65, 84, 116, 0, 0, - 0, 5, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 4, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 54, + 0, 0, 8, 194, 32, 16, + 0, 0, 0, 0, 0, 2, + 64, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 128, + 63, 50, 0, 0, 11, 50, + 32, 16, 0, 1, 0, 0, + 0, 70, 16, 16, 0, 0, + 0, 0, 0, 230, 138, 32, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 70, 128, 32, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 82, 68, 69, - 70, 8, 1, 0, 0, 1, - 0, 0, 0, 64, 0, 0, - 0, 1, 0, 0, 0, 28, - 0, 0, 0, 0, 4, 254, - 255, 0, 1, 0, 0, 212, - 0, 0, 0, 60, 0, 0, + 0, 0, 0, 50, 0, 0, + 11, 194, 32, 16, 0, 1, + 0, 0, 0, 6, 20, 16, + 0, 0, 0, 0, 0, 166, + 142, 32, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 6, + 132, 32, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 62, + 0, 0, 1, 83, 84, 65, + 84, 116, 0, 0, 0, 5, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 4, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 99, - 98, 48, 0, 60, 0, 0, - 0, 3, 0, 0, 0, 88, - 0, 0, 0, 48, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 160, 0, 0, - 0, 0, 0, 0, 0, 16, - 0, 0, 0, 2, 0, 0, - 0, 172, 0, 0, 0, 0, - 0, 0, 0, 188, 0, 0, - 0, 16, 0, 0, 0, 16, - 0, 0, 0, 2, 0, 0, - 0, 172, 0, 0, 0, 0, - 0, 0, 0, 198, 0, 0, - 0, 32, 0, 0, 0, 16, - 0, 0, 0, 2, 0, 0, - 0, 172, 0, 0, 0, 0, - 0, 0, 0, 81, 117, 97, - 100, 68, 101, 115, 99, 0, - 171, 171, 171, 1, 0, 3, - 0, 1, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 84, 101, 120, 67, 111, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 82, 68, 69, 70, 8, + 1, 0, 0, 1, 0, 0, + 0, 64, 0, 0, 0, 1, + 0, 0, 0, 28, 0, 0, + 0, 0, 4, 254, 255, 0, + 1, 0, 0, 212, 0, 0, + 0, 60, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, + 0, 0, 0, 99, 98, 48, + 0, 60, 0, 0, 0, 3, + 0, 0, 0, 88, 0, 0, + 0, 48, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 160, 0, 0, 0, 0, + 0, 0, 0, 16, 0, 0, + 0, 2, 0, 0, 0, 172, + 0, 0, 0, 0, 0, 0, + 0, 188, 0, 0, 0, 16, + 0, 0, 0, 16, 0, 0, + 0, 2, 0, 0, 0, 172, + 0, 0, 0, 0, 0, 0, + 0, 198, 0, 0, 0, 32, + 0, 0, 0, 16, 0, 0, + 0, 2, 0, 0, 0, 172, + 0, 0, 0, 0, 0, 0, + 0, 81, 117, 97, 100, 68, + 101, 115, 99, 0, 171, 171, + 171, 1, 0, 3, 0, 1, + 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 84, + 101, 120, 67, 111, 111, 114, + 100, 115, 0, 77, 97, 115, + 107, 84, 101, 120, 67, 111, 111, 114, 100, 115, 0, 77, - 97, 115, 107, 84, 101, 120, - 67, 111, 111, 114, 100, 115, - 0, 77, 105, 99, 114, 111, - 115, 111, 102, 116, 32, 40, - 82, 41, 32, 72, 76, 83, - 76, 32, 83, 104, 97, 100, - 101, 114, 32, 67, 111, 109, - 112, 105, 108, 101, 114, 32, - 57, 46, 50, 57, 46, 57, - 53, 50, 46, 51, 49, 49, - 49, 0, 171, 171, 171, 73, - 83, 71, 78, 44, 0, 0, - 0, 1, 0, 0, 0, 8, - 0, 0, 0, 32, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 7, - 3, 0, 0, 80, 79, 83, - 73, 84, 73, 79, 78, 0, - 171, 171, 171, 79, 83, 71, - 78, 104, 0, 0, 0, 3, + 105, 99, 114, 111, 115, 111, + 102, 116, 32, 40, 82, 41, + 32, 72, 76, 83, 76, 32, + 83, 104, 97, 100, 101, 114, + 32, 67, 111, 109, 112, 105, + 108, 101, 114, 32, 57, 46, + 50, 57, 46, 57, 53, 50, + 46, 51, 49, 49, 49, 0, + 171, 171, 171, 73, 83, 71, + 78, 44, 0, 0, 0, 1, 0, 0, 0, 8, 0, 0, - 0, 80, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, + 0, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, - 0, 0, 0, 15, 0, 0, - 0, 92, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 1, - 0, 0, 0, 3, 12, 0, - 0, 92, 0, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 1, - 0, 0, 0, 12, 3, 0, - 0, 83, 86, 95, 80, 111, - 115, 105, 116, 105, 111, 110, - 0, 84, 69, 88, 67, 79, - 79, 82, 68, 0, 171, 171, - 171, 223, 46, 0, 0, 0, + 0, 0, 0, 7, 3, 0, + 0, 80, 79, 83, 73, 84, + 73, 79, 78, 0, 171, 171, + 171, 79, 83, 71, 78, 104, + 0, 0, 0, 3, 0, 0, + 0, 8, 0, 0, 0, 80, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 3, + 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 92, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, + 0, 0, 0, 1, 0, 0, + 0, 3, 12, 0, 0, 92, + 0, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 3, 0, 0, 0, 1, 0, 0, - 0, 2, 0, 0, 0, 0, - 0, 0, 0, 164, 10, 0, - 0, 68, 88, 66, 67, 143, - 148, 190, 36, 41, 120, 46, - 207, 200, 138, 139, 29, 38, - 89, 245, 86, 1, 0, 0, - 0, 164, 10, 0, 0, 6, - 0, 0, 0, 56, 0, 0, - 0, 24, 3, 0, 0, 112, - 7, 0, 0, 236, 7, 0, - 0, 0, 10, 0, 0, 112, - 10, 0, 0, 65, 111, 110, - 57, 216, 2, 0, 0, 216, - 2, 0, 0, 0, 2, 255, - 255, 160, 2, 0, 0, 56, - 0, 0, 0, 1, 0, 44, - 0, 0, 0, 56, 0, 0, - 0, 56, 0, 2, 0, 36, - 0, 0, 0, 56, 0, 1, - 0, 0, 0, 0, 1, 1, - 0, 0, 0, 3, 0, 6, - 0, 0, 0, 0, 0, 0, - 0, 1, 2, 255, 255, 31, - 0, 0, 2, 0, 0, 0, - 128, 0, 0, 15, 176, 31, - 0, 0, 2, 0, 0, 0, - 144, 0, 8, 15, 160, 31, - 0, 0, 2, 0, 0, 0, - 144, 1, 8, 15, 160, 2, - 0, 0, 3, 0, 0, 2, + 0, 12, 3, 0, 0, 83, + 86, 95, 80, 111, 115, 105, + 116, 105, 111, 110, 0, 84, + 69, 88, 67, 79, 79, 82, + 68, 0, 171, 171, 171, 89, + 79, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 2, + 0, 0, 0, 0, 0, 0, + 0, 164, 10, 0, 0, 68, + 88, 66, 67, 143, 148, 190, + 36, 41, 120, 46, 207, 200, + 138, 139, 29, 38, 89, 245, + 86, 1, 0, 0, 0, 164, + 10, 0, 0, 6, 0, 0, + 0, 56, 0, 0, 0, 24, + 3, 0, 0, 112, 7, 0, + 0, 236, 7, 0, 0, 0, + 10, 0, 0, 112, 10, 0, + 0, 65, 111, 110, 57, 216, + 2, 0, 0, 216, 2, 0, + 0, 0, 2, 255, 255, 160, + 2, 0, 0, 56, 0, 0, + 0, 1, 0, 44, 0, 0, + 0, 56, 0, 0, 0, 56, + 0, 2, 0, 36, 0, 0, + 0, 56, 0, 1, 0, 0, + 0, 0, 1, 1, 0, 0, + 0, 3, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 1, + 2, 255, 255, 31, 0, 0, + 2, 0, 0, 0, 128, 0, + 0, 15, 176, 31, 0, 0, + 2, 0, 0, 0, 144, 0, + 8, 15, 160, 31, 0, 0, + 2, 0, 0, 0, 144, 1, + 8, 15, 160, 2, 0, 0, + 3, 0, 0, 2, 128, 0, + 0, 85, 176, 0, 0, 85, + 160, 1, 0, 0, 2, 0, + 0, 1, 128, 0, 0, 0, + 176, 2, 0, 0, 3, 1, + 0, 2, 128, 0, 0, 85, + 176, 0, 0, 0, 160, 1, + 0, 0, 2, 1, 0, 1, + 128, 0, 0, 0, 176, 66, + 0, 0, 3, 0, 0, 15, + 128, 0, 0, 228, 128, 1, + 8, 228, 160, 66, 0, 0, + 3, 1, 0, 15, 128, 1, + 0, 228, 128, 1, 8, 228, + 160, 5, 0, 0, 3, 0, + 0, 15, 128, 0, 0, 228, + 128, 3, 0, 85, 160, 4, + 0, 0, 4, 0, 0, 15, + 128, 3, 0, 0, 160, 1, + 0, 228, 128, 0, 0, 228, + 128, 2, 0, 0, 3, 1, + 0, 2, 128, 0, 0, 85, + 176, 0, 0, 170, 160, 1, + 0, 0, 2, 1, 0, 1, + 128, 0, 0, 0, 176, 2, + 0, 0, 3, 2, 0, 2, 128, 0, 0, 85, 176, 0, - 0, 85, 160, 1, 0, 0, - 2, 0, 0, 1, 128, 0, - 0, 0, 176, 2, 0, 0, - 3, 1, 0, 2, 128, 0, - 0, 85, 176, 0, 0, 0, - 160, 1, 0, 0, 2, 1, - 0, 1, 128, 0, 0, 0, - 176, 66, 0, 0, 3, 0, - 0, 15, 128, 0, 0, 228, - 128, 1, 8, 228, 160, 66, - 0, 0, 3, 1, 0, 15, - 128, 1, 0, 228, 128, 1, - 8, 228, 160, 5, 0, 0, - 3, 0, 0, 15, 128, 0, - 0, 228, 128, 3, 0, 85, - 160, 4, 0, 0, 4, 0, - 0, 15, 128, 3, 0, 0, - 160, 1, 0, 228, 128, 0, + 0, 255, 160, 1, 0, 0, + 2, 2, 0, 1, 128, 0, + 0, 0, 176, 66, 0, 0, + 3, 1, 0, 15, 128, 1, + 0, 228, 128, 1, 8, 228, + 160, 66, 0, 0, 3, 2, + 0, 15, 128, 2, 0, 228, + 128, 1, 8, 228, 160, 4, + 0, 0, 4, 0, 0, 15, + 128, 3, 0, 170, 160, 1, + 0, 228, 128, 0, 0, 228, + 128, 4, 0, 0, 4, 0, + 0, 15, 128, 3, 0, 255, + 160, 2, 0, 228, 128, 0, 0, 228, 128, 2, 0, 0, 3, 1, 0, 2, 128, 0, - 0, 85, 176, 0, 0, 170, + 0, 85, 176, 1, 0, 0, 160, 1, 0, 0, 2, 1, 0, 1, 128, 0, 0, 0, 176, 2, 0, 0, 3, 2, 0, 2, 128, 0, 0, 85, - 176, 0, 0, 255, 160, 1, + 176, 1, 0, 85, 160, 1, 0, 0, 2, 2, 0, 1, 128, 0, 0, 0, 176, 66, 0, 0, 3, 1, 0, 15, 128, 1, 0, 228, 128, 1, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128, 2, 0, 228, 128, 1, 8, 228, 160, 4, 0, 0, 4, 0, - 0, 15, 128, 3, 0, 170, + 0, 15, 128, 4, 0, 0, 160, 1, 0, 228, 128, 0, 0, 228, 128, 4, 0, 0, - 4, 0, 0, 15, 128, 3, - 0, 255, 160, 2, 0, 228, + 4, 0, 0, 15, 128, 4, + 0, 85, 160, 2, 0, 228, 128, 0, 0, 228, 128, 2, 0, 0, 3, 1, 0, 2, 128, 0, 0, 85, 176, 1, - 0, 0, 160, 1, 0, 0, + 0, 170, 160, 1, 0, 0, 2, 1, 0, 1, 128, 0, 0, 0, 176, 2, 0, 0, 3, 2, 0, 2, 128, 0, - 0, 85, 176, 1, 0, 85, + 0, 85, 176, 1, 0, 255, 160, 1, 0, 0, 2, 2, 0, 1, 128, 0, 0, 0, 176, 66, 0, 0, 3, 1, 0, 15, 128, 1, 0, 228, 128, 1, 8, 228, 160, 66, 0, 0, 3, 2, 0, 15, 128, 2, 0, 228, 128, 1, 8, 228, 160, 4, 0, 0, 4, 0, 0, 15, 128, 4, - 0, 0, 160, 1, 0, 228, + 0, 170, 160, 1, 0, 228, 128, 0, 0, 228, 128, 4, 0, 0, 4, 0, 0, 15, - 128, 4, 0, 85, 160, 2, + 128, 4, 0, 255, 160, 2, 0, 228, 128, 0, 0, 228, 128, 2, 0, 0, 3, 1, 0, 2, 128, 0, 0, 85, - 176, 1, 0, 170, 160, 1, + 176, 2, 0, 0, 160, 1, 0, 0, 2, 1, 0, 1, - 128, 0, 0, 0, 176, 2, - 0, 0, 3, 2, 0, 2, - 128, 0, 0, 85, 176, 1, - 0, 255, 160, 1, 0, 0, - 2, 2, 0, 1, 128, 0, - 0, 0, 176, 66, 0, 0, - 3, 1, 0, 15, 128, 1, - 0, 228, 128, 1, 8, 228, - 160, 66, 0, 0, 3, 2, - 0, 15, 128, 2, 0, 228, - 128, 1, 8, 228, 160, 4, - 0, 0, 4, 0, 0, 15, - 128, 4, 0, 170, 160, 1, - 0, 228, 128, 0, 0, 228, - 128, 4, 0, 0, 4, 0, - 0, 15, 128, 4, 0, 255, - 160, 2, 0, 228, 128, 0, - 0, 228, 128, 2, 0, 0, - 3, 1, 0, 2, 128, 0, - 0, 85, 176, 2, 0, 0, - 160, 1, 0, 0, 2, 1, - 0, 1, 128, 0, 0, 0, - 176, 1, 0, 0, 2, 2, - 0, 3, 128, 0, 0, 235, - 176, 66, 0, 0, 3, 1, - 0, 15, 128, 1, 0, 228, - 128, 1, 8, 228, 160, 66, - 0, 0, 3, 2, 0, 15, - 128, 2, 0, 228, 128, 0, - 8, 228, 160, 4, 0, 0, - 4, 0, 0, 15, 128, 5, - 0, 0, 160, 1, 0, 228, - 128, 0, 0, 228, 128, 5, - 0, 0, 3, 0, 0, 15, - 128, 2, 0, 255, 128, 0, - 0, 228, 128, 1, 0, 0, - 2, 0, 8, 15, 128, 0, - 0, 228, 128, 255, 255, 0, - 0, 83, 72, 68, 82, 80, - 4, 0, 0, 64, 0, 0, - 0, 20, 1, 0, 0, 89, - 0, 0, 4, 70, 142, 32, - 0, 0, 0, 0, 0, 9, - 0, 0, 0, 90, 0, 0, - 3, 0, 96, 16, 0, 0, - 0, 0, 0, 90, 0, 0, - 3, 0, 96, 16, 0, 1, - 0, 0, 0, 88, 24, 0, - 4, 0, 112, 16, 0, 0, - 0, 0, 0, 85, 85, 0, + 128, 0, 0, 0, 176, 1, + 0, 0, 2, 2, 0, 3, + 128, 0, 0, 235, 176, 66, + 0, 0, 3, 1, 0, 15, + 128, 1, 0, 228, 128, 1, + 8, 228, 160, 66, 0, 0, + 3, 2, 0, 15, 128, 2, + 0, 228, 128, 0, 8, 228, + 160, 4, 0, 0, 4, 0, + 0, 15, 128, 5, 0, 0, + 160, 1, 0, 228, 128, 0, + 0, 228, 128, 5, 0, 0, + 3, 0, 0, 15, 128, 2, + 0, 255, 128, 0, 0, 228, + 128, 1, 0, 0, 2, 0, + 8, 15, 128, 0, 0, 228, + 128, 255, 255, 0, 0, 83, + 72, 68, 82, 80, 4, 0, + 0, 64, 0, 0, 0, 20, + 1, 0, 0, 89, 0, 0, + 4, 70, 142, 32, 0, 0, + 0, 0, 0, 9, 0, 0, + 0, 90, 0, 0, 3, 0, + 96, 16, 0, 0, 0, 0, + 0, 90, 0, 0, 3, 0, + 96, 16, 0, 1, 0, 0, 0, 88, 24, 0, 4, 0, - 112, 16, 0, 1, 0, 0, - 0, 85, 85, 0, 0, 98, - 16, 0, 3, 50, 16, 16, - 0, 1, 0, 0, 0, 98, - 16, 0, 3, 194, 16, 16, - 0, 1, 0, 0, 0, 101, - 0, 0, 3, 242, 32, 16, - 0, 0, 0, 0, 0, 104, - 0, 0, 2, 4, 0, 0, - 0, 54, 0, 0, 5, 82, + 112, 16, 0, 0, 0, 0, + 0, 85, 85, 0, 0, 88, + 24, 0, 4, 0, 112, 16, + 0, 1, 0, 0, 0, 85, + 85, 0, 0, 98, 16, 0, + 3, 50, 16, 16, 0, 1, + 0, 0, 0, 98, 16, 0, + 3, 194, 16, 16, 0, 1, + 0, 0, 0, 101, 0, 0, + 3, 242, 32, 16, 0, 0, + 0, 0, 0, 104, 0, 0, + 2, 4, 0, 0, 0, 54, + 0, 0, 5, 82, 0, 16, + 0, 0, 0, 0, 0, 6, + 16, 16, 0, 1, 0, 0, + 0, 0, 0, 0, 8, 242, + 0, 16, 0, 1, 0, 0, + 0, 86, 21, 16, 0, 1, + 0, 0, 0, 134, 141, 32, + 0, 0, 0, 0, 0, 3, + 0, 0, 0, 54, 0, 0, + 5, 162, 0, 16, 0, 0, + 0, 0, 0, 6, 8, 16, + 0, 1, 0, 0, 0, 69, + 0, 0, 9, 242, 0, 16, + 0, 2, 0, 0, 0, 230, + 10, 16, 0, 0, 0, 0, + 0, 70, 126, 16, 0, 0, + 0, 0, 0, 0, 96, 16, + 0, 1, 0, 0, 0, 69, + 0, 0, 9, 242, 0, 16, + 0, 0, 0, 0, 0, 70, 0, 16, 0, 0, 0, 0, - 0, 6, 16, 16, 0, 1, - 0, 0, 0, 0, 0, 0, - 8, 242, 0, 16, 0, 1, - 0, 0, 0, 86, 21, 16, - 0, 1, 0, 0, 0, 134, - 141, 32, 0, 0, 0, 0, - 0, 3, 0, 0, 0, 54, - 0, 0, 5, 162, 0, 16, - 0, 0, 0, 0, 0, 6, - 8, 16, 0, 1, 0, 0, + 0, 70, 126, 16, 0, 0, + 0, 0, 0, 0, 96, 16, + 0, 1, 0, 0, 0, 56, + 0, 0, 8, 242, 0, 16, + 0, 2, 0, 0, 0, 70, + 14, 16, 0, 2, 0, 0, + 0, 86, 133, 32, 0, 0, + 0, 0, 0, 6, 0, 0, + 0, 50, 0, 0, 10, 242, + 0, 16, 0, 0, 0, 0, + 0, 6, 128, 32, 0, 0, + 0, 0, 0, 6, 0, 0, + 0, 70, 14, 16, 0, 0, + 0, 0, 0, 70, 14, 16, + 0, 2, 0, 0, 0, 54, + 0, 0, 5, 82, 0, 16, + 0, 1, 0, 0, 0, 6, + 16, 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 2, 0, 0, - 0, 230, 10, 16, 0, 0, + 0, 70, 0, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, - 0, 16, 0, 0, 0, 0, - 0, 70, 0, 16, 0, 0, + 0, 16, 0, 1, 0, 0, + 0, 230, 10, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, - 0, 56, 0, 0, 8, 242, - 0, 16, 0, 2, 0, 0, + 0, 50, 0, 0, 10, 242, + 0, 16, 0, 0, 0, 0, + 0, 166, 138, 32, 0, 0, + 0, 0, 0, 6, 0, 0, 0, 70, 14, 16, 0, 2, - 0, 0, 0, 86, 133, 32, - 0, 0, 0, 0, 0, 6, - 0, 0, 0, 50, 0, 0, - 10, 242, 0, 16, 0, 0, - 0, 0, 0, 6, 128, 32, - 0, 0, 0, 0, 0, 6, 0, 0, 0, 70, 14, 16, - 0, 0, 0, 0, 0, 70, - 14, 16, 0, 2, 0, 0, - 0, 54, 0, 0, 5, 82, + 0, 0, 0, 0, 0, 50, + 0, 0, 10, 242, 0, 16, + 0, 0, 0, 0, 0, 246, + 143, 32, 0, 0, 0, 0, + 0, 6, 0, 0, 0, 70, + 14, 16, 0, 1, 0, 0, + 0, 70, 14, 16, 0, 0, + 0, 0, 0, 54, 0, 0, + 5, 82, 0, 16, 0, 1, + 0, 0, 0, 6, 16, 16, + 0, 1, 0, 0, 0, 0, + 0, 0, 8, 242, 0, 16, + 0, 2, 0, 0, 0, 86, + 21, 16, 0, 1, 0, 0, + 0, 134, 141, 32, 0, 0, + 0, 0, 0, 4, 0, 0, + 0, 54, 0, 0, 5, 162, 0, 16, 0, 1, 0, 0, - 0, 6, 16, 16, 0, 1, + 0, 6, 8, 16, 0, 2, 0, 0, 0, 69, 0, 0, - 9, 242, 0, 16, 0, 2, + 9, 242, 0, 16, 0, 3, 0, 0, 0, 70, 0, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, 0, 230, 10, 16, 0, 1, 0, 0, 0, 70, 126, 16, 0, 0, 0, 0, 0, 0, 96, 16, 0, 1, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0, 0, - 0, 0, 0, 166, 138, 32, - 0, 0, 0, 0, 0, 6, + 0, 0, 0, 6, 128, 32, + 0, 0, 0, 0, 0, 7, 0, 0, 0, 70, 14, 16, - 0, 2, 0, 0, 0, 70, + 0, 3, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0, 0, 0, 0, - 0, 246, 143, 32, 0, 0, - 0, 0, 0, 6, 0, 0, + 0, 86, 133, 32, 0, 0, + 0, 0, 0, 7, 0, 0, 0, 70, 14, 16, 0, 1, 0, 0, 0, 70, 14, 16, 0, 0, 0, 0, 0, 54, 0, 0, 5, 82, 0, 16, - 0, 1, 0, 0, 0, 6, + 0, 2, 0, 0, 0, 6, 16, 16, 0, 1, 0, 0, - 0, 0, 0, 0, 8, 242, - 0, 16, 0, 2, 0, 0, - 0, 86, 21, 16, 0, 1, - 0, 0, 0, 134, 141, 32, - 0, 0, 0, 0, 0, 4, - 0, 0, 0, 54, 0, 0, - 5, 162, 0, 16, 0, 1, - 0, 0, 0, 6, 8, 16, - 0, 2, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 3, 0, 0, 0, 70, + 0, 69, 0, 0, 9, 242, 0, 16, 0, 1, 0, 0, - 0, 70, 126, 16, 0, 0, - 0, 0, 0, 0, 96, 16, - 0, 1, 0, 0, 0, 69, - 0, 0, 9, 242, 0, 16, - 0, 1, 0, 0, 0, 230, - 10, 16, 0, 1, 0, 0, - 0, 70, 126, 16, 0, 0, - 0, 0, 0, 0, 96, 16, - 0, 1, 0, 0, 0, 50, + 0, 70, 0, 16, 0, 2, + 0, 0, 0, 70, 126, 16, + 0, 0, 0, 0, 0, 0, + 96, 16, 0, 1, 0, 0, + 0, 69, 0, 0, 9, 242, + 0, 16, 0, 2, 0, 0, + 0, 230, 10, 16, 0, 2, + 0, 0, 0, 70, 126, 16, + 0, 0, 0, 0, 0, 0, + 96, 16, 0, 1, 0, 0, + 0, 50, 0, 0, 10, 242, + 0, 16, 0, 0, 0, 0, + 0, 166, 138, 32, 0, 0, + 0, 0, 0, 7, 0, 0, + 0, 70, 14, 16, 0, 1, + 0, 0, 0, 70, 14, 16, + 0, 0, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, - 0, 0, 0, 0, 0, 6, - 128, 32, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 246, + 143, 32, 0, 0, 0, 0, 0, 7, 0, 0, 0, 70, - 14, 16, 0, 3, 0, 0, + 14, 16, 0, 2, 0, 0, 0, 70, 14, 16, 0, 0, - 0, 0, 0, 50, 0, 0, - 10, 242, 0, 16, 0, 0, - 0, 0, 0, 86, 133, 32, - 0, 0, 0, 0, 0, 7, - 0, 0, 0, 70, 14, 16, - 0, 1, 0, 0, 0, 70, - 14, 16, 0, 0, 0, 0, - 0, 54, 0, 0, 5, 82, - 0, 16, 0, 2, 0, 0, - 0, 6, 16, 16, 0, 1, - 0, 0, 0, 69, 0, 0, - 9, 242, 0, 16, 0, 1, - 0, 0, 0, 70, 0, 16, - 0, 2, 0, 0, 0, 70, - 126, 16, 0, 0, 0, 0, - 0, 0, 96, 16, 0, 1, - 0, 0, 0, 69, 0, 0, - 9, 242, 0, 16, 0, 2, - 0, 0, 0, 230, 10, 16, - 0, 2, 0, 0, 0, 70, - 126, 16, 0, 0, 0, 0, - 0, 0, 96, 16, 0, 1, - 0, 0, 0, 50, 0, 0, - 10, 242, 0, 16, 0, 0, - 0, 0, 0, 166, 138, 32, - 0, 0, 0, 0, 0, 7, - 0, 0, 0, 70, 14, 16, - 0, 1, 0, 0, 0, 70, - 14, 16, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 8, 34, 0, 16, 0, 1, + 0, 0, 0, 26, 16, 16, + 0, 1, 0, 0, 0, 10, + 128, 32, 0, 0, 0, 0, + 0, 5, 0, 0, 0, 54, + 0, 0, 5, 18, 0, 16, + 0, 1, 0, 0, 0, 10, + 16, 16, 0, 1, 0, 0, + 0, 69, 0, 0, 9, 242, + 0, 16, 0, 1, 0, 0, + 0, 70, 0, 16, 0, 1, + 0, 0, 0, 70, 126, 16, + 0, 0, 0, 0, 0, 0, + 96, 16, 0, 1, 0, 0, 0, 50, 0, 0, 10, 242, 0, 16, 0, 0, 0, 0, - 0, 246, 143, 32, 0, 0, - 0, 0, 0, 7, 0, 0, - 0, 70, 14, 16, 0, 2, + 0, 6, 128, 32, 0, 0, + 0, 0, 0, 8, 0, 0, + 0, 70, 14, 16, 0, 1, 0, 0, 0, 70, 14, 16, - 0, 0, 0, 0, 0, 0, - 0, 0, 8, 34, 0, 16, - 0, 1, 0, 0, 0, 26, - 16, 16, 0, 1, 0, 0, - 0, 10, 128, 32, 0, 0, + 0, 0, 0, 0, 0, 69, + 0, 0, 9, 242, 0, 16, + 0, 1, 0, 0, 0, 230, + 26, 16, 0, 1, 0, 0, + 0, 70, 126, 16, 0, 1, + 0, 0, 0, 0, 96, 16, + 0, 0, 0, 0, 0, 56, + 0, 0, 7, 242, 32, 16, + 0, 0, 0, 0, 0, 70, + 14, 16, 0, 0, 0, 0, + 0, 246, 15, 16, 0, 1, + 0, 0, 0, 62, 0, 0, + 1, 83, 84, 65, 84, 116, + 0, 0, 0, 31, 0, 0, + 0, 4, 0, 0, 0, 0, + 0, 0, 0, 3, 0, 0, + 0, 5, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 10, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 9, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 82, + 68, 69, 70, 12, 2, 0, + 0, 1, 0, 0, 0, 232, 0, 0, 0, 5, 0, 0, - 0, 54, 0, 0, 5, 18, - 0, 16, 0, 1, 0, 0, - 0, 10, 16, 16, 0, 1, - 0, 0, 0, 69, 0, 0, - 9, 242, 0, 16, 0, 1, - 0, 0, 0, 70, 0, 16, - 0, 1, 0, 0, 0, 70, - 126, 16, 0, 0, 0, 0, - 0, 0, 96, 16, 0, 1, - 0, 0, 0, 50, 0, 0, - 10, 242, 0, 16, 0, 0, - 0, 0, 0, 6, 128, 32, - 0, 0, 0, 0, 0, 8, - 0, 0, 0, 70, 14, 16, - 0, 1, 0, 0, 0, 70, - 14, 16, 0, 0, 0, 0, - 0, 69, 0, 0, 9, 242, - 0, 16, 0, 1, 0, 0, - 0, 230, 26, 16, 0, 1, - 0, 0, 0, 70, 126, 16, - 0, 1, 0, 0, 0, 0, - 96, 16, 0, 0, 0, 0, - 0, 56, 0, 0, 7, 242, - 32, 16, 0, 0, 0, 0, - 0, 70, 14, 16, 0, 0, - 0, 0, 0, 246, 15, 16, - 0, 1, 0, 0, 0, 62, - 0, 0, 1, 83, 84, 65, - 84, 116, 0, 0, 0, 31, - 0, 0, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 3, - 0, 0, 0, 5, 0, 0, + 0, 28, 0, 0, 0, 0, + 4, 255, 255, 0, 1, 0, + 0, 216, 1, 0, 0, 188, + 0, 0, 0, 3, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, + 0, 201, 0, 0, 0, 3, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 10, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 9, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 82, 68, 69, 70, 12, - 2, 0, 0, 1, 0, 0, - 0, 232, 0, 0, 0, 5, - 0, 0, 0, 28, 0, 0, - 0, 0, 4, 255, 255, 0, - 1, 0, 0, 216, 1, 0, - 0, 188, 0, 0, 0, 3, + 0, 1, 0, 0, 0, 0, + 0, 0, 0, 216, 0, 0, + 0, 2, 0, 0, 0, 5, + 0, 0, 0, 4, 0, 0, + 0, 255, 255, 255, 255, 0, + 0, 0, 0, 1, 0, 0, + 0, 12, 0, 0, 0, 220, + 0, 0, 0, 2, 0, 0, + 0, 5, 0, 0, 0, 4, + 0, 0, 0, 255, 255, 255, + 255, 1, 0, 0, 0, 1, + 0, 0, 0, 12, 0, 0, + 0, 225, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, - 0, 0, 0, 201, 0, 0, - 0, 3, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 216, - 0, 0, 0, 2, 0, 0, - 0, 5, 0, 0, 0, 4, - 0, 0, 0, 255, 255, 255, - 255, 0, 0, 0, 0, 1, - 0, 0, 0, 12, 0, 0, - 0, 220, 0, 0, 0, 2, - 0, 0, 0, 5, 0, 0, - 0, 4, 0, 0, 0, 255, - 255, 255, 255, 1, 0, 0, - 0, 1, 0, 0, 0, 12, - 0, 0, 0, 225, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 0, 0, 0, 0, 115, - 77, 97, 115, 107, 83, 97, - 109, 112, 108, 101, 114, 0, - 115, 83, 104, 97, 100, 111, - 119, 83, 97, 109, 112, 108, - 101, 114, 0, 116, 101, 120, - 0, 109, 97, 115, 107, 0, - 99, 98, 49, 0, 171, 171, - 171, 225, 0, 0, 0, 4, - 0, 0, 0, 0, 1, 0, - 0, 160, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 96, 1, 0, 0, 0, - 0, 0, 0, 48, 0, 0, - 0, 0, 0, 0, 0, 112, + 0, 0, 0, 115, 77, 97, + 115, 107, 83, 97, 109, 112, + 108, 101, 114, 0, 115, 83, + 104, 97, 100, 111, 119, 83, + 97, 109, 112, 108, 101, 114, + 0, 116, 101, 120, 0, 109, + 97, 115, 107, 0, 99, 98, + 49, 0, 171, 171, 171, 225, + 0, 0, 0, 4, 0, 0, + 0, 0, 1, 0, 0, 160, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 96, 1, 0, 0, 0, 0, 0, - 0, 128, 1, 0, 0, 48, - 0, 0, 0, 48, 0, 0, - 0, 2, 0, 0, 0, 144, - 1, 0, 0, 0, 0, 0, - 0, 160, 1, 0, 0, 96, - 0, 0, 0, 48, 0, 0, - 0, 2, 0, 0, 0, 172, - 1, 0, 0, 0, 0, 0, - 0, 188, 1, 0, 0, 144, - 0, 0, 0, 16, 0, 0, - 0, 0, 0, 0, 0, 200, - 1, 0, 0, 0, 0, 0, + 0, 48, 0, 0, 0, 0, + 0, 0, 0, 112, 1, 0, + 0, 0, 0, 0, 0, 128, + 1, 0, 0, 48, 0, 0, + 0, 48, 0, 0, 0, 2, + 0, 0, 0, 144, 1, 0, + 0, 0, 0, 0, 0, 160, + 1, 0, 0, 96, 0, 0, + 0, 48, 0, 0, 0, 2, + 0, 0, 0, 172, 1, 0, + 0, 0, 0, 0, 0, 188, + 1, 0, 0, 144, 0, 0, + 0, 16, 0, 0, 0, 0, + 0, 0, 0, 200, 1, 0, + 0, 0, 0, 0, 0, 66, + 108, 117, 114, 79, 102, 102, + 115, 101, 116, 115, 72, 0, + 171, 171, 171, 1, 0, 3, + 0, 1, 0, 4, 0, 3, + 0, 0, 0, 0, 0, 0, 0, 66, 108, 117, 114, 79, 102, 102, 115, 101, 116, 115, - 72, 0, 171, 171, 171, 1, + 86, 0, 171, 171, 171, 1, 0, 3, 0, 1, 0, 4, 0, 3, 0, 0, 0, 0, 0, 0, 0, 66, 108, 117, - 114, 79, 102, 102, 115, 101, - 116, 115, 86, 0, 171, 171, - 171, 1, 0, 3, 0, 1, - 0, 4, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 66, - 108, 117, 114, 87, 101, 105, - 103, 104, 116, 115, 0, 1, - 0, 3, 0, 1, 0, 4, - 0, 3, 0, 0, 0, 0, - 0, 0, 0, 83, 104, 97, - 100, 111, 119, 67, 111, 108, - 111, 114, 0, 1, 0, 3, - 0, 1, 0, 4, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 77, 105, 99, 114, 111, - 115, 111, 102, 116, 32, 40, - 82, 41, 32, 72, 76, 83, - 76, 32, 83, 104, 97, 100, - 101, 114, 32, 67, 111, 109, - 112, 105, 108, 101, 114, 32, - 57, 46, 50, 57, 46, 57, - 53, 50, 46, 51, 49, 49, - 49, 0, 171, 171, 171, 73, - 83, 71, 78, 104, 0, 0, - 0, 3, 0, 0, 0, 8, - 0, 0, 0, 80, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 15, - 0, 0, 0, 92, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 1, 0, 0, 0, 3, - 3, 0, 0, 92, 0, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 1, 0, 0, 0, 12, - 12, 0, 0, 83, 86, 95, - 80, 111, 115, 105, 116, 105, - 111, 110, 0, 84, 69, 88, - 67, 79, 79, 82, 68, 0, - 171, 171, 171, 79, 83, 71, - 78, 44, 0, 0, 0, 1, + 114, 87, 101, 105, 103, 104, + 116, 115, 0, 1, 0, 3, + 0, 1, 0, 4, 0, 3, + 0, 0, 0, 0, 0, 0, + 0, 83, 104, 97, 100, 111, + 119, 67, 111, 108, 111, 114, + 0, 1, 0, 3, 0, 1, + 0, 4, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 77, + 105, 99, 114, 111, 115, 111, + 102, 116, 32, 40, 82, 41, + 32, 72, 76, 83, 76, 32, + 83, 104, 97, 100, 101, 114, + 32, 67, 111, 109, 112, 105, + 108, 101, 114, 32, 57, 46, + 50, 57, 46, 57, 53, 50, + 46, 51, 49, 49, 49, 0, + 171, 171, 171, 73, 83, 71, + 78, 104, 0, 0, 0, 3, 0, 0, 0, 8, 0, 0, - 0, 32, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, + 0, 80, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 15, 0, 0, - 0, 83, 86, 95, 84, 97, - 114, 103, 101, 116, 0, 171, - 171, 27, 51, 0, 0, 0, - 0, 0, 0, 4, 0, 0, - 0, 48, 0, 0, 0, 0, - 0, 0, 0, 3, 0, 0, - 0, 255, 255, 255, 255, 0, - 0, 0, 0, 43, 0, 0, - 0, 15, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 52, 0, 0, 0, 15, - 0, 0, 0, 0, 0, 0, - 0, 16, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 62, + 0, 92, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 1, + 0, 0, 0, 3, 3, 0, + 0, 92, 0, 0, 0, 1, + 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 1, + 0, 0, 0, 12, 12, 0, + 0, 83, 86, 95, 80, 111, + 115, 105, 116, 105, 111, 110, + 0, 84, 69, 88, 67, 79, + 79, 82, 68, 0, 171, 171, + 171, 79, 83, 71, 78, 44, + 0, 0, 0, 1, 0, 0, + 0, 8, 0, 0, 0, 32, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 3, + 0, 0, 0, 0, 0, 0, + 0, 15, 0, 0, 0, 83, + 86, 95, 84, 97, 114, 103, + 101, 116, 0, 171, 171, 149, + 83, 0, 0, 0, 0, 0, + 0, 4, 0, 0, 0, 48, + 0, 0, 0, 0, 0, 0, + 0, 3, 0, 0, 0, 255, + 255, 255, 255, 0, 0, 0, + 0, 43, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 52, 0, 0, 0, 15, 0, 0, - 0, 0, 0, 0, 0, 32, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 76, 0, 0, - 0, 160, 0, 0, 0, 0, - 0, 0, 0, 4, 0, 0, - 0, 255, 255, 255, 255, 0, - 0, 0, 0, 108, 0, 0, + 0, 0, 0, 0, 0, 16, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 62, 0, 0, + 0, 15, 0, 0, 0, 0, + 0, 0, 0, 32, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 76, 0, 0, 0, 160, + 0, 0, 0, 0, 0, 0, + 0, 4, 0, 0, 0, 255, + 255, 255, 255, 0, 0, 0, + 0, 108, 0, 0, 0, 80, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 121, + 0, 0, 0, 80, 0, 0, + 0, 0, 0, 0, 0, 48, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 134, 0, 0, 0, 80, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 121, 0, 0, 0, 80, - 0, 0, 0, 0, 0, 0, - 0, 48, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 134, - 0, 0, 0, 80, 0, 0, + 0, 0, 0, 96, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 146, 0, 0, 0, 15, + 0, 0, 0, 0, 0, 0, + 0, 144, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 158, + 0, 0, 0, 112, 0, 0, + 0, 0, 0, 0, 0, 7, + 0, 0, 0, 255, 255, 255, + 255, 0, 0, 0, 0, 199, + 0, 0, 0, 171, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 1, 0, + 0, 229, 0, 0, 0, 0, + 0, 0, 0, 48, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 47, 1, 0, 0, 19, + 1, 0, 0, 0, 0, 0, + 0, 64, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 52, + 1, 0, 0, 229, 0, 0, + 0, 0, 0, 0, 0, 80, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 94, 1, 0, + 0, 66, 1, 0, 0, 0, + 0, 0, 0, 88, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 96, 1, 0, 0, 66, + 1, 0, 0, 0, 0, 0, + 0, 92, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 104, + 1, 0, 0, 66, 1, 0, 0, 0, 0, 0, 0, 96, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 146, 0, 0, - 0, 15, 0, 0, 0, 0, - 0, 0, 0, 144, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 196, 0, 0, 0, 168, - 0, 0, 0, 0, 0, 0, - 0, 255, 255, 255, 255, 0, - 0, 0, 0, 200, 0, 0, - 0, 168, 0, 0, 0, 0, + 0, 0, 0, 153, 1, 0, + 0, 125, 1, 0, 0, 0, 0, 0, 0, 255, 255, 255, - 255, 0, 0, 0, 0, 246, - 0, 0, 0, 218, 0, 0, + 255, 0, 0, 0, 0, 157, + 1, 0, 0, 125, 1, 0, + 0, 0, 0, 0, 0, 255, + 255, 255, 255, 0, 0, 0, + 0, 203, 1, 0, 0, 175, + 1, 0, 0, 0, 0, 0, + 0, 255, 255, 255, 255, 4, + 0, 0, 0, 45, 0, 0, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 212, 1, 0, + 0, 55, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, + 0, 153, 1, 0, 0, 46, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 224, + 1, 0, 0, 47, 0, 0, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 236, 1, 0, + 0, 0, 0, 0, 0, 248, + 1, 0, 0, 175, 1, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 4, 0, 0, 0, 45, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 255, 0, 0, 0, 55, - 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 196, - 0, 0, 0, 46, 0, 0, + 0, 5, 2, 0, 0, 55, + 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 157, + 1, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 11, 1, 0, + 0, 0, 0, 17, 2, 0, 0, 47, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 23, 1, 0, 0, 0, - 0, 0, 0, 35, 1, 0, - 0, 218, 0, 0, 0, 0, + 0, 29, 2, 0, 0, 0, + 0, 0, 0, 41, 2, 0, + 0, 175, 1, 0, 0, 0, 0, 0, 0, 255, 255, 255, - 255, 4, 0, 0, 0, 45, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 48, - 1, 0, 0, 55, 0, 0, + 255, 5, 0, 0, 0, 45, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 56, + 2, 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 200, 0, 0, + 0, 0, 0, 153, 1, 0, 0, 46, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 60, 1, 0, 0, 47, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 72, - 1, 0, 0, 0, 0, 0, - 0, 84, 1, 0, 0, 218, - 0, 0, 0, 0, 0, 0, - 0, 255, 255, 255, 255, 5, - 0, 0, 0, 45, 0, 0, + 0, 68, 2, 0, 0, 47, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 80, + 2, 0, 0, 52, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 99, 1, 0, - 0, 55, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, - 0, 196, 0, 0, 0, 46, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 111, - 1, 0, 0, 47, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 123, 1, 0, - 0, 52, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 135, 1, 0, 0, 0, - 0, 0, 0, 215, 1, 0, - 0, 187, 1, 0, 0, 0, - 0, 0, 0, 255, 255, 255, - 255, 2, 0, 0, 0, 19, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 227, - 1, 0, 0, 13, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 239, 1, 0, - 0, 0, 0, 0, 0, 34, - 2, 0, 0, 6, 2, 0, + 0, 0, 0, 92, 2, 0, + 0, 0, 0, 0, 0, 172, + 2, 0, 0, 144, 2, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 2, 0, 0, - 0, 37, 0, 0, 0, 0, + 0, 19, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 47, 2, 0, 0, 44, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 59, + 0, 184, 2, 0, 0, 13, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 196, 2, 0, 0, 0, 0, 0, - 0, 71, 2, 0, 0, 6, + 0, 247, 2, 0, 0, 219, 2, 0, 0, 0, 0, 0, - 0, 255, 255, 255, 255, 8, + 0, 255, 255, 255, 255, 2, 0, 0, 0, 37, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 84, 2, 0, - 0, 38, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 96, 2, 0, 0, 39, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 108, - 2, 0, 0, 40, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 120, 2, 0, - 0, 41, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 132, 2, 0, 0, 42, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 144, - 2, 0, 0, 43, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 156, 2, 0, + 0, 0, 0, 4, 3, 0, 0, 44, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 168, 2, 0, 0, 0, - 0, 0, 0, 180, 2, 0, - 0, 1, 0, 0, 0, 0, - 0, 0, 0, 194, 2, 0, + 0, 16, 3, 0, 0, 0, + 0, 0, 0, 28, 3, 0, + 0, 219, 2, 0, 0, 0, + 0, 0, 0, 255, 255, 255, + 255, 8, 0, 0, 0, 37, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 41, + 3, 0, 0, 38, 0, 0, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 53, 3, 0, + 0, 39, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 65, 3, 0, 0, 40, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 77, + 3, 0, 0, 41, 0, 0, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 89, 3, 0, + 0, 42, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 101, 3, 0, 0, 43, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 113, + 3, 0, 0, 44, 0, 0, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 125, 3, 0, + 0, 0, 0, 0, 0, 137, + 3, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 151, + 3, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 172, + 2, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 7, + 0, 0, 0, 194, 7, 0, + 0, 8, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 202, 7, 0, 0, 7, + 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 174, + 10, 0, 0, 182, 10, 0, + 0, 2, 0, 0, 0, 0, + 0, 0, 0, 151, 3, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 215, 1, 0, + 0, 0, 0, 172, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 237, 6, 0, 0, 8, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 245, - 6, 0, 0, 7, 0, 0, + 0, 211, 17, 0, 0, 8, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 219, + 17, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 217, 9, 0, - 0, 225, 9, 0, 0, 1, - 0, 0, 0, 0, 0, 0, - 0, 194, 2, 0, 0, 4, + 0, 0, 0, 155, 27, 0, + 0, 163, 27, 0, 0, 4, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, - 0, 215, 1, 0, 0, 6, - 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 29, - 14, 0, 0, 8, 0, 0, + 0, 172, 2, 0, 0, 6, + 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 174, + 34, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 37, 14, 0, + 0, 0, 0, 182, 34, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 5, 18, 0, 0, 13, - 18, 0, 0, 3, 0, 0, - 0, 0, 0, 0, 0, 194, - 2, 0, 0, 7, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 215, - 1, 0, 0, 10, 0, 0, - 0, 0, 0, 0, 0, 1, - 0, 0, 0, 37, 18, 0, - 0, 11, 0, 0, 0, 0, - 0, 0, 0, 1, 0, 0, - 0, 73, 18, 0, 0, 2, - 0, 0, 0, 0, 0, 0, - 0, 2, 0, 0, 0, 34, + 0, 86, 42, 0, 0, 94, + 42, 0, 0, 1, 0, 0, + 0, 0, 0, 0, 0, 151, + 3, 0, 0, 4, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 172, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 125, 22, 0, + 0, 0, 0, 154, 46, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 133, 22, 0, 0, 7, - 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 125, - 32, 0, 0, 133, 32, 0, + 0, 162, 46, 0, 0, 7, + 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 130, + 50, 0, 0, 138, 50, 0, + 0, 3, 0, 0, 0, 0, + 0, 0, 0, 151, 3, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 215, 1, 0, + 0, 0, 0, 172, 2, 0, 0, 10, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, - 0, 136, 32, 0, 0, 11, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 172, - 32, 0, 0, 2, 0, 0, + 0, 162, 50, 0, 0, 11, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 198, + 50, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, - 0, 0, 0, 71, 2, 0, + 0, 0, 0, 247, 2, 0, 0, 6, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 224, 36, 0, 0, 8, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 232, - 36, 0, 0, 7, 0, 0, + 0, 250, 54, 0, 0, 8, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 2, + 55, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, - 0, 0, 0, 164, 46, 0, - 0, 172, 46, 0, 0, 7, + 0, 0, 0, 250, 64, 0, + 0, 163, 27, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, - 0, 215, 1, 0, 0, 10, - 0, 0, 0, 0, 0, 0, - 0, 1, 0, 0, 0, 175, - 46, 0, 0, 11, 0, 0, + 0, 172, 2, 0, 0, 10, + 0, 0, 0, 0, 0, 0, + 0, 1, 0, 0, 0, 2, + 65, 0, 0, 11, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 211, 46, 0, + 0, 0, 0, 38, 65, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, - 0, 71, 2, 0, 0, 6, - 0, 0, 0, 0, 0, 0, - 0, 7, 0, 0, 0, 7, - 51, 0, 0, 8, 0, 0, + 0, 28, 3, 0, 0, 6, + 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 90, + 69, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 1, - 0, 0, 0, 15, 51, 0, + 0, 0, 0, 98, 69, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 7, 0, 0, - 0, 195, 61, 0, 0 + 0, 30, 79, 0, 0, 38, + 79, 0, 0, 7, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 172, + 2, 0, 0, 10, 0, 0, + 0, 0, 0, 0, 0, 1, + 0, 0, 0, 41, 79, 0, + 0, 11, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 77, 79, 0, 0, 2, + 0, 0, 0, 0, 0, 0, + 0, 2, 0, 0, 0, 28, + 3, 0, 0, 6, 0, 0, + 0, 0, 0, 0, 0, 7, + 0, 0, 0, 129, 83, 0, + 0, 8, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 0, + 0, 137, 83, 0, 0, 7, + 0, 0, 0, 0, 0, 0, + 0, 7, 0, 0, 0, 61, + 94, 0, 0 };
--- a/gfx/layers/Layers.h +++ b/gfx/layers/Layers.h @@ -429,16 +429,17 @@ public: /** * Creates a DrawTarget which is optimized for inter-operating with this * layermanager. */ virtual TemporaryRef<mozilla::gfx::DrawTarget> CreateDrawTarget(const mozilla::gfx::IntSize &aSize, mozilla::gfx::SurfaceFormat aFormat); + virtual bool CanUseCanvasLayerForSize(const gfxIntSize &aSize) { return PR_TRUE; } /** * Return the name of the layer manager's backend. */ virtual void GetBackendName(nsAString& aName) = 0; /** * This setter can be used anytime. The user data for all keys is
--- a/gfx/layers/d3d10/LayerManagerD3D10.h +++ b/gfx/layers/d3d10/LayerManagerD3D10.h @@ -110,16 +110,25 @@ public: void *CallbackData; }; virtual void EndTransaction(DrawThebesLayerCallback aCallback, void* aCallbackData); const CallbackInfo &GetCallbackInfo() { return mCurrentCallbackInfo; } + // D3D10 guarantees textures can be at least this size + enum { + MAX_TEXTURE_SIZE = 8192 + }; + virtual bool CanUseCanvasLayerForSize(const gfxIntSize &aSize) + { + return aSize <= gfxIntSize(MAX_TEXTURE_SIZE, MAX_TEXTURE_SIZE); + } + virtual already_AddRefed<ThebesLayer> CreateThebesLayer(); virtual already_AddRefed<ContainerLayer> CreateContainerLayer(); virtual already_AddRefed<ImageLayer> CreateImageLayer(); virtual already_AddRefed<ColorLayer> CreateColorLayer();
--- a/gfx/layers/d3d9/DeviceManagerD3D9.cpp +++ b/gfx/layers/d3d9/DeviceManagerD3D9.cpp @@ -176,16 +176,17 @@ SwapChainD3D9::Reset() mSwapChain = nsnull; } #define HAS_CAP(a, b) (((a) & (b)) == (b)) #define LACKS_CAP(a, b) !(((a) & (b)) == (b)) DeviceManagerD3D9::DeviceManagerD3D9() : mDeviceResetCount(0) + , mMaxTextureSize(0) , mHasDynamicTextures(false) , mDeviceWasRemoved(false) { } DeviceManagerD3D9::~DeviceManagerD3D9() { LayerManagerD3D9::OnDeviceManagerDestroy(this); @@ -641,16 +642,17 @@ DeviceManagerD3D9::VerifyCaps() if (LACKS_CAP(caps.TextureAddressCaps, D3DPTADDRESSCAPS_CLAMP)) { return false; } if (caps.MaxTextureHeight < 4096 || caps.MaxTextureWidth < 4096) { return false; } + mMaxTextureSize = NS_MIN(caps.MaxTextureHeight, caps.MaxTextureWidth); if ((caps.PixelShaderVersion & 0xffff) < 0x200 || (caps.VertexShaderVersion & 0xffff) < 0x200) { return false; } if (HAS_CAP(caps.Caps2, D3DCAPS2_DYNAMICTEXTURES)) { mHasDynamicTextures = true;
--- a/gfx/layers/d3d9/DeviceManagerD3D9.h +++ b/gfx/layers/d3d9/DeviceManagerD3D9.h @@ -163,16 +163,18 @@ public: PRUint32 GetDeviceResetCount() { return mDeviceResetCount; } /** * We keep a list of all layers here that may have hardware resource allocated * so we can clean their resources on reset. */ nsTArray<LayerD3D9*> mLayersWithResources; + PRInt32 GetMaxTextureSize() { return mMaxTextureSize; } + private: friend class SwapChainD3D9; ~DeviceManagerD3D9(); /** * This function verifies the device is ready for rendering, internally this * will test the cooperative level of the device and reset the device if @@ -233,16 +235,18 @@ private: */ HWND mFocusWnd; /* we use this to help track if our device temporarily or permanently lost */ HMONITOR mDeviceMonitor; PRUint32 mDeviceResetCount; + PRUint32 mMaxTextureSize; + /* If this device supports dynamic textures */ bool mHasDynamicTextures; /* If this device was removed */ bool mDeviceWasRemoved; /* Nv3DVUtils instance */ nsAutoPtr<Nv3DVUtils> mNv3DVUtils;
--- a/gfx/layers/d3d9/LayerManagerD3D9.h +++ b/gfx/layers/d3d9/LayerManagerD3D9.h @@ -136,16 +136,24 @@ public: virtual void EndTransaction(DrawThebesLayerCallback aCallback, void* aCallbackData); const CallbackInfo &GetCallbackInfo() { return mCurrentCallbackInfo; } void SetRoot(Layer* aLayer); + virtual bool CanUseCanvasLayerForSize(const gfxIntSize &aSize) + { + if (!mDeviceManager) + return false; + PRInt32 maxSize = mDeviceManager->GetMaxTextureSize(); + return aSize <= gfxIntSize(maxSize, maxSize); + } + virtual already_AddRefed<ThebesLayer> CreateThebesLayer(); virtual already_AddRefed<ContainerLayer> CreateContainerLayer(); virtual already_AddRefed<ImageLayer> CreateImageLayer(); virtual already_AddRefed<ColorLayer> CreateColorLayer();
--- a/gfx/layers/opengl/LayerManagerOGL.h +++ b/gfx/layers/opengl/LayerManagerOGL.h @@ -133,16 +133,24 @@ public: void EndConstruction(); virtual bool EndEmptyTransaction(); virtual void EndTransaction(DrawThebesLayerCallback aCallback, void* aCallbackData); virtual void SetRoot(Layer* aLayer) { mRoot = aLayer; } + virtual bool CanUseCanvasLayerForSize(const gfxIntSize &aSize) + { + if (!mGLContext) + return false; + PRInt32 maxSize = mGLContext->GetMaxTextureSize(); + return aSize <= gfxIntSize(maxSize, maxSize); + } + virtual already_AddRefed<ThebesLayer> CreateThebesLayer(); virtual already_AddRefed<ContainerLayer> CreateContainerLayer(); virtual already_AddRefed<ImageLayer> CreateImageLayer(); virtual already_AddRefed<ColorLayer> CreateColorLayer();
--- a/js/src/tests/e4x/GC/jstests.list +++ b/js/src/tests/e4x/GC/jstests.list @@ -1,11 +1,11 @@ url-prefix ../../jsreftest.html?test=e4x/GC/ -script regress-280844-1.js -script regress-280844-2.js +skip-if(Android) script regress-280844-1.js +skip-if(Android) script regress-280844-2.js skip-if(!xulRuntime.shell) script regress-292455.js # does not always dismiss alert script regress-313952-01.js script regress-313952-02.js script regress-324117.js skip script regress-324278.js # slow script regress-339785.js script regress-357063-01.js script regress-357063-02.js
--- a/js/src/tests/e4x/Regress/jstests.list +++ b/js/src/tests/e4x/Regress/jstests.list @@ -75,22 +75,22 @@ script regress-373082.js script regress-374106.js script regress-374112.js script regress-374116.js script regress-374160.js script regress-375406.js script regress-378492.js script regress-380833.js script regress-383255.js -silentfail script regress-394941.js +skip-if(Android) silentfail script regress-394941.js script regress-407323.js script regress-426520.js script regress-453915.js -silentfail script regress-458679-01.js -silentfail script regress-458679-02.js +skip-if(Android) silentfail script regress-458679-01.js +skip-if(Android) silentfail script regress-458679-02.js script regress-460180.js script regress-465063.js script regress-470619.js -script regress-473709.js -script regress-474319.js +skip-if(Android) script regress-473709.js +skip-if(Android) script regress-474319.js script regress-477053.js script regress-561031.js script regress-587434.js
--- a/js/src/tests/e4x/XML/jstests.list +++ b/js/src/tests/e4x/XML/jstests.list @@ -43,14 +43,14 @@ script 13.4.4.39.js script 13.4.4.4.js script 13.4.4.40.js script 13.4.4.5.js script 13.4.4.6.js script 13.4.4.7.js script 13.4.4.8.js script 13.4.4.9.js script regress-291930.js -silentfail script regress-324422-1.js +skip-if(Android) silentfail script regress-324422-1.js skip script regress-324422-2.js # slow skip script regress-324688.js # bug 528404 - disable due to random timeouts script regress-336921.js script regress-376773.js script regress-621464.js
--- a/js/src/tests/ecma_5/Function/jstests.list +++ b/js/src/tests/ecma_5/Function/jstests.list @@ -4,10 +4,10 @@ script 15.3.4.3-01.js script arguments-caller-callee.js script function-caller.js script strict-arguments.js script arguments-property-attributes.js script function-bind.js script function-call.js script redefine-arguments-length.js script builtin-no-prototype.js -script Function-arguments-gc.js +skip-if(Android) script Function-arguments-gc.js script builtin-no-construct.js
--- a/js/src/tests/js1_5/Array/jstests.list +++ b/js/src/tests/js1_5/Array/jstests.list @@ -1,25 +1,25 @@ url-prefix ../../jsreftest.html?test=js1_5/Array/ script 11.1.4.js script array-001.js random script regress-101964.js # bogus perf test (bug 467263) script regress-107138.js fails-if(!xulRuntime.shell) script regress-108440.js # bug - NS_ERROR_DOM_NOT_SUPPORTED_ERR line 74 script regress-154338.js -skip-if(xulRuntime.XPCOMABI.match(/x86_64/)) script regress-157652.js # No test results +skip-if(xulRuntime.XPCOMABI.match(/x86_64/)||Android) script regress-157652.js # No test results script regress-178722.js script regress-255555.js script regress-299644.js script regress-300858.js script regress-310351.js script regress-311515.js script regress-313153.js script regress-315509-01.js -skip-if(xulRuntime.XPCOMABI.match(/x86_64/)) script regress-330812.js # No test results +skip-if(xulRuntime.XPCOMABI.match(/x86_64/)||Android) script regress-330812.js # No test results script regress-345961.js script regress-348810.js script regress-350256-01.js script regress-350256-02.js script regress-360681-01.js script regress-360681-02.js script regress-364104.js script regress-422286.js
--- a/js/src/tests/js1_5/Exceptions/jstests.list +++ b/js/src/tests/js1_5/Exceptions/jstests.list @@ -7,10 +7,10 @@ script regress-123002.js script regress-232182.js script regress-257751.js script regress-273931.js fails-if(Android) script regress-315147.js script regress-332472.js script regress-333728.js script regress-342359.js script regress-347674.js -script regress-350650-n.js +skip-if(Android) script regress-350650-n.js script regress-350837.js
--- a/js/src/tests/js1_5/Function/jstests.list +++ b/js/src/tests/js1_5/Function/jstests.list @@ -2,14 +2,14 @@ url-prefix ../../jsreftest.html?test=js1 script 10.1.6-01.js script 10.1.6.js script 15.3.4.4.js script regress-123371.js script regress-178389.js script regress-222029-001.js script regress-222029-002.js script regress-292215.js -#silentfail script regress-338001.js # disabled pending bug 657444 -#silentfail script regress-338121-01.js # disabled pending bug 657444 -#silentfail script regress-338121-02.js # disabled pending bug 657444 -#silentfail script regress-338121-03.js # disabled pending bug 657444 +#skip-if(Android) silentfail script regress-338001.js # disabled pending bug 657444 +#skip-if(Android) silentfail script regress-338121-01.js # disabled pending bug 657444 +#skip-if(Android) silentfail script regress-338121-02.js # disabled pending bug 657444 +#skip-if(Android) silentfail script regress-338121-03.js # disabled pending bug 657444 script regress-344052.js script regress-364023.js
--- a/js/src/tests/js1_5/GC/jstests.list +++ b/js/src/tests/js1_5/GC/jstests.list @@ -12,15 +12,15 @@ script regress-316885-02.js script regress-316885-03.js skip-if(!xulRuntime.shell) slow script regress-319980-01.js skip script regress-324278.js # slow, obsoleted by 98409 fix script regress-331719.js skip script regress-338653.js # slow, killed on x86_64 script regress-341877-01.js script regress-341877-02.js skip script regress-346794.js # slow, killed -script regress-348532.js +skip-if(Android) script regress-348532.js script regress-352606.js skip script regress-383269-01.js # unreliable - based on GC timing skip script regress-383269-02.js # unreliable - based on GC timing script regress-390078.js script regress-418128.js -script regress-440558.js +skip-if(Android) script regress-440558.js
--- a/js/src/tests/js1_5/Regress/jstests.list +++ b/js/src/tests/js1_5/Regress/jstests.list @@ -86,17 +86,17 @@ script regress-261886.js skip script regress-261887.js # we violate the spec here with our new iterators skip script regress-271716-n.js # never terminates script regress-274035.js script regress-274888.js script regress-275378.js script regress-276103.js script regress-278873.js script regress-280769-1.js -silentfail script regress-280769-2.js +skip-if(Android) silentfail script regress-280769-2.js script regress-280769-3.js script regress-280769-4.js script regress-280769-5.js script regress-280769.js script regress-281606.js script regress-281930.js script regress-283477.js script regress-288688.js @@ -106,31 +106,31 @@ script regress-290656.js script regress-294191.js script regress-294195-01.js script regress-294195-02.js script regress-294302.js script regress-295052.js script regress-295666.js script regress-299209.js script regress-299641.js -skip-if(!xulRuntime.shell) script regress-303213.js # bug 524731 +skip-if(!xulRuntime.shell||Android) script regress-303213.js # bug 524731 script regress-306633.js script regress-306727.js script regress-306794.js script regress-308085.js script regress-308566.js script regress-309242.js script regress-310295.js script regress-310607.js script regress-310993.js script regress-311071.js script regress-311629.js script regress-312260.js script regress-31255.js -script regress-312588.js +skip-if(Android) script regress-312588.js random script regress-313967-01.js # BigO random script regress-313967-02.js # BigO skip-if(xulRuntime.OS=="WINNT"&&isDebugBuild) slow script regress-314401.js script regress-315974.js script regress-315990.js script regress-317476.js fails-if(Android) script regress-317533.js script regress-317714-01.js @@ -146,18 +146,18 @@ script regress-322430.js fails-if(Android) script regress-323314-1.js script regress-325925.js script regress-326453.js script regress-326467.js script regress-328012.js script regress-328664.js script regress-328897.js script regress-329383.js -script regress-329530.js -script regress-330352.js +skip-if(Android) script regress-329530.js +skip-if(Android) script regress-330352.js script regress-330951.js script regress-334807-01.js script regress-334807-02.js script regress-334807-03.js script regress-334807-04.js script regress-334807-05.js script regress-334807-06.js script regress-336100.js
--- a/js/src/tests/js1_5/extensions/jstests.list +++ b/js/src/tests/js1_5/extensions/jstests.list @@ -39,19 +39,19 @@ script regress-315509-02.js script regress-319683.js script regress-322957.js script regress-327608.js script regress-328443.js script regress-328556.js skip script regress-330569.js # Yarr doesn't bail on complex regexps. script regress-333541.js skip script regress-335700.js # bug xxx - reftest hang, BigO -skip-if(!xulRuntime.shell) slow script regress-336409-1.js # no results reported. +skip-if(!xulRuntime.shell||Android) slow script regress-336409-1.js # no results reported. skip-if(!xulRuntime.shell&&((Android||(isDebugBuild&&xulRuntime.OS=="Linux")||xulRuntime.XPCOMABI.match(/x86_64/)))) silentfail script regress-336409-2.js # can fail silently due to out of memory, bug 615011 - timeouts on slow debug Linux -skip-if(!xulRuntime.shell) silentfail script regress-336410-1.js # can fail silently due to out of memory +skip-if(!xulRuntime.shell||Android) silentfail script regress-336410-1.js # can fail silently due to out of memory skip-if(!xulRuntime.shell&&((isDebugBuild&&xulRuntime.OS=="Linux")||Android||xulRuntime.XPCOMABI.match(/x86_64/)||xulRuntime.OS=="WINNT")) silentfail script regress-336410-2.js # can fail silently due to out of memory, bug 621348 - timeouts on slow debug Linux script regress-338804-01.js script regress-338804-02.js script regress-338804-03.js script regress-339685.js script regress-341956-01.js script regress-341956-02.js script regress-341956-03.js @@ -147,21 +147,21 @@ script regress-385134.js script regress-385393-02.js script regress-385393-09.js script regress-390597.js script regress-390598.js script regress-394967.js script regress-396326.js skip script regress-406572.js script regress-407019.js -script regress-407501.js +skip-if(Android) script regress-407501.js skip-if(!xulRuntime.shell) slow script regress-407720.js script regress-412926.js -script regress-414755.js -script regress-416354.js +skip-if(Android) script regress-414755.js +skip-if(Android) script regress-416354.js script regress-416460.js script regress-416834.js skip script regress-418730.js # obsolete test script regress-420612.js script regress-420869-01.js skip script regress-421621.js # obsolete test require-or(debugMode,skip) script regress-422137.js script regress-422592.js @@ -179,38 +179,38 @@ fails script regress-435345-01.js script regress-435497-01.js script regress-435497-02.js script regress-435497-03.js script regress-436741.js skip script regress-437288-01.js # obsolete test script regress-44009.js script regress-443569.js script regress-446386.js -script regress-452168.js +skip-if(Android) script regress-452168.js script regress-452178.js script regress-452329.js script regress-452338.js script regress-452565.js script regress-453249.js script regress-454040.js -script regress-454142.js +skip-if(Android) script regress-454142.js script regress-454704.js script regress-455380.js script regress-455408.js script regress-455413.js script regress-459606.js script regress-462734-02.js script regress-462734-03.js script regress-462734-04.js script regress-465145.js script regress-465276.js script regress-469625.js script regress-469761.js script regress-472599.js -script regress-472787.js +skip-if(Android) script regress-472787.js script regress-476447.js script regress-479487.js script regress-479551.js script regress-480579.js script regress-481516.js script regress-488995.js script regress-50447-1.js skip script regress-50447.js # obsolete test
--- a/js/src/tests/js1_6/extensions/jstests.list +++ b/js/src/tests/js1_6/extensions/jstests.list @@ -1,17 +1,17 @@ url-prefix ../../jsreftest.html?test=js1_6/extensions/ script regress-312385-01.js script regress-352392.js script regress-385393-08.js script regress-414098.js fails-if(!xulRuntime.shell) script regress-455464-01.js # bug - NS_ERROR_DOM_NOT_SUPPORTED_ERR line 1 fails-if(!xulRuntime.shell) script regress-455464-02.js # bug - NS_ERROR_DOM_NOT_SUPPORTED_ERR line 49 fails-if(!xulRuntime.shell) script regress-455464-03.js # bug - NS_ERROR_DOM_NOT_SUPPORTED_ERR line 1 -fails-if(!xulRuntime.shell&&!isDebugBuild) skip-if(!xulRuntime.shell&&isDebugBuild) script regress-455464-04.js # bug xxx - hangs reftests in debug, ### bug xxx - NS_ERROR_DOM_NOT_SUPPORTED_ERR in opt -skip-if(!xulRuntime.shell) slow script regress-456826.js # bug 504632 +fails-if(!xulRuntime.shell&&!isDebugBuild) skip-if((!xulRuntime.shell&&isDebugBuild)||Android) script regress-455464-04.js # bug xxx - hangs reftests in debug, ### bug xxx - NS_ERROR_DOM_NOT_SUPPORTED_ERR in opt +skip-if(!xulRuntime.shell||Android) slow script regress-456826.js # bug 504632 script regress-457521.js script regress-465443.js script regress-470310.js script regress-472508.js fails-if(!xulRuntime.shell) script regress-475144.js # NS_ERROR_DOM_NOT_SUPPORTED_ERR script regress-479567.js script regress-565521.js
--- a/js/src/tests/js1_7/GC/jstests.list +++ b/js/src/tests/js1_7/GC/jstests.list @@ -1,3 +1,3 @@ url-prefix ../../jsreftest.html?test=js1_7/GC/ script regress-341675.js -script regress-381374.js +skip-if(Android) script regress-381374.js
--- a/js/src/tests/js1_7/extensions/jstests.list +++ b/js/src/tests/js1_7/extensions/jstests.list @@ -58,13 +58,13 @@ script regress-469234.js script regress-469405-01.js script regress-469405-02.js script regress-470176.js script regress-470300-01.js script regress-470300-02.js script regress-473282.js script regress-474771-01.js script regress-474771-02.js -script regress-476257.js +skip-if(Android) script regress-476257.js script regress-477048.js script regress-589112.js script regress-590813.js script regress-591450.js
--- a/js/src/tests/js1_7/regress/jstests.list +++ b/js/src/tests/js1_7/regress/jstests.list @@ -60,9 +60,9 @@ script regress-465424.js script regress-465484.js script regress-465686.js script regress-469239-01.js script regress-469239-02.js script regress-470223.js script regress-470388-01.js script regress-470388-02.js script regress-470388-03.js -script regress-474771.js +skip-if(Android) script regress-474771.js
--- a/js/src/tests/js1_8/extensions/jstests.list +++ b/js/src/tests/js1_8/extensions/jstests.list @@ -31,15 +31,15 @@ skip script regress-471197.js script regress-472450-03.js script regress-472450-04.js script regress-473040.js skip script regress-475971.js skip-if(!xulRuntime.shell) slow script regress-476414-01.js skip-if(!xulRuntime.shell) slow script regress-476414-02.js fails-if(!xulRuntime.shell) script regress-476427.js # NS_ERROR_DOM_NOT_SUPPORTED_ERR script regress-476653.js -script regress-476869.js +skip-if(Android) script regress-476869.js script regress-476871-02.js skip script regress-479252.js skip script regress-479381.js script regress-481989.js script regress-482263.js skip script simple-tree.js
--- a/js/src/tests/js1_8/regress/jstests.list +++ b/js/src/tests/js1_8/regress/jstests.list @@ -21,17 +21,17 @@ script regress-459389.js script regress-461930.js script regress-461932.js script regress-463334-01.js script regress-463334-02.js script regress-463783.js script regress-464092-01.js script regress-464092-02.js script regress-464096.js -script regress-464418.js +skip-if(Android) script regress-464418.js script regress-464978.js script regress-465220.js script regress-465234.js script regress-465239.js script regress-465241.js script regress-465249.js script regress-465261.js script regress-465308.js @@ -59,25 +59,25 @@ script regress-467495-02.js script regress-467495-03.js script regress-467495-04.js script regress-467495-05.js script regress-467495-06.js script regress-468711.js script regress-469547.js script regress-469625-02.js script regress-469625-03.js -script regress-471373.js # bug xxx No test results reported +skip-if(Android) script regress-471373.js # bug xxx No test results reported script regress-471660.js script regress-472450-01.js script regress-472450-02.js script regress-472528-01.js script regress-472528-02.js script regress-472703.js script regress-474769.js -script regress-474771.js +skip-if(Android) script regress-474771.js script regress-474935.js script regress-476655.js script regress-477234.js script regress-477581.js script regress-478205.js script regress-479353.js script regress-479740.js script regress-481800.js
--- a/js/src/tests/js1_8_1/extensions/jstests.list +++ b/js/src/tests/js1_8_1/extensions/jstests.list @@ -4,12 +4,12 @@ script regress-353214-02.js script regress-437288-01.js script regress-452498-162.js script regress-452498-193.js script regress-452498-196.js script regress-452498-224.js script regress-466905-04.js skip script regress-466905-05.js # no-op in browser, fails in shell - see bug 554793 script regress-477158.js -script regress-477187.js +skip-if(Android) script regress-477187.js script regress-520572.js script new-parenthesization.js fails-if(Android) script strict-warning.js
--- a/js/src/tests/js1_8_1/regress/jstests.list +++ b/js/src/tests/js1_8_1/regress/jstests.list @@ -3,17 +3,17 @@ script regress-420399.js script regress-452498-006.js script regress-452498-027.js script regress-452498-030.js script regress-452498-038.js script regress-452498-039.js script regress-452498-040.js script regress-452498-050.js script regress-452498-051.js -script regress-452498-052-a.js +skip-if(Android) script regress-452498-052-a.js script regress-452498-052.js script regress-452498-053.js script regress-452498-054.js script regress-452498-058.js script regress-452498-062.js script regress-452498-063.js script regress-452498-068.js script regress-452498-071.js @@ -23,17 +23,17 @@ script regress-452498-074.js script regress-452498-075.js script regress-452498-076.js script regress-452498-077.js script regress-452498-079.js script regress-452498-082.js script regress-452498-091.js script regress-452498-092.js script regress-452498-098.js -script regress-452498-099-a.js +skip-if(Android) script regress-452498-099-a.js script regress-452498-099.js script regress-452498-101.js script regress-452498-102.js script regress-452498-103.js script regress-452498-104.js script regress-452498-107.js script regress-452498-108.js script regress-452498-110.js @@ -45,17 +45,17 @@ script regress-452498-116.js script regress-452498-117.js script regress-452498-118.js script regress-452498-119.js script regress-452498-121.js script regress-452498-123.js script regress-452498-129.js script regress-452498-130.js script regress-452498-131.js -script regress-452498-135-a.js +skip-if(Android) script regress-452498-135-a.js script regress-452498-135.js script regress-452498-138.js script regress-452498-139.js script regress-452498-155.js script regress-452498-160.js script regress-452498-168-1.js skip script regress-452498-168-2.js # slow script regress-452498-176.js @@ -63,25 +63,25 @@ script regress-452498-178.js script regress-452498-181.js script regress-452498-184.js script regress-452498-185.js script regress-452498-187.js script regress-452498-191.js script regress-452498-192.js script regress-466905-01.js script regress-466905-02.js -script regress-479430-01.js -script regress-479430-02.js -script regress-479430-03.js -script regress-479430-04.js -script regress-479430-05.js +skip-if(Android) script regress-479430-01.js +skip-if(Android) script regress-479430-02.js +skip-if(Android) script regress-479430-03.js +skip-if(Android) script regress-479430-04.js +skip-if(Android) script regress-479430-05.js script regress-495773.js script regress-495907.js script regress-496922.js script regress-507053.js script regress-507295.js script regress-507424.js script regress-509354.js script regress-515885.js -skip-if(isDebugBuild&&!xulRuntime.shell) script regress-524743.js # hang +skip-if((isDebugBuild&&!xulRuntime.shell)||Android) script regress-524743.js # hang script regress-522123.js script regress-524264.js script regress-530879.js
--- a/js/src/tests/js1_8_5/extensions/jstests.list +++ b/js/src/tests/js1_8_5/extensions/jstests.list @@ -4,17 +4,17 @@ script typedarray-prototype.js script arraybuffer-prototype.js script typedarray-subarray-of-subarray.js skip-if(!xulRuntime.shell) script worker-error.js # these tests sometimes hang in browser, bug 559954, bug 562333 skip-if(!xulRuntime.shell) script worker-error-propagation.js skip-if(!xulRuntime.shell) script worker-fib.js skip-if(!xulRuntime.shell) script worker-init.js skip-if(!xulRuntime.shell) script worker-simple.js skip-if(!xulRuntime.shell) script worker-terminate.js -skip-if(!xulRuntime.shell) script worker-timeout.js +skip-if(!xulRuntime.shell||Android) script worker-timeout.js script regress-558541.js script scripted-proxies.js script watch-undefined-setter.js script array-length-protochange.js script parseInt-octal.js script proxy-enumerateOwn-duplicates.js skip-if(!xulRuntime.shell) script proxy-proto-setter.js skip-if(!xulRuntime.shell) script reflect-parse.js
--- a/js/src/tests/js1_8_5/regress/jstests.list +++ b/js/src/tests/js1_8_5/regress/jstests.list @@ -24,17 +24,17 @@ script regress-554955-6.js script regress-555246-0.js script regress-555246-1.js script regress-559402-1.js script regress-559402-2.js script regress-559438.js script regress-560101.js script regress-560998-1.js script regress-560998-2.js -script regress-563210.js +skip-if(Android) script regress-563210.js script regress-563221.js script regress-566549.js script regress-566914.js script regress-567152.js script regress-569306.js script regress-569464.js script regress-571014.js script regress-573875.js @@ -79,17 +79,17 @@ script regress-610026.js script regress-609617.js script regress-617405-1.js script regress-617405-2.js script regress-618572.js skip-if(!xulRuntime.shell) script regress-618576.js # uses evalcx fails-if(!xulRuntime.shell) script regress-618652.js script regress-619003-1.js script regress-619003-2.js -script regress-620376-1.js +skip-if(Android) script regress-620376-1.js script regress-620376-2.js script regress-621814.js script regress-620750.js script regress-624199.js script regress-624547.js script regress-624968.js script regress-626436.js script regress-633741.js
--- a/js/src/xpconnect/tests/mochitest/Makefile.in +++ b/js/src/xpconnect/tests/mochitest/Makefile.in @@ -49,17 +49,16 @@ include $(topsrcdir)/config/rules.mk bug92773_helper.html \ bug504877_helper.html \ bug571849_helper.html \ chrome_wrappers_helper.html \ file_doublewrappedcompartments.html \ file_evalInSandbox.html \ file_wrappers-2.html \ test_bug92773.html \ - test_bug361111.xul \ test_bug384632.html \ test_bug390488.html \ test_bug393269.html \ test_bug396851.html \ test_bug428021.html \ test_bug446584.html \ test_bug462428.html \ test_bug478438.html \ @@ -90,20 +89,28 @@ include $(topsrcdir)/config/rules.mk test_bug618017.html \ test_bug636097.html \ test_bug661980.html \ test_bug650273.html \ file_bug650273.html \ file_bug658560.html \ $(NULL) +_CHROME_FILES = \ + test_bug361111.xul \ + $(NULL) + ifneq ($(OS_TARGET),Android) ifndef MOZ_PLATFORM_MAEMO _TEST_FILES += test_bug657267.html \ bug657267.jar endif endif #test_bug484107.html \ libs:: $(_TEST_FILES) $(INSTALL) $^ $(DEPTH)/_tests/testing/mochitest/tests/$(relativesrcdir) + +libs:: $(_CHROME_FILES) + $(INSTALL) $^ $(DEPTH)/_tests/testing/mochitest/chrome/$(relativesrcdir) +
--- a/js/src/xpconnect/tests/mochitest/test_bug361111.xul +++ b/js/src/xpconnect/tests/mochitest/test_bug361111.xul @@ -1,18 +1,18 @@ <?xml version="1.0"?> <?xml-stylesheet href="chrome://global/skin" type="text/css"?> -<?xml-stylesheet href="/tests/SimpleTest/test.css" type="text/css"?> +<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> <!-- https://bugzilla.mozilla.org/show_bug.cgi?id=361111 --> <window title="Mozilla Bug 361111" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> - <script type="application/javascript" src="/MochiKit/packed.js" /> - <script type="application/javascript" src="/tests/SimpleTest/SimpleTest.js"/> + <script type="application/javascript" src="chrome://mochikit/content/MochiKit/packed.js" /> + <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> <!-- test results are displayed in the html:body --> <body xmlns="http://www.w3.org/1999/xhtml"> <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=361111" target="_blank">Mozilla Bug 361111</a> </body> <!-- test code goes here -->
--- a/layout/generic/nsHTMLCanvasFrame.cpp +++ b/layout/generic/nsHTMLCanvasFrame.cpp @@ -101,16 +101,19 @@ public: const ContainerParameters& aContainerParameters) { return static_cast<nsHTMLCanvasFrame*>(mFrame)-> BuildLayer(aBuilder, aManager, this); } virtual LayerState GetLayerState(nsDisplayListBuilder* aBuilder, LayerManager* aManager) { + if (CanvasElementFromContent(mFrame->GetContent())->ShouldForceInactiveLayer(aManager)) + return LAYER_INACTIVE; + // If compositing is cheap, just do that if (aManager->IsCompositingCheap()) return mozilla::LAYER_ACTIVE; return mFrame->AreLayersMarkedActive() ? LAYER_ACTIVE : LAYER_INACTIVE; } };
--- a/layout/reftests/bugs/reftest.list +++ b/layout/reftests/bugs/reftest.list @@ -1540,17 +1540,17 @@ needs-focus == 568441.html 568441-ref.ht == 574898-1.html 574898-ref.html # 574907 is a windows-only issue, result on other platforms depends on details of font support random-if(!winWidget) == 574907-1.html 574907-1-ref.html random-if(!winWidget) == 574907-2.html 574907-2-ref.html # 574907-3 only worked under directwrite, and even there it now depends on the rendering mode; marking as random for now random-if(!winWidget) fails-if(winWidget&&!d2d) random-if(winWidget&&d2d) != 574907-3.html 574907-3-notref.html == 577838-1.html 577838-1-ref.html == 577838-2.html 577838-2-ref.html -fails-if(Android) random-if(layersGPUAccelerated) fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) fails-if(/Mac\x20OS\x20X\x2010\.5/.test(http.oscpu)) == 579323-1.html 579323-1-ref.html # bug 623450 for WinXP and bug 627560 for OSX 10.5 +fails-if(Android) random-if(layersGPUAccelerated) == 579323-1.html 579323-1-ref.html == 579349-1.html 579349-1-ref.html == 579655-1.html 579655-1-ref.html fails-if(Android) == 579808-1.html 579808-1-ref.html fails-if(Android) random-if(layersGPUAccelerated) fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == 579985-1.html 579985-1-ref.html # bug 623452 for WinXP; this bug was only for a regression in BasicLayers anyway == 580160-1.html 580160-1-ref.html fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) HTTP(..) == 580863-1.html 580863-1-ref.html # bug 623454 fails-if(Android) random-if(layersGPUAccelerated) fails-if(/^Windows\x20NT\x205\.1/.test(http.oscpu)) == 581317-1.html 581317-1-ref.html # bug 623456 for WinXP == 581579-1.html 581579-1-ref.html @@ -1617,17 +1617,17 @@ fails-if(Android) HTTP(..) == 619511-1.h random-if(winWidget) == 621918-1.svg 621918-1-ref.svg # 1-pixel diacritic positioning discrepancy in rotated text (may depend on platform fonts) random-if(winWidget) HTTP(..) == 621918-2.svg 621918-2-ref.svg # same 1px issue as above, and HTTP(..) for filters.svg, used to mask antialiasing issues where glyphs touch == 622585-1.html 622585-1-ref.html fails-if(Android) == 625409-1.html 625409-1-ref.html == 627393-1.html about:blank == 630835-1.html about:blank == 631352-1.html 631352-1-ref.html fails-if(Android) == 632423-1.html 632423-1-ref.html -skip-if(Android) fails-if(winWidget) == 632781-verybig.html 632781-ref.html # large canvas elements are not drawn on Windows, see bug 633936 +skip-if(Android) == 632781-verybig.html 632781-ref.html == 632781-normalsize.html 632781-ref.html == 633344-1.html 633344-1-ref.html fails-if(Android) == 634232-1.html 634232-1-ref.html fails-if(Android) == 635302-1.html 635302-1-ref.html == 635373-1.html 635373-1-ref.html == 635373-2.html 635373-2-ref.html fails-if(http.platform=="X11"&&!layersGPUAccelerated) == 635373-3.html 635373-3-ref.html HTTP(..) == 635639-1.html 635639-1-ref.html
--- a/layout/reftests/canvas/reftest.list +++ b/layout/reftests/canvas/reftest.list @@ -1,9 +1,10 @@ == default-size.html default-size-ref.html +== size-1.html size-1-ref.html == image-rendering-test.html image-rendering-ref.html == image-shadow.html image-shadow-ref.html asserts-if(cocoaWidget,0-2) == size-change-1.html size-change-1-ref.html != text-ltr-left.html text-blank.html != text-ltr-right.html text-blank.html
new file mode 100644 --- /dev/null +++ b/layout/reftests/canvas/size-1-ref.html @@ -0,0 +1,9 @@ +<!DOCTYPE HTML> +<html> +<body> +<div style="background:lime; width:100px; height:30000px;"></div> +<script> +window.scrollTo(0, 100000); +</script> +</body> +</html>
new file mode 100644 --- /dev/null +++ b/layout/reftests/canvas/size-1.html @@ -0,0 +1,12 @@ +<!DOCTYPE HTML> +<html> +<body> +<canvas style="display:block" id="c" width="100" height="30000"></canvas> +<script> +var ctx = document.getElementById("c").getContext("2d"); +ctx.fillStyle = "lime"; +ctx.fillRect(0, 0, 100, 30000); +window.scrollTo(0, 100000); +</script> +</body> +</html>
--- a/layout/svg/base/src/nsSVGGeometryFrame.cpp +++ b/layout/svg/base/src/nsSVGGeometryFrame.cpp @@ -333,65 +333,65 @@ nsSVGGeometryFrame::SetupCairoStroke(gfx // See http://www.w3.org/TR/SVG11/coords.html#ObjectBoundingBox SetupFallbackOrPaintColor(aContext, GetStyleContext(), &nsStyleSVG::mStroke, opacity); return PR_TRUE; } PRUint16 -nsSVGGeometryFrame::GetHittestMask() +nsSVGGeometryFrame::GetHitTestFlags() { - PRUint16 mask = 0; + PRUint16 flags = 0; switch(GetStyleVisibility()->mPointerEvents) { case NS_STYLE_POINTER_EVENTS_NONE: break; case NS_STYLE_POINTER_EVENTS_AUTO: case NS_STYLE_POINTER_EVENTS_VISIBLEPAINTED: if (GetStyleVisibility()->IsVisible()) { if (GetStyleSVG()->mFill.mType != eStyleSVGPaintType_None) - mask |= HITTEST_MASK_FILL; + flags |= SVG_HIT_TEST_FILL; if (GetStyleSVG()->mStroke.mType != eStyleSVGPaintType_None) - mask |= HITTEST_MASK_STROKE; + flags |= SVG_HIT_TEST_STROKE; if (GetStyleSVG()->mStrokeOpacity > 0) - mask |= HITTEST_MASK_CHECK_MRECT; + flags |= SVG_HIT_TEST_CHECK_MRECT; } break; case NS_STYLE_POINTER_EVENTS_VISIBLEFILL: if (GetStyleVisibility()->IsVisible()) { - mask |= HITTEST_MASK_FILL; + flags |= SVG_HIT_TEST_FILL; } break; case NS_STYLE_POINTER_EVENTS_VISIBLESTROKE: if (GetStyleVisibility()->IsVisible()) { - mask |= HITTEST_MASK_STROKE; + flags |= SVG_HIT_TEST_STROKE; } break; case NS_STYLE_POINTER_EVENTS_VISIBLE: if (GetStyleVisibility()->IsVisible()) { - mask |= HITTEST_MASK_FILL | HITTEST_MASK_STROKE; + flags |= SVG_HIT_TEST_FILL | SVG_HIT_TEST_STROKE; } break; case NS_STYLE_POINTER_EVENTS_PAINTED: if (GetStyleSVG()->mFill.mType != eStyleSVGPaintType_None) - mask |= HITTEST_MASK_FILL; + flags |= SVG_HIT_TEST_FILL; if (GetStyleSVG()->mStroke.mType != eStyleSVGPaintType_None) - mask |= HITTEST_MASK_STROKE; + flags |= SVG_HIT_TEST_STROKE; if (GetStyleSVG()->mStrokeOpacity) - mask |= HITTEST_MASK_CHECK_MRECT; + flags |= SVG_HIT_TEST_CHECK_MRECT; break; case NS_STYLE_POINTER_EVENTS_FILL: - mask |= HITTEST_MASK_FILL; + flags |= SVG_HIT_TEST_FILL; break; case NS_STYLE_POINTER_EVENTS_STROKE: - mask |= HITTEST_MASK_STROKE; + flags |= SVG_HIT_TEST_STROKE; break; case NS_STYLE_POINTER_EVENTS_ALL: - mask |= HITTEST_MASK_FILL | HITTEST_MASK_STROKE; + flags |= SVG_HIT_TEST_FILL | SVG_HIT_TEST_STROKE; break; default: NS_ERROR("not reached"); break; } - return mask; + return flags; }
--- a/layout/svg/base/src/nsSVGGeometryFrame.h +++ b/layout/svg/base/src/nsSVGGeometryFrame.h @@ -41,19 +41,19 @@ #include "nsFrame.h" #include "gfxMatrix.h" class nsSVGPaintServerFrame; class gfxContext; typedef nsFrame nsSVGGeometryFrameBase; -#define HITTEST_MASK_FILL 0x01 -#define HITTEST_MASK_STROKE 0x02 -#define HITTEST_MASK_CHECK_MRECT 0x04 +#define SVG_HIT_TEST_FILL 0x01 +#define SVG_HIT_TEST_STROKE 0x02 +#define SVG_HIT_TEST_CHECK_MRECT 0x04 /* nsSVGGeometryFrame is a base class for SVG objects that directly * have geometry (circle, ellipse, line, polyline, polygon, path, and * glyph frames). It knows how to convert the style information into * cairo context information and stores the fill/stroke paint * servers. */ class nsSVGGeometryFrame : public nsSVGGeometryFrameBase @@ -101,17 +101,24 @@ public: * Set up a cairo context for stroking a path * @return PR_FALSE to skip rendering */ PRBool SetupCairoStroke(gfxContext *aContext); protected: nsSVGPaintServerFrame *GetPaintServer(const nsStyleSVGPaint *aPaint, const FramePropertyDescriptor *aProperty); - virtual PRUint16 GetHittestMask(); + + /** + * This function returns a set of bit flags indicating which parts of the + * element (fill, stroke, bounds) should intercept pointer events. It takes + * into account the type of element and the value of the 'pointer-events' + * property on the element. + */ + virtual PRUint16 GetHitTestFlags(); private: nsresult GetStrokeDashArray(double **arr, PRUint32 *count); float GetStrokeDashoffset(); /** * Returns the given 'fill-opacity' or 'stroke-opacity' value multiplied by * the value of the 'opacity' property if it's possible to avoid the expense
--- a/layout/svg/base/src/nsSVGGlyphFrame.cpp +++ b/layout/svg/base/src/nsSVGGlyphFrame.cpp @@ -410,50 +410,50 @@ nsSVGGlyphFrame::PaintSVG(nsSVGRenderSta gfx->Restore(); return NS_OK; } NS_IMETHODIMP_(nsIFrame*) nsSVGGlyphFrame::GetFrameForPoint(const nsPoint &aPoint) { - PRUint16 mask = GetHittestMask(); - if (!mask) { + PRUint16 hitTestFlags = GetHitTestFlags(); + if (!hitTestFlags) { return nsnull; } nsRefPtr<gfxContext> context = MakeTmpCtx(); SetupGlobalTransform(context); CharacterIterator iter(this, PR_TRUE); iter.SetInitialMatrix(context); // The SVG 1.1 spec says that text is hit tested against the character cells // of the text, not the fill and stroke. See the section starting "For text // elements..." here: // // http://www.w3.org/TR/SVG11/interact.html#PointerEventsProperty // - // Currently we just test the character cells if GetHittestMask says we're + // Currently we just test the character cells if GetHitTestFlags says we're // supposed to be testing either the fill OR the stroke: PRInt32 i; while ((i = iter.NextCluster()) >= 0) { gfxTextRun::Metrics metrics = mTextRun->MeasureText(i, iter.ClusterLength(), gfxFont::LOOSE_INK_EXTENTS, nsnull, nsnull); iter.SetupForMetrics(context); context->Rectangle(metrics.mBoundingBox); } gfxPoint userSpacePoint = context->DeviceToUser(gfxPoint(PresContext()->AppUnitsToGfxUnits(aPoint.x), PresContext()->AppUnitsToGfxUnits(aPoint.y))); PRBool isHit = PR_FALSE; - if (mask & HITTEST_MASK_FILL || mask & HITTEST_MASK_STROKE) { + if (hitTestFlags & SVG_HIT_TEST_FILL || hitTestFlags & SVG_HIT_TEST_STROKE) { isHit = context->PointInFill(userSpacePoint); } // If isHit is false, we may also want to fill and stroke the text to check // whether the pointer is over an area of fill or stroke that lies outside // the character cells. (With a thick stroke, or with fonts like Zapfino, such // areas may be very significant.) This is what Opera appears to do, but // currently we do not.
--- a/layout/svg/base/src/nsSVGImageFrame.cpp +++ b/layout/svg/base/src/nsSVGImageFrame.cpp @@ -86,17 +86,17 @@ public: NS_DECL_FRAMEARENA_HELPERS // nsISVGChildFrame interface: NS_IMETHOD PaintSVG(nsSVGRenderState *aContext, const nsIntRect *aDirtyRect); NS_IMETHOD_(nsIFrame*) GetFrameForPoint(const nsPoint &aPoint); // nsSVGPathGeometryFrame methods: NS_IMETHOD UpdateCoveredRegion(); - virtual PRUint16 GetHittestMask(); + virtual PRUint16 GetHitTestFlags(); // nsIFrame interface: NS_IMETHOD AttributeChanged(PRInt32 aNameSpaceID, nsIAtom* aAttribute, PRInt32 aModType); NS_IMETHOD Init(nsIContent* aContent, nsIFrame* aParent, nsIFrame* aPrevInFlow); @@ -455,52 +455,52 @@ nsSVGImageFrame::UpdateCoveredRegion() if (!extent.IsEmpty()) { mRect = nsSVGUtils::ToAppPixelRect(PresContext(), extent); } return NS_OK; } PRUint16 -nsSVGImageFrame::GetHittestMask() +nsSVGImageFrame::GetHitTestFlags() { - PRUint16 mask = 0; + PRUint16 flags = 0; switch(GetStyleVisibility()->mPointerEvents) { case NS_STYLE_POINTER_EVENTS_NONE: break; case NS_STYLE_POINTER_EVENTS_VISIBLEPAINTED: case NS_STYLE_POINTER_EVENTS_AUTO: if (GetStyleVisibility()->IsVisible()) { /* XXX: should check pixel transparency */ - mask |= HITTEST_MASK_FILL; + flags |= SVG_HIT_TEST_FILL; } break; case NS_STYLE_POINTER_EVENTS_VISIBLEFILL: case NS_STYLE_POINTER_EVENTS_VISIBLESTROKE: case NS_STYLE_POINTER_EVENTS_VISIBLE: if (GetStyleVisibility()->IsVisible()) { - mask |= HITTEST_MASK_FILL; + flags |= SVG_HIT_TEST_FILL; } break; case NS_STYLE_POINTER_EVENTS_PAINTED: /* XXX: should check pixel transparency */ - mask |= HITTEST_MASK_FILL; + flags |= SVG_HIT_TEST_FILL; break; case NS_STYLE_POINTER_EVENTS_FILL: case NS_STYLE_POINTER_EVENTS_STROKE: case NS_STYLE_POINTER_EVENTS_ALL: - mask |= HITTEST_MASK_FILL; + flags |= SVG_HIT_TEST_FILL; break; default: NS_ERROR("not reached"); break; } - return mask; + return flags; } //---------------------------------------------------------------------- // nsSVGImageListener implementation NS_IMPL_ISUPPORTS2(nsSVGImageListener, imgIDecoderObserver, imgIContainerObserver)
--- a/layout/svg/base/src/nsSVGPathGeometryFrame.cpp +++ b/layout/svg/base/src/nsSVGPathGeometryFrame.cpp @@ -148,24 +148,24 @@ nsSVGPathGeometryFrame::PaintSVG(nsSVGRe } return NS_OK; } NS_IMETHODIMP_(nsIFrame*) nsSVGPathGeometryFrame::GetFrameForPoint(const nsPoint &aPoint) { - PRUint16 fillRule, mask; + PRUint16 fillRule, hitTestFlags; if (GetStateBits() & NS_STATE_SVG_CLIPPATH_CHILD) { - mask = HITTEST_MASK_FILL; + hitTestFlags = SVG_HIT_TEST_FILL; fillRule = GetClipRule(); } else { - mask = GetHittestMask(); - if (!mask || ((mask & HITTEST_MASK_CHECK_MRECT) && - !mRect.Contains(aPoint))) + hitTestFlags = GetHitTestFlags(); + if (!hitTestFlags || ((hitTestFlags & SVG_HIT_TEST_CHECK_MRECT) && + !mRect.Contains(aPoint))) return nsnull; fillRule = GetStyleSVG()->mFillRule; } PRBool isHit = PR_FALSE; nsRefPtr<gfxContext> context = new gfxContext(gfxPlatform::GetPlatform()->ScreenReferenceSurface()); @@ -175,19 +175,19 @@ nsSVGPathGeometryFrame::GetFrameForPoint context->DeviceToUser(gfxPoint(PresContext()->AppUnitsToGfxUnits(aPoint.x), PresContext()->AppUnitsToGfxUnits(aPoint.y))); if (fillRule == NS_STYLE_FILL_RULE_EVENODD) context->SetFillRule(gfxContext::FILL_RULE_EVEN_ODD); else context->SetFillRule(gfxContext::FILL_RULE_WINDING); - if (mask & HITTEST_MASK_FILL) + if (hitTestFlags & SVG_HIT_TEST_FILL) isHit = context->PointInFill(userSpacePoint); - if (!isHit && (mask & HITTEST_MASK_STROKE)) { + if (!isHit && (hitTestFlags & SVG_HIT_TEST_STROKE)) { SetupCairoStrokeHitGeometry(context); isHit = context->PointInStroke(userSpacePoint); } if (isHit && nsSVGUtils::HitTestClip(this, aPoint)) return this; return nsnull;
--- a/testing/mochitest/redirect.js +++ b/testing/mochitest/redirect.js @@ -35,20 +35,11 @@ * and other provisions required by the GPL or the LGPL. If you do not delete * the provisions above, a recipient may use your version of this file under * the terms of any one of the MPL, the GPL or the LGPL. * * ***** END LICENSE BLOCK ***** */ function redirect(aURL) { - netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect"); - - const Cc = Components.classes; - const Ci = Components.interfaces; - - // Can't just set window.location because of security restrictions - // that don't care about our UniversalXPConnectness - var webNav = window.QueryInterface(Ci.nsIInterfaceRequestor) - .getInterface(Ci.nsIWebNavigation); - webNav.loadURI(aURL + location.search, + SpecialPowers.loadURI(window, aURL + location.search, null, null, null, null); }
--- a/testing/mochitest/runtests.py +++ b/testing/mochitest/runtests.py @@ -495,22 +495,17 @@ class Mochitest(object): self.automation.log.info("INFO | runtests.py | Done installing extension.") def buildProfile(self, options): """ create the profile and add optional chrome bits and files if requested """ self.automation.initializeProfile(options.profilePath, options.extraPrefs, useServerLocations = True) manifest = self.addChromeToProfile(options) self.copyExtraFilesToProfile(options) - # We only need special powers in non-chrome harnesses - if (not options.browserChrome and - not options.chrome and - not options.a11y): - self.installSpecialPowersExtension(options) - + self.installSpecialPowersExtension(options) self.installExtensionsToProfile(options) return manifest def buildBrowserEnv(self, options): """ build the environment variables for the specific test and operating system """ browserEnv = self.automation.environment(xrePath = options.xrePath) # These variables are necessary for correct application startup; change
--- a/testing/mochitest/specialpowers/content/specialpowers.js +++ b/testing/mochitest/specialpowers/content/specialpowers.js @@ -203,16 +203,22 @@ SpecialPowers.prototype = { this._getMUDV(window).textZoom = zoom; }, createSystemXHR: function() { return Cc["@mozilla.org/xmlextras/xmlhttprequest;1"] .createInstance(Ci.nsIXMLHttpRequest); }, + loadURI: function(window, uri, referrer, charset, x, y) { + var webNav = window.QueryInterface(Ci.nsIInterfaceRequestor) + .getInterface(Ci.nsIWebNavigation); + webNav.loadURI(uri, referrer, charset, x, y); + }, + gc: function() { this.DOMWindowUtils.garbageCollect(); }, forceGC: function() { Components.utils.forceGC(); }, @@ -337,22 +343,19 @@ function attachSpecialPowersToWindow(aWi function SpecialPowersManager() { addEventListener("DOMWindowCreated", this, false); } SpecialPowersManager.prototype = { handleEvent: function handleEvent(aEvent) { var window = aEvent.target.defaultView; - // Need to make sure we are called on what we care about - - // content windows. DOMWindowCreated is called on *all* HTMLDocuments, - // some of which belong to chrome windows or other special content. - // + // only add SpecialPowers to data pages, not about:* var uri = window.document.documentURIObject; - if (uri.scheme === "chrome" || uri.spec.split(":")[0] == "about") { + if (uri.spec.split(":")[0] == "about") { return; } attachSpecialPowersToWindow(window); } }; var specialpowersmanager = new SpecialPowersManager();
--- a/testing/mochitest/tests/SimpleTest/SimpleTest.js +++ b/testing/mochitest/tests/SimpleTest/SimpleTest.js @@ -104,17 +104,17 @@ SimpleTest.todo = function(condition, na var test = {'result': !!condition, 'name': name, 'diag': diag, todo: true}; SimpleTest._logResult(test, "TEST-UNEXPECTED-PASS", "TEST-KNOWN-FAIL"); SimpleTest._tests.push(test); }; SimpleTest._getCurrentTestURL = function() { return parentRunner && parentRunner.currentTestURL || typeof gTestPath == "string" && gTestPath || - ""; + "unknown test url"; }; SimpleTest._logResult = function(test, passString, failString) { var isError = !test.result == !test.todo; var resultString = test.result ? passString : failString; var url = SimpleTest._getCurrentTestURL(); var diagnostic = test.name + (test.diag ? " - " + test.diag : ""); var msg = [resultString, url, diagnostic].join(" | ");
--- a/testing/mochitest/tests/SimpleTest/TestRunner.js +++ b/testing/mochitest/tests/SimpleTest/TestRunner.js @@ -37,23 +37,17 @@ var TestRunner = {}; TestRunner.logEnabled = false; TestRunner._currentTest = 0; TestRunner.currentTestURL = ""; TestRunner._urls = []; TestRunner.timeout = 5 * 60 * 1000; // 5 minutes. TestRunner.maxTimeouts = 4; // halt testing after too many timeouts -// running in e10s build and need to use IPC? -if (typeof SpecialPowers != 'undefined') { - TestRunner.ipcMode = SpecialPowers.hasContentProcesses(); -} else { - TestRunner.ipcMode = false; -} - +TestRunner.ipcMode = SpecialPowers.hasContentProcesses(); TestRunner._expectingProcessCrash = false; /** * Make sure the tests don't hang indefinitely. **/ TestRunner._numTimeouts = 0; TestRunner._currentTestStartTime = new Date().valueOf(); TestRunner._timeoutFactor = 1; @@ -165,19 +159,17 @@ TestRunner._makeIframe = function (url, * TestRunner entry point. * * The arguments are the URLs of the test to be ran. * **/ TestRunner.runTests = function (/*url...*/) { TestRunner.log("SimpleTest START"); - if (typeof SpecialPowers != "undefined") { - SpecialPowers.registerProcessCrashObservers(); - } + SpecialPowers.registerProcessCrashObservers(); TestRunner._urls = flattenArguments(arguments); $('testframe').src=""; TestRunner._checkForHangs(); window.focus(); $('testframe').focus(); TestRunner.runNextTest(); }; @@ -228,20 +220,16 @@ TestRunner.runNextTest = function() { if (TestRunner.onComplete) { TestRunner.onComplete(); } } }; TestRunner.expectChildProcessCrash = function() { - if (typeof SpecialPowers == "undefined") { - throw "TestRunner.expectChildProcessCrash must only be called from plain mochitests."; - } - TestRunner._expectingProcessCrash = true; }; /** * This stub is called by SimpleTest when a test is finished. **/ TestRunner.testFinished = function(tests) { function cleanUpCrashDumpFiles() { @@ -273,24 +261,20 @@ TestRunner.testFinished = function(tests TestRunner._urls[TestRunner._currentTest] + " | finished in " + runtime + "ms"); TestRunner.updateUI(tests); TestRunner._currentTest++; TestRunner.runNextTest(); } - if (typeof SpecialPowers != 'undefined') { - SpecialPowers.executeAfterFlushingMessageQueue(function() { - cleanUpCrashDumpFiles(); - runNextTest(); - }); - } else { + SpecialPowers.executeAfterFlushingMessageQueue(function() { + cleanUpCrashDumpFiles(); runNextTest(); - } + }); }; /** * Get the results. */ TestRunner.countResults = function(tests) { var nOK = 0; var nNotOK = 0;
--- a/widget/src/cocoa/nsNativeThemeCocoa.mm +++ b/widget/src/cocoa/nsNativeThemeCocoa.mm @@ -275,16 +275,25 @@ static int EnumSizeForCocoaSize(NSContro if (cocoaControlSize == NSMiniControlSize) return miniControlSize; else if (cocoaControlSize == NSSmallControlSize) return smallControlSize; else return regularControlSize; } +static NSControlSize CocoaSizeForEnum(PRInt32 enumControlSize) { + if (enumControlSize == miniControlSize) + return NSMiniControlSize; + else if (enumControlSize == smallControlSize) + return NSSmallControlSize; + else + return NSRegularControlSize; +} + static void InflateControlRect(NSRect* rect, NSControlSize cocoaControlSize, const float marginSet[][3][4]) { if (!marginSet) return; static int osIndex = leopardOS; int controlSize = EnumSizeForCocoaSize(cocoaControlSize); const float* buttonMargins = marginSet[osIndex][controlSize]; @@ -552,16 +561,59 @@ struct CellRenderSettings { // A three-dimensional array, // with the first dimension being the OS version (only Leopard for the moment), // the second being the control size (mini, small, regular), and the third // being the 4 margin values (left, top, right, bottom). float margins[1][3][4]; }; /* + * This is a helper method that returns the required NSControlSize given a size + * and the size of the three controls plus a tolerance. + * size - The width or the height of the element to draw. + * sizes - An array with the all the width/height of the element for its + * different sizes. + * tolerance - The tolerance as passed to DrawCellWithSnapping. + * NOTE: returns NSRegularControlSize if all values in 'sizes' are zero. + */ +static NSControlSize FindControlSize(CGFloat size, CGFloat* sizes, CGFloat tolerance) +{ + for (PRUint32 i = miniControlSize; i <= regularControlSize; ++i) { + if (sizes[i] == 0) { + continue; + } + + CGFloat next = 0; + // Find next value. + for (PRUint32 j = i+1; j <= regularControlSize; ++j) { + if (sizes[j] != 0) { + next = sizes[j]; + break; + } + } + + // If it's the latest value, we pick it. + if (next == 0) { + return CocoaSizeForEnum(i); + } + + if (size <= sizes[i] + tolerance && size < next) { + return CocoaSizeForEnum(i); + } + } + + // If we are here, that means sizes[] was an array with only empty values + // or the algorithm above is wrong. + // The former can happen but the later would be wrong. + NS_ASSERTION(sizes[0] == 0 && sizes[1] == 0 && sizes[2] == 0, + "We found no control! We shouldn't be there!"); + return CocoaSizeForEnum(regularControlSize); +} + +/* * Draw the given NSCell into the given cgContext with a nice control size. * * This function is similar to DrawCellWithScaling, but it decides what * control size to use based on the destRect's size. * Scaling is only applied when the difference between the destRect's size * and the next smaller natural size is greater than snapTolerance. Otherwise * it snaps to the next smaller control size without scaling because unscaled * controls look nicer. @@ -578,28 +630,22 @@ static void DrawCellWithSnapping(NSCell NS_OBJC_BEGIN_TRY_ABORT_BLOCK; const float rectWidth = destRect.size.width, rectHeight = destRect.size.height; const NSSize *sizes = settings.naturalSizes; const NSSize miniSize = sizes[EnumSizeForCocoaSize(NSMiniControlSize)]; const NSSize smallSize = sizes[EnumSizeForCocoaSize(NSSmallControlSize)]; const NSSize regularSize = sizes[EnumSizeForCocoaSize(NSRegularControlSize)]; - NSControlSize controlSizeX = NSRegularControlSize, controlSizeY = NSRegularControlSize; HIRect drawRect = destRect; - if (rectWidth <= miniSize.width + snapTolerance && rectWidth < smallSize.width) - controlSizeX = NSMiniControlSize; - else if(rectWidth <= smallSize.width + snapTolerance && rectWidth < regularSize.width) - controlSizeX = NSSmallControlSize; - - if (rectHeight <= miniSize.height + snapTolerance && rectHeight < smallSize.height) - controlSizeY = NSMiniControlSize; - else if(rectHeight <= smallSize.height + snapTolerance && rectHeight < regularSize.height) - controlSizeY = NSSmallControlSize; + CGFloat controlWidths[3] = { miniSize.width, smallSize.width, regularSize.width }; + NSControlSize controlSizeX = FindControlSize(rectWidth, controlWidths, snapTolerance); + CGFloat controlHeights[3] = { miniSize.height, smallSize.height, regularSize.height }; + NSControlSize controlSizeY = FindControlSize(rectHeight, controlHeights, snapTolerance); NSControlSize controlSize = NSRegularControlSize; int sizeIndex = 0; // At some sizes, don't scale but snap. const NSControlSize smallerControlSize = EnumSizeForCocoaSize(controlSizeX) < EnumSizeForCocoaSize(controlSizeY) ? controlSizeX : controlSizeY;