From 621c9360d067bdb0cfb3194be9e66a1c10ee5bb6 Mon Sep 17 00:00:00 2001 From: Glenn Watson Date: Fri, 16 Feb 2018 15:38:20 +1000 Subject: [PATCH] Port radial gradient shader to be a brush primitive. This is mostly a straightforward conversion, with a couple of interesting notes: * The previous radial gradient shader was missing a transform implementation so would never have worked properly with rotation and/or perspective. * We didn't (and still don't) detect if a radial gradient is opaque - it's always assumed transparent. So even though it can now opt in to segments (and save clip mask generation time), the inner segments will still be in the alpha pass. We should fix this! * Previously, we used to append the gradient stops directly after the primitive information in the main GPU cache handle. Now, there is a separate GPU cache handle for the stops. This is quite a bit more efficient in the GPU cache, since the size of the stops array is large, and a power of 2, it now fits exactly into a GPU cache slab, and allows the main primitive data to be allocated in a smaller row. --- ...adient.glsl => brush_radial_gradient.glsl} | 43 +++++---- webrender/res/prim_shared.glsl | 1 - webrender/src/batch.rs | 24 ++--- webrender/src/frame_builder.rs | 37 ++++---- webrender/src/prim_store.rs | 87 ++++++++---------- webrender/src/renderer.rs | 63 +++++++------ webrender/src/tiling.rs | 1 + webrender/tests/angle_shader_validation.rs | 8 +- wrench/reftests/transforms/prim-suite.png | Bin 40933 -> 51111 bytes wrench/reftests/transforms/prim-suite.yaml | 6 ++ 10 files changed, 138 insertions(+), 132 deletions(-) rename webrender/res/{ps_radial_gradient.glsl => brush_radial_gradient.glsl} (79%) diff --git a/webrender/res/ps_radial_gradient.glsl b/webrender/res/brush_radial_gradient.glsl similarity index 79% rename from webrender/res/ps_radial_gradient.glsl rename to webrender/res/brush_radial_gradient.glsl index 541c7a6d3a..2cc8f3a276 100644 --- a/webrender/res/ps_radial_gradient.glsl +++ b/webrender/res/brush_radial_gradient.glsl @@ -2,7 +2,9 @@ * 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 +#define VECS_PER_SPECIFIC_BRUSH 2 + +#include shared,prim_shared,brush flat varying int vGradientAddress; flat varying float vGradientRepeat; @@ -14,7 +16,12 @@ flat varying float vEndRadius; varying vec2 vPos; +#ifdef WR_FEATURE_ALPHA_PASS +varying vec2 vLocalPos; +#endif + #ifdef WR_VERTEX_SHADER + struct RadialGradient { vec4 start_end_center; vec4 start_end_radius_ratio_xy_extend_mode; @@ -25,18 +32,16 @@ RadialGradient fetch_radial_gradient(int address) { return RadialGradient(data[0], data[1]); } -void main(void) { - Primitive prim = load_primitive(); - RadialGradient gradient = fetch_radial_gradient(prim.specific_prim_address); +void brush_vs( + VertexInfo vi, + int prim_address, + RectWithSize local_rect, + ivec3 user_data, + PictureTask pic_task +) { + RadialGradient gradient = fetch_radial_gradient(prim_address); - VertexInfo vi = write_vertex(prim.local_rect, - prim.local_clip_rect, - prim.z, - prim.scroll_node, - prim.task, - prim.local_rect); - - vPos = vi.local_pos - prim.local_rect.p0; + vPos = vi.local_pos - local_rect.p0; vStartCenter = gradient.start_end_center.xy; vEndCenter = gradient.start_end_center.zw; @@ -51,17 +56,19 @@ void main(void) { vStartCenter.y *= ratio_xy; vEndCenter.y *= ratio_xy; - vGradientAddress = prim.specific_prim_address + VECS_PER_RADIAL_GRADIENT; + vGradientAddress = user_data.x; // Whether to repeat the gradient instead of clamping. vGradientRepeat = float(int(gradient.start_end_radius_ratio_xy_extend_mode.w) != EXTEND_MODE_CLAMP); - write_clip(vi.screen_pos, prim.clip_area); +#ifdef WR_FEATURE_ALPHA_PASS + vLocalPos = vi.local_pos; +#endif } #endif #ifdef WR_FRAGMENT_SHADER -void main(void) { +vec4 brush_fs() { vec2 cd = vEndCenter - vStartCenter; vec2 pd = vPos - vStartCenter; float rd = vEndRadius - vStartRadius; @@ -105,6 +112,10 @@ void main(void) { offset, vGradientRepeat); - oFragColor = color * do_clip(); +#ifdef WR_FEATURE_ALPHA_PASS + color *= init_transform_fs(vLocalPos); +#endif + + return color; } #endif diff --git a/webrender/res/prim_shared.glsl b/webrender/res/prim_shared.glsl index 79ab8e4a3f..281de1c7a7 100644 --- a/webrender/res/prim_shared.glsl +++ b/webrender/res/prim_shared.glsl @@ -75,7 +75,6 @@ vec4[2] fetch_from_resource_cache_2(int address) { #define VECS_PER_PRIM_HEADER 2 #define VECS_PER_TEXT_RUN 3 #define VECS_PER_GRADIENT 3 -#define VECS_PER_RADIAL_GRADIENT 2 #define VECS_PER_GRADIENT_STOP 2 uniform HIGHP_SAMPLER_FLOAT sampler2D sClipScrollNodes; diff --git a/webrender/src/batch.rs b/webrender/src/batch.rs index 0b28411d97..ddb939477b 100644 --- a/webrender/src/batch.rs +++ b/webrender/src/batch.rs @@ -40,7 +40,6 @@ pub enum TransformBatchKind { Image(ImageBufferKind), AlignedGradient, AngleGradient, - RadialGradient, BorderCorner, BorderEdge, } @@ -78,6 +77,7 @@ pub enum BrushBatchKind { backdrop_id: RenderTaskId, }, YuvImage(ImageBufferKind, YuvFormat, YuvColorSpace), + RadialGradient, } #[derive(Copy, Clone, PartialEq, Eq, Hash, Debug)] @@ -1228,15 +1228,6 @@ impl AlphaBatchBuilder { let batch = self.batch_list.get_suitable_batch(key, &task_relative_bounding_rect); batch.push(base_instance.build(0, 0, 0)); } - PrimitiveKind::RadialGradient => { - let kind = BatchKind::Transformable( - transform_kind, - TransformBatchKind::RadialGradient, - ); - let key = BatchKey::new(kind, non_segmented_blend_mode, no_textures); - let batch = self.batch_list.get_suitable_batch(key, &task_relative_bounding_rect); - batch.push(base_instance.build(0, 0, 0)); - } } } @@ -1385,6 +1376,17 @@ impl BrushPrimitive { [0; 3], )) } + BrushKind::RadialGradient { ref stops_handle, .. } => { + Some(( + BrushBatchKind::RadialGradient, + BatchTextures::no_texture(), + [ + stops_handle.as_int(gpu_cache), + 0, + 0, + ], + )) + } BrushKind::YuvImage { format, yuv_key, image_rendering, color_space } => { let mut textures = BatchTextures::no_texture(); let mut uv_rect_addresses = [0; 3]; @@ -1464,7 +1466,6 @@ impl AlphaBatchHelpers for PrimitiveStore { PrimitiveKind::Border | PrimitiveKind::AlignedGradient | PrimitiveKind::AngleGradient | - PrimitiveKind::RadialGradient | PrimitiveKind::Picture => { BlendMode::PremultipliedAlpha } @@ -1485,6 +1486,7 @@ impl AlphaBatchHelpers for PrimitiveStore { BrushKind::Mask { .. } | BrushKind::Line { .. } | BrushKind::YuvImage { .. } | + BrushKind::RadialGradient { .. } | BrushKind::Picture => { BlendMode::PremultipliedAlpha } diff --git a/webrender/src/frame_builder.rs b/webrender/src/frame_builder.rs index a72fbb85c0..b856b74100 100644 --- a/webrender/src/frame_builder.rs +++ b/webrender/src/frame_builder.rs @@ -19,7 +19,7 @@ use clip_scroll_tree::{ClipScrollTree, ClipChainIndex}; use euclid::{SideOffsets2D, vec2}; use frame::{FrameId, ClipIdToIndexMapper}; use glyph_rasterizer::FontInstance; -use gpu_cache::GpuCache; +use gpu_cache::{GpuCache, GpuCacheHandle}; use gpu_types::{ClipChainRectIndex, ClipScrollNodeData, PictureType}; use hit_test::{HitTester, HitTestingItem, HitTestingRun}; use internal_types::{FastHashMap, FastHashSet}; @@ -27,7 +27,7 @@ use picture::{ContentOrigin, PictureCompositeMode, PictureKind, PicturePrimitive use prim_store::{BrushKind, BrushPrimitive, BrushSegmentDescriptor, GradientPrimitiveCpu}; use prim_store::{ImageCacheKey, ImagePrimitiveCpu, ImageSource, PrimitiveContainer}; use prim_store::{PrimitiveIndex, PrimitiveKind, PrimitiveRun, PrimitiveStore}; -use prim_store::{RadialGradientPrimitiveCpu, ScrollNodeAndClipChain, TextRunPrimitiveCpu}; +use prim_store::{ScrollNodeAndClipChain, TextRunPrimitiveCpu}; use profiler::{FrameProfileCounters, GpuCacheProfileCounters, TextureCacheProfileCounters}; use render_task::{ClearMode, RenderTask, RenderTaskId, RenderTaskLocation, RenderTaskTree}; use resource_cache::{ImageRequest, ResourceCache}; @@ -1318,30 +1318,25 @@ impl FrameBuilder { stops: ItemRange, extend_mode: ExtendMode, ) { - let radial_gradient_cpu = RadialGradientPrimitiveCpu { - stops_range: stops, - extend_mode, - gpu_blocks: [ - [ - start_center.x, - start_center.y, - end_center.x, - end_center.y, - ].into(), - [ - start_radius, - end_radius, - ratio_xy, - pack_as_float(extend_mode as u32), - ].into(), - ], - }; + let prim = BrushPrimitive::new( + BrushKind::RadialGradient { + stops_range: stops, + extend_mode, + stops_handle: GpuCacheHandle::new(), + start_center, + end_center, + start_radius, + end_radius, + ratio_xy, + }, + None, + ); self.add_primitive( clip_and_scroll, info, Vec::new(), - PrimitiveContainer::RadialGradient(radial_gradient_cpu), + PrimitiveContainer::Brush(prim), ); } diff --git a/webrender/src/prim_store.rs b/webrender/src/prim_store.rs index c153e5bd5a..263b079d41 100644 --- a/webrender/src/prim_store.rs +++ b/webrender/src/prim_store.rs @@ -126,7 +126,6 @@ pub enum PrimitiveKind { Border, AlignedGradient, AngleGradient, - RadialGradient, Picture, Brush, } @@ -210,6 +209,16 @@ pub enum BrushKind { format: YuvFormat, color_space: YuvColorSpace, image_rendering: ImageRendering, + }, + RadialGradient { + stops_range: ItemRange, + extend_mode: ExtendMode, + stops_handle: GpuCacheHandle, + start_center: LayerPoint, + end_center: LayerPoint, + start_radius: f32, + end_radius: f32, + ratio_xy: f32, } } @@ -219,7 +228,8 @@ impl BrushKind { BrushKind::Solid { .. } | BrushKind::Picture | BrushKind::Image { .. } | - BrushKind::YuvImage { .. } => true, + BrushKind::YuvImage { .. } | + BrushKind::RadialGradient { .. } => true, BrushKind::Mask { .. } | BrushKind::Clear | @@ -349,6 +359,20 @@ impl BrushPrimitive { 0.0, ]); } + BrushKind::RadialGradient { start_center, end_center, start_radius, end_radius, ratio_xy, extend_mode, .. } => { + request.push([ + start_center.x, + start_center.y, + end_center.x, + end_center.y, + ]); + request.push([ + start_radius, + end_radius, + ratio_xy, + pack_as_float(extend_mode as u32), + ]); + } } } } @@ -631,26 +655,6 @@ impl<'a> GradientGpuBlockBuilder<'a> { } } -#[derive(Debug)] -pub struct RadialGradientPrimitiveCpu { - pub stops_range: ItemRange, - pub extend_mode: ExtendMode, - pub gpu_blocks: [GpuBlockData; 2], -} - -impl RadialGradientPrimitiveCpu { - fn build_gpu_blocks_for_angle_radial( - &self, - display_list: &BuiltDisplayList, - mut request: GpuDataRequest, - ) { - request.extend_from_slice(&self.gpu_blocks); - - let gradient_builder = GradientGpuBlockBuilder::new(self.stops_range, display_list); - gradient_builder.build(false, &mut request); - } -} - #[derive(Debug, Clone)] pub struct TextRunPrimitiveCpu { pub font: FontInstance, @@ -935,7 +939,6 @@ pub enum PrimitiveContainer { Border(BorderPrimitiveCpu), AlignedGradient(GradientPrimitiveCpu), AngleGradient(GradientPrimitiveCpu), - RadialGradient(RadialGradientPrimitiveCpu), Picture(PicturePrimitive), Brush(BrushPrimitive), } @@ -947,7 +950,6 @@ pub struct PrimitiveStore { pub cpu_pictures: Vec, pub cpu_images: Vec, pub cpu_gradients: Vec, - pub cpu_radial_gradients: Vec, pub cpu_metadata: Vec, pub cpu_borders: Vec, } @@ -961,7 +963,6 @@ impl PrimitiveStore { cpu_pictures: Vec::new(), cpu_images: Vec::new(), cpu_gradients: Vec::new(), - cpu_radial_gradients: Vec::new(), cpu_borders: Vec::new(), } } @@ -974,7 +975,6 @@ impl PrimitiveStore { cpu_pictures: recycle_vec(self.cpu_pictures), cpu_images: recycle_vec(self.cpu_images), cpu_gradients: recycle_vec(self.cpu_gradients), - cpu_radial_gradients: recycle_vec(self.cpu_radial_gradients), cpu_borders: recycle_vec(self.cpu_borders), } } @@ -1014,6 +1014,7 @@ impl PrimitiveStore { BrushKind::Line { .. } => PrimitiveOpacity::translucent(), BrushKind::Image { .. } => PrimitiveOpacity::translucent(), BrushKind::YuvImage { .. } => PrimitiveOpacity::opaque(), + BrushKind::RadialGradient { .. } => PrimitiveOpacity::translucent(), BrushKind::Picture => { // TODO(gw): This is not currently used. In the future // we should detect opaque pictures. @@ -1099,18 +1100,6 @@ impl PrimitiveStore { self.cpu_gradients.push(gradient_cpu); metadata } - PrimitiveContainer::RadialGradient(radial_gradient_cpu) => { - let metadata = PrimitiveMetadata { - // TODO: calculate if the gradient is actually opaque - opacity: PrimitiveOpacity::translucent(), - prim_kind: PrimitiveKind::RadialGradient, - cpu_prim_index: SpecificPrimitiveIndex(self.cpu_radial_gradients.len()), - ..base_metadata - }; - - self.cpu_radial_gradients.push(radial_gradient_cpu); - metadata - } }; self.cpu_metadata.push(metadata); @@ -1315,6 +1304,18 @@ impl PrimitiveStore { ); } } + BrushKind::RadialGradient { ref mut stops_handle, stops_range, .. } => { + if let Some(mut request) = frame_state.gpu_cache.request(stops_handle) { + let gradient_builder = GradientGpuBlockBuilder::new( + stops_range, + pic_context.display_list, + ); + gradient_builder.build( + false, + &mut request, + ); + } + } BrushKind::Mask { .. } | BrushKind::Solid { .. } | BrushKind::Clear | @@ -1323,8 +1324,7 @@ impl PrimitiveStore { } } PrimitiveKind::AlignedGradient | - PrimitiveKind::AngleGradient | - PrimitiveKind::RadialGradient => {} + PrimitiveKind::AngleGradient => {} } // Mark this GPU resource as required for this frame. @@ -1356,13 +1356,6 @@ impl PrimitiveStore { request, ); } - PrimitiveKind::RadialGradient => { - let gradient = &self.cpu_radial_gradients[metadata.cpu_prim_index.0]; - gradient.build_gpu_blocks_for_angle_radial( - pic_context.display_list, - request, - ); - } PrimitiveKind::TextRun => { let text = &self.cpu_text_runs[metadata.cpu_prim_index.0]; text.write_gpu_blocks(&mut request); diff --git a/webrender/src/renderer.rs b/webrender/src/renderer.rs index 52c267aafe..16078ecf95 100644 --- a/webrender/src/renderer.rs +++ b/webrender/src/renderer.rs @@ -83,8 +83,12 @@ const GPU_CACHE_RESIZE_TEST: bool = false; /// Number of GPU blocks per UV rectangle provided for an image. pub const BLOCKS_PER_UV_RECT: usize = 2; +const GPU_TAG_BRUSH_RADIAL_GRADIENT: GpuProfileTag = GpuProfileTag { + label: "B_RadialGradient", + color: debug_colors::LIGHTPINK, +}; const GPU_TAG_BRUSH_YUV_IMAGE: GpuProfileTag = GpuProfileTag { - label: "YuvImage", + label: "B_YuvImage", color: debug_colors::DARKGREEN, }; const GPU_TAG_BRUSH_MIXBLEND: GpuProfileTag = GpuProfileTag { @@ -155,10 +159,6 @@ const GPU_TAG_PRIM_ANGLE_GRADIENT: GpuProfileTag = GpuProfileTag { label: "AngleGradient", color: debug_colors::POWDERBLUE, }; -const GPU_TAG_PRIM_RADIAL_GRADIENT: GpuProfileTag = GpuProfileTag { - label: "RadialGradient", - color: debug_colors::LIGHTPINK, -}; const GPU_TAG_PRIM_BORDER_CORNER: GpuProfileTag = GpuProfileTag { label: "BorderCorner", color: debug_colors::DARKSLATEGREY, @@ -202,7 +202,6 @@ impl TransformBatchKind { }, TransformBatchKind::AlignedGradient => "AlignedGradient", TransformBatchKind::AngleGradient => "AngleGradient", - TransformBatchKind::RadialGradient => "RadialGradient", TransformBatchKind::BorderCorner => "BorderCorner", TransformBatchKind::BorderEdge => "BorderEdge", } @@ -216,7 +215,6 @@ impl TransformBatchKind { TransformBatchKind::BorderEdge => GPU_TAG_PRIM_BORDER_EDGE, TransformBatchKind::AlignedGradient => GPU_TAG_PRIM_GRADIENT, TransformBatchKind::AngleGradient => GPU_TAG_PRIM_ANGLE_GRADIENT, - TransformBatchKind::RadialGradient => GPU_TAG_PRIM_RADIAL_GRADIENT, } } } @@ -236,6 +234,7 @@ impl BatchKind { BrushBatchKind::Blend => "Brush (Blend)", BrushBatchKind::MixBlend { .. } => "Brush (Composite)", BrushBatchKind::YuvImage(..) => "Brush (YuvImage)", + BrushBatchKind::RadialGradient => "Brush (RadialGradient)", } } BatchKind::Transformable(_, batch_kind) => batch_kind.debug_name(), @@ -255,6 +254,7 @@ impl BatchKind { BrushBatchKind::Blend => GPU_TAG_BRUSH_BLEND, BrushBatchKind::MixBlend { .. } => GPU_TAG_BRUSH_MIXBLEND, BrushBatchKind::YuvImage(..) => GPU_TAG_BRUSH_YUV_IMAGE, + BrushBatchKind::RadialGradient => GPU_TAG_BRUSH_RADIAL_GRADIENT, } } BatchKind::Transformable(_, batch_kind) => batch_kind.gpu_sampler_tag(), @@ -1617,6 +1617,7 @@ pub struct Renderer { brush_blend: BrushShader, brush_mix_blend: BrushShader, brush_yuv_image: Vec>, + brush_radial_gradient: BrushShader, /// These are "cache clip shaders". These shaders are used to /// draw clip instances into the cached clip mask. The results @@ -1639,7 +1640,6 @@ pub struct Renderer { ps_border_edge: PrimitiveShader, ps_gradient: PrimitiveShader, ps_angle_gradient: PrimitiveShader, - ps_radial_gradient: PrimitiveShader, ps_hw_composite: LazilyCompiledShader, ps_split_composite: LazilyCompiledShader, @@ -1756,6 +1756,7 @@ impl Renderer { let (payload_tx, payload_rx) = try!{ channel::payload_channel() }; let (result_tx, result_rx) = channel(); let gl_type = gl.get_type(); + let dithering_feature = ["DITHERING"]; let debug_server = DebugServer::new(api_tx.clone()); @@ -1872,6 +1873,17 @@ impl Renderer { options.precache_shaders) }; + let brush_radial_gradient = try!{ + BrushShader::new("brush_radial_gradient", + &mut device, + if options.enable_dithering { + &dithering_feature + } else { + &[] + }, + options.precache_shaders) + }; + let cs_blur_a8 = try!{ LazilyCompiledShader::new(ShaderKind::Cache(VertexArrayKind::Blur), "cs_blur", @@ -2018,8 +2030,6 @@ impl Renderer { options.precache_shaders) }; - let dithering_feature = ["DITHERING"]; - let ps_gradient = try!{ PrimitiveShader::new("ps_gradient", &mut device, @@ -2042,17 +2052,6 @@ impl Renderer { options.precache_shaders) }; - let ps_radial_gradient = try!{ - PrimitiveShader::new("ps_radial_gradient", - &mut device, - if options.enable_dithering { - &dithering_feature - } else { - &[] - }, - options.precache_shaders) - }; - let ps_hw_composite = try!{ LazilyCompiledShader::new(ShaderKind::Primitive, "ps_hardware_composite", @@ -2303,6 +2302,7 @@ impl Renderer { brush_blend, brush_mix_blend, brush_yuv_image, + brush_radial_gradient, cs_clip_rectangle, cs_clip_border, cs_clip_image, @@ -2313,7 +2313,6 @@ impl Renderer { ps_border_edge, ps_gradient, ps_angle_gradient, - ps_radial_gradient, ps_hw_composite, ps_split_composite, debug: debug_renderer, @@ -3264,6 +3263,15 @@ impl Renderer { &mut self.renderer_errors, ); } + BrushBatchKind::RadialGradient => { + self.brush_radial_gradient.bind( + &mut self.device, + key.blend_mode, + projection, + 0, + &mut self.renderer_errors, + ); + } BrushBatchKind::YuvImage(image_buffer_kind, format, color_space) => { let shader_index = Renderer::get_yuv_shader_index(image_buffer_kind, format, color_space); @@ -3332,15 +3340,6 @@ impl Renderer { &mut self.renderer_errors, ); } - TransformBatchKind::RadialGradient => { - self.ps_radial_gradient.bind( - &mut self.device, - transform_kind, - projection, - 0, - &mut self.renderer_errors, - ); - } }, }; @@ -4741,6 +4740,7 @@ impl Renderer { self.brush_line.deinit(&mut self.device); self.brush_blend.deinit(&mut self.device); self.brush_mix_blend.deinit(&mut self.device); + self.brush_radial_gradient.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); @@ -4768,7 +4768,6 @@ impl Renderer { self.ps_border_edge.deinit(&mut self.device); 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_hw_composite.deinit(&mut self.device); self.ps_split_composite.deinit(&mut self.device); #[cfg(feature = "capture")] diff --git a/webrender/src/tiling.rs b/webrender/src/tiling.rs index cb5fca3564..e538f3311a 100644 --- a/webrender/src/tiling.rs +++ b/webrender/src/tiling.rs @@ -598,6 +598,7 @@ impl RenderTarget for AlphaRenderTarget { BrushKind::Picture | BrushKind::Line { .. } | BrushKind::YuvImage { .. } | + BrushKind::RadialGradient { .. } | BrushKind::Image { .. } => { unreachable!("bug: unexpected brush here"); } diff --git a/webrender/tests/angle_shader_validation.rs b/webrender/tests/angle_shader_validation.rs index ab6df086db..00e4e71990 100644 --- a/webrender/tests/angle_shader_validation.rs +++ b/webrender/tests/angle_shader_validation.rs @@ -62,10 +62,6 @@ const SHADERS: &[Shader] = &[ name: "ps_angle_gradient", features: PRIM_FEATURES, }, - Shader { - name: "ps_radial_gradient", - features: PRIM_FEATURES, - }, Shader { name: "ps_hardware_composite", features: PRIM_FEATURES, @@ -111,6 +107,10 @@ const SHADERS: &[Shader] = &[ name: "brush_line", features: &[], }, + Shader { + name: "brush_radial_gradient", + features: &[], + }, ]; const VERSION_STRING: &str = "#version 300 es\n"; diff --git a/wrench/reftests/transforms/prim-suite.png b/wrench/reftests/transforms/prim-suite.png index 9e64685ab980c606dac4178a2202cf0085760973..669aa0b45a87c2f663b337d41c0e5e80ced59121 100644 GIT binary patch literal 51111 zcmdSB^+S}~_Xc`IR8Rp26qOW^5)cK44rvu>DQQ8GZs}5B2muiR>5`Hz>68xXE&)Lr zY3aM(Ip=fl_g}a_91r5mJA1Fa;#tpn_V~%mN)cQnyZFyP{}4QWB(C_+KW8T3zjnOy z@SDH_(S?8hX*Pc>F7nJFW+nDqjON@xlN{GYk+XI5B5$wRUwU_LXoiixl$1&Si?^Fm zqWqV}#L{c__I$X+{uLUx9J+69{Ng`#-ZPkTwK4o1wDO9Z_w>+tGiK|@E5ldzZ{o^! zCuKvgT2VAxQKSuQblbrXFO%9(dH@j&682f#qp{_)AH3+>mI`Etw(~thcsa0 zF&TlFwFeFHCx?u@a~(?JWJQZ#6yr1Yo?6$+UT9(VR{A0>cAe4|ES5@2Ro;iE6L|21 z^z{1-$L4a#<6#El%i1n=jn_YgzTtc9R?@$2TMIUgBy(7hrCYI_CA3~PEAh7-^hrP) z{bW$&vs=2InOjyKQ_|^JV7(q@*MJ;=w192enUlT7Q-cZNT$b79K)H8ZmnWNQWsKeW zM(vk-WZsNgGV(en7pAE0Y4a`c1kDzmgO&V~sh#&#U~k37XqXmf@C!|JsmRn{@_79q z-e10*!5?N-gk&*gb;t+E2-x!Ts8(8euk7Sj_2v-_bTbt^c=mTJRfVl=;p1j-=LyXi zYh@rIJeeok8)JUq)p&zd!9qqr+n?$0eF<|v4Px>n`f<&e-c6Mo(dtazBG0Kzj4ABl zE%=osy_7J^6QpDTA8}7g*s3VTZFUhBBswU*;DaN|ePpIYN1)aBUhvf?&*KYiMka9# zf)(5SBFOn@J1o4B_c;~N4Bv0&*qrSWPW3dQwM2=S(3;BV)>u&(4KpOgCG^z5|96sAjk~jB=hw=6% z#I8gw&lh&w3!upRamIS)4&##&AM=0T{1)CkThD#>)4LqrM_wItrZQgHezg*~$R8eC z8r-P7d0f_@bhIgnRR32Yo4pVbZ;^uL7tRYFVA{~@L=%J!>?Cd>ja@pLLWlE(4_=Ge zDMXT#`sSf8)RT7Xcar4rBuV0$hCi@mtT67RAN<65$*^t7CMV}C9H=ZW9L*JspyTJ5 zt!`eWoVi|-Z;7m?R-)l#=>%?D4E0=Br^%$>y(!@SY9gjOViXqpOUL9`dVcAC1R)>1 zKjlyN>aEJXS?7ZKeU_H4SvOfR(ne3|V3Hz+dQ#LkhIdmgOgLe+=pH(Pp$3`l)TV0H zE^X`Ka!hM{#A%`JS_36NJmo%|m>1jHsOXyWV)X+9G4<{!Iu7=$BIM_D>nx~Hc|1uB zk2=MSN*RLE71S~hI>+Qrs!yg~V!Z9U&w#HmHo&=Ao~G@!hewz(lT;WJ6X#4QmwM+Q zW;A2Eq$%JtCDdyn=#BSGJliv>-hMGS8T#sAQLciZBj)zn9QO?>c-kv~bYKg7v)jiw^E zx+12!X_3QZNZk&eVtCLbRua3FJ9I)XHR)zRR*GxNidch3L^_ZT`-43B(XJS($oEzw zs`&Bu2Ua9i%xmQ6Ay%8#o@GilDOMY=Njrz%V41$_ROPFmshf^(9p7DI)H(jEth5kC z2l3M#Me+?<({qLFuLr^RLGhLuTsCwNo`$##5|Fs_N4uz>UM5VUSH00mL$_p>x@D}U(tZ30 z3Kk2Z8I+#f<=T3II4tM!&%`lV$DKpfm&F09p*`id>&SfWqG_Z9lka-sX_7#czD9i> zv!Lcir6=Oa+ZYu4ynf8x=$h>GW|jFct1LLCa}oZ%$P*EE^ECdRUj$ocX(fg^T+RNH@=Lqcwjx5k#G1mM^w$wk+sXT1Fx>%StR5Q zN5S5d*6mUyEwV#vw?oSpbA2r7O;KoCT`O@J@Fmf3544n5Ht*+Ut=peT())c!#eHXd z`J~B`luDV`nlt`LW>+q>ZFcRPGB0;l#UZKgX|%(_H%^A9QMaUZii;|@=J;hq0_coM zXvhOT6hmIf^7|0@^3O%Qb6zY-&8Rv*x+TTlE3x(MkHty@?v7;@1;!MwsTb6~zq9}u z@JA8kP5#-22-#0H<9iVg3{Yp_S>m-(bZDVCF_nU_sOeY;LdT`sAJMNLooIib{v@iDpQD(M2p`?0+av zR-{yFoSicGk&~NGNhR6_jriMQDOisr?quF*(OupB=GZ+h0yXhGT4QmUQXg7N8Qg4M zngEhK2*hIC-1E3Rdj9DsyKp?EEj3)GpmdpSvagTL%=JUc?Uoq$bIOuqMoynDP9&Eg z8OK&Yz;+DZWUBnzWmk*WWI3tkcWg*R$o)T{Q3Z*tudT!hc;5aku@I#4e<-0BOE20t zZlGtJ)b-KFgtq#8mwaxdQ>z|1B|~$rOXUOGna8~FL<)G~8Pyv1;uWh|Dx=ycJT)6} znU*HV;4}g0t+e8DrHXV3Qo2Hq&m~6x174k4%8iPe_kGwXGdPRQ0~bvu{`tVu>y+AAqw#3#d13#cJ zbjNGAYGphywDK}m7PQaA7$0WHY^&2g>(nTvD$&6T3YlH^e^XfZf0Js>&!o&eyBa!pV6*kd zE+)tmv-a%Q5YfqVbLWk34|HX4GaZ@U4#s>yGpdQ9N)sK}B~`>0j&}9A(^*2iSx|85bwdWA=q3=noc5>7w5ko!L+9cc3wTu%qY`jglbX#~ZNJF5 z7DVHz+Jv4rO3EWlF)3>`!sMgoH1ESOAD8{F1ERDQR-*Lu}oH<&gk%zSvNC(l8;J0QP&YEO~& z1~4Md^-4QW3YW1uqgo&E8_1%pmo#D?HZEp3>NKLzaQp^dcBH#)Et_h%%;rf%5~VXO z#&5&O;D@H(e`2$m9>%gdi3g^mioZ(#zN=W7z+}=@^Np}bXyE9v@`1ZCe)sc}+*zLD z>BO<7BY_jcMSCOR{S{1Cug7X)eMLrx7{ni*nmELbrlT+%xJUF0)Ay=x2Obis$I-vN z%B>!Z01-loZXdF=di1?eKHE_5J3$4;n#HR@V{NMyQ#mrrimmaAXdR8atYs6`qzf8J zb7xWldhozA?}vD`!rQcifGft16rfEqfIsec?Gqz+E(@+Gm63=tid3 z-_z!Pr;1sgo$q2L1dfKk_zQaJSz5bD+-1eWKA_d1#y%$zL9$kkRs)Q0M41Ew%zf+*1c;?`kack8J{hEQ=Fxl z9#XqE`gw;&U0>3He2Q*`W{tAhh!Qf>)(%=;t3Wbu}$5BE7yCHk0 zn{JsMJu$z#Qd4qU%h^m=iP+A)k}eT(aUSOnQqqCX^mP_0lloR>OddHbLxQoC@VaB3 z#0W9LGi^+3tG^-iIOkU8hMF#6|L#~CVZK%Jvs^jGI;WWXHcI0F^l+e1=k@dS{)t&h zzb{W>A@UUEcpRS-5qr3rb#^BuML1Hil1GS0jj?39JhH9;O3pGY z7OV`kw=Kt4#rd$%KD9DH%XZUd;y8ZuOegqa+T(*geYFQ1m);bMVTpUaZ8w z`{k!9H>+LDjk_x~kPlcJ5kQMv;;UkW~y zNpx^ryqi{(3y%1SnBB#5iDOkZ_Kv%!abYi=*)p;Fyk5~sQ9qh@--d3Dr4FZeJa3XB z>)T=BB-0SsS&*tcyTe|;CY1i}b5Y5o2cmrsFPOULl=+R}sUcnp7;Id;ly;KDN}RGi zZxkNHwBwK0oDm`tOJ6?_W0}&Vk19nFUrST3u373W%Z$BoYq>I)!uH|}c6IkVY=Mzt zDrV*luJm4YpOu^ABwRGgCaq%HHoDDT?%rKvixAE@^Dw;$o9eQ7k&J0z^)`&pcJdNL z%0E(9Do}egDcU#R)9EK&G`(ziS*qVR$|I!-U(HzHs-6k0ffy<)<%{Q-^X}y4Wd3?9 ztCnGp=K=9)MuXt68uNwB&ctV0{)%T_&!$kMD=^QDwe1AW{sM4!&2h0J!XWU{(1-i6 z4^Vi6YLHJEG&8K~uSwyu2qsB-nS?vAzdtuG|MjlKVCK8~2J&EU+^@U^QMC}@zEK}i zB>TOx%1-bYEBv(Iab<)I8Xm1(=Cy95E6yNdJ9hLcQ8y!0nZt zkrhN)Pj+XOvbhz5F=r{5WLs|i$$cR$ku1OiGHd~ZC>QL>*tg-3dbSk*Nf~O7O)r<& z=G~QZgd@@+I(iM?R)aIiSN`QM-CM^?X17%18wZxE-ie5W^%c|VPt1+|P6mC8e_ zySO1=xgLqZv0+kH#ql&+P?Cmn$xzMp28T=9i$yO0vW@0hbcWba@n{42z`bgbHNn5y zBetG0b_qfa?qpU(T;X$gqEa5w37;ZpFY{+=SmP$r`TlR$fQPSrzGw87)oO!y^W^$^ znkU&;OdHO1Zd4J^bQHa4Sgk}q!{l;@zR1dz!LTdUis>jXDt~}_uSJt@e1|4m7GRJn zvH+QFri&Ausw0|f6KmRLOJalZ-hq+igR^*+xI8!lSAXKY;I5yj z*9!9h0CC(MciF9HVi{AjiZS!B+o*!5@S*rMf=r=AfG$SWD8NSE=5{)e5u7S&+h zjY)ik4!UJa@{^%f<_h22;lL-(%~nx=y0bZT-XDmD^O-R3yY=sNibX_09HEeA1yhg^ zIB>;pk2`e7XW%_KmkRSnW`h%K$cyEoiRd5&s$kv=(6lCWo#DOH(G+(Lb6iuoc4(I6 z>YJWhll%<3Xo)+o?o}sghBJ~so$+K>2MR5Z;6DYlS1xg8r{}#CqDD1VXz*Hmfat)@e*6w?HE7y- zQ;F?fGtTDPne`{ZKaM<17?->1nqFL3QuC0D;kmyNZlH6v6u(1SFVP2sBk)X2>;Nb6 z2eFqq4#iD9g0S5nPQlqk4XL=J&ByAeSvxOX-Z9`!llecb#bQttS|nh>3TH58@2L&R z`pd){XN>^?6+3Fzt3FZ*!~nj7R(1Y>?g^k`#aUlniGHLpiN@1v>Sv!^eKBJ1=L)f? z?oP->%7;@)ubvJ7sgXw>!%-jgPjd5_;B#KAcJw$DXa3J>W?(fcWiHnoPqKga>2?y= zJ^4G6n&XKe?-pp+u5C<81k;h9r8pDxUeQjvA(wEu)06M&P2vD698%yze3AJ43a%7f zw3L+D##tehEaTd8pp=*2E#nbEtY;jQE_UB19lV={RM#PV)60Bt=pU+!mLv`4&qn!w zZ2Mr$V@v<;1iU;A*pvGnrrTJE^waQM4+4q2D7yNA2ImM~KulnUl4dWRP>H`wEnhd( zNDFuXA3_fZEv~*%I)h$7I-Ol)x5P=sy8Fx6vO!3QS5BGL;^$JX`lJu=6!5hxsELJR z5+$^rSOGRQ_jks12>*xszas$xQsaW8+zqyXxbk$D-2p?Rgs6i05{+ALkwQRR?>e?1wh=yl~qDKC~6mr;574|Ey%du7`G%4V+K z<|Zsvh(7qRW2mdogH!p5^?{gFim`#~f=6`icwTqCn7VHiKwR;_EG~9N=s5n1*Hk+J z+vVECV9GncCtb|RzA~`@4F%n}mAF|!9vItX#dnXz0R5BU-I!SYnCQ&LpD?{*UioHP zT?I8d(Xa%931CO+(b9n;CQ;dkrkhP?ELti#JD@Jsom}o9aKd$9R@bFnVjVFfVR-sk z6Z3*qIwh~R{`=1&GAWhl;mqN#Z?FNDOJ40^# zzD=MTKRWJ~yT-o7X#a&nl6%})&Fy~O;(C<+361T3r|~ISx&`+s)GYxwmXzE4{t;?o zfHwC(RD{6JCr5&Z4cwJ3TC>nkV0#MF`;g!ohW!k*I=WUk;Q*goe2nEcs=bGmmN`)i8F!horS-`{MKPg;NP%ix_L=esp<@x+cr4)^Ef=?+o_Y(j#D6XLB zhw*NTvkXr4XwpPzK*6Zyy&eGntNT97TCbW9wdJ_l4|pEvvY!su84HAazgTF&d2m&q zVcE){n0LwqxZmD;88jIR%y?;PxcW>@cxuS0x=;pX5mI{FvHl;IIwxRjqT3o8@u@_| znV+DK74@~W)d?q@&lZP^6f*pkz{W%3i_2;V^0>c|`Q2&UfF__Bvd#BydIW8x-oLZ; z@c3{iqPfIfGy334^>+4;O-0(<`sxlo<`)mM$fT~bJLPZR?2{TibPzQ9T+7boeTZ9+ z2gZE(h45vav2jN5Y0VDL#pVC^B>Q?cy0bqj#q%i#3C<2bcz~~{BrRyiRFCb+5+o|u z0sBn`q>BNZ7GdVjDp5UKHE?Ap5f5-Tw9yG@Mgs`@iy{G8P2>ZviuR7i@o5H)+AK>C zUGpN`RvrcdJK#UBPAj0G77^;ocGA;9-FlL_%1**3^C87u^ZBlm3H##SOJUb52M=-Z zlGSiuFstW9B`eyo9!|nCt#QT;ywH%KWThI#N-jzUQ8K#{uG3AqZfKFkk*0(3Y@j?2 z596!bi04I-B=qwX+;4CWaZIMPM=9k6iktmN{St>3&{Pcd)r&2OFolNP}N?J@qyO3;V{^dsrr2IIX1^Zmb#{uT~?^C3~$5o&^^%zX_H+S#Z%x^ z^kjLGb2q$X*IC-hPFgIDYPh|cK3L*j6efxyYAJC>H$_TiHc>ln{Uxv79Le@%+LyzI zwSsp3iWaBbY{rS^%@@5oe&;`&(*~CH%a4O(x_hYgck{qL-Qeu8Ax8rR2bA11o3~fPzB&?#>P>vSW$Sv! zk9?bEFq$N*f8Li&Mjn;ZU%CT~TcR-p5cFHzOVk=CVnOP=H_VpaRsHI$0|piPdf$Z0 zf`p38VnmHMlBoKO-cyuJTWwB1rCzFvconBJA2L^Ov;s3{kLAS8j-qB{00bCe@G2ENk(C)fU0> zz-7?NTZzZgPh##UJQ{D#z3hZbqTJ7eAR44KWCgxg#pcU&6i|4X;c@mxj%Is9+lh@t zIehgI6$9!(nxTm#bfYk|;++a=!Q|X`twJYMG|QQ;pDc-1?YU&#dvR`mhqETUOgNe! zpIUrD{gDsV9TV116Xro#P5L9pK5?r5%TPvL4hw@G)%5LtVzQqK&4r|^4^yp9&6(=M zucQPumioncNNkt-c}Vno-LYF>n6$6Ie;{zt&-uGHjRUJFbd+FSh&aINZ_%I5o6h(? zAGr5T#C+=b&4`m{Hh|#acEL9Zk{%@K`6M4p{U*g7qM{dO6C|dGi8zmLNtwBQI_lqH ztoq$Hd^FMd^4M@N;->rO`}l&Fn!7WV|DI+yN&Efbrp5Nhlsl}`sxK^h1HWyACQpUej%ktdFlTw z*9(^GIK6!R*Pi`}cAV21b7a4=dloJ;7Dm^PikHsd-mzmMr+buvLSHm#a3(ZQ0=O)r zzM%9ND8MWryr=-z`GS$N5+CU5$LIIG-#n`BYX4ZsngMlNdnx}ckg@}6xF)RioYJH@ ziFBF5>&InBMq9#*!3B%?&)P+WS#R@So)DRLH*s4W|8PEq`Ld!xm1Fn{mnaDkJ`u!q z*PVIKP__MMUzl{USWfT{wQkr`vr`kE-Xl=Bq(-4&=qC^CJTrKZ48li>ZN$Bc&T57P zQ#=0o%iC_?%Ci`BJ5f+cf%C~?AQ%Q}W%=D9HS6zeyErab=={8HF|X$nO8CWosRKUP1B0`5#o7BO9^SAT={J~L8Gxm+OD>ADnBV`k>N*)7S>Evl zvF|(^FGMRzm7fQi@nNSvDt(@9F}86kg!7`|Le&s;km=;oK(@gEP3Dum_zK3l*CPIa zlZe95uV{Is%lx_npxjDhOGbn1)3Pzjv}~YLURK}O@ut`v*0VlTDlwUSJ#!^V9Y_^O z38Ls{Jd&TI4E^>f#&O?!<80l~rpL2HA}uc;Pc!s9GZ35$3i>S!=DjE5t3SfT!Ue>m z0R~vvT_#6D!r8!5@DozH>WL$bV3Ou&1z%P;T{B zfKW}kZRDr(S$-Zc^=mN(qKK}Z1hTg}?ce|0xB;k&N75y{vKljqW0C?p14`C^#W3xh z7DA!tGc%$uGCq{CqW0HCHwx;JRluSt6q57KQ-r-$_4lhq7&dH=2J|}#`n)Oal4N#i zxBq5+4*P2*>iUS10d-lR{AQf-hC>twP(Z5qLBJN$fX6~ZL7R!zOtVz}y%9TC=SkG& zvt^o&9RDPQ7nA6KfHVXm;MFhlzVg6!@g!04Zavyx&T$Xx(UM$FeyuU+=uXLe^-`~m zc-L(K8Qj}c?M*-{wm2d7#ArY9N(4`bCTsr6pnQ%!ve30>x*ZMot&cdH+a=^QZwm*V zR? zoj_f-Ja91_mu`CGE%otH2*vJS zJ?pMZdo5n)Wms_@TvivCd#%`9U{y(v%9^j7`pMvQb&zIz_hKD(z@WRse4ENR=E+&R zg5;(TGL;IP_Oa^P6YI+ArN8Te9au@BMO&t<5V508*_15nb<#p zK%%xOQMx8+@O@?y(qVb-NiwD<}HM%n4JlIw9qJfeYIdTg{nPQEEp>-v zPee`XthtuyCSTf~9AhM}E>6r+)|7tr*WBl}!0b;6FM1&5^#T`AXg$B^`ZzvP5#Q(q zNUf##FEDvOu&ZQ;Ro)a1K2;BLJh)Ldyw4dxhktgUwj>2*K-PN=T|Q`ZrZI1tB~_X%n!= zsAA^Jno9~=QmyLFarAUfLETb4Zi_hy9ND9(vOF%j22W#s^?pbaY)ii__h^k zuK)mpG)^J1lEP$PG20In;7!{Y-IVO^p3u?Kccj;PexsZL2P$0r94;{B!HtJO_#Fh= z%nbF))GC~e00zF|vLy{7pfGb#&6L2=xH+vTgJ`;aWQmm#@EOoQYR2Mbv@oz`l}%7Y z7=?i7g?Oz~^)kn>=$%Ra^IJhNs^6$9t2z#sDtl9C_#IH5ewY`R!@kORF+!b$X%!9p zuO0u1BPrX&JkJgYAYyIy8138hPX$#b|NaVm@URd@+ziWNjL)n>cjha9%g-iysN&&J zz#svtC|1tUGDBAIcw#||@l9Cso}=bqjExLsI?=9m5M?^FU-S8R&w+JjP|HBsF}(#J zB|m5xk!oW;D;Hu#aCC)_l*O$e$#io{#$bM$ld(?yj*A%T^L)!vH@@7G{PYbw*0(6B z{yE$ffz>%G-UJna{q#rV_;3NT%!V^^YNKU0G? zJrBryfN?gJ`E{w+GIr(l`>#FrTCS>P=E=)o#a%@%V4Lw3jSbMiSVBvN9Xt)Fd9f87 zR8y{pGLpKAu2<UWWpH~uZ6Kyh}*q#>n@hL3Erszsr##Wf9x-{ ze`_>L*^919F^Ne1gZ38GGZI8&TYNN)fAoSF>f=1p1Jd2Y{JXw5Sf8%>jW_RN{!Eel zs$!p%K8q%$@rPM{BAz--t@aXbXtQB^XzHnSD^K{HBpX-Pi_Jl8i^soZ$E_gO=>31W z2I@NqB4F0Tdxo6f$zovdS1-Zc0q1xwb=Tpgf@yc|Pm$H1jjZ#M@+7U~JP z@=v%7t}DVE%nZnF2M+Zer(3TB??xlZ+&E)b*t*;PU4lXRU(dt0CdJK?xHsbTgDz_` zC*qB&%_;+F;$xaFJImKfP*WlDW~m|+IZk{y&P2SSVSIq8Bn7}bV);QFu3eq-Q`*zf zJ)KRlVCrp!rxmv&uDBSns4x13eK|}|J+1=lXb^jnIkQ56zbbOmnd$q|uo!ZXAZwGQ za}ipy+5i4QxW$ZpoMD#1XcUzNasmXULnZ*q5C0rb?o|?#5~QWDkHx*4G?+k8Jjt>A z*b0->AMj_+#4em99aLS=?4v>3#U`7Fom2qa)XmtCm$Nu18ZVoPbz1McP#72`^X5kR zyKUFR+=cVMTSdtE3&=oRAm**#&)|d;M%G2_X++hYAPLR!IKQmmMt5w}4UQMS6zT$s zac+By4<6zV%fFAzD#>ep=c8FH*VwSw-0%(VvqYnE<_YeA*lFgtNx(}r z!0#!IX(!Y&7>;#M*c=PaZ4%raf_rXQgHHf=Vhuz^zPmaQ)Uw^{A($KcmnF9@*WVK<9R!*|0IxKmJLqu`}??i&x738 z9LgM88aHP@Q}^i>*FqD+0-W1AcVewJ^I!36vcrlb-}-rIU!U#dZI9Xfk+|NnGVy8% z;npU?DNt~Lgb=x49j~u2Xu#U(_4Y!~X5&YlmXWcz?7cP1=RI%O%^6t)s@`tj7^A~~ zMndC{0l|YbZf2REWgsQ$GaG&fO%?*DGOiI#EP4>RAIK9@yOfR}_EvEuhBDAigEouy zbtfze2>B}omBt_3D!w3+qc0--Bg&`4`_$GQ7n=bzue>yYFYts;<5zcsUEO0-s`M0 z#^vFt=lcR_|5*TL&9>otyfCY~%XaYQW?n=eFzmHaTSD*XjNe7UvE@l1x(l??a8k;_ zUHaVh)AAGhY7xi=>W~c{B6ye+1=^KE{{mg z9~j(S9L#2R`93P14qc9ABfip7w-_plVfhR&KbTKs_A$ob-Gsb{JB4%9r^gtVjfv|< z-AU)ecxS4bC@h^*e)_`55pogG`WzXd)mQPf zCiU?&ako8|Bc77NL~uCjfoad>3BwQ9Pq&j;?=KT$BcAO4Mtrs(9B(O1@6`;@iH8#| zQ>{i7@u|Z8sm(LL^iSgFBPQaeWWtXuA1_X#V>RD(OZ;0VTcQB3+lcE%8MY=!s$)+I z)aJzIrwea*ckA@$V)fR)=mj|B-fz58RB3G)dVcj+xAK&G#qrz}`Kbni{FH6-Mq?hP zNCG_wsO1C9`04e4&v%MoBS8^{v+P-woSJrd*@XvkxB<{>W^^^~yfK zVqnp)xz#~WO>yeEz0#|6!I;q{@_FnWlFgyH8;k)rQ~^k&jLbBbLv>tfe_J?KPgW?g zki9F|!DzIH=UOn^ypN{C*Aj1`t-r?I1L*+qa#YNG{;k~)NMN5M(lWeQO|?~wZR^`- zOK$5WuX}e+Un6P58PXiG?Go62%Inhj9cFO59Ow&~VhF^f^asTwWMKGHU|r42G`)u) zd9MEW?x!xp6V3IBjO(1i(duq{Kh_P7g9jtx2n0htI*9>v{fnmLl!o8&dZ8PtX8Zjy zIZ7W5B?ag(6E>fZ*1b=Sk`^E02?FC~v~aiZh+}gUm1~6b-028?XbECLRxB<i)o81i+nH4lf-W0T??Iv9(U(GoQP^BYN~D#> zs#_`Y+7as2FuS9SPt~Ke|0f4ZMm& z(DOV4Gl|Q;UcivUdi>|?uO$AvALFZ!A4^>&7~yf?9(h6HsQVKry$jBcQCJ#XS051} zL8lLs6!l)FwgW@q0>B1MBD@bDxb!_Sk&6*{4O zyR*5W-1CFKSBvm3R5^bzZ7|y{fh40&B#ni{0kGZecLB+)hkF8*-<0xC{m~Cly<1nI&h_?_hfVc^Y^8Z zU=Yk=vgR3ZkV!s3&=^aJZBR2&89y6Ru->gUZ0F{5OWs>6I`=M)@-~ZWz9Lu*!u11z zL<=nrh%g?IdIh~e@Y-_$+t@c!gVMcCe-!^W@q_8gzr)C3R>6`U8|&peB}>Vcqi@kQ z&y|91xOmyFPYS}J>ji**8KJnnK=uJo{49pWSV&e`4f;!OBxsHU7Ql8Crc9!wj0RY6 z68(A2>K6sw9QD~#npyIuWkLRIneSiD^Uh9l8q|ec`ew8cg-uSy$YcDoB9a5AQy_O3 zgMtZkO1wz%MyBXVc~pY0ipDEut2Tep%3+tMQ*&rCvKG1eu~x#%lMGyP0__1T9^$DX(uPFI5V_ceBImZ5u zeDq+uR^Ebho$<9*J&Ym5J;Fbt1`!`;0T-yCSx$MapBRm&0!=KAo#t<;?*u9{VzSGSmm$)q7OXT1`%KBf&j_f<>ATzFbaPY< z7+c`2khoWeejjPgOtZLE9hL5CtaCuVVN*M*Xq@vM3;uAEuj_*s8?7z~8F)baK?eyR zvd*6eJ!jDkR3HC~`=U!T5qiTKfiTq8hYlG62s<)?E|Xx#W-orOUr;VAWI}4Gir=g* zp89VgtANY&Z5Xo^_(B^B7z<$WvrhcZVVNt=k6@ksZ;^HS>i7%-ONR{*V6s8@0X!)$1{=e%k(?jKab8Ksc1_ezwkJh+KC=sWT3A;43-*| zCoRYadZQ7kaM_3xz5V<0QShy8d0e=qfFup*Tyd}kkw;>oTt|no>+YYd$;>{|mF*eX zf*+yFw~x4r#DuKil3 zcH-WzqI2yoW$#z4R;hZEO#r09t^k#S0g&reoHX~uViK^$Isj>HGHmHqE}Aqi+KzCm)?3N8iF9R>K+- zf$y+qu#iI(=Iy@?C>65hu&jvqKyL_h#MdBh{@Y4Yu(LaBvxQUTWON_t_KhjApsE?Q z$o=L>#3^gB3Yia(7?6GwfR>y%K|g4oK)L$=+VM3u?-pP$EXhE?y#}onc|a|tpm|YD z*<$48W(@nXAg@`SMchFk>t2I(C{Y|tt4QkFZXmr7#CeQ7ctG4do+Zg=Y?iA6Aeeeb zon06?cLop+h(LZ*zocOULd?WNm-ydv+XHe#&Q_yu_a%QYUeJ2;Vf*v2zV!n3P+Df7 zKL%C+jmk^J>w+2Zi>N@?{gf7yT))bb@)jv-KbO7Og#hU11`F zhHDC1b?iV8B9fO@z$zi=-2D0DW@>jk(=8R*r+jEY?e`w>We?S}fdI zdTVMH&i05jw>F6lMSg8y7hW!;z}|X-u^0Lbd4LDK%Z9u?t1CuxVEsNP!#`V-)DrKNBQ6>G+$HceSYR*THgbghI09qHoK{S25*l z`7{2s?nlWjKllTL@F*=~K&uBXfov4?Gon!INsAz~;1uDShDngn>P7}d1lj|%2o_vO+D6$Tni3;ifui(2$BejPl?ggkwm zROLUO(JiN34^p73#a9K60+Ju1X9ndvTJICZw_d%?rl%GQ$OZ+ero_Tsj9YI%lL2uV zRu~Hm5J(_F;6aB2)RC7qE9uLM)o-C8bW%%?+K(i5RF$>VUf_p>$`X(0T`-GTy!PMj z>f^{D;ewSgfX&r^g50opJgrHP{#1QKc(a$4ebN5S^Jt-|-HPsN=wm;8mUk5~wYkjP$%G^C=mOuY^` zEaS=1<|Su@!32eqC7RI`IFoN#i!-Uzwq+I}hrh}ta<-B`Yj~oCG{wGEx=AngR54p3 z0w-)+!vGLVGeZny#}`fTj?+$1}!lJJga@s^T`h794*DN6wB$Mba2sX8tp$@$_!`{FfU z30Z4g%3B=+*ov%DUm}~8JtDsBY>bP`(ybJYoaqJwsB(ev^vYSRa-0k`iKtPTj5=nk zVoW3b=BlTmzFIf%5oy0?a9Pj=Al>Hr7f=E+geyjLnROIgQ!X}+3yGMbwhO`Q548>j zR`R}ok&74l*!uZCt^GKS^^D)*vydI#F*6CCVdKb`un-BX)d$)u=);j+y(mY1FAq5iuUlBEJ-?BiOP(|lbtFhc=3TJ1C#Ukdw} zN4eU3Kc7ltlawO6a1)}4hx8AX^+OwcWsG8d6{T{1mv|M&I%np2Vy6ZQ#}DfJ66M%a|1xHM-tn+TE+=**ywzJfaY($ggA zGqt@|8iiO#C6$3k3qwiX?9wimoJGRtSs&pxN)miWYeSkpEey*iA8?%a0lAf9}O& zmUAj(Rd3tL6cqpcdA4WZ^_uVXJi>mwH1^|F3)+g+)b$yet}&xiyIr6_ajTx#vUw*pf#~9b0BjB=17c9WBe_C><@kMz}NkdrRomBZpdwV%$sXUZt zkz-I=qQ4QO5lB}Hw)Ks=lET#kWipfuuK&C({*?S>@VF}e?s3NW;3?O>ZMfV{h>Uy3 zPM@ZA3q9sh@J1(5oG7qFmN0ujcm-XQr*RNoO%xm(#P6<=_sQ2CHG1cyvg>czIQb1AEML=yW!Y4G=Yh^KGU(TXA4p(TKsaQ4- zrvf_ey(8pVMFD-Jg{qTf`*2jjR~RC&JulY z<)(j!@afU0jKrjil2>1pd4)_gUtYf=ZHIC3@$M+kDgm+#g{8R`9*%U>Pf(G)GQN^)-Q<8NO)IGE8l|sV&B?i~Vq6N27_CiCHC~E$p$>f0*v?n-J{+vEIc_~e z?hJRZp+{~5)|m8+Nzw)5THb@dsnO;Tr0uMQ?*;b8ZR*bvj9xn^4{<-$@InvdR`+_6 z^~4uaSUxOg5FFBklx+sp1L00MD3T@5gBOemTn`tM4Dq_t7Fj)hn+f7tX0(Ki_ezf6iTa68u>3 zqkM55$T1;XAx)p}LjY@8$k6pvgS(l^&9FjdnMiPV)a=ibtLu4R`?b|2Jd`7V zp>`{cah#8QZugKUdm+X~TviY*IFYUbf9V#J2;yZBoM;dHj@Ob8ah>Xavfp8S5mrB>V>U*w3>^kV!wxh5^(iJvI+W;@Q&N) zR~IQ2q%2&)^Ju1h zXhkA;aarCA?&{;ojbGjEXUZyU`1Fx3oQ%f)>e`3kSErAtT@PPm4t@K$L!~K)*LM$G z1MX5`X-*K3bpl%bH&%Jp&nU3uRu&wsyPrz0*+;$jSlyIc#igY*mvpf>NmzBi)1nu> zC_&nD2GJJqt;U6GCrz8FV1nREm1xnYX4(fJgpzYW?$S!?Q3e!i%d$AR7w?5G?}0kd z(Dl4hd}Q+v)@Cicm~DyyPW*mW>=^1UT+Af-(w|6@3OEmM%&cTWCDTRV@6UG}y0!mg zrz*G|Dg1iRDSon(yKVipxc=qYNFJ|tJZoN&G;>%4rH>-JGC4PlFu2c%Jf^%uQ3$+u zqTiDN22texaB|*{-i1i1cFyDYkPG3i54S@W>EfMMI1Q-x2W)Ddh@wGh0eA@NDqP!w zR>K$aw#vKx;e7p<#RDqRTy!EYjoJk9g~N z5b_km0Kk@KCc;#@YQTZD7GGK*JTRK%Lw};_Wsu(@!mzv^;0`+L-Mmt0HbiQ^E8uOOij>9LS|9!SjcqJ5RT zc$Ar7MBEqufaL*es?_!lU4&M6PKMh-24TPN$q$3|sy_7M{_mkPX=D(sgwli3+*FsK z2Pwt>qlOD#z5>dqM7-8vkRLIcw=Kcn@|)}^87;Cle8$U{vN=+vtLf}b^j4=$+H>sJ zqhe^qKP26Ioq?}xOybJ=mJ5ytuYVZsyPf^f)9lFJSOSJp*%zfS-=q)Eiw?YCx92s7ZxMNI%?1m{xv(?N#5wo=8OZ*}POqI!0&gma zt9bqyd>L0HgRf4L716YsCI;@-VL!NwxbB8?c>OJcm$UOsSs_h@Fz?4$_mOe84sp6= zcO|@W3S6USoODatrWjMglf@ap<`GmPe9r+c93A-PX-e0czW-6s{j9eyiz2|Dk7s4QXC;GD}-#> z4#&veduC*pnR&>uSH?j&;n-yFz2n$>@A-S2*XRBF{?R{fx6bqNe60I*zpm?ke@cPP zU>10ir7fiZN?ZWaz4Z`SPiceoLIsQFzH&9sd(8Y6Z0RV?7kpjL>XI00^SCIY*8PF! zlA`7*GB$elg(3-8$%FuT8UUA~Sdvq1Us3N0to(~;E!)U5fsNm-wDya!>cP=|Y_%WR zJZyKH)7f6q{E9^WA+6kcCtO|*N{N!pfMx=dQoz<*0y|=p9FQqG8`&KJo-*eGEgC|T zsd9MOjl(5+_>^ch_HR;F_vv{K#g-1a$h7}Hrh7e2HQ<-2NL_5Fkct)J8-QI%kBdiS zh1&CiB0RqPCZ1f)!GO#_jsl(CtM|unrkuxu2S2#EO4bYMyP}43qq*fnLE6zxT35Dz z1Zu+Bm~IutB(hM8f$}x@y%A6Xbz&&@^JU7xw*)5QEBbw$pLnvb1N(J zugbAU6EXx$SYB}HyY8IZIVf-}e{qWlYo#tp{R{d!gvWBxhJOkwIZx_y^Q|uHlCj^k zAMGHT_Ubd~<9OovCvrpB(fb)MzAPv!ZvpKQiUBn-3^aVHn&QTxAT(ko^tfYyDj)WqiB;QGnN+Z7bPqI znpKXDIr#}ZiQQr%E9yFKSsUFketfgL_i5g#sKK06HxX(gx(etdVc7og*9 zb{q;9Op5<^ThP9~FKQ?l-uO-}7Z7MOOb_FqklUZ|2-ZdNwRSO6B}%=dC+K7OFT6{5 z*Z>POzUcDGy!XXC-9)TO58rYOm=*D*B=vHOcUFy8XzcYZxp-oR8X)@ zDJ{_>0|Wmg=KJDnECCI{bF=~1DFE2drh#j<_HaZC^{N-}{7k(9`=LMyt|03-Q$2`% z@nn7P7sTx(2O_yL_qG*uS>*V3&GKp$Fc^&Wr7@3UxC1kaB}NiK*Cj<(k(Flz;$)s& zCD$RXpQ(S{l-vOdeaBLwO`)pL7J3~r9&Cn}#Eo%>IS(=r!JOR0;LVP9Kj+idd0C0C z-BbpY0iwN08(e%lUrchSZ7oh9PQ>b&Nna~HH2`%HbL_xSuL%mWOKp&qOF!Ee$lb== z*O7}o?y&S8=1v84!LQCQ=mq^$i2BN$?DwF;`Gu!foVl4f++Z4RMBog$gQi}9KeJU1 zy+a#*Lz4U_Yh}ATH6UJ|Iyz$UE`Xe0Xqbr-qf$Xyu(xT%9o~`~gt0DNz&dvKT@$D~z4Hq^K@#9!15h`xY$#`b2A)zZ>aiS zT6sNA{;pETJ(VY%Hd0@o-@V*vB7!^g@JUwfb@9x2v@?r3bg>6H%WD-^L9Y85h-6mw zd?B1`bB5SiRVBS%{l8fiSZ=j*614?xLjNcMBCqTu9#X z?9BC5`9|IK6%;64^XP)2klNs~*S&J+jb9@S=F8^jDGJPVjCcQ#rA>tIqTO4`Y+uEzb^;6- zxF?>(JHm=0SwvGVydg4*Ij(hF~pkF~I8!}J_h`$o>&tkdkPV1U|9>i@0 zN#MZJn-QW+3ntA>d``GX+CAUyHY*=Ti8-R)0>4VIlf*wf74hUi*1tj3f3I+n*85@? z(AZ4imbzoJR#F1VaBOc%KvNfnM1x$b)y!y4__z5NYDzV@{oQo|;$Xc8b|CT6d!UKp z6WD8e{$G~TF<5S+>$aK&H;mIX?(Z=paPC`FgYDHbu9!HkX8-Spp3e!Rss(+-!=3^I zl7xo(y<-!@VQlM@k5fd{yo!ajXXeNbhhbIq_HD0Yek9`0>`fT=AOoArdPx>U-U~EU z%?bN{z0h&^%vp;$sQ3Xh7cD8SA%oM#Gt6W7hL&NZxP7+}>S)5ElT1ONf8&}T*~$wW z=?iFQ-75}*xU9^n01|Z2E8&gELUGdvd0r92tx6}o3HqzS*P}sWRzQk})3001*%F*9 zart`!--!dW5MxtY(`NY$WYW3{2~Lh}GNf*lfk@ENO%1NQ`oABnTp%S0w@tEuL<(PP zE_}uLfOZ;ul1(!wTvri+Z&N-o_3d2AUzZ~2xxaxvA!tHkoP1|ckYm$;k6g!9-)%X` zauq7weD&O0-_7{X@(;oj3UP#MD3&Y@)`SB`$z@h;q1sqYQ(4KGvco*mdque zU2%q<$L|~!2UZlt@e0h-?uAq0IBfL-s>^e6E`)8Q0~kYw7qww~Z|Wf0;-(K^2+-EX zX@UtWVp5uzMm9K4en&V)wGGHva9WXE^R;-&j%;cIzr$$ky>{uA(w5IBKT#u4nPm4h z=1u4lz`M~fmuc14IViVJ@L?zY6l+?@fRQi^v4$mz=n!?49k1v!BrTMEX$3!2T&?|X z4L(@Q!WksrO)(lH)6pk72*q)d9nlEAyk^O(A>44L#UazKzP>u2K;6&5x2qJ+IULu9 zpF6eVU<5wEd(gbYK*KK+)`+f|f558L;8n~WNX+HCIU!>-uQEPWoiRfM&9q?FLIW*uup{4jW7@;Il5`U37zcn zKtM6mo%&ML7N=$2|JRDDai&+O>S3_B=7JxQ;|rYdZ&>;DaCFpoB7G{wv~secHjudN zo&T=D!sWYfb~M<-<GwFIRE`(Vxg4}8j1hCU?%1qE1;LyuZa;yHK@buc(^de|uxbGY59tW^V)UVshpKIZOpFoAuSD z^5Qz{$*=t8T1i^y*+jJk8dl{T3kbZnQAe$WK}S9bxIkAX!MPX3U~?{(HNCVw8mI4H zeF5J@!S9dqti?CZM=)U$+hsYwQ@a`FC76u(n1w*E4L7f~-a~E1T)D~)yem_hfpRbO z5{07w8Zyb&+P^NJzw;e}p#MAUzqdmHyUGhu2ECu;&u2r}29*6JLi-pOD`VB;zNE`_ zKP%WIt?gWY;>cLAd8In@(s@!&cQwgTZz4_ba{SN3GIqBJom!w#8o^=C{T*h6NBxT& zu)RKY3VD*BniSafYe`29K&(P|*OD{OJCeNZ5+@~s2gcFr(vo}5a4?tx2GLy}9dWetj4e!4;pUTuLSL<^*KLebbJ zYoiJ1Df^JNaDK31<@h&W*s!2t)P|K;rup$_7S2r?EY$#!KJ7dqJL&H|rXymZ z%VlBc!feNDao{6BynFKzUM=~wx3IGl%>rULXqlFj+X{3_pwL0z+Vx+ZcP{UDWvCun zW}f?vYMRg>Z}HNY0r$an9h`Y(gtf+(M4e+mZc=`IuTKoE??%RIUteUf(s%IQF~|Mi zXaH&|1%xSK$M!D|ij*k-<79+sfRbGP9d`8!bH$MJN--CD2vPNX`g(q@3R%mlk-8AA@+>uKFk2?r7B$kx#A`ih>6 z$vm1vqiK)*fpwmb*X3EewXA<6#lL3!8Kr#fx)GjaU|-O*m$E{*H{QuSu~c4@Ou3Vi z1*u|z?K|x?R9397>9`pVszn^<)3k5 zsA_voO2^84cr@*(c7_}-0c(tW0lRJLM=?L%Lkv$H#`h4a^6mOv$37C$xw;2N&-(%H z;A97-0C(DE-+Q?S$yD63j7_T|qq;@n4iz1;zcpfrgfA4U;#T`Jf(k=vvtMU%nyL$y zgM)GLi|)p~2w{k)%=9)OjN!!EHiA|ND8>WkmC09Vk%E6c>P<6FjqF?n2Nwd<={K^5 zAx3~5){I}C_t~^0Rik_j`B6eGAT^X&$QRFNUoOYX@l30XXc!P8^OiwujRi!tT7Jx< z126oU@sch0IF;A=q+_(>Ozpebp<7iae5RMnDX83A*G{tS>u6i#R6n?js9|13A%kb& zY+3mQ{w%2Yyzipc)4%u`0R0$koM8yNCyL4J6$VYcsLLLa{hw3F25C7s$E5bVXyEC(gt10xr7bm~OtSD@iuFY99n~)A$6>aazp-Pgyw+t}W%2 zw`ek6cw#e@P6ByX&)sZ2UDn#yUl|H%iGnZSK>|sfY=->@8n``2_MeJ%|6y`twCGn%IItj8gar9f3Rwe zC#~BD!}=R)nkch{0U7b5e_A0OZn{lq4VJZ^-7M{Hm8ds>*ylUnC|#t;&SYsycdxrs zGjm7y^h4Es?x{D^4HXmS6THKzRYTG98?~nriBt)+-ZTbInsOA`wp~p}=qd1G&S3hG z1d{}O6N}>}C^P>IonZ0YSUg(S_aiVD*mTU8a@CsaP6M6;OhwRecsV)RSLiAklWm{j zU=rzhL~`1xJ9dP`kWG%0a)JH1_<-YEVSQ%NhR(kpH?da%0e+R(aYzLUt`Fvk%G+|lldHg8VJC&;Y zOYve074t7DdA*Of-p#7qiZ&^(x;_{jr%D5otKh}E+P(k~MpvTn!mWi=DRQg;B7;U0 z)yXT6oNaJgQR(MQFTyQ82?}4G7?eo43Rv`qbqO9%DfR8Z@_c1({j+T%+ymLTnX2HE zgDuv}Q{o0$B27TLu98enT4sbPGXoVxKBybzwBAs5u|6v>x$o58bPH`8Osr03KY^_f zION^?80mc}6CyD-l5;L@gb6_9CRc6OY9)JLxgoO++Zo_7zJc2UMujQ|Ab0Kv!}!2d z>!IAscua}q+ZE3RO%}7@2XXiROmV=R46?m*K5tbr)!bFFy$_RnP8A+-o^FL&FAPd=F&LC>7tnC$tX z7kq5JM6r<33Zzei?<{M$@-v~Cp*p6|R(Ja)p~Ef1>bk6S9y>m2iwSlulv$|_RZz#1 zwI9#K7BE3{BYEy)2v5E0qKU`s^n^O3^dWA`a!mKeU33d8ig4r^Jg(f%PB)`u2IddU zvofyVRlMp8M=zvBL$sZKrG{`ifgQ6(q%X6AJB7YH+S|-dlulFp(aaZFa!<$W)Tr|E zXcCnddb*sVdoS$xd{9A{;oJ{E)SPma-X8vKZLe$gpc&HIZXQrher2q_?@R-ih?YhCQirUvOYaeu0y82S>hOQ=f=k%( zk1;Q?G1_9}ayNp$vBlA*=Lav!|P*f8K_ zYfhYV_l{(xK)yxIF}Kbiwh+xj8l>XOw&1Q#?OWO20?P=8vb->GKf}mjj-QaO23I0r zOx56&PAmrDlyU1jUzwkt7*Kj{{2uT_&9Ly6B%(fh7Mz)Vz(YvS7T<)Nx^#1;)8#p) zN=)n*8L+_$`xuBqfaohQJio_e{E53@F4BXLz;#p37+WqWrgi{8ZKMdZ!-3#-Ei7z zkjr2yH=Zf^qXK*5`pvq)ql5Lw=`!9hMvw(sIE~AJ#Rg=`5MH+1!a;)G;Hnr7Zkr;E zv*7lKD*;t)!A+cf7TqRunK0tG8u!D2S5HPFbwZ>}n6v+gy$?uVLs zbO>UWX6aUW+A~=5XVnl@NDjTm;9^$OPd1Bs)PRl`&F#%I^nH*aJz3fN2BEIpko5!$ zKY?M$y!kppAYHBl?$FChu~yq_Zfa`!Lp1Hj#(vF4NvGk-4(1(Ha2;8mT##ZgA$7D% z9@1=>V$*dCt>8|_xQmPofuKJMU0*mLf1384v#wkov7w+Xct0{C$oVdI98EHmNj#GI zHs3~;_DCOJj&uxNIcXz1X~7vQg($3*1VZG`>p{f|jj?lZ_)?ACa?)Zq1AHjYz2ePf zukbZX5w4`DdWU6ccU%|MaIP}b=H6~M&&XhBfqm5jqMT+%i(_e z&?(W@J@QQAu9j#yIof&ir~jfXXLshz8I0NdaWh3iZ_}Si>({Rfihb2$4URjFS9JkV z`c6p@kfze|ZdBc}S4J8aHOEmqNp(Z}M)|k+AM^bl%8d`Al|DYUPqq;>?bL0>McA$Ne`xD?eKMFo&UKjyFLUvC*i2r^Rt)_(agN;&Y=Vrj2XbO>9m zMt;X?VJ{p9Il^-2k?=NtnA=Nd8ol~e86Pp-0$sa9@sXq40a> zAC0;39lpjkWIhfMeU=dWift6;l2olc?ay|-9lmaGf&fu_j9;AVCTescPRqJK&)xlC zB~l=T(m38HI!+uYHTVzq%yB7#1y^54L8#YNLa#ca3G`QskdUGIQFa|T3d=JISf+If zf_+E^_M!dViK|QT!2A8#kz6Ch(@U?#f*!=C2hNVYDj(hi>?vBoQV03!dG!pItpwf< z8X9CWaDuhRs_QT>&JK9pA)K+EMw{_40M;qly72;u08sk!D*=HRy=QuP0q353?MxPDv@Nkz6-|MJ(E_&qP9R9C zrZ=glxX$6b9rR10@@R#=?ufh~8`(<8#WWJ2+VyHr2NIqEFq!FKLSy?%#HE=@_+KZ4 z4Dfeg96xnidC)95ohD$l-oSbWn$7C42rq#N%IOl#$LnqeV+0NXR z<=?FJKaRNbQ7{q|GI;=%_lfl{0JC}pqIE=zTY43ua~DSKG9lL>TJEnjGKdCvKcE!*hrjNtKd)<{1uVG-DjnEdz-J9o6Y|P zh5GE%JadfK=}tYfJgUCIkXj|~iO>mg?RE{5a{aNf_SkIWD7H6h}^0E6#fpA^c)Y!Q56qE#658=uA=7Y z_s{L448m-o4|10Oz9BReY2xWEP_cYqTx!e80*n?V%gJBjJZjxAWz6y^d5^v5{BX0* z{~5R+J>;9a8<`PKnqWi@*24$3qFoaOTSK#F7y}??nb8RY0EJ*&I7>zyhByifDvVB{ zae0Uz@pss^->UW0MUi=CeQ7lvw_k>>CKJ|SHVA|+h7G&;x$=8N`v0x3~G24#ssV};!K5r zXUf(uw4aC`q%i?ao;%ObkDiV*Xn z(G9TT#xU&X8VZ$@?dCtke+R}9kjgkX(tVK)nb6yeS*11kUXE0~K|wP6`BrRklrL##u0U1H1nE_Fd*p;sQzotK)+Yi)oyT+jXHPVxw#!qG z`8%=PR)6194qH96lzYRS=G^;#=5*bR&gP#8X`2V?w*I9vCQn#p+JqWQz>-Ier2aQ9 z+NC!B6Ft^j2ZREr8ag-|{6=)IEF8g2I-Ut--e@w?wdV3a{sPhj6(^AZVhCN^)x3Qu zov@C#NAto#_Ty}%;aLZ?61Y?t5N~dyS1!pNhb@yr&*f&De66EK6dusa{>7;HZ%O@7 zR(LeMMvopA$1}&+dD0xx6^M6I=XAECd1eB7Hk2J%b4*@&pv0ON#3cxB z_OjysDi<5(hxbabtP7kdTy5#sB2-Vvh_-jVsICy^)WzOP4ScQFI{6o&eJNJIH7uR$ zv{QWuxQ2k6Ol&btDTj!;28)G^e9x^~lw`8-42E5evQ{5WxBZ}A^jJqusC1@WL+l53 zp)tnKu+kehm>WNkS#W6QYBkw$Orx{#6j+PDat}Lz(87=iEnOKcN&#RvA!7VC^lR~4 z^%Qhg6xWh;NkG4`3Y>h4-q^;hYfuEEiG0<%1t+2bCa?$f%J57zikqQ~n9pmG503nyGgq zTWX7>n$=5x9Y36RKfkCJ{qU_vG+z)WFDMa-Mm0mn45Q_uxTcB2{UPKb=#Iu{p&5axFWWVH8>PMGu_?ocr=+!C6jSAFgTFxzB;CZIbRakN7`4;L(NwIj^jaNA z@%C?RXyXmj6<@wk{t#F!d_Yo&R>sk0U-^pjpwC>ImmdAAA#wQz((`CsQvHIWFV8*L zT~}N+cR3Ny_(oMIA3=UeY7%@)m_0t0MHqCNGFjhxx#53*f;Sm8kP zYCMQd%IOw@jSH9P-XT|)-R4E;l7_WE^F0Epd$C>df1S+m;m~Z21uwpcSh;#seb%Y7 zF>NiPdbj0?($LOjuxgw{MG5h_-xm&~BH@(R`6im-+6bBLzpT}^>tLMMJz24#OIWO% zxZLDrJ*^38w9qgZ>czgrFtvO+m^IroIX>Di8|;(3kx z`JfZZrckz}ceh>Yzus)jx-`f55efYOdk~r*$9(KyT)Pst^ruH`>0%UtBX(lExjih0 zv0q8U+RlOd9LtWRSRIZsUZ3D;@jE`v-oG7L4ky+;@U&8rA6j$;I~`lIOx>fp_%Lmj z@Pg9wd96)pcUeauSFbOws0`UVKwa_xJNvS^>Jtnzm!&bp{Du&n{6r)U0;P8Y@*+jHh*T?Q6uk!3JFz=&kmHWbc_k1PXUk&xvg=<(`)ix@!D$a8-h6`iT|jDAh^=&+Jpb+}O$+VxA7 z9iS7;&pUMQb=(-H4>nXnw;Fz6OJG)7)uYp1C$Z(P%{h92Oy;4G&N^euk9C)E@qdN0 zF|jPXGci((8U#pkh^Y53>$$?)BhDespG(iDJ&&iI7A-yjzL$9#_vC5LP|R1)dG!D@sKws- ze_RZ%W3(slcWHYn61;Ld$I^M;Zg4jbfFl1__bX=WaTfDAmILFSuY>0bgXivTb-t+9 z5JNtKJgWdE8Ad!MRT(a2mXhlV#h0?Rx{Tu$K*0l)Tu%}|lfD_8p^Lt^*DcZNPk%4; zOh2Fe0LTCDGQUHuEofaIJ`e6Vv~f%q$6xtOi9l0DA?+q+u6n*=1VQ2*Jd#IT#Cscq zQ(DIj#ztQv|VR(taGoL-` zpGD#uJMnJuvQlBVK$*a55O1p;2k3y5+|TnF^YrH|!_Hsps`iY3MYK=~~N$Q6ov zvS6s5S_D~&qPk0l?SWgmO-9x=@#a1icFB_G<7O{D_iz^8DWv|pkMYIT1c8KqtHMBh z^vQ$Y=Zm65AoIXy{M0XZjrP+@lsIVm>DAcZXopY&Z&+jtfh4|6ahFb%a4apc4v{S^ zP#)qjDJ)Yav{WKeo^?;G z5&NQ?)rnp&^X@FwEv?B?qqNsfmwdPpQCj@@kThF*aFsj zW{Ydov>&11#QFJ?7zVI-!-Yn?T;Jq=AzrBvAe5S7zk%=l8s#vu+}vlMfvxR1vey3> z#249%h2v38Pyn1!Lvb&U9T=%KwF>WyjA&XA;iuSGb5H#^7)g(eRr`!e^1L75CSA}R1#03JsmPYPdm9vWHrT!w>?Qg=37l$o0L29S&9aH7H+ zA2jUseL;p+IW)~l{a6LZBZbC!OeEg}Y@YG^T|ty1^58!XY^3z~wraNRI~Y4$*82>E zo^Mm+HZ{{xo4D7Dxw!ic@>fWQS&ty@lhr(+df}!wX!A)-|JJ!b4!MTj&1q;&gc|D8 zS`3wZBsTbloAZsCv@@KTr-71F4%^xKD6o5iRv1T1MB+qT>$JPSUG|{rsSZ#LpVqQW zcbB`Ugz36Ke%=1YWS_O%wBP;W!oi*94r9enD{fG;{vb4H>j2j#N>)ejU^B6YYZN$i zPapHyXFlX2)^Ww$*;Mk%Pt2jvvSbID22KdA>+DTri9W|SU))=z?6IFgakD)DNfxS4 zaPS_)2zj2}1wc`NSP!AB#X7YOuyu4FGFAps`C{BZDJV*Kx$Z)I;V&7=)St^{I+RU@ zHA`;YZa@kY+|&=pzBsk4Xr-kmB%I@=Aq5)`pBsn6P2_GOf%h>#>#OCA2%)I-K$4t8 z701}0_q|RR;fBG@0+M?iGq!1peZ2&pD2pCI^05@vU7^*6n^@#DbB4zD7k{nT6Kh+N z_GlXv+~7v-b27)c*1GADoqFz0weguAIT#;{RnNdfMpNvA$&q-%=JMymy>!u-)T3yH z*`%_>excT2WWZe*=m2uJue7Y%^rj5yMK`1*7uq>fA;WhkhF%#Oc+3I&UM?> z`{CLy(@s!TqG#>RkK*AK4-vO%dobD}!hOL?-I7F_$G;Uje$w%7 z-Sm?n!mH8jWzsvRDABa1Sh6)-4L4D6{6doubEyOJ=)G~1lvUHiV!rt9#>Ls*Y>;;- z%eE8;wmtf49`KrkJyGT32}q{M?z0W7kEIJ#cUjjHaAJUf?1^S>Ba^O(S$TG$EgbCHIGCR04v z!Msm_&R*z+t3jL`t!e*D;9vO++5+CC^n8)3+|xq)a_;?`2X|kKC#P_ZUMx=3p-Ree zH+)k((p8_ImC6ehbGaJ_r+?LJy zKSt03f`?1K%ob2sYa?qEsGp<{@?Jf>*Z!%SwSk$Ve8}~{!d04Z|2YNM?aKEeS+?dx zIXx6=VWX$gll}>GfsNO5PuC zWa}e!m2&!;eu>q{o_u6>*nF87=&I;+SNv$PL}64f-MwcRdGi5d2WK<=@+SGcJJSd7 zn$2y2%QwWy(NIF_=_e^lO$;Z&RKD6cJVde&cAq$tj@{?#zQ^(24{0~!SsVirQS^9%xlbovNklogsc{C?I6RH82|nN#)^q~coXXsB1ulvU z9$jsW`J4^Nq)+ys%ml9va?Yq9BA?Jig*>(Ul)W{L-6uD}Dshzm>)=*q{aNAGO0&3r zI12Zz<#XUlHJ|ku28^jpe#b2RU66b&Qmb&Mah!^=E+l-8+yRz>_6c3`{MA2g-KVxn zIKY-*W#6HU-L3YhLUAv}`Ji;C5lyD?QEb%Gx4ulEdAv<@H90dtW~@c>C(xnKh1W#} zSv+~38O@un{iHRa1DxXgoxN;YoKUf|1!mO?9Z z<=fji+r4FMzw<+!;1owT*Xkx4rIK1wER zI}V|=4@6X{w7+1xK5GfpjwQW9XjU1qma93>c)DoD5RjI=uT0thiB_w|A64ak=R!{T zE{0}iqKsA+4#O}HIQjGnAwCbeQku1zfe$$4aJl+{OWe`fM`CM~YbwV{uADU9F)cN% z{>A52$w&U<@f|{cN`z--?3W=t%S>Au6hv(02Fq?P$VVE;tIso z2#!0KmH>e&U$v$w@1kN|cX^Qt@f$H*X_3L~YJvd3E7q586-e+n&oG(3HiViuRR?lDipX3U&t7S*wZ3W^h;XwZo7-tL+V9bu=^AxeBd@--RHjf$EJxS)lzHAIrQaQ9-={+4r>g zX|dXPF{2I;gyb+;PmA%lpctInbT6J_lP9aJ{$mbD5 z>4&plO}QIaB>bGkQiSM1j^{0n#R^W%U<{a6x=QNMkGA2<>zypmc_f!t)$Rc}O5V&2 z2x7wM^uWe9htik{i^|z1+rRl9{Dy`xvAW7-H2ZLNRsFY2 zwVWPXcRQ0qUotoFl7nsZ=xY0Vpq=1WkMPP<%1>Y@&oq@;IQS%fYjk-QLhuN{`GsP> zG60GPiW;`>6+AYL6Ub5Zs`vobDc++Faor)Jf$Bq9jJ{y0B)4PUyFer?C&+9M-_F6= z{F6w26Z9I1va8n;#6Zk1?hmiMeOv6r0NaPT>f0fHf;d1v`%#5EU=51c&GZuR_E#1( z*8`o5VlR(pbn}_@qe9bhMUx$zj{!zlFr9|JT=RUSs=fUO@NyU}=B6Mbg(Eq2F#sql zbAIA8iGqrr`30)Ki>9l~Q{^@@3kUf>f$ogOHftNfjpE*AfZ`7?`P@xmqLKH`Ffy!Tk@t-5zO z*8FR#A)P6Rok5@oL*~H%k~sFqp@Xq62_sc5eh-}Q%9WLBbtG&*b)f0H7AUw;5Gx@6 zCOMQ!n(*rZnbZBp%QKAS^@N`3|BU6ET?P&(TZ9g!1~g+EQ*b2t9Lh@PL0eaA$>n}Y zO{)Qyz---lvZ`%J1f=8}I6Xjc?3C9=yk$Ztsj!eI(qOt&{4GU|M882z&A><>sJwib zIn{jc=GIogM9k3?+2z-pp!Suj zSKA>QAQ65J^y(+|nh%Y9p-%fb_i0(M)iXfm0YOUFvDjXN%pj~lsqvg9bz4?@H=A68 z(})m7tzDL?_;Mw?juMqfIufI40Mex~O$ThcL_20*Pwo%Zi{_Nnb#PY(lNxr&n1}W}Teg&9;`PI>V)DJXrJX^kZv`;Kr zVaR*1K43_5FwE1}%WAnWDWG(>0{26L8H&aP)L+mfgs_oMujYx@Kaa>9JYw!bVR3V% z%WEIGUmFeufOgs!wm7B5J=YtjNW>d?k5y8GmG8nQ=S#i-Uc~H3&ZJ?Vb?JhyGy>td zh|=5Fg}c{Q_O-s=HIu;BW6t_O%V@99b=}_qbsPDp3S9OSI_%`jxJWW=It3<-jm6kqZO;IG~wVAfB`YD_=oF1wNP7WGi!I}^tsl} zcwc+k2P-1k9KvgtUT$F1)FqJF;T8p83v@uI&&R|*qjhj`k zUv98Z@g8_;)Xg3CNAa&Nxe%sCU8H!ndu>Zr5yT zu7oRkuxL1+_Sg^1@UN1SfYB@8BAO1rH@Ni1&8I)rhKss+s=SDM9Lp=832DU?)t*UL zS@PP%>`Pks?5pF${4U`EqG{>f!w5+k4SO9c6z~rP8F?)LbPrgJ9+{C|w?Inck3wCx z{~TDS00q0}{$0$=tu{bF*o2#TyQZA{ruLkq3tk!HD2!<@amMu1tq@M`e{(Mjlu42+ znp62~45mi3nTN)0WzJM9@HhA!YTq(Ch+y!I5 zD_LA(6S)rwt-Io?v6OxQiVo=kk&6H4M_i$jGJe<4-%vSr%Rdm)mkXL9#wiRDrR4FI z!IT9jLd~Jei4?{IpCype_}ea}-Q3Z`3GTVL*bZ-mh3jSJ3FO{AXBv*Nf`Z>V#>|+w z*dW&=Bh%S8LH7|uq)i`W(}#Wbi(;0b#h-%<12Vfl!M(Vd8v%h|$ z?-&?sWNp0LTc)tC@z*e#%*WNwOCg|t=+y&)8Yt+d}P_(*%h7XWeq~=OmGiIcNfQMX90Em zPZOhlVXg9mkvwo#joW5`tDv260y_KZgLc@RY<2EKx44ds*%8zlRg z%PGH*!1G;aW-5wGiAh6wncG@UzpV1{Jnf0RT==iSFE;Luxs%V!b|K$$1P5xB{eWJT zWB5mnTb^%_30zIzOM6I9L8-#sJ~_D3d}XmXVM_YFiqCQY-bgd`EzhlBE5_7@^^ZFl zhk##7TQbiiBaA!BiIoybKbhNs z>qO2BJedpXE^yht#|6GP*PX-#z2dnZ9I;h4xxeh4eJtDi)9UPFMc5m;FSK`bO)UO& zC)r&oOdKO}MgG^gO8D^_4e#J1@QML!wR%ng4iaT%puCFLTqvz#1AOnBJ? zwIX;Z>?DV>xSmOOPg2&@R+@!V3`10{fb)~ESD(AgvA<;e_^|R1Q zK~HYbyKZZJ>D!ik(m`R;D)vskB|=K8oq4Y3)SB5g@B@4`vJcOBiJo9%jia z$i2w&q|#mbtG6*VvT(alh(F-h?YSuLQ!0rQD$%!_OpLI#)r{MSA~X9DQ_W~XLC-Re zFt@WVSHtdR$$&OmS?1KiT1 zbmm`wcqkr6I&h^a_3{t_!VPX~R*R)gsAXG3j8J`^z+1k7a4?jZ_I*Ri&8+K|RmOX4s=42Sf6bEgpx9>_ z&zK|0ZkUYPNSG|mUN(?C`^XQHN8UFzqRYMn!JLHiX_F+gj?p`BLEj$zstj_J9Y9*k zI*ALjnP9n^Yn8IUc!0JHWqGs^wc;Wqsd(rp5tTUMKc*B9rK-4bo4QNG+S8>$z#UL` z8Dp^TLg#r9sSOIop{nw(bqMa}Rb^E1_gd?bvdyY`5oOD9;0RJ%h&LGM4fsIXKcLx? zn-e*>@ZkaNF|PqHNx&eP53gW}SJc1f$C2)SR~9`~NWOmQESoQ{o+|qMxKsODH`2=l z!39NZ2i_ga=7Q1k$@gZ=Y3?}PHeZ`}yq~ko)KF@+SGeW@GpQMk88=bzc1HJ08pn%( zW_=HcrjG!_niEa&m!-z>>^JZFAL?TAc9PE6MxjAq{j_XcBz3VAP2!C#&s#eU+ZviP z7h!EU2m*dMrBZhG-P>e}L$~k*>}LOu$H5kLf{sVOR1b@@LDz$VgZr~l|Y z043~wRZ5NwDokC6R<(`w|0T5h@Pm}oRe3=pW#n73>AZ9LH}=mEr1J7nnf!dXt08Dx z@gIOoA+_!=fA3_y=*=$iE8D<>!o8N$>D8APM=w|84g~nEE!>R-o~*kCE`77JUOo?C zL8+YO=k2lx<$^Ltx>+vZOnAw#K`%({J5T*h_(l|GsN#lm>sqsStzU7FK zTcb_W`av|H|6?h~BQB37Df%&@E@n|#lm-D}qKR2ZbH@V&ym2nG2Q6sOR0}LVH`~64 z#(KAVt=srw%M+t^TUt}k2kq-0k5kGSyW-u>t^O)dG4q0YzG3{KvB62ZbS7u(rtggO zZ#Jz6DVV4RHQwSmv^+g@41+5MFf!RTaly9I+VSNaT5PX~A_O+^p=W)ACcPPQ)9wha zSw}evg)dudfxVF%+sNH6t{fT+*rj@FwLmVuTjMroIO>ZYq~Ef zHhL@Cz1W-Q1+a!`tabAkExURb2il^vB=#D2p+GZ`x~t+Fr$KKnYxY;sfj>DsVP&ww zJeZ^9JESF-GEvFjj4IOAPl)_7%(Q#*32mdsyGB+=vstCYf#mInA(HyZ!FI`?-o*($ zcSj`uG%iO~p)*D5a7Ba;8 zc9-p{n&;_*w0daTm%xHSiWo>5cLSyM$kqZ8e>EAV*yw22?C=`^2lzpVP$Ads=B;v& z{NAK)T*TqqE+^;pO;~+hst5AqE5tsc^h;{3#L@%d)LqVj%PJ&3n^btfmraJx46xF$ zBrY|C5TTmG98(PqQ{aGUMr-2P+n+09%iM_Vo1i$&S!tR3su^FkKKHKNM-cNIMobOL zzsk`$tqBCb)mYul7IHc(JhR-bP{4tw+}F8x3qH&675{UN0oalx`ee_%JuTgPd{LPq zegks7B&@J3Mz+_;vM9@%!x1P~kX))b;T`VpaR%5j>t5WT|F62QY-_V?qJ0Xb6m4;* zE$$XvOL2GCB0-C`xKrFUNRR@7;_j}+DefNJ-3pwW_nbd*_`nBpCCr|CXZGw_Yu3o@ zjKWsU&O2};hV22;?e_yK5wb#37IEJX#g=$o`P*MMAFG~|(6(k#2`txeb6zeVhBmv( zM5m|Sx?B@5Igct^!FSFX>w6y@wTbCqcJBl^>osnE4?7vD-82NqbE*%mc-EV59%F7ECxsVp(-^(MQ-yjl7l#gZ-POI% z-%tQmxA6#tu@_QKJ*D&Fx4qZbP4w&u05On=lTK(?c3mMYwg~A- zg!_|w-2iRr-3JPEOqZ9+ey5WAI>MzbHdr+pfZuc;N-s@N*>JEnOu6% z-yB%>k()gqY-)Ig##8!C_Ag)C1wKXK)NH>lYixU@e%4*fAJyLX3YnUeiY?pY=*yMM zkQ%4T{In_PNe&!~yqRSK=jd|ukA>f-pNCBCh%l@8_o$YWDiXOBLpsIkb92+R6EuK% zPYO!W!vW6k-(bW?l(+Hg$Q2=RBUkJ2zO%h&2JVsmdY^2Q!5804D^dl~NdqUpp#}vw zd{pJ*rM;n_L9hW@bDiTJfb)VCDE+S0yj*4?JWrA|x=$^9?-xSr4a%%g3h3`o(Yt3gW7sNlaB+QxE?nBOP=%ElLeMMIy>_cp)q)k=1}_4rXSU)= z5V=xdGP{>7myi>1m~UFGQr)YH6n<|h7S2E4wP=MqU_SK}yY2C+y?VE76|~+x$+uP3 z5>G@<1ukj36K>c}JNLq{fsmf|_$wuKU`C=pjo~UJeB|c(N)$!yLqS*hWv;Y)@}CleY6?8YdS!8 z_A99kw);sY)xuf2mw)hsmmOE&EI?_#TGGb5>5cp)Y?PQKv(Ip$z^0+FT2f9t-x0+N zgH1ApyO9d>C;h3x-Tu^MHrI}gn|fh^(0c#uxinF=u=n=mS(@Dfk1Im5MM#LyDu`A7 zcjr1OB61a%EYt;nNo(HNeA6#eSiP;jb^8^Rr%l(73{X+Ei2fJzr#q-fCA{VJS;}YV z@lgo5QL4dOn3(bmyB8x1N*(}vp)HO&a6Y`_IMCwLekoIfxt9|) zT$zc#%Ko;QO!{Y{+Z7VmTV^Su6E>zU;#Jt9OZ43rtYPSb~?4rs+* z(kA#|h(zUQE;jFO%6xD)ymbEIgwpv%6zUQVtnqF8giX1E$bGWgq_57+2mCA6i{^Ro zWSOA6VJ8)SZ3h*x{!`3I`)h?-wn8bGP5dD%^X^6MgSXmE;A%fTC)Zzv?#K$bZV$}Z z@W7<)h5t9nUV?QX~WWT+)Y zaQ=6b^2TZ~khid$LHhFfjL-_J!6bdNR7q`*T>PH~2}cRXGkroXo6qRdmJnv4Qe7bE z1j?w>=h=hTpjYHUmUyTUZoJ0nciJ(zw9`>ip1WZl~)dEFTpaaxh zUjsAW%B-nR*SJYKKML;T0zhL8Ee5cPHv^YR)9+VKf(Q)hjGQi&FwhCvJ_GnD-z^TK z^(i<*v4@yfifJ~|hc5n%?cGSidaPW)ZV0Hp99GlFqaVr z$XUL_gbvcIl!mb)tTH5Xkyzsf2+0{~$RuK)SldVxJIKe3FVqG3J;)2M1iPkC zlm(B{BeD?cH)nVrf2tNJ{c+#MxW8qPx~ZUoyn}ND09_`Cip?+N0Y9G2_J2V~h4+e} zt@4LO!`Apy@1T)5B8N{1EYiwo`tSYGD1SP9y7}@eTTit5ga?h~Z>&YaH#s2Z((r4D z^{#zsCUp8Jg{1Xg0p3e8^RNZg=k}lN38T$#H_G+AxuhV{I7aP9`*ZwwH+MFWR@#eX zQ*!wWr0BKwH7ndwh7wK5{?8;3IXwiUvbIOlzNwL7|MDtrtE4tg>elm|ly=AD# z?!6=al8`CY=_<24V~b*vDYI}j`iFl_LAOA z)1B)an~z@_Gmbfj6nU!MIslf%l~yc?-|czkbW#L#P#LCqK!wRH(Cg2Vfq|g-7FJ5% zWCN4m=F#Yb*uU{9( zR8+b=Yu#0YRa%}&N2Y=L^hhux&sY^35R8z1G63l`^aT1+(Y;9&#)h6v?YYzNj=iC! zOJ54$ELNH|t6pwnSx)||^TFcC!R%tivw%d>dPxti9tKbs!tM4G)fBPTi}-V;4n8~g z{WxM6v#(7m`DOFF)(Mb_8Kl+M=0Yy<2MVS-K(1M9lk@wRw)!-J&4lMgbi%7o+EXVY z0DJ`KjsQ&ISoek&6O8u_OIkop8m&&>w&554D?l!&|LMVI+ykAAp~}z~7!PYj^&X=K zGfphSgMajBhKH|yef_9M=Wt1KX-%A%YjZ^6AFOjxzX!~)k9&WK5i=-Gcp)PHFXmF< zJi`@|=e~nXdHrGr|zA|cBO3-8>6)h0mI5wXKLsU!$ zP|Vhg`-8m_O&Dg=*Y>q+(LI=H(HelSC`4* zFP?CCTrjDm)Bh|S!38K=aIfF@admhDjpDJVciWP)@mpcEHJ0Kxt+ZkN`|^yP&As;r z5rTKTm0xUuv!Ui+h6xT8}TRM<|+5&#n3Kiv+r@lFE%sLBz}`zRe{& zZ{iv+GDZ9P0->>r6}DmxGGQ$NJb=2G_darXr{qBav~H=bC~C4X3ymZb;GU-fh7gF@ zXpsTvjX1{^6_B!#medNJu<^M+9M!`BiNu{O-!cQ#f;W}E&7L>M3mRiDt@IpIK(Y9X z=r%J?V4|H+toO}y4pwyRc#bmmk%XUVRDMPPgywgI58k+nwDKn(3a<=90io zWP!IcY%G5-b*{SVj6P%0v5n@chKK9w>gRmP_pxxFzmt7dAb=f8!%4N(g*G`q1XM^Qo@`2iUCr+1g)N zlGa2szk#02)K}#(625FBHv`o%e1C3AgW@P9G_^(Hx$kJL&?A%FM(Xs((yXnN+M~Jj z4#J3W*#Gd>0|{rzUK&nZ52a1R;UcxeBq0(-Qh!DsFs-mF2@A^pCGpuG)F;HlXOq8O z5_eA5ctbPKyE0W^Q^YH@IkR~=GHaRc(U$p8)0QrbpDE^Te9jU5+4ZI2+d{VOmO=;v zPy~{w0()=#EO=W zwO*5@X*UOKGsfJBwfVv(Aui81_)jXkT4d!f*C~8Z4O+Yy?r@61iWY%~^J*TqV&0pW ztWYnDzusAIL2c72i+O`V|Agwz7nv11uw0S3?}FWX(BWb1@kfRFwO9k^Zd zhCt>sQ?3f}c?VN+qf8r)fj$p;7D1!vd2l*2pG0UFyS0CAd7}>i^8U3gW?5>$JVtyc zn5|*XMlaKO49T);5jy>eGl9dd7k9HFcf;i1#}n57P(Ocj8ya)}MSHF;$XjGPIbP=IO!|r`= zE|dVCDIDRw`=^Te_K~37;-H7+{RJDCr`un>)iw&&)*hsAfV1PW%$1=R)F4awRTlP2 zMtzOu3lsEmEaGOKj}S3R%`j*#QxhfIh;`{)&UTH??VMP*|qcOC6nibSQzlQ zTK87m)VG1Twqq{je3{qz4LkFCfAhVQ-6U(XJz3&6Pjt`R1PWeMN4<7wG!-!7CKYk+ zo;=C={YEm0+XxI@bgJAN@n5jzrGjz6Und`dS`i8~kW{&x9zRtkf~eM{q35e;H^c@V zvibCI0x6J_myL(`G=bX}f6Q9pIb2PXCYJ(;>2B^nVb1K!i~wobS@myG(@ogttRR3yiIfVrw@ z?sXYQ_2BGY{mw$v+UyX}`9ZWP`NUemTqVovy`3G1Il&+zf1nNMhai=KW~G6H-K@-V zJCX%SN)vce_^kb7T#>BcmkW^V05wOJPx-)ZoAup^?^St20(U85mT8LNf=lkjj1trP zSaF0iVGeJJjY~d&OWeAHBuTD0BZzt|U(Lyqnv$_7M=-I(>Hbod$-_epd!O6v`du<7v3%Gou}%uU`4z9t+7Tk=_1aD?u9TGHwb_xNzv+Kfci={uaP zjoNH-?OWSB$jLB2=P2QrU%A!3&PC6pl$f%Uz$m3Hu~Pde)Uhq((U*jE3jm^VD%yw} z{zLGj_>LI+f7ckowqaUrr<(k=n<|3fhp%;|a_k2usL5++K@+3EdmF!lL#GbxbYCD| z)Gh&vZ08g}j@%L66m0Z&$L40pXGhPjQKEQ%@7II>JAob2RM8tWCCS+h37*Y*8e5f} z@W3peqNp!|XERw^J(!|0v1tV=2`el5OVR0R_fw_syk)VHddU6d6cY2(^2Yo+wv0Zy zsdz9NDRf{r?76Nra}mV+l**dfqs%R^BbG~w=J_BNS$`$02hca4d7`qJf8pey)8P9AfRk@o z0wxh^+7uJ>&JwQIc{AU*sM#wvUDvQ4d6A9r9^Lu=R$qk+=E|al2)Y z##<`=-27^U)EP*E_p64id8lo6+l*N%l+h?9BV&R5!l;;L8_)~@y8Ud!9!54~F_yj( zx72>#b@G1`?NgTQ4&YhW79{p>cXr7=Oa50w9%3lYyKo@vQ6Dxb z@);-I3iu+OUIU3N`X#TUjDney9&v{tIDlulM}7^vxr2GHZ|9Qn*63f%)MN*2d&R-y zIEcJJ>43f$*i!UAJk2)>NPR>+gz40~YG?Ba>Rj`MfpG9R&NTv;-o{qrX#<2fWNv+c zn#KZ*4eNEaq$7Q&ZUcaAZ2j0y7&T^ZT?Ld?5IP?LfhcosW`NYE?Kp@d#qFE~%Q?0f z^&Ah0H7IX4OkV4b?6lG$W$GjKDebRYta3Mq_%C1>pIx}$Si>$qC; zCe6b`V2sYlDD~pmE!chDIPg-b3NNPKnE}vPup;~3Zte8uY4wRF$HqoSuz9~o=Jsi+ zy1*gsA3fNx=sl+9MmEfeEy)xhmu;&?uh&qrly!)z*H!==S|vwu(1jF1gv2t!bG6Hs z&V3Y*8SUfyarEnVTJC3IElbWZ(lhLqEk`(b?&A7bp;n(aF86rrwaP9Z)~xJJNOvAy z(gqxem-0u+FwLCgrFD!kZf0jjqk%stZD}X5PxftStIS7*SVEmr{{?SOGh(Q=86|*L zs@%NX|BiVz6$h0{0~16LfIg@nUwvuP#pdB8cEz@4w)J-BUEGWP#J2HeSc*gImr$U0 z{eju?v<#2z@d04QqV7D-AV_hX4E(SItx>!Oa=cmS6taPX|1d0lh_*Zb=HX-(AV`N4 zeDIkt=wsj06MCgP7#64QEH2^HaEXQ1{US)LWzMWq7Dj#aLKhW~NNdm*@ z%UsGG&~vHwv#BC%Wo-j{C$m`MpwsX_pTqlkN}QGb$HMZRmpbxOe-&mub-Jl{=RzX%PS2L_?EZ}% zwwdo7>_1-#3XszpL5fJB${kp{iVuJ)yp`wN@bLC_f>JWv>@QQaplbZ-h+{P34%~^| zA821eXa~kS#E-PSsA^P4Pmd3-<)D%Z_DbM0P`9j>elOS`{CYdarPVaZakB(CS{~v0 z`6vUWgjyq`@41|Z7%3-DWuf7{Waoc@*r2Q61Kn00Te7F(L1i~!kJB1`)!`9E)UGBG5=Ow zpLU={{8xVWD~^^ zfXjOEkTJIxJd)(Q--*K=i))J)oA+I>wQxt2qL`RiDM^+jBES@nT+?1}u$jDR@T~l6 zmBbkl)BR26TXgD+t+*_^Q>IfXk^6CVV%icW3{lQFdzx0bp6(+T}nMvs}s({7aHT zkt=Hp^kpf-d&aTxu*aKOvR$yX$t0H=;u8pt2~K{mU(ce!*)jR(1&0cwzRCQv)wpz4 zF|DarD~!GUu%vkE6!GiVuS=O*M0%T-$_3%{5D)QJtgxFl9y|uG=ZB~RJSD1ssDLVs z`Yr;*N9R9?*L+aqJGA1W1-#2y7g%fAC5e^q4~=IJWu@k5sf>HMFxm;7#FOvSXw%7X z4a$-oy2gF0G56*PrAO!X66h`>SJnIR_An&08eXIu>a@Zzg;{y#38|9OSs5pS zx8)Gq0Fui1yUaEdi31Gv&9Cj8y^9fJ8lHZ5A;H1HIc@(Tur9mZG_PjJZvJ$=dfetI ztRS*uXoknDrwD3S#*yR*Far!9{bK>7;Lt{y0gY9@IiusOTF4PU@`LC+tL$i$`cms~ zedFFq^JT((StP{p@-IFi$zbv(8WGil*vlJuZLYLdnA4C}GgDj5lF!#Ug0nY83vHh8r=uc|=$L_tcY5Yb zz+ktWE~iOzR&zqu{0OpYtwB1;R6N8IhAUEuH!_Vsqf4An?vswBX4V&rh3mDFHm7Bt z`Rb4B7r%xirqD+K4*fQ9Sas!nay46E#>+&;%gH;ZE9+3xa*=UjE0iUGKT~e>0r-k^ zF0?;fP%pR{y9_baqw=UR8)c#<{4sFdGwnAtYU|x1XS76}_Z!s4=nIKgQxez;dwZnx zCf&J2VM{+|Ky}+we^4-2uHWS@v~k#FF$z*TC#D(Tajoc{6S%6%tvbp?!U$9^kW7oa zDYrw&l2O63roi6(0B+jJASj(*TXvPgVM>d+6Rufyp+CSJ+iKe+JCTM}c5ez5YnECw z+jcZ3{~7K?mI4&i7;J-eKx)Yr!XWAdWY!V>o26YMaO5zZxf>;Y-RG%`>+DRI`#78` zvZTU-)tNro9&D@<*xA`RbKjb~J;+FDc+;f* z+hIG^3!H(PfPAv4&|WmN3Th2-9AKdVRW!R$j`|yHd6Xbi7i6{&YtvnauB&b5-H5JoXNGKATIEE2Lz@?ndJcr6%gyV>9}p1h zv;EqWM1=0P=K;BAo-Hq+m*D!3BxXAjapmJx(n2~FK5P?{=3+Uw+mQsQ0A9z8HWo&> ziqKMKF|jRh4$pj*L_F9tVQxB%p{)RosE05f%@JP+J4J_VL$7n(!E(`CU(?~k4mt*J z1h&=4H@6|* zzQc=+qJFRRbH#3d6}iWht3vPep2qI-N`J zdfn(5D^!sneCPy=NY?B|iN-c{{ezjfq%cBOJ}IrTs>E!chR*m4BLDlnvA6qw$e}2w zc_hzwF=sQctC3y|9WjluB1+nfj+kp;*FfLt(`v~vZ}VOBIB?q}StWe#+CSV}yXKs1 z0~&!giL4Gq{WzvQ1>CvY@pP#zarN=hZZv|vG@f?8 zBii`MmLpn`r;B?m^TnubFI`nnA;HH1CBO&;ShL-I=mA?bCldHYk1UE&GeMqP9(7aHmFS4AebA4Tsg+ zs^&PrXENP{sl>3A-@E8BP@R}8f`B!;)2t2Xz_RHnt(TlyHSA4sV{yk`|CS2%=@zmS z3gj|3{ibRA3E91@oY-+-&uF2tsYq4H*Qw+;eBQx4Fop3OT)a-%HtAf=3ZD2X9fr@Q z7YSKOoKNHMG`ES?;CPUXVWesOQ<6z&WwpX(cGEf9TxI!6Oxe-aG{ z`>9?#0%yRd0pKiq@M`wZ&Y_L+ZppKipwEn zehl|_8G_l4*^54;gDgIlweg#*dQYy6)O6?DfQ13!2rZ^__az*qyl~~ z>FcHV&?sVBimauIe;k=h>_GxaySHvzVMz+jj ztFcYSxm_^fo8~<(bMTOG%DOBUU?XD5kB{^a0d#^b`QM_2-TLzZLUM~y^>iRraFs&1 zs0kF#F$f-cOc|GTemvFZ7pa@KQ#_~(%5XsiDF6r1JkoQc@8bcM6dB&xfl)#Do0SW4 zZ}_llDN6G7!*zXohODW@fkOI5=%x4R7vb~K(;4~|VXm+xU*Dcg&pMG*PAp>rzKW0N z2^>W&jfOMhnYn|`v8E+8LmPSX=XqBhbseleUZIIET9f?k)Y zg=aH)Rv}hLZ9%f-MHs1JQbU&<<{b~}o|Y%D*`f^}Kxp+V{mrOn%}VOe2a+Y*mNrU+ zVkMY{4ys5F(y2I2L!hZP1B+Z^mVBNy@QaNsmsA3tRnoJ|f`U)!RzQ99)HWq?99qx# zxSI>*DDr}L)aAje+O3T}ISda~>ts^dIbwR<*q1Izq-B|Z(7`ho!kOnN&FQ5qV+6yC zqH*~bz4GsPL|gY4G>#Hgw!+JeIR7>wF3a27HuZJ_a6*7TdDEi5~Qi#c>DY@jEAW zD*No(PW0Xtqa{<0R$~7AJ~=5&f6>^q_UF*T8z+J%`rcX&Ntq|YBlQQ-ldH|XPa97) zk|Dw{VTQ6opw*@#p|S7CMgpvwrLvUURKqoW`8M*w0_kHyJSOuTc3ROiPrd{3$#+kw zJkr2ksb9uNo*@7?z~e*f+qm%V<=z$WFjP?5iq$D=pjX?m!WnR`T8QT`HDOhWP!A_0 za5z|iO3N5R$Z}nnZO2=aCueL8D`B3iB0fx|?DxZq{L&}KV*c~@`Slu;dCMRkH6&ik zmyz1nY2{zTQ!wAzIi$cp%_>G=HiaJ;3z2!WMYO7rt|}oAGnP&u78vMAW>2@<<(uW> z!L(tQKTNXHf!JPHu?6@n7a<~+D_a{AwCEA75eM4VbIv@pa5hv2={eyp znx%jLYBT-fHEy3AZFazG8Vhp?iLJ&x!)E3Ubl|zNVfh1wz@riTrenqfo=LtKtz~Kr)PA_9` z?Z6IT)U-tDd^ncF>%KdifH7Z~OXTtx__()3?g(&<`MC5f)MAZ!Xv*f33qcK~Dp+hK zxj!{48<*_%e@gGFOZKlwMoQFq5om&+0W8gq5}4scPJcEmWxvFlS{4srT;E^ z5KAT6kc=!&N>M0RL$Oisl!URb7`oaY@$Bxi2% zIK<=LBoIDF6|N!6u8XcUgL3(5pG_l?$>86F$gqQXLxShQ15$rQT>y_DDh5tc>Y zuohsG5MQwDD3Qzn{p6^QX~VvhqQD(BWQ63vL>r6>T$#X3Y!O?a`6NcQi6BTTlR}^` zDZ8(aY(8=>pHN3yMFeRTo{qG$vEFanP<`NL#*GAKKod`5tWYLmsT(kl;*Y{eng;)d zNrtaaqzj%Pji^NT&?U}_<<9nB5M{re-R4pIde1SjH{Ho!b(T{_wryWU<0LTvgYzvo9~N0R z&?RdH=;McJ47&MOeNo=FXgY=YDq90P(Kaf6CtFd9hBI7{qelD(ypf67BHW~cj<1~> z$PZShus)--1_{9eoIeBW2k%IL|Cd$i$&2(l<3Bzll; zU6&izW-nC)NA4CKG1uVybW$7LLu_ZfX$hT05CddACjx&gs@4YCWITuSJ&3Y$j~Fx# z=sT=5_EXf+W~MNJ@$W9n8fmC8jFqaAt~+wfxDrDcMLpSd_ba(;zgocO2)C>qhD+v5 z*!81m#SA$HYgC6c;lru)1m9u=u_Z-QKkhJ9sY1l~EX1SZi+$X@?idjrcYj%Z1or_o zA~46AFQX>wf?adsupncMP5IC0enTbeQ3)bSiIzi@@G?1SvuwWj8S5fjM0 zMHS*(!H9F2h zAib?L6jt{;=*$Psi*1-_3K4Mp5`w_D%^P_M6pDNj#nhT{NAC&gXu?cb=^7XQ#vzal z6=jpl_1r7(v#IG&>7ql1Ncc&0C#W5&s|W`9602!(yCwLl_IaBIEj^VXW3kl|7pau9b+pET7ZHACCtSJfdLSl zJBPG7Y9rT9qp#*A8M>1=swL>Zw!rtQAP8(4KC(p2gZP9@?$a}T0Z#Ow*&ORJkiMjZ z;ajESwqe9~}qyz-N*WJmpuM~}bW0oCzbZI_}$Fv6v zavPWq|Ln>bvB)BG9A?M5SxR8Q*2V@Ig3EML&twNGf0Y!mY6f4$nFaxmr@)e3pB}VW zGHieZmL1hJQNO>m`nehX?RY5414fycUCI1x=@WHB$ zSDGW+EY0%C!Rs8(BcO#Q6PY>uMsN*$F45^QmQ*8?#Vq|ouzRG4h&emOqS>Uvb|jgY zEE|~2TS%F(L&V|XyU79Q|#m?|@j-K1r z{Fcm`cU=uFE>{Hlut%6W^KBycNMeME&$d{lpblMXXMa{rb&mQXg5p4dBaJ224d8BO zR0(tYnpfdE_zIBrnX#M{O6lr#{9fsh;>cuSox6kpk4R0vK}QZkW>x~A-jbN26ZB%R zE4SU$h?qsjnVH}fuVlEvuN1IBI>LpxdB~BdK~n>a!;Cq0GEj9K8_ti=snS2sxaGm- zgsx?tfzmiwRDSVvBL#I<1Xdpcd{}kw?Vi%4)aWzLS+_>o8Ao7}f(G6JV>ptDFMQb2 znZ;&EmaIZab})54zS_L$A2saf#Gv7Sldq!{y_;Wlh-8k6V*>6XgGKPr%7Ne}5mx;Y z_E`WyUe7Q;5Sde$G11t`uJ&j*wOnzBx;EG}6ZNlyg(mVzi@Tq2;h%M0>7-{9WbgN8 z4h&`TVe@%HR70>Mll6TmvWZJ2Cwfq5#etblfT=*Omk>mKySPfxcH0}8Ao6S`cxl|c zz8%{-fLhs6GHhw?tYd{(2ORB&5?6%GA_MID=Q)@3;hj08u-B4uLPfc*CbI@t6p;l& z%+z2_AdL0N(;qi6n#@;)qCK(dtR~D6YigEY+6?n)O2rn87D8F93!!4lcER{pUz|VB zHz!gm=Vw+)O7KasdTo+m*?Z~%R{bv`Q3F$GnLoKb*3M;s+vu(}wSdHB4^5jUUnVn2 zvrZ$r^E@HV>;gp|H*eVZAkCuguvP1Nk=0~tP@S!s_+@hs#?v%8KHa6=t+>-($RQLn z$|`4h&>~IC1f9D$73=PbuGqCKfWEKddI0Yxo0lSuL+zt_F~@3PGe!#Pp1)#S`&FzcC7=aPjm5JsD|9bi{|#zm5<*Z1-g#tR{MKg=EJ~eu>HVyDj=ugqAI4EQnzm zYM*)q5R$>TtB+-EC+1|U%)MPf9_5$E%>_Lvs4tN&GB74pNq~8y2Zxf}?W4wJYK*Ub z3@?$||5jMJG(ZEF2u4v75t<2L2ahbK1bgkd5J zaj( z4~D|{6rkUhJD{cywX@bX#f<%R?j3fA9EL6j;)` z7mM=|8MXEwR?_ViWe@`cv4BbiOCI7^d8L=vz^}O<6R2QtMdKO+|*2o*3H_}yR?9s^}x-4SBd_%#-@SM%VD6gxDz(dj_CMf9MnX}%?2B>0{{i?% B54->X literal 40933 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 C;m4u? diff --git a/wrench/reftests/transforms/prim-suite.yaml b/wrench/reftests/transforms/prim-suite.yaml index 64c46c0abb..2a170f8fc9 100644 --- a/wrench/reftests/transforms/prim-suite.yaml +++ b/wrench/reftests/transforms/prim-suite.yaml @@ -37,3 +37,9 @@ root: - bounds: [150, 150, 128, 128] image: checkerboard(4, 15, 8) stretch-size: 128 128 + + - type: radial-gradient + bounds: 300 150 100 100 + center: 50 50 + radius: 50 50 + stops: [0, red, 1, blue]