From 5c3b489ec9365272c317d6f8695342ea2584e18e Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Tue, 17 Oct 2017 12:06:07 +1000 Subject: [PATCH] Switch box-shadows to use brush masks (and add basic brush prim). This introduces a new brush primitive type. Right now, this is extremely basic and doesn't provide much new functionality. As more items are ported to use it, the functionality of the brush shader type will expand (mostly the VS parts). The major change in this patch is to remove the old box-shadow shader and switch box shadows to be drawn via a brush mask + gaussian blur approach. This *is* a performance regression for small / simple box shadows compared to previously, but this is only temporary. The goal of this (large) patch is to switch over to a different box-shadow technique and address correctness issues first, and then we can apply a number of optimizations on top of that. It *is* a performance win on very large box shadows, which was the performance worst case for the previous box shadow shader. The changes included: * Extend blur shader to support both A8 and RGBA8 blurs. * Basic brush shader and primitive code. * Brush mask shader. * Remove old box shadow shader. * Move some common clip functions to ellipse.glsl. * Extend cache image shader to support both A8 and RGBA8 sources. * Support clip masks in cache image shader. * Remove box shadow primitive type. * Add reftests for spread, offset, blur, border radius box-shadow variations. * Support adjusting the border radii of box shadows as defined by spec. Next steps: * Extend the mask shader to support arbitrary border radii per corner. * Apply various optimizations to the brush and blur code. --- webrender/res/brush.glsl | 81 +++++ webrender/res/brush_mask.glsl | 61 ++++ webrender/res/cs_blur.glsl | 25 +- webrender/res/cs_box_shadow.glsl | 188 ----------- webrender/res/cs_clip_rectangle.glsl | 74 +--- webrender/res/cs_text_run.glsl | 12 +- webrender/res/ellipse.glsl | 51 +++ webrender/res/prim_shared.glsl | 23 +- webrender/res/ps_box_shadow.glsl | 73 ---- webrender/res/ps_cache_image.glsl | 35 +- webrender/res/ps_line.glsl | 10 +- webrender/src/frame_builder.rs | 318 ++++++++---------- webrender/src/gpu_types.rs | 43 ++- webrender/src/picture.rs | 8 +- webrender/src/prim_store.rs | 163 +++------ webrender/src/render_task.rs | 113 +++++-- webrender/src/renderer.rs | 221 ++++++------ webrender/src/tiling.rs | 104 +++--- webrender/tests/angle_shader_validation.rs | 15 +- webrender_api/src/display_item.rs | 5 +- .../boxshadow/box-shadow-suite-blur.png | Bin 0 -> 36807 bytes .../boxshadow/box-shadow-suite-blur.yaml | 154 +++++++++ .../boxshadow/box-shadow-suite-no-blur.png | Bin 0 -> 17063 bytes .../boxshadow/box-shadow-suite-no-blur.yaml | 134 ++++++++ .../boxshadow/boxshadow-spread-only-ref.png | Bin 29606 -> 18380 bytes .../boxshadow/inset-border-radius.png | Bin 0 -> 2391 bytes .../boxshadow/inset-large-offset-ref.png | Bin 3118 -> 2163 bytes wrench/reftests/boxshadow/reftest.list | 6 +- wrench/reftests/boxshadow/rounding-ref.yaml | 18 + wrench/reftests/boxshadow/rounding.yaml | 15 + wrench/reftests/filters/filter-blur.png | Bin 52906 -> 46379 bytes wrench/reftests/text/decorations-suite.png | Bin 39560 -> 30464 bytes wrench/reftests/text/reftest.list | 2 +- wrench/src/yaml_frame_reader.rs | 3 +- wrench/src/yaml_frame_writer.rs | 1 - 35 files changed, 1103 insertions(+), 853 deletions(-) create mode 100644 webrender/res/brush.glsl create mode 100644 webrender/res/brush_mask.glsl delete mode 100644 webrender/res/cs_box_shadow.glsl delete mode 100644 webrender/res/ps_box_shadow.glsl create mode 100644 wrench/reftests/boxshadow/box-shadow-suite-blur.png create mode 100644 wrench/reftests/boxshadow/box-shadow-suite-blur.yaml create mode 100644 wrench/reftests/boxshadow/box-shadow-suite-no-blur.png create mode 100644 wrench/reftests/boxshadow/box-shadow-suite-no-blur.yaml create mode 100644 wrench/reftests/boxshadow/inset-border-radius.png create mode 100644 wrench/reftests/boxshadow/rounding-ref.yaml create mode 100644 wrench/reftests/boxshadow/rounding.yaml diff --git a/webrender/res/brush.glsl b/webrender/res/brush.glsl new file mode 100644 index 0000000000..da1fb33826 --- /dev/null +++ b/webrender/res/brush.glsl @@ -0,0 +1,81 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +varying vec2 vLocalPos; +flat varying vec4 vLocalRect; + +#ifdef WR_VERTEX_SHADER + +struct BrushInstance { + int picture_address; + int prim_address; +}; + +BrushInstance load_brush() { + BrushInstance bi; + + bi.picture_address = aData0.x; + bi.prim_address = aData0.y; + + return bi; +} + +/* + The dynamic picture that this brush exists on. Right now, it + contains minimal information. In the future, it will describe + the transform mode of primitives on this picture, among other things. + */ +struct PictureTask { + RectWithSize target_rect; +}; + +PictureTask fetch_picture_task(int index) { + ivec2 uv = get_fetch_uv(index, VECS_PER_RENDER_TASK); + + vec4 target_rect = TEXEL_FETCH(sRenderTasks, uv, 0, ivec2(0, 0)); + + PictureTask task = PictureTask(RectWithSize(target_rect.xy, target_rect.zw)); + + return task; +} + +void main(void) { + // Load the brush instance from vertex attributes. + BrushInstance brush = load_brush(); + + // Fetch the dynamic picture that we are drawing on. + PictureTask pic_task = fetch_picture_task(brush.picture_address); + + // Load the geometry for this brush. For now, this is simply the + // local rect of the primitive. In the future, this will support + // loading segment rects, and other rect formats (glyphs). + PrimitiveGeometry geom = fetch_primitive_geometry(brush.prim_address); + + // Write the (p0,p1) form of the primitive rect and the local position + // of this vertex. Specific brush shaders can use this information to + // interpolate texture coordinates etc. + vLocalRect = vec4(geom.local_rect.p0, geom.local_rect.p0 + geom.local_rect.size); + + // Right now - pictures only support local positions. In the future, this + // will be expanded to support transform picture types (the common kind). + vec2 pos = pic_task.target_rect.p0 + aPosition.xy * pic_task.target_rect.size; + vLocalPos = aPosition.xy * pic_task.target_rect.size / uDevicePixelRatio; + + // Run the specific brush VS code to write interpolators. + brush_vs(brush.prim_address, vLocalRect); + + // Write the final position transformed by the orthographic device-pixel projection. + gl_Position = uTransform * vec4(pos, 0.0, 1.0); +} +#endif + +#ifdef WR_FRAGMENT_SHADER +void main(void) { + // Run the specific brush FS code to output the color. + vec4 color = brush_fs(vLocalPos, vLocalRect); + + // TODO(gw): Handle pre-multiply common code here as required. + oFragColor = color; +} +#endif diff --git a/webrender/res/brush_mask.glsl b/webrender/res/brush_mask.glsl new file mode 100644 index 0000000000..317345b113 --- /dev/null +++ b/webrender/res/brush_mask.glsl @@ -0,0 +1,61 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include shared,prim_shared,ellipse + +flat varying float vClipMode; +flat varying vec4 vClipCenter_Radius_TL; +flat varying vec4 vClipCenter_Radius_TR; +flat varying vec4 vClipCenter_Radius_BR; +flat varying vec4 vClipCenter_Radius_BL; + +#ifdef WR_VERTEX_SHADER + +struct BrushPrimitive { + float clip_mode; + float radius; +}; + +BrushPrimitive fetch_brush_primitive(int address) { + vec4 data = fetch_from_resource_cache_1(address); + return BrushPrimitive(data.x, data.y); +} + +void brush_vs(int prim_address, vec4 prim_rect) { + // Load the specific primitive. + BrushPrimitive prim = fetch_brush_primitive(prim_address + 2); + + // Write clip parameters + vClipMode = prim.clip_mode; + + vec2 r = vec2(prim.radius); + vClipCenter_Radius_TL = vec4(prim_rect.xy + vec2(r.x, r.y), r); + vClipCenter_Radius_TR = vec4(prim_rect.zy + vec2(-r.x, r.y), r); + vClipCenter_Radius_BR = vec4(prim_rect.zw + vec2(-r.x, -r.y), r); + vClipCenter_Radius_BL = vec4(prim_rect.xw + vec2(r.x, -r.y), r); +} +#endif + +#ifdef WR_FRAGMENT_SHADER +vec4 brush_fs(vec2 local_pos, vec4 local_rect) { + // TODO(gw): The mask code below is super-inefficient. Once we + // start using primitive segments in brush shaders, this can + // be made much faster. + float d = 0.0; + // Check if in valid clip region. + if (local_pos.x >= local_rect.x && local_pos.x < local_rect.z && + local_pos.y >= local_rect.y && local_pos.y < local_rect.w) { + // Apply ellipse clip on each corner. + d = rounded_rect(local_pos, + vClipCenter_Radius_TL, + vClipCenter_Radius_TR, + vClipCenter_Radius_BR, + vClipCenter_Radius_BL); + } + + return vec4(mix(d, 1.0 - d, vClipMode)); +} +#endif + +#include brush diff --git a/webrender/res/cs_blur.glsl b/webrender/res/cs_blur.glsl index 10f4e18de0..7c67b2e11a 100644 --- a/webrender/res/cs_blur.glsl +++ b/webrender/res/cs_blur.glsl @@ -31,7 +31,11 @@ void main(void) { local_rect.xy + local_rect.zw, aPosition.xy); +#if defined WR_FEATURE_COLOR vec2 texture_size = vec2(textureSize(sCacheRGBA8, 0).xy); +#else + vec2 texture_size = vec2(textureSize(sCacheA8, 0).xy); +#endif vUv.z = src_task.data1.x; vBlurRadius = 3 * int(task.data1.y); vSigma = task.data1.y; @@ -58,6 +62,15 @@ void main(void) { #endif #ifdef WR_FRAGMENT_SHADER + +#if defined WR_FEATURE_COLOR +#define SAMPLE_TYPE vec4 +#define SAMPLE_TEXTURE(uv) texture(sCacheRGBA8, uv) +#else +#define SAMPLE_TYPE float +#define SAMPLE_TEXTURE(uv) texture(sCacheA8, uv).r +#endif + // TODO(gw): Write a fast path blur that handles smaller blur radii // with a offset / weight uniform table and a constant // loop iteration count! @@ -66,13 +79,13 @@ void main(void) { // the number of texture fetches needed for a gaussian blur. void main(void) { - vec4 original_color = texture(sCacheRGBA8, vUv); + SAMPLE_TYPE original_color = SAMPLE_TEXTURE(vUv); // TODO(gw): The gauss function gets NaNs when blur radius // is zero. In the future, detect this earlier // and skip the blur passes completely. if (vBlurRadius == 0) { - oFragColor = original_color; + oFragColor = vec4(original_color); return; } @@ -83,7 +96,7 @@ void main(void) { gauss_coefficient.z = gauss_coefficient.y * gauss_coefficient.y; float gauss_coefficient_sum = 0.0; - vec4 avg_color = original_color * gauss_coefficient.x; + SAMPLE_TYPE avg_color = original_color * gauss_coefficient.x; gauss_coefficient_sum += gauss_coefficient.x; gauss_coefficient.xy *= gauss_coefficient.yz; @@ -91,15 +104,15 @@ void main(void) { vec2 offset = vOffsetScale * float(i); vec2 st0 = clamp(vUv.xy - offset, vUvRect.xy, vUvRect.zw); - avg_color += texture(sCacheRGBA8, vec3(st0, vUv.z)) * gauss_coefficient.x; + avg_color += SAMPLE_TEXTURE(vec3(st0, vUv.z)) * gauss_coefficient.x; vec2 st1 = clamp(vUv.xy + offset, vUvRect.xy, vUvRect.zw); - avg_color += texture(sCacheRGBA8, vec3(st1, vUv.z)) * gauss_coefficient.x; + avg_color += SAMPLE_TEXTURE(vec3(st1, vUv.z)) * gauss_coefficient.x; gauss_coefficient_sum += 2.0 * gauss_coefficient.x; gauss_coefficient.xy *= gauss_coefficient.yz; } - oFragColor = avg_color / gauss_coefficient_sum; + oFragColor = vec4(avg_color) / gauss_coefficient_sum; } #endif diff --git a/webrender/res/cs_box_shadow.glsl b/webrender/res/cs_box_shadow.glsl deleted file mode 100644 index ee458dce48..0000000000 --- a/webrender/res/cs_box_shadow.glsl +++ /dev/null @@ -1,188 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include shared,prim_shared - -varying vec2 vPos; -flat varying vec2 vBorderRadii; -flat varying float vBlurRadius; -flat varying vec4 vBoxShadowRect; -flat varying float vInverted; - -#ifdef WR_VERTEX_SHADER -in ivec2 aPrimAddress; -in int aTaskIndex; - -void main(void) { - RenderTaskData task = fetch_render_task(aTaskIndex); - BoxShadow bs = fetch_boxshadow_direct(ivec2(aPrimAddress.x + VECS_PER_PRIM_HEADER, aPrimAddress.y)); - - vec2 p0 = task.data0.xy; - vec2 p1 = p0 + task.data0.zw; - - vec2 pos = mix(p0, p1, aPosition.xy); - - vBorderRadii = bs.border_radius_edge_size_blur_radius_inverted.xx; - vBlurRadius = bs.border_radius_edge_size_blur_radius_inverted.z; - vInverted = bs.border_radius_edge_size_blur_radius_inverted.w; - vBoxShadowRect = vec4(bs.bs_rect.xy, bs.bs_rect.xy + bs.bs_rect.zw); - - // The fragment shader expects logical units, beginning at where the - // blur radius begins. - // The first path of the equation gets the virtual position in - // logical pixels within the patch rectangle (accounting for - // bilinear offset). Then we add the start position of the - // box shadow rect and subtract the blur radius to get the - // virtual coordinates that the FS expects. - vPos = (pos - 1.0 - p0) / uDevicePixelRatio + bs.bs_rect.xy - vec2(2.0 * vBlurRadius); - - gl_Position = uTransform * vec4(pos, 0.0, 1.0); -} -#endif - -#ifdef WR_FRAGMENT_SHADER -// See http://asciimath.org to render the equations here. - -// The Gaussian function used for blurring: -// -// G_sigma(x) = 1/sqrt(2 pi sigma^2) e^(-x^2/(2 sigma^2)) -float gauss(float x, float sigma) { - float sigmaPow2 = sigma * sigma; - return 1.0 / sqrt(6.283185307179586 * sigmaPow2) * exp(-(x * x) / (2.0 * sigmaPow2)); -} - -// An approximation of the error function, which is related to the integral of the Gaussian -// function: -// -// "erf"(x) = 2/sqrt(pi) int_0^x e^(-t^2) dt -// ~~ 1 - 1 / (1 + a_1 x + a_2 x^2 + a_3 x^3 + a_4 x^4)^4 -// -// where: -// -// a_1 = 0.278393, a_2 = 0.230389, a_3 = 0.000972, a_4 = 0.078108 -// -// This approximation is accurate to `5 xx 10^-4`, more than accurate enough for our purposes. -// -// See: https://en.wikipedia.org/wiki/Error_function#Approximation_with_elementary_functions -float erf(float x) { - bool negative = x < 0.0; - if (negative) - x = -x; - float x2 = x * x; - float x3 = x2 * x; - float x4 = x2 * x2; - float denom = 1.0 + 0.278393 * x + 0.230389 * x2 + 0.000972 * x3 + 0.078108 * x4; - float result = 1.0 - 1.0 / (denom * denom * denom * denom); - return negative ? -result : result; -} - -// A useful helper for calculating integrals of the Gaussian function via the error function: -// -// "erf"_sigma(x) = 2 int 1/sqrt(2 pi sigma^2) e^(-x^2/(2 sigma^2)) dx -// = "erf"(x/(sigma sqrt(2))) -float erfSigma(float x, float sigma) { - return erf(x / (sigma * 1.4142135623730951)); -} - -// Returns the blurred color value from the box itself (not counting any rounded corners). `p_0` is -// the vector distance to the top left corner of the box; `p_1` is the vector distance to its -// bottom right corner. -// -// "colorFromRect"_sigma(p_0, p_1) -// = int_{p_{0_y}}^{p_{1_y}} int_{p_{1_x}}^{p_{0_x}} G_sigma(y) G_sigma(x) dx dy -// = 1/4 ("erf"_sigma(p_{1_x}) - "erf"_sigma(p_{0_x})) -// ("erf"_sigma(p_{1_y}) - "erf"_sigma(p_{0_y})) -float colorFromRect(vec2 p0, vec2 p1, float sigma) { - return (erfSigma(p1.x, sigma) - erfSigma(p0.x, sigma)) * - (erfSigma(p1.y, sigma) - erfSigma(p0.y, sigma)) / 4.0; -} - -// Returns the `x` coordinate on the ellipse with the given radii for the given `y` coordinate: -// -// "ellipsePoint"(y, y_0, a, b) = a sqrt(1 - ((y - y_0) / b)^2) -float ellipsePoint(float y, float y0, vec2 radii) { - float bStep = (y - y0) / radii.y; - return radii.x * sqrt(1.0 - bStep * bStep); -} - -// A helper function to compute the value that needs to be subtracted to accommodate the border -// corners. -// -// "colorCutout"_sigma(x_{0_l}, x_{0_r}, y_0, y_{min}, y_{max}, a, b) -// = int_{y_{min}}^{y_{max}} -// int_{x_{0_r} + "ellipsePoint"(y, y_0, a, b)}^{x_{0_r} + a} G_sigma(y) G_sigma(x) dx -// + int_{x_{0_l} - a}^{x_{0_l} - "ellipsePoint"(y, y_0, a, b)} G_sigma(y) G_sigma(x) -// dx dy -// = int_{y_{min}}^{y_{max}} 1/2 G_sigma(y) -// ("erf"_sigma(x_{0_r} + a) - "erf"_sigma(x_{0_r} + "ellipsePoint"(y, y_0, a, b)) + -// "erf"_sigma(x_{0_l} - "ellipsePoint"(y, y_0, a, b)) - "erf"_sigma(x_{0_l} - a)) -// -// with the outer integral evaluated numerically. -float colorCutoutGeneral(float x0l, - float x0r, - float y0, - float yMin, - float yMax, - vec2 radii, - float sigma) { - float sum = 0.0; - for (float y = yMin; y <= yMax; y += 1.0) { - float xEllipsePoint = ellipsePoint(y, y0, radii); - sum += gauss(y, sigma) * - (erfSigma(x0r + radii.x, sigma) - erfSigma(x0r + xEllipsePoint, sigma) + - erfSigma(x0l - xEllipsePoint, sigma) - erfSigma(x0l - radii.x, sigma)); - } - return sum / 2.0; -} - -// The value that needs to be subtracted to accommodate the top border corners. -float colorCutoutTop(float x0l, float x0r, float y0, vec2 radii, float sigma) { - return colorCutoutGeneral(x0l, x0r, y0, y0, y0 + radii.y, radii, sigma); -} - -// The value that needs to be subtracted to accommodate the bottom border corners. -float colorCutoutBottom(float x0l, float x0r, float y0, vec2 radii, float sigma) { - return colorCutoutGeneral(x0l, x0r, y0, y0 - radii.y, y0, radii, sigma); -} - -// The blurred color value for the point at `pos` with the top left corner of the box at -// `p_{0_"rect"}` and the bottom right corner of the box at `p_{1_"rect"}`. -float color(vec2 pos, vec2 p0Rect, vec2 p1Rect, vec2 radii, float sigma) { - // Compute the vector distances `p_0` and `p_1`. - vec2 p0 = p0Rect - pos, p1 = p1Rect - pos; - - // Compute the basic color `"colorFromRect"_sigma(p_0, p_1)`. This is all we have to do if - // the box is unrounded. - float cRect = colorFromRect(p0, p1, sigma); - if (radii.x == 0.0 || radii.y == 0.0) - return cRect; - - // Compute the inner corners of the box, taking border radii into account: `x_{0_l}`, - // `y_{0_t}`, `x_{0_r}`, and `y_{0_b}`. - float x0l = p0.x + radii.x; - float y0t = p1.y - radii.y; - float x0r = p1.x - radii.x; - float y0b = p0.y + radii.y; - - // Compute the final color: - // - // "colorFromRect"_sigma(p_0, p_1) - - // ("colorCutoutTop"_sigma(x_{0_l}, x_{0_r}, y_{0_t}, a, b) + - // "colorCutoutBottom"_sigma(x_{0_l}, x_{0_r}, y_{0_b}, a, b)) - float cCutoutTop = colorCutoutTop(x0l, x0r, y0t, radii, sigma); - float cCutoutBottom = colorCutoutBottom(x0l, x0r, y0b, radii, sigma); - return cRect - (cCutoutTop + cCutoutBottom); -} - -void main(void) { - vec2 pos = vPos.xy; - vec2 p0Rect = vBoxShadowRect.xy, p1Rect = vBoxShadowRect.zw; - vec2 radii = vBorderRadii.xy; - float sigma = vBlurRadius / 2.0; - float value = color(pos, p0Rect, p1Rect, radii, sigma); - - value = max(value, 0.0); - oFragColor = dither(vec4(vInverted == 1.0 ? 1.0 - value : value)); -} -#endif diff --git a/webrender/res/cs_clip_rectangle.glsl b/webrender/res/cs_clip_rectangle.glsl index d79ed066e9..0ca4662303 100644 --- a/webrender/res/cs_clip_rectangle.glsl +++ b/webrender/res/cs_clip_rectangle.glsl @@ -81,73 +81,35 @@ void main(void) { RectWithEndpoint clip_rect = to_rect_with_endpoint(local_rect); - vClipCenter_Radius_TL = vec4(clip_rect.p0 + clip.top_left.outer_inner_radius.xy, - clip.top_left.outer_inner_radius.xy); + vec2 r_tl = clip.top_left.outer_inner_radius.xy; + vec2 r_tr = clip.top_right.outer_inner_radius.xy; + vec2 r_br = clip.bottom_right.outer_inner_radius.xy; + vec2 r_bl = clip.bottom_left.outer_inner_radius.xy; - vClipCenter_Radius_TR = vec4(clip_rect.p1.x - clip.top_right.outer_inner_radius.x, - clip_rect.p0.y + clip.top_right.outer_inner_radius.y, - clip.top_right.outer_inner_radius.xy); + vClipCenter_Radius_TL = vec4(clip_rect.p0 + r_tl, r_tl); - vClipCenter_Radius_BR = vec4(clip_rect.p1 - clip.bottom_right.outer_inner_radius.xy, - clip.bottom_right.outer_inner_radius.xy); + vClipCenter_Radius_TR = vec4(clip_rect.p1.x - r_tr.x, + clip_rect.p0.y + r_tr.y, + r_tr); - vClipCenter_Radius_BL = vec4(clip_rect.p0.x + clip.bottom_left.outer_inner_radius.x, - clip_rect.p1.y - clip.bottom_left.outer_inner_radius.y, - clip.bottom_left.outer_inner_radius.xy); + vClipCenter_Radius_BR = vec4(clip_rect.p1 - r_br, r_br); + + vClipCenter_Radius_BL = vec4(clip_rect.p0.x + r_bl.x, + clip_rect.p1.y - r_bl.y, + r_bl); } #endif #ifdef WR_FRAGMENT_SHADER -float clip_against_ellipse_if_needed(vec2 pos, - float current_distance, - vec4 ellipse_center_radius, - vec2 sign_modifier) { - float ellipse_distance = distance_to_ellipse(pos - ellipse_center_radius.xy, - ellipse_center_radius.zw); - return mix(current_distance, - ellipse_distance, - all(lessThan(sign_modifier * pos, sign_modifier * ellipse_center_radius.xy))); -} - -float rounded_rect(vec2 pos) { - // Start with a negative value (means "inside") for all fragments that are not - // in a corner. If the fragment is in a corner, one of the clip_against_ellipse_if_needed - // calls below will update it. - float current_distance = -1.0; - - // Clip against each ellipse. - current_distance = clip_against_ellipse_if_needed(pos, - current_distance, - vClipCenter_Radius_TL, - vec2(1.0)); - - current_distance = clip_against_ellipse_if_needed(pos, - current_distance, - vClipCenter_Radius_TR, - vec2(-1.0, 1.0)); - - current_distance = clip_against_ellipse_if_needed(pos, - current_distance, - vClipCenter_Radius_BR, - vec2(-1.0)); - - current_distance = clip_against_ellipse_if_needed(pos, - current_distance, - vClipCenter_Radius_BL, - vec2(1.0, -1.0)); - - // Apply AA - // See comment in ps_border_corner about the choice of constants. - float aa_range = compute_aa_range(pos); - - return distance_aa(aa_range, current_distance); -} - void main(void) { float alpha = 1.f; vec2 local_pos = init_transform_fs(vPos, alpha); - float clip_alpha = rounded_rect(local_pos); + float clip_alpha = rounded_rect(local_pos, + vClipCenter_Radius_TL, + vClipCenter_Radius_TR, + vClipCenter_Radius_BR, + vClipCenter_Radius_BL); float combined_alpha = min(alpha, clip_alpha); diff --git a/webrender/res/cs_text_run.glsl b/webrender/res/cs_text_run.glsl index 772f8510f8..5dfcae87c2 100644 --- a/webrender/res/cs_text_run.glsl +++ b/webrender/res/cs_text_run.glsl @@ -18,16 +18,16 @@ void main(void) { int glyph_index = prim.user_data0; int resource_address = prim.user_data1; - int text_shadow_address = prim.user_data2; + int picture_address = prim.user_data2; - // Fetch the parent text-shadow for this primitive. This allows the code + // Fetch the owning picture for this primitive. This allows the code // below to normalize the glyph offsets relative to the original text // shadow rect, which is the union of all elements that make up this // text shadow. This allows the text shadow to be rendered at an // arbitrary location in a render target (provided by the render // task render_target_origin field). - PrimitiveGeometry shadow_geom = fetch_primitive_geometry(text_shadow_address); - TextShadow shadow = fetch_text_shadow(text_shadow_address + VECS_PER_PRIM_HEADER); + PrimitiveGeometry shadow_geom = fetch_primitive_geometry(picture_address); + Picture pic = fetch_picture(picture_address + VECS_PER_PRIM_HEADER); Glyph glyph = fetch_glyph(prim.specific_prim_address, glyph_index, @@ -41,7 +41,7 @@ void main(void) { vec2 size = (res.uv_rect.zw - res.uv_rect.xy) * res.scale; vec2 local_pos = glyph.offset + vec2(res.offset.x, -res.offset.y) / uDevicePixelRatio; vec2 origin = prim.task.render_target_origin + - uDevicePixelRatio * (local_pos + shadow.offset - shadow_geom.local_rect.p0); + uDevicePixelRatio * (local_pos + pic.offset - shadow_geom.local_rect.p0); vec4 local_rect = vec4(origin, size); vec2 texture_size = vec2(textureSize(sColor0, 0)); @@ -53,7 +53,7 @@ void main(void) { aPosition.xy); vUv = vec3(mix(st0, st1, aPosition.xy), res.layer); - vColor = shadow.color; + vColor = pic.color; gl_Position = uTransform * vec4(pos, 0.0, 1.0); } diff --git a/webrender/res/ellipse.glsl b/webrender/res/ellipse.glsl index 5d07669402..20486adad8 100644 --- a/webrender/res/ellipse.glsl +++ b/webrender/res/ellipse.glsl @@ -66,4 +66,55 @@ float distance_to_ellipse(vec2 p, vec2 radii) { } } +float clip_against_ellipse_if_needed( + vec2 pos, + float current_distance, + vec4 ellipse_center_radius, + vec2 sign_modifier +) { + float ellipse_distance = distance_to_ellipse(pos - ellipse_center_radius.xy, + ellipse_center_radius.zw); + + return mix(current_distance, + ellipse_distance, + all(lessThan(sign_modifier * pos, sign_modifier * ellipse_center_radius.xy))); +} + +float rounded_rect(vec2 pos, + vec4 clip_center_radius_tl, + vec4 clip_center_radius_tr, + vec4 clip_center_radius_br, + vec4 clip_center_radius_bl) { + // Start with a negative value (means "inside") for all fragments that are not + // in a corner. If the fragment is in a corner, one of the clip_against_ellipse_if_needed + // calls below will update it. + float current_distance = -1.0; + + // Clip against each ellipse. + current_distance = clip_against_ellipse_if_needed(pos, + current_distance, + clip_center_radius_tl, + vec2(1.0)); + + current_distance = clip_against_ellipse_if_needed(pos, + current_distance, + clip_center_radius_tr, + vec2(-1.0, 1.0)); + + current_distance = clip_against_ellipse_if_needed(pos, + current_distance, + clip_center_radius_br, + vec2(-1.0)); + + current_distance = clip_against_ellipse_if_needed(pos, + current_distance, + clip_center_radius_bl, + vec2(1.0, -1.0)); + + // Apply AA + // See comment in ps_border_corner about the choice of constants. + float aa_range = compute_aa_range(pos); + + return distance_aa(aa_range, current_distance); +} #endif diff --git a/webrender/res/prim_shared.glsl b/webrender/res/prim_shared.glsl index c5c6f5d926..edb7970168 100644 --- a/webrender/res/prim_shared.glsl +++ b/webrender/res/prim_shared.glsl @@ -659,15 +659,15 @@ Rectangle fetch_rectangle(int address) { return Rectangle(data); } -struct TextShadow { +struct Picture { vec4 color; vec2 offset; float blur_radius; }; -TextShadow fetch_text_shadow(int address) { +Picture fetch_picture(int address) { vec4 data[2] = fetch_from_resource_cache_2(address); - return TextShadow(data[0], data[1].xy, data[1].z); + return Picture(data[0], data[1].xy, data[1].z); } struct TextRun { @@ -692,23 +692,6 @@ Image fetch_image(int address) { return Image(data[0], data[1]); } -struct BoxShadow { - vec4 src_rect; - vec4 bs_rect; - vec4 color; - vec4 border_radius_edge_size_blur_radius_inverted; -}; - -BoxShadow fetch_boxshadow(int address) { - vec4 data[4] = fetch_from_resource_cache_4(address); - return BoxShadow(data[0], data[1], data[2], data[3]); -} - -BoxShadow fetch_boxshadow_direct(ivec2 address) { - vec4 data[4] = fetch_from_resource_cache_4_direct(address); - return BoxShadow(data[0], data[1], data[2], data[3]); -} - void write_clip(vec2 global_pos, ClipArea area) { vec2 texture_size = vec2(textureSize(sSharedCacheA8, 0).xy); vec2 uv = global_pos + area.task_bounds.xy - area.screen_origin_target_index.xy; diff --git a/webrender/res/ps_box_shadow.glsl b/webrender/res/ps_box_shadow.glsl deleted file mode 100644 index 5a9845218c..0000000000 --- a/webrender/res/ps_box_shadow.glsl +++ /dev/null @@ -1,73 +0,0 @@ -/* This Source Code Form is subject to the terms of the Mozilla Public - * License, v. 2.0. If a copy of the MPL was not distributed with this - * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ - -#include shared,prim_shared - -flat varying vec4 vColor; - -varying vec3 vUv; -flat varying vec2 vMirrorPoint; -flat varying vec4 vCacheUvRectCoords; - -#ifdef WR_VERTEX_SHADER -#define BS_HEADER_VECS 4 - -RectWithSize fetch_instance_geometry(int address) { - vec4 data = fetch_from_resource_cache_1(address); - return RectWithSize(data.xy, data.zw); -} - -void main(void) { - Primitive prim = load_primitive(); - BoxShadow bs = fetch_boxshadow(prim.specific_prim_address); - RectWithSize segment_rect = fetch_instance_geometry(prim.specific_prim_address + BS_HEADER_VECS + prim.user_data0); - - VertexInfo vi = write_vertex(segment_rect, - prim.local_clip_rect, - prim.z, - prim.layer, - prim.task, - prim.local_rect); - - RenderTaskData child_task = fetch_render_task(prim.user_data1); - vUv.z = child_task.data1.x; - - // Constant offsets to inset from bilinear filtering border. - vec2 patch_origin = child_task.data0.xy + vec2(1.0); - vec2 patch_size_device_pixels = child_task.data0.zw - vec2(2.0); - vec2 patch_size = patch_size_device_pixels / uDevicePixelRatio; - - vUv.xy = (vi.local_pos - prim.local_rect.p0) / patch_size; - vMirrorPoint = 0.5 * prim.local_rect.size / patch_size; - - vec2 texture_size = vec2(textureSize(sSharedCacheA8, 0)); - vCacheUvRectCoords = vec4(patch_origin, patch_origin + patch_size_device_pixels) / texture_size.xyxy; - - vColor = bs.color; - - write_clip(vi.screen_pos, prim.clip_area); -} -#endif - -#ifdef WR_FRAGMENT_SHADER -void main(void) { - vec4 clip_scale = vec4(1.0, 1.0, 1.0, do_clip()); - - // Mirror and stretch the box shadow corner over the entire - // primitives. - vec2 uv = vMirrorPoint - abs(vUv.xy - vMirrorPoint); - - // Ensure that we don't fetch texels outside the box - // shadow corner. This can happen, for example, when - // drawing the outer parts of an inset box shadow. - uv = clamp(uv, vec2(0.0), vec2(1.0)); - - // Map the unit UV to the actual UV rect in the cache. - uv = mix(vCacheUvRectCoords.xy, vCacheUvRectCoords.zw, uv); - - // Modulate the box shadow by the color. - float mask = texture(sSharedCacheA8, vec3(uv, vUv.z)).r; - oFragColor = clip_scale * dither(vColor * vec4(1.0, 1.0, 1.0, mask)); -} -#endif diff --git a/webrender/res/ps_cache_image.glsl b/webrender/res/ps_cache_image.glsl index 97cf8d9d79..f7fdefd36f 100644 --- a/webrender/res/ps_cache_image.glsl +++ b/webrender/res/ps_cache_image.glsl @@ -7,6 +7,10 @@ varying vec3 vUv; flat varying vec4 vUvBounds; +#if defined WR_FEATURE_ALPHA +flat varying vec4 vColor; +#endif + #ifdef WR_VERTEX_SHADER // Draw a cached primitive (e.g. a blurred text run) from the // target cache to the framebuffer, applying tile clip boundaries. @@ -24,7 +28,14 @@ void main(void) { RenderTaskData child_task = fetch_render_task(prim.user_data1); vUv.z = child_task.data1.x; - vec2 texture_size = vec2(textureSize(sCacheRGBA8, 0)); +#if defined WR_FEATURE_COLOR + vec2 texture_size = vec2(textureSize(sColor0, 0).xy); +#else + Picture pic = fetch_picture(prim.specific_prim_address); + + vec2 texture_size = vec2(textureSize(sColor1, 0).xy); + vColor = pic.color; +#endif vec2 uv0 = child_task.data0.xy; vec2 uv1 = (child_task.data0.xy + child_task.data0.zw); @@ -34,12 +45,32 @@ void main(void) { uv1 / texture_size, f); vUvBounds = vec4(uv0 + vec2(0.5), uv1 - vec2(0.5)) / texture_size.xyxy; + + write_clip(vi.screen_pos, prim.clip_area); } #endif #ifdef WR_FRAGMENT_SHADER void main(void) { vec2 uv = clamp(vUv.xy, vUvBounds.xy, vUvBounds.zw); - oFragColor = texture(sColor0, vec3(uv, vUv.z)); + +#if defined WR_FEATURE_COLOR + vec4 color = texture(sColor0, vec3(uv, vUv.z)); +#else + vec4 color = vColor * texture(sColor1, vec3(uv, vUv.z)).r; +#endif + + // Un-premultiply the color from sampling the gradient. + if (color.a > 0.0) { + color.rgb /= color.a; + + // Apply the clip mask + color.a = min(color.a, do_clip()); + + // Pre-multiply the result. + color.rgb *= color.a; + } + + oFragColor = color; } #endif diff --git a/webrender/res/ps_line.glsl b/webrender/res/ps_line.glsl index b907e512f1..1d04f24a90 100644 --- a/webrender/res/ps_line.glsl +++ b/webrender/res/ps_line.glsl @@ -98,19 +98,19 @@ void main(void) { } #ifdef WR_FEATURE_CACHE - int text_shadow_address = prim.user_data0; - PrimitiveGeometry shadow_geom = fetch_primitive_geometry(text_shadow_address); - TextShadow shadow = fetch_text_shadow(text_shadow_address + VECS_PER_PRIM_HEADER); + int picture_address = prim.user_data0; + PrimitiveGeometry picture_geom = fetch_primitive_geometry(picture_address); + Picture pic = fetch_picture(picture_address + VECS_PER_PRIM_HEADER); vec2 device_origin = prim.task.render_target_origin + - uDevicePixelRatio * (prim.local_rect.p0 + shadow.offset - shadow_geom.local_rect.p0); + uDevicePixelRatio * (prim.local_rect.p0 + pic.offset - picture_geom.local_rect.p0); vec2 device_size = uDevicePixelRatio * prim.local_rect.size; vec2 device_pos = mix(device_origin, device_origin + device_size, aPosition.xy); - vColor = shadow.color; + vColor = pic.color; vLocalPos = mix(prim.local_rect.p0, prim.local_rect.p0 + prim.local_rect.size, aPosition.xy); diff --git a/webrender/src/frame_builder.rs b/webrender/src/frame_builder.rs index a5e78b6c3d..642693e5ea 100644 --- a/webrender/src/frame_builder.rs +++ b/webrender/src/frame_builder.rs @@ -3,7 +3,7 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ use api::{BorderDetails, BorderDisplayItem, BorderRadius, BoxShadowClipMode, BuiltDisplayList}; -use api::{ClipAndScrollInfo, ClipId, ColorF}; +use api::{ComplexClipRegion, ClipAndScrollInfo, ClipId, ColorF}; use api::{DeviceIntPoint, DeviceIntRect, DeviceIntSize, DeviceUintRect, DeviceUintSize}; use api::{ExtendMode, FilterOp, FontInstance, FontRenderMode}; use api::{GlyphInstance, GlyphOptions, GradientStop, HitTestFlags, HitTestItem, HitTestResult}; @@ -21,9 +21,9 @@ use euclid::{SideOffsets2D, TypedTransform3D, vec2, vec3}; use frame::FrameId; use gpu_cache::GpuCache; use internal_types::{FastHashMap, FastHashSet, HardwareCompositeOp}; -use picture::PicturePrimitive; +use picture::{PicturePrimitive}; use plane_split::{BspSplitter, Polygon, Splitter}; -use prim_store::{BoxShadowPrimitiveCpu, TexelRect, YuvImagePrimitiveCpu}; +use prim_store::{BrushPrimitive, TexelRect, YuvImagePrimitiveCpu}; use prim_store::{GradientPrimitiveCpu, ImagePrimitiveCpu, LinePrimitive, PrimitiveKind}; use prim_store::{PrimitiveContainer, PrimitiveIndex}; use prim_store::{PrimitiveStore, RadialGradientPrimitiveCpu}; @@ -35,10 +35,10 @@ use resource_cache::ResourceCache; use scene::ScenePipeline; use std::{mem, usize, f32, i32}; use tiling::{ClipScrollGroup, ClipScrollGroupIndex, CompositeOps, Frame}; -use tiling::{ContextIsolation, StackingContextIndex}; +use tiling::{ContextIsolation, RenderTargetKind, StackingContextIndex}; use tiling::{PackedLayer, PackedLayerIndex, PrimitiveFlags, PrimitiveRunCmd, RenderPass}; use tiling::{RenderTargetContext, ScrollbarPrimitive, StackingContext}; -use util::{self, RectHelpers, pack_as_float, recycle_vec, subtract_rect}; +use util::{self, pack_as_float, RectHelpers, recycle_vec}; /// Construct a polygon from stacking context boundaries. /// `anchor` here is an index that's going to be preserved in all the @@ -557,7 +557,7 @@ impl FrameBuilder { clip_and_scroll: ClipAndScrollInfo, info: &LayerPrimitiveInfo, ) { - let prim = PicturePrimitive::new_shadow(shadow); + let prim = PicturePrimitive::new_shadow(shadow, RenderTargetKind::Color); // Create an empty shadow primitive. Insert it into // the draw lists immediately so that it will be drawn @@ -1262,47 +1262,10 @@ impl FrameBuilder { } } - pub fn fill_box_shadow_rect( - &mut self, - clip_and_scroll: ClipAndScrollInfo, - info: &LayerPrimitiveInfo, - bs_rect: LayerRect, - color: &ColorF, - border_radius: f32, - clip_mode: BoxShadowClipMode, - ) { - // We can draw a rectangle instead with the proper border radius clipping. - let (bs_clip_mode, rect_to_draw) = match clip_mode { - BoxShadowClipMode::Outset | BoxShadowClipMode::None => (ClipMode::Clip, bs_rect), - BoxShadowClipMode::Inset => (ClipMode::ClipOut, info.rect), - }; - - let box_clip_mode = !bs_clip_mode; - - // Clip the inside and then the outside of the box. - let border_radius = BorderRadius::uniform(border_radius); - let extra_clips = vec![ - ClipSource::RoundedRectangle(bs_rect, border_radius, bs_clip_mode), - ClipSource::RoundedRectangle(info.rect, border_radius, box_clip_mode), - ]; - - let prim = RectanglePrimitive { color: *color }; - - let mut info = info.clone(); - info.rect = rect_to_draw; - - self.add_primitive( - clip_and_scroll, - &info, - extra_clips, - PrimitiveContainer::Rectangle(prim), - ); - } - pub fn add_box_shadow( &mut self, clip_and_scroll: ClipAndScrollInfo, - info: &LayerPrimitiveInfo, + prim_info: &LayerPrimitiveInfo, box_offset: &LayerVector2D, color: &ColorF, blur_radius: f32, @@ -1314,162 +1277,152 @@ impl FrameBuilder { return; } - // The local space box shadow rect. It is the element rect - // translated by the box shadow offset and inflated by the - // box shadow spread. - let inflate_amount = match clip_mode { - BoxShadowClipMode::Outset | BoxShadowClipMode::None => spread_radius, - BoxShadowClipMode::Inset => -spread_radius, + let spread_amount = match clip_mode { + BoxShadowClipMode::Outset => { + spread_radius + } + BoxShadowClipMode::Inset => { + -spread_radius + } }; - let bs_rect = info.rect - .translate(box_offset) - .inflate(inflate_amount, inflate_amount); - // If we have negative inflate amounts. - // Have to explicitly check this since euclid::TypedRect relies on negative rects - let bs_rect_empty = bs_rect.size.width <= 0.0 || bs_rect.size.height <= 0.0; - - // Just draw a rectangle - if (blur_radius == 0.0 && spread_radius == 0.0 && clip_mode == BoxShadowClipMode::None) || - bs_rect_empty - { - self.add_solid_rectangle(clip_and_scroll, info, color, PrimitiveFlags::None); - return; - } + // Adjust the shadow box radius as per: + // https://drafts.csswg.org/css-backgrounds-3/#shadow-shape + let sharpness_scale = if border_radius < spread_radius { + let r = border_radius / spread_amount; + 1.0 + (r - 1.0) * (r - 1.0) * (r - 1.0) + } else { + 1.0 + }; + let shadow_radius = (border_radius + spread_amount * sharpness_scale).max(0.0); + let shadow_rect = prim_info.rect + .translate(box_offset) + .inflate(spread_amount, spread_amount); + + if blur_radius == 0.0 { + let mut clips = Vec::new(); + + let fast_info = match clip_mode { + BoxShadowClipMode::Outset => { + // TODO(gw): Add a fast path for ClipOut + zero border radius! + clips.push(ClipSource::RoundedRectangle( + prim_info.rect, + BorderRadius::uniform(border_radius), + ClipMode::ClipOut + )); + + LayerPrimitiveInfo::with_clip( + shadow_rect, + LocalClip::RoundedRect( + shadow_rect, + ComplexClipRegion::new(shadow_rect, BorderRadius::uniform(shadow_radius)), + ), + ) + } + BoxShadowClipMode::Inset => { + clips.push(ClipSource::RoundedRectangle( + shadow_rect, + BorderRadius::uniform(shadow_radius), + ClipMode::ClipOut + )); - if blur_radius == 0.0 && border_radius != 0.0 { - self.fill_box_shadow_rect( + LayerPrimitiveInfo::with_clip( + prim_info.rect, + LocalClip::RoundedRect( + prim_info.rect, + ComplexClipRegion::new(prim_info.rect, BorderRadius::uniform(border_radius)), + ), + ) + } + }; + + self.add_primitive( clip_and_scroll, - info, - bs_rect, - color, - border_radius, - clip_mode, + &fast_info, + clips, + PrimitiveContainer::Rectangle(RectanglePrimitive { + color: *color, + }), ); - return; - } + } else { + let shadow = Shadow { + blur_radius, + color: *color, + offset: LayerVector2D::zero(), + }; - // Get the outer rectangle, based on the blur radius. - let outside_edge_size = 2.0 * blur_radius; - let inside_edge_size = outside_edge_size.max(border_radius); - let edge_size = outside_edge_size + inside_edge_size; - let outer_rect = bs_rect.inflate(outside_edge_size, outside_edge_size); - - // Box shadows are often used for things like text underline and other - // simple primitives, so we want to draw these simple cases with the - // solid rectangle shader wherever possible, to avoid invoking the - // expensive box-shadow shader. - enum BoxShadowKind { - Simple(Vec), // Can be drawn via simple rectangles only - Shadow(Vec), // Requires the full box-shadow code path - } + let blur_offset = 2.0 * blur_radius; + let mut extra_clips = vec![]; + let mut pic_prim = PicturePrimitive::new_shadow(shadow, RenderTargetKind::Alpha); - let shadow_kind = match clip_mode { - BoxShadowClipMode::Outset | BoxShadowClipMode::None => { - // If a border radius is set, we need to draw inside - // the original box in order to draw where the border - // corners are. A clip-out mask applied below will - // ensure that we don't draw on the box itself. - let inner_box_bounds = info.rect.inflate(-border_radius, -border_radius); - // For outset shadows, subtracting the element rectangle - // from the outer rectangle gives the rectangles we need - // to draw. In the simple case (no blur radius), we can - // just draw these as solid colors. - let mut rects = Vec::new(); - subtract_rect(&outer_rect, &inner_box_bounds, &mut rects); - if edge_size == 0.0 { - BoxShadowKind::Simple(rects) - } else { - BoxShadowKind::Shadow(rects) - } - } - BoxShadowClipMode::Inset => { - // For inset shadows, in the simple case (no blur) we - // can draw the shadow area by subtracting the box - // shadow rect from the element rect (since inset box - // shadows never extend past the element rect). However, - // in the case of an inset box shadow with blur, we - // currently just draw the box shadow over the entire - // rect. The opaque parts of the shadow (past the outside - // edge of the box-shadow) are handled by the shadow - // shader. - // TODO(gw): We should be able to optimize the complex - // inset shadow case to touch fewer pixels. We - // can probably calculate the inner rect that - // can't be affected, and subtract that from - // the element rect? - let mut rects = Vec::new(); - if edge_size == 0.0 { - subtract_rect(&info.rect, &bs_rect, &mut rects); - BoxShadowKind::Simple(rects) - } else { - rects.push(info.rect); - BoxShadowKind::Shadow(rects) - } - } - }; + let pic_info = match clip_mode { + BoxShadowClipMode::Outset => { + let brush_prim = BrushPrimitive { + clip_mode: ClipMode::Clip, + radius: shadow_radius, + }; - match shadow_kind { - BoxShadowKind::Simple(rects) => for rect in &rects { - let mut info = info.clone(); - info.rect = *rect; - self.add_solid_rectangle(clip_and_scroll, &info, color, PrimitiveFlags::None) - }, - BoxShadowKind::Shadow(rects) => { - assert!(blur_radius > 0.0); - if clip_mode == BoxShadowClipMode::Inset { - self.fill_box_shadow_rect( + let brush_rect = LayerRect::new(LayerPoint::new(blur_offset, blur_offset), + shadow_rect.size); + + let brush_info = LayerPrimitiveInfo::new(brush_rect); + + let brush_prim_index = self.create_primitive( clip_and_scroll, - info, - bs_rect, - color, - border_radius, - clip_mode, + &brush_info, + Vec::new(), + PrimitiveContainer::Brush(brush_prim), ); + + pic_prim.add_primitive(brush_prim_index, clip_and_scroll); + + extra_clips.push(ClipSource::RoundedRectangle( + prim_info.rect, + BorderRadius::uniform(border_radius), + ClipMode::ClipOut, + )); + + let pic_rect = shadow_rect.inflate(blur_offset, blur_offset); + LayerPrimitiveInfo::new(pic_rect) } + BoxShadowClipMode::Inset => { + let brush_prim = BrushPrimitive { + clip_mode: ClipMode::ClipOut, + radius: shadow_radius, + }; - let inverted = match clip_mode { - BoxShadowClipMode::Outset | BoxShadowClipMode::None => 0.0, - BoxShadowClipMode::Inset => 1.0, - }; + let mut brush_rect = shadow_rect; + brush_rect.origin.x = brush_rect.origin.x - prim_info.rect.origin.x + blur_offset; + brush_rect.origin.y = brush_rect.origin.y - prim_info.rect.origin.y + blur_offset; - // Outset box shadows with border radius - // need a clip out of the center box. - let extra_clip_mode = match clip_mode { - BoxShadowClipMode::Outset | BoxShadowClipMode::None => ClipMode::ClipOut, - BoxShadowClipMode::Inset => ClipMode::Clip, - }; + let brush_info = LayerPrimitiveInfo::new(brush_rect); + + let brush_prim_index = self.create_primitive( + clip_and_scroll, + &brush_info, + Vec::new(), + PrimitiveContainer::Brush(brush_prim), + ); + + pic_prim.add_primitive(brush_prim_index, clip_and_scroll); - let mut extra_clips = Vec::new(); - if border_radius >= 0.0 { extra_clips.push(ClipSource::RoundedRectangle( - info.rect, + prim_info.rect, BorderRadius::uniform(border_radius), - extra_clip_mode, + ClipMode::Clip, )); - } - let prim_cpu = BoxShadowPrimitiveCpu { - src_rect: info.rect, - bs_rect, - color: *color, - blur_radius, - border_radius, - edge_size, - inverted, - rects, - render_task_id: None, - }; + let pic_rect = prim_info.rect.inflate(blur_offset, blur_offset); + LayerPrimitiveInfo::with_clip_rect(pic_rect, prim_info.rect) + } + }; - let mut info = info.clone(); - info.rect = outer_rect; - self.add_primitive( - clip_and_scroll, - &info, - extra_clips, - PrimitiveContainer::BoxShadow(prim_cpu), - ); - } + self.add_primitive( + clip_and_scroll, + &pic_info, + extra_clips, + PrimitiveContainer::Picture(pic_prim), + ); } } @@ -2097,10 +2050,13 @@ impl FrameBuilder { match *filter { FilterOp::Blur(blur_radius) => { let blur_radius = device_length(blur_radius, device_pixel_ratio); + render_tasks.get_mut(current_task_id) + .inflate(blur_radius.0); let blur_render_task = RenderTask::new_blur( blur_radius, current_task_id, render_tasks, + RenderTargetKind::Color, ); let blur_render_task_id = render_tasks.add(blur_render_task); let item = AlphaRenderItem::HardwareComposite( diff --git a/webrender/src/gpu_types.rs b/webrender/src/gpu_types.rs index fae1a02478..b8e129a6f7 100644 --- a/webrender/src/gpu_types.rs +++ b/webrender/src/gpu_types.rs @@ -17,14 +17,6 @@ impl From for PackedLayerAddress { } } -// Instance structure for box shadows being drawn into target cache. -#[derive(Debug)] -#[repr(C)] -pub struct BoxShadowCacheInstance { - pub prim_address: GpuCacheAddress, - pub task_index: RenderTaskAddress, -} - #[repr(i32)] #[derive(Debug)] pub enum BlurDirection { @@ -145,3 +137,38 @@ impl From for PrimitiveInstance { } } } + +#[repr(C)] +pub struct BrushInstance { + picture_address: RenderTaskAddress, + prim_address: GpuCacheAddress, +} + +impl BrushInstance { + pub fn new( + picture_address: RenderTaskAddress, + prim_address: GpuCacheAddress + ) -> BrushInstance { + BrushInstance { + picture_address, + prim_address, + } + } +} + +impl From for PrimitiveInstance { + fn from(instance: BrushInstance) -> PrimitiveInstance { + PrimitiveInstance { + data: [ + instance.picture_address.0 as i32, + instance.prim_address.as_int(), + 0, + 0, + 0, + 0, + 0, + 0, + ] + } + } +} diff --git a/webrender/src/picture.rs b/webrender/src/picture.rs index 45f34fe69b..c8cb49e49d 100644 --- a/webrender/src/picture.rs +++ b/webrender/src/picture.rs @@ -5,6 +5,7 @@ use api::{ClipAndScrollInfo, Shadow}; use prim_store::PrimitiveIndex; use render_task::RenderTaskId; +use tiling::RenderTargetKind; /* A picture represents a dynamically rendered image. It consists of: @@ -36,6 +37,7 @@ pub struct PicturePrimitive { pub prim_runs: Vec, pub composite_op: CompositeOp, pub render_task_id: Option, + pub kind: RenderTargetKind, // TODO(gw): Add a mode that specifies if this // picture should be rasterized in @@ -43,11 +45,15 @@ pub struct PicturePrimitive { } impl PicturePrimitive { - pub fn new_shadow(shadow: Shadow) -> PicturePrimitive { + pub fn new_shadow( + shadow: Shadow, + kind: RenderTargetKind, + ) -> PicturePrimitive { PicturePrimitive { prim_runs: Vec::new(), composite_op: CompositeOp::Shadow(shadow), render_task_id: None, + kind, } } diff --git a/webrender/src/prim_store.rs b/webrender/src/prim_store.rs index 5a507ef7e7..fc11ad1c98 100644 --- a/webrender/src/prim_store.rs +++ b/webrender/src/prim_store.rs @@ -7,10 +7,8 @@ use api::{DevicePoint, ExtendMode, FontInstance, FontRenderMode, GlyphInstance, use api::{GradientStop, ImageKey, ImageRendering, ItemRange, ItemTag, LayerPoint, LayerRect}; use api::{LayerSize, LayerVector2D, LineOrientation, LineStyle}; use api::{TileOffset, YuvColorSpace, YuvFormat, device_length}; -use app_units::Au; use border::BorderCornerInstance; use clip::{ClipMode, ClipSourcesHandle, ClipStore, Geometry}; -use euclid::Size2D; use frame_builder::PrimitiveContext; use gpu_cache::{GpuBlockData, GpuCache, GpuCacheAddress, GpuCacheHandle, GpuDataRequest, ToGpuBlocks}; @@ -111,9 +109,9 @@ pub enum PrimitiveKind { AlignedGradient, AngleGradient, RadialGradient, - BoxShadow, Line, Picture, + Brush, } impl GpuCacheHandle { @@ -166,6 +164,23 @@ impl ToGpuBlocks for RectanglePrimitive { } } +#[derive(Debug)] +pub struct BrushPrimitive { + pub clip_mode: ClipMode, + pub radius: f32, +} + +impl ToGpuBlocks for BrushPrimitive { + fn write_gpu_blocks(&self, mut request: GpuDataRequest) { + request.push([ + self.clip_mode as u32 as f32, + self.radius, + 0.0, + 0.0 + ]); + } +} + #[derive(Debug, Clone)] #[repr(C)] pub struct LinePrimitive { @@ -232,46 +247,6 @@ impl ToGpuBlocks for BorderPrimitiveCpu { } } -#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] -pub struct BoxShadowPrimitiveCacheKey { - pub shadow_rect_size: Size2D, - pub border_radius: Au, - pub blur_radius: Au, - pub inverted: bool, -} - -#[derive(Debug)] -pub struct BoxShadowPrimitiveCpu { - // todo(gw): generate on demand - // gpu data - pub src_rect: LayerRect, - pub bs_rect: LayerRect, - pub color: ColorF, - pub border_radius: f32, - pub edge_size: f32, - pub blur_radius: f32, - pub inverted: f32, - pub rects: Vec, - pub render_task_id: Option, -} - -impl ToGpuBlocks for BoxShadowPrimitiveCpu { - fn write_gpu_blocks(&self, mut request: GpuDataRequest) { - request.push(self.src_rect); - request.push(self.bs_rect); - request.push(self.color); - request.push([ - self.border_radius, - self.edge_size, - self.blur_radius, - self.inverted, - ]); - for &rect in &self.rects { - request.push(rect); - } - } -} - #[derive(Debug)] pub struct GradientPrimitiveCpu { pub stops_range: ItemRange, @@ -805,14 +780,15 @@ pub enum PrimitiveContainer { AlignedGradient(GradientPrimitiveCpu), AngleGradient(GradientPrimitiveCpu), RadialGradient(RadialGradientPrimitiveCpu), - BoxShadow(BoxShadowPrimitiveCpu), Picture(PicturePrimitive), Line(LinePrimitive), + Brush(BrushPrimitive), } pub struct PrimitiveStore { /// CPU side information only. pub cpu_rectangles: Vec, + pub cpu_brushes: Vec, pub cpu_text_runs: Vec, pub cpu_pictures: Vec, pub cpu_images: Vec, @@ -821,7 +797,6 @@ pub struct PrimitiveStore { pub cpu_radial_gradients: Vec, pub cpu_metadata: Vec, pub cpu_borders: Vec, - pub cpu_box_shadows: Vec, pub cpu_lines: Vec, } @@ -830,6 +805,7 @@ impl PrimitiveStore { PrimitiveStore { cpu_metadata: Vec::new(), cpu_rectangles: Vec::new(), + cpu_brushes: Vec::new(), cpu_text_runs: Vec::new(), cpu_pictures: Vec::new(), cpu_images: Vec::new(), @@ -837,7 +813,6 @@ impl PrimitiveStore { cpu_gradients: Vec::new(), cpu_radial_gradients: Vec::new(), cpu_borders: Vec::new(), - cpu_box_shadows: Vec::new(), cpu_lines: Vec::new(), } } @@ -846,6 +821,7 @@ impl PrimitiveStore { PrimitiveStore { cpu_metadata: recycle_vec(self.cpu_metadata), cpu_rectangles: recycle_vec(self.cpu_rectangles), + cpu_brushes: recycle_vec(self.cpu_brushes), cpu_text_runs: recycle_vec(self.cpu_text_runs), cpu_pictures: recycle_vec(self.cpu_pictures), cpu_images: recycle_vec(self.cpu_images), @@ -853,7 +829,6 @@ impl PrimitiveStore { cpu_gradients: recycle_vec(self.cpu_gradients), cpu_radial_gradients: recycle_vec(self.cpu_radial_gradients), cpu_borders: recycle_vec(self.cpu_borders), - cpu_box_shadows: recycle_vec(self.cpu_box_shadows), cpu_lines: recycle_vec(self.cpu_lines), } } @@ -897,6 +872,18 @@ impl PrimitiveStore { metadata } + PrimitiveContainer::Brush(brush) => { + let metadata = PrimitiveMetadata { + opacity: PrimitiveOpacity::translucent(), + prim_kind: PrimitiveKind::Brush, + cpu_prim_index: SpecificPrimitiveIndex(self.cpu_brushes.len()), + ..base_metadata + }; + + self.cpu_brushes.push(brush); + + metadata + } PrimitiveContainer::Line(line) => { let metadata = PrimitiveMetadata { opacity: PrimitiveOpacity::translucent(), @@ -998,17 +985,6 @@ impl PrimitiveStore { self.cpu_radial_gradients.push(radial_gradient_cpu); metadata } - PrimitiveContainer::BoxShadow(box_shadow) => { - let metadata = PrimitiveMetadata { - opacity: PrimitiveOpacity::translucent(), - prim_kind: PrimitiveKind::BoxShadow, - cpu_prim_index: SpecificPrimitiveIndex(self.cpu_box_shadows.len()), - ..base_metadata - }; - - self.cpu_box_shadows.push(box_shadow); - metadata - } }; self.cpu_metadata.push(metadata); @@ -1030,10 +1006,6 @@ impl PrimitiveStore { let metadata = &self.cpu_metadata[prim_index.0]; let render_task_id = match metadata.prim_kind { - PrimitiveKind::BoxShadow => { - let box_shadow = &self.cpu_box_shadows[metadata.cpu_prim_index.0]; - box_shadow.render_task_id - } PrimitiveKind::Picture => { let picture = &self.cpu_pictures[metadata.cpu_prim_index.0]; picture.render_task_id @@ -1046,7 +1018,8 @@ impl PrimitiveStore { PrimitiveKind::Border | PrimitiveKind::AngleGradient | PrimitiveKind::RadialGradient | - PrimitiveKind::Line => None, + PrimitiveKind::Line | + PrimitiveKind::Brush => None, }; if let Some(render_task_id) = render_task_id { @@ -1073,45 +1046,6 @@ impl PrimitiveStore { let metadata = &mut self.cpu_metadata[prim_index.0]; match metadata.prim_kind { PrimitiveKind::Rectangle | PrimitiveKind::Border | PrimitiveKind::Line => {} - PrimitiveKind::BoxShadow => { - // TODO(gw): Account for zoom factor! - // Here, we calculate the size of the patch required in order - // to create the box shadow corner. First, scale it by the - // device pixel ratio since the cache shader expects vertices - // in device space. The shader adds a 1-pixel border around - // the patch, in order to prevent bilinear filter artifacts as - // the patch is clamped / mirrored across the box shadow rect. - let box_shadow = &mut self.cpu_box_shadows[metadata.cpu_prim_index.0]; - let edge_size = box_shadow.edge_size.ceil() * prim_context.device_pixel_ratio; - let edge_size = edge_size as i32 + 2; // Account for bilinear filtering - let cache_size = DeviceIntSize::new(edge_size, edge_size); - - let cache_key = BoxShadowPrimitiveCacheKey { - blur_radius: Au::from_f32_px(box_shadow.blur_radius), - border_radius: Au::from_f32_px(box_shadow.border_radius), - inverted: box_shadow.inverted != 0.0, - shadow_rect_size: Size2D::new( - Au::from_f32_px(box_shadow.bs_rect.size.width), - Au::from_f32_px(box_shadow.bs_rect.size.height), - ), - }; - - // Create a render task for this box shadow primitive. This renders a small - // portion of the box shadow to a render target. That portion is then - // stretched over the actual primitive rect by the box shadow primitive - // shader, to reduce the number of pixels that the expensive box - // shadow shader needs to run on. - // TODO(gw): In the future, we can probably merge the box shadow - // primitive (stretch) shader with the generic cached primitive shader. - let render_task = RenderTask::new_box_shadow( - cache_key, - cache_size, - prim_index - ); - - // ignore the new task if we are in a dependency context - box_shadow.render_task_id = render_tasks.map(|rt| rt.add(render_task)); - } PrimitiveKind::Picture => { let picture = &mut self.cpu_pictures[metadata.cpu_prim_index.0]; @@ -1129,10 +1063,18 @@ impl PrimitiveStore { // ignore new tasks if we are in a dependency context picture.render_task_id = render_tasks.map(|rt| { - let picture_task = RenderTask::new_picture(cache_size, prim_index); + let picture_task = RenderTask::new_picture( + cache_size, + prim_index, + picture.kind, + ); let picture_task_id = rt.add(picture_task); - let render_task = - RenderTask::new_blur(blur_radius, picture_task_id, rt); + let render_task = RenderTask::new_blur( + blur_radius, + picture_task_id, + rt, + picture.kind + ); rt.add(render_task) }); } @@ -1184,7 +1126,8 @@ impl PrimitiveStore { } PrimitiveKind::AlignedGradient | PrimitiveKind::AngleGradient | - PrimitiveKind::RadialGradient => {} + PrimitiveKind::RadialGradient | + PrimitiveKind::Brush => {} } // Mark this GPU resource as required for this frame. @@ -1205,10 +1148,6 @@ impl PrimitiveStore { let border = &self.cpu_borders[metadata.cpu_prim_index.0]; border.write_gpu_blocks(request); } - PrimitiveKind::BoxShadow => { - let box_shadow = &self.cpu_box_shadows[metadata.cpu_prim_index.0]; - box_shadow.write_gpu_blocks(request); - } PrimitiveKind::Image => { let image = &self.cpu_images[metadata.cpu_prim_index.0]; image.write_gpu_blocks(request); @@ -1244,6 +1183,10 @@ impl PrimitiveStore { 0.0, ]); } + PrimitiveKind::Brush => { + let brush = &self.cpu_brushes[metadata.cpu_prim_index.0]; + brush.write_gpu_blocks(request); + } } } } diff --git a/webrender/src/render_task.rs b/webrender/src/render_task.rs index 70a37a4aa7..9d397ca7b7 100644 --- a/webrender/src/render_task.rs +++ b/webrender/src/render_task.rs @@ -9,7 +9,7 @@ use clip::{ClipSource, ClipSourcesWeakHandle, ClipStore}; use clip_scroll_tree::CoordinateSystemId; use gpu_cache::GpuCacheHandle; use internal_types::HardwareCompositeOp; -use prim_store::{BoxShadowPrimitiveCacheKey, PrimitiveIndex}; +use prim_store::PrimitiveIndex; use std::{cmp, usize, f32, i32}; use std::rc::Rc; use tiling::{ClipScrollGroupIndex, PackedLayerIndex, RenderPass, RenderTargetIndex}; @@ -139,8 +139,6 @@ impl RenderTaskTree { #[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] pub enum RenderTaskKey { - /// Draw this box shadow to a cache target. - BoxShadow(BoxShadowPrimitiveCacheKey), /// Draw the alpha mask for a shared clip. CacheMask(ClipId), } @@ -256,6 +254,18 @@ pub struct CacheMaskTask { pub coordinate_system_id: CoordinateSystemId, } +#[derive(Debug)] +pub struct PictureTask { + pub prim_index: PrimitiveIndex, + pub target_kind: RenderTargetKind, +} + +#[derive(Debug)] +pub struct BlurTask { + pub blur_radius: DeviceIntLength, + pub target_kind: RenderTargetKind, +} + #[derive(Debug)] pub struct RenderTaskData { pub data: [f32; FLOATS_PER_RENDER_TASK_INFO], @@ -264,11 +274,10 @@ pub struct RenderTaskData { #[derive(Debug)] pub enum RenderTaskKind { Alpha(AlphaRenderTask), - Picture(PrimitiveIndex), - BoxShadow(PrimitiveIndex), + Picture(PictureTask), CacheMask(CacheMaskTask), - VerticalBlur(DeviceIntLength), - HorizontalBlur(DeviceIntLength), + VerticalBlur(BlurTask), + HorizontalBlur(BlurTask), Readback(DeviceIntRect), Alias(RenderTaskId), } @@ -307,25 +316,19 @@ impl RenderTask { Self::new_alpha_batch(rect.origin, location, frame_output_pipeline_id) } - pub fn new_picture(size: DeviceIntSize, prim_index: PrimitiveIndex) -> RenderTask { - RenderTask { - cache_key: None, - children: Vec::new(), - location: RenderTaskLocation::Dynamic(None, size), - kind: RenderTaskKind::Picture(prim_index), - } - } - - pub fn new_box_shadow( - key: BoxShadowPrimitiveCacheKey, + pub fn new_picture( size: DeviceIntSize, prim_index: PrimitiveIndex, + target_kind: RenderTargetKind, ) -> RenderTask { RenderTask { - cache_key: Some(RenderTaskKey::BoxShadow(key)), + cache_key: None, children: Vec::new(), location: RenderTaskLocation::Dynamic(None, size), - kind: RenderTaskKind::BoxShadow(prim_index), + kind: RenderTaskKind::Picture(PictureTask { + prim_index, + target_kind, + }), } } @@ -439,16 +442,18 @@ impl RenderTask { blur_radius: DeviceIntLength, src_task_id: RenderTaskId, render_tasks: &mut RenderTaskTree, + target_kind: RenderTargetKind, ) -> RenderTask { - let src_size = render_tasks.get(src_task_id).get_dynamic_size(); - - let blur_target_size = src_size + DeviceIntSize::new(2 * blur_radius.0, 2 * blur_radius.0); + let blur_target_size = render_tasks.get(src_task_id).get_dynamic_size(); let blur_task_v = RenderTask { cache_key: None, children: vec![src_task_id], location: RenderTaskLocation::Dynamic(None, blur_target_size), - kind: RenderTaskKind::VerticalBlur(blur_radius), + kind: RenderTaskKind::VerticalBlur(BlurTask { + blur_radius, + target_kind, + }), }; let blur_task_v_id = render_tasks.add(blur_task_v); @@ -457,7 +462,10 @@ impl RenderTask { cache_key: None, children: vec![blur_task_v_id], location: RenderTaskLocation::Dynamic(None, blur_target_size), - kind: RenderTaskKind::HorizontalBlur(blur_radius), + kind: RenderTaskKind::HorizontalBlur(BlurTask { + blur_radius, + target_kind, + }), }; blur_task_h @@ -467,7 +475,6 @@ impl RenderTask { match self.kind { RenderTaskKind::Alpha(ref mut task) => task, RenderTaskKind::Picture(..) | - RenderTaskKind::BoxShadow(..) | RenderTaskKind::CacheMask(..) | RenderTaskKind::VerticalBlur(..) | RenderTaskKind::Readback(..) | @@ -480,7 +487,6 @@ impl RenderTask { match self.kind { RenderTaskKind::Alpha(ref task) => task, RenderTaskKind::Picture(..) | - RenderTaskKind::BoxShadow(..) | RenderTaskKind::CacheMask(..) | RenderTaskKind::VerticalBlur(..) | RenderTaskKind::Readback(..) | @@ -521,7 +527,7 @@ impl RenderTask { ], } } - RenderTaskKind::Picture(..) | RenderTaskKind::BoxShadow(..) => { + RenderTaskKind::Picture(..) => { let (target_rect, target_index) = self.get_target_rect(); RenderTaskData { data: [ @@ -559,8 +565,8 @@ impl RenderTask { ], } } - RenderTaskKind::VerticalBlur(blur_radius) | - RenderTaskKind::HorizontalBlur(blur_radius) => { + RenderTaskKind::VerticalBlur(ref task_info) | + RenderTaskKind::HorizontalBlur(ref task_info) => { let (target_rect, target_index) = self.get_target_rect(); RenderTaskData { data: [ @@ -569,7 +575,7 @@ impl RenderTask { target_rect.size.width as f32, target_rect.size.height as f32, target_index.0 as f32, - blur_radius.0 as f32, + task_info.blur_radius.0 as f32, 0.0, 0.0, 0.0, @@ -602,6 +608,33 @@ impl RenderTask { } } + pub fn inflate(&mut self, device_radius: i32) { + match self.kind { + RenderTaskKind::Alpha(ref mut info) => { + match self.location { + RenderTaskLocation::Fixed => { + panic!("bug: inflate only supported for dynamic tasks"); + } + RenderTaskLocation::Dynamic(_, ref mut size) => { + size.width += device_radius * 2; + size.height += device_radius * 2; + info.screen_origin.x -= device_radius; + info.screen_origin.y -= device_radius; + } + } + } + + RenderTaskKind::Readback(..) | + RenderTaskKind::CacheMask(..) | + RenderTaskKind::VerticalBlur(..) | + RenderTaskKind::HorizontalBlur(..) | + RenderTaskKind::Picture(..) | + RenderTaskKind::Alias(..) => { + panic!("bug: inflate only supported for alpha tasks"); + } + } + } + pub fn get_dynamic_size(&self) -> DeviceIntSize { match self.location { RenderTaskLocation::Fixed => DeviceIntSize::zero(), @@ -623,15 +656,21 @@ impl RenderTask { pub fn target_kind(&self) -> RenderTargetKind { match self.kind { RenderTaskKind::Alpha(..) | - RenderTaskKind::Picture(..) | - RenderTaskKind::VerticalBlur(..) | - RenderTaskKind::Readback(..) | - RenderTaskKind::HorizontalBlur(..) => RenderTargetKind::Color, + RenderTaskKind::Readback(..) => RenderTargetKind::Color, - RenderTaskKind::CacheMask(..) | RenderTaskKind::BoxShadow(..) => { + RenderTaskKind::CacheMask(..) => { RenderTargetKind::Alpha } + RenderTaskKind::VerticalBlur(ref task_info) | + RenderTaskKind::HorizontalBlur(ref task_info) => { + task_info.target_kind + } + + RenderTaskKind::Picture(ref task_info) => { + task_info.target_kind + } + RenderTaskKind::Alias(..) => { panic!("BUG: target_kind() called on invalidated task"); } @@ -652,7 +691,7 @@ impl RenderTask { RenderTaskKind::Readback(..) | RenderTaskKind::HorizontalBlur(..) => false, - RenderTaskKind::CacheMask(..) | RenderTaskKind::BoxShadow(..) => true, + RenderTaskKind::CacheMask(..) => true, RenderTaskKind::Alias(..) => { panic!("BUG: is_shared() called on aliased task"); diff --git a/webrender/src/renderer.rs b/webrender/src/renderer.rs index 1a199b6318..d76ada0831 100644 --- a/webrender/src/renderer.rs +++ b/webrender/src/renderer.rs @@ -67,8 +67,8 @@ use util::TransformedRectKind; pub const MAX_VERTEX_TEXTURE_WIDTH: usize = 1024; -const GPU_TAG_CACHE_BOX_SHADOW: GpuProfileTag = GpuProfileTag { - label: "C_BoxShadow", +const GPU_TAG_BRUSH_MASK: GpuProfileTag = GpuProfileTag { + label: "B_Mask", color: debug_colors::BLACK, }; const GPU_TAG_CACHE_CLIP: GpuProfileTag = GpuProfileTag { @@ -139,10 +139,6 @@ const GPU_TAG_PRIM_RADIAL_GRADIENT: GpuProfileTag = GpuProfileTag { label: "RadialGradient", color: debug_colors::LIGHTPINK, }; -const GPU_TAG_PRIM_BOX_SHADOW: GpuProfileTag = GpuProfileTag { - label: "BoxShadow", - color: debug_colors::CYAN, -}; const GPU_TAG_PRIM_BORDER_CORNER: GpuProfileTag = GpuProfileTag { label: "BorderCorner", color: debug_colors::DARKSLATEGREY, @@ -194,8 +190,7 @@ impl BatchKind { TransformBatchKind::AlignedGradient => "AlignedGradient", TransformBatchKind::AngleGradient => "AngleGradient", TransformBatchKind::RadialGradient => "RadialGradient", - TransformBatchKind::BoxShadow => "BoxShadow", - TransformBatchKind::CacheImage => "CacheImage", + TransformBatchKind::CacheImage(..) => "CacheImage", TransformBatchKind::BorderCorner => "BorderCorner", TransformBatchKind::BorderEdge => "BorderEdge", TransformBatchKind::Line => "Line", @@ -365,35 +360,11 @@ const DESC_CLIP: VertexDescriptor = VertexDescriptor { ], }; -const DESC_CACHE_BOX_SHADOW: VertexDescriptor = VertexDescriptor { - vertex_attributes: &[ - VertexAttribute { - name: "aPosition", - count: 2, - kind: VertexAttributeKind::F32, - }, - ], - instance_attributes: &[ - VertexAttribute { - name: "aPrimAddress", - count: 2, - kind: VertexAttributeKind::U16, - }, - VertexAttribute { - name: "aTaskIndex", - count: 1, - kind: VertexAttributeKind::I32, - }, - ], -}; - #[derive(Debug, Copy, Clone)] enum VertexArrayKind { Primitive, Blur, Clip, - - CacheBoxShadow, } #[derive(Clone, Debug, PartialEq)] @@ -864,6 +835,7 @@ enum ShaderKind { Primitive, Cache(VertexArrayKind), ClipCache, + Brush, } struct LazilyCompiledShader { @@ -917,7 +889,7 @@ impl LazilyCompiledShader { if self.program.is_none() { let program = try!{ match self.kind { - ShaderKind::Primitive => { + ShaderKind::Primitive | ShaderKind::Brush => { create_prim_shader(self.name, device, &self.features, @@ -1044,7 +1016,6 @@ fn create_prim_shader( VertexArrayKind::Primitive => DESC_PRIM_INSTANCES, VertexArrayKind::Blur => DESC_BLUR, VertexArrayKind::Clip => DESC_CLIP, - VertexArrayKind::CacheBoxShadow => DESC_CACHE_BOX_SHADOW, }; let program = device.create_program(name, &prefix, &vertex_descriptor); @@ -1122,10 +1093,11 @@ pub struct Renderer { // These are "cache shaders". These shaders are used to // draw intermediate results to cache targets. The results // of these shaders are then used by the primitive shaders. - cs_box_shadow: LazilyCompiledShader, cs_text_run: LazilyCompiledShader, cs_line: LazilyCompiledShader, - cs_blur: LazilyCompiledShader, + cs_blur_a8: LazilyCompiledShader, + cs_blur_rgba8: LazilyCompiledShader, + brush_mask: LazilyCompiledShader, /// These are "cache clip shaders". These shaders are used to /// draw clip instances into the cached clip mask. The results @@ -1151,8 +1123,8 @@ pub struct Renderer { ps_gradient: PrimitiveShader, ps_angle_gradient: PrimitiveShader, ps_radial_gradient: PrimitiveShader, - ps_box_shadow: PrimitiveShader, - ps_cache_image: PrimitiveShader, + ps_cache_image_rgba8: PrimitiveShader, + ps_cache_image_a8: PrimitiveShader, ps_line: PrimitiveShader, ps_blend: LazilyCompiledShader, @@ -1183,7 +1155,6 @@ pub struct Renderer { prim_vao: VAO, blur_vao: VAO, clip_vao: VAO, - box_shadow_vao: VAO, layer_texture: VertexDataTexture, render_task_texture: VertexDataTexture, @@ -1304,14 +1275,6 @@ impl Renderer { // device-pixel ratio doesn't matter here - we are just creating resources. device.begin_frame(1.0); - let cs_box_shadow = try!{ - LazilyCompiledShader::new(ShaderKind::Cache(VertexArrayKind::CacheBoxShadow), - "cs_box_shadow", - &[], - &mut device, - options.precache_shaders) - }; - let cs_text_run = try!{ LazilyCompiledShader::new(ShaderKind::Cache(VertexArrayKind::Primitive), "cs_text_run", @@ -1328,10 +1291,26 @@ impl Renderer { options.precache_shaders) }; - let cs_blur = try!{ + let brush_mask = try!{ + LazilyCompiledShader::new(ShaderKind::Brush, + "brush_mask", + &[], + &mut device, + options.precache_shaders) + }; + + let cs_blur_a8 = try!{ LazilyCompiledShader::new(ShaderKind::Cache(VertexArrayKind::Blur), "cs_blur", - &[], + &["ALPHA"], + &mut device, + options.precache_shaders) + }; + + let cs_blur_rgba8 = try!{ + LazilyCompiledShader::new(ShaderKind::Cache(VertexArrayKind::Blur), + "cs_blur", + &["COLOR"], &mut device, options.precache_shaders) }; @@ -1470,13 +1449,6 @@ impl Renderer { options.precache_shaders) }; - let ps_box_shadow = try!{ - PrimitiveShader::new("ps_box_shadow", - &mut device, - &[], - options.precache_shaders) - }; - let dithering_feature = ["DITHERING"]; let ps_gradient = try!{ @@ -1512,10 +1484,17 @@ impl Renderer { options.precache_shaders) }; - let ps_cache_image = try!{ + let ps_cache_image_a8 = try!{ PrimitiveShader::new("ps_cache_image", &mut device, - &[], + &["ALPHA"], + options.precache_shaders) + }; + + let ps_cache_image_rgba8 = try!{ + PrimitiveShader::new("ps_cache_image", + &mut device, + &["COLOR"], options.precache_shaders) }; @@ -1663,8 +1642,6 @@ impl Renderer { let blur_vao = device.create_vao_with_new_instances(&DESC_BLUR, &prim_vao); let clip_vao = device.create_vao_with_new_instances(&DESC_CLIP, &prim_vao); - let box_shadow_vao = - device.create_vao_with_new_instances(&DESC_CACHE_BOX_SHADOW, &prim_vao); let texture_cache_upload_pbo = device.create_pbo(); @@ -1733,10 +1710,11 @@ impl Renderer { pending_texture_updates: Vec::new(), pending_gpu_cache_updates: Vec::new(), pending_shader_updates: Vec::new(), - cs_box_shadow, cs_text_run, cs_line, - cs_blur, + cs_blur_a8, + cs_blur_rgba8, + brush_mask, cs_clip_rectangle, cs_clip_border, cs_clip_image, @@ -1747,11 +1725,11 @@ impl Renderer { ps_yuv_image, ps_border_corner, ps_border_edge, - ps_box_shadow, ps_gradient, ps_angle_gradient, ps_radial_gradient, - ps_cache_image, + ps_cache_image_rgba8, + ps_cache_image_a8, ps_blend, ps_hw_composite, ps_split_composite, @@ -1775,7 +1753,6 @@ impl Renderer { gpu_profile, prim_vao, blur_vao, - box_shadow_vao, clip_vao, layer_texture, render_task_texture, @@ -1932,19 +1909,29 @@ impl Renderer { "Borders", target.clip_batcher.borders.len(), ); + debug_target.add( + debug_server::BatchKind::Cache, + "Vertical Blur", + target.vertical_blurs.len(), + ); + debug_target.add( + debug_server::BatchKind::Cache, + "Horizontal Blur", + target.horizontal_blurs.len(), + ); debug_target.add( debug_server::BatchKind::Clip, "Rectangles", target.clip_batcher.rectangles.len(), ); - for (_, items) in target.clip_batcher.images.iter() { - debug_target.add(debug_server::BatchKind::Clip, "Image mask", items.len()); - } debug_target.add( debug_server::BatchKind::Cache, - "Box Shadow", - target.box_shadow_cache_prims.len(), + "Rectangle Brush", + target.rect_cache_prims.len(), ); + for (_, items) in target.clip_batcher.images.iter() { + debug_target.add(debug_server::BatchKind::Clip, "Image mask", items.len()); + } debug_pass.add(debug_target); } @@ -2314,7 +2301,6 @@ impl Renderer { VertexArrayKind::Primitive => &self.prim_vao, VertexArrayKind::Clip => &self.clip_vao, VertexArrayKind::Blur => &self.blur_vao, - VertexArrayKind::CacheBoxShadow => &self.box_shadow_vao, }; self.device.bind_vao(vao); @@ -2492,24 +2478,27 @@ impl Renderer { ); GPU_TAG_PRIM_RADIAL_GRADIENT } - TransformBatchKind::BoxShadow => { - self.ps_box_shadow.bind( - &mut self.device, - transform_kind, - projection, - 0, - &mut self.renderer_errors, - ); - GPU_TAG_PRIM_BOX_SHADOW - } - TransformBatchKind::CacheImage => { - self.ps_cache_image.bind( - &mut self.device, - transform_kind, - projection, - 0, - &mut self.renderer_errors, - ); + TransformBatchKind::CacheImage(target_kind) => { + match target_kind { + RenderTargetKind::Alpha => { + self.ps_cache_image_a8.bind( + &mut self.device, + transform_kind, + projection, + 0, + &mut self.renderer_errors, + ); + } + RenderTargetKind::Color => { + self.ps_cache_image_rgba8.bind( + &mut self.device, + transform_kind, + projection, + 0, + &mut self.renderer_errors, + ); + } + } GPU_TAG_PRIM_CACHE_IMAGE } }, @@ -2639,7 +2628,7 @@ impl Renderer { let _gm = self.gpu_profile.add_marker(GPU_TAG_BLUR); self.device.set_blend(false); - self.cs_blur + self.cs_blur_rgba8 .bind(&mut self.device, projection, 0, &mut self.renderer_errors); if !target.vertical_blurs.is_empty() { @@ -2921,15 +2910,45 @@ impl Renderer { .clear_target_rect(Some(clear_color), None, target.used_rect()); } - // Draw any box-shadow caches for this target. - if !target.box_shadow_cache_prims.is_empty() { + // Draw any blurs for this target. + // Blurs are rendered as a standard 2-pass + // separable implementation. + // TODO(gw): In the future, consider having + // fast path blur shaders for common + // blur radii with fixed weights. + if !target.vertical_blurs.is_empty() || !target.horizontal_blurs.is_empty() { + let _gm = self.gpu_profile.add_marker(GPU_TAG_BLUR); + + self.device.set_blend(false); + self.cs_blur_a8 + .bind(&mut self.device, projection, 0, &mut self.renderer_errors); + + if !target.vertical_blurs.is_empty() { + self.draw_instanced_batch( + &target.vertical_blurs, + VertexArrayKind::Blur, + &BatchTextures::no_texture(), + ); + } + + if !target.horizontal_blurs.is_empty() { + self.draw_instanced_batch( + &target.horizontal_blurs, + VertexArrayKind::Blur, + &BatchTextures::no_texture(), + ); + } + } + + if !target.rect_cache_prims.is_empty() { self.device.set_blend(false); - let _gm = self.gpu_profile.add_marker(GPU_TAG_CACHE_BOX_SHADOW); - self.cs_box_shadow + + let _gm = self.gpu_profile.add_marker(GPU_TAG_BRUSH_MASK); + self.brush_mask .bind(&mut self.device, projection, 0, &mut self.renderer_errors); self.draw_instanced_batch( - &target.box_shadow_cache_prims, - VertexArrayKind::CacheBoxShadow, + &target.rect_cache_prims, + VertexArrayKind::Primitive, &BatchTextures::no_texture(), ); } @@ -3473,12 +3492,12 @@ impl Renderer { self.device.delete_vao(self.prim_vao); self.device.delete_vao(self.clip_vao); self.device.delete_vao(self.blur_vao); - self.device.delete_vao(self.box_shadow_vao); self.debug.deinit(&mut self.device); - self.cs_box_shadow.deinit(&mut self.device); self.cs_text_run.deinit(&mut self.device); self.cs_line.deinit(&mut self.device); - self.cs_blur.deinit(&mut self.device); + self.cs_blur_a8.deinit(&mut self.device); + self.cs_blur_rgba8.deinit(&mut self.device); + self.brush_mask.deinit(&mut self.device); self.cs_clip_rectangle.deinit(&mut self.device); self.cs_clip_image.deinit(&mut self.device); self.cs_clip_border.deinit(&mut self.device); @@ -3503,8 +3522,8 @@ impl Renderer { self.ps_gradient.deinit(&mut self.device); self.ps_angle_gradient.deinit(&mut self.device); self.ps_radial_gradient.deinit(&mut self.device); - self.ps_box_shadow.deinit(&mut self.device); - self.ps_cache_image.deinit(&mut self.device); + self.ps_cache_image_rgba8.deinit(&mut self.device); + self.ps_cache_image_a8.deinit(&mut self.device); self.ps_line.deinit(&mut self.device); self.ps_blend.deinit(&mut self.device); self.ps_hw_composite.deinit(&mut self.device); diff --git a/webrender/src/tiling.rs b/webrender/src/tiling.rs index 7bb21a4687..255be5fd6c 100644 --- a/webrender/src/tiling.rs +++ b/webrender/src/tiling.rs @@ -12,7 +12,7 @@ use clip::{ClipSource, ClipStore}; use clip_scroll_tree::CoordinateSystemId; use device::Texture; use gpu_cache::{GpuCache, GpuCacheAddress, GpuCacheHandle, GpuCacheUpdateList}; -use gpu_types::{BlurDirection, BlurInstance, BoxShadowCacheInstance, ClipMaskInstance}; +use gpu_types::{BlurDirection, BlurInstance, BrushInstance, ClipMaskInstance}; use gpu_types::{CompositePrimitiveInstance, PrimitiveInstance, SimplePrimitiveInstance}; use internal_types::{FastHashMap, SourceTexture}; use internal_types::BatchTextures; @@ -401,6 +401,9 @@ impl AlphaRenderItem { let blend_mode = ctx.prim_store.get_blend_mode(prim_metadata, transform_kind); match prim_metadata.prim_kind { + PrimitiveKind::Brush => { + panic!("BUG: brush type not expected in an alpha task (yet)"); + } PrimitiveKind::Border => { let border_cpu = &ctx.prim_store.cpu_borders[prim_metadata.cpu_prim_index.0]; @@ -577,7 +580,7 @@ impl AlphaRenderItem { let textures = BatchTextures::render_target_cache(); let kind = BatchKind::Transformable( transform_kind, - TransformBatchKind::CacheImage, + TransformBatchKind::CacheImage(picture.kind), ); let key = BatchKey::new(kind, blend_mode, textures); let batch = batch_list.get_suitable_batch(key, item_bounding_rect); @@ -696,26 +699,6 @@ impl AlphaRenderItem { uv_rect_addresses[2], )); } - PrimitiveKind::BoxShadow => { - let box_shadow = - &ctx.prim_store.cpu_box_shadows[prim_metadata.cpu_prim_index.0]; - let cache_task_id = box_shadow.render_task_id.unwrap(); - let cache_task_address = render_tasks.get_task_address(cache_task_id); - let textures = BatchTextures::render_target_cache(); - - let kind = - BatchKind::Transformable(transform_kind, TransformBatchKind::BoxShadow); - let key = BatchKey::new(kind, blend_mode, textures); - let batch = batch_list.get_suitable_batch(key, item_bounding_rect); - - for rect_index in 0 .. box_shadow.rects.len() { - batch.push(base_instance.build( - rect_index as i32, - cache_task_address.0 as i32, - 0, - )); - } - } } } AlphaRenderItem::SplitComposite(sc_index, task_id, gpu_handle, z) => { @@ -984,7 +967,7 @@ pub trait RenderTarget { fn used_rect(&self) -> DeviceIntRect; } -#[derive(Debug, Copy, Clone)] +#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)] pub enum RenderTargetKind { Color, // RGBA32 Alpha, // R8 @@ -1172,8 +1155,8 @@ impl RenderTarget for ColorRenderTarget { blur_direction: BlurDirection::Horizontal, }); } - RenderTaskKind::Picture(prim_index) => { - let prim_metadata = ctx.prim_store.get_metadata(prim_index); + RenderTaskKind::Picture(ref task_info) => { + let prim_metadata = ctx.prim_store.get_metadata(task_info.prim_index); let prim_address = prim_metadata.gpu_location.as_int(gpu_cache); match prim_metadata.prim_kind { @@ -1245,7 +1228,7 @@ impl RenderTarget for ColorRenderTarget { } } } - RenderTaskKind::CacheMask(..) | RenderTaskKind::BoxShadow(..) => { + RenderTaskKind::CacheMask(..) => { panic!("Should not be added to color target!"); } RenderTaskKind::Readback(device_rect) => { @@ -1257,7 +1240,10 @@ impl RenderTarget for ColorRenderTarget { pub struct AlphaRenderTarget { pub clip_batcher: ClipBatcher, - pub box_shadow_cache_prims: Vec, + pub rect_cache_prims: Vec, + // List of blur operations to apply for this render target. + pub vertical_blurs: Vec, + pub horizontal_blurs: Vec, allocator: TextureAllocator, } @@ -1269,7 +1255,9 @@ impl RenderTarget for AlphaRenderTarget { fn new(size: Option) -> AlphaRenderTarget { AlphaRenderTarget { clip_batcher: ClipBatcher::new(), - box_shadow_cache_prims: Vec::new(), + rect_cache_prims: Vec::new(), + vertical_blurs: Vec::new(), + horizontal_blurs: Vec::new(), allocator: TextureAllocator::new(size.expect("bug: alpha targets need size")), } } @@ -1292,24 +1280,59 @@ impl RenderTarget for AlphaRenderTarget { panic!("BUG: add_task() called on invalidated task"); } RenderTaskKind::Alpha(..) | - RenderTaskKind::VerticalBlur(..) | - RenderTaskKind::HorizontalBlur(..) | - RenderTaskKind::Picture(..) | RenderTaskKind::Readback(..) => { panic!("Should not be added to alpha target!"); } - RenderTaskKind::BoxShadow(prim_index) => { - let prim_metadata = ctx.prim_store.get_metadata(prim_index); + RenderTaskKind::VerticalBlur(..) => { + // Find the child render task that we are applying + // a vertical blur on. + self.vertical_blurs.push(BlurInstance { + task_address: render_tasks.get_task_address(task_id), + src_task_address: render_tasks.get_task_address(task.children[0]), + blur_direction: BlurDirection::Vertical, + }); + } + RenderTaskKind::HorizontalBlur(..) => { + // Find the child render task that we are applying + // a horizontal blur on. + self.horizontal_blurs.push(BlurInstance { + task_address: render_tasks.get_task_address(task_id), + src_task_address: render_tasks.get_task_address(task.children[0]), + blur_direction: BlurDirection::Horizontal, + }); + } + RenderTaskKind::Picture(ref task_info) => { + let prim_metadata = ctx.prim_store.get_metadata(task_info.prim_index); match prim_metadata.prim_kind { - PrimitiveKind::BoxShadow => { - self.box_shadow_cache_prims.push(BoxShadowCacheInstance { - prim_address: gpu_cache.get_address(&prim_metadata.gpu_location), - task_index: render_tasks.get_task_address(task_id), - }); + PrimitiveKind::Picture => { + let prim = &ctx.prim_store.cpu_pictures[prim_metadata.cpu_prim_index.0]; + + let task_index = render_tasks.get_task_address(task_id); + + for run in &prim.prim_runs { + for i in 0 .. run.count { + let sub_prim_index = PrimitiveIndex(run.prim_index.0 + i); + + let sub_metadata = ctx.prim_store.get_metadata(sub_prim_index); + let sub_prim_address = + gpu_cache.get_address(&sub_metadata.gpu_location); + + match sub_metadata.prim_kind { + PrimitiveKind::Brush => { + let instance = BrushInstance::new(task_index, sub_prim_address); + self.rect_cache_prims.push(PrimitiveInstance::from(instance)); + } + _ => { + unreachable!("Unexpected sub primitive type"); + } + } + } + } } _ => { - panic!("BUG: invalid prim kind"); + // No other primitives make use of primitive caching yet! + unreachable!() } } } @@ -1502,8 +1525,7 @@ pub enum TransformBatchKind { AlignedGradient, AngleGradient, RadialGradient, - BoxShadow, - CacheImage, + CacheImage(RenderTargetKind), BorderCorner, BorderEdge, Line, diff --git a/webrender/tests/angle_shader_validation.rs b/webrender/tests/angle_shader_validation.rs index f4da1a95f6..4e675f5066 100644 --- a/webrender/tests/angle_shader_validation.rs +++ b/webrender/tests/angle_shader_validation.rs @@ -41,10 +41,6 @@ const SHADERS: &[Shader] = &[ name: "cs_text_run", features: CACHE_FEATURES, }, - Shader { - name: "cs_box_shadow", - features: CACHE_FEATURES, - }, // Prim shaders Shader { name: "ps_line", @@ -58,10 +54,6 @@ const SHADERS: &[Shader] = &[ name: "ps_border_edge", features: PRIM_FEATURES, }, - Shader { - name: "ps_box_shadow", - features: PRIM_FEATURES, - }, Shader { name: "ps_gradient", features: PRIM_FEATURES, @@ -76,7 +68,7 @@ const SHADERS: &[Shader] = &[ }, Shader { name: "ps_cache_image", - features: PRIM_FEATURES, + features: &["COLOR", "ALPHA"], }, Shader { name: "ps_blend", @@ -110,6 +102,11 @@ const SHADERS: &[Shader] = &[ name: "ps_rectangle", features: &["", "TRANSFORM", "CLIP_FEATURE", "TRANSFORM,CLIP_FEATURE"], }, + // Brush shaders + Shader { + name: "brush_mask", + features: &[], + }, ]; const VERSION_STRING: &str = "#version 300 es\n"; diff --git a/webrender_api/src/display_item.rs b/webrender_api/src/display_item.rs index 12c8815578..e5b8bfe4dd 100644 --- a/webrender_api/src/display_item.rs +++ b/webrender_api/src/display_item.rs @@ -286,9 +286,8 @@ pub enum BorderStyle { #[repr(u32)] #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] pub enum BoxShadowClipMode { - None = 0, - Outset = 1, - Inset = 2, + Outset = 0, + Inset = 1, } #[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] diff --git a/wrench/reftests/boxshadow/box-shadow-suite-blur.png b/wrench/reftests/boxshadow/box-shadow-suite-blur.png new file mode 100644 index 0000000000000000000000000000000000000000..a98073561e4d15023cd8b94d1910e632d93c26d3 GIT binary patch literal 36807 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�@WH&zk2(>dSmO8#0W-2I1cs!=ur5uh1Tt15RxiI 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 literal 29606 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

bX?Yv5cYe|a=V?%IO86YQ|SKl{agb!7LjQS zd6|$-nMT6aXZDeCBx~8kENLLy(*q1>nQ!KG_L(xq<3fmeABu&UxwEZio%?acFaHlS CoN49& diff --git a/wrench/reftests/boxshadow/inset-border-radius.png b/wrench/reftests/boxshadow/inset-border-radius.png new file mode 100644 index 0000000000000000000000000000000000000000..77d0976acfa7e141d9eebcb57f0001e39e2b77fd GIT binary patch literal 2391 zcmaJ@do&Y@AJ;sxkty4f=6RLHQn@PcHukV}F|jyl}eN2Gqc|NhSJ{J!UWzn}9x-|zXJ^L?D}`CKG<G=>qzV9e|WS8G_~aN*t>v^{zo@9w`Ef=NG7#I(cAsh%h15@` zhE=6#UDKe2d}FF<;WW*H<4j+Y!h$>v_2WZrD;1q5xEH>x4O2ryXTqMRj|G+S9Y{AG zSXvRdmiQ?2?B~h@p;JSgV=Q&1If2{QX?LH;6Ob?+O;joKnooieDd%a#-NZ&{wU6l9=K=~t`7(NLAOC-lRl3FAp z(ZYZekh*(n&6Oq@G3T~=FEi#HsmlOO+uK)Z2aTZX zVVNVXmX~})pUv~)5W)hysl3WsNYprkCX`x1^;OfK5KkQQBI0ML_ZyW3&Uzkzt>IQt zAZ>4$WnqU0ilA&cDnufd5=Tw0B(w<*B5aH7u(%XqQEu?H*F6-cw&5E~YlSvO_met1 znnK7ge9OLXygX3iN5SL32^|pzb;x_gh;|R-$H`|jyoVaBK|~{tMMD94cD09usOsUd zid}rHPAMmMmqXK~4Te^VR_&pEkOW)BU4fKqiJCIpa|z3Sn*~7-KH2L_tH~)+jZT3z z$92{Hqj-RUEe3h(r@IzuE82~j{5&V*y2UUK?c(ZMVT}s*_q@z__7SrEIsK_y=bdOH zn&kx$sr2pWX_ER6rg)A_lgVc#L8tdxXPo)YAoct$Q={yWe|Cdd(>T7sF0p(v7KYe(r` za;p8Sc4hQ$#RfZ5TO^B%ZugLK3ou=7))jvu2Oi8G)gC)ZXRUoy+_P6S^3jP#sYqm%t}u{E{j`u^ssjRRShk?%k|sv ze5sbQ=dv$Ez5Z^=FMadRm4wYvk2Y#FZ*uxm(D}KQKXn+oybv_{&9_jM_Y<06Djwbt z$^(u#d~mCn96HNd$&11&1U?&x+><{{vvjLs1&6ay1#;qtEN0NJ?^6OLvc*b)d!KJp z)i_;})GeQ_S}r+%I_1L(7F+>;yqKI;U)4gm8}(k+NnQ)c@rUAvm#8*@+{s3>#>g}GEK zIDTk0+2FD>upFAn1tDxFEW8I>1p?a$|3_ZZAR6c?ApCDmGGwd8g1~1B@zkNGUX<-! z*xQ=j;$!MWiPEl)w@QWr_K4cYfohD6aYxu<)_&r(sO`?3ZPZU0_)j-*pAK!ukED=8 z;CB`igWm-`{;3+j(?Gfql$}t>M;a#V{#v0iZPQTPG!z%ce~UY5oczbk3!Oc&b+-d_ zufqSy3skLjps`(xQ0!_A+G1*mN2_|aRi1gwf#v_(l?lIU9^3~HKt-Nr_3rKf=MFEA zff!U}G!$kJs3jV|&)6G`daiRU#?()?O{RK$iqBLM#oRo;xX;&U&Z8F*-+eGRuCAtS zX69S$>5$K+2V_42fXYUN_^87aS?3kPRW5FOH=YLsDfUt$mbnV&&b<_f9g31lH4BTKhbFJDCip{Oax+^1 zIC+eHMW_U}{iSa0M+h6k{@ouGEE=yrBYeyzdv@Nm zQSy~m(5<@yTSLg&kW|Xtej`gy_LB#_cXew#H8R3uusAZEG=?@?+NCvb^3Fnc&k0N# zYB>SQj6};!PLZ9~?c@qO%|~o*Ba^8`%;*qw5AS^8j6ht^?6sm(=79s5l!}XJJqkIT zRBBKgEG6VtS^KQ-IuplPV*RdX%zq|N%1loWU%EOF8AB&$P>+()Hz#x?0+Q~uUdg>R vBv<63qDX$M;dZkp|3y9i4=ed!p|9$xA9iS~-z|BdVoGWRtT(34J&f@mmyv0V literal 0 HcmV?d00001 diff --git a/wrench/reftests/boxshadow/inset-large-offset-ref.png b/wrench/reftests/boxshadow/inset-large-offset-ref.png index ef6149cff4ae262c63dae6a1737b0c4cc0fa8429..60776b8907994cf5cd9415a1267b055b61e3c477 100644 GIT binary patch literal 2163 zcmeAS@N?(olHy`uVBq!ia0y~yVEhNfpE%fnB3x_N!~rRmVkgfK4j`!ENagHc?J~_TIxBvJTE{3|3 z&yDv!FxmTIf876%><#&Q?_cKjyUhK+Fz5DX%e_ntZa+RUJ9K;)#iL;`ng)>5zzJX# kds&&GA$u@ZGf(&f-U~l8T9Nn{*ot8AboFyt=akR{05xwn4FCWD literal 3118 zcmeAS@N?(olHy`uVBq!ia0y~yVEhNf-#OTTB2fvpZy6Z4zk0ejhE&XXbCr>i!GPny zg8lUwTaPbbsXxceAasPELGclLgTO~-hmIeN3NC*b1eEF+I0Wq(S~}zzobXB4-`<_9 zyt7xMYtiYD6wi$saYvP+d|abc7yN&*;l%Cd62T5<8Sd^+xYK01jpcxIi#&sz(jSHo z0uR|6+BxhQY+QaYK2SWw&%iHO$57Gnftj$9-<%{U#%*4|FEh!OpQwKL|I^dY%nbX2 zRi*YK}Tt)NZlQl1i_O_fxb|h2 zNUDZ|5i~R$;+p1Enz$Urt2}%dfk#oWpcoEu{tXUroKV|X4~sX(!Hy|7U*ZI&j|c zM}6YLcJ>4O1ienS)%S~a8S;hx#Yen&$oQd|q~IpW&Si|G#U)9GLsH8fS;9$#3}cZK z;lVxl(jSF}LsEG2*G8;~n<|Dwv(Iyy`+~WQ11)n>)BTX_zk`YVqJl`*9N;0R96~ny z@m^q&bQoKk_0D86Td$}M(gRb7Z}+0=L}@)Ygvw)YRR0w3_UgFMRO>YX*biXvboFyt I=akR{03ph!>;M1& diff --git a/wrench/reftests/boxshadow/reftest.list b/wrench/reftests/boxshadow/reftest.list index a1ed5ea730..ae10061c84 100644 --- a/wrench/reftests/boxshadow/reftest.list +++ b/wrench/reftests/boxshadow/reftest.list @@ -4,6 +4,8 @@ == inset-spread-large.yaml inset-spread-large-ref.yaml == boxshadow-spread-only.yaml boxshadow-spread-only-ref.png fuzzy(1,396) == inset-large-offset.yaml inset-large-offset-ref.png +== inset-border-radius.yaml inset-border-radius.png +== box-shadow-suite-no-blur.yaml box-shadow-suite-no-blur.png +== box-shadow-suite-blur.yaml box-shadow-suite-blur.png +== rounding.yaml rounding-ref.yaml -# fuzzy because the test is a blur. Just want to test that clip out works. -fuzzy(48,3480) == inset-border-radius.yaml inset-border-radius-ref.yaml diff --git a/wrench/reftests/boxshadow/rounding-ref.yaml b/wrench/reftests/boxshadow/rounding-ref.yaml new file mode 100644 index 0000000000..e6e2fb8464 --- /dev/null +++ b/wrench/reftests/boxshadow/rounding-ref.yaml @@ -0,0 +1,18 @@ +--- +root: + items: + - type: stacking-context + bounds: [0, 0, 1000, 1000] + items: + - type: rect + bounds: [100, 100, 500, 500] + color: green + - type: rect + bounds: [200, 200, 300, 300] + color: black + - type: box-shadow + bounds: [200, 200, 300, 300] + blur-radius: 20 + clip-mode: inset + spread-radius: 100 + color: green diff --git a/wrench/reftests/boxshadow/rounding.yaml b/wrench/reftests/boxshadow/rounding.yaml new file mode 100644 index 0000000000..8078b2e1d6 --- /dev/null +++ b/wrench/reftests/boxshadow/rounding.yaml @@ -0,0 +1,15 @@ +--- +root: + items: + - type: stacking-context + bounds: [0, 0, 1000, 1000] + items: + - type: rect + bounds: [100, 100, 500, 500] + color: black + - type: box-shadow + bounds: [100, 100, 500, 500] + blur-radius: 20 + clip-mode: inset + spread-radius: 200 + color: green diff --git a/wrench/reftests/filters/filter-blur.png b/wrench/reftests/filters/filter-blur.png index 1c08d2c20f5ec064d0c506aa24256d564d25cc7e..9354e3225e5438969d69f1bbd9eff939bcf9d9da 100644 GIT binary patch literal 46379 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 literal 52906 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

@@yiVg+&`=!shtsa$DqHF)5wki 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 diff --git a/wrench/reftests/text/decorations-suite.png b/wrench/reftests/text/decorations-suite.png index b495be2e7628d0e100e3574ce70f0d5cf13573b9..a26f3c313d5e82a3b7217bc2ac9c049a546d9b28 100644 GIT binary patch literal 30464 zcma&O1yoh-_ce;eD^dzbmo(DdAV@bHTDp;xZj^4MK}tHMk?!u2?(Xis&%yWi`+wgZ z_kQDJ43V?<;q1MiSZl61=ORE>S_JVG_A3||7(_8qL3tRMCu`uJ#!FamgeTX|8T|L$ zMnFvACHQiEsqYU1LkJ@#$gkj-xLfaJt3DQAbeH&JL+nJ~Nx$@CT=lo!*9dH}wpATp zw`~9EdtLgqgIb%k*~%n>c@akJ;sthX>+3qRkIqjzv^}K#W^ueQ1qi>23Cu_}sU(xA zMzTm`Mkv@d@P!W8N9S)Vh|%VX7vBBh%vUfIYwhlnU&XUN4s&t`o1F02YY74eiG+W?#i7k%~o|L~^fhyx_(@98^Z zVPWam+D3(kzxfgz8j2Dk{DeNCU*(sQ8EXQ2ffAKr8CKa;;*b(EHYs+ zdT>ZcfPH62hkv^+Oq?VcHF}V7r*4ThYl0jaY3?r->W<0DxEz9@c3H)@k=-On^>n%0 zGHj|iYXX}Eg7P`~37B;E4_!IZw~YyMqZ2kfJF0_r>Ybe9nTvn!1LBm}UIf4q(f2u)48l-zyK8pu;S0Y&9GWCFVo2 ztSdo;shtZQ-D+F2Ub3(KQmy{g5CK&U0@JtRhbU@hHS?Q|><|8jvgtm?n4@oN&x)J2 zvPPZiPQKLLX?ApUz!a-cr}1Qu2DC0U8J3aaCk1%eoc)K`ue4R>(1G-b#?K~p5Lcl zdW%8slU?s=ChW>H%fimlohQu12WQSlH+PqJ?!z(th7!!DD=S$_%A@z)mpo@y+U;cDh++T@#Ik{ZVebm=6M+F{&MMih&DEuXiQvO>owyjHXBj>># zd*tMI-X51@d@w)4k$nWf>UsL(%UEm)D#G?<6(tQ#RI)vGt(JTIliDOv5&>%TRx{QW zEB3aL-!pq1hGjY>Dza##bdkdaA*FwQeHVQdX19VYMsyuDjP0PX06@jF? zm#S)ketd1GCnB6%^l=IpmM2 zO+t52pZ0QW5ozSglAliV)60E_iiw3g+TH2QBtBtw`Ud7A9B!~S77oa9k(f9+-{bx| zp3@|J{d(`pl^2XXDsJ;~K%tsYMg#sv;9HnJk4v4&iXc7>H|%ro9s!lQPM0t|3KIdDO&g^Dp=IWR!y~Q*)H!rWK z7#<$xcW_{Hb8|yLM0^t<*k)$^eg-`H;s$?BP0i-^c3O6}NI45Px0&(cTOl2@D{D2r zyQtwFahUbS<5y!Im(RjQy;D=)UEkbn?d@e26@@i7^Xsghd}HoG=|(VQ2$GXk>05Sn z$ox6k)$yF19q)xth#7ZHM{kezgM0rL{NnXaSYiFsw93lZ`FTz7DOi}8gt$nk0fLw~ zI0;d5$;K{Q9f)tGJuXkh?xbpBE2>K)?iwF>h}YI&67T*%a`Jk*x?X<#_z?jCVQ67t zaB-1v$to^9JY4LqAzcW>EPdD$GD|Ys?Xa>u-freN(Eic z9gkJw1mvce#2|EB&lnl0Uz>^EF{TQ?(QyFKl-m zm0C8~kYf9Cm}rA(YKh@g{7WgnYw*{`$iP1%6cQv%aX!?mjhA%N%Ov)tObc@yzpF1a zX`YL3U`pc4zucT3xwbAJ`z+N}^8yt$V=>u97T-;w&g^DOW~$PW;bT$~2sEE>`c~MU z90_YWJWa45`#!w0=`l6@TkfS>mk^H6ke_<_-yfNrOs<)DB^;%L_T7@wXD5U@v!whG ztu^Kt5)8{^hY-usC|Y1T{bU2^vyWQ!88cbC5?Gt7_(RA36hBl z8owy!!AHgq6QTCoc!q^S3gX0gN$6GIVB%-UMMJ~ovdPv2gCBm7`ltMM3JEXn%$&UU z`sj9WA{rfX%FZK6CCh7=k(dOPDt0VVU@N-W*ZRkg`%s?VPJm@oG!Xt?mwk#FEUgB!9O^Z#&;p@ZoBHay4Ad@KW{;3Jbnm-^k*Mml83>6 z{9HC=RXgWculc4HA>(a0*!y~pj&WA()bci=At7)Zg_oJ8JazB2gjH#^BuHNPr{VHi z3xuyVXmMIr`X=hB=a4WMWmD%4dS2gPPN|O z-EcS_5+)@jot~egAo)Sy<%7dMZTjLsucxmsNd2u-mtkqk9NY{$E<0}M^R14@=VA29 zO?&mi=Y8JsT(sx1SaPC*s@kcFzJ^S7x}G&272_$pZqWo4Zq8}uy2AX3u-=JB*hAy) ze0{=PtwWi^f##2dgssiZpCHD8;0UrrM9A@FRXj5ODwW3x+oZFL%^mqVE`U`LSd#zX z!3~;Fmd;M-v_!s_2rA4*@H>l|C`{5n2=ogKeD(hQdkQKlVoZcU*D?EAo=iDb>;#5h zOqYv&gM;~cW)_y=>FJ)-kA9mwJE+xpk%{$%brB^89t1F-KH&sC>>sf2Uo>I_2!q_j zw7IkdP3%I#MFD}9tAPa}$7kwco-JqUDOQ@wxg3mR3j*l6Ep4!@B#A|7ui#@cGD+z) z6WOPFHNWgbc-wtLP{c9yWfK>AlqBQgdS|^^lNaI8&<56by-ysh$zQ#aQ2k-$PAMTL zTNTNLI*`&oMM1&cj0(50!H9uM_Pdm2$rX-tviOKHCD6uYDhQQav(9#ea-gxdR;5^0 z=&c@Z4D3u3tYn-@SBv*=j}{sEJeckyih`pq3`Axt%Gi+)uzH^s=O^+$yGlmMi<2uF zcC{j#mUMG2+!dnNs<-95KfORM_IP;0d+*5g>G!Qif$E9n?ZJZ^0o&Xu&-V6qPJVuR zO^w=W-nnzV36m98NXV~2vJAqRnVGHaZIt5>Vq#(w#e%earQwImmF2T|8J>2JnL5>s zIb1wEsn_X4Grh64>1l>eT(9Y}Gt^-9 zb#FTTI{^O5N0V*uB?neN@=9_xCax72@xbt{`rR@;AT$kLaqunv1LGQLdCXb#>=4Jj zHBc>1p~3cVNLthrz5aF>$08)}~xVeozHnnJu; z)E;uHdyn@)5XnV*M!9vhwoMm^U!cB?q{Z!n&aY?Ag`@RUj4w8-c6PT*78<>94 zO;{N17gR7+iM>8ghO|0kcM{uG;r6!rbfkM4DFt6rDK!jUv{%nmA^wBJ?TBJnc419t z*ry=hO{yMo%9hk7)&kSCba6&RD^3psM%k46RkE*dYxl>%uWQsY*Xmzc3q|k*>=AY- zWneWvwCvfVzI>jOlk@ZU?-&l7^k3Fq7D}g zO|I*Y>R(S>Z=gMmFCBROv95mxM!o4pb$$5tDyn%00uu#|`o2+*o}Qi{(VI6G%uarI419Tq;P!@wqg~am(f4$mNhSyt>FH z><m)X;K=OOmxFAFLnnIHY zl)Lhdt{p}NI#Mn39^$qKJGdOqZ&~DJIGzZ}p#)pgPLGDv=H(HwRV*CHbZxHLavnKy z!gnQ1>WvJ#%ZmPHfgSu-I; z4M{1!Nc@_cdplb`t5_~No>QQD+!aBjH=;jglN{A_#0>ExYoqy4AG8;ObI-@ z@hV=LbO;E>y%Wv@J6K{mgHa(JG=DIb|1m93JhP}wkfjiGa^f&BFo=qZA|ZM61|W;_ zyg)w7x%b}Gu&}Uz(;)hjS6a&W&f#~mKMBE)9{CzMB1+gm>I=IXx^qbblW^yrQP1H? z+p8L5Gqa46lJL8mi_wu0qSGk5E#cg3u%nNAlzv;I8B-%>m3%#g#PBMFjDFzVqRT1iAM-yc{L*zjYS03 z4{mx%u6yN=h6Y{`y}f@#S_sYNdmctCeo1p4?0>PDM$Lu`=y1&KxWrtutu9ZW&=46V zPoY;+g=-S~RLS^2=kWw-hh_(s&wV`!S^xMohzFyh!~{ojo}qT)fqggA!SQ529HT^> zzG1*r`I@S9_oQ2@Pe2OuN6+Jm8XIyT=G#nvRH(_kDaeRK-&l(F$C==otfmh8ISwBa zfq<5Hu9f{|WIWOsu0or|L|XmZhY#L#TcN6kWgJvIYc)0l&ExX})q}jf$y&EW{4!Iz zB`?Fw=BQk1!a=njzogIHCDhk*)EQN55JV=)KufMtuqmvftTGa2mVtA|9DhU+*rGw~ z@WpNBth}-kOj1j8pci1QZr%A{G>c-vEQ898HwD=!ad|WxH&=7)`gF8Utp=_4kX|W2 z+L-y@nibS@;W9H@w$gVAv7QAX*1YPiq!IA~4IjTU$}d(IF}c;FUC(?fFkUgl=QI1D zi#=gJGY|7xc;JzOYDZv>{@NBk5(1JYxb&oU|s?=%0ViurK;QV*ZWQCABdMXwy z^X{)8?TdP(_PHgwWF%V)W8>gF>G$96=C#!`VofMfp%xS4v~4HL9u=cT|0stBKtFE^ z9e>U6%F*JqI4_Rpc@^%BLE8;ODo4k zYl8xWG;oI8n-_uv>qRtCK4;OnXTNgfC_f-p8gQoF5RLGW>iJSeZj zCI9hQ4YM8M$HGzw0_(+$2Efb%BC;Jz1@3Di#bQ}$GA=p zCO9HpWSdeZ@b_=l4>sPQG6r$R*VorykcenW8tH&+WP; z8LWMs<mRLsFEXJMmQYjSo` zGh;Kk3}f`YtU+8+T${UF8R_X>;HuNp)0?0usI5)7zjtq0vJy}#dT#hLxik?Z1g1Ey z>d3JI!xvPJiJhZbD*E#itq2e?(t2EULY4l{$s0~;Chh#CUg7VYsgGl5ICe8vMSZcd z)Wbl{8V-MW;a@Z%>(62MVQ z-Ftw}WXE-iwCKC8M0dr_5|sA_Kz(^?hynv^VSNS;Ry8|Tv!TCos&Ae9R6HWUc7@d# zf0bb4ftbx~xFuel76V{1%yHt2*f4#vEy`YKsR?Vt5lhaUo!Mor_3%SWCXbp1+$aj= zEkiVBNWYfhoe#7!a=EZL-QmX;}m* z==AgyFiLa?)~;PqA0892XGT|Dk)1(KK+Jz)C&!tV^xLa^2;TSU3$e%dnCL-k9+e*X z6?nUY9ir}aJI?GAbW1sb0Cr^oILjmSY@6#e$8$aYF9STg>oYQL z2{q@OAcnX%5~K{0F9)n#e9eR|w{EH$jFM9_>Gh|yKO?1Kv7R?cg|;+&6eM{B7xK{P6C_O@c|0MJEsb$i~GDH}?uL!2 z+KWptvGko#;ti)!$E7Ir(|+O%qlmycHYsH7-Era~!T!@}Sv+e2LK(&%aEij?n-8ObzaV zl>*(j7hh5U*SG7IgbJQV?KIOcwpWPoH6cm>%*#7{7%;nana{p`J&ciN!wG5E6-<{a z>CE3K2%Uh88&$9-Am)z+PMJwtSi*v*Os594&_1Sze#XoCBFiQ8{~iiZsR7UDEbhi5yG+Yqrx5 zA?hC72{#geerb-F4A=`~aFP7l3sl2y?5fpUzGwZQEHY#nq!=W*3k_)wx%}l$J8k#o zJ0{B8m(OAL)(K6rT&Z`UKo?6Az_W$HJ6{7-)}DxRia??m=YB&baN}W}t$=#;thBwg zE^AnIUBxdRuDaXy){<+iz#oe61E31foj(X0<1EBnL6rGBD(j4~JiDNbGtOYRgEFgg z9|tpfMwX9^%L+*)n4>8I2&1!YnX#p|Xv_gHP7Y)45!OTf?Pp^4hj+!jF-4TbGmQe2 z5e&~{z#^sp0GOc3M!WpKtFl+~oQzw7nL9&fQ%4~NJvTcs#?h;Q4&uU%@5-ws4vJf8 zj%dKY;Pe*ztgjn_1@k}L5+gf1kio=gDk-3`MvPWAs@3n!r^%N1#BOxPUAyi12}H!| z9sMUZ$QP0zHiEpNMvt9vRn%u>Z0rx%^p+)hu$fvgcgn2)1%3wV9e%D|2I_{csrznj zNA07dCEPXy7nxCI>OCWUOL|)%??DFKW;-7O?~5`{PI!|#Tl(Qq(Gr1(CVHGYSOcNq z7-Z%#sD`4!P%+IlMf+l}SSPHn`PE=)z1TN=iVhe)L+`4lKreWh5u3T?5|T zo9`Y3Hx2;8vftBnrr&4xG#`6`LHjTRp{1mJgVhpz{>>-(_-X@k)NiS4ZoZcB>(f>o zPXb-zwPI>^0aw75%Y2RUl`T_hyfr*cVsCX^2f>ClEls(;h6gFtmn8xI)L=%|;&(eW zh|KhU9268PCDw=&uSshidv$!P6MIXv`T3UwrS-XH%I@d#Ri(ZYzIvruSD>pnZr8X7 zFTJLKhSnEX?JYsJYHUqasoNRqDS*flA4|D1*@FH#ho8SWH0e_{%T5i?sTEwTc1N&h zOKxHhhHJRponk>t5XK81LVl$(&YhZ>seyn*e^0<}#M*GQA{Z&MiAR}M!BQ!qp{>*V z!Io;3&NadIP<-TX_6dqE=&P~dA04t{cM^S5;xEKaf6xBes~~-ca$@{*(HW+pm^6L7 zq^r=?D+lD+{yn_P6U7td+=7CP!otw0G9xCJb2BIf1rC&#qooWQ#l71F87TbN8fM_J zl(+Frw)XJg^YZcnw8|SsmN|;gG4LBS<+2hq?*n3~D42%@S;lD);OMCu)O#dsgu_O&HVCHTKa;N_fMV}_i7g%=jqHP?Mhw= zX}1cKCpjKrk88CN0nU8u_Op@=P9@g3M(d9#9RhgOE+l)*@xAO6d2y_FS0Agr@Tm1u zb?&IDJSQA!wp>{QaOT&|X;)h^PTX&8M*>J&m!)Ycm`4+B-HCCk1M?Af?)?dl2$9K> z_`*&c{TvW>3?*)p>V_LNZxI`ZJ&fTRc7eZUGN zkLHJUjCFAGVq+X1{O9hJoEzXoJf3}3wusEkOrYm8n2uAg_rOj;R3o@+mmD_xZ0#*}zowmw7t0hj1h`(gbp0XpU`P4fk zhOVDFZp5ecdA6?Iu_nEm8+NTV!oCopH3%*^Bo z^4@7?BLTrHyp$<&TcJ(|N$fE}D<<}J7Z|y%!w1n{oJB$T4m9w<3&g+Gei6MB zb7e%)fT%k3h;O*j#JvNB$Y4}s#{`)oYiA;@ox?3BHxE0eC&+q)|>0(#j zlhGKBo=ji6qP6LAgIBM}ZAx|A+O-e5a`q(M5(Zr*VF?l>54tNaV|1M0NKJYf_uz2c z(03KEpz6F= z2DifEo0Nc4!ia#5wi7W9#C@2G!c0G1XRe)koqIq+)t>KSr6syll6-DN2ayG|W3C&iqcM~iDPIzmiB-?RR>raBgu^;sGElr%p82pk_)KuU|}b` zo#Jp#G{U)sj52>A%9W4&E_C@hj0GtclDC&m!JP;@h580+tqJ|dHZ^s%K#2)bO)PQe zo$S?g??PrWI(;vHu#;$gP_JfII$$$sQqmidn4b53*jRz&3=0A_f*5Zlt&}_gb8v{{ zV8bSz2oojW<2-J3S_fm@oySQhbQl(8_ymP+;0DK=q4S2hOmZD+QJPTi6x* z3Ig6DWirrONWQLr*=%n8$Q?C&g3bKwk|V|DRW^)vOIy3TB#t>2PZ7V(j~bs(-rowc ze)O9SY&s!Y;Z&By_v@OOO;-7QV&u$z;&?P7jDulQLVura^(y7WNqEq7X!#?-^1E)@-tg5`?J{se}}Fs9gBNsY-_^VzN*!NL;P@-(P?q~`nBdtn{F{-ZMJ zEKd2NDIl`8n#(A80@56i*u{4;nAjE2fw5g(6eKF)M9!t!^z_KB;_C~OByuKe003QT z(aWg2Ik^7d;dXvep;1zo#?Z2Ji@vy7$o};!#Oohq>%&EUXhFEUn^9CGLvkZ(5*IcE znZH@`W4;S};Mda9YTl+a!UGB+pmohYrj@n_#Xf;OTx2+JqAmTNLwD)9!oh1Wwc$GO z1s7N@>NTalr~S6~g_mFDB@vgg#0qNne%&tkoN}2@LU`r;^pgz4T6AW9BopUsc3QKD ztpa!TvZ_5V-^BUB&Dq)cuk7y!>QW$90pHGlnD_4=2nk7WS9mJ2;kP!SV&!?UpIt#O zrY?D1QKdOm;MDQLaiy<;$FdBnsq8jowh&uO%|@xaKJi=*m&q1p$c$GI{_1&!T2A)N z9vRxJfae5&71)I%C;VHH$%|70JtLlu+Uj6OvIPe<$?+kcPbN>2k)iwxQy2j&d&?L5 z8CIGGE#qn=A9NLS7eqUhH*|H^*U<(D@F7PvvgvHTk zhGY+}lEkBc5JYK9ylq{5=v@E&>64N$oCCREddwDqc~;uD^~kVZ0Fj~uZwf2@tuBsf z500f8;#u{Qe}V``x11&xohbxm4K!-)O91NuM8%H~2r95rfMU^ji&jK9A~0k)78dm_m~+}B57SxxwfXRYYO4n)-kXLt~*H-sO^lhm8vvUd_FTfIoK4Lt0C1A{=`_wCs~>{g2~G&D3&zG`fY)UfIr#hUxc zQ)Xng6SnZiX8ba}plNoy!Q9!a#iXd29$>V|EH97Jrl&|O-L-d7^Pz}ya_*VJF%TM_ z?PW8Nu6j3FE|#CZaNK)c>dr8h0*hqzb>R>P>AOx!8Q`*Aj!FZh5JLD^ODOYiVSHyD z)6vt_AMGdMo;Q+cDF3VZq|%=%RFKF7)%{YEmleT6TVw@k-thr(|7sI|`>EZZKYwJE zl|?j?&TWK*UObjx334?I&U1FmZpU!x(a|u8<#tpj562iV0Bw?!VFA|D<dfqrNxU6AIYrR92bYP+i<4EC0krDf6N10E)( z=;SkLqo}i}Sn2G@4}>37Rk2uDSODN)vYh8$?@tf`NCX^+ijIEs@_8sF&)ROt@%f$~ zpLZCyZe2>L{oc|pTSbMMhN{*$UCedF@`o_h(8e#3xGXhtfanJGD6n4S6c%PRG$dEs zY%n_Pt8ee@GFH7| zKPN8A(0t(>OULMNDhL19-)&_cjRkZ&7&3PV`U%5S^IGkje74VU9KZilopPf(aD0lv z%4}S=ic5;zZ6{o$-bpC~pW>R9E5!fJp8joh|7Ntw?9*?H-qT*KPDLUjB9IRBXC^j^ z*^!oiGO>umUlJ3ze%NAbc+%8MSKrpu1XbyPlaCu88R$7tF)@J&-?j{wLp5hA3GP)N zK6IdZ(B7*-AK&+SwC_xPFxEAmBV8HPeKPQm`O*OEjMS`XLV^M<4IqG?9`W~7RFrgd zGSf1=N~cle7E!%DNG^o<>_7X-c&`MxwzrW6iIQDt&!`2)W6#3cubl)i(z+-_-*w~R z;Y|ky{DCAhE+dxBSzwguR?g5cdUD_*EjgL%e}938H;F;rq_F7RlM}g??6OR%g&O9v z9}bqma$XAQSN7nd-i9rW?ZQ5c`m3zGACl8HNd6C8@_4A0gO?PT$u1VlDbb!!TZv!4 z%mMr{&yqLlA4}I2obAB3RDZ}*T;=cfEIsnw&!>z&J2*J#nqqaBr|oUE=`z@vnMsBS z5^V#E$MnohK0c?d=-%$G0v8w8*hfF4-1_=@=qc;~!9RdwWI+$gyvx^XyfqN$ZjH_(_kLTsQNGe*F0bKY-ep_s z;aa((zMf~}z@1feOE^FuySu`6#Tyg1FP^Yn(&|*LEsf-E)rY!I9KszSl~8WQKJ=UV zw`EFkq?V5CWvC`7MLdqQ;5OEMH;!isQiuVK@}tQIxLbD4$SAl-owPecJ{4s7-WAn% zyo(Ij-?yl#tp$OA1Up2xY)a5#UzUPo6(?+W#+H!DSq!kNDTk=DRabC)3;>y0Yc2Hr z5`)FkCg-Y-{zN|i^U-eOv^ps2rG7d4cuQI zN=sjDVj6m%PQ?ZHkX*GJo29K&+??+{YdW|HGB9$(npru@m}89>bMCPQT5zBC{30SO z)+*vW{o@lWNAhlY0o@3gSa?`f8A&liLehKRS(`Z6+mrc!+6;t<2|KyY3b4%*{`vV= z%#>HJV$@R5uP%BB@kjvn7eE(gfZ_`HMHwRPz{Bm?Q=?1tOzNhWsGeE|dGn7&x&Tru zHNAiUP815|iMshDR9ZeOrMEfZP*D^ZvPi_WnJGh4>3>}xqSFlvT7B#W3 z$O6I{$hF|b*8VsNtyi;l&!4#5=Oh*Zb1e&Y_jm`0bs|P0@W;7)Sr*RrYFOGf>oeX-AKf3D|#9`X+txWsRhj2eLk(10Tu5 z*ClNrC27kBLCznYv+pW$xFGTU>lx>gWT^J}NuyHPqbBr%h|t0js#zyW@ssnJj5Fm_7>!B8rN@ z6b3{vunk}UNhrDxtcTGJBTnuE`{@VBKR>Fdz zj=%_usGsfBDelh0JCvP+QA<{{mh8CFT}?n?_sJ2=iZ8W@Iy=Wh`p3Od3)8J$9V4ep zKguq*)0kO&XH@*oBUmiIZ>!rfCC{X8%{9 zihv9TQklTLtg>tAl-csog(ajS8^@VPzkACT`?paBT4rUci_xcL!$u(5iINbNC!8$+ zCoHuEOcu_g30|KOtZkU3GuPE%1!Tpif=;)|=HixHRjf4VL2)cxxJa$%r^I+izEd`R zfUzWr@YMP1ht*wy526MIEx>xH{%l>>r9~i4Y@7tJ8>9@zqGg-uM?vmF6*|44MeV=a zceUSpqZ}>w!frsd_S{Mo&A6mjXm^!G5u_VnFBe28Ne+-0H2*dD^K8vDsGSJG?f=6v z38rQ^c|I$7mW1HZfBCfyz6twC&pj9(gKxbPFp5}h*yGwQ-i-J3I=YCaWDAS+7i8G0 z8_87Lm}|MZAvLf;-JWxXoqN`(2+vjVK1l&n85B{Lmk*7PcR*cddwT{}R`hN^q`tcB z^9L|>{aYU5O)gR)h%%t=aElpSL}M87Ig}yrQ;RQIQwP2*&T^oc*I4F7gkk$os6=%soX2 zUZ9*s-E>q$*%{H!xu|1g4%JsbT4Kc*WPy10(8PxsBQ;4u0NB)cl;95Y{xp`^yNzi;235QY1v`U`UM81QtcJr*2^hgd13+}T1G4YZzj`d@LXzsUbr()x2(82aB* z+{nsGmgJtDkyh>B+Nm_uuFuHbK9@DfU+XX^D*qplGU+bc+i;?QtDuGM@&$PwIav}i z9>SMxrtH8Wavps#hkbFJ+JBQuY2w_x+$ zprjO2pM3oPavZ#N?zwh91JKLrdG9}e_f=j_TC~#p+*QJVMztn~esZ|H4fuCo4vod? zmc&_A{qQGj4=+!CI{l9(_GjrFvJ8dc}L<4YgQIj2moP_Q+-W+$qFp8V`3aRC)| z`$paX$(%83LZr3i4*oE3&;9{9l4uw1^;%75Ijwd0=d0_uF~~ryOO+raYF8{o^cf;| zU+Zjdz0=iQHPPsVMDo0*80_Dwm+&ad5_Ffqc!%3mtAk3M;h7Xm*_hGTb)RwyODC7s zmhX+IjM=|3ffIMSW^|I7(X-H5qt!6WhOz_!`g;IPM$b3wgEu3n7t(>CBPMX zd8akUj#Id4|JT|5bOI7HKY;0f1urtD0ldX~JSQd38=MqQzg>A@eB6HoqiZp3Sf8 zDY{}YFMmTweg%B!qI`{J=gdXDd}O5_x^Utxbp6e9Fgv2Oda!F{0#18^UTVwvpmxE<>dOS z*M^$mC3Ii{hqweNd+793J^9D6bi6^Uk;AQpE}}Tkn%MC8IIMB+Ff^glLtS^E$7-#Q zb*?JpefsUDH^EVTY~w%1E`L&GMJagN4`j%9h5pKmNso>+#L6$98fxWb>$(&E4NqwG zE7e&^(&W#cJ%dUH(@{MXI6!I7f9Tntt9@b~2IO2o>j9e^0Hr|q(@}T|T`_2sxww*9 z??R1O%Yc`3&{YTAZl^zJ82ML{!cmlKw{|3a{XtO?q;i!G=?Yw4)U&9v`(Ko7Lk7D5 z%rH?f9_&EaefUl`$_*k~+Kgv!L)sJzv>|I!WH4bsaF~fK3CgZxEN@JHO!05YNP;CJ_%rpT&Gxd8iKG{`UFNFZ#N1A#7r&9Y7Vd z1WKNw#~F&3u5(099t9KtMzeeAfB<@FkcMC=cxhA)1=f6lg6gNB%sE8RbcT9Vz6GUbHWyjNgPf zC98k9JO)3R)g}9CxXWk3p~0`R3xN$B1{ijLVP<4xB=}#c9G7Kko3i#xS>jq%_iK*= z7cDmC)xyYje~^5v(S+U*p#e8dnb9En<9F#H$oNX&Xs+NRQ7*3n7W^Zg$c}O}p!lFa z1E49~NC=YO$2K&uaPV@o$--Bof0?cEN&^Sff_hY3s zdD%vBM}(6Q1J}xL5aa6Z>IpB^oaNni?}nR{4sF=_9HBS6c1bhf5(&c z(IcnBS{6b_4cXDz@H zXK&xWg@J;11lS{xbCyIn(_LRE7f+R|y6E_(Ou2VVL>HYb&i^CS@L6L_jO{!xkF5U( zs!A>T36%F1kg2YBTi>SK;9OBDbZdK*%Nz9)pI$T!oH+t%66|-UkO`Ic_xmdi0c`L8 zFT4d55pE!E^)!_ZaE3g2){O zFypzZh!^H4G4Yq)w3fo*7yt?$eGW3cW(}w*U}S<3;KO3hZ3o6gKw<#~!=D$|L@=bo z`~)r`{vjfUb!_EGR!t3r_P1r~ZdhEYQjZ^P&HtOJ^RK^a4PY~TLbtexM~fk_F|dOU zK$_r0V9YwWU}9!|P8jp!**BO+pFs%d8vH>CVvfJLcfHHSQ~x-Fxld|rSz_XH|85JT zFX#lv?~K00Jfb5!!VkziCcR|9Zz?TuD~W})gX-6+12n7^cMVz$i%PCN$tmO60xu;b zeD0SYNKl#$%a%^AyjiV#T*o>~p{^K8?)xr+t)E_utMZ?@!5mlGxJ)yO?GK^4Ht7@@ z|Hn^IzAuiw;eQw7bXN}{2FRLk3ls4cGlaW6?24greFDZc$Wl&dY!&-cB~oF{ zc5!m4?J3G;hb-HGNbiplmf0yA@}kf>K-?pj@g+$;6uPTXeG=N1Xk4H}OM^N+jw#Qg zifVws)Od5bA~M&QOXk6}=7^POwrZ7yGu4>>@!V1kv|W^Fzd_Q95X{S2c3BA%!_fy% zJL=!9pEj=Ed)#Gx@4k2tzw<-FzRW!aKDU_}dYqokc zf!f2wVb)mU7C<%9&AHVfDS-C464CI5Hi3Dmx=n&%8%gy;gj^`H4<}$A*TA9z#d(iB8d^*# zGYCt(P*2nwAe|`Nvg4w=GyvibD9nNN3!pElE;CZztm6$q818$k$6_G@tIv=XYI#dt zIy|-uKV-Fph*S1lrbo%oukWQ>R;7OoQiQs`T4uIqq7r&aRL!drY1bV$4rdN6O-xPG zGc$c+V$gvG#BRI!8nj~)85lBSvmohhZ#Fe(Kgj|Rik3C5}`OFht9`r`s3t`8CwBr8FD z2-+V5PAhL+NS!q*i7$OSAHf!jIkSbhSWGb(V0(jgqr&Z08YW5Gmn zB$Ua?vL}?CKzp`6xtjj1q)di+G6AIx1k2O2v*EcpDI+6tP>w)Vk*O&$2Zu^vIt$qh zcWDyVgBv9GJqrx&#_cN0l2AF`ym$eR4zBNuHIQc! zMKNK8s8m2f0qzh{pH8{z8)B54ucs$G29;{O-JI*;I|9%ro7q%f1ljV!4N>X}s`DrC z7;)lr*IaGKJym%+J*h%%xNDDt9|p|sq6P*p$_&RCEa%nF4;BW2+tLJZqV@Gjg@v@B zjTiJ%>+-QBV>rDbXvkR5gP&o)OOcWB7YhwD2z}sqyLAc_mSmrd?1CIsah>uZ0h)>& z63xP&LxQMd3OM6@K&6d!h#UY;G47^kzIIwmZ(~ZRw_Fifn1}UM9D*6dDKlf|GfFER zgW#*0itlM=TSmE)Y(cx3Q?xST&b~f*kV=&8yl;p!=g~4tL8HIWuD;R8)mXtgs|8a* ztuG6uogPN%cf4Ktf*BdU%qYedQTZt(`{M6DzGp>?uQXRGGEN>Hc2PQWl}-up)%06+ z1bj)hy4}Sq@)9)t%;ZT6UBZRS?^|p5mPLR)L~LVlg?oMpueD|hxTkwH!@xvGM+5Px473P^^4&XvHlYtdfC2}fKmFGF%K)>|DA@`9f9vvpWxnPJ zOYAlKrrwL@Hw_?RrLT_B2HcO#)DqOTwuZ@=zkT?+z5N-ePVvAcQc+RySIR<}!6B$L zR($I*U!ypS3A(9Y2epGPNC3ltJOivtB$x&w~St}4x`E@y^eUzw~?tP*g{~_uq#^aDQCkyi65l3 z&-_*Eh3D#1ltE*e+Ab?l6gA>)a7gLpibj;Y_nDwcXUL8@jd zd^pzTQDs>#L#(Bz%Ed+@zF7O4EcL=yetdN}A1FA%Sjx%C@dJniiY8>I$x0p8con>sBuWU1zy0p1tv~N}YUyE^g4a7*MlzEC=G+1=GQ);33fe4HS zlw$A)3`#8*c!38I+Gm=bP5y4FGko(YN)4*=|G$0-wCpW^aZHIDa4KUCtgCZnpQbV9E0CX0o3@X<-_h_w{M!tWx^3{rPrJ)ed zWx7<-9A}R>M%FW-n{Gp+f6RC7BtGT$t~@PEfoXYN!A~nja-4BCwLq57T#$uzrUk1h z?opSB?vo1dh;oDYbMFvdc>CQyvU(~WrRE!v)qO(zIwT%CN9rL2c4brjb z5IMAWbDKwwFMR|Q6cl73kk$g#GN|ndXtUseKdCABixN|2ykw_QWvo3oQ*p;Zn*2J% zIEXv6h722DG!REx+8sk<$#q7UNvr*0(3UB$}hY#>?x`97cyyoW3g`7dZ#bSN9KOZ z-J$1er(DYTYpLJx>dJjz#_67WptsxoSfMz!9@^mxEDl&ch1sC7yMA0Rj#O;(o#fr! z9g(*fvR{vW)L8~0pu~Xqex82Dv!zY%4?5}@+J%KVG-aGJ>Tti>q`0Ajzn}6mdv;+V zh0rz}xsjpVG#zGsr5z;()Utl+CY788YF(z@s;`I!s=SJI67J{#UOmH5zsFReR=Y!$`IE>N`d_Ec>>|{u)0Ur4=cz55zjM}-w@RN2+VX99 zH_)W9Jj$fh``XL*+>sA*H%#sN4XajBHpP%4r<;*1me6$w^K(HFS-m%or(J1!X8Kva zLwdf$+|01-FtAc*1>HiYGe%JjPiT0$iiJb6Cn%P6x+*Tn=ZMb-a#?pkjIL>&J#HlQ z4I<-12ObC*T=AFRaT{-QJbB999m!phC+$*%CggIUM9#IS(e%Q#uM<4V*BD7{I0@ss z(H#}(+dzD;C$U;ct=*xYZYDb&E<+ECllsl(gUwg+Oj%7+-UtozGEtr@5iC9#FH4pe ze`2+~YO%kbgve%+A_dOnQ)Tl?zMrxBNn^GoInamuUKyxm*)Q%Mq(PmS=t#5X=%yFj zODeAel!rGpQNNN)p?^2Rgyx6v1OyfcTKJs>bVVCp1t9&7jHJ!c;7@s{8NYfz)}bSx z=)qf;fJ@eXchUL`ysSHZMJ<68nU=L)>@30A(ebk!%{j6)!*PeEs>zWf>668`Z17U0 z22GO%DN=VsS|v)?*Sw71DBG|+SfyOlbVXFD$af|fyrm3QiNsH=#OmEHJ@~vvEtf(0 zIiCH=)C!%px5`bX-8%BKu1wqp;L|selU`LI(vc>Ft{^B~DPjyoO6UlY(3?mLRUx5-qC%vEA|>>4m*4lzow+mj z&fGulpLaMgIftBccHez>&+hX+?{gF%d)&T@^xmAT+xVj6As@EQ7bqd8|8{He)eAvR z!L;&S|D#3#}4HgX(2^Qh&{T;4f&t51n3wo+x;%T z0lUS+|2JHN3+ro3e-|ZTx2@9;I*Lk)FF7lEHKj~)zuFOyz3XUm`tfdX$iM*an2Xg~ zgGi0q>y@kafSfrT4-uRT*e4VZCB-}1Q3s#wkAm@c2j8x0@W|%Vr){Rh{e)u-nZ>seCGSA$YgejKE~j0Owi{qpTd7R47GiTZ-1vm^Z8AD zh+BQyA&c)W3XM zz_jMzaLEMO(71duQ+^mmT3c_PZC(#M*{bJ|Og@!znF-{p)u2wj9rOA^-vaS{?|p1W zbl`l-6#b2!aC*yLLNdAk+R0vbC&4ZH8f)k=EoXb@mP%4iPo1Gy88Sqh@v@>Q!yKPK zS9<|kZ^Lkz2Po};gj%sW9gpeQ?+xWpX%S@BCXvcG_d+u@89r`m4sV~o<{}#Y@zIZ` z>!Qh4Qqt5>EZKt59ML8(y%obhUbPebBxpMP{4H7Q*@u6wEgww8^6?vU(c-jkC+4#+ zBJV#wJG;H*+=c9mRTg0}wih}FQC8|Y_V)1b)(GD>{O=akS)?5(XFi-xL|j@_H}6#- z{~Jw89lCy>|A&X)9Gm}a8@vl1*tf&Xxvdqnm=jSH8%Envz7^+SZmfjcelGp=l%*kQ{AcyoL(lL>vI4Zk zP2~OGUEf@c_uM0kTsp|agwE9y+vm#ccBwd6Ik)|3LuMXb5e(CBRBE{+%Zr|kQ<+J8jxu*)gB`GQ0t@c|)~L-)1F8HrK1 z=)LbZAAQjmTWht~s%Pe%{rMOQ-B=vg;WAZIufHX*@NaO+#kh`;KBZ=3mNoR=c;1iM zp89YFx<&IyX~*JmchT(oxHvK4wba&KrGlqoo1uaOUMGds55?A+u2`7LJ{0!K-a9T4 zzgQI(8rE%%+1xs=AIbN|nl7_fNXB^6h9|0Y^RNpabzNf)MW~*zkEmA?1RAq^B#L~} z?`sK-$`m(Tg=8tdd4JOY0QX!#OyN2gSNG`XRc9#FSKJU~s%V^&#*kYnZdF;E zKR@~C#57d;bY62l>AGf~${cj5Xc1c(dTBT~8;z#0u4PVYq8_DNB4k9~a~quvQ1}N8 zr~ag9X@m2mc^zY#^V;rn-7gA|w)IEKPgU!p%FgwiJZdG*U+`H`&Y(-TX!Zsb+6sgp zUhwyKZDYS71dbKu6pM%U`XzI4V1$_Cz{P{J!e>_4kR}|Z7T&Bmerz|48eA8`mkO3q zSHZtiJzDl3O5GA%Znmd8N8W{39X|Zn-5uaYKkv4 zD!ladWpi_zQ%2fNYm?CckOmyqc*K@LsbbVx`}HfxXkv34t9ZB`-Rz1L2J41?3YM)4 zuXon8zLZ`Bxw1D8429q0y2B*r(|A3;}*8bVH5eSmK zMs~wUo^}iBN>0rA+>SSVdBilY8Yw1r--(-WEj2L-ft~2+Y>7Fo`vxkyE>yrht^Sfy z-LkDsYX3A;5xxC3Zvo`(No(R`hi7Db9DLqGG{2XZjX+`_PzeA9H&|eYO3Zo<*zZw5 zn*ULNd^dS6xwHpP^WtM;V|gHCx|&>SgueVsKQq}WVFog4w{idjb+KOhbZW^YPm5}` zC)`R(6tk>Mi+&^(2erq-r7d)bMH(i7`n(JP>21D_b7U!)*uSQfB*jVb3%rYlFF(0 z0X7E~5>>!g{9e3x3W{Taa=ruzRcA-;%E)vqY!zfwZedNbPGZ7!PmitPGIMi7Dh!R& zEjd}6{r&p#3-wk7Y&-%K+{fcz9&7yA^&0=eqw#t()&BnG{uj=LvdzstUVs1PdWw0} zLsMn^gy8k7OKZ}VHv-nm(ArKBFOvYx7{JwHphMUHe$6&t(YW@mn=@EHY&(yu*V?OD zAlL9&`(?hASULuVz8`ryPNyfw)la+WgZ{j^={QpO&}TMuw>NZm`X*f3;~l84dcev! z&*AQRMxIX6nP3)>G5lmD`2PNz?l~X=ByjaYZ%+9u?cd1wAkb)$od2$7Sn}j zes+32Ma~RI$;>T_jX)dq+~jQzWzmhTA%k7K!CH$o+I@o8K#7#PGG3)&2Pk@Sev8TM zDq%J++jBsUE#^a${)3YpfEhk8H#a}f8ygvUzuOE17nXJb)_LE{OPnCo`egp1kxRF~ zDt%9aPabim&afZ9Vqb->GfAjj#2}01Uo9fW{DdQuur}=kMR(;>vh-_oMm9BVmCzn(82? z-9I?^K$bl{GxJ7fW@ZY&GEpcLQ(Py1imtA38YcLYCNIx#ZwpX`vzk0vUFD7F$By-x z7$^yV`lfi`(Y?MyN;d&`s7K5oqOvYw22JdmVfPOH<}ti#=bo&7w+J|-Ka}k?fzPlZ zA&Ae41oQZiJHoaNKj;3*ZO-awRmdwgxhG;&!c4V;|*#gC6H>wp=g%eW-`>|# zbkBhz#SXC0SK~AQe~_#$%dUO&ORX$x z_VK?%d@Y~6eMU1#p=-98`T6rD@ayW<*|eM$)k?tC+g?9~WG6G1ouXPYfIFVwguwVQR&#fmx>!C0rF+U7*WgD*H>QFjkJti(p|FIP2IAc>J1??1GfTU2=EL839*24 zBOxvQ+VECXaj_6kPx=0&>Sd%Q?kf_6xbIq_y>ar3iq4^TE+=S@SbJxAU;;3J@w}MH z5CDXkG=Sb7J(qHPM+`$=W21sn9AJ0%2BoP5VY1^kv7Z@2$6qNeYNSj}T)Q56OvV|J zLfRtZEV7|2L(;X;_50M@0C|Y0p#{D5WbDjL;?B;_wx=a-kr)zbx!ZUA1v~M}r{UN0 z;Nh#!zG*+@0}4-fWMyMPz!7wox$UKq4J`FmWyWCabEf7?YOtdA)*1 zH!PkciKyEm8jvGb6A ztQT`8Ehu`r_NB*%u{F=p1O7p_;#R-ZPryDnD-vMp2mQ^2IsyT$O|R1(FQA3ut*zpw zoW8Rvv^zibg(qB?mmm~g(Wgg1Y?@676CG_`P_5Ulh9bNi##G{X8&6qoMB3ZB;)Pg< zwRo>qThG?x0Knc2p8p-gm5$5~v$6}@cano`7oB_6KJ{aYI0oIu|Ep~gPyqy5g8d1> z-Vt=BYNtNtiE5{~kkiB23>LdUHM>xfY0%+nt-y7h&6f;a@8(>w$uk23@2oU7D`ZhimhxZ23IvZ8O}L2wdI^5R^tkBbI5WIvD4<330jA$ya$x! zUOn+qa0ufTn-| z9heI|b9GhcW(4|-dPq-%hcIfl=AJ*l`NvpNxZHo2?u2eraOV3Rc9E6j$ZIVBSu>f| zxwfBHelrCV8C5w)GC;b0^D#wT@uiNp(=vwYbY1pGWL&L1T}%f#*Z?zC%=Phrk)3yy z?5x*&Jo<4!KtQ|M$A|}UK8@2$)yWO~jx`Tt%({eXYchks?U0HmzW?r6{xR)gXSuUI zpQUA(wYl*5i0O-%1Itqm-0k9W-!w|ui01LQp`p{2PCNFtNY_%WxBuqqxt=b3hfFCx zm#W}u;@mx1v^yf~v}y(i2RF1u4+i0c%pgc9ugHrIL0FTDm4R$mnxEj(HT>C>kBBYA z3vn$KvRjvTe_~BN9;WMh%$hJ?e$)9xQdwE-Cgf8xNH)T34XKEqdHzGVbngL)=yZHQ zI_o|YO+hHd)1$4kWF)!gf1=`(lJrEG`xM7RS_RC?-<>%E=(_)L)}Srtpv~T!ghn8@ zcGky%vtqaJfXRKF=X8)@vHMb23@1gvTEBkbZs6!CCoC2Ww?UiG4+-P6GE?KR3DL8G zBrIS-O}Y)ewOe2ZOIF-)0o$~v4B&Ku7})T{M12krCV}1rJHK`hf#R-jhNsPIQmV+6 zMJ-yPH^!9B50tY6ymbuc1E&sQE+NOnwhjh(`0h4Y?W~a2l};5vW|x_vYPiC%fU(*#MuLm*)fr?q% zgHM5HQ6>3H7ybM!$CJ-w^UCd?q+Qp&y25{Kx=3md8ZElmp7XnqD=Q zgz4!gOnd5RXiz?>vValw-~-e^g!kY8R%cVOjYiaqF~4U}j-6QZ3|z0Li6}v?a9(dC z%1ob2=?6Sqara|yc?5Jp!}@Hxiqb8BV#pZP&L!M>*YFrs45A2)ydD*Ryy@)sNNa*f z)`n1sRM~sAy!=SAM#Y4BbU#l-17tjH+l|7!h(KO#+#T(A6Ha4{=5RXwVs1}I*(b43^Rjx0wo#0}u%0y>W4gX<93FnMWon9i2jG9O0bNF5 zjrh&C(VyWW36HP4AWJXWf+K#D?-JjMX~~2pO=7XpCY4Pu_l~kC&BGQHKqVyTD0>~5 zKv?+4v#a1QC;(W+s3G-x9yqMq`KtuYwz#_atmXKo`_pg9ML^_09;me;cFA4dDWL-H zj<~jfF%pZacw%aA&rpj`_#J+vLl&XLIAI1 zpv&MAVad3DrTQmRuiJ$JFME3~uyO#I>p;ijzflCg7cpdHpi$+BT;_cLT#6TiMIC3&pR@ULs z(Q{`C#?L%GwE+zlXzp}TbM#$qz8{+vL{t?6S!mDhzIBv*14MM=<%gibrm7l9eOew7 zI)pJ8-e}0Y>umsi{*0s%0j3PVz#tn9EX|IB+WO9|M)^mf0|r5!EU?=fO^S%O%N3QC zmCGe$2uYr(GKp>d8xp%=SqQ|#p^tzoaaI~2jGd@%Hz?)wa7TGU8h)E&RDjo|d(~UE zWXEzT^*oPbG>~;8`>@}_nRJuy&$u(H{kM19l3yVgZ2v`l9-=C-2_z>iZHp+q!l4#R z7P}Qet$FgLEwW^2X?dcOeHqWpz>}|?VaBDA{hx%C&KG+ma!@LA z<`kd*fG|DvtskYEm@BUEj7oOW*q0*I%iUYlH=vxG!|*WBQy>i}O-!JwTI%WNm9v+U z*;vV1?T^bds?KgtP#`!O-yYE7#hi~(Z(A(#8GQf#zrKn>Ma25_JbbvUz!X=!PRA3K zO11@>GAfxh_b9V^z*#%ui&%3zu`q5k+hWo4GMCSZ7%SK)Sf?3OoUas zZzGmYj+v6_&4p5(9!cI=X*e)#GLz+$l2aSq-e%xvnOvshGL7ZLRbgEEE&BL+~3*SVbj{unvyY~qJdU0NZ?J|vS7_#HIrT}I`lyy{El2gVTxw=XU0 z(DGno++6<`2f>yi74I0yN@%xg9~aF&7)@fV<}J=L;p7zir2g4HFKpCH0Gwx;@@PmX zTQM^nMU`_P#6OyJa9O>_vJeK@AFqnWGcA`Zcu3!Km@GwdlJde#vH!WqOwrb$LMGcD zF%-o?f6oFpX8!Qrvd(cy1s9K_mT|QSWWj%jMBdIVAwjmiTe{%DNE?k2nGU3LE>^I$ z#So13VmS>atOMSv)^J@gQdxe1Bk@HgKQKJe5AuXudNMN7wpYi>NJA4jf{ZLK-b^H9 z20bkyBV&Gl_KtupC*0GWL+q@tuPbrT=YByE7pXKWEQ+yO6Es_Iz7^oZjdEYVK%ST9 z>iy}H=(+_8<$58Xc!#)|)I0wNZNrosHd+Zgt0dFoSRo#uQN@?4VuBN3V`IZ^X1Cmg zUU%&>qW_QcB>vtie%fGDlF;cs5S0)+>hIG_qBMFc@;De)cU_l*odV2KrX|X^s$EjJ;AHau!y_u31#G& zttYMI}XVmT$a0CqTuQ9WJvfBISVXG`iku_Dg}mj8xV zd{4Xn-Jy4rSjCy}EQ*}c<5`EayNG1~*Us-(d)#!_z1t%3-fZt~dDKh3z2(_8@TG&E zl3MJ0^rDtmuZK!v_m3#S>k_}BSs4DbzjK=HY}~u0e1VeM{mXB8o0#+ZsiLP&AveV8 z9NJWG%2%;9>ZMO7OfPEQ1lMhk7N6@A=z};=jQy4$cX&lk$_l(xMe!1aeQh|1YIo8Yi?pUqXxBOPSKI650=7`c0R1WwP*#k=?*IQ%LymbyJE7P6(3uuK4pNORtt3fh(gs4x=oVw2<1Y zD<&+gAYk(6DipFWGoSEzv$p59oYQ)$LLBBqGwhuSPCP90ef{T6#LrBV6U!iU(aNz; zIAo%9zT|T?aL@A(0x;%1*W_qKY3DE0f6iI4n}C}$Q=HeU%W2ZH33B2}kGY7M5qLpJ z^GHemoZXl_)B4W-TB_|$;wENBxRyC}S`fd9VSS=&{Emv?Ypc4H?NMExvr_KkW;fwq zU6Hd=Id4woA${u=6~Q`RpmN35$6Re9hVZ+oTI~6?)N4XhW5G^dMnS;wg$2azTNB4F zwlXJtObWCqK=#x8a_`=G**(J*e!rkbGf%iiOJ`)zeEAJe_{ma0ki3a>=_+D8(>#Fg zDXmVoPp$2@@*R#hT=Qer=enOOR<6VaR^<$2b&Ui$QN6V93b!-#QVToIhJ;q;4A^~- z3vx=DlQsUKYuEh3K}QXKyfx)ZbqJ$-8szi>gDP~-T(G3OL-#$bd9h_CYszZa`OH=r zgEttRTlrbU0TP{5Y>C;4P;_VZqloW4rguhp}mR6aRb$) zEOTJ$dX;dXC zNZJd9HxB=3juU|R(Q})4d7zjM4$$px{l1Uz?y$+JuTi9o^E}tu(9h?(5(=6&w5MWq zHWpu=vPpRVvp;2?NwFNsUE-xsdTD7w6YcN!h;-UW^sB2RUnB@_|Lb zXQzHs;I#tLp1&pipk>!ix0lVazZB()sTVZW2hGvM(X@x zMPR<(NcKGB^UrvKT$PJw&AT|y6;2cjSs5$8=ut>Q48cb|fZam@-+!8&(_Szm6f2>?dcxS=iq~ojNnIKL8$nx?qs73*68OxlHrE@^h;vBQ>4PouJF~ zC#|Q6iMxOPir!-~de!8gIrO`YB_4lAVrMx_{%ZVkysebVHMYvF8-A#9nja6T_-FuMV9!*B3AbWXweekej|rJJNH(5I6Z3pg=%JTo^Nxh&0rt!w<}+6ttIUrxIjetmly;G6!@1GV3BGS@KF z#uISVzbE&ni=E;=!^zs>!iLN#tXWPYD@&TAp>xK~y*2XmR`xgYIWh>_+?V?tVW-;! z*}4UCSsDZQ!o-Su;mnrw;f0o$SA5vLu+6Wo8e3ekjSh#c+J$UpOkX^-`fd{zAnRQN zLMCZ7ft`U=m!C3U5@I}|*)!em70$W8X?Mb<<>aAOJQykAM=-K)m0N^!xCjwe~wMXRj% zNlCn?i;+iM(U6RM$@c2Hx%?;P@=qV9D`o&);6VUZ7>k~*q+a$O|2okYQM|kT^}t5i zzHnv%fpo_W=d3VYDBdLwDJqtoWa!>%bjFv}m~vb(lvW6x{JJ}we88R(`?I|Gey^XO z<7EGD!$hx;klca7!qkUNcBC*j{J?-K!;+)1+?SOWPBxRlae^_d!m422yxe$a_t4b- zbw~Xn%vpOvw6StX!C-0CCv!KvW}qw-p)Y*wXHP`?+fy!YS$asz7M)}vOhc!qn!Z%} zM+>cGKBTpzAke@Bm@t^WZWJXJhlEzb^uAl@U#hzT1XEe)gcnA} zi)Qk6@9rE*W#}yY9c`0UDyMc|6)i+!RVxs_PxD;y>oR=70@93$04D`1_YT3XUuNO$Q8R|r^;rK#B+zo4+JwG4Vl3c z5ZZtk^HB=c@c_SJahZn5A9zD2Z^`nUOIXP|miaARS_>P$p(ypW+g~O`>sq zt7hF;4`QTQ--4?GlTl(DLDKDDxs9i^EWq0gZkbmZs=UQnZt8XU?4i+n-`Agq(>zfq zVf9geOi9yFg@4uE@DQ@-%2;dt|59Sb9(YszX?-Qi15-J1Px+n3JB zKYKWKTq9;gykW20T&`wl<&{0uG~|gAvhM6;I$9oSH!!fgXV$FMPd>9?vi_!XvLqhb7;~ThbFyi!aAqKHY7iL)x!rye_^LC(M8qDbY_!vb?G?mfx~tA;nJFWBhK+nf>Dnmz#1#--qHkX4)qsZ&EuKz zBI?^5_e-JS^1`MJoAR>SLy|SVILf*#ElVh(!Gq&N9%bluL^;h5cN(YKQZ-8jQ$zs4 zr+7E6XsnF>0kIrW-SK$v!Q69FcrBjp-{yYm%%qwn)XNOsIhQFdMd#11H0%anx=~4= z|C5EcI5mh%HuEm@liAJ3HMJcnE>aw{EOEuNq~|rSs_ht`S(ex01lXm;pM4#uKAe>3 zR~4Qfn}qoKE{BG-x|-X!S&BPWlW@{-glYFqVE@J3l@{D_@vAR>hUO;kgE*hT@7;6S zsZs7GX(gjGyPw((?}dOd1pY(l%70dAmP5QpVOw5G|0ptz+F4C&s?Jxs47{$_b7 zH>1E;?t1CKSB;<2BM@`(V<^5Xx825hO!_0@9*3V8+>%3I4DJFoNgVLA*U9@^RVIyE zF89diL-H|e)QoRJc#jktkJpc@n*Pey;-k8 zPc{ieEIMh-ZL+^Xe`+|nKFZxg+!~BJAu#KVBj1UBn3x3~J(KM(pO!dD-B4LGupR2- zhPRR)3o6VjBW;vP_hH9yz8K=blw(1QGRmX8cFoNVk82r3XOhgQ0HWsjCbcyv7UF-O zzdx0oIMZ5x!FZ9p?_(GI4PvDYEkI#c(5SPeM}WOGfu!{N!MNyH zP1r-w7oWreU>&$AkBj-Au{+>z*U__u>NG4}?mvEVt{lHD;{(X-PCq`Q7 z3|aBHpzvrk{5JfyeUV4`iwd;wrD~kwxQz$2*7^ZH4Q(mbJQOv6`O)|Yo;ETDopkOz zXhL%v3?%&`&Hjjq?K#1lw$>1@!FW7LX-z_P(^U(6}PNP14^XsteD8!4gz7)S7>u zlRm(&+~?<)m3$Z0+}LP+zQCCGO_Z*p*mQd2?ZC}^AV$HIQ1TQ+efn(djEj9*jiVUf z6}ltY*{@5`ln+8u40V+X3pKy}?pJej)a1{+`leI!+hcI_rB2evO%4uTN=jZnzUAv6 z#44GQVWHnUEO$knS#6?mv6hNrF=*uund)pCS%b>aWA?DsduP9X;forJ#C007?T`h9 zXKpS=a#;hA-*GF5NFGX!P@ z-mfGbvfsCKLu2P@hy8I{&q^6gAM%#&(i?UaF`xO^p3=&OGjeqf8&!GVuP$D{bS~87~xPYKp%0i{`K$C+iV)cDPNO1Eq%9sT8s&J{!g8)j`WM)|`-~e+$xnGMnqQyA5l1fh%5ULul zScjYJq=ZdppMu8~?-uYYpY){8(Uoy$6A0eZ-h%HVqxyv}b;*XSA8af1kt^OsYVHBj zyE%UY#BEMSmUz!j$Vlq!KkPn`X5f(G$){t^M&?4h#4?uh{mCrumN?Tz$jRQjTLk3S zoZrSKI)a{)(ReiVNeGE(vcrG?0MjiM0nFP({fGRce4H{{vZQ!5@r&|^zYfl|Q0-a} zD_?lolsJPMchB4eb&V>JI}2z;J))~9y$n9wqc{t#0B{t95&r+~|H&Fh;d_5KSQYPn T>jbZ~CA+T$(X3E+c=7KV-JPwku9XMjx~%e%h)Mn z-y<6PmcEBxz25K7=kxph(T&^WHs_q@Ip?~r$K!E-hUw|3Q(R)abmq(%3XNMTcg~z4 znF0Q3gDwD{5V9X9ojH@NtD&NJ*CTZ`x#J0qI(;q&KbJ32c>Om%c9k*go;>iAPqQgUU*OISO}#*F#bTPI!g zVtNxs=_>M~hpZVarAt`13uZU>e-8W_J^siq&T5dM7wU+Gu@(ACNt8is-vx%pQ7~`7 zzU?w&zj?fS!x|@XnS%>F$>FDfJ1@xaI)m=UjYh@q9(XA2dzT2+vyw|38gUKaKuiW? zjvRL_i!2si5m;KvnWqblFJ4VmXU@&bdl3$s$jag*2wcBoVuIWW4i3&u4SDo2@j9!4 z!N9F-ugAJ9h3dWu-rMaNn8x2L!a|?Li`#?Ad2Ugxd*YhhP#l~~(@V@*m#s^p%ZYcDWv@BYD`~M)^#Juu?m!4 zx8kOFahEx1%{k3D;%4?;VjV_aknr>Oy>@owr~E{*8_deW(rC2TRa9PGZSs9(#a*1W zG__Qn{GAj714GNGs?*r3lpQxWxBlK8yTSEd+n4UZL=2OkfO*dp z7Z=;$t$P$CnaZy*R(2+qSgdlkx_+%^5E(G?+VMk2F-1J_@ju5f(K?^&OMc9gWn*of z4YOv1cMpA!{UPmsZE;$8E~~ah;@I!F);M>eYlIPY*mUnqGK?Zk>c~?{4{G=lKI5xc z#VV^SI;b3Xll!s#w{0c)PmuULUDfyI>NcS@?y75(>RhHy=1ZlvcndzCRtfurH+r|E zq@=DfQ!+Id0*lf5h`9ekVrgAI@UE70#TDhey1MaI&o1Q|sdWBaIo1J51l*V+isYLh&ZRwoxzMKauPPqZ}Mmzuen3 z5pntP{d?Tn8me>=)@gqyL1mWqas~UUt z56`WUvw-e$UY%ZzTNoY~fcoxzOFGo!c^Dag;dCkU^G65BgO$|sDl12loI!0z{xI#{ z3Ed;B>hsP{1P=)zID16HOfxUxG9tw0w_Ot0%ma#1Bw z#jdhvi<}$9$grRNey^gfkr@6ga+ZZ&@3a16<0HKbK@24ximECKPRjO!mX6750+}^m zlXI4f>wgQD&fL9gXp`P0wfOMfwx>T4*D;S{f?!+Zp~Ax1V(o?uA^K#NB(d(x=NoBs zIF7Jf$JLi9O0&Su@KXWzYw9hgtTs|LTgee>J*vR=mNr*HM2jwP$)?QMzl32~sj z2(6sBTHZ(tfd|!tvfG0OsOhF)q=yl>yWwXO`K3ntTFZwK^s}$k6~ZEP3@v?9BRp_P zT*x4gf!zl4-xBV>b{p2y{g3yTHta8ih~=Y{Pa_aD}51Bk9W-FVr9rTkoN z7jYsL_l(?|lw5-fM^aTQ`~P*Z|Gy`}q5reL^N}r9zT?NW-An}6%}gzfsS4Y3qcQm< z7$k^Z!XIo6oJp$)UP{3UqJyKu%ZOU~#3_#R4GGlhxxnyCt@ac3hiamh$vF@&h0%fs zP@G3{J@KBN5r(4KF73l-`?j1BXx@9C_gsmGv6mc@QBhL{VST03O;NhWL zS50zzHsuA&b)oIV1+XbP5r&t}aq3RE#+$zT021mRhx<|sTIrO+>ppr;bPbxB3rCi} z{E%tamgD}4fJHC1v+yQHB<~LH*rb)Wo;@$j5aC$1rzI~?qC%wFwEXoBLj zj4y%&&#ng34XnvV1&t>&W$ozUPwutvjfK!@ z*`xX9@gh1K)pZhR`?E8fWVeIj7Mr{B!il{{5lD!anz;Vf=Uk2CZ$kLg0Eztbz@gKr z8ZcH z`)*0Y{z(2NEqnc_zDtf+r_2htM@WEwsSUe`s_EwMPpnKg#4lghOvtanMd&*w{lqCA zFQo>9sT1iegX;dgmrY8X>;2@0K}sCGZO>06y!I{X^_n=i4I0ZsSil~S;*cIq(v zfeuD|VsHC^O21fpFTppIz~Sq%U(9 zE-1G-maBNI@mH#_oquDfRSL(4K%PiFBzkIXD9H@I@U)2p9s0O2o-XpwrkUFy`F5?+}bDU+OsThi4ANxDDSFz?nLV8Z&>x`R}aRmxEB){*NSJd6?A6?PxI}lcqaTrcNaMLe- zWqD;~+herJucbwJ1tRA!H#D~)@%>3mzu-QBhib~Jj+IQxSvx~cmdY;qrLWJ2gGdp? z`u+MWY?66~YusU=TzlLIJW2t&gmJz~Lp$>oJsEq5Auvl`Nn@k`HJ>q8&%QYQt5v=e zBDUJy!E$7U9h>){o%*T}{hTzVn)yf{mB9SFJJD2^@>p|CPqImtYY}U-W`OqRcP~i| zbvtrTB3zl13GE!ewyS}Sn3H*uSfd;5cC`3a4V6ylMqljo+)A3{k3WnepwL3PD0Rt8 zU)tsepJkQn=oYQH9=2;Idf$ou9WYU{YW=urSFwS8w_$$gRrYL{ZAB_eOqh$zN!j#F zGy`i*Z^e`BHz=$<#{S&P5e|@cC})aZq{6}_c2YO3o8*>YN*Ku=nM&U^>|)kpiSE0v z6W($Oig`Q=Q()$QcdatUR$kP>>Dofih!_et^(<-PLi6vWY!gXX zY7G&7Skv{gfijxSDaDJ}nk$kjF7JX1X|;+o!<(P&8L3QnAt@vFN~fWFe{ zd311Y&hOeHaYdfDO?{Ol_KgCmN*g)o{9(!bv$I~hlD+rU-8}h+Q_a35%x0bq<}JUV zfbg3CoYx_|BI_r+gPSF;XvDYzzwSdbKCAEjR;3(etspF}1bPv#R=bR<$Y}|K(zlz`b+Hih z^k(5luemG~2w(!aA#IEuH4JVN%vHRHK+=g48X6=vsygFPykxrL;|OkTAi zEu?PDC3M^~K9|C8+h#q(9FrAvUS%SOj?_TnSJ@ZRC&_E18HuwjE8vOB<1B=!UibU4 zi@sA5P*k!9~7GpEl`KwwS%|CH@a~bBGsZ+pp{^&4p!D zftPOb@Zmx%%XEws<{o${3Iz}77B0Ovzn=YWi`Z>Y7&I2EHc@epteDQdy|HHgONGUp zRWm!XbXHgY4zJo0_~AOllJtek`8U~5HTbE$bNL32G^5}_xpR5uUf+K0y<)4$!3(&h z^o$S6{@NQrSy*KD4MyF%b589UCVD zU27|pRrx7}H9DS;{S)YV=b^f7z#C3RxRwcKWgr-S(r3mgl~#^gNL$-HR!W*}PgNjhO$nYsna-Rf>Xh-I69fl!LkC&ycSJA`j{$Pye#*w$DezC>#pB&fr1DJ3gYd1gQ{L#+}P-=0mQ1^U~QSrL2BUd~&X7o7@tlxI_ul z7~#BRd=c(A3o)13OpV{ucPgccR6i<1rKXRHd&^j@6g{GMkhE0ni`I;}|E2!sE`#Ln zcZN5SPfL4D_`yCmVP0a7Gpbf4FaoS3ts*fOgXnZ!gws8HG>$;eXA_uXk`{Xem!$^> zLkjK<@O3+AVg%C{dx{F5&nOi|u{ewWSpU#C?4UO4)r~=!O$L3)gzc#Nwl51KJg+4YD$r@V>y@as| z3RdaU6ucs5mSxql%sRpUsuMRU@v_Rk9ZHCXfBWcIyupT!R4n3-G(qd=QnOf7`|G`j z`*|0TjR|2c^+~>GtDRsmkXBRYmqQs`%&R7+Gh5p6vsu3-K{Bn%vwWkQrtz&|M1Hh{ zc<6%p-d8-qs{G+kDVh>RA|h!wmBc$an}`v@hlM5X-O9TZP7d3PU}z%$_IFVb>x(I1 zTB=6^b$naPr0#))SoE=`?d!di<>%rQo+mH4bVc#iy*q?@wEfR{$@*NwOAU2gIF_q3 zz<{y#V6ob9@kt?e&r_h>FnyUbeb5ea7gw5>r_K=qEERqtmxviUm)v8Fft6b#M?w6~ zy^;}*))NsQ{C5!N=YvLtA`?L8`TlA2-xTS{oEr!-Son9e&q5i^%_aMpvfSmKOU@I{ z-pvtDoHC9pbseI)`Bp@|#N)XaAU334D#ad4RWMfKIr#(qElY4v(#RXTW1G)p$R?kh zi2JX=Rx=8jg;bWO)0;gF_}_^t*hIQ~{{z?LSwLvTRyy9(i|vzQp{Wb!m{Os1ls>Ram#&Jo72JFiJWN&zjjDAlJS$ZKv(sSonpPbjGeo|>wsUZ& zjP>IRjb~eNMfJkY;b*^OgCBboPcSM~=AKqt*Kzb5s+o|!pGR6uF?)WpX1Bz&H@{GI z69y}a?Y{{PTQ!~idtJi4n#}LUD5{fF&DMI8FIQ_}mfyM+BN%_PtLGKNEZMe}^1+KN zmHep5CP&Ymgg&e)e*z2xnf_5ZIWe@dtu`QBm*2b@Pie+mQpM>eV>L7LRk%rKQ_LV; z+#6^Ko@D0^HZkP&6@E-!q^;?C>381JXVQvFmA3@R8r3jriDCQpau z2CkM{>&o(+2Topo{-vFa6|(*@b-85_J#1Gt&p!9B3V7E3&w$G8$6uL;FsRNiO;}Wt zG(XI#aLYxE>AB=n9DvyzWbg=2{D^mgaZFwq9p2@>%;p3){yOr5xykl*_Xq24`kTbD z<1MkuS^u>qS^)&TZ_qh#C;wJJv{&8Q_YJtgKw0FoI}sGK*Vt-9yXeaLTcK+C1;6f4 zt3^UQb1_mY?>+<1^UZ5~>>C1g>`6__c`UAP!0t3m7hq@KD0hLiRcQK}OC#COmFtkk zeY=^}2DlB-R*q3v@42i_FeU3{k<`;F7L5{rmzkZ&u1A z@m8T~e9ILHg7$1Z*J*9TVis*kU}_lqtP8Esg<004wkQ%&|>dhM%@?XF>P}J|zR7EXUiiWnTd>2GA zh6Ht0#3GZuKB^OvINOWzUQ5YjNVwP9an{1Q2Ye!pK2d@Zz^kVItiZUG64q^1E@iKM zK*Th&Jfd&Cb;(Q(`aU~L%(M2vnjE$vq2|5-H6WU=0PpS%4!NVB(5;oMT}O|1T`mG%Vy+wK z1+yU|`uZt0d zE?p1g>fWiO71R4E%;?N=wcMVG3un!}cQ@;u>rPlFM>0!gaYb^$q=ek>2|;IAj*V7# z`~vXy;`Rf<1_mt#P@6AO$I3wkjUl2|!`ElYVoZlUa3EP?FJIKpnSui7m!iTGjc#}D z?`2h-xH<2XvAUfwW=^4_>4q-_lsP$ZdhCV0hAH2FmQHJE97m%n!B1+5D<`&G@yLq4 zkMvsAET+V=?;LQa3@P6a>PN&dE%pVJurBrZeAlYn7&3ZEGM#fFg5Myy67mq)Vu?6D zDb7va>rps5Nb3MEQ-J#CuUx?IJ1iYOgnJfBkLevVryjv)q;4YP+w$fFUP-I2abmUZ zj=CDy7SE$oItm(!6GFb;TDyU@N9X)xc*}KEQE6}UNw|!Kq0AIBV(xz~xIi>0$pdVa z>&DL=EU{8mT$==fNv$;-ES&OHjmCQ#xj-%))kqK7N&8!= zt*o|wB4g;1+Di1s&DmD7LWI^^=s9+X_G^L9#pl?D-5ijE9XB07E zDIWQ5)c3FcZBD?DweBRTGB1Q>Yk$=LNP7S-UzifJpfs59YxU436pR~%X zq~`e8Z=CIskAsv13YZf+BLsmTkAd6v;I@b5;y*e>dWn-`LVryVZNJLCYm5D31n8WM z38wyy2W!P_euWD&M9gw9Gy%i&Qlkc5&Z&rxJmr<6k@3tIgP|EoalIn)d9 zN`&STL$>dXaPC)UUS8bKfmiZw>f5aI=_{T(no^GvOBN|#yI@=z^zwM?fY!jZ&aum@ z>#@+mq!j5f{CsZ@43d2tKMR?3{$2n~rt#mmuQv;saR1wcxC4_@xp%R7mr_vFR`^cz zhjfIg{`8YTxh3w0(^@WAnn(Yuz9N97^&C5->$ zs#%=@5B~mhionsWswh>AFGa%rNctBfu!WS~F6i5!mJ5y7%w#q(T%tzEsvx4102Q}Y z*CJoyq;F-4=ic-|8`hx&%VlzL^bQl3Ksud)bnE>9GUp2k4Z}+nM^~>KD?Egp3g&Y| zpt~joyI+v}WolI{_H&M=jM`ZSJ_oPulEC7!C~Jrn@Q+d_^7g2!!=x2o|?qlx8NlhpIn|7J#H~b=)5R#aP=Z5 zqGa((Acle!rsh*;%K`=t?PDKqlkR4(A|{10o`no-MYTg0;O_C<6$6Jr7wP#79B(|K zAuA|YwNXA$6~>#`E}SzwhNE6-ti; zO^SHdp1~l%;Z2d5%rTbql!FM$-N5k$(wVOtb5Z)ll@T$E>y_qP-S)_4xaT=>(z(zc z6AX-{JgMX?^~_~H|KdK!ecszfdNj3LXuxli!Qwl7?+C<`O~7TR$>d(;?-=@e&Q$J% zX*N3NE+<9b#W2ovI;d$uY=_UKWr9UlAr`qHmX&3TS27vk2Qs4fW_Hsl?<;82ORpDn zbGGk6NZa@sWA+wO#_!~)nsu<1Xv9)F_wsd9oZEkR`$v)+&{9$Z=1WAY`TbSN$Wwv! zKGX}Pd*$;IZDJSYB;B9yGj>NpW9<_51@*i@A}_`HPnR6;Er(=K=-%Fl88Zr^cYbRa zw#117h9AoWV?4IW#X^N5K>1mLCudWUx{9(6vrM0F_6|iih09>6I(C3fR+h^8^955W zV0Mw}e6G!xNt*R%H+@zWVx;mTln&+7x#}bi;3t z-E{1_vx1A5s9_MxdawvXhCE8pPG+VB*`rJmun373HkC&i!?M3j^v;KZfztY7Jn zMy=FWyqBJRF5=2FbH$52RmL3<{z9d!99&wsUbrOdM}PMu9}9Knf$e+}4lc@#q%Ko# z*oiw2=({YI#0fEUOy_o|ELURKCGPU8Pk{_48NvGf(%VU@{N+3MWC4A0@D}V+1hLKq z38p_=X*7Igc3FiTT+d)q%_yH^8gM<6@+Q|7NYZRb>mhjwk|*k4 z{vejAchdpc0@!-u$YB|3E&*JUjXm-^PLZ{+=|ls()mJz%hHielb|dg+JyNG7efXim zn|@WL+5mzk+P+AzQtLg9VjkP8W9M!o(fkheV`ruaaAkb$tk|P{n#$b(ZwCQZUow&j zn-s?^pFZjo9Sab=oY1<@z%1Sht>4UwV4Q{6lEJixKrr!3_bh?-c(tF0{jYQQ@TWO? z@k<)i{R4vQ!7yA~cf^90 z5+jp1-$H|ouC+ny*KyQLfD)_1h;yQ}2SWO;|3~tbopa07*QI%-RakzSRGtWE=ODn| zR-zZ%P{YEquP93#W`-)cMmG;LFQC@2#xBi|58E8a-~TRi80@>0e=6`GR==@Ye>!JA z5pzYVecZR5BYB|IR#cUmO?wRValJ^@kpcF9RNm9xM@pAn=IaG7`tw#sAUaRm=O>rm zj+OfRYc7)ywjWfk<~&;C-)(3qK5j-<-kJ=}trTIe@}VJxwTkFQJslLWQdAfAy2afF zJ>I{O2XBS8QbN>T6x^eh*B->UUVTY5ql#AV7>8b5e^FzG3PC`6Ud|2$+@BYFb@-0( z5v^MFU@aTHIhWh+duvS^U5D;A64&V`FP z%3f19TTh(zoTx{yig=-Dr)SakzZ6`_+S$0g>xNaH4|gghbfB3l3(%_#opa%zE6_#$ zT$O4lckFsco$-4R9Oi2ry(s&bw>wYOoMFG1(1-Sqo!w)-=AK4?V{M##hdaUNBSmwjXln*iz>U3YOPcJM6qCI`gqM1UjoknreAaYEtrr@dkw4lb?&co5~ zOmCi4f>%lp28;`-9@FEZ6-pd};&)>q)_^tEwHW~J;U}e=R)zcWC-`vWgPcLrVez`o zoUOcm+q{)SmZ8gRi(KQt;0SfEL@=(utkD#R$oNusUx1tfJ#WUHcwUqvin9RQrw8c2 zwDY2jLA(@~V3&4fkZ5BW_E006k97nn+MeA|y#0}LIl|C^#B=6CAmdZoqr_VK4ZRg< zHGv4|{3n!fMZC9>0C|wteJo$qn*rIPh5qRa3W;e8YRysS`EMHQx#W~{M#)K>z3P0P!pX|^P;pamQJK-W{5D>EPUl4@r{H8t z2Sxj%Mv61yXN`Nklz4B`dfMX?4l59adKiy?92M?B`7cCF=)%_cobbooB(>V(B%fM!r5B%RO;hB#(?}lcL>A#1z|m!3k%apf7?&wPRY7b3+GsJeJF^ zP|pm197()+)hdXNLoJBNcTOo%{TZ=qwv>KQda^vmSIY$kNS!HIn@UFQ7Jyz<xZb-sB1P4&gI)1*%tTp_TALZ_k7<*@yu}HB@v)ik%O9iNvq89B{OLYCc@Zr>yx#aO%xm15` zdFEjGg^q%@43Q4|IBcNHy>3Z@?45`hQ{Q{z4>snmqaqe7F{BLAL3Gn^n`zT+TR zv6{0D^WhVEVwnoVEAWHQ#6O0?N!xTODyZ{{`2cI#WUJ3p9|C&@_3IK-)jf14oNHEX z6S3lao`DNnRd<>+MTDPg@Y6QFU4&a{9Z{5}&kjG9v8o8G$|s>_uDvY3Z+n^CdT&B~~K$tTu zZ>Qs>3IB@nbeA;BRA8b%?Wj9mR9$_0J3EkG1z1&dL7PvAruw{BSLy>ys7OAXXzXw zzpSp+4hlgeR$p^ID^ib?6~)TPJ#A{+(v+JGV5AQq!;h4MZDy|5x9&^AeRY6Uze6u& z3&?i!(HXUX54hl@O+?Z+p?&4veZg9drE910(w~F7#exf`4P=>y?ND&!HMgznJS}?E zdAEHXk`wei0c)sJutBK}B}8S3Odgb|vwgj7SuC<%HFUvY?bq+kU$;wXzd}F%`eIOL zHe!8P%n7@$GXn)?H)m^^nTt=bj{x~NI1E7`n?aI0ppOlT3PDUnSNeZo15{g1TMCG- zJ&j*|eNBtYW56|ji6+DE_UD?7T6DsNk~<4^*%`Ncm(_Fp5F&;Y$c@;B>@j{^#;?_7 zsi%Rl3U{nq(v$fNNMCGY(&aNYqQ`P~pM0;7_dMj0o3Z+EF+>qJva-!%hOD&onLaro zb2A^{ht&ylaOXePh42)`S)}{mHN%caS&KHvn3NA`<)<)~!C9|g4I0sv6iQn!`(^pn zb&vmI2tGK7`u7o4QKO(}{kZ(PJ1LJCAalk=@)_yzv(2&{v%{s;ZFRqsc5CR;Jroz4 z>^OP=XBe;xN_3?PfSb~dAALcWoZG?OJvJAXENX@LC+_PXJAO6h)o@O>_UyuCu-O%BUXw#2d&?jU4c2sFI19%l>?V@qHCFRoD3Sw)?{UnoX zfJ`U;sG5!LD+88o1)|&J0oF0|&$1N}wUD|GNUcoC%Jy?jntngKpt&IKCdSsbm3z20 zx-#%a@dPm%=mkKpTzGt9G>Tf|(j^KrtH2_2BX2@mxmo9A*~n6!xVFt~iN>F<)d&24 z)+&!BA8cTMg5L2^7cevjby+a(OIMF8)gB)(@o4ek0KOpnB8QF1h_L9_w_s@MV0b}G ze?hprA27MB39?s#xUIrGIFsPc120p3-gjb`T39&zf24a8x|*+y07-$jwhSw5*;>~J z1j9!_+;`s+cc=(xH za^Ht1!=n2aqDWM`l8t&Mx6P4HsSB&je-&^!Ah%_jx-Ke%BBnS~;SRG98)P{~=r^|_ z0dNaViG}8>+Jm2gw>?fHLIUERZW?cnO9BFe4J86n@zIV=gV>lj2j8{7-TmA|*!(Pw zD7I)<5ITs+tEhkfy=cf;;<)SuyVkp6ZORSz6Do1)NHG$ki=&GH{CYb-H3=YCK6TW& zNlj;x-YpJv5HSV((3!y^h{c9#`fEc)PmU17l(nvj)e*77=jNuD$ix2~nn*4mU#pB~ z4rG3qrSv7JO4~_9O?!0mgRyO~R_jfi0zWMg2W|K8H-oSew^<=AwgKars3Kqx#@~}$ zqEXXk;K)EIT`qoV1M@C5Pgx~5Q=?%||NG?ueZgB|ISc3yz@P%22vUr7d87o?sz2Bp z4kK7@1Xy0emXHTXoJSBnUg}s=3BgqSy00bt zJAj!E&~@|uOw`}=v*JR;r2aTvFUKoRL!QWh!cb;rk-1i_jRoG4p@&T;nB55hhY-EB z9$HA4N>+5A>r}5kmmw|muAH;|ncW5=X%Xi!v9B6gFvP_$*nOuMD9#{QdbG*jO*?IX z6y#C;^ts@r0QJm+xw!6a_&oj>w`>2z z5hsKlpq$NL9EKB?(OtGDa)m9i1|bj?KPM2+8+>Uwe?Cx-&ctuL0m-d15Fp%bY6NvTPvgj8c3uCyz$|h z>XEdk2lmOz=Hi$QVdb+C+4|@eem%2_(NQprB5u`p_bR-{EKic>$11k#r2% zN6WjnvY&x}RBvrz&*kA6?F2%Bl02b=ibXKKQrwjd!QRnH55-2R%Lsvo zF!l+#_r^7o(TKIa`Ym-30H_0eOizRW zGEzPDIu3phin})y()ibR`65^+KxMU;OejFtGgNcAhY`5vT7yn(4T2)5j5hHhSWGhQx}_j0H2{|atlKKOc0V0+1vqR01e#^( z159m`C2i!jmxArA1Np~7z%JGnfHm@wmij;BUE^cydb_U*DjLB>U29)$@bfEP{!1eY zeQ+GNV4}bl^5KftWpY^C>s{~VsIJWs?xDx)b-#@+^pairXg#WQnt$dQGN$W-=EytE zoZR_qc#&%92Z;r!#-sE4rNWcJT-vyJMxnD>J^*Xswvj+%HNzyzO8kr85f7U|(mQj& z$}+T?{1>`)K~z%LD3Ja5+T)okE^>ZAKS?PF>!@iQGpPVg#*0 zBJKw#E${#7GsAm-%TCR8*(mt)EMz`$t2S|O>80u>Fi;~fJmtnJ zuWV~9eQLS8)TM!V+|O?0LH18vCHpElyaWU94%uNl=1CJlDv%b4B*_Kr1JkNW&2kGz@`EovCCGZN+G=*aTu0z z!(6^nR}>J-Z5kb@kw8Mz_7&(SV$#l#T>jrBfR~ClG9B z-cTn2rKl)4=)CIR$s#jLy#ZFeIP&De&7wi?Rw;+_@Vfe!H*i02r2brY5!nLF5AvUJO(^U5=)g>cofjYtVtBk%H!FMak zKKk}TqX3!<613Ofs5x$5KHxeyGkf9p-k^N7G95D`85euKYj0LIZF;m}(d<`ZzRPA& zX=*3neLP7kznt9(IzhebfLhsecsC1(=Tc5<|I^`;9(0Xdg@Y@KqiN90a~wpRyT>)G zugt2?OBrn{!3tZK*t|^x;PA(hEZzM$0Ghq7Gkg#59e_H_WAVz|>%pKg?~|Wrn6^0n zd}GCQCsQ^4I0LV?Nb8w7{5|ExYjp|0n#yNdTI!>VqlyA#8&<=o$16I`KMP@Z9Ppmj3?-zuY5U8iM?v>Hg~q+ zspFUU4R@3OxcKgOF`Ln*_;;+k6XzzG(o6>tz_?Y`EjFg|T2FDddz{S&(up3iZcs>xFSdX+_)3t8qnKyuM4WjGYdPGA6+T#cy=}?LdwAx zv4+ONb>eCOxBQ)bAFiN(GC5b82M3V2E2b4sMS9ZSU_G|3U+}SzP*pR3H?q>ltB$#u zR>63(a+|iqnxd9O#@}MOwVBgCa?Jq#6roaQG9f19GHlzJ%ZXiT9Kvsue%@6*=9MAAhwssLREYlwMavRJ&6K znk&YXp5ZwQp{6CO1%2c;n}m1!4~G9!==j)A!k+w6!#1GPxFRr~X_x?3@PqVaf&N9H z8i-_3vscZXhqXfAVtBg08036V zS+XgY^BauF-A{!7W+ z-2CO0#xW@Qz}>0o>T)8Y)wKwJAQfOENpHvBJr23;1*0xECkQtIC}ghy zzVfcegrzM+F;Za(EP|tqF%r(vNZNj;(BBm?)dvX&XeHfC+>4aXR=SA6XviZUdbTFb zsH^L<(D!p#4WCg6oz>Ad+1;ww$^ZcC-7N}GTbR&qLhICj$)B(gGUtKWrzgIT`1?jqSNN_K9*9sG^tGGz1L>iepijF+ z=KvdfJ6*yk(ap?C9f5%Y(uJPhDQ5LKL`oE)*#Z9;nNGIblp=dO<{Ei~gKpwXZJtX(9$Mjqe6VVq>L9kVx@=(?|bYCnfNHCw6ov)TmNYzDR*q1`v_}U-mW` z5u%P0=NWtkDd&furOL>jt1}OZ?$MW7p}^FZ4tmU3uvjs+p2syhlea<5vOEDo?iEkHbkvkJJ}Tfzvf7KU6aOD;!N7h~ zu%lQo^ykA9jf3y3)6j9d!B3HW5bte*vIdxzi?UhUkAgggi(~;D%2_$+Wd3(t`m?#^ zuD{$PmdYD}2842X?69`6n5w1#l^L=Ggk2xklEEzJo4~|1r#*0s8SCkzPa2lWd63N= zJtlKu-=xz`{sgp4Jb#h7H*(o1ECDXL%{!EQ`L4lIZjZ@&{9zc7b-b$4eoxbwM|Cf! zR2M`KBV=ll}OaMT~DEn&?;as*nF$Da8OpG38tFxPJ{E~p-)>oU-RcafQ;;7^k7H9&? z(m@Qyofgq=3g1;F0VS z8Swm0XfW-5oF?;Jn2E6Sy_0J2$PP-;e2Zhg9|?rnuQZ=%x$4^%H^kML3q+02`w8B^ z1em~9VGfHy66;ltd!r$!JpWM*7XhT)j`q061wRYY>&P!#z>X?_3hR;e9&~;2iI^{ zI_gvfqJAfMmm+S2Bum`e{*=2+d5U7=!`7Wkjyc}9+zC_#l$lSRnJyh5winuGh%vl#& zIpwt0Ad-5qKTvVjS~LBmX?}y9JV5`A?*(YF6S3d?i+9~!eT#XTb=?=C`K?<}%l)GN zibds7Whc;u6{v-~`|2->u{5*;a1=&thWsRInDp#ZMa3eUWY`vF*)=%0%#z=Q1%7ja zrc+u2v3VNjeE%iERYL*U7_(1K_%C&er~(8RVZ89CenH+JUi&Y537e7r-K$Y}eRVs> z&NnYOiOX8e%%s-!qxV5U-gwh_@@qaGcv{PGYb^ig}4BjG4{yPf}20ClAoO1yf)*TJ7D8MC|@y;kSfdpk! ziE!@C8@GY2rCLGpjQpF&Us0cEJ4>f{-nX&349Ncs031*GvN2Sw(`LPpGsoIscv$=% zc=@!>ojg&&=XL&WV+s`bUUZKPNqaBl1~PlyUSJ@+L*Y0&9RzrYfgYT#AVJPAKZ6J3 zfE}O$N@4s4L9cCWR74}meGoY1fu{hlH_Ewy`B=gLZ3VerEdw$N%a@%0u?z!$$4TE` zW5x!~qxCIw`$OV1$crHW;p91%pmv%Ya4`Z(Z(vr8mg54l#Y2S((lUUH%s=})0_d5* z-W<)=bEy%yW-tar+^AUxP{UI>w{k`?Pb?BVFsS__Y5(+^0AK1qt|8?upVTa_yev%z z;S+NYFmC~@?H(q;1q2XNfZz)F2`brztCtFpuh!C^?g8gITrVm2dgt_OTfbCXDJIE) zS1qVRa4h_^0s`a5hra~-<%(Eu#C!8K7%+VpEpw!}4I{aS;p1CXjvo}6*`Ax0v}IKB z-Na$I&qk`N5L54a1SOhv1NNaV^Bx~2#$;Q{YrZ2!{U~F^jLGe6Hd(5KeR%FB-Tub^ zk#y+2azZ*9o1ghzjU%0R*H?1S6#HP#1dw4jRI~tFd_JMt7&5wl#R<%9P#@WH0OvTK zO_r}-r|=V`nhrFRYj^zBKdfJT6?TC%$*fz3$tGMq5;E`*!P*M_1EhUav-HxNtP=xD zi~#iC8umh-7ci$x3tQy%?ttU0z;Xp^F34fuS`i zNO5~ql5hHC+pqPD$L@n=T1M#<&?yjicZbZRYNWl{!tZN=UW?MqF&+gAY%&W;OYw=W zQ{l)jpRNmR;GTM!pM=+s#!RyQ3rD*z8}FGg?m?>tcCX#U#gd>mbi(DD^&u_l5=k4(3EP9n)BUZ{2hI9xzPok0 zE>LMhATdaSSR*Us>OrW4=R{0KU(`UY?`{;b3E<~umy3e`C%yLX4!a9Jo0 zb0UH~&S4Yh`i;y{uMsz%>t4UDu}Yn&?38LRyue}}L_t)2QDD!B_TeDU$8si(LO*+` zL^JY~o1Qkm0^ZzeUH{{OWCMwo#grHO?`VmfS)i?#HyRVmPusE9M3pDIKinNUh3kkS z*?%a-VQ#)LHY5<9W5Nt@jz-7t-T)BO2|g$)8B_gnNjwlB>c&w`zv9%^>Td_0H4grN zjJVg2 zj!4ds!w~NtynXKH_Z{CGe|YFzUa_xz?X~vWYn|u0tKWLI^oR3b#^G(QD#yg@zf+B& zl~IjL6YFlkQ;=QCi8kW#geDimcv=x4lgYWi5s^bYtMtrwt*6pR9B z{!k4Nsup5dNw8fV%C%8He_R_^MbzHla#ei|NooT2_aA^EAlMLi@e8Y-yIqGLCmKCd zi^}!8u3Hi)t_<6ErmY7j?4^_a@08LL_*2VrZAmHFtDP2Cm9-C+@*zpHjX%D97pZTLN+dPLBJeRIPc-;!p_-=YIke$&5=rFw@Q`&y?<0wnb4xX$2Y}$9PeE z2XPUQHeF?zFx!cDFGB1B!8f)EaGbS zG{`Um9<1Ha*7*ur-3al2yFZNSDR^KY2uXzdpG{CN{N$?ZU1(PY#aMEh(U|WK?Xd~L z1f2?w;GWdk5C>?f7<@Nulf!Wc-f$3E@6i^kPlxSM?DOvCFkWO_;$^#fHZ&T_^LdZO zk3@S2TVw}9=sy+N3X`I}=o4(4c#!hSU7oASukKw9ZpIqEeu^#=05xg?+7tJZt=Cub zquHetEhcgg6A;ShY(E5rH2c2AhY~sUMx46YOwtHnB6`3bVLF|ED-B>-1p56Q?w;@O z|8AEtFxRv@mrd^49pXx-KrpW~9=lfIw`0DMoDQ%L}h)W1;5mcj_QHYd}<0CVJHTfUG}s zvz?bugoxSFPBvT4DSvR@>Z%UK!&_}9L#djM+z8w}LR4+?lFw^Xtk7NFEcd&l46nqD z?cV?dseMPaj?q1dA^zO(Oa>nezlhvv^!eE+W&?==QfVp6uvFu#$GnM=m!+(+&tLBw zJ7XsREr;I;WOpLZ((X(}i%YEl6B2p;2c#+p*ognk%=1~L;-!Wn04B84asmj;hmM}# z9}xUCuSO@;+?`TSV?#*7sm5T)#MrBhQbt}9vMBRp`^o;RQdS_vdeL8%owgvk_ocBk zf&5fU`3KFMPeX3>ck+Khs2Q@7R9L$o{iK~5;C%};Ga4k>hv;MN9*y}f%_+qcvqbz^ z8h?|`+R^fo(HVxOH4t)orX+vx)^`Dn`JbAa1L<4ZqF$Z*zrOzg*LIFqeKS{|+Cv~Tn( zSR>9}GdeQP9ml398|nRJIg`LLX`lZ|qQ-@|^E3dcyYHC)$mwP+uWLF(WCDmMWZsOZ z3)A-kW4qxR0hNxe-Xys=R{yjdS_?m`xs#RezukQ%`L7(!@I2(L3UH(%&S^-MHO;zw z&nyqW2`bO^WT$h>@AGNi%*82zWy^+#|6$r_eKew>bG6|yT2m7+T%I$szulPentku( z1xQKTD|P4%u(*4J=9uv4DAIVEM#I~z{Vq$2TbeSL-je%297OscxDiZS=E=x@$;8z< z$spdEh>6z#<|BIr9LWqzGaU~l$zLWc6K88*oztTG-5-C>18*S=|JQ^Vhs&k5tg3GhUu=L%{6127`)U|YB3 zpgs!dO7jCG61L-txos^4nHOoXHN!Pcm;g(P)0f?N(+Z!TEHT9*BgNJQHdkJ!N%js7 zmx9W$LwV_++|obE(wshHgZbg<2VS{LuZFtC(u7VE0NJnhOHV{ePMjB;6C^Zzm%Zfm zY{;S& zGmX3I1XPpYI{i@e#Tnc5NV?Mnb*!`n#pwW#{kIqfcsOO?0}iMuYl~vj7Y482i$g5t zZ;Wf{pu&~zMOxCBASwnEULblSSrIlwEHq}0Z=im%5^7?!O06g_qdt%E6~pwp{lew* zMTgf=XH~dnSpZ`}{LJkMLT2}O2k)XkKnC~2aHf2OB_^QhShr>rxM6Q`yvuq?Bbq38 zdyV4;G-6`gQ)2#wdjXqu2=YpyVZo%~Lfk8%=2cJ5SLys6kA@=Vk-UZeLWk-7o^{mS z;^Y)QCJ^3F>ZSG(RI)7@ydBTJFL%GW3}Pl8$O*i4NIrYqFfOqD=e*ip?Zhk3-wkDr zke0wlaiMu+83X*?9uoy$D~>@K_ssa$ilfwti*=I=Nd8^hIvzk#vAID-TPi$>dLyI} zk;5}!IcI+Z!Qc_VB88R(Osw9YdqJvk4R@D|yDN@&5`>!XduApKZOphny3wxQs8{-k z5E;x4cIN>X-3VOte|V2CpE(6d)G^H~OD7J|oRLjR%hclCV3FkJ;BNhkqZ(Dq3IECM zjxrc;i^NU|pbFa>{(vW4aU6Ocex;PA*+m9laE{`I^Ue=WIS5~4yjqsgpdoUOSm6JJj{Ot0q;$7= zPHeeb?*U@wJzo7K6;USPsyl!&^A|_(GR*0C$nz!VXUwr-oh@4Lii%E#BlX7uhjXtA ze|Xd%U~5-Yy?v){#}4^BBHn9Is+c{*yui<=>3&Ktn3#W1_HgxSFw|#vXL)Lk1i==G zSU$63@+;M?(ah(GZ(6~Ug<3}I=yky@T4Ys&hRhKuTh$1S3bikyw%H(&%+}AgX zJXT+Gt&^M*^hq&gRD9)MX38kqy>z7MwdB70w*7o>Y`8I#)auouZ(ODh8)n=ve-5d- zs~qtvS1VCwYqWKeG(uAjJ+qE=??=vHRk>BDE$o9bC`u-G{n#;T&nO1-Z}UPx};H=cA79W|9+8NC|BQ?oR;f zL`{F?5#ZTe{z<}Y};;#RZshHIz7oTIPbjhYMU?p(s0JF;Mi&;`G z?ppNR{9>mKhPUqQ{0FY1t2D|);uPe8X*nOVmhP2>IsI>txAomN|2O2Vq}2I;k+(VB z54@J<^W{y}#yv|en4wODxIl)I{fn9T3xYga3$>zhlLr-JMc#9UkA{TOsW@dnKT#sJ zGgmUm<^xmPZ(c4$DFqJI6mS~e z#rbne8ZjXIX4Dr31xUo)RAHH77_&g@y|enaKqBV9Nw87R0ta&cu$F?p59Y_|4a?#g zI;6*)>2!*_J|OHmW^k%#Q4o3;%x?3vUn0=3B)7J=m+npJ;l8T~`KmHwRE?5mZ<+Q2 z26rdzQ&-AJCUHKh*>|DM%Fa4NxicisSVOM92Uy+_N%;(Q0;9=go+D*B#b5g*Sjrkp z{X^FqcYK$+A3K-p#UP&%l|&#eZ#8d5d38jKH%D`AexoV?8TkvRJ9zW5$s#;XOPM>H z`yF8H%Ol(&vk}w#4>YLKT$IBaH70;G!@I0<8Uo&z?_uref1`a%Dj!G#IRdt$@aSc+ zvin~_{p(qpQGMV*gl&gQ3zf`ZnQ`S-K=nxiv}j%K1hE0CNqwBH%(OtmVx|YuJ3Wga4$lv?|>{+!*EdXeFKSh|9`OjH)Cj9Y0E_ApG2j5%oq1L*cV6o zG^pfHZQog?F=jp|W#}j=>3?@XqfGRTV0PX7g+dd?`w`OLN!6NuPgHbV+0wjgZoZH6 zDBZ1v-;i-b3?;a)sc?F($xTPe6%gss?UzqPj;5H^53XXeDc;~`sOK&=pO?Gt(<_B} z<9a3x&Prmo|HF3l;%rFVLJs^cH>C&_K;!8mUHUe=Nc{tO7LBVSDOJP7Cze^3^tALG z7x`V&`(C>GzY_A0$Su6YWL1-)*)cX{Z;!(}-fQ$x;bNl02j=iOx!>FQQq$geHvH=K zvQNKE8`p9UYx)&L&Xo}7nwfucwDWs&y>U0oj(quT>cYMIO``XHVgIWf4mdk2CVl(aQa&Gy}ruB|vaJq@piil&3BQ{AdW7_|T{1N}vW8L1VT~t37gh zrnrmeGa;{amK7)vBE^3wLguR4{NPdQ`-#)j@tb5zCuL@WBNO|Cz! z`(@cwKTF*b_(70h#)R0TQxff>Zxi>a?7uLVp zQ2F+gmsHYOpM$>?j}BUm>$}f6?fJe$@nhqj+j`c{okve?a>$TRR;c5(nXE-Jaw(V` z`A*9ys>olFz#X9H2$T=M6tAW|nC;gu#Or?xcn|cIY?LQ#Pt*=7$i>mrQV)sfbxU3g zhEmGQd&HvriBhj`IM6UvOFrRkOYM$50wL`Wr_R&HD_P3wBbD%;qRa!%&d{>3|2CX5Dh5{ab@jfDn(EgN`s zdG^kK4(biHojTkZ()MWn4_L!^VP|}9ITlh_MfCFW3CKq{_76Jn^gh)Fh9m10>_J`i zAL#`n*j}g~NJ=6_kR@p@@ZjK1ZUo2Zu(Zsif?hLNU*pw6^gb##^R?tdfOh(=N}?>F)VDokF%2G z{Q}})Ytp%!+_CSC^U5wZgn^m`f`;9C|SnhB+}D|X_HJsp0TxF2BBSVBh_8Ga>2 z9I(qzDQEah?D%<$?)n_>u1jio&^LLuR+@$-_1%vYI1`(-zX!=}=Y8P2nFZ>Jyxd5K zi?kZUQAr0MN=}fO|Dl?+?TniYd0&vCQMAIj12O`1;T`=17v2kI*8-pdk+vNr@Bb41bIQs1&X|^sK6-=@eWEX+o;CWAe{aN_ z0PTZ*>6NL!yia}FRzOvOS(#t#c>jV`91xt^0hBXP0C>jC8%b&d|W)uy`mtQ*+Ib;&JU#y@B zCw_}En%~a9hk6kABn14tvEERto}HvP_JBxawVjKKTtVux6hLS&#I0*6TtMGvdh>2{ z?$EHxR@3PVQD9)P*h;0yh1sAwUr&eOg*~#{f&%e3-0uIBK>&8IBlZWt;OusTI_;?Z zq3rHR%kQ`-kEU1pQHDqdch!TxPi}Ap-l0<=; z)W9bi)^PpT04jQ=ajVv0HK)Jz~`{`gZHx52lg37_fj!u6=qZ@{NJY=-cH94L`-%2g45p zNTi;YB4*Fm?ws2F#Mvm~c$b7IY0>_8($TRaPbroebE!8n+W~;{WbMCQ(lK&Ii9nR& z$cC1p?Rw?q+w}HM6 zBaN=}q2?V*0VPr)P?43MWtDXW5QdPD5Y0%Io1xSJT(!gDhX4i*>HS6~$@4$aLh?w% zK08(1)|F|p{yYHW8NWlIq67mf3OWn$cnJz762H!(&+urJys~{f3nm{t$?H|Z&m-G9N#@dVP^YQXScy)l=L@|w5p#vJZw z3)~yNp?3N89{}f9SCf+}S34^KM`W%ZY1cbu006wVr@Md1@K^TuwMqb5yQX7X!vocb zE3yyt>C|5XT+U5eGvL~fO;gYRG(N=<^7+|iL|fu2Hj!$QTXM_ydWUEMNCbd z6K+i+@f+tnsad+5YfO>#1@I{w*z36-!(tjO#}bOI-@guUo4JDBWCCE#z~0-5ypakN zbNoQy4hRlFq%K8?WrIv&`PoGwDMM_iJI|tbX$~W6J2BZBc_UA%6o+^3`Y8Mgs29Y(~rh*y^8JC{F+C-vNho7n>RV%aZ0ht)W29#?D2E6XfCRsd>$3yr4 zOw^2sU7XK+f=evFEA0tE`&S-fQAo<_J}MEo@7+t);&04$HS1ic?TZug3=n>|RQgZ$ zaHCG0LH~|gf&yjjZ6{BlK`r_=LsiQ9wd8pENurF5<>P(Tl#61$ozP_3n|%ynabuT1 zY6Izj9zR4IAGaCAV~*CEh=KYRw=IjV@vTTwe{3jo6A*IbZRfRRe=3>amHXMt3G$|P zLjKt$R0t@Bz??n}S} z9nOK+*LPl*x~7rDNhwEYKrlW2)MRHV+fz&{vO1!i4nmhRWT~Y~2Fzg!dQ4b(Y8^eRBjao?g5mZ3X1A+b^{aINC81 zTGoa9Wkb(+;jf%mQT!4gH}duxAQT4>5R2lu4-$&_4(5}LX&y~H?4E=Bj0|UrJ~RN_ zN4Zs*!n&rT^`;Tion@^^@mWN>|W*xn@F;LkTZ=K%sLd2RPJ2|#ZVT8TDOxBQZ1M|YyNavLbR=n|w!CAWwM zgp*n69H~4yILlJGy@v|wrF*p*3DyOxeKgNrvu*aM{|)Aqgk+&_RH>UXLCnEGLR~Kj zjRv%TDMiEQof~^maW;}B2HoldQPJ0bJW#D8H@;xyQW6v{;HmtUG21cB_O2Lc!}zM& zzha~$!(8@3`CT6!gmu~N?+q3?mK*=A{XZZE(TDeP-gM$6coVsgeA7VBW1hcyLjV)I z@@qobySQRd_iTSk1&tmyJd2Q`mVW+i@BrG{V5a5*up2kg;<8TPoGzX&$YneUab<;m z)fsPP5Ml51Y}~oq|9#6sN1}P97spyI|B?GjPRc9a?$|>__3sA{pZhAo!2X%+&Ma<=ooBKBJ7tt6Rq93IoH0ddwf?{{ON#soMdmQIlDWYCdrYEMuwzl!kw2rD(JF0Z%ER6)Nv^d~DrzoYDhthfIP}X}w6JG7#iz(OoD_ zINQ!QrR%D_w<^WGR!d``b=cH>TvqS5@%tBU)ioH^TjI0s=bB)4BZsfMPNPy>g_Gwq zlqCLVorsi4YmykP$`E?^LY1bJt*jkJ_!P2SO*ZVZh-!w5N~a2K-|vt~*D?Oq_>~@- z=CfY%m-^el4C(Sg_Yd|74Qj>!?BptU<)_1JjO&Mh<<7iI$F({{+-7y2HkUqwD4|d7 zf<-&+&KYtt5#Q`2#?TltgLE}j2S?Y8O!AI@aLu#X57Pk5iUbT*D2;X4>x^+mUHaGxeUweP30{>E|5EGSA5oIO)G9PVmuu{N$CIKV_?YTkS_Szr zL5C!rOgZKz_Oh@-%B_eiX}N)3*E0KvS})Ax-$Cu0XgScZP9&8=F8C#`F!S3X1Up z>HI`$1p2NVP!$SzNO79#)*oTZpF$>Nt{)uIYJY9C1$WiT!v4X{uhwos7jXox6qF+^ z3e*%M%0*An`#u)W29X80{|%o8=1sPgJNF~6A%I{#Ps5gD!2=+=?&qgIYDGKo9?17b zUlfyaf=D^FzIoCb{ReV&Pt!=VYI$((jnPz7Pkv2}ket&KB6(|56Gac){;1n~bEfY! zOGL0!>;LdV4S8BW1F$WS3f%KMk=-|2_eFGns@l9D*BbD{8eX@=xp#9B3ZUSBGf}ao(Qs!4uU}eg#3k2l9{HR(rh(^rw45wjl0U zqPfqIp%E!+upY80x)tfph%%@wNKNNk1Bt_RGY_>b#gFDdr%*kf);js!*aHG_nueT8 zH$MeIsJ0@nYW6bo_3kWk*2wQ>FtD2tMTr^$ZO>niCXbGeelcY0$V^s!Ft)mQ)W8E* z`x2fer8Bo70)8 z>jZhs#xa%t$64x{1o96kcy*J}f9&WY`Dm6_v;>6whfc@1*j%+rD@jn2wdZai6C3Y; zY3xC$fQ4InvoxGPJZMN<8MKLRF38`_d zBq=G|w3_18%2)_5&`vn%(C}|IdUUFhMGV+d5e|LjtY@~ys*xZL86KvgPU_E zd~%%} z$`)pVu~mh9Q9S-phu}aLXnVN6d6JPX`virzX%UN|Cy4t|QBHYkU2P5w>?^4+^;#}r z!jCq(LVt)+@)Dmwd7r14UKsVGouZQQcFm2=@NZ$w7>8P;rBPgni{X}eC-RFH8^Z=~ z(xrtNEs3D}-sq_(`PM;-%8x<({Npi z*)?wIPjq3>!|gZYkCTkNYo^BPj)Ks?pP+4fA`3wu2)<;R1)xUPqXX#vMhoU;n)pYc z29Rq~{N0MXKw4V|n(mS@9)yR=df7sxC|fkM8)y{w?XNbFZScY=MMce4CO+8ol|0P7 z35Mmy?+b4}Kml~nt-i!-+=Ypv++6z4B}13krFA51e7h2B)t#9q$)#p>WY}F_tgZWe z8x{pNk*8-C>C52^s7Kb9KBhexxkhQN{gTN_b@zweoM5PSl4Q3i^4A1*fv;8FCzNKK zpq3F6f>qY;P2u~6&V-{=d76jA4d3gXBFGp}`)!=2cI?o0_+UHrr)y$Y#^hs8dzx7OD9KwqG7;s%8A@s+}Z8R9f0_K87tG)c;hIh+l)U!L^e+yu#4U+HIe|mN45AC*0%TA51JrTSb#}EqI3hpMUEgJq!5R z#WdBQ#D(O#9LmTe6FgNTr%z}jc;4|Ay0%=)fAVa<-;t=M4Q@_eKUuH}L+s#x#BpGd z5%l25NcV_haOc2gRdKyb4$1Xu0e;va3puWlvuqK&no2as->P^N>|v=fgI0uo?x5bd zYQS|@k4d}MqP&@M3Ojc_c>ei8-U9rXVzA->cc_7Eu=CBChX=%GRvpUd!$mXSK9>J; zvlzm?Qi6mTX~}Pf!{-d1O>IWqB-c0+eeM3m0v3hU(1|)o;Ka7sk*6k_k0dpPR>=pa zm|iT@Rp^{nXKkC7Buo~#CNB0~PJHy?;%;U?C%(p_nfN&apDc17z8P~6FS_0(ikmxr z$`5=_g2h4DUX^b9$MfV$M6JP>GC{?v5CqmUpNtyIiA@%kyRMT}_t)vc_E_>gjsBxTbs(~>)am0(M&OPviQ|0d`OCSkH$DO)U& zp$G9zRhAc{gHFeI7c(SKV_RN-2r`nxcKfA?M=O5q zzLXAU{oWx?W*L|1u6Far;SsOmyigCPRmX9d(3zzV!Ponn55zAAQ!3o$3!cGTR-BIx z?0h-byMGOxY02EqEGXK#x!4AqrqjK?i?YUCgKZ~X#uRC*<*G!|k}JmVkC@ckb3G}b z4+pQGL(ILDsDR^AoL|RuXrRlqm3oVAfRFusxdmsPnnrib1oLLO^gJM*6RURA$=?kw zxu&dLk}@WSe`n_7n(i_yh_eQ74D-Gfyfip7H-7ub@gwxO{J4`7U(%$A01M|Mep6cP z4kyk={+OBgFrTu0&>tjn=AUke-h?|q z18z{ixcLcmt+_(*{OGj3M~gjk_&23?zE=7$ZNVa-BzXE^0axC$+;&>Vuh( zO0qnyefm!N9{PcKI2eZLVDc@Vc#)+fYOD%)V-?L8v#_{;@+Oqq)KKf~%_~x}%?z+V zZ<8Hg4jQZcX&yeOd4zHcIIlG8vlbctD-3T*LFphS+%`KJFFY~^v9FP#MB5RMHj7(={iuaQ5-sw7>;0Zl^O zTrg1~p}F8g4=;Nh{Z9K}TD`=?%^iqU3PQQh)cTY?{YEd=>?7moPGUd%wtjpgen`uvzxKukMLEdNIh@wXDWwA{ z@rdJdhD2D6eeWwgiu2uQxUGYkS2mX@`57fUUhJ16tES7F1hXK=18)Szs7{<9=(!_N za>D2A{A!+hNczXjuz2`km*0_{BGVUizt4!HR4{m@pkoiO&qpUcvd1KUOxYsVuIbBN zFt7>ZCYF}cOEwSqR=3d2ki|tG)__zl8H{E}@F_X!pS*uaFZe!6*%>{Yy~zi?%wE#i8dmbM8Nr0@&sjLkLEEhET-~&?o=-Hu)0?K?vhNu+{57-RW$6`A?fBb2l z?rTNWxRYV1{919xa15hX1cn2l0|^R}xM>jT#GE$(v#Cy4^9GD*_DsBB_pthd_X1{m z2A=^>-tlteIVn1Fd(dCV9#RHPpM|frzKP1I0e3AVY*G&}io|||0R#*M}W-(01UfZZE!Mv-E=(0B-DL zYyrz`0U2C`8{?$u-~x`zN+YO~vtN>sUc(yF4_+pWzfLAZz#p%nubD~srftX;iS=D` z{lB(9PyP3nhgAm^J$^f)__}`vbG#@7_c(Q%?Kmf11ZPbcoG|_qPjC)Q&EJ&1Qiy*% z@2E~600`s-G*^vHuzErT<+--1Um^;h*`@*qK|<~b0q#Wsezis}IFbxWnWt;k;HGiZ zc^224BvSyUJn-SJQ)xCO;rr3>Cs3@}OR?a2!L8LE&Q0jZW)mU)WiJ3-LSxlTuRGK6 z^2y#cy-t0UukM$gVgDo1vr9>w>s?F;-=mh4kS)wStYIc~7jgXc=Kg$}f2K^qK?FEu z?qs3|0$es=gw4t0tbWTM|2aEg<`A-s0f!s>Ne7%JbEqyXRL# zO(cG4OQRrj4q=VG%E5e)o9D^YOH8yg-Yw6QLSpr#86Ctsk}}VZqV^l1pN}-_-lxZ`&U0`CXnLIv5kA3=MUybq^-kJ?yRX!pHoB5R zBEy(Md6d3*=8TDBY1M6_J@n3$4j>@8Y6eFdrPC!syk?UXtl~5;LG?sBFp03h^Dq zmVTV{W)(9GE~xzZJz|paxkOHR0_TTK15?IIL(Wy?;TVH{ZD&&H?$tSvV`#sL4};Dm zfo^bY*cX4|I42c9SCH{@aTuAaIE4E)_-^ua_pZL`M}dIHOsG*mdOMQ(_hVn=H@0*o z`88QtoiWB!0bd^^&aiQFKv5+%wvSx0$nQC;h~gWn`XBBH?zS;0NMyJTw)&5om2_K7 zesNfP6`~=^;f%> z1-l;tCtp%sZn>e{;EwDgS*X+CU_HVbKVrAY7bY326PcC-$d4n}1G%@J6jBE7w^tNhp&L5Wj4FOXM>4#sZKe;LH2G3R< zDzqdEc0-ROC|d*okhISwEeKb#R@xMx zhVsn%nFIO#H!o*?}cI`{x7vpTL!HN>Jbq@}PT;yYWJMu)o6*nTu}01G_+-S-=pam1!G z{qtVUfsaoI&NfpJybQv(%`kneFn;M^KB0RusDGVyU1CAvHk}EW_(k{Nn*+dw1D|re zrgEeoIcEzgJ3}ilym#h%JL|iMUUdxm%zdL(d6!@xyVVqOu|zKpJn3#5Y1~~YrzfVb z^~zt^_Enn^Lp>$j6SZ(UYW2fdN&gN zfw`-H9dEb01{-&{Q*_eZh=6xl@(yE#6AbdlrKfmr1YnNcWu}Dnf2v%Fe1T=jzcq$( z!hLaoe|j{66M}Jc4Sx}I?J7CW9RJDi<1{{ItGp$NI=@kCnq%$DSSG#2rIe$Gk3JrK zFh4lDihE$3!0wPlDje)GRx=?eUnsbx`823*ZE-57YeT_6Rv!#|2hsHEyLe}c6oB67 z>z?S-nxdz;cqUBPVXne3Kx6Ch4PI%L4?H%Cg4#Rfcrgsr2vRS=Vpld$S61Z;Cec$8 zYU9Zkx%ZbHG6P3-9+n>JAP*IIr%~O>b4@nW)gm7&M-DT+I0FLU*QYb=P*xHAE(;5r zLw!Ezos7Z(UfYa$PM`v} zL*TX6>(jzVBiCS+&8jd~Y0C4TUxq#)o?dNia_3ydy-pvMnATxgdBW-UdvZ;#rvGVU zKawVRHvUZF8CurCw#`+G5))*fgrOq&` zzb7_L|G_xeVSRM+hP=6Z|EQV!@;es%dyP2H%=+C%Oii3%hTyZ706J3K2ohSftG~;g z9~ivO$*$|V8@N+8v8|~1!{wlA1!Xs!MK5wY-5b-BRIR!*Ctp}ARA{;Ya22&ILefvn zk0(1Ovb}29r|ig1Iao&QItWe6>>i}ZJ=}@*LnQ8%%_)4c2=@6Qdeo;jZD)HbVjj4W zs*h_p!R`rtgQKa#_q*sZ>*ub!Db-%n^_%p&i~Qa(dsUYNVt*M~N82F|v*w^?{lshC zjpiPr-_4$~mYGez!K0ge3J?6su1^aYs*f|mF6%gVoyCn*9J#D>PJA8t#1;6JJ17w0vd?)iMbdwDy5A-!HGI52S> zEt>vLZtoh?WP|pQ0xtxZxoxnMf9dbWk-&mo%9_0D;gWiF;VZgqvmy=4@z6|6zIfcn z!6@hQ%g3#1V4&;}R!Qe>pYtF(EB`ao@AlUQdnmIkxlz_ll^Etbaop?7-@-$0!%Q!+ zQF?xkyn&jHB2~(DFL;(`F&?mqLI}dxJx1>B@ubB>%ZbqxM$0?!Qqn)8pHFvT98Z+S zS+GlSk?WHisIPoE-w(kRxT{m1(@jHNpoR$(U#*W+&JcHNsrqrAD0YvQ*qP-wTo9*j zU&PH_JEPE&995{`2hN(F=mw;Yn(T0?8Qd}{k& zUtsdJ%1k&vetQg+NWH@n+5#+Sg?|w2>#Ja$8BYRK>!w>(#^wcm-``3PNMdp|LrFLF zm)m@OO2dzju?AOJXtA}nfwfv@0*Axgp~8^P&8mKsBG@AoGoSusKH6Hx7?mK6ai79j z_j=42MSw@Uo*c-?sT56uIu?X?nT%@9AgBzV9zCg@&_Wc|! zDftz0Mf00?%jI#8opm9tw`R1N$%j)VtWDY@@;~SP%-v8sCBRnkg;7zACYp+vi|3}_ zwx6@Ef)S|7Q}Drrd@uJyu}YS38iR6!qHqV^YmtKWk*mBenQki&)dy&-u(3Lg934ty z^XUQl<@msG_8_Pty49DlP!*WLVU_QOU&!qaa_+|5X zcvU%AqgVZ~bEY0wyO^gIRKb5d4@*B4Ck38{a)o$Q^j~KrtSwIZGelC1hUpGm;i5nJ z4f01hIms$ts(Ym?3bS(JbK`Sp@}6Bfn1joKq>~5t5`|r}UeWfhT+M2=$dyZizXazU zKh{3mf(b3n3Kr3_62U{?G&6vwYjyw#IYm5zz7RjRSwW( zH5qIJjG?pNc$^y*GNe5c+*;#UiOHWkr##BOtFKE`hqzb-=K-g*g=m?rg%iob`tz(qwHp?Xfz!BOUfk;e`7lL~uL(39b!OyY7 zi<>Qo4zP|W6QW*`=sW$hwj5smCAsS1PDh&8i_Pb&rK1tMEaNVqMxuU;kV1;5e@lOt z-kaa9I+gZ#x||%uAp(Qo%tHtC$L!=tsoZ*d`XVte1E;py4!Rn+rOW z9g-jeY_cOcfa{7gos?A^75;> zo=-ohq&}=z%ytQLbH*(4119_hXt9 zof&u&Nh?S0j*X4Ch~Q+7tRW@q2xdY4vX)$L**eGsVb~FGcb%DalMnG z1LViRzyrPvxB&duI%)?mubWe~T`bJZ zscuAx)*&=>$$>CooUI&+iOmVCfxJa+GRVOk370xf(%3O*uWE?YO{R%AzK^cbD z@lmFTwh@19FY>2Rq9XPd64-$0k&%~amkgM;6i{}p-F2;mz|Nx~GUCZR#h3X#3)VG> zk+Tl*(zrH`{%gKgP4VZY^T0%;7IZxrH%$nv7htbL+2Q3}d{A;j)e8bW0!0ED8$AXV z1~>1L-R;!px?66k1pzxr(~!_+>9r<@rk#lkW!G04pt<8L@UlWfz({vSTNb>K#$%eh zVa!Ur?AYH!wupmr3IWwy6rjJj$lsHaTVjDNo*yh2&=@FhBT=%rJ+?xDg>A&U4e~yM zRJV3LrHwnB2YX0iW5GOvstM~jugeh$Kc;aSZ0{@VRd}3v8c(9s8XjQX|1_Q-s{@{= zyANi~1Ew{J6|h%2r^R%ezt9f*KpSP8odI0c~=C zzsanX|6V2}9L%nRi$-1|IAFa`CHiHtZGR%0_T<&mgJiob9^i8fgriw-{36&E>56HP zM7<3Pe-01wvU2ot-E%%$A(Y7l!UT&19%Fh8KI?r%Z_MfR8qc2_FO<;;I073 zQeF=^lTnTebErf#rz*3t4%*xvqyI!7N8gvH16`@G`6~PLG)w>{_*B6K+v{h62W|tE zsL-9K1CV0gK(4*2i^&pYH^tabb;{$+OsCLO=pyivnTN_8=iu^7AE@$rk1hqzv&uoh zBsg+bhP*21CY03WDsMEDdq3qtQCax7VOLmcSJrtPMZt5WSuI++|U?XsZHFW+F&d|pME ziGQ5OwpQ@5I|l$ia1bwz@BL>eDZdPT5gOM_-VcG%a~06vrgw%eKGZm^em6|znE-u- z&FuhSiB@5SSzzVNqkWo`zMP;m2ysZ_2fppDbAzx)Mci>@W)*lnVxi4e(mW;5z6#*6 z&pL$R+O2gFi8wH2cqB?&YDR2;nU4RC#WB>RpjB>cZ8a4al{0N<*WyQ(5B>*`zXv?A&6Mtb&+mebimd?|X__(+ z=-vYPSQs1POu`usLMP}k>u2eU>DP+qyXT!c>!y_*DQw`}MPiv)-5McJ6JCz`S-~$d zVyR_x^6q^q*9n%7cyjY%*lsn{If^L&i9yY!^6Q3Ss-cUR)^lOp?1L2Y9%q)~Ii|*~ zwHj_-ALP+ld3}KsbK!jbfHmjX1xC5`sOasmb3^Uc-LhOk&6dykA2~-+H&+EBD=wRT zPTn}_Q0O@os9QI^$t+Pb4Wk^eLA8vVf7%cSZ4{nq6gC(+?LfmJ=eF(=B1sk<%_j+># z;t7j={3nF@-=2zOK%;t4|1 z1l$77-;WYs=Vl{Z9RPJs{SX6kco*2uF2GQ9X|PQi#@jOu{FI!1{>tg@Q*$l{!*t

3ARCNyBvN02&$*hnOF~A2l<#uWI-H;BtcmbRxpRIF!op6AxC1MjH7I2-~ za_`S2+~6{mhS*HMW^ip}4Q41FTnnB{$PAShmp?RTH(l&Wor{BDPf*!16F+VH5hV)J zzaR4g;1}9Ep%Dxo+S}(U(C;hzJef@0Ll!^Wz^_zJrZgSc^u`j<+b%VP``xzWKAKz) zLZ6r4(hFp@3`x$wkJKO+6#OPU(zLj~AhBPCCNTivNsLS>&#%WVrspm;s!+>0qmI(2 zV^$f0h>S%ZPnT{fNmEIhe>I!Y$Xd9)GXC+9T=9%B(+4-HLrMQ1%5NL(mvJe!q9y{5 zGb;%dq^|@-vc&eSCVt#jCRE*AE3J=|>e(61pbCYI4Rs{+QuUzSDfFiAP1#SBxYYgX z^&}M-*h_VBDV=O+?!2f9I4=jBXMBmrUqN4!5%YT`$!U6gnQ?iJf_LRsaA&pNe%C>g z!u$`X`dh4-X~>lZ-H(Q!5_Bs?6BVlWB=Ogly6x72f6Pj(zLLggSIMKPt6RAhzarn@ zM!gG=)bh6eINK!+GdwpIly8Uygj=Jx>zZV+4vH183N|^RH!F$;vQG^F-6kQnjH_k>#mzEn zwYf)BD}em+;W8psZbfVmskx7uW6-b#3g3AAniFa^ck3|rwtZQ{oW!Q$JTLz7{=9j$ za6Y_4K{RkBX?%T`bEz9W)~&G=vD3AcgzGTth^@lp4!YF@{y5;TQ4|jRk?>Tq&CB|W zR0#OW_R0?2i*qD~Zy&Dj8R&iwOd^5~A-0&CBgYyB zt^2R-1@H625*r;eWr7cvzmYPYm!ApywnHBppv_&?v?l9wz=ZsnRUG(kiGOuFB%%{( zzyGH5_;JPYFAZxvX5#4SO7IHiLz_m2A|zO(zNgUzEK4%96(<;WN9us%Gy#h~z^g$_O|hkqfIR!E&KU#(riskJ|4)}0Xe zVE=eIxNRri)?6}>dHHB_9NyRrcDuWREWnFubNV}DrW8aE-SLg`Pt{giwtfVI{Oqj6 z3hD7i#Ga5j6j=-7GBA)42QnMyK!D@6bC-DuUoTTc*S#Vd@TD;?^xTMHtVN&VaittK zl6N*VvZ(l$-ZQ~~$K8;b`=2MXY`_1w5^tVU&2w?5fuq^(>}mg%27VXv2MpyhMGxIy z9>SQ;kMlmhh0j?scy}5W4gNE5<<{|(|D-cRCm7Gi&pBg;NRL`bOafjj;F=Dw2|IcH zM=c7%$E^#iUBQ)Gl`CC}J6)?Ch*j!Uup-wz`f>blDe3tA)(z5zK%u3i;LM;w#8w6R z;Ox=nj@n?y)OxUHK|f@Pe}&YoN&aX`Y8qkt*6>Zv^#U;8Q?@+f zI(IjMufOU5q?p)g7)=_OPS5seWeV;baE>JfRUSsjD@+7|E0d5lq$}ryXdO`!HtZJg zM}rDZ_(KfEYDHV&kD;*Wz-xgc6^AHm^lHm0DWcB-pf;{6EMAqs1{tH8+QusZb|lqd0KZUEt>h8L2m_X7I&KJwEuk8LEe4o+=+Z@) z_aoTRIHUyJb`=tWrzvSgMZoQVhY`Yp_#p}zETk3?cr0s>YVlg0fgU;k(jT2p_t%}B zeVje_+;7i!?|1K&Xt#d(fbCAvTH~t3hpAPp-L`BHy%;RjExrwr&Tj^J2mV=WXsG;+ zsMR-6bDvVPZ)cAC&CixT5Z+t3kDI~>Lj=^s&Bfa^(ziv!1G%ntK0GINuOm*#3>kj)%t(#2WVM3vb68SgN1uq&7poAo)!mnBxz_Q&4mtm&?v zd)H#;QYv^|CL9lv7f9L;TK!0DAcSsAv9660`Aek59ysqVMHa_QVIew`Uoply@8!$b zX6N#P;IgW8<8jzi+nky=G3SHxWmVw%v8Q?^`sjIJR^N2lqHC2|6#5h&KCnPo3kRuv<7EDS)4;^>)9J!GhRtcu@$EI`D}tXU7Z8PKu4 z3Kg^p$a+z(WCJt!7Gnd=D{m&GY748`hxoAGob30#${-6=ieRU`hU!`@o|3nZ>56?gv-ngf$%Iis8{ zPKyWXsPD^D-^wMo2W?>qHE~}pN0BEEWj|uzxkuCkf}`riI%uauV4EZ&tskum(4e2% z-Q#2Id{>J0Y5{!&T8;MteQf4KVk@y3txP;nZQ6I`4YjKR(yc+a`JC46SS!I7Z^aPH z{m=rw4YxL(BHRw4E9IH3Nz2Ez0`fHEdsWw~bXyuqM)bo?$J6gLkJ&+D=-G?&FFzkw zAOC4u)5(CnJ5r8Ml&CGmen$R$*O3Vyc~|0aYsX~9ODUF}oWaZpO8UfO{Gc>0UC;h9 z%Be>gUvw^!jLzyOsmv_?LidM)@hB4W-ZrFowPcR>Es$)7hN>Fs032L>>O0G=wKmOr zx#qvMqfW)g-Ru|_uPkqK+E(YB%cQo~s9Va$1pJ%2tM8*xSw=!9-$;YBZYTtQ@z>vp zHH9an(Zi3u1BDkkvBsI97SSz3lc>J(BW}&!n*E^XcJiBBTTO`01ZaC{BWcN8dKdMcGXJHZSzywZ^aS##U5>TmLrA>D+VlpAy~s)zJ|X%F z-@DLgs=YxoGqPSQ4!sjrGv1c&k$R-%Qm}5{FKGJ--v%yHLGf?&SdO?y4%kcE&id5T z-GRv)-goK|u@G|7UOGSw^-&2JZ)qZW!7cNlU%!b@_&G70UnDdCniWA>)_FQfD)W^) zlU|)_1+@q(!kc6J*Q}i88JaqJl>`*D4|>^x3BPqVzj%sR6X6C$xHZ96Hle@SWlq)J z=mU_}DN#qb^Dv+*`;b8~k1ojJxB0B{&nb#z9+S8cJgECeM_h5_5B{~y#W>xZJ`QE! zu^!2_enyJqMusH6a^-M(1Vd(-S#kkyrCl67;tkt0pTJD=#83RlkuBxqCU@P0M6%u; zBi1`1u2;$GXjJ8~fXzJ`_hEhyHXF5L-1S`R0b0r@PxFAdjE@q9BU@oiThcboF)q=Y z&k4I%i?LY)cxc)-*9H5I4U`4BTj}HM2>Svps%Qq>5RDpveu%C2@`dw_uA7Duyu(Fz z4fpmADXzosKy+QSo59Dfug-47J?*#I(B0Q4f#H`Q?V%EU`-q=24A~sjBS2yDjt}WSz+nCZ3J;zlcEsLN ziK@YmmVCJ%?ZGDe>|z+R%p@%{>WEIoCe4xGnyqmN2M|qg54LD{YrqRnX7FNRdrk0b zdQ<#7{B`WT6ApSeuTJaM_oe3F*Ngv$7XAOdAW8V&_3r=kJBD}Y_Q5|!8>UsCQ{YHR MI)CO*B3b3X0Zcz|9{>OV diff --git a/wrench/reftests/text/reftest.list b/wrench/reftests/text/reftest.list index b37cf4e1f9..86ab5f88e9 100644 --- a/wrench/reftests/text/reftest.list +++ b/wrench/reftests/text/reftest.list @@ -18,7 +18,7 @@ fuzzy(1,100) == decorations-suite.yaml decorations-suite.png == 1658.yaml 1658-ref.yaml == split-batch.yaml split-batch-ref.yaml == shadow-red.yaml shadow-red-ref.yaml -fuzzy(1,164) == shadow-grey.yaml shadow-grey-ref.yaml +fuzzy(1,616) == shadow-grey.yaml shadow-grey-ref.yaml == subtle-shadow.yaml subtle-shadow-ref.yaml == shadow-atomic.yaml shadow-atomic-ref.yaml == shadow-ordering.yaml shadow-ordering-ref.yaml diff --git a/wrench/src/yaml_frame_reader.rs b/wrench/src/yaml_frame_reader.rs index 2198fa8892..ac60158b37 100644 --- a/wrench/src/yaml_frame_reader.rs +++ b/wrench/src/yaml_frame_reader.rs @@ -837,13 +837,12 @@ impl YamlFrameReader { let border_radius = item["border-radius"].as_force_f32().unwrap_or(0.0); let clip_mode = if let Some(mode) = item["clip-mode"].as_str() { match mode { - "none" => BoxShadowClipMode::None, "outset" => BoxShadowClipMode::Outset, "inset" => BoxShadowClipMode::Inset, s => panic!("Unknown box shadow clip mode {}", s), } } else { - BoxShadowClipMode::None + BoxShadowClipMode::Outset }; dl.push_box_shadow( diff --git a/wrench/src/yaml_frame_writer.rs b/wrench/src/yaml_frame_writer.rs index 34bdc22fc3..bf246c7a31 100644 --- a/wrench/src/yaml_frame_writer.rs +++ b/wrench/src/yaml_frame_writer.rs @@ -896,7 +896,6 @@ impl YamlFrameWriter { f32_node(&mut v, "spread-radius", item.spread_radius); f32_node(&mut v, "border-radius", item.border_radius); let clip_mode = match item.clip_mode { - BoxShadowClipMode::None => "none", BoxShadowClipMode::Outset => "outset", BoxShadowClipMode::Inset => "inset", };