From 8bf892403aa54772d1bc126dae080d2b8bfa8765 Mon Sep 17 00:00:00 2001 From: Gonzalo <456459+grzuy@users.noreply.github.com> Date: Thu, 28 Dec 2023 11:04:06 -0300 Subject: [PATCH 01/30] Improves metal's not implemented error messages --- candle-core/src/metal_backend.rs | 54 ++++++++++++++++---------------- 1 file changed, 27 insertions(+), 27 deletions(-) diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index 6d8afab1..ffaa43aa 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -353,7 +353,7 @@ impl BackendStorage for MetalStorage { let name = match self.dtype { DType::F32 => "affine_f32", DType::F16 => "affine_f16", - dtype => crate::bail!("Affine {dtype:?}"), + dtype => crate::bail!("Metal contiguous affine {dtype:?} not implemented"), }; candle_metal_kernels::call_affine( &device.device, @@ -371,7 +371,7 @@ impl BackendStorage for MetalStorage { let name = match self.dtype { DType::F32 => "affine_f32_strided", DType::F16 => "affine_f16_strided", - dtype => crate::bail!("Affine {dtype:?}"), + dtype => crate::bail!("Metal strided affine {dtype:?} not implemented"), }; candle_metal_kernels::call_affine_strided( &device.device, @@ -404,7 +404,7 @@ impl BackendStorage for MetalStorage { let name = match self.dtype { DType::F32 => "powf_f32", DType::F16 => "powf_f16", - dtype => crate::bail!("Powf {dtype:?}"), + dtype => crate::bail!("Metal contiguous powf {dtype:?} not implemented"), }; candle_metal_kernels::call_powf( &device.device, @@ -421,7 +421,7 @@ impl BackendStorage for MetalStorage { let name = match self.dtype { DType::F32 => "powf_f32_strided", DType::F16 => "powf_f16_strided", - dtype => crate::bail!("Powf {dtype:?}"), + dtype => crate::bail!("Metal strided powf {dtype:?} not implemented"), }; candle_metal_kernels::call_powf_strided( &device.device, @@ -453,7 +453,7 @@ impl BackendStorage for MetalStorage { let name = match self.dtype { DType::F32 => "elu_f32", DType::F16 => "elu_f16", - dtype => crate::bail!("Powf {dtype:?}"), + dtype => crate::bail!("Metal contiguous elu {dtype:?} not implemented"), }; candle_metal_kernels::call_elu( &device.device, @@ -470,7 +470,7 @@ impl BackendStorage for MetalStorage { let name = match self.dtype { DType::F32 => "elu_f32_strided", DType::F16 => "elu_f16_strided", - dtype => crate::bail!("Powf {dtype:?}"), + dtype => crate::bail!("Metal strided elu {dtype:?} not implemented"), }; candle_metal_kernels::call_elu_strided( &device.device, @@ -532,7 +532,7 @@ impl BackendStorage for MetalStorage { (ReduceOp::Max, DType::BF16) => ("fast_max_bf16_strided", true, false), (ReduceOp::ArgMin, DType::BF16) => ("fast_argmin_bf16_strided", true, true), (ReduceOp::ArgMax, DType::BF16) => ("fast_argmax_bf16_strided", true, true), - (k, dtype) => crate::bail!("Reduce op for non float {k:?} {dtype:?}"), + (k, dtype) => crate::bail!("Metal reduce op {k:?} {dtype:?} not implemented"), }; if check_empty && layout.shape().elem_count() == 0 { Err(crate::Error::EmptyTensor { op: "reduce" }.bt())? @@ -583,7 +583,7 @@ impl BackendStorage for MetalStorage { (DType::U8, DType::F32) => "cast_u8_f32", (DType::F32, DType::F16) => "cast_f32_f16", (DType::F16, DType::F32) => "cast_f16_f32", - (left, right) => crate::bail!("to dtype {left:?} - {right:?}"), + (left, right) => crate::bail!("Metal contiguous to_dtype {left:?} {right:?} not implemented"), }; candle_metal_kernels::call_cast_contiguous( &device.device, @@ -604,7 +604,7 @@ impl BackendStorage for MetalStorage { (DType::U8, DType::F32) => "cast_u8_f32_strided", (DType::F32, DType::F16) => "cast_f32_f16_strided", (DType::F16, DType::F32) => "cast_f16_f32_strided", - (left, right) => crate::bail!("to dtype {left:?} - {right:?}"), + (left, right) => crate::bail!("Metal strided to_dtype {left:?} {right:?} not implemented"), }; candle_metal_kernels::call_cast_strided( &device.device, @@ -663,7 +663,7 @@ impl BackendStorage for MetalStorage { ("ufloor", DType::F16) => contiguous::floor::HALF, ("uround", DType::F16) => contiguous::round::HALF, ("utanh", DType::F16) => contiguous::tanh::HALF, - (name, dtype) => crate::bail!("Match {name} - {dtype:?}"), + (name, dtype) => crate::bail!("Metal contiguous unary {name} {dtype:?} not implemented"), }; candle_metal_kernels::call_unary_contiguous( &device.device, @@ -704,7 +704,7 @@ impl BackendStorage for MetalStorage { ("uceil", DType::F16) => strided::ceil::HALF, ("ufloor", DType::F16) => strided::floor::HALF, ("uround", DType::F16) => strided::round::HALF, - (name, dtype) => crate::bail!("Match {name} - {dtype:?}"), + (name, dtype) => crate::bail!("Metal strided unary {name} {dtype:?} not implemented"), }; candle_metal_kernels::call_unary_strided( &device.device, @@ -757,7 +757,7 @@ impl BackendStorage for MetalStorage { let name = match (self.dtype, t.dtype()) { (DType::U8, DType::F32) => "where_u8_f32", (DType::U8, DType::F16) => "where_u8_f16", - (left, right) => crate::bail!("where {left:?} - {right:?} not implemented"), + (left, right) => crate::bail!("Metal where_cond {left:?} {right:?} not implemented"), }; candle_metal_kernels::call_where_cond_strided( &device.device, @@ -804,7 +804,7 @@ impl BackendStorage for MetalStorage { let command_buffer = self.device.command_buffer()?; let name = match self.dtype { DType::F32 => "im2col1d_f32", - dtype => crate::bail!("conv1d metal {dtype:?} not implemented"), + dtype => crate::bail!("Metal conv1d {dtype:?} not implemented"), }; candle_metal_kernels::call_im2col1d_strided( &self.device.device, @@ -857,7 +857,7 @@ impl BackendStorage for MetalStorage { _kernel_l: &Layout, _params: &ParamsConvTranspose1D, ) -> Result { - crate::bail!("conv_transpose1d metal") + crate::bail!("Metal conv_transpose1d not implemented") } fn conv2d( @@ -888,7 +888,7 @@ impl BackendStorage for MetalStorage { let command_buffer = self.device.command_buffer()?; let name = match self.dtype { DType::F32 => "im2col_f32", - dtype => crate::bail!("conv1d metal {dtype:?} not implemented"), + dtype => crate::bail!("Metal conv2d {dtype:?} not implemented"), }; candle_metal_kernels::call_im2col_strided( &self.device.device, @@ -944,19 +944,19 @@ impl BackendStorage for MetalStorage { _kernel_l: &Layout, _params: &ParamsConvTranspose2D, ) -> Result { - crate::bail!("conv_tranpose2d metal") + crate::bail!("Metal conv_tranpose2d not implemented") } fn avg_pool2d(&self, _: &Layout, _: (usize, usize), _: (usize, usize)) -> Result { - crate::bail!("avg_pool2d metal") + crate::bail!("Metal avg_pool2d not implemented") } fn max_pool2d(&self, _: &Layout, _: (usize, usize), _: (usize, usize)) -> Result { - crate::bail!("max_pool2d metal") + crate::bail!("Metal max_pool2d not implemented") } fn upsample_nearest1d(&self, _: &Layout, _: usize) -> Result { - crate::bail!("upsample_nearest1d metal") + crate::bail!("Metal upsample_nearest1d not implemented") } fn upsample_nearest2d(&self, inp_l: &Layout, out_w: usize, out_h: usize) -> Result { @@ -969,7 +969,7 @@ impl BackendStorage for MetalStorage { } let name = match self.dtype { DType::F32 => "upsample_nearest2d_f32", - dtype => crate::bail!("Not implemented {dtype:?} for upsample_nearest2d, metal"), + dtype => crate::bail!("Metal upsample_nearest2d {dtype:?} not implemented"), }; let dst_el = out_w * out_h * dims[0] * dims[1]; @@ -1007,7 +1007,7 @@ impl BackendStorage for MetalStorage { let name = match (ids.dtype, self.dtype) { (DType::U32, DType::F32) => "gather_u32_f32", (DType::U32, DType::F16) => "gather_u32_f16", - (left, right) => crate::bail!("gather metal {left:?} {right:?} not implemented"), + (left, right) => crate::bail!("Metal gather {left:?} {right:?} not implemented"), }; let command_buffer = self.device.command_buffer()?; candle_metal_kernels::call_gather( @@ -1080,7 +1080,7 @@ impl BackendStorage for MetalStorage { && ids_l.is_contiguous() && ids_l.start_offset() == 0) { - crate::bail!("Non contiguous index select not implemented"); + crate::bail!("Metal strided index_select not implemented"); } let left_size: usize = src_l.dims()[..dim].iter().product(); let right_size: usize = src_l.dims()[dim + 1..].iter().product(); @@ -1092,7 +1092,7 @@ impl BackendStorage for MetalStorage { let name = match (ids.dtype, self.dtype) { (DType::U32, DType::F32) => "is_u32_f32", (DType::U32, DType::F16) => "is_u32_f16", - (left, right) => crate::bail!("index select metal {left:?} {right:?}"), + (left, right) => crate::bail!("Metal contiguous index_select {left:?} {right:?} not implemented"), }; let command_buffer = self.device.command_buffer()?; candle_metal_kernels::call_index_select( @@ -1216,7 +1216,7 @@ impl BackendStorage for MetalStorage { DType::BF16 => candle_metal_kernels::unary::strided::copy::BFLOAT, DType::U32 => candle_metal_kernels::unary::strided::copy::U32, DType::U8 => candle_metal_kernels::unary::strided::copy::U8, - dtype => crate::bail!("copy_strided not implemented for {dtype:?}"), + dtype => crate::bail!("Metal copy_strided {dtype:?} not implemented"), }; candle_metal_kernels::call_unary_strided( &self.device.device, @@ -1288,7 +1288,7 @@ impl MetalStorage { ("lt", DType::F16) => (contiguous::lt::HALF, DType::U8), ("ge", DType::F16) => (contiguous::ge::HALF, DType::U8), ("gt", DType::F16) => (contiguous::gt::HALF, DType::U8), - (name, dtype) => crate::bail!("Binary {name} - {dtype:?} not implemented"), + (name, dtype) => crate::bail!("Metal contiguous binary {name} {dtype:?} not implemented"), }; let buffer = device.new_buffer(el_count, dtype, op)?; candle_metal_kernels::call_binary_contiguous( @@ -1331,7 +1331,7 @@ impl MetalStorage { ("lt", DType::F16) => (strided::lt::HALF, DType::U8), ("ge", DType::F16) => (strided::ge::HALF, DType::U8), ("gt", DType::F16) => (strided::gt::HALF, DType::U8), - (name, dtype) => crate::bail!("Binary strided {name} - {dtype:?} not implemented"), + (name, dtype) => crate::bail!("Metal strided binary {name} {dtype:?} not implemented"), }; let buffer = device.new_buffer(el_count, dtype, op)?; candle_metal_kernels::call_binary_strided( @@ -1386,7 +1386,7 @@ impl BackendDevice for MetalDevice { } fn set_seed(&self, _seed: u64) -> Result<()> { - crate::bail!("set_seed") + crate::bail!("Metal set_seed not implemented") } fn location(&self) -> crate::DeviceLocation { From b3e838f3e2a8237579a19f35e486b31281c308aa Mon Sep 17 00:00:00 2001 From: Gonzalo <456459+grzuy@users.noreply.github.com> Date: Thu, 28 Dec 2023 14:07:34 -0300 Subject: [PATCH 02/30] cargo fmt --- candle-core/src/metal_backend.rs | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index ffaa43aa..67029d7e 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -583,7 +583,9 @@ impl BackendStorage for MetalStorage { (DType::U8, DType::F32) => "cast_u8_f32", (DType::F32, DType::F16) => "cast_f32_f16", (DType::F16, DType::F32) => "cast_f16_f32", - (left, right) => crate::bail!("Metal contiguous to_dtype {left:?} {right:?} not implemented"), + (left, right) => { + crate::bail!("Metal contiguous to_dtype {left:?} {right:?} not implemented") + } }; candle_metal_kernels::call_cast_contiguous( &device.device, @@ -604,7 +606,9 @@ impl BackendStorage for MetalStorage { (DType::U8, DType::F32) => "cast_u8_f32_strided", (DType::F32, DType::F16) => "cast_f32_f16_strided", (DType::F16, DType::F32) => "cast_f16_f32_strided", - (left, right) => crate::bail!("Metal strided to_dtype {left:?} {right:?} not implemented"), + (left, right) => { + crate::bail!("Metal strided to_dtype {left:?} {right:?} not implemented") + } }; candle_metal_kernels::call_cast_strided( &device.device, @@ -663,7 +667,9 @@ impl BackendStorage for MetalStorage { ("ufloor", DType::F16) => contiguous::floor::HALF, ("uround", DType::F16) => contiguous::round::HALF, ("utanh", DType::F16) => contiguous::tanh::HALF, - (name, dtype) => crate::bail!("Metal contiguous unary {name} {dtype:?} not implemented"), + (name, dtype) => { + crate::bail!("Metal contiguous unary {name} {dtype:?} not implemented") + } }; candle_metal_kernels::call_unary_contiguous( &device.device, @@ -704,7 +710,9 @@ impl BackendStorage for MetalStorage { ("uceil", DType::F16) => strided::ceil::HALF, ("ufloor", DType::F16) => strided::floor::HALF, ("uround", DType::F16) => strided::round::HALF, - (name, dtype) => crate::bail!("Metal strided unary {name} {dtype:?} not implemented"), + (name, dtype) => { + crate::bail!("Metal strided unary {name} {dtype:?} not implemented") + } }; candle_metal_kernels::call_unary_strided( &device.device, @@ -1092,7 +1100,9 @@ impl BackendStorage for MetalStorage { let name = match (ids.dtype, self.dtype) { (DType::U32, DType::F32) => "is_u32_f32", (DType::U32, DType::F16) => "is_u32_f16", - (left, right) => crate::bail!("Metal contiguous index_select {left:?} {right:?} not implemented"), + (left, right) => { + crate::bail!("Metal contiguous index_select {left:?} {right:?} not implemented") + } }; let command_buffer = self.device.command_buffer()?; candle_metal_kernels::call_index_select( @@ -1288,7 +1298,9 @@ impl MetalStorage { ("lt", DType::F16) => (contiguous::lt::HALF, DType::U8), ("ge", DType::F16) => (contiguous::ge::HALF, DType::U8), ("gt", DType::F16) => (contiguous::gt::HALF, DType::U8), - (name, dtype) => crate::bail!("Metal contiguous binary {name} {dtype:?} not implemented"), + (name, dtype) => { + crate::bail!("Metal contiguous binary {name} {dtype:?} not implemented") + } }; let buffer = device.new_buffer(el_count, dtype, op)?; candle_metal_kernels::call_binary_contiguous( @@ -1331,7 +1343,9 @@ impl MetalStorage { ("lt", DType::F16) => (strided::lt::HALF, DType::U8), ("ge", DType::F16) => (strided::ge::HALF, DType::U8), ("gt", DType::F16) => (strided::gt::HALF, DType::U8), - (name, dtype) => crate::bail!("Metal strided binary {name} {dtype:?} not implemented"), + (name, dtype) => { + crate::bail!("Metal strided binary {name} {dtype:?} not implemented") + } }; let buffer = device.new_buffer(el_count, dtype, op)?; candle_metal_kernels::call_binary_strided( From 8e93e76a916b89fd7570570b1e30b72cd725de14 Mon Sep 17 00:00:00 2001 From: Gonzalo <456459+grzuy@users.noreply.github.com> Date: Thu, 28 Dec 2023 15:03:05 -0300 Subject: [PATCH 03/30] fixes error message --- candle-core/src/metal_backend.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index 67029d7e..2703b1c5 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -1143,7 +1143,7 @@ impl BackendStorage for MetalStorage { let name = match (ids.dtype, self.dtype) { (DType::U32, DType::F32) => "ia_u32_f32", _ => Err(MetalError::UnexpectedDType { - msg: "index-add ids should be u8/u32/i64", + msg: "index-add ids should be u32", expected: DType::U32, got: ids.dtype(), })?, From 3922b42c18d1ef0f0381d1d203a882a9f9f98f6e Mon Sep 17 00:00:00 2001 From: Baye Dieng Date: Thu, 28 Dec 2023 21:50:12 +0000 Subject: [PATCH 04/30] add urecip op to metal backend --- candle-core/src/metal_backend.rs | 2 ++ candle-metal-kernels/src/lib.rs | 2 +- candle-metal-kernels/src/unary.metal | 7 +++++-- sd_final.png | Bin 0 -> 336984 bytes 4 files changed, 8 insertions(+), 3 deletions(-) create mode 100644 sd_final.png diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index 6d8afab1..48b58e76 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -648,6 +648,7 @@ impl BackendStorage for MetalStorage { ("uceil", DType::F32) => contiguous::ceil::FLOAT, ("ufloor", DType::F32) => contiguous::floor::FLOAT, ("uround", DType::F32) => contiguous::round::FLOAT, + ("urecip", DType::F32) => contiguous::round::FLOAT, ("utanh", DType::F32) => contiguous::tanh::FLOAT, ("ucos", DType::F16) => contiguous::cos::HALF, ("usin", DType::F16) => contiguous::sin::HALF, @@ -662,6 +663,7 @@ impl BackendStorage for MetalStorage { ("uceil", DType::F16) => contiguous::ceil::HALF, ("ufloor", DType::F16) => contiguous::floor::HALF, ("uround", DType::F16) => contiguous::round::HALF, + ("urecip", DType::F16) => contiguous::round::HALF, ("utanh", DType::F16) => contiguous::tanh::HALF, (name, dtype) => crate::bail!("Match {name} - {dtype:?}"), }; diff --git a/candle-metal-kernels/src/lib.rs b/candle-metal-kernels/src/lib.rs index dd97a86d..e3f9397e 100644 --- a/candle-metal-kernels/src/lib.rs +++ b/candle-metal-kernels/src/lib.rs @@ -165,7 +165,7 @@ macro_rules! ops{ } pub mod unary { - ops!(cos, sin, exp, sqr, sqrt, neg, log, gelu, ceil, floor, round, erf, gelu_erf, tanh); + ops!(cos, sin, exp, sqr, sqrt, neg, log, gelu, ceil, floor, round, erf, gelu_erf, tanh, urecip); } pub mod binary { ops!(add, sub, mul, div, min, max, eq, ne, le, lt, ge, gt); diff --git a/candle-metal-kernels/src/unary.metal b/candle-metal-kernels/src/unary.metal index 04fa37a9..46a2b0fe 100644 --- a/candle-metal-kernels/src/unary.metal +++ b/candle-metal-kernels/src/unary.metal @@ -19,7 +19,9 @@ METAL_FUNC uint get_strided_index( } template METAL_FUNC T sqr(T in){ return in * in; } +template METAL_FUNC T urecip(T in){ return T(1.0 / in); } template METAL_FUNC T neg(T in){ return -in; } + template METAL_FUNC T erf(T in){ float x = (float) in; // constants @@ -57,8 +59,6 @@ template METAL_FUNC T gelu(T x) { return static_cast(0.5) * x * (static_cast(1.0) + T(tanh(beta))); } - - #define UNARY(FN, TYPENAME, FN_NAME, FN_NAME_STRIDED) \ kernel void FN_NAME( \ constant size_t &dim, \ @@ -108,6 +108,8 @@ UNARY_OP(round) UNARY_OP(gelu_erf) UNARY_OP(erf) UNARY_OP(tanh) +UNARY_OP(urecip) + UNARY(id, float, copy_f32, copy_f32_strided) UNARY(id, half, copy_f16, copy_f16_strided) UNARY(id, uint8_t, copy_u8, copy_u8_strided) @@ -128,6 +130,7 @@ BFLOAT_UNARY_OP(round) BFLOAT_UNARY_OP(gelu_erf) BFLOAT_UNARY_OP(erf) BFLOAT_UNARY_OP(tanh) +BFLOAT_UNARY_OP(urecip) UNARY(id, bfloat, copy_bf16, copy_bf16_strided) #endif diff --git a/sd_final.png b/sd_final.png new file mode 100644 index 0000000000000000000000000000000000000000..cad1029d5ab7334fcc80af09bccb394bc45113fa GIT binary patch literal 336984 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 z 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

g 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 j&+@(i&3P}cnG=f zfJMzz8=$mxumm2dW|Swvw4LMRV_6GqXVz~dMR}zT%dx%l)^6|i=!`Eg>#!@l)O5dH z_+W2+83VQifDh_lTQ=WpLFeozVR>!y%Q>6Bx%%awZ$DT+Kfav%r1V{ywR6L1$;zdi&?m|P z|J|C5>;L`TSGQjsk89Y`9I*nMhKU|fP-q7&^X(Ik5eCQ4Q)!6Gp|%QleCg=Ph!u(F zsq&mvaXF?sxk)U>rOd$$wt69J1zC>SC$;2Z!=4)-ct3b9YkdTU%S9`*W=_o#TN?l9 z*9~1ry1A-yP1d-usCGIpb2OSJef;Eq|MkYVSN7h#Y0iBSZAu0~p=}IyxUqs_gdFAa zTVs|uT?mU+f(98chw>Y=t23QMYogJ~55bngW0}OgR-S}`9hNz#{Cb7Cg-XOS6frAm zm75taX|E_pSzW9XY{oXg)f1p{5@HgaQ;iQ{nneLuO zy-)u!x9RC}jC>$yLJq4%{Cx$pRaR%awug@j2?JasdMB*Upetuna&0NX1SbQ-Znt~H zO|8*MXop+P1@ThG6pnjkQ`)qY;EB6;_Rlf5=$5V5Y~);-6Ahio(jNOcTLs zE!pHIE%?wduLZ*0zFy`>aHU7c#J6Ip(Jt)rQ3M_wXO4@`6O?-3IK)KEmar<9;AFCc z*uFkIstR=Wk9CfW@R(*zsx`h6YHBdHMYd_p>2VgoV|FOuiZ)0Y5~wlaAk=1?ko4Mq zwe&nmk+}kAGfU*p6HUM1&SMWv_~4P|HFJTsYPitXT)(;x z`g#VtVOzRT-Z@k;dI@4LJqB!kr8e8Y^_kZk-{b>y5)yK9pGlZ!r zrlI11+9SL*#vIC+NsWZrv|2`ST3phc^KQVXVN>u|h~h?Jy4zFYusy?UrLgi_nDOA9 z!MnPpT2%M?(RoGYD0NC39`8A>t?Ib^%Bt0~-~Zh;Mi6~PX&1>qE>Vlhv4FDfjKD- zZAkI_{zfPZivyWzM_sT#Q_XJT#iJ~67B|l;*+H)J!@97_ij@dDF6?q+SZ9i-J|8t; zD<98hqypLaZx4z@uOZcuQl;0TPgQ|vs8VL>6Pa;FxRu~=wD_(upNt`y9F)?4chV^J z&w7gk{HP^m_p*HZFZm3IMw2Qy(j!^-*?wwy=BfeG-PteLPbBD#wW%I8qIWj2BvP6c z;RpcZUcnz;sn=!MH4z=g1OD8FJYxxS$o^h$c-Phye^}95^r!cJ?SCa{Rnmp*hXspY zng5~ihGyFE)tgE0l{}qWamyOol-zw_j3rlODGDzXpHBUuPs5L|80_0x4+}P8Ms!(1 zeQ6JMxOs3*wSz~K52_+w7%?e@1T{6o=}e3o0i0aqhrnH}YrH#be+9c<DKWeKmrA0tr2=5X@=U`X}I;de=ppIUV5?I90?H*)dZ=)vl4n)85 zjDEbV$U`4=+kkw>(p<;P&@U6H2_4<~MS%u-0zl8N)nNvoYx=%IWlS_UMsfkqbYkzI z*P-L2=sEp0z>FvpC`4vJdsa9E4zAX6dH1t%k3OUo?VH9Hv?X!JK} z2#L)!)aBHA!P%`&&Bm@h)Xri{6&TU!AdE~v{%9#vS8Eu|Phs?P0I6wjrAO;JnaK>M z({9m=zOT3iBt2+9F#%i9k*BI8zNm-`%nC~T7sQcnD+}&%P`)Mks4pAp>(k@F?Tm$+ zwQFWGPpllu9{LwUWuxf!4T~2+^{2EH1~16R5A6l$z;$zD704H2aeTqS~H0 zWrs2)ZQ66Jy|l(qUy2P_uu?BMYHyi4YZ`y$<;zWf`{2sA@9*9F+Ss4A-e}CcS(vnT z_pwDcI|i+duf15YVMbYV`}M}N@}))n0;m1TSt-@Se&aumfsou&(^o3#W!uax42Fa# zXCyNjJZnh8Xd|2pHh+-UiNC#I1MBZVQ%!t~tQDxZX>RbW!Uj|T=+9Q9L<;+SzV@## z*OaAQmP6=x!aiF^e-5Z2kV{Lw8?$@b_;=x`&?s z^`V#Fc*J^oIltk2?!a5Pgb9tB1R)BcQM9{jgn~|(u~7L7!T|?QKBa5V#C{up{!W6E zh`PsPqZ4t7rDE5n6Q9HQk)V-n;h%Vl{(dXKfM0xgD3xs2!tQEi{_^Prl{U~^y7o0ude*( z`9}}v$?WMz@~1UfUmc+;^@37S1IOIjUp4&dNZ#4;p9>;k#HG}N5u{KtIjl*ln#X7N z%G5Ys;3^;!KmQ$*MJAG41dfE=6gw)?b6ZNtmMY9NU+CsJz;JQfdz+_wXO4gH&fW8Y zyu1OSv-bM}6Z788i8jNIPQ&JJZU;uR^f{v8WYr>%&1*jYWAe}TpZU{wpO5rCJ#~Nf zV9g)wzW^o9&{jZFzON)K$h!F&O;|_T^thPdeA4JD6P2iMJS?OdD30{RJ3wMphYAtc zh@Cl$)DRxE=7sK@-c&T*4#Kh&=274of@Daf!QzZ?;O+{QLXe{gm6E2n^;xii>O4V` zB}eoLq@6s`K_UTIU}Hh90@v} zl5vylmf0khX-hL-3}U%3wNY$v7>k4iOq;Uu#5D zl7)b2h6ef|J`2sZXNI<@MG0Hlv6y5ab--)qoY*U#n=Pm~Ld+ENdPrrLgSTw=^pRiP zP^`PXm|xtsk#ldfPOIPDxQ;J9T%*ZT{bKmQm#=SKXa3JiyZ-CFaruVz6qR86n>qw^ zE+h7dmKO<=u@`>U;QD9fD;Q$37nwa{j7+qR z$WB9=j1Q>vATwr+$xY^m*Dy&HZ|xMyK-evDbir%op;^t>9f)q{!mNR6%HB%HYnr<= z8#& zV)BeJV}ooJe4)4Rq`MbZ4Q|o%?|C!4vzD@+wvEmLNZ|x!i94gc+V&c5sU%8xGNsTq zu%N&&&@?y_iEUZ(cpZ0D(skPjo{X4jr$-cQMPSY7dUrD~YHPY)IFizpMCb$d73CGv zJw3xE+WJR@!+%Kr!#|$;_USLq9edKVakBF_OH0K1j|v7@o)Y>_MLnZ8OE4|edl*u= z_RQ_O>FaHNh7D$R23#mmQ!FLe&y+2NdIh?lBuuW9xg043A~>KmCb6?C6Z>m_2~U}< z_aNNy)HYTs{+GHGuOqc|HZo`uy#4E!pF4WtM18`s8{QLwl65Za;qb1+tdhs&FDIWm z)~D;JI$hAPe@9Qc@l#?eD_V1GCbw*VB9v|d7y3#O&IHjIhEC5=NHH@XZip`-2_+?O# zqX%=^ox4O*)X#NN6K$6^kue+yBHpNefESoR&;qttGa``u8SNG472)h8V@ru8%ZNz> z&VIJ*tSm^df0c|9J1V3Hw{&%l666*FjsR9xjEnvhaXlth$sqB%}2qBk6JbJ`~> zTmrRo#Gccz`=xRsaBN94^A>(p+lmXAn!}Q?{t-RW7u~<>{ogl%_t)t&@6ip9|LfG3 zpL^;@?E+r*$d=~OEvUBib@{%+G(2Y@vzOYxmn2;pI4)|UInHZu-V+hBvI6FHPFe$(`!&>|^t?80MvHo0QUS zb4}i`arzlz%;4x*t9y2m3g<3Ws8zP1r42%P7i;vwmRkiXNAXVfa#_B;tS39I!@!(U zWtVla=zY@~rI!W&1X`xT4cKF%se`l0u@0hOI*~ux=M$M%ikUHz2Z*qzRu;9Wx_7c` zrgt6PZ>^BF-bsAe!~M?}3ajbuPmQbAWYt)91#9q=3>FhX9r_QpLw!wh0?oxgLqYfX6dnv|Z3?h|}m!`0f#B zAm+F-O^^grd`PO;!BmlWrAd4Go6B=QW(s%9uh)BO%5tTYtZJ``b=|VJtV4FLKGs ze67$RW2uK32PvLn1__)J-!?FyE#hk!7$dY0O%fu5gNX>n2*ofHeJDb?57jBWIxR_o z{QNv<((z^y;mT7i-`@FD6Xfo&&OoxplE525aM0Su0a@grtAI%E&ECkDIFWU!plM5v zIj$5#!VFzvxH=MMI!8Kb%TRIYz5<9bW>Vk6O$`~TOv9AXT~*mR`fO^7G@TUcH3Vis z7K*S9%o=NHL_YQ26j(E!Xk`mo2D`Q`xU20pal&MUGe0RTlk_3j?g_Q1nyC}}Cq%U# zn=1pf(&4JhUCzWqUnedEpzE3NnKGStMIBEIA_4b6mBS5_Ag0iwY2`X@!!nxjo}OEC zfodA09fdqTYsjt1WYdmOjPWg*L1`E^7ZTKCx*1yU+$eV)L+;#khgM8 z{orsLFSnT9X4^17zBhZv@WH5Uq`Jp2nrU3{bNLaQWaH$RIdPbQx~sM+*i)mOXeLGF zj4;B7I^ma=1}XYt2+`u0LX5;qy27MQEGC2^|DN72gr6Ll+fZpODjTCZ+S*Po3rpLN zq%RAxFMkl|IzOqp^{D5}fOlEB#5^M1*7)DN>#6BilEp)cufQ{ z35jJX+*rmKN?>*nvGI_|^3eQJkZ)rE>Olk8zeoU$H(`z=8EPHWU_j%O7G#IvOHr88 zf;KT(Nw5M?%IUC)Nn(q8eYXnO4XbC3{V*}J#nX{~#)ATO9PTZqDJW@~C^g#Lvs&Kn9&RU&mx@V>6Ib2VFuKS|&`SA)sY2?RA53kJmAXT(|Gpk)m<;TW`)}>z4y}M#ihy()|EqZ>Abpq zgI||b9ei^ByPvjvwEb5{kIgzX5r)VtFUxf>C9<-|ni9_l+Q~BbxzrGJBp&%`VVY?K z6)T*~VX=Ye$cq?{x&67ZLu8`osXH+cPjWOq9brZKC@U4?XE4=B*?0BKHg~>#+Q||) zT4`Pw%8npv59I;_#x=Vj%uW>L#K;-1b1c(23k!<`Iy6-naf9Zd13quW62fG2mV^!r zy9I}Z#}s;)G*465>Bf^piaFT4!|UcoN?Ra5#pdc9fkiYNsKuztR%9=7R^ZHbO^D33 z5`jM+2)C*@S7OMhmC-D#4LDYQ8BZc%tm+~d*DE$lSq_Th&S&v-jMQ*wGBE4S$vjOS zurGpajdTqooF}dn325b^YzhevrBXa7dT#43T?bYIJdcJjfXT-fLHGom-`jer%g+l1 zY!b>G3+psoTW>a<#O58TD&)iC>LU7iW#wMd9DgKzAkCJjEORpAv^2vER5c`QPEedy z>`9-}lyZ4^fR7K@M=#Y)&ndgLhMsL5GXrcxHiQVHLimBK0Od?c{3(>loZ}~=$tB13 z|M1|?xBqARZwkIBs9Za}b;+yI)J)|z``UKyP0Q-#+>e*_&5ym(%pagXvVFF9jatjv znUry?{w=cn_NxQONR_14>|2<= zW6jDGMvOcGx^iMlL#QSTam)BPMr5TkK=>5*w%Z#5UUn>O8JtiZ*_*!SC9&C*v!LMz z^Ms*b+gyA$e0d=BFI38k&sfq`-N%^@=tX$}wI*CGkmy>d?T{A{KY^8%z202=V2D z;K(zxu#IAT#yUm%rWc1LQYF=$?Qc~W^-!cXNm|?*E-G`lJv_ldEd-IBvR*5_Yi4G{ z4tt}$_lc{`bGLc;@YMP;k6?YM67}2DiUgvy7pf-tl)%LE@RZp-(aFDk7K*;{?W!y3 zoc0IVLlgGikGa2kCHZWBVB_lkZ68+*o#%ZaEUwS0tmO}{dfHS@(z4l|-S2kfJl_@Q zdwagX1+d_%b;I7#BR}4^4c27prTRw@zS%o>6+KB3$EJ^=}s;m zC@Vw0PEGp{3Qn0KaAU9J`L#lGM#~iOWXt2z(!%izk=`H2CAQj8q;((|IZV2UrgUui zIS>v6@*XJ{Ci*M#9d(dC^N6q`C&3oCuw{pd4LW59ixg5c^j!`*Sj|>Uj%r3TrEwl? zsIVCWRiq`+@s!s-GLi?STTx%-is=FbG8fu|h_r@eZ)O2`Zgw%uV&pJ;^B~^RS98%U zGI(r1kX>$dgeL>uO0(5ls={(;^o-HT(v(W1oS0Ad*)>s&@W#P3;iX?wrDWR7u^#e@ zGebh7mlsMYdILZsC*Zgx4&Y;-Dx{FpkS*)qf8UcGW>Ri-mN2U`6N@wTb`Dg05pG|q~>Bj2m19$X9Lr83(cJ+OKBGhwdclp7@UItgWIanou8 zOX_Z&u*R$ns}ZkTaA>yBwLzR;+w=96G=y7yT2lu4s6>niuxPvGRK31Gu|zP+fMSrl zmeYRf>iZbP?zrR?zW?>X^>^N_T=m`h!H=xh1KCFx{kmk-H-1YZLe~ z&I$Rke)phP+4%6EO}~Ht_tu&vFaLMbgD27N-&*mu_|xeR_CEj0@9*FI!*BoJqg#20 zWsswdx=eR&AkO ziQlB~(Aj?>run-Mz6-ti)jxig3`q3Rn%wJC`?gKf+qPRS_xSG&Cf1Shl^e_Ydy`zt zJ~TvpVOi%Q>)PDZgXe4iK0fznEhf-ki~)3&ivHGCZnOE|0s^A^(I#WZnlE63%(^bD>YN||6b)pqxX{U9wLwg&XGX(_4IJoX5OM7qr$0Zp z{R?i~q$t6qkT}L#ZJTYNISWM70h{o#HpE8J8!ut$(1#^Duw&u{q>$s3GdXffPs(8Q zfo2I4eUjE9lIA2L#G@<7coEj!EN`azGYrH<#}r6FaP)c)w}B4S8sp% zwB*yZJ%+6>9JQ@_tN;Aa;lDd(9^1@20%7gS`8&$>*|s(HWm0*ou>H#U+ULJp^5p(M zT@6p3KJB~m-3Rag>tCi<3&y+dw3fg1*T3~W^Ix`GjZ4Lh&?em^EJkeM=gPxOQc7cf zq2@|$a<@K10U~Om6h+%&vM5uaORyzOB`2V8z(Jx>3j8e-7k)(8dgu}s*e}!T%2>@^!Oj^7T2bW zkB!x3Oj$D&5;I&wOmXb-UPR&a1(0RzQ*$%3gOU=ymoo8`L^uSm!qlR0^#X5APmH>u z4W=?s{VZY=89-oY!j5=wBVZ&6^li-o0PX1*fNah6>1MF}izWiDUFoiPBUt$MUh7aD z0#5=H9$PITh!`9;1(PF|su4&JzoU4XNz)ENW`1TA+#A#~P9)+I3Cjc`I5?%}-Fajj z#F?5xsAr-ClK>%(h~pWTvp~UfusqOHv#@{#uK>|y9Pw0h4?*K?^&KKGrD2RNimw&W z1aeaz_$RzeJe`^5T2`}0KNJ-0@%055LmMWsv|jT$lFtoRBF&sqVvLb3@PI+m5X;tR zv^1>|2y}eDz>w`$s3v{Zm=DqMyA}^wUp)6Iq%H418=koM-A~z>8m{uf+50_de14hu z1doHDHM=u2ah#sCsrXFWDN-6wbX`+4u2Q;uJIAx{-;Mrv>iC)4PkQU$zn8V{%qOfC z-B({EPOq=|K5}&Zu7Zbq=eY_WPu2hG-m%Nyy#3RPd%ymjXwz(@Mx4LL7CmbI^>^p5 ze7EY&zur0b%_1ix|1nzO7$7uCCSbA#d|J$Y39PV-p)p5jo-`&+TTYMI34prv?&t!t z%#}AO!i93RaPhO>{^$Hl)#KL2=#z@X$gkcV7ya_)hCSVVR{uKHmYbC`G9jf>IyBa9 zPTu%p!^)0){XY)$b`F1e#J*Rxr`6I@411`g&M_vfO$RH?4H;3q$E{zk(Ja#$3NdBq z_uq^Y0Xyo*D+Sss2RI3qm!OcD2g5y9F;q;Q4q%TFfEq?Q5yk`rs~uynm1XSCo$#r` z{V8HwQIc_~W3s>)yMBIulJ zb>54iliW1en-bYhAsGuWT3FTD!W9g1icMd{BCEI52s>{3a-`%+VUvLlMi8KQGAc%J zY4{JRT_x43xAY;F$_3GEMz=miRo$NF z?6VT|7k&nWL-k@L^?IlhEsbn#s#PPEGyS=oqGNr&$8+-qhrZb*np=2)YW_HPwQ=!M ziE#Lxn&tMR!UDOhR~6Dg@z8j4pIg9E*OzC=Wwt89<946A!|pgVlSx&l5B4gLe#xn| z3i;cPmYyo;-m`ZHyN&F(F6I}4jU(CR@Y7Y(wnP7VzXc?s{#8TXhj-cvU#R)+mH!@l z<=Kka`lpX}=dqn#0`T(m8V@u{n5V!8;YKPoL?-Y(*!ArhAs*S%=Dt~%C3!mLM~+?) zYu1>tsCLK0!gF(PtypqyZua#fM_-IGm%jXS{on>eoAoGN#u3U_-K@KrdMA5$5y-t$vu)_YfL+-aMI9?+YWq*&wNqga zuxi5#2caqGPf{7>3Wr@z9CK6BR+{dj>C7IL67(dXVnGiOa|DpLb456v~0E^m8 z>NS{?L$;%yT<{zSF_BE&_;v|`U`vb{c#6~#XNRVgbi%VroFiSDWEL9&Ee7d~haXsn z*+aI*0eGZ(p=kpHH7DNL%T_RwrOsl4>uRbNs1Rbu>T*h(wv{VYg36Y>@V$=biTohBm&b;csmMu9j?sqk{H|^j{ zdz*X6)_bh+)LyG&Y!Tn>3#?&`&6SO0zxF0Hld%5?^od*_1MsIPLV^_Lqi zSaV1C0cTZ&JC!+_w!Dl{9?I%O-p7{J_8`ijXel<>5{ku>N*PEjC!n`3V#GxrvoL*7 zwevB0$Vjs-e`@=;rn%cepsq$XOVeOpJJkAh^K9oad&6q&Q32z~HHTs|rjH7~X>rFR z@6Ho4DV;=+5}~@j3^x(N@VKTp{%Dd!4G1T%^4PS^KN8&E;r?(@=?Q#aGhAUPS3E*! z_c@3KqJSr)2$)16?1h~P>y6RkWDX}ok8I)_Y&{+(Bcp@JXd|XE*p|dea-@2d4AJUj z0hCC z;sg+Ehd}dfpJoO6Zt@3&z_+AG^-@mfhVr7>hY?NkcS z3}$AJ#)AY{e zPX_NnDz`P{P*e`hx;K;`dvwDK8(f^`4C{>WiPqF>ZG8f%304G!d5?UoQUSZGSr;jV z$doBn=&G51MmJnt$N?JauQywUx{%$;Ait<6vOwShF17X2>%jz90ZU7IA2e1VceH zahhv_s})2ILx>;Y!c={N)OWP)-H+TVh|Xn9B2lVVNfR}KutuOe;zl*(<}q0;^-<6u zRq)RPF3*GkN+UpWRtEtQsNT`3%W$^|HEc{kRQrREd{3w^ZzMtwADgt=w)jk@qAokH zao8l|KH|3D&|=KY5XxZx_)IHBhLxzhGUmH=rgOF+@nK=*^p}Ww&)qz|@Koh~diC|* z^iN)0qE(q!^*yLa`NY=Nrq&E!lCLQ?$oyTl8Fnmdc5n{Ya#~t6yz`=Irf|; zANgwcz?YXj=0`m@>Q~Axzk6n2kaOmnzxGs~UH;b{KfgZcf82k*v@56Ipk<*d^G@G= ztsrrFWLa7}GN89{B#w;HT5ms2Iq}$x+vpFuRC~q^FlQV5}#y{dRe2zQ^g9leV z%Q!tcp-P(+1>0#Tap{fa?^WAws8Y2IULfO+p)GI2201;vH*lkhA^*B8z6Cxt>FIGx zV`Gwh;<#*OO?_wEN%ueB-M4`belZv1qZh(6bSu6cVSH?m>ZAo`soX_$(vh)UC;Df12THRl&#Lz+JRz`+9(5SFp+Hi=zSu!)K7;dT zAuOmbw|2+yx^EU*x5gK9Hcx-K`_c=mYyNoPhu2?Rw_%>2nZ2{{Zq~yd!7n>_238d!7>|!%JO6V0=t^3xNgnDvVBM(w^san}ve#cY-y^xNf1tg1{It%O)^XZY zTh(Yaf8RszH@zH6j^8(#GoY2PFWcXfJG86j{7}o6jVlB4`x?4Knqm!9---5q-M_8H zf(o1LSM&LyfGiOTb!e!NXE6YEt3IaQmN*&E4lbJb7dCnM*?=A8#2L|8b9f%w-O*}z z`K9Luu9kN2Zk9?3xzabY;e6Mg>mQu;40&0f&7G@~mz=D-s$s6%@Gb_55K{^U>9DEn zi1Nzh4Y+h(f7ANwkFSlKe{OtrH}9<|z>-!#2K2Cmzy|_*>jLz$LL)NAJ-!B#GUDW9 zXq)tgY~EX21fk~nh>ugTA#TQ3>A2S4iDc7iW}J>GUr$CK+iq6sVX4GGyqYNE1-e@O z95jIv;51_cv?W*>uTk$CL1onC3&eBvnba}Tv^?lgNMcyHW~5081{1lo%}g}i1j7h{ z7cvDSx|3y0;6|M&fV0+5AjVV2XV9TSAqn>iJSMEqN8KET1o-v^;u5+R2cv;Iz~~QF z&XgjJT56xdK%}`E2+T^Jstx52#WxbtSb!gPCaTy{KYX;_UE5&DlEAggGZBkd_=ev- zMXCBn`ua;~beyc_8Y$v<>_OeVUn1mHg2wcI@8h}Mq9GIL!>?a@<=J8Hf$39sUw`rZ z0jurS{*4)zYbZ*YubC~lG^gOo`%Y`Kv-sIFg|q7>M>8Gu883`i9RB?HdXuK(G#6;XlPA4juRfDh5$F3xb+}5kIg{@E(9)*-j$3(ZWaTe)g?_TUZKmh1_lx%QY&I9A z$0i=U{$k}#Yuu>iASDQdpKA4yYqd&YK&^hqcPUWzrXpH zAAc1HpNa178k|Z=_IZ8n%rr)2lWzaU0eaq|yjC#&>u=9w z&8n>8hZPb#2Rn5Z4*+5+=Bpga3r8vuX!;fhTZ)*n!;gTaP1z~W7v=i1`5s#WGtH*X z8XyqX*r_$rtvwQQ(Ug7}vGRFHuHCw7gATEpk`YQ-Or(mSUfqI7Vg+Gz1_zggG|V_s z&5a()4ii|*=sm8d*$j=STwox@f9r)_fSC|H!cqt%LHt|^L5{}4wF#AhT{vq~{+1Ky zj7O|7$!VSKXXwLld}jCo1aeI1;E#)migo1DNsLS>1=&VEliZX2gw_qndfREc^Tak( zoA$U$Mwo~YA;^o2%733xrcnkE$hML{k(1PitR6_eT zU(#Z3Ebt`}dwaJ*@L>MaWX{R%3w0@$&E(iBF;Tj^zAV$? zPss?XXb68>`%$qF7zH6^W~8tALSA%mEEfyP{7eW9*f9ww4*XSrCIDXj?vW+zEo_CZ zl+@L7d)PVX)b|%)+kr@DE!mPYHCR;@NpsrWBSK~gqHRS0cgLMyUlR~Wrwv%xD{zwV zX#GJTDo6m3M5u|7a-kT6ikXw>%yIApSwf>QRRD*x<25fWv9~}i*R&5;J;fTeSFu#y zR%DCDMw1*Cz1L2s=-m;fSn8Alznw(tO#($~yJbi=!-=Fy6l~s)<+dSrl8Q*hFTpI= zU>wgYTTHh=65`5~%Ywrzk^fBvtu5H|yYq-jv%%q?AbHk=V1M7^Yrbk(M`Nz{RI0;J z_R>2gn@^q9Wmk!yNoo`DrL6wkUY~R&!1eOrrtb?Y#`nn2%uHilJsg$4aO}tLKeY7< z+#5dm@y!Dt&DD3D8TVfuomFYFdUw7X|Ipf4>f0obcU)UxvQ94k=qPryo7R^1e1FD1-jk~~iIR;Z+ToQ5{y9Hc&QV+7=15=Mwrz;vU4y(T+P7bsS3 z&h{hV&qipczu;!{R7$(CH}rF)3?po7X=)}aY)Vbw&*@^gEXSTver(B58=)ENHNv_8 zC*YIBcn?UmZ3WpdnDd}ZRP%3XLj;=({?Qm?X~Y;Ej9@+%^)~6+6=XlGk&U1JU_G<< zKC$j%~xn{@aEB|q_r>0DPA{#B2R>#Z?boq-%EkWG1Qzs;`0+(g;n(?-|aK*l= zb8qb^@x6NC@{+5HbNffUH9MpqRh_+ka&TR0c&cseOJU)$vWezB7jhd;>6|T#kCn@B znlB7japbR0T^ygwT1gC!99}j(Amk5*uXS zDLHz&m+jmT8O^02ndCV}q$5eHs-AJyW3Tq_J*Q(uukKkR>nCe6wA^W(K_|U5o>ej& zs@U)@_hErYg8^)_qp6GPX3>_IVe=ccvv;cKkv)! zYu=`3W@s2N#R4Tl=sst_iH^ZwC1`~+Y=34jT-h*4S~6U-(zF8>H$B0|+{`1}UMeVn z*x99aB3(qvQAh@IrOrI;^&FQffHzg@NT<-jI7X_&;r2`K*n^IZb~B+d>MMoJj1GD| z>9Q!4msg_jPGnyc8sNC5C#5Y&i*)^g@U ze3N&I;o3onbF^B5fJWQ~>tK)1J&8p?pJM}ZBbs8@6#FAN`5Q@_17 z>b`K8Tx-4EcxK%4myE+Tm(Pr!833uG-%utWm@}N}0TOBeo;ElR7xUTXG&3d;qBWem z+x{u~Xk^_b_(w0y|FC}9?#kH*4<`JtbY6XZJpChER2Py`Ze9O?H|*^z%+^*6 z*9BM_-#SAXU$*O*Yt5bW-l*-;*0sF#W$pYg3$QKJ^nAGO)OY`^If%N0;a^W6UWx|l zfag74#}qXnXlZAmy}LcXFN^>`xq|Bym<^QDGcolqRm6@Bo=WO^%;6gLzWk@E zGe}|i^0qr_C_Db8ZPSm*bH&knU%$6w_)UH6xO;;qNvSK5a5N{>9!d^~KD0hvRUEyN ztkCwiQWWJQ;3C5vH~Mt%WoPgRuq1)}Sy8#h>5|cj8U&*wpT?Av;AEt=U(utgHHxraJ)*xLKn!3fc4LUh)je}+65?BqROGi@LZynK#D5MgmFAB zqG5w44pxF^7wJAxKbYv@mr8TQCa098DivYjU(W0f_=`1cTdh(2g%)QbsO`0U5mrvI z6AE?<5&tn*B9OKaagrd@Ukvr9EyE0Gy<}RX@bHhYin(bVpg`CZL*)qamiFK)CSLY6%=86TlBuM8ecqkEC-^=;o!j{i=iFUugHEDTCLrLZE@a8u#UVi%By4kTm)g;^h`qPJ> z>>hvRk3%Dumgt99rTdy6^;l=xPg3Xh-<~_ttj&rJ%G=3S*RlI|kNkR3-ngDu+|x8| zIJKE^=kABLf3!Vw|F`#7e){(}|0_j6l2Z~>M$WbTEt6JfpCie~o(Vhh`vNbHx7!|% z6U+vFAVoFi%m zw}a=Eg`Tb5Hk82&@K}yC~8HH(yevxX9j; zp9BqgpxDXd%6T3Z9SU^9nuC}Tb4~)b3u2Ts)!9mMsUxX0qGQgmPY{%i)3N{s5o9AW zRWrK8ljO6lK z+)^`;I_r9C>Df7-R=b_;v-ABu``vE)W8K!)%D22&!8D7k4HAzl6H`#`VahilH)K<7K!MfhwtNSD2C4ncx zJDbqx&?wP(1S-H$XUGv>A6i&k9D-s9q8@>agm4+~I*?djA~l+fs(qQAKx{-uh~Ky5 zYQj|SY|qUe{rvdM%5Qh&hb!{Z7<~s6#ZHcW+;1e~dc)wo{;jExS+&h6l#;3ah5h=g z%*}MQM;yO{UXZTZ{g$ZHzVVQV&D;TMUi4JG9@ zyZ!eiZk)RQ{FB>nefWJv^`IzY}eIym@ktmbP+Qm&Q369tsEb^J3(dng~t;uzc z%juRqM~5v}&#udFNvZa3qam~Cz1w%bdiKwYpa1D?&biXJCz`0C5a2LSsbVapN$P{m z1lt<){WMC7H`##<n3O_mktPdRiNUc8D*+)2IR`}zG#LqV9=92xR&tFF z|8CAK-0&edOXK45D9Bk1X$C_Ds1ZYlggc0=mTJ#a{m5=1DRmt-#`(1?Muaj6&!IXH zjun@SJROO?n;t51>CwxCujPj16v z{=I9T-_u7XRiHTS9OGhd+Ce^J#gzTb)p0oL9wUDNN0}??cB`|=nxk2i8EID}uY5J6 zrie)R=AED4e0<~8OOGBOy-fo5r|MB(^wvntCi;r+F#8 zxJ=mvG=-3SBZ_3cOkI)7uBmoUOqpjbxe#yc#&}2KU6$*Xk&)vsUhnzpg9O*#zr47A zWT50ob;$>>rs-l+2Im;j!Hnq|S@jXix1WkuevJBf(R`hng-l*2+%s2uGukoEWnElR z{^t+=wpZCQZSBSKb$0WopZ@;Z()$UrKlQmfo=X#2;h@AL*!XFm5r>2Z(W3n0_PAE10j-U!g4|t%5oC0hymEh&C!G|pnea$ zL`?|j(QCAGevt5RVb&n(tWVK<`bGAC##(Plst zbN0=lAbagQ4gm-Rk)TM*>Bb3B9%yEAAx^W5gM`1YajdOHHe&F#{y8Je z#vv220^0$@=2~aQ88=k*VbE(p3wp6laljQf2;BC{uhhfgvxm38*WBG$c{_jW55MOA ze)N?|&R@TkDb>uBXRX(7R-K4C9Zws!ibvxART}nr?!u!4%+#Ti?`E%?##)^YuQUA0 zYjN(DmeQS>|p*?%8xKfDnBr+?2q7#QvPK<&ND)}9=sMBtQ^dQFAQg+g;U zmL)TDa}qglM<&s9$|Q-l*w8>}Z}b$|ZFyptX8Oazab&7!em2pKfRFkGG0r0?E>%Ch z^T)*xzSP*Nm!f`WsBR_y2h?c|CMm0b-5wOzP8+~C$=yn_Nk;i zN}5X&Go>y8n8X=A!*~cDuCS4TLFJjmG9k;a{sOzGjJfxzVoc-=e0l2;8nJ|ap&m+L z6u@TlW=hNZp#RIlKs{Zt`}8|ENSFVa)ie2o|tdWMDrf+^C;L(Dm2>f-KBZg8E34Rm1|;!r~afXZ3u zVCgy~xHzqr#tnk={#o|k4wBt zj^a$*Jj}%@5a_OTT1!gjIu^q`tFo?fTTc^}$7i6OT$iS-8BN8hk3Hn8T zNF#;$M%p-vk$K`b8ESoX>)xk=!36P>G}Xg|jL>7(l{-E^F}f!6ChA{-jwX$UOTo4W zO#_v9n)d{)4uu0YtQ;Mb9x}}fmU+azbK@-$E$~MO$Zt6IVAQ9s=W&gwm&ibM=nm~z z3lfL$nx&}cbtowU&4Z98e8

cjn!)A#I({X5>H9C-QK;q~eSf;TjwJk*M&5a#X5tAY zkl=25>WpfqS%XNWw^ioWHo9jtMr(KVf>6s8FT=M4oDLvGS8CC-?qlFrY|R)H8M^p( zoto}bSvF_Kh!5MvpA)p9-9vTgOla$r6iYXe{Yp~o+S=+c%wPMmTpT|xil262<~gl# zSGUIO!_uPIQVG#gv4!@4dNbY^&E;M+cv+Gi)s+w6_v5#=Y*TFEW{*5k5RNwDox^X} ztet$F;J1O7oGa*?n_x5b!FxHMAR_O8M}tJl=l>rlzwuo$MT)M~ESeVvrugx45Q;eUyd!V~=m{R-h0R_H=-#`jhztp(>}S`@RmtE0RPJ5%fe1wHukL?cpWdIW^vt98 zmruWsEsTCU$af75XTs0s2%s_G;I&Ph1}g5N2`VsUr)<8p>f7EI{Le~iH&P0-52|Yf zEWD@XNrF;{DQhc_W@fDFJq~rfFJ~&hh<^U}YEVHG@2kB0c)w^t*YEuW4l09@i5Xk& zL}|VoxH){fn0-)5Z7^>RSnCyw#qN?SRAR=}wswv*1t|!Pg4CsP>?>SLYY=l6Gr%^_ z4^=`ICJ?F$sL6zx68}rGgC>WJ`rV*G`;H{^-zX?BF*5b=qN;QT`8&*B5-~K2LF7R} z2xI6;1f`ff&7rvA9<1KS6Q;AqMiw&KkqMZ?Gu1NSA2J$#OQy&q7S*vRFk5u5@?y-X z1`gFDg@;a8ChQYZcABeIoM4By(yi8#cWHZO*&k4LT|K5v;E5iIFs42Q4>YSp2l9d|K@;xV&sUv30cJ`u z)`x*8Sq!E--z*7#9Bx*X%20Upc>G?27>!}n?+T?a+;|p=Z-4I+jk?5?b!MzMT2tMH zeqF@W&?u9lV3f?#iGp@tcbdhq#K36*I9|pqd54I6Xk0Q#AS&Wlcuo5dO0WZ_El?dE zXCfZ1WntY3g774gIs@)=GxtSfVWI029*%_Nbhvq@zPW0v#_7=k7d&|n=zpzs#G$aC zZbA%P8*S7%{?;B|!RR~kzKsV+W0=>|5$itlJRa;12GBx`sD~=MNdbK#3&-_`hl-K6 zk#=}O(#|<_FfalX^A<2=tp=8{$-wB$F@#K|pV!Pdz1AL1hT?4NjdFL#%UxAiub0Hr zYG&E6XEf~3^BsDcXNK7z>&gW zLVJ+YnW&#pX`ummAByMAud;sovHV(6t2Xfeu}v?0Ts&`M6)!xIy?j5H$^-jbgF`aGc8r~Je$><82R9I2L?xi=*_Ve- zhN35zc>6qS$3M0?`4qD^Paws(AuUp)(%2yvwIR!V(AsO$_TQ_kqv?s|W_v>oG-=$o zAzWbA*IdMW5n(+4>Xp6=!g2Sy*%v>wAWrDU#m11xJJ(2#j>V=C9rg* z-Q6MpA90*uU8JF*etsa}!CcfGxwoDL=UjZ6mNrd?zWnD5?P7Cw@O?;R{K67X=cNlN zp5uLlD07BmczLlfts<*u*BSUvq<>co+aXp;oZZZmK6;-yh^DGCBsR~VMT!iFYAY;g zqDlei-5bJPf}C0+w-}x|sg{luFfhRSzChlpOOO9Bf?I(z2t#ELH6uD%-j3hRiXc7( z@V>P!05q8JdWK=}+N~>V)9ojfg9#{b9GgptE>{6VdB?W;ydwpu018NVQuJYoLDEI7 zNN@pBa?H8M;sr4gsert4`gUF~NxMG2f(Is9B2#Et+)yUP$v*Nx*`fC;Qcvsj8|>FS zri7tET(Lgm20!2F;l$KM0~jQM0+l#%#EUL^hpHJD}yA^3e zRh_|048}#JS(=NWq$GCl$7zI8>7XpQ#tmYIb3Dx2%mWJe<0I+BAp7*WXOXGXRuE>) z-*+H;u;}-mYG>a%F(Ghvqb&fQnKjrbi9sTY?vH=51UUK0m%tuei{Q863i%l1W9OSx zT7we}O4eD~!IyY4Tue+fg3{ZsDSyEa{`fY@3w`ucFy6&m&)3z) zhp}+Sf(o;#3-XI~80vmQa}Pjh@Y4pqu|A+9@OQ1uGUr)@1(@!3bD6im0rqV>c-K0r zwt9w$V1#|U(=2Ae^{~WCr$i3a@>+F1hE5l-Q(pWfqJYPk76?C)*p2>8F9}@?7<6tdLm_&srz(dA`3bUd(kayKQ zmkuLS42~%&NlpoX@|+S%D0%}EeVIKNjC~-pZ+&rOQzy@&8UbCxd?)8%)b0Gwep1#IK4KmCVZcj33%`Vms$Hy4IEtP>*|%W-~@Q<#zoVo9Z4F zwkMm#(zapMwYsSF-rngt9gm8}s*(wN^7HZ~YcO|Anq8ravl)RALkf0i|NgM+|HS#c z+ZRFpQ+-C?KLhR|H6?&0lL>f{?p7vnEePFy1EtTz^{XUchA^##SkCtecnqrrKQ zS|FV^v!x~NS8quE8frM^;wIPf^cnoESl1W7ycLrfpVHm}%C36Cz>umfhADE9kgbSm zI93VznBn8m(bmA0d}VVJLzIT1ce`#6ihe$%8CKCJ4VhyzeFw#K6p;DR@C``*>r+~9=`m*3?>c(eSHrQA9#3;zkl^?>3_FF+nTXYzrBD^w2^cE zOgI|ij3bb096!D-kc@9P4*(hzT*TrFqVMewU<5lTBEC7Kd#DIoOX2hRVtP*P)3k0D zazgXNe`UEj>sKPhIdS2$n_2Jr&W&Rxp!x>*v&PROp{S}wJgl>xdJz^P7b-BP)V(Ak zmd0PCuN)UXeDSzVJ3GE~7u6(CDq+Px4qoZ`1RHm#w$7OTnOmz5RNUn0)}UI*(Lh^X}OM>JN%ABw{sr}F>g5^haf>IkoSz}60_zlt3jGdi`1?MsLF42 zLc=A^Fk*~N0TjEs#OH1q#PHKX(VyAd25|kC-KdaeTK+K-udEPm^xY;Pr?{L^oSk1# z)AY)#$V%bS^SKbzVEQWJFMV=BD#)c)QvU244hg(~^&3X3XdVEh{&~o0SD`3gqF1=+ z2mCvCYksT2kjIiG;p?$RqK07<5WQ1=@5jDuu6CF2$4W|aepn1aAI@Sc;7H8#Z_&RC zc^L)ywuv_#O~KwrSPbl2j&9=yk{^xg&wm$A&kl|T_@pFecVO%@NS-AhgVPyL=FU_T zK25=2-daFq8Ms*1AC0iHwXN+Oj!?w^pKSc78b9~j@SkYq3_K>IR| zI3?i^BHTvRPHj?o z7Klc#rl8DC3kv>X5G%Fq+d>GW;oRbVBajGyKo^4Xz#0^Pv=?mQ&qpD;E}t;F*lKHp+GzL8G%oycTk&ZMh))nP~1QS?@_BcteWa z%YJ>vuM0alDEiciu19*awA28E@<(&uEWKSmDaRb>g&q9v%=%Pww)DYijD6EF`0B|- z^TbP0PPs0Q9bw9-Pw*36v58Tkrx^Dl@Qb994fR6h3I+!HU{VD3?yOV_*FUHc2x_Akhrlp1GeMQk;Yv@HL- zL^W#0ZDf3db@EJqjA_g4$;nAd45wcqXIwI{xP2s~XF@B0@A%2BKg}7v%Ww)>B!lQz zWjQ%v)69PqjikdoF-h*6MRgn`Ben>n8#r62HwKAhf4a=c$d-SBfwWP{tqO5v?Ve0+Al+AgrwxYw^HUi;=xF{kpdK7*nVwv~r4 zt<(q9U2$;H!uwun@li-apaCY)$#b_5mPH#n;eEf*P=Loa64f_W)aY)5xLxpyStGTh z$;fGY+uWRVak~O9ClgxOV)i@8mbghyMXUJorQ-K|dP(MEutc{*G7w z1rM8`sqR>F>Nlz#x4Y5KDa&ItwA$cKolDFL$!%cgMwr1ggjGH}4p|>qG3^zaQB(2+ z0!-jY-~!m zY;xcI$(6+}#>m_~AVBEgeSGkDA0~WsLkD}>r*Y+85`ooE(#mclpD3s>(IQ`8+%Rl8# zp3vRpgjV1#yIL!J`9urvZ$7+vi{q}dvoLO-_SkD#FP^$@c`2?jC#DW~z?OSy42J4A z-0Iq)D^Zf^IDUfQU3a2ge|r=~m6mZ8xNP>?^=^T6ZG>|B=);pk#mwc$jb6ywnGj{->>3u#{M@!3mv#BG#UkVm^EbcY&fg zxPj*CVArOdm6guVr~%Y7HpqXC6CGIL>;C#?&d!RqgH#MUCU#ZuOM1;gA)@uCk`bm&sc$zGKJ%IK@L&bNTHS!pQxV;a$f~(RzgBoZ&v`(Z*Aef z3EJ+*&D{t6jpveFKOn!fwx*N442em2->7At$?pWBaXqWWQ;+?r)Tq||_ka_gywuZR z2x-*Bu>z8IZ0oUK&h0A;{meC2MWMWV0rOl|l8sdj?f}dqWUU;I)t$OY%QY9{FMW%& zGoF~cSLc4@2%cr_{{L$3DD-dFlD;60b~EeoP$vYCJJSYOxn&CEQyhW_k7nm>H9 zy}hkTE-$bBW30~{@-F5lsgntvO-M0L6Iqj4ev%~u8U#Xt83WhcF{jw3KxpPsvS9+F zCScilgfd2%zKnO*!u4tJjzq+e6$PwqD}bWU&Am0dgJ(`RM}-C$_k$Bc&!qtoi8nlq zX<`ejLgT1q8L+~J4t}P;$2lAL(cm2Z@ov`24XC{{`(8?uzqGl!_&*7)oX|30HUex>Nd|mNI2S!6uTVHlb$8mqAX`@pL z4m0ajX`q&h3Hn&=EQ5B!GvSSyI{w9{VNrOAO=3AN-?rM=hyTc|0Qjs1 zE%lx`*e&c|VwFpwz)K?d>^H?+WT($<{aXzR)lrz&C%2g&z1NehAe4Xj1EGB-d^*9; z%Hn8Ej^ANu8t8Z>8qdWyH_0)<$lElBI}8G<&;OzRSH=5ytWO&o#_zKymJjMEf-kuu z0TO|p-q!)e`#cABM-*#3-o!*?XddpKmgFqc%EgnCGnN2Nqm2ch?<7SZ(}Sm`N=tHj z6c#7@mtXy8qu3TF5apI!f;PK8zC3#9*RfPWiZ5;WpbqR${aibPn3YLTYBfIucbN29l2s=g@sSjP0*RoQK!Hem8ZidrW|~=Jp47 zT%GNnTxTWkVDf=G?B0I8BM31+KC&$+XG_Te0jB`E64zPP7aw)1WPF6^`x2^2fL)7W zCz85@fCQga39&YL{zmIB z!~ka~khLP6O9jSN@r!t?f!Dv=(bW3U+>z?;&+}F%kmJ*`N4?$5N|VIEL&|E~Oe4By zFu|5k0|cIBI`me;viZUJ0_W3@^9zuw&3psOtO zcri00+afb{e$v&pp|=|guXDGtM`|}li((v_&zE4s^Gy21I4=pac#weFmKnp*$p0;Z zVnV6FNMN}ame2=ucErz@o<*8d583sc@2DO*Ij!RS%EKL_*tmBFnF#%P-?4El8D)}c z_w9=VcZt?}A@u^P0BDpAi^Uy5hA(%Q>ppo>It`BUU^JM|RPwN0I4i13QE^5E1yys? z;oIW<*LJSF;vswHI>z#Ehq^b${l-`C~rOhMd$vv~^#xD-_3?I!8rH(8d`{h+g zkCn$+3V`J+zxp2D0m={I!eChdpp%{M;%GMeFR_b((9F-!6D(}wI5^URwCVCa;g1k{ z&tt+>wh6R~=M1nm7!1j!b9EJ8(PxC1pwZqGFIy{Q?(wp4J3YH>=5$9}N?SXUF*JPR zMi^L>)@KB0ZdXr$iKJv>Q=^z6y~g_Zk}?SM&}O!c_LuY;7k4P;@TBarZlG-TvWf4y z^xEQtIL)s`tawLa)p{zQJ$tqk8N2;B`8I3#z_a?(@+XYBAH|zQW)@EtK`j=}ZLr_L z(`ID#us-j-iYBGe^)|1hYRSN+R>j}5b$8SWkbr&XnBFB2 zEH&=jjv5(?=(j>3n+QOSOV`^#UK3L}(bw^S;3Nz;%)zYA^cm#G_<*r|`Pot{5WdzbtFq9F^b^JD z&H?=Z1GQZ;oKEXDCG>LKm18DXx`+FbR$x_ zYB*#j;pJA3qD!{PdH2yMs0x)520;uv)9n$H%Hmn!X)!6 zvAh*Deh(3jsL14NsH*Q(u*D%0cJ?ca_;IZMvUjCv_PK-906Srtm3#C6X*os=m-@$T zz@zs4q<;HdvjQ|x%if-|WFaP>f3&t*&>GFl+ zfo!CR4{Hxbk$`#yeaX=#NB^O&A#+282#5TNJH!M6;U)O!pMXftbQ5pMb(zw}VgOIz zYg+^2Tco;3KQ|^Ss?Pg-WxZHpv9_4e$ZxF>?Q=So3xqLT(-$@GYEz;{$>;EmHGn7} znb5x8Vl7aBctJc=kM>}maH47btf5{2JxNuDXPF>evs^~eg&Vy89yh+_T6%7MJYow8 zIy9Q(`(@ch%D$N7(wtxi)q1KmqiRZ`-i(zvpS`@DIU3d)RFJJ$etusy9TM6jyo4(l zoDcrQ4Iam3EOQ-kCrO@GE>^HhO7D{FsCmHv)jO?_oT#=*=0BQCNaE4aMil>`T)DW~Fj@j&^m`@8!NA-PtuT%ySKuS!YhR|$6YPx`h z%_*_DL_yFhVO*k2K&}CB8hOwulD=7ri%q!>ZgKU(3J74_;6sWhEP<5yGNZlHHuF9l znG}!8c1W3RxWl?ESKoU-wD0hN{-sOP5i@>WwM(f%42b@_2sFUb)!c zZmrEvAeS=YQ(FyV-*2_tCf!Z)LjZjXuk*UM)XC$%@?RTCUQDaF*&?Po#lXsK2<%r;)wG25$&>F!E-^{cbP8`b51 z@|_bmyCV+jtjCA}7(z7m{DqWZJt+;^U(|@iyVUXL6Cxsi3$i~V58{A4DylPmPNAlNfVHn6&Ks}BZiX1O_T z5ouZhr>g-rcnrv88IrMVMP02$^`eKU4UcMiIjYrvb;w6vZMqNn4Y{8)*OQn4gx*c7; z7`Q`+Nyx_akUgh-!gA8#2uNoK4eqIkIZZv)?dDxrAi{?i=>x=%2>oLTIge>*VaSmV zbx;}*k7&xkej^DC5nPSc&nMB|!echdpik8_J|Xqf?|<7CczArNKpDu<265#@N_@Gt zrCnmPS&O+k<1NKJUx;!0ie{%>05H4mDc@z_)<9nGb420V{#UVfpW#tak2uF849Bcs zrW(>P)8ObF?PDjCJ8?z(hNq-bRDV(BGCIIWf0T^(-F6!Z&!|)_s&7D(I?wXX*+z4Z zvyv1ooBtwf0bCN+;MuMt&uh@9b^~wiQ5VlVcBbqKRfaJ+z_DDwhrUEyxkeCg|P#Zg{a)3UbGbSSP~L zxBbR#)j?DLL(mSmPO!-J!b-j|*1FWz=W-f}X73YA9Lgw(6M_BfwC z>$YIiiT&p}+!dtLJD+Xyd-F=rK(>v@GvT?Wr}N`lZ4}Cc_kZ8gpNiw(c1>3#mJF9* zFH~K9`Y2y zeo9uonW2!)b)2%dZJrKUe7w;-y!K#oY6<4Et#7BVK_6#l=KX!{pjNBZdc zyO7ilnN(H*codXD&Uc83Mz+4{@Aoqafrn;Kg_qwFa-3%A1hOSK_}qC8FTT;R%e=Pu zEOKq8Yc)W_8Ce6$D=C{-^hb&W@NUl~82*x-TA_)1~z9a|Hqc4kqgNp$dc~f0{4vu(fYOC@hpNN{m~i zerB-pt!FLx+wNhz>TaBk5M%F9+Y4d+v)i-8}Fa&)wm7p!&6umUZmQR^1Pr@?%cvNJ5QI+Jn(LCWhpA zi8-2(&_F9kIw!sx7&4q6KSPQ!u?Q&dQT!5Fc02m;%3)9g87;zDP~nztp+Ef-gh7K* zU0@F+Yf13Fg+8us5-9rP&T2B|e{^baQ^0}^qiDYA0$2+_mXGoBwv&NoP2D{1Q)_R? zLP})k6LJ^OPdB@v{2IoI4$(UPqgbH#eC)lAHSV+XV0=Dge3mHe=(I6?(-tI%z#9w@ zuun%8&N(Z%sDRlN0Q>|N>J=Qag9a`|=pDh<-BVs4Px(Tt{%6CB9?^H3WaUm9O2kE0zlny$#I0)-w;aDXGyJHz^}~lo=q973-ir;28Hj?(9E{$`bF@n zd$aV%pOyvC&Ta$h;``_CT=~R5Y59t#goPK&U8{DdsVc|uOs;lTTc4`KUi(&9baad~ zn)Ex3UsuQ9xxqzMc23|{l!q<vj%dzI0nbLXErjGF{7l!n z7kj{*0pNX;pb5OjuGbasai8WdT9FAO)Q4xpf^4OrcQnCfb|R8tw4Ok)>WutnEVzF4 zEjtvP?Un_0IyzkIc3_<)I2;RN`FPP?+ou9NPFxYO4Eq}A!%ye&MdFYyN9k$5|3}iB z$3wlp|NrNGww4p6l(JPyQH|Xg6en3~EZLV~2pP;G+Ym+PoXXlz8S7BTGM1RJj2Vnf zr-Z@~vtVqeL^PJu(eR14-oLBw@9%Rv)s30g>-oH{$K!s-XUv%U9x}Zrn7jGm-Iqyw zB^^J>xr2sfwU^9q4Mrp^c_l9(9kEMg)R#M1VfA@KaO zP6hVdL|U4erIkhY&l#Fe9vuHQ(|?r_tm2lHv~)IPM1-?Hli%lBdu|qzSFMpzD_#B@ z`v3dK>sHdIMgJvqWjm9j{os%2>ybaUwcM)FRVys?!8^=2w@ zFHI{0bXHa;K-P=14y=v^1+yH3B`hHG0*uoArJfT|$WNfPLD`0TcFgS47E&ae!icQka*juQ7?}vr0j@$FxZ*r*9>_6r*;r%f=T&QD4{#bN- z3z8Q=GmtfmdJCBvIrz$04~5dv#Vp2%^s{@Jx05+~x>D6s8danSCE5z_`jqn9TVpqe zWF3Y*GVk^xhIU!3acWI%67Dqnb5gdE^uym8P|*U8$DGD-8*7Eu`YofYDey8OXm=*| zBNZM%y~B8(%hTG35a$N{Y8@L)gXTj;4Q2I<)%)v_!j#-FdKhMR(lp438Eh2AIO}$W zkBKFymh2frjFBJGtu8nr1Z!Y?3qjBobFHjjYhQ?XB<=%pA9e|kIC{KG*c7*4AMk3$ zAeoQLdm|Pfcy#fXO0m1}pP@v+vt~vF;{}O+x^pyaA>`GSaV($d{Vj_czhS;Hpc@7# z6giuc?)!bHI>;ch-Ra{-pOav5PMpi+DYhLl*jF(Yl%=7uAsGxk_ZHMty@0O@uElE8 z-SnJttQp3>1k%S%=8BTQ=qP?#Nu-=H<@hKCgg82&Dtbd!(_)z#qWS$iDHNHBoYs{` zH+~qL%VgHl^TfjoT0{KMs|SLDgO8zA&3T3t(-0l6&S-B@+3eS7%w-yl#q;yta7}XN*@H-`QTDw8K$w z{oVVT4sb(Z9$6#>^&+$OWnh9;Q++3hX^*b*aHU z94?Orb~fm&ed(V2y8JaL=0+ns>UygpJx@mw62*RCb}nvRWwJ7gj>@ow*Ope6F4U-~ ztc_N}R_jHEEB8zHSyjPMtGBT0HO2DA#N)~9OXSo(6l&DG@tmdP+;n&OQcjg_vE}H5 zY1XLatrgn<nia z$}AH$Fy@<2bh!U^ z*RP(^EQ@0UloNATF-(8l`MPl(ZWS!1th|EC@b$kN1_(8HH(zGA^$cohMa`km_hfvE zNGsCJDwgBxWOac4!OyXy%3N7;s2!A%kRp&_m8>WxdO^-hM zP+)qG#q0YnXRJFMxR>kl@?Jnr&dTH`E8AX@%21Ej>0vSY*Jiv4&)Q6%t!9m99kwj& z)f$qK#ra~}Mc!jwATf~IVgDyYBdP#-Do=83`A{NBj;*KyyT z?qVVMPjoVh_x>2+M&p~MM_p8C2l*z@L6ZG0FL2att3tQxKFhBBuOTlIx6~eZ(3b!) z;k^+)&=F^0U@PJRpY>q2x<+qM6C}X^x$6 z$h$ZOXm?-GOGXu2ABh}2R4N$}4H@iHV10RN>!UleS720%I*Tg6NJBdWuUI~ZBnMI7 z|3nuT7sChuKkaq5>}52Y$)>t$lsSUm8XEiYTSSY@y;dY5a1`}x>2=wjGe%?{wPr8|Jb=t0o|J27k(9vd*p-wusOapUzjFL5W?FN~_`q5gE|9rXjsM zbGO@2nSdL>2kckK7#1--FEfB+E>oW*i>~`!o-umz3pBz6LJTLI=u#FU#(+4-m5x5z zXUfK)2|n$^@sl4TvF(Ym*GK#HoDdz~5|uJ9@Lx zn<*Y2A7@2az|*2}^eo3T%T4Lyh6MhQE0dzJxdGc9Hq`KQ8YzvJ^zW6k#+0iRHib2A zcB!X_0aeib>HWft;Qge1YT*pAHjP@z=SSR%H*xRQ&i0hv?&vTaDe)!}(GCa`WGK+n z>D^$-?ZD8-#w|xBW8Op^^pc{%0fpuM<~EkTgMhx(DWe7x>^hrtu`1xe%}88)>8P}( z!#D?=>L!1?$b~EGM@^=TV%k1TJii&ti;3Qs8`HNC8N_<5J@e0%ThdYSqHv(qZy;rM zty|od`N1h5-mztftlw8tf=a*{hpEQ?D{P#7o}8VnX6}=_*_{Ml) z_xIZ0??9&`DS~f)pA#*NFa25R^MtOCA6NjifdDd*U5ry%l_ma&PshxDzG-o-D67Qm z(1W|GlaTeCgnGE6z!_h%=z2QNeQv8RvtXEn|9dYKf@|8u!{W}lxw6k>w(`DQjN$lP zw{1Ew1(T8aXG3hM;Y0*JDk5&wVu zDaYswKd&1_F9r!ipR48cCmp<7-00NA1m%yJv7Yd z4y2Y@|7U!e8`Si(0A-e2DGhbmEbeywB~H6E4YMg58oDVyT_)8)8|_Z=>K65q9=_;~ zcp_>lCUu-r`1^Ke2RP#=AHTJGLj8M+jxJB^JVn?5GKvE-lYQuWI!-tX3MR9WJ=- z*xB7FlwZ?z5Ma)GNr_@d0g5K;6js(i;uWGMh-O^zQ6g^DX35MZDpA#!p`fXlMEzCE z=-%x*W<3g+8BfPEc&g0oCblFunWt6i`V0MPrLs#C$K9RH!}EU%|-s z#0Eg{warg$jlF7QCFTK2xUdk8p3xoZCI>PhF~jJNYV(WNObI-TX>o9L^Ocjr!*_0A zK#ZEb*@!xed2}v5P<30o->uFIz=*8MW3(xno@cU6tc9{CE<1<2yTvv8M&xET;L%;% zI9gDfCxR}4;iZV`>Nq;}V_r^`lzGl&e=ut!qN6Ah)o5@DW|0@X+P`PC1qem0&>SUW zNBHYHOOH&+2HzhK9fhgCV_%>uS}DVfDPB#RS&hCKb7TFV>TJyWy>E%@CC}o|sjH2T z;V&Vt>CCZDM|Z5e7?b4sXj^?4TvoS?G4MukKP}#kfd|(;!PxC`3ZKG^T>kqX;cJ4b zJ|mU+QtbImSu%t-X0C6jo7AZFCocIvZT43iXz2}-7O1_xP7EesRCF86o?x&|pO$tzX#+q=L2jua1WNa{y|k+3AbfDO>xpg889 zIvVQXj34uMkcJm@%MxdskKw&MR9*hx=)Okbr~bqOE4miC2Hd8rUA7~l@S;o8*eijNNMfgGKGN5Tk)i-vDdtU&`W2hshy!6!T!?b2&-CTsm?l<-;bYwm z$%8xY6~X2`fa(NFe4gE^PqrvNDJ$5CVO=6Q-W3$1Psw>Z|IZP3{E`5Wwl4NpG+tEF z_`d^IpSgP|9$WK(uL-ZYA3NXRSUl=GBWLtg82&ZDsrw-w@u(7l`_HG635=CZWjb5T zH*2EQ272!79zbTXl5xjC+L{{ZV5phlTrD+!Vsc zO3S#8ozke{!4DN&=C+?Id}-0jYSpJ*+R-OYg*Q3Q2+QJr^Hu5bsLb}P<*h9G>3YpX zdu(DfqVYhMKSGTTZXBYCyI)^o&>e#DQ zRs|}HgJGu38Z8z@h#e6n4$>$fqG6x;tBEikW!C*0$rirfxgJVwqz;oc4Xa|INAW5a z=fvNt)1?<6f6xce&j1{nT zK@ov|TUNGmE#V)E(m=p=?)=8mQVAtu_3sz{cWlLWeT_7dZqM8QOV8P+6d%){bJD4w zGuMWn`5GOozPKCFL5{xhwE5YDIZSC9=Lc7o;Q_>78?g1INYAfhTdxCI{L>OY{2!{S z4om#CNH7AYBuOHhJ-XaJ&?_^VB7Y65is&~%epu~lHEV62nEqy8-vPIDo zQxo@9&tIIS1bpx~rXk4qPEHy{;2BQOiv`@Zjv+id10LMmYHX>s%8C8%AD8Kwr4Vj= zB=Ig&%)D3L&&*61$%do;VQWsHes)J@JE`n6^f_1gU3!ixDzvym5EI+BUwhOdjtI8z z536E`Z~FFga4d>wC>lCYV-ks?>rrdV$NOzK5Bja3V&rwv9ZlI=Z5>MoFjSPP$=oWY ztQLqG`A_{@V3uu+Zq9S<-{6fb{xkooIaz#o9Mxt46zu%5Ci;jQr&P|a7PF!CIf;Jp zsy?YdN)<}fOWfJ#Z;4Zy{$~!jfH!d#mCKwH>g|2O{@e*C*O5+u8at_4T4Y^N@kL9&{q@y%y9=M#+1FW%v9dU$09axu|`H+e> zc*;3BwAsbl4UD4E4b>(}y0%SW`JJ6o*_&LRGpB_^tLpcw&*~0e+$=ouWKXTgo4}xd z2aiH668?aTkz=rREXzNFRD3qXvNoOI)#!-64@Z7XWlc!upUwg1j#p_oxcJSbEU8Lv z^1i8WZ@ZeGx27t)_;F#apX*e)(q2vfd}f2IURiT!pAG#q2>uAL_GF*d>S@e%y%@rg zH7w)3%D-W|gSDHm1mk|LzlLuu_RzRdb9hj};M{8Rv2j#ZxfbfD21!>^qAg*t=;Z|ft88Z&J-CSk;drMc^o=Q39 z@;Xbqr6PQratdh3OW+#``kIbM*ASJk{2yozKL=sd=-dGeAbxzjq*TV^!QH#F{shB= z$M(0-(vz2$S7P}nik$nvaOOT&xtCY=$T$Ae;mJ^z@~23syJ zUq{V>w78k|PY!l;shW?2@)#tUs}IXdY} zF|?>dPeHfYN&Up2n{7!bZn1S6@DlzD3ylzqfA_hekTLww9J`re%=VXj=_! ziFc~=3SO9-`8(MKbUoq!t6pQ(=+$|SLxxF>p;O!**?jAIgTI<3M-;z>V!+gsJz5Z5 zX3A{>>?m|_SLb8b-X*E5@`E#%Gx^fM0)WatY)?Q{@uXDipX?U6)a*QITEn64a8)tg z+7kM7U=sfxJCe`4*J9!Yra%2>NJUqN93Xo(!msCBxZYMMQ zm>0PU4J~&MW4w;j;yu#0#bpDNZJS<0*GSBrH)?(z!OoMc&%6)(EQHEbZ{4X$@{`Oa z|Lh89it>q`sK0!;d$DRMrH-V@6bZRY6%lWr9z`rXL_e~_z9#L_{aF;p zu(2^Bv*VJ+CPu?ZU~!r2KC$Qb_q_Vmu3`{_13B3D7aQve-)WJnJ+0EmvX-p^VuK;5 zC|l6j;osL|2)GXA7p6?lr0JT@^o)%!XO?6rW~z&gCP-bM>}lHMomMDxvy@iKoG-Yr zgl1X6DoeH_xm{0n&r_A395+VS7{frWv7)~i(|hXZCEKJWd+5fU()g|p=~(*5-GvY5 z0)LW<^e8hy!9${9a!iX6pzt9oS_vbOD6xz!3@oyWzWvLzbN6b*Yugb z&@xp@ng)dOO8eMT_-<&{y!qDY9$OQq-?q0Kir=csq4>2M(D>Zsl#G(XIKlFB&9pop zGk}6e9Xyuyr?m+sctqy1D>jMYasQRV$9CRh8G^O%C%YY14C6YPo+?Ak2*FFd`!n7R zPth^$HqT%!wiKmG@EVcQORQW(gGeF_a4BCL{*xzwj*S>#R{ie_WUTEHJykU|L^d=f zb^CGTsr7B!wn0`ACRhDLxA7^-z3u7qWpYwg1AdLv>G1MlMGa?ddR)lLFdbn2cgI_c zW$YA~)HjUOhNu`CZhm>{cucRZN;K3Y#^BGLMVXN|+zAK=94Mn-5rLR+qV3r&cMlFn zX{f8v@ML};9dC()5B>ZHRv^(1ym|kIAp?Y%9$5p1d0}Xs)mbiUh)6Q|1+>{>8=VZU z@~KHkT0{J3X=(QD^B|WS`itspp|?**U4FZ3uKOnBfZLld``=1T zh}C0mbMKBq@sc#&ObvZSvGYD|>ZISE+_G8FZuE{leLp$lWB3 zof$vgSG?rQ9AOKi&S|PkoYA3nawRC9;SPgcLxaN?k5&%fy?B?yL87g-$*R68-4upg zZlqH%=T2v5627#5c&PF->f0saLQ&*rtVcQsNMmk1LWHs)z?!aICCNw5;*A|HNYUTS zfe?c~&Cpy!HERp5D+{dC4IFN#AvraUnUJnZ#g9OAiTWfeLAV~{4r((EbPZS_o0;Rq z{5jBD`uH%sTx-ZYjG7~hWCH;pGip9Q#gX)Nv#E z9I8!pAM>*{Dt%9e7Pu{0HK=;P#PmQ-j6)>-F z)+j3@Y-Tj~U{B+K**;A)6_fxVKhhoPi;7irEN|f;E4=%0J5!0pe^x8llpgOvveTRI z>#8k}z}Lxm{KrP+JQw`uEj*qCCT>EFz(^cnG20AR5564nq3g%5Z{MOQkW<-k&7`uR zs@Zr^vrH~HAoR}1I$c(wgNkhx6eFBwK1N^=Y{ueQ3XecR>(>i7Ja^}G*+bws_yqSTf(=8 z0AP!uwCb~JrLz1=H55vm;>xGk6Eu^&}%zQrn}{4KqORvUmoc@)`mdh=yxjf1XqDBWtR%j z}dd5C|XM*LV{xX2s)#m#}}oe_isd z*$l%uI$lV-=C70e$LRR@vrnIEbeitm5Sy=lyvBXL_3cy3BTMRnQ+_y~ zr@lKCCSxwmjrxas79#!R9wCt}#ro2Xk|hRG9TnttO2-Mvelw_7z+k#e2ewM5^b+ zu1&J^Wq3ZYPJ3-be^cqo0=gUqju%#Rmj#uBYzeWpZ zjBtI-Saw{TEkdF9Gn9r&MT5AbT%T0!45oOm{$nyo2#Qkn4w2QqYYHbRkNkjZ^UK>? z=+De!$MP-wbnI*H1NL=YfYM;k&G|7#jGw?k?#s@*GK%k)%s1ctZv3IA zw45nSMzYRPj)fPxRb3v~m~u;04Q1PoWFzFF@3|cib){Cb&G-gh;-CAIfN>=_)V%6Xu~v+p1ehG||n@>&YTL zHj7D2XwZ2Ha_y@+{s1iP$8F(_A4ZTMzv~F&Rc9&&hn-%Z6c0F2{vfp=ofJy7R()C~ z0tRrfxsJPw;eHB}m>&c@Sl7)V^5pa7pYHbE#Cx?GvEqD+%>&8QRNyo3GhVlSRB4ATxqx%L5lk3z!FX+S*l&aU2itED7qb|C z4qoF5c)>yX;_@TQWMU|$p5R{gJBV3UmX|`zti3i%7+Q0Z@R!i$al> z1GTJV`?gh|bnVpJD0f*fx(?~J3!kwj@_md11eG^{ z*LE5|q&W<;U*nAOls%?Wt4ir<*EA3VCAAh@i>2E#q(oLkRO_>61EtbXY2XWC+8C6U z1^5Ibg&84?q|=#Vl=2!~5}%YNiZ-PUwlkIE)_2pnXU*T}Xzg<9EAV%r&)T}fWYt#;bcx&boe%?|gxVa`%`;#widX&?T*T$mPC z2qK2jza{Icaw{I(FVC!8^Hb zm(PPFir$lcPL`TVUMl#?P>$!ZOfQ9x+%J0a-vhXDm&wV_Hz%@J6A&&b zf!-~$o4lci&R5p4eC?7WBN_&LcQdlb(H%=z$+#sdBP~J^5;~0O0|w@uozXMHSrt~NnqH#)RWWt-drU^;*lv!JSg#I z!vs%Rybb>6Dskme#Ydy<*TdV+X1IFV^=aF^{u7$k@ocd4ZOZUr{BE}AOCs-}IM}HZ zCAZ9-Md37hyX@OJBY-$nXJmN-i1&)$lPiQ#znQx2%a zyb3%B*+67GQhsf>Qf8OlJ@)A*D&NMKk(@TY2m!z!nEAC`LHgrkg?uT{?OUIL5&Od^ zRK5b<&nDhArU;DQKaG2^1EC1>Y-ZdlpZB=y`CB-(eXWbDaw;CR99>a5_x>htvcS=8 z04I9gYBupGe)6eKD!aPysCG{vGT=KUUH{Q3$yMt^SPq zXKS(C&veVPXFmcpl!fV=no3?UEAoQ5=8$(Y3Y=uAZ%04v8%r4@!hL5l<^w#^#5KWg zPFML+O&yQ&IgiBTw!9 zWl4_<8FCfS`V&VJLT?=Oa--prS_%d^NDeDRqM%P96~mQ}lRBU+(79vSfnk(r z_2K>U)5?Y`J@GYI>~5*~GB@THn=4&3t;$|fRY{Sx`mZOMCVvC%FEs~RJSGu|jC^T% zr-$VVmzN(k_dJ@7sb4@Z5IUh*Z9_KISvhy()64YWRiBd+xzSKEin$RrDI2kY3yK0j z@D3!!e;i#1#Jl$6CU1%lFR61HMf1*|SxjAQ-`O}Ki>*3R9(H1I1zUVgE!&JpjJ>k~ zD5dDU(4cFvnXRm z91Qt-t7KwAi~YR-l{a$zZvHa2?1%>3KfE$?WQk2l&B|^eF@#WKRnT809!&WSytmYY zsS7WjcMX$MrQtCIf5oK9us*U^yJzKg^He@0lCQg$=iLY1DBmr>UTN#=*SB+Pb?o#j zJeN|rzS%;;pen+v2YEn%az>wUdr1tgbtHv3J#8~QIdNiyIV|pg>oCLhWi+PLVn6%~ zH^Tfrv-n-&t4q3G3gmOZVN`Vg<1ZF;pprZMZdZwa197KO=}X*^&`g_YJ|Q-bbUODv zNM{~hd-4(`@7ojKOY}sWFjMubcmtT#XtFnV0MHr)cuQZPo*GA#wB5Rna=Ji!%IZ*~ z3o)C_>aZdS>K-h3cDXHle1ETK@{B>x9|Vt@)&%0QEGFdh*ay;+#m6vxAX}4_01N={ zR~shg8yK?MLM&Do;^K@qc@BaG4AivQ z`+%OxaA-HSQ-XrEm%Ued^rshHQAO@-7R$6wjAg)vOfPF+`N@3co##Oc{7!@?8DHXT z_}F>llnv38jC%ssn8Q&;QzK*a5TqQ-sP9};#C7wVJlm^%VhPFte!oQhV=Os03I?6~ zw2igTb51ze4iRw>9pEFz$5o8cebChAK(8c{yYgYI(tg`!b8*Uvw$qKq<0y1~pc*Ri{mj#|s`q5`aMHxwM1qk;#L;va6Ox zclcQjtC7_K*F(J5yRZbIq@fM0DILc0Zr(FPLy(Ku6uzF-gY(T?CdC1_%4p8^Or2?6 z=Bh)1KgRd4I+57Fo-f^ZGX5;P|K47DScl&@#E8|+8{I_EQGBY4^-A;GjUCAr;Q#mc zuwHYQcn$?PhR>5v->{3%1Om$iS_{QLp9~!gsG~Q-m?x1FLri|>JxzA7z%Ym*b42|< zViF=VnbT;h(jya|D9-$H#>&^+*X83B-M(s|cxp`I4>*=@n3S9$(QW(oq=1vkVF}k8 z^v6H8f1z(}g)74jV|p+TAfbp-)Qy!dPn0uqss^Z%eP*0Cwx1JQck2viE;EYlF5GwW zGDmeyeq9MZ9*_Ca_*q%NQZAR56LlhPS~O{YgS}E>k^J9LBRGucWP7rFT1Jao`m6UF zQ4kdvg3E)+Ceq<)Ef+3$ygv*?3@VYJl`t_jwfJFj4WiGpPagAAWZ&sCs%D3TG8M3Q z*41wj)%i1t9Z|#^*V?Q@Zp0kZ=ngDcXT7;8MjRC6Ag(@6B^9}gL)H14?8AIem4-7~QGA*p3PMfT_4^YceoBpqZ+ z%VnX>h>R6wY;FB{616K3U2`f|Ig>#t`xRd7O@=UpuDYki;(2K^jH?KY8KWJ!dyn4L z@RgrIF~30J9AAO9BqBPIlf7fsvXz9O(JEySBdy2qUW@iRfg6n^=N%sF2=oGYc}%QE%CZBen0SXM7-#V8^MIKP;oj$UutiC-lf^E9*Q@sHjjZ|o^6F<(a4B{J*5!B z0rchtsGf;y8?Br3041^ewqp9RvK2h%?5HK`py#S&|J_UGyYu@>*~e2k(5~6u1vu!a ziD^rT-x;UFmY@ElUE3*?4H<+cd6n(Gny62Ed^QSLPI1^msD5y_wmN;Lb-BqF0mWy@ zi(%Ka=>3}%?W)Pue85W8)v}mIm!*O88;Px|$E2ux+iuv`P%%RCrrqX^ZA$ITY*)=o zuIb?i2_tr}*6~Gn`KqkWPPr_ddf%1#p}u3TsAQ?6bMiJ*D1*^glrlt9uzmZJ1vH4=TYxZOHN-tQhw=euX{PkvVxiDj&4I)ViVg;f?QkfYyOPrzjKD`7W zSL|Ei&sMk;n*jI4#mxw1nqf;e$t1S<)bKzd`i=X*dJ;` zr;sdGi1{YTC0>Vmv?tv)^>?{h23&zwCr;&;MOUme>{X? zS(@69Et0J+X=k|hG(yt@Po5`&O<=^vt1RzTp2BS8LD!Ja-Y|VrVqs37vw@CajJmoS z@-pkogrlj`WL-TS>OuUu)#|OOsc&aR>HkGl5J`;%jx)}LXBbA@`rr$9MFkftZB>1z zALv;*@D?2Uc+ssJH8E5fMRYq&|IOZA z6Jdx3nKgzI)0?+LNB^GVq0;ZlAQppVBn3R!WIpEK*ma}}2qu6UbyLK%MvjVLWD96S4%Ulj-(YdnKp ztNEk?e0#y92eM5CnyFbS8*wKL+u<>+=ze?TeT)Ikyoqy_T(Om1?(bm6D+CLKqqR zKvJ%V1k&h;kM6Gut~L6!L4eD3pS5~uUvE}_wIV982!b4cF{~L_4~0Njm}T--DuxZb zq`!km6OgA#RqvR>Q@Ok>QU`qNCh^iyOTz%1BpV|+Y8+5q2{PE-jB#AJ;#@bXIfuXiOH*6GXh ze_!FjUFpn57x7>3qL!8o=w>CCo42%^)A);!`>`ThOgmlP%pVB2@s7)kbB$$vLCH@N zBQ7PG#%%H1%y#-V%s~4EdG57Sh;}0J5TnmX=1ANEffq?lxjaL8ZkaD`!zFay23zZ2eDbL!9l^ghwD;%R8cSCS#O^Rv-dIy z7Q91=)vK@p^d}(D>3b;Q2jL%#oXcF|JJQ1OedQiFTSXurdz#Qdp0Jr87rNz8s&xXa z8ykQ%IasMo*BAScH6+9-3h8OZa}QJi>)g~>g3ND8J{eWp-_`{ zqzk8wE4GVxcMNyS%OAs!3|5LYUbx}m#}Ny2;fa5G!~d6{xU&*fJ3T)&k z&i0x-7@pU}g>cvp1W@c34)e|In)6n>CL*u_TpvpSBs)FCC7Jm4t3;n7PHgxrh1%$4 zF>0|C9YOj?pSB9;!>Waq(=VnO>1o63AgZlpA8;h$FW^{>KYnY$%s&ytm2KaD9{xjP zfv)N)w)^|n>=pZflt8?x+)TwABBz?2a)jz8iF+akHYAih32rUnziGMH-_eT*|0Smr z5Tyh+<_O`g{fNnjuW#wjXE?~+yLYF`u0$7A7Ds=08AtK1&sxh~(;kZCsE(uRJTroT z(m2T}$)BT4YHOPPILvd@<`UhrjL zF43D)V;sXTB;a9Stp+}0tYmuJe16m7A0tkbH;gSlx%KqGj^OO5xkI#fwgNeZ&_^oZ zgE&YRi5z@1Jvrrlua-<8@rLX^{To)D6z-<3s!CSdfn|h)-`LZIb~8M_rg8~#NWqZq z^%acby||drEk7uwUKHr9k$Had(bCh{S2NH_+SJ)44OFfymc)h2U}*8GCN#q6G$>$ZA(d$u9MZ`88x5pvV! z)hg2sw1NfV3xD$&d|1Qk`x0hl{xkb~WP8Au^AmPt{Bu$OzPVqF*#XWFZwsg%>Ff?& z<%<%z%Nr^Oe1FM}oHMF(Dn>Q>sZo`!3PE_S-n~nk=3zu(i09iO0Vf`|QL6&b@UC8z zs?5a;OwX@pSQZl0zz4YdKPOIQlO)CQf`(<73*XqhF?lnpRei)w2a;hzCKX7X-$=%l zyvO-ZqRv5uM_S>0@;#DrqNmt1_{7@^aWeAsey^59xymAwmV(5w)TQM8^A=%Sm!uVZAC-~S8YFC_3aJ)g#MWo zfs|Is?p%@(35GcRT~b%>Z1g3wvQtJ*IZK#hR!P(BnxlWs2!H$zcQB=_iABb(TrmOt z?5-W}!r0B{*y2GP%9l_$CZjv%{9!bM%2Q^{j!IB+8P!<+TK!|^`6#P(JZCwrXO(IzoWULot8s8G+yX9>%EIK<^H~y*V*d7+ioUOu{tfVW3hc~ zE{ISR-L!)uaNfC~ns@B`G%W_Zix_ota}?!t$+o6bZvdBs%ha;cgr}<6X@wz?SpboW zvC^l=ogR1Bz%RkGfE{>Fq!p*(=tjut35OSwg;am@M!OaClHT#88wS^2qa5gKJ9pp_ znvt|uDWEk`-6oi0B~%4nrZ@QmMwA;nStmUvTsO=OYmV*xxZOZAn~5 z-3NMITGY8%cDZ1AYB?I3@B6hbx{VjeGI_Sv!htoTT~5FiVoG}g>s+8W*nKlOGP3!s zpQD>P1R`fXFhc=<0?KsIrPvqP%zisvY88 z->w5u6`iMzjlT_7_UGM5-RAvQP|StvY|Ma3OIB95D7wRxri)8j%B*lMd^nr9)DJxL z&i)URV)5M9=b+MEdp=dFl4@6*diMW-rzdfaMq zR-1HjEE!2y8^V{s_(vCcplbkGWIJcXb_P&d#IAa7vGD;Py9CK%-pV=0qax;G$$T0nl&)CydxZE05|D46FYFx}oSR9+BlJ5H<*Kb| zlIKICe6H)U68QW5E|+@idTCPK03YM}-YA;ZMB|smV&MVR&J!kF3j#?%2# zT=CzXEpPHc1v@QLZsPJzyZH7UCj_L*uI@9g4DZc5?n%w|eqI$hNU zZnT;?$IaeGf7d=#38@G-x$Dc{e>a@A*_l}Y706o0!be=2XX@h4*5z-_HjFyw3sFDd zvrFId*X8JgnBhTOoV>v3&`%_@qQP3L?+ton=)##uAt=hXt&Y7Y{2N3e30ouA+xBAQ zE-axLlT?z$;}P`q$aV-{U^vGS8dmt3H{=pu+8}PG!6IpCK{Uh_a`k=d#GTz@90Q9W z$22-uNt9kIWVlmKf&cu3M2Jqu*n^hFQ6-Zv!?(4u;VR^SpobNbdK(iy{9k%t2a}#D zAw{g*lLlI>G*JrOOr&ydP9eOo1?Hdq%-Ua(^{F9F3@ZHFXHapIb?lnQ{4%_*))KB*ms*~T94uBmWxTyURdmy$lj^GV`z!67JoTl|S52IMgx7Df1%aWab|$9R z`Sa=*p#)F9s?UjwZGJc*6G1cS8>{1yTZ%?Z#v5VS7!Ir3!mO9dywTM{GpW6{=8N$0 zU#ZG;2;PDVlEx41OgzK>EhVtw>`LgB*9za;q$4%oV9-z4nZVd|y+1rPG3v(<)1?|^ zR5OQifawL`vDq_2iR1>0(W!}#QczRf85Y7QoX$0+t)u`f)gq1XKSG#VcNh(h$z(kKN z)+)WPaom(u`;)ohgX3^bWTdjKoY+8Cnfr`#K*U(kL}UG)95MKA^dXvK{gZC~=^7NN z2bBeUAS@IND#dWq$p}1Gm--)VbfGMXbFaFao?_ki+P2hH(S;a%@=W6{Cdu3fu-8c-&m|k7Rzn=?d+~iL>sji^ez9zI0pJ#r{yQSLb5mA$0 z{Txjt$t$MVfJN*FycuRL^MVD(p|>(%m8}{Q$zAz{GvH8wKhbO+WCgBw5@#`w3)lk3a}+=2rt-> zW^eFXNT=aYJ9Ucw4w5=$iXu#v*s~LqPu0wPsUM;oN(Z9|r1RwT_+zNBP`=z`6~TS3 zOh}}%=t+gq8wnS7nOUa`crv>21#gjqSPs;aZ`1>c6pvzQG6!>URP>0efR$D!#0uveoy$v(2gTqRPwu*4VVWUwde5p*l;>=r>ExB z#4CN6?lbhIo8{%lG;m4z17E~X0SWm{0jN3-2oCXHmj=97mA-FztTC7a4(52*r}E;m z9KullsiyY=P|wKN=1@0zKf61K;9qv9*$?5>7YK4CX!C_6G{8oPNs|+dilVQ#){D{9 z+33mjq>4LdxwT-c^i<^R*Jo~1$ox_qi|9HbjHh$yR~id0q0R-IDL&AQ6j@jeHEHV5 zv!Jlj?wVo6N*Jm1RP?3`iHAVf%7Um@rImumi*B4BD8F3X+ri}N2nB6I&hgT~f(Cm= zrykD!Qj%p(fy5h~exKwUr;f;9{qiFGZR`{4%H5vZe*YD5@-Oe|m3B-Ys2Dck1E;h~ zk?5v`pQEjJ8s%!ysiJ6~&3T-Sr&eCA2*u$^tHg6G(+rT5V6=-WUEYP68bt}awbS;F z!J&?_z)e=JtTrwi4L1kw)lRO@^m+-ysFRvWK~#OnOt_O_T zt;+j84wvqV-_fPFt5(#DJh8;9-L|byHY)F#sssaIKOL{WqjxHxbOzzi8>*?ZO?g~) z$K;^dj7mgnocC_i5bdt_M!R6=5qK~k63Ec%?;@%r-v_z0Tz&)=R*7WvRTQXVZ(0!E zL)r|=4z*C>;}sxw%eQc#027xLxBERO=4NP{YS_2W0XTa=Li_f)c#ZSMh^=g_0Z(#m z)iDf#q*JL+?=x9>cE4(q*^jQmfCLhx*}%EC13TMV3=Eae99U%@ zxRh#Vr@&^PVGo3E8P$cd5+j>?jTRHT&midj1J_P93eB7{bOc3SYYD}KW7EmLwBQ|$p@T8BSt4Lf< zJb)yZR9h7P6{avBU%s$R)XDHx1Kt#T1cdj8W3doCFH-dk{`LQ>=xqF%-upjZ(z&Wr zG)aZisi9-lDmTp{rxH4SWw8{d(M)4ExZIvY>0I5dA*Gs|8AoK(4qMH9$y}7r1jA={iMK==iornU5k6`M)@X(=Nhp`}nxHjsKtsCq6XnoFQkw zNgrY;7B4$RNVyV}VpnN8C`DVuB7Nt@2(~3`+s#0zKm#980r}~%vLD#+N+Ppo{P^U^ z5OXSC)Ddahu3|P9+9(ZbMo9(Dvo;?MdLan(!U*(eL-fooHwC~ge`qkwN&{XoNLvnwedUS_9TinlVb65@c#@q zuX>a+vT&#_M=f2f=0Fyv%MHe8x2i|RZ$to6GSP#0Eb{DihJz_S-S1c9> zgv4%D0?tDy%1=0-LpQRvi1;#2e0tr1=f2JGPTryjU{M=!LrAnTu(lKyUw`*S6RcunOu-x54%_k6dgf1{lU%eu7w9)-nZ=0b>@)OR*?isDXV}o{Dx6!1 z1%KrN6&JqU_GTowpOwn+Ct+;xqZzC2%>XnF?9Euqi`JDC4=J|qv?%1v& zXT?beENcpjMR0)z?U(NQ)>{(qk00V#;L!~{j-igM9oH^}KH=p$ zp)2>DVFepqNfr)S-ay@3Kc*~IFAb=Cy>U(vDlW|wo}Y(EV)TF>R0Kly z<)40fc3y_jyg?$8wu<{UV!Ue^*i?YB7w%^TPud9Ki(8cJWJV_dK(_7m4qSyJ&BF`h z@J74KZtPS&lS4NyHg1SgfdorT_+CQ%dcE)n1#`35)gcw{6{Smck}xjxH6DyrzsgCzduH0!o6owKWs zA|2V!`-Z(oC1Gu!%-Sx`(KMX z3SgT7QWeN;QaG_b!7+y-RQMdGTA(%)x-ZPi-{VZT2 zW5BPI-$g?~CmB+wmgbDL*KzxH4>2-cGvB_YoQi`{Vp|)r&Xwq*ImW-Xp_rI(xmh0Q z-e-}bgWNi~`qrFI$Net^J^BIq2gV8u={Y00vrQM-MA*vH zlFyNx<61IOUBEu2?d@Jp@O-r^s)Cox_^>$I;_M=Nx3q6v;JO3;Fq%1H6hH_e38g(6h0xedV7ngCX%ZVqldcEz-m!*4 z_9hku@IwoxXdwkMZlrA`MCJ;hS^eql{qkx(oo}FIui3m(luxrg3X3%T9AV(FKMppt zcxB|J5c2>rMF9@QNH`%?_xx}mu+u%g)zzBs-Sx5zS(EudA;+O!2`}kL(xO+U{+KhI4e?=Ca%wCX2|GOY=1o zkv(eYtP@v!=aa>gdFwZC63wT==aI&ej6;o=o=SWB2q>5f>nwW~TkWczI=OvO4wx4Vx( zeW?PZSJ~u2E#PI~{(ZZqLHn4hFLEit`{D3OsP*kwZ!FFv2)=5p%T8@uh3UX8H!JXK z=^mAq(9{IwBB zoGv&GFWas`Ea}eaGeR+wo`gZgK}gfzKle`Pe1nlG5HG)p#f!^cPb1WCb8NzFtUCK@ zbiLi_gV~E-SqUA6?t&AYSHAGu-Sz-ARnm|OzMZ;a>j7skbQZ66o80u+F$_TNa|+6@ z$Ja^EwGMv{)Gz!F$&kYCh532&{7!N<&GtKF8y6bX&=dhn4J&1-SJX7XvAQ|lQp2Y# zQyRm)XQt=pBb`doQ&>wU5j$8h?ux>ep;;dCvROFE@07CAxj_$)3uELPU{$6{H3xhpVeR!3 zAC&Ir-A+^We)j~azNP_B z?Lt!tsLIm=;15HRZiD0DH{*_Lqb0llhCUHUc(PItW~)}6ZVz7XDp7Jq=9@^iOJ(X* z?|UNYcXBIpr#D-3nclNMeGIm*^RO31-;O-D&&)mk56c%2v?@a-1MsE8AE++fZ`GRq zN+RGpVz30OY}x#ZttO6`z}8f;9KeCXTtsS->gz2mddMfkd*PdQr;>F8zfcrm><6)f zUUjc++vNufEOyxVc$;F&FZkfNxs(algD^q6kKiy4Uh9w>E3Wg($zI3!jt;%Qh$Vb1 zPE&CYSQJXF3Eu*>+<{<<#7>FnUzVWXsfEbWfn0)rZB)=a98$eGaAm^}kT1>Vz;PI0=f*`<3)|(*8L*VRS(A z^MS1JsA(0BP)8v5?4L*pZ>RN-c!tQhj}-<;)xb$sq`ApX_^4Q(pp-aFG`yt%tGRZ( zCqSuGG(l;jOFlz8NK8mid6vk=r~s_q!yAN^A=EhcZ~x_Pb`>I6@dF zUgb7XlfPU=_ZW<_(Ot(fK#ka?s|_!0oaBtCd#4#q6;Q(BCJ>BXiS8>8S91+>qDOqQ z#!~(GXpw!G&O(tE8*3ODnq|9fIP;LRU1#L9C6W})d#EpAuiw)`Chw>}4>e;5%NyB! hz`97HD^e9dn~v;I(Vlo@d|ClNCw)lXGOr8Q{vV=h4j=#k literal 0 HcmV?d00001 From b59b1b2bb67b77c58ef897ebd0c548d198871897 Mon Sep 17 00:00:00 2001 From: Baye Dieng Date: Thu, 28 Dec 2023 21:50:58 +0000 Subject: [PATCH 05/30] remove generated png --- sd_final.png | Bin 336984 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sd_final.png diff --git a/sd_final.png b/sd_final.png deleted file mode 100644 index cad1029d5ab7334fcc80af09bccb394bc45113fa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 336984 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 z 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

g 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 j&+@(i&3P}cnG=f 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

_K09$#td zmQeIW_7fAe$HEXnFB+bIAP~?Ut;xm+q-)OEU`V#Msc(_sAQ-|wv||Mc(Pm4SC|xp@Q^lZooWKmN-s8&Yc$gFg$p zF(Xq$861^U?OtXl#6l9^?tiq$tOE&(v(OE{#V3=o`H?jt#CE97eRiXqsbO zF0oQWVL79MJ`wazYyDtq$qfQ7Kc=gA9GL_%F7m_0$+n7hA)K3WzI3p92kEhd1V3re zQ9{)mz)m!w^G*%TS2CTaT|p^Zny^X_=VU~}3KBjOsOjq^p{j5SOEporYfFH7TC3Ut zKN&hNi24|goJD@v+&2AYSF28xq|@;4FIL;tEq)^eEtD+KPO45_&)jEZ5~$SWNL+&k zlIQv2QMhkxN_`Mp8#IVet`RFD0K$@opaa7X?txBQ#X7yGqk0{#C)do__JmkJ!w}xg zoq<&PT#Y^J04$ZDkmQETr4COvsPK8PGUON$-de+0^cG)$X{qMoc-SO^_gw%whQc$& zQ4ODwq-l9C15;?hj0Cp>0x_YUjPZfWuP#;p<=2fPKm2^*hui=87WV z&&r;Seg4UJ8E?Grx&Eog+U2K5w{Z}b`Pjs4_4y_551PeL7SuG{M1P#AYJ%t-@hNa*<$AWQ-y* ze1nQR>ynMhSS9iv8r5%-ru}kc(<&)wv zyu;>6LRiyzYiaX!5-b9-Iy@8sP-_vqhgv8I7A6rsjNpR{m?`1P zc5;%&(`14&Cmhs(0p?qWhOOWV8P2w7D9^**!qvEFQq{Nma!}pc)&}@Dm2O6@#slIN zE%Y5w%C4Qfap4YFCyoOPEbTs8VHVIVJ=bhwAa#Cy;b=le4>W$W+xTVaPCupRVVAk=(1F(xCgI=bArr1J+ zBA*wYK#s4cg+n3=t|ieFg_qFCdg(6@4Oa)}3#}Oxnuyp3>oIqrtAq=ECXFXg8v0F1 z(8=LPU;VJ_)Z2O6w`$ZS(GBW>GF$cGu_^4E+eht;w5G+iiWFvlzqVfnnwbp3?M=rB#2J$(u#($C?UYm^c3m46eS8o2c zeB${hQ0WSXa+rTJzfZdQ8*ysaWr<2rH#V|82+EUM!Ij-|Up_rg=&!XL(t)XO~{-%<%JqPCN4MVl`hiv4L)nWO|L$mg}ZL9E?p2 zK!Gg-s|Z)uCu0!xkfue^xY*!5MPd|kyydcl+l#ad9)e=0X%09!bsers4Z;C2wKp2198e56CF6>LxmmqC;{eOr$4AI%?A8>8Z%vm> z7G%W_4!=v)01Q_Hs5|G_<}W|SP{j;XF$(+83}z+^j-9?3H##zQ%n!20m3dBDFankww0m(bo*Zk+<7lB_ zRPXS{sDbWZNI`)DimbdyLWq2zM*|3xP=~iQrU?SFF=Fcwq^GuzG~P_;C+lwd*5D4u z7foz0?)`XgRri}VTTGnTbbknUvw7Qiu+2&3ehs>=HHJ2$2v2iIOVz3HJuLD3Az!UC`T+YvYVa z?5TMH9SQ-cmWE}Vc9R56`1Aw7RAtF^R}1g^;HW$bQc#=Bk%t*IxQcb~J`oVt)Y3U@ z@XLBN%OwwfIEjX435<~tLg*F1z#br3euk4X1rZH(TQw(dhSsD@C;2Ss#m}AvKrm72XT*lNkAe5jG!`fmd z*L2Gn_k9+eDWw|eTn(S>9anhwDu)AB9d3waK@GVbRW!imcD@v<21-B3O<3w|z$k}jPZ7?|zrjiD@C)c*2qWRi39f=I5 zH3*Mc0SQ3LA-kF#0t747J-l1Bnhkaa#BLuF=Gpx1I6B1jCht-3HViev>o+wSg(O z0L?kOrl?5P%k^<&InxJH*HJoTy=n(tjG*(H_0r}HxV!S4qVYDrH?|}q?bYijF9~oF zy6^6P_35GF*N?A|C}G|W^xBH`>ngrP=~uMvz0ZH$|7CUcq|Zr?u|zpv8|f(#+4$=g z&Xb~(j=9Bjj~}^t#&Y(kV(r9DRzy_l5?UR7S|9T4`t`qDqDP(Tp40;<*H7DKs@Wam za%Nk`TU#=9Dv~iLtqE@CnQg6TYa19O!OsH-WCS$K<%@qrtDq1AE)b^%3X(zGx;Qpa zx+5YjhB?D_!lDB>5|e3weP&j^tmD{tV$uL&V?SdsTgy zkSxc}1CET!gED$dmp@1i0BPy)W6vTWahc#(Qfy}6&#OKw?0T1Tk=x1D-YmhX~bL1Xj5P4iJ=z^+w?vunpIEX^}cY zP0_luHAaA_1wEkwsk-z2OhC}pAdWR zDhGsSG)mS$2};R&Qf=48NOnNT4+abhWjn_p=^NeI7xmf}e2{vJ3K@8Re9}vO5&=&V zfcUY|P1yR4NhU#`&hvqnw#TxMx?w`?gnCy@6NwlZBh<#sNT$bMW^Vuv2+$2j4gHFdwDb7e$-4wyIea7N(m4Wxr?~4aY^p zS4j(9aD)+o@Dg$$jkvn}{Eyks;L!8)8^wRzNQkd(B0k%9r{nO1w4*Bh2cfB4`qut! zqq*6Vm9r~<+j3JpWFHF8;)KSZYubI;kS%LID474GgVl&WfoK!3rH+^`#vMSwZZ$7l zv9>7NbAI2)IDBdBt-ro*)%X8mnq`Lj*KaPG8MR1?C}MN1``TlY{7qYqm>GpICeIL! zmnF3}N6*3WZ)jO%u&^zwsjC!V^T#urGWm2WuR`(b@=Ezv5AHVwAF=Spulb=}wN<5&$!#T}9_W=#Y6cF8lPc{ZFLJ6rM#kq4(h4rC-T`)Q zgbz_m&mv)$abU867HF?|h!2Y$^_G{uP5*H}x{ev@psj)<8avG)!)AK3+K1-mXdSJD z1n;H>S}@YtKw^{6shxPjJwAu*{cYq!gZ3)T*b~gO$93QKZd6HZPNh4ED<8QRd}ILbMS8v!G7%Ce*4z7lIIJ za;(sbptZwERW!@-Nu9$mbjd^k7&id0@AQT5O%99-(a>e?ApogY2Y#B`7?}NcLzQDW z7zJ%Rs0f0bOJ$f2nie2XtQjZQ$4fw%wU)MCsyX)cflrH{R-6xc@wseaa4c`}hiCh& zWqzWk&nv1YLpE=&Zatp6!nz+RZe343{uJ3xIo1+1u>YOJ!caTMiDrvV6N{>h6c61I zflJD69yRqnvVC=03WsRF?EF_BxX%9QJon-8ZQm-p&Ubuh`$7}~ZlS)(t`%o;?ll*; z$T@i;;XH39H-x6jXZxV#JNW#Vrixf*c)s(oIwmFJHd*{MmaWM%z;{qhMse>;1wq?^Infz1hSOvJ?DM zO$R~)c!a48(O$>iVb1XkVGxB9?SFvt^unb>pL7e@5Rg+V2YQyOi;B9&BP?=|EoIU( zO++d4UguJ${Gz$e5Sa=&=W0PCuQwBc74Fa?mxFXG0s;au@klidY18%0z*@m>j)Hm> z%t!HX`Qpr#fL9IBTq0i0I)*zNKHQfxW&!7gdSZlaj z=kYdIdG<8|8z9FXEweUxwgi=56L_LpOl`%hLJT0&REl6PDVWM=AA>V%h>;9-0~)@W zPe2WkkBWC+HuDs|76I1On}baQg#b%yfE4_)53U|uzW~@(1bP-F(!NZOVH|CRzGM{x4Q;Ls zK9Pqc15b*mWdSNswMGHhaGrG0h>ety3Ic^zb?pvSclw|;o|BnAZ=mHV&QWFS z)J<$*)T21_ctjqhFD}cc;QO2pVJ`o?`oGJU@7;qg`OzWKqt2(J=M!-=@_9URrza|+8^~gltht}xMvCaqVeo44kc=6h^yb>ZV3dc@svt0f zzV8#P+Tf4B1e}s}hzIE>>A0W@K6$}K@o+>s7GkbOhaWeD1>XOQ4-i375dQ}vfR?5T zHb9mD4S(C(#zWRzVQsc|;(z{{hua6Y=TU7U$-obW5E$5-p{{K$DeaZ1Zxml`+tyU}o0?KAxn6d3;tpbldPjbLW6w2SKe8>rc#ga?pz(53z zg72FU7?wboDxww-bJ;7vL+{1bB3KYOBXV6!>Ds$KfXFgJZH!Ctl6P~Kpng%pWjlcr zyx$oeMxFRQ-wvQ+Fig&*j+WIRffI)}jw$NIrRyu_OT>Ye&Ik@dsVI-Y=9jx@EG7cnH zc*H(El~KC4?Z{nd#J{)x_sQ*D?T3p9?7;SId^91|Hdzw3bK)<~8qPPY(fs4t`KhMX zkI#iP_9br8+bm{w{-JBGyj;?4o$gTo&9hTSOM*NJ^stEirMKP<7=Bu|c~R-B1jKwyVV-^JaO**Pb2sRueCi;~7R|5(Z_7@1mI zzDYbG<7OEGkYHIvlhu2KJ`O9omdQ#MHj)iUSgeF^I5PM_$9973Qly2CJ8+AWcg|So z-A-U3dV+m`k%M7;c7L_$aW?^cRwW$>rD$tv@faW-PsO>uHqT9-(po#3+aeuC{ zP>mKUb_9jDaX1`-v}_2$3fenuUI7b-pE<@!l9Q?I9!>M;(~IoF_H9`-azg}#2KyTt zl7Ip)gjTDsixn}fdg?#`0Edt@jWDUGs44iL7q^dm_~%D!7ytP;O{MxhR5~4W3%lB( z_XX=nISHf{>SH@WeVj&lId(b!*H#(}4QWO%2+!y=Xhks!<(UOr0pPYM>LlbA9SKgW z;NtU_7J1cHc=?h^&~Gz3ybT-)bQTfaFbBaQohLXDzT1LR7MGP6r~@S-n2&QL5q$oW z3x9F4C^sK{+1*)F^nCep-tU72&l7OrWN{NQig3!lX2hN#9}4o<^K4eX5=B+I0**Zf z5||mO)VfEX{Ou!P8eFV!tS1G@LJ~u(@;86};>EAG7L-q~XO!e*Ei}^5q(W0&4iy2h zX*8dN2%gUs8mZ75Qg<0z+R#X2KmV@!#s<|Et7#H{jbR{gx*RHr5L384O!C?;P)yuN z*t|NjPcVa*w(0t>#%1i;wOR4j)6&<^o7F3{6Vk@#-)+z%sO$;b9U?{OiKHS1+PrIG zPmOC{6qdJIFdI?VOIPW(@58a8!y@7anXU|K;c3Zu@PHX)^u7I+moyR-Hjuv%4*UE`U*puQHXKa z_(7Hkw;(A_^Eew2o*HL5K@|$j5-82OwCGQ=ae$Dyo6o}{uJQDI{=an`B_>&-)Z8FSGH1ViGDSFVX38@q_`-A zJ1NhH%;WM^>mNA>Cq6zYy0O}=`Ck_2O@-~?egcFj90t8k5(x_TDa%+E?<9`&~ge)_b5#!9xniv|#C zJwlZ)q=fony@XDG7FIin>@^+8hYW+xfW#T<3|x8rN0E${LL0;rgMd2(v<<*HOh3WX zqaEHt$rfnh5Mc%j%Yxc)c;lk^4D&>Wvo!??lUIWwBGok6Fb!`%ViU~-1(CjWcEGql zwxQ1l>)z_kGlC9T4{X0#?;-xWXiE-EnozYWyfG(-wj(%#IZ z;K@psU5DmK^KjBHU;Od>jkgmj*9qPfS~O0L#4_+GYbHcHlR=r%qT>31@s?!NwKl^F z467zI(2OJ7&5sX#3mNC}Rb>(-KxHPF^EJ&J&J<_V{PdC7$3KdII-#$M zYq@?tOBsLGzW6*rwCii-1gU^YZ!9@;=G`*|x1RT;JgqcZX6G$JiTe43jGAf9zmTz_ zijbdM%vlXNQ{^}N+^3nZV|V4Z)B6AV`fp#q`P)*Ukhqm3%%%JI&?RXvd2u@8fIy&*K3})=+B$ym(E2u+A%Sikj;2!LXj%7_}q|$h4xG5(` zTs@^4aX073VcYrzm)YYZ;OC?Eio^qWa98GI$bRF#M1ZbBWWFT={n*kHp=-GePn9sJ zh2M0*A5JLsGy_@!NkQOak^y%Wl$MZ81P$R)oi~QmF`cjiL#iZ$*fkD?YTCR6!7@V} zYzwq{HED7~1A?6`T}MTG_^VRtre5gl%t8xL7fnVca^N(d8GlFDuk%I1SiZSZmvQXJ z3v?qDjnwH#wX{$LTwX}XJc@@Xr;IxK=bR*GfYH=zNCtWmO=rz4q6RPTBIHTxA&Cw9 zU`?nlAbEGJt+C%k)tW7^P6+kf)gx@#z<+nm)-ZWK2;W(WS1pBP!9*kBniAt2i1zkU zh*sjyMZHspQ*>@443&Y%2w~lB$&d*lJI){zskrFm>N^+UNs#(@;R@lb|)EHuW?Mw~VPT&?DqZ1V2yCzswbN7n46lH_T#-=_r zsG+<~Y@R-jrNB0Gfb;$Su(zFu?%n@~DZA!|c=Vh7pGSJ_OFw=<80$3UovZ9TJp5>| zdu_yz`AuaNx_`>oi%$=glIDYikVEM=5wi^4P2xdkw=aRcJ^$JIk?-TrJ^JLxq|9S2 zNDEfZ2u#vd87TtEagDd}!JCa|myTGvXJcXq6bBPqub^jPO5MLEO@pEMj`CB2TRdHl z+eAzd6ROhc`DGbK8bIxm!B)eW6^KKDX9faXondSR47$CEKwr4KXhLh@R;j6lGQDVy z3?Cx!Yq81R9FR*B0~4C3y&amq^pr*w0A=JYG>BhBY+&&`d8#VS_xNJud?i%HcDB>eh@^TJ)fWL8IDe&mC9$~AL;b9BCFJe>JkdE*d#s6V0eZtRadU=&`w5u%rF zd3uA)2tQPvRwncq#Y0Q;)*O=eF#R{;vrAWKc}wX5$yo=-emuu1ezxnkpDyjBWJr#s zCow(d6h%7>0MhLhXzf^qkke;?5=cZc8C|v8kDSrErjAyMvYKaTRCo(nu@o&A;Nqe) zhd(W=yffdb2(zz+{JDGmr`x4(q2k(?&Iku6RMN&5M@;`FlC%X&F{pf92IKW}jRqBMk zy@SUXKzJndNxmSOks2hv0-lk-`%wjok4}gUAi_$^p~(kec|>ivDoNAMBfpeo07+PY zq18GXbY2PvlkGnr%^OX^t3hWT9ux zjtFGn46xpNzy(PQMMcw+w(+pO6!&-C&ISsYEl|9(L%bX16q%jlfeT;`Io;u zMXc&npBybJ>+QDFYadqYC(~|Joj>($F+7~>C)Cbw)^Do!T{JEY+NQc?Fn7)RZTC*; z`@`ez^!5nog}j#9#93EP-1)TttYNI^lY0`=$G2_It|8Ap?n|{t)M^GqN&U3oFFV#k ze0XdwdK^_q{ShX>zjQ&1?0dgqM*e|tLYuo8CTPVI|50;({(UR4A^!@H|Hs1eoWAa8 zGPdC|rvze85akM;H%`O5Vl$4qnQ8Tl^6_9(5k%ulrUD)cS3)}JSgZTRivvONQ*Y*t zezNEN2j2Pmjotfr&bG^bH)W>-MG<0(0TSeR`ig}xSr=O&SQ9+O6Q^>Th*{wm zAfA?H(od6@CB=t~jFhz0WT4ZAp<;JUW?@j3q+oGC?yCy;Ih;@i;xzWw0bB z<`+pu3Lk$Gw7x3ioUZI3$MzJ3&BEo&Ryf48O%yf8%PY)o>MZ0YgX z$Kz>jvN^*DDI(qJYXKVWb@iWz<7eErTpiz*H4TYR_hb+(T2fZ&leEp!*P^fS_7OWdg6PY0xMx+5*TxE-WZ9l;WqnW3B&m zHCcO-vPqHW5>$yOW*CE}PEkLsp0y z4J@0GS`y!%GgPwnZVQQNkCKA5a?M4acb`=FllV2Ck4(Cuk=b@vXoB zbVd3Nkz;_~8vwP7R3Qd|cF|`L=xb^O@opS`4g(+yWpF)u)`(YhbL9C%n3w%!D~?Om zgevm2IwnQ*@+qO7GaG$NJg!_iA1VzNAtiVVz>?IC+7L=KfN^|kY1RV+AWCGuOBo2~ zQJ~#>E-tlJBa+I~h*-otkWxYG6W*Mxe+BUAEy-l}%ZMHP<#9!NOX6*1wpMiO!v}G^``xnR4@d;z){Lc*eVUbo zjO@*8ael)$n;Bb(g;gn0S;M6;;TT34ImhXw;}w#O=53?ofm+lMqt%8w)Td8QuhTf6Q#Y_5|C3>e}&j!ZBVLelqW__!0YxdLM_dPj7 zMY{+$>?V~mt(UlTcB*>HEKA|B5j8H!QAq!vgf1^xG`I@NRDw{z%;;)97BiVSI47J7 zS}a6)PLBfB`Dw z5)gHhjb{uf$n29KcO1Z_^kGv;uMo*->}f2VBfW|AX(LU$CN=f|^x3$9p@8dw%MF3_ zngC^TQ&DIPuz+WmXqQni+X0)E??;`T{K(@6-sr9Ai5;k9pTrGlign~ohoeR4IISbL z@LZOy-V_51IAs%VbJu1000_NZ`y(qtU`Oa?XGpTY|L_UN*J~>yKQzA!XoGf+B)cdS zb`YAc-b-sMnSZd#9dXwz1ZEk8y@h2F56w>&b7PjSp0Ul1Mu?mA^oY(ozaH5Qzx1jM z#&}=F4wQsphS4Vh5QLq5^uGtEMn^uDUCfBk#kQ69u(xGhls5Dg4rif;Nk_36Pkz*u ztXTC|{ZFxvQE5p%X8+Vr;AMSl{QQlhf7?Dgbbd)Wc=3w>5k*#HZ=jA(8HnKxsE3PjWDg;gl5}xY zEJybX;eoyM(1l3Sye4X(qPmCl*o+4`zqRN&Q1#GL z*&7S;^M)9*mlN$X&kVp)Xz!-S(*^x>4&JI8I^rAE^s`ypD!mqj0Pb7(>@k|<&*gI2OUuQUSGYryG6+t zg?5)~ItTTV+J^>N+0-!bdR9J*dF6S5%}meYWi`*2Tr=QnFN}&&fCfyH92GlZx;VJzPj~PBc=uq?(Wb}5 zEYeMzSXsnO&0ZTV(xsZ_s;~V-eHaIU1X@a4cN3bClV2|bDhN%QdK-Syly3}#EC{~?j&r@&xfky(TCM`Ph9!Z8$E%t#p01ipK*q#O!~EP z6EVU{EUhb17mSD|nAVxNj6S^{+g833SGYF1dWlrbxS_djE&uAh)b!s^9&aq6YS_G` zuz`6hucx1Q+-66-Nan9~;Bd@KhEIVs;`T7O7`p=%c#Y2mgzjR21 z;i?sxB-_dG#Le3+)CMw1zU73WjxLq^YFh|c0<`vNT9BjI7Ixbb;yZe7fUVDA>y}y0*Z+YVAH!)?&w)7dRgU@AVi5W*U zSLj29hjy>9Q-As`s>x~#Z$9H^Ov@T6c>fxdY3x$Cy4+e%&612p6ctdyk1{d_s|#@R z2@?^W@CwO2(#jE3$6FVDQ*~5q^ts-kE<~|}5P;{AYuj{=WI3;~8biUMXM;jF7BNjR zT6C+4rpg3nQWhK$E!7vy2b-m;FnTkhfo#JIf$rjuQF=gHjiNaGg)iNHwI$_b3Ppv- z?vRR&%ZxC3Y8`h5)LuTJSdS}cWm?FQH?U(GS$)&OFLlfJ*-FonSsT#@@RPd$@Sr*f zbQ07EV`@x#Z2O9eFteXR;Yw~zdevTL#!{z&2)#v3Nt%b(J78mMo7mu#-946B9fD!! zOjWA0+xu$*Y!JS-Sa^JG3(uI(F=$xd$=cu&zM(hJ6b{YB3}${vS}MxR#b^Oh)5C75 z0`eeJzl_8;=?~=V!Y{*;Fj(#JsqG=3TWjW_R&Jl!jT3T>mz`XC4_2)=GanMaUP|AH z1Gc~7b{J8#yKuIoQ|645E_8z~6!7=mksIBe$p@$2n=%_SkLhog2HW^1PCTRN$hoiq zX@7M@&mZc?kN-pPDN}EobE}2IKoISd4%x@l5GxHIa`XEp!# zQLyHu`DVI%W3f`LxmJCR-v;;eMfHj)u~4vEmmCyaf5kZwfhGF)vE~>f@8g)4Vt!Lxm%+X-&Iy@!DUyh4sX><6S7e!(ZC$sEC_VJLI z;pRodYe%kQ2^7y{(Zj)*tq)4i|Fd)|nUs1ffRzv`jf^|rTdCglbzdFrVjc;Hb(rcV zV~kjwOyURPD2+!>aa()bYz@5bMM#8;UXdcz`6>>k>M!AWZP|^mgI9R-YKmmo`mxbb2{9Iuwt9<@Uf>8q=sgXSV75aC7@9IQ>tHCZ6j!mfYG+ zBop~0x2x${Xy+M=GW_#Bvi`^`|CJ!=rR^;~b#gtu9Y z7uE~y$;+z(XriIc+xm3l83ctFaG4Mtj{_;k7O#qn7jnh(YGXfIE+X$E8YI2^%4ONH zklDbK=Rfyx`Qd!!Ao|nOgH%W#L^LYoWMa0DrCK~I-}4=upElz-4cUDMQMCPrP zPr?G0IJSA+ce6`8%WJ>BXdKg&FMi9PFX>l3xwe#h?nm+73(wi!nzu%Bhp*hM%6hY? z>`d-~{8ib2BE8sljo`?M8K~p+egDuD$wAhP6NPcL%J4Qf5)y+TM{!+ zC#bYzlO-$PZGH9ge_s6clIQ0O&;IZ0JI_A}8xYk9&%}K36(xT%GLtzz0^?A_zY+&W-)}J8|2pYR!Vk#0U_b^L#-uO{AtWan3nhxxd<5IO29{;LXQWg{{&n9KzD#s99QR6f+R@l~-)5 z1{zNRXHwYwxe1(j@$Qt`E4Sa71#KU;I12VgKmhgOmN0HkxEeqZ5UlM;T?3W zJ2KgX2NM^^9pusFLDHBA$h7V8`}Qkd4@> zHMOh^0**8;C3=96957phk^qcVM-^*(7}ObOnr_9GI}J$iaHO-<&xY2MCluZ;%$_Da z+eygx*^r9Y_1Ho?iSV_Xdhogqj*m6#96r6rITpLAwv;B9X+rYXYa}D?t3w7yYLc5W;&>C%ryqZ41NYc}^Q zK41As{&B@elby52jy|y6oa|g~mc~83nEu7Bp*2-;NOEL?RbG`n^o-te{=JdoGN+>3 z&Iw-NlhKpElz#P(B-hVp*aHyE2NyR*lyyMLNX0U8e56HD1H7@3OcI&b_C$*6W+t;c zXs5aB_QC_N!2q9=Vew<|;H;<1moWE@96k2h>;L%l#fIj?f1E$}KeT{`GpipKFk6C^ z>xsLLK6lx3dP0oAeGYE16m_I-#=E+)5wuO3NFdBnXtIzbYHyZUn_)+K31&E$0n(Fhc8Y@N&CxQE7#Qka8FAxK z^?uwkTmtBgcY7Ox5)Cphf3gTkJ&U2p$_|2cOd!{_G=%U6g-^H?ok?`TJ!eFP&(k6c zmoc>VrkFSY&gm16;2IR&6*`zGEk5yTnZ!* zi3kpv(3h^>GY71%wg9W}oj$HL6tScx)Z&HW9c*^o4K+Stwh~bE?OBH*U1>#6x~q?9$q|COn-4g6+(?*gy7cs$zJSu3 z+`BZN2dpA$rnddQ^v5WL(iSux94_+4DaJx(>mPmh^R|c^CvSfCkHZDm7xjY$i~^k) zZy*@Ow{8x`i*4~IN8xh7pBji14-q0JrquCKH9|u?3pza0RFb=CS|W)`Q%zyZhdyCB)N0i_G$9M@4tQ= z^n2P=viX-2*4TWf8jipPd&>rPAHU*aBNte$U_;n@QEg$KzWUwT!0`|Mss2Fy!LD8V z*UKJ$XV;&hpDDP{i0z;Jg_U0Ly{J=`&3tGTcPDrzj`9<|VLc7R1A=)RgM>23eoe0oXjDfFV z65Q&13T^=DA;5KlApSH&FmRd7U{9Dj?CAs06)>V$-kCo7+0f{mDMe-jb~&p ztRWuY3BBy&?WN4SB5U!X=SNKRslR@B?2_PCns_a>X>WZ^ERh9shu3m__{vQ#*EO3O5tQWQnUX&TEibvoxX z)-(0%JimMX^W`7D6z}i-z3=ODUGFQpBK5)v$UJx~G@`(Fjk1dDc*!k0bZoRZBDm0@9HXz_ zv15#|FWR`7l9Urop+-b~9yr`WgpaD}fzn*nzz5Z|CU{PfCk>``VD>;3&}kj*VY@|_ zA(ac>VM&q6z9D>6C>X6enwzAHZO4YZvDemGXWza__t}-??2UUTZ6VHd=U+J5buEeU6)!zs;2W+;JaQo|4PFP+<1B~fH<>vFBlHT1I!u7Z!pe|(@jSkE3pX)j-u66& zxB#l>w)in*o}K|(PnBle0Ef+2(V_?zN47)|@+qJ@Ykq>&FJyzw{^65{;*mb5%2DB9 zIp1M=0z=LZYDZB`B>*Z|(~I3gVuOKD4ZI`L888&R1xnGQMCN_$TOHE9_8=CR(T*QSBxoPkubGcmx);x;e2hY<;HlZ?psjl~~`P3{e zbtiY1EMJq4@=RgRiMgxv5P(qZ1bR&5q^F?mW2%ffM+Gs8s~S=EVoc`oMmZG2FD zF-EQk>wb&Bt^Hv2RY_vyGxdl0;e&PVqao*)rd~+tgwsbpWem(Oo%s3l@7czm&#Jed z)rh)Rs;|qC0rlhCMJZ+DyVROq_f9Hh*RtExaKZ@JXa;`?DT;FDc;ViC6Z0jCu;b*| zz#4mR#iJi>PX@$vzN7^nl&;}4#+M6VR0OnA8BD44N@6ED=f z;6DyI0pq?;n80BptDX*Ktx9Uh{$sP<+oOKI*RB$rQ~#0f(>>=ChCHmLDx?>m9D|p! z$`qQAkzC46hv~5CAE(CjFKxosvKkW_hB3Q~fWzy;^F4RhQuV)uod2v5v=yJS$zyI5 zvwXD80&(=9o6vZqILpaNA+n&@rHd7%)q0D%QuX3|&(d`D&t`dRj$2at5m zJk+B4jqfZCAP-VknWQ(%kZEd-Sr|a_qqe>>ue0zn!xQ(XLcuz76>=;)5(W$d+?-r3+XM`@!w=U9L zLj=kxW5vmAyI%kyKZkhnk_kQ4S9Mn-%FqjkyxXqkK0jOWs8Zu$=aDyXoz6IbEn%Je z;SSw(|2@w@(}S~bf>IX5GaZOW4mA@lu1L>L-=b7aaPMiWH8oSliWhW4p;LwH+}y&3 zR8qizBFuKz}y~CA0|!Nz8!QLaYxJ!JHes;Xpi0TgRG;H?RSLJpog=p+CjL=Vq3KQ zen0X_bsPoyL|wa3HwwN*HlZFlxMdi+h2`X5K0a=?WxLP1FnJ5;Gq}n__AYS~BYYW% zw6TYPX|V;%kcEIX>);poA{2zCmtg5RC4l|gQElT;hIoG=T1*hNnj${Mw(l74B}b=3BWuO2TLt> z19%MsVBudGoF(HzICL1e9JJL0X^@rWZeYuBP!NH0z{9!M#NQ#)c|N$Wag`4Xw$9FJ z*j3a8ml7pGS8ep(f}v`q*uDgC7ML5!c~Z}1+%5*=J?&uo6h;?EePB}GVh!q)NY;qq zW)NoI2sH&*o<6VYNakw#A8FfafLX8g*d{b3I-MRf=p(rNOTElRmI;+6&@${)x&zUu zCHtVTDJ0cJJ>&ASy4h^sTc(4qCQKl|G`}z8C>aDq<;jT5x zpQ>rFX`JkOXt&5Q@6$?>%y**@V5=cSzPhZeDs(`uj+ojFyEen*SI4~ zFy9=o$F4MCBgV$@@HlVc3XXJgg8~w_sj0rz8(^0Ew!ixpAjREzkrACkN%`P8H9d)* z0$o%cDzQtT?BBWSZe!G$fj4uj%_yj&jVgR77pEDB1P8l$ZG*%!L}4pY?;A#wp!2a% z6z`}GVIf`0%de7LXqW}}+V5ZrmDneCcxlFE+|dAv-YAyG zt>le_Ixqr3;l00|oy8t9m92TTl6wX?CFRikOFBrB{K58S^q_W2QL_9#WN}0cz5+M2 za1$EL+0#>CQ9h2*H=|M0m}Ec6o*BG`Mj<{(NLv`5_?t$%4tJ4Og26n{eF(G#3o?wY z7h*$V4gvgf9Ik>CnT7i)t7(oT;(}>XGZ;cyjL^)Cja9IE z6Y_9?_wK_H!0+kh>A55$->E=TH@c|Fu&7HbS&eR!xGLDPcl4u~;&UfruI>1|H!auC zF0JJud!##>(YGhjPDAhXboWL+VcY8lfO`m|gp#0->Su6w*En{(hL`PA!|plsTVKuT zJ0v`KhmqM?=aH zTk7(Ef7sie=OshJ@VX42U26f6V>Z%v?AK@-!zv(^@%mXdyRcFk5e$J#X9i+`C1Ha7 z&-wamH%Cwu2@HO3Sad8#e?u!+QG`Yv9h zEY*W|{!g6jWv+I`kj>Spb?oO2XdZX z2oz_Jut)&{MM%xv^Oo{_&+R{-`3HvYjuh$;k6&fS3NHWah%Y&q6dEa^j3uc12RK)+ z7KFUhWXI>fvF_$(_VMnLF5%_$n!!aSE2OL!*g8H>Iw#_hexA zczCOfC_;H7Vz&h*5?Td`BjK-^-^cewB0Ks5u11Q*Ag9E}&TBoH6l(E?2;*-Fh4wYA zIy+Ku!UIq#y5=VTpeffLq^z2qW^dYD7NlJ66S5l)fvhk+RnpMpBL(I$P`Tqj2DkNd zcXlEjmCU}$CbR^Ns<(yjuAQC;hXP|C4dfce9Ka@7A9}cFG}JF3KWHX`PbeHU*#=7> z`wNg)i|FNK6m&~+TUgjZze->LXaJ5WQG5PELMMMiy=M!Wdl`^hGeeS+WX_dBu}GFR zC}xdnJ6&RI{c9bZ3fo{c;@`mh&s7S!NuJd@C6f7U?8P>Ezd|E(9*nI8nqM4H5)+zB z?<`leOi44%lrf_1GBngesGUxC zjroX913;6bh7&{m7+O)}Sf~>v{o8loEUbs;MVk^VEIXUu9R&?}I!!|d02vT=t&wft zwA5~gXfRnpS!h6=8Np?vXF@~3Iw{!ypPz5-_+0Y-(UDiZ%1#zse)RzNs`1>F7B=Ngaufx?s1If%cfS49%c!=6 zQ<=non*5fZqCX1;+ARK5b&C+fg|pNU-9A5tc^L4;h8-uEUBT(b zxBOpHFT@@3J=h>)jW?#7^OK_nhu#Pm-F#K0xmLVAYQN_i)UK0(eyMZ5v^02EDMKRA~&Ye|dA!PPxc{b4et#yz$V-TM(5=y2zrHe&^ z;KCGwyA+i~iKRN3yrA1VzAQyb1p-Ep8Hhmj2>$(&)!4B6wrB!SrftV;D|zN11p$2i zaBaYEh9J=5*+U3@g3BItCdU#yp3yzQV>S;Vi_3TnfSvX{NHIql7m~M4)J|h5SbkH$ zrESgWXog|n4#u;yX~>NP?{U-{``~=|C2Ly`CIyN(c{#!*DkQleSLGSDQ2{#KsO>2h zm4SqY1t&*;NFnzc%~HybAhvmW9z>eHC^a37xWC3qUatg}Gx2ZM4*UEG*3>=? zBn6SK+@b{}VQUAYC|DvQKx^Boc|}eE^Tj=$b{38MXvE|WA-J_%WB}NcR|`?-mONHn zQC8aBskNk5$VKz3$h*a#e`=5oz(4xuGV3yf6jOD5n!C1gP~>-@IBV)DJurJNrbwnB zVJ36&5p#1aE=`DDOT_jOQ4!a!AM4t2@OAE;+u!f(b${OQk*faX`#mkUUf5e*`C#?o zV+C@Qn;bMZQM@@n@yYecf7x#oB!$SbGf37~A=(C@?t*>u`nKt!mUkWOeUBA}zWLL_ z0o6=h1iA&57yX7)&EyYf(Um(|SF{J@ICB72qy&`HbjIPIK_x&;>v&q8p)PK(_wKpw zt26Y5^_JRvXIW6qe$@KK+I$Yn?)Jj9M!Kqh;Omk+A`!lh4_}@)n~fySM=lg60)OO# zo&zAR=OI^U@B*bE$@4%-);)w1xi96iI4Bd8Nxsb#8&^Q|zc=wVmm+_pdxZ;|m&Pbx z+$RUyP?1l%_ymN!(W9uPNZB2IjV7yKfFztWH(dnD(6d418TG?L*`F)J|L@JeAh%&l z>~lC{=cYBZ$=BncP|R+bpRBg|@^icGVG8yXO%h~1C^mIq?CuhA7UwPYjDEmLEs+*@ zbJ7zWNcNE(0;w|8J}6A2C~q;%;FVhwM($|TbtRd#siO?C?-^fT|Dd@8Ui=U8qRcu=>t%ll`n)XFfxfjuieogE)o}Xt3 zhI(m?P-t(lTnd=de1U-1(+c+qC@&=vkZ>wW(b-(>*;)}=!j-dYqS&bYn##bdb}d56 z%_!eJE?(21lZ&X72D{&Q+5&e#y6In{XMjO*VN-hJun8C)>AkhR0abdlzg=6Dn&i%u zzZhH$BgRMY#pR%^DjN|4qt@}$(GKG(RUZcZ{h;w<{2vf7i z;$0=;hPgF`amdYF2cxq84i|5#Xq=d}uCI#xq*O;(lv+^g3~OD-M@-id*y~*$w{so84XYRMCX+K_4B*W-^$%Xgc*ing_J5Z zp0S_1>Zx;yXNZ7y!8{QT8u0S#L=rgvA9B1!L%Nn1m&fdF|shTye zU2#_VrZo_`e8RBz6MY)Rg~-8h3^ydv%@ukvV0+DKPgKRa2n$zA^|f62V_1#sUFSyc z-NTQ<8~8xw0Sa&VLcLK2Az=t3Si9|#haRx@luJE&ZP)^`iAQ-^N(*6$ZT*f|+m>~_ zRY;*U-wiHnH_W>U4=fa;A|k@gH0hTH0u<&UibDEpqCu84h29J+jBFu-fqhS33Nc|? z;gUjdi2zCle`^|&tpL-#LO@gw-5Q5(V!eLGj@hNvtJ8~DFe-tV_yhecwalN^Zec=( zPSI6Zg)p6Un0J|tDeobBP}*QgeofG~I*$dZkk+ChJC?Ef9)My?DZIoTTDSqqV#$u= zK_Sd)Q7gcLI&H_ICXkXS;_iexkO|u_gN(5r_z9DJJwf~IWxfDJl4}D9F5Y_zd6ywY zm&T)jtJ9WZ?l_BtI{NLBMw!b`m77Xm^;mXDUCd}B(Y`YcfKtVT_{n7>jo42#fY~7N zmGqs%`AS+aRn|*V!1Al~Gqbw8z3#h)Ku>gZr@}{-2m*ry)@$JX4Wi~8hPt>b9|JPU zLx?EO&Qy4K&C zc$fON%YZxv8Y-eIy;4pYBdc7CV2Ll=HMR5u0!>9R;AXn#z89=_hFG^Beyh{buLOoH zD{9UhuS&w#Ej&$Q&dt#|iZ5MPN(GOOjh`{(X^8Fcx(LJ~9{42>E>YSI(+e}h=I87q z3(JQ$-MUL?6m;n?Z*4Bj;C+{Bk7$YsQqJn%C*<4qkMpo84cTlSXcJ=Ji&tW@ez;>_ z?B1r{a=SQr@wZW>fL5u;b(ers_u&gMdThzis{s5~kg#0p3XdH7<(F9QH~40aDO9Y0 zE!XSafDi+duFc4z!108-CNySOMwBo~pbs$BN2V$K0ZbyespH_~qV?SYDf<6T@H zZ@-d+#J;*!CG!1rejs>c;~ z^QjbZU$Y4;t;MYtn|lI|?@y<4qNhnN=)X93_A48ZD3tFiQ;iE5j`U-jvz`JD&gQRV@+^WAQpsZO3Z_aeJE>bP^efYWcx+% zft2V(c9A-G?C#;iVKnV%ewhiuf{!hYJjLdNPHCtaEZE}J3`L~CwS%Z81l@kqh+S&PLCD&@JjqffG320| zR457~>D^F&qrKg$zwce@~KF0UFp8F>LL(H<|Urk5-09 zcRvoKcSobp0Tqo4^9onIMa`mwx@3q9={sCb*U_!6oS6*`z{|v~3Z>OoJzz7hDCo&h zt~@LLU8q98W}XNYN9H_advzBpG={kh!_zdo_jC?%l{2?_;lvtS;iY!J;UkH#ZFz~4 zstnyi*d=R-A7La?lHL%M6t>K75{o$4JHh*>viq(&$`kKZc^sx@CQFouNf~z(3B~*hwRpAfg?~_IFCk+DL1X^josBb)Vld8f!3*+{FLFo7V^(m z&(64?z&{@xdQspLYUvpk7a}fpp2{w_A-PQ0*?H4e#<2~Y}KqG`9+pC7tOgKY+dI{VqICDm!&R(Oxb*ynBK|6N{MC=Ylk`nw6G?M zW4_H9$ptpQ@am1mh4jk!J`g-<^RU)f*Lv23I_mi-hRI|jJ<6CI!het-O!%!dII7x# zF(wkP;z;xPHbtK9!2gm8t67C~Y;dh=fEI0RfE7_J15+(7KX9x=nmd|Ac3i~WLzJh#DYyI< z5sNlG*pk0Z0g?t6Va;IjbtY3rK%3<{rEs%(I;C14johpMyr#fpB?;Qwpom+EAzMbpr6CUot zPY=8rIQRh<>fJwJmqYRPKIZ$=|BJO6>SU*hka!>GNqLXr&heq+}HZ&9p ztpqt)XXi-T^Eq07wT_0snqu5C%98z%)04UI6kjR^R5S5zdBXMHml|}7Wd5`S!fKhRCB;*v!XUBb5A|XhB;CxZHK-C z(;jRhw|@pncBaf%MM(Nma&(eSN2%aG`i-s}Lv3W)IYyw79uj?hY0n}~X1c|?xw^%S zP&AM`vD+l$I$)<*_aWh$-_%SB{~+KMgVr2X3YA#H?zN@`1LBmhG+kK-DQb*9<$DSQ zf?9;8<*;yY6ieLg1;AmT(W2N4T5NI%1c)36eU(K$O{*eIwLh#@`Ai5ta`dO4Qq9e< ztkp)t?)=ms{xi2O)hk@pYE*D@Z&;tIn2Jd}R5t6x4#xG@T&FwB+HY*;^~T<2rJYYh z7y`OVX6Lj2g;UnfMzG_?(?B6twr$`4&WMv1!Rh?f@4x={;y3%dR+uNA&;Ro4uep79 z@8z*RPW!Uw9!*-Mc!iw~ODTt;C^7pVP4Eatdn~qPhIR%~(mLz0M-_KM+naKr3fqA{ z+TN{q)2^(D$cnt2^Y8z+tSN5w^`Y=x%amq;Krq0l=khFi`0Kf7wvtLL_Gq!*B5eQC zbK128|1M1m=fvNdYb_Q$I)j(+T=VIS#f@}Lc`3rZYK+xLWUao+elD&B^{#j6bqlx0 zfdC%InLGK<(_gjHo2K@#t(nYz>C&b~BTDU^QpRj`X7RF>Dfl(R8W*)v@!y6=KN~JN zolpDrmgcZ@A^djtyIm-YXY|GTTcRPiU1JgAvxvD)k@6|+-!n9li!?`^_uc_c)%o6d z8dGwT1VjWtcwgV_aa~OW)ubV$C?|PqXDvI1gV98rgPabZkpDXxBz2546Kr9-bRM*4 zv4c&`AbwjGe}m*{!Xtxb(2wqF?az#hGKTTB%5i(tmi+lY`osHnlaif-XzdWWDwoOz z4XI>M`Uu>yN&?ZGObfY&(C$H%ak0DM(VToO5vVI9j*r#ltgqd*jl-;O*K+!@#?}=F z=+E=02N^bdwjzs~wwQ);_Mz6nj7b{_dkUX4Yh?LR>gxNZrmGAMLUdcTfa1G{;zzKB z!(rd?kjhMs*hUQr;79fQYDDJY+g5W`yYHhJogJEDqEeI4dLM5d9Z{hRVb`Zt0w* z{Sel++vn3{&w=gGNDlazLL?Mbn#zdtDl)9~&LE^NnC5|ZNB2q?iwsaPbabVnu}?C4 z?!%7HC#8nX>|lk#_j#Osx2SXTMb{cAf~Ou~3x8$Jb!&6S#(OtazLHIpX>fLfOp)?D z&!SHQTe$woka{wyEBbK9sdf#YF%rDX=Us=8wx2$x;rzMmrWAE@56Cc#PNuE36dol5 zaW+0zM|U$Ni{nCaFO;m~qG$YTL&j`qPpX}+%BmY>WXcwzavSpBxNs8Zo#~;BG|<#*7hQ{5F{5HFPkvaAXDKkH|I+v=*a&reR42 z`kTH>;_&*&{hIASVJz&9)JBzw$kbH3VN8=INEXsr8;|tlB{s+*ZLsEuHcv@NjkT6A ztPzEV%!^oJ>Se%PZ%LjWHq>_Sl&EtM@GUO15bo_pe}5tJg%e17IcdgI!ENrS1msq= zGXG{=@G6d-5&Gwa?>S2UU{;T%wiT>xbS9m);cK_mqHqJ2(g4yT?NSqFOp`btpr9JP z_csF}i)zvn;ONv`3NaJXd$xrmqu6ysYm2-#JAN3PxTS@dO56s1NU-QK!jXhQ`THwR z)$W|{aM2XQrSmqXIdKrTdE>OGMI(xo$jtqmAbufbE8w%1jjp1zeLXjhXex)`j%iw! zS>Bgj>SMlKW80hlf&9D%+4%Ngi#<_+z6&SPGc=tUtn-bs++l7chzv# zI(u%`1-g&uZI`5K@ve=cQXfzn!6P^=L58NT!Lw%uPWaB>D9*Aq=wFVu7-pw@<*WaD zW-9&Ack9RA=r~Px`L^du=Eg^>YkOVe8>82*K0aGqv-A8I zW_Js2IFT^*bnkE+C(Y`s7_FtWQ)N8%1oRJvK%4O?=2MWvEh74-fn1dfwI5s{K6mGz z%20mek|@(q%4kisS!eoYX#Gg@tt_u*mc8fW>T2DSmtI$Et%Bp(aku}xV1S)-ejLs$It$C29b03nDAKWa)Hm06=vEm$m3I; zYi|o0fv-<@W1>;!EnlHg+KIssM@kulRHkNJ0^s`$yQL#edVgfy4E@0%;84&w6HZIq zg9J=VMX8CroIUp%MD&ktGD-OGgZjD#@vvivEz%V9>Y{kS3V>)WL+YRSZDY z+#VnG(Pq)V!+0F;I++&4Z^GAtd3QeZ8&XaV!tAtij?f$w3teV2*<=RwP~YKG&7ui0 zmB2SOkK5)`!_R_QfJRcNsUNAmT_SUoG#P=Kw}z|4i}ywJAIMw?h&6UOc=C2qumnvI zv3g#eTrb1OU4a!xuw`pYC~rJ>gQJjsxFEkzPCWz4?5Zz?cHRWpX;Y7Uyqv)iTSg%X z<#gnr=_39js&GFvoUMca7d+!I!0z%v@h(LP3%3h#kp?HrocuT&@E1e?6r&MiZOd*7 zO&aqRQa(VAQQK!Om4RYM)cV8ibUb%atUxv!Wa@wf`Qt>O{U(PT@;3tqCyu$^+gJrt zhUwjaiw>G%Ka75YIfX23eMN<9RtDBS4REli;>7*Z>%QkE9{e{zI|aAoMgVZ48I=k&X;yPy7=GqC8=Ilgm8VE4~ZRU*CV_&@&{-wLrX>Dva;SS#(x@R=Ik!Y{G>ClRvNo!6|c z?Wh2c18@A3Ym_{zOEdN-E^Li8zc9b>>$mxtKlI$Yr;5i8Ar{@hqg69N#5Uc`&oi6_ zJLF9efw>;(B#shIobxT&jG_p^y(XL&-z{S0seT$8KE1p9i(BQ|t9tS3FR{d1w)+0_ zJ4!k?)n_B33I{4?*;wR;!b=}Dn0`0j*p8+F&z$lda9jXwIcQ{+9{BfNApG#s?3v2| zrhZtXnabxAvQ>Qekee1yQZhFPPT8r{i~ZdRbj~W#b*3eKiY=fIit*GoNReACs|Df* zVwA`-75tP8_61_u3G z+mle3&1^sd{5qxu&^HJWO>RN?fOCcz9C?K86o^Vw9Rmd^|1L3z!dxjt6>5E8pxj)*40w>UW8l3w`_AD2lo-cH3MX0 z{Q(c-=)n?@9PzL;y#^tG7U`hc`-917c(yNvXdVIIQrj5r$H2pSa)AA4yX{u0`t+4r z?v=GXP9%nO=5GA&>EeX@VxUE2m3LR_pULpuJBX{k>$B{3=BNVXnLd62;$cjnd*#}( z;93}PHz?=EhWzyV3R%=MPa0Ooaez`aI*t#6zpPeBg>(;ajo(u~PLvgUQdyC9w*3Re z`=QCZjkEQ@szFsYU6s|-l5#fEK9_Wcl&ozQJnT`bxyI_kR(+WJ z+&QlK3=7onKg%5X>nE+jusoH$5BiaLOnqFFWq8`yRnnVF4N+*U8|rAtn@`6>J?xS( zDTcGGi4_&P_q6gNmxsUc4c-Pdlehob$0cxAF-e=DappW8vmPd#WpcUWC0USdz?3+1 zrt6uvK(%nPJ^u?XYzTK|BGs;XFjAMVS^Gp|bChdOa9&40Eofw=9^gRE&kWZm9}92A z&33zLb%KrELvHAF{j>Efdxk`p0s01a+YM*M9If3yHrY}_p>?Q&i(ltx}nw- z!JE%kjd#M94O}bR7NSnD(_=R%b|cL3io+OJ{1{6svTJJ~lKGGS`&atiKhl;8yzCDM zPOg0!nk~?P7wyWW5Cd$&MH9##`HvG4Cw}vZcD!qQkrUyq&Sgtq&C5_=sAQSj1~!CGFx#Ndr4ok7<`Yrzbr<4_2dos~+gT#jY;E@khso7%iba@GR20FpsBqqV10 z1zO~37DW6Wp0yQ;*d~y)jgM*_fqOR$tDpSy&h=@dhn!`7$sY7pPsGwvgNR^xLJ`GO zHXa3(vHZDHY29*nq?6@PYy)_`(^Z~~{0pJWwlrlC1jXa#i`vD?8MkETn-Q|5%F<`v z;aWLfV*n(}{tN^NcVIQ5Ndj@hHvzF@89LsSq|6 zST0NnwfsRL%^aZHAlqW@c!MFGe=4OMRO4bUdRjs)iU^KIPy@Bx15Ze3Xt<9zJ+Gmc z@P$gjayp|H2(?bITQQt~REbPM)Z}PR&(UQV$G=?{Labh!bN2wnOxt$OJR;Tg+TY}S zxUug>(L}Z;KNb7vL;Z5WJ*&-0Cwr)-vt%tr8r*FCOjZn(CO<$eS_svfRki}#OMn`$ zS?M<5E8+W*@IJIkeRk!};?iXPf+P z$6MLG9}xCkUucnpi6bQ)$o)IcckV1XxnqZqWm3sVm-ItjchJVCg*?(cRsiPe?ah!w z7nJlP9%31$X{qI%uAYAQ!gGMeTWi|);7m?n)qv$he0-m3Cu}hv@%GUD7cIxTz-7z zHIAfv*AM0*cYC2EP;0T~mooY3+Z=>st7bO$&Vi_;)_2sn@zguYIV^8Sc67@3bl=bC zzK@#D`hO1aJ8}d%P*#=@1xidO!8im!Z9rf6S?B1VIjb^h`pg(n574I266Pb zZNh5qbWn8}Mw3aBxg*U+p2@cV@yQj)`blnWyD^kDCUU*96xJ}@Mcs%RaRBF;bR}j# zlv>WHTCNw1jk98GSym&Mg838G3NNV>e*zcI2k9xFUCZ_Rq@hV#{64u#Q@lmq_R&^6)>=V|i zxiW8pimD6ud(4zNE0sqk<3&rktV*DwJZ>p9EbVR~=U!x>qkEfF%zdaKK@m(#}z?&YTf zd!R&SkVStowJwj4WaHOFW6>dVv%h*frBSA4U6*v-cF{=~=oBf@e!)9jVrQojX*0+n zvhEMHvMhp--k`@q$w(5K-J5P~yq;Z7i|IU7mWeLfA9)z+81l$R1A^xd`yh_9-IJ*) z|MC$Wq3pFsSc&L;ZHFiaBi=eu{oLpR*}?lY2flP<@UymEm< zq0(f$c)aoH`OH++DFTnJc~{Zu!)OpuDZ+N<2|-|>1qcDFydpL}q20qKyvrS&`cP7$ z07Aj2&OIN-hbIw3^>+>wH*IVTd=MErH~*7vcQ3{(9T?*Vc9 z{HF?SYZdbWEUuL`6lXd01}v9>T&ThHL+!zl*_Y<}3o z_R6xiz|ym8N1d$akTa#>*O3;;4ebGV2a0?5 zuAw_@A_JO-U=Z6F%Ea?ea(!#U=18fXR8`8#Obo$eRlQE@)I%Z!9SCTLG@NHamT97h zGo{uxqA(fij}T;A?l2YePHX^K>SqtF6{v#hdjny}NV^q=()D{IYjy2-(9}DSrC8Iri4I3v*YN)u)yH z-S0lRN(4>X9L;szf;7igUh2?(fh=c>XQ!>MG#)SVjHGnNh*|+L1TqOWcXHFK$(XwenHs^Y50uZ_H*%9}$=*`qlsNzEL;D z44rC`QkAf=)lXp-qdQlsbr0FA47-;9v4xUYUBqj)-aefX_8+d{ zWLcJN;ZKIV3;)Rc0Za{ID11X_-fD<4k5DS~Wblh;pKWS_#IkkWK#J9Jwa@;=)jDGO zw>J)cy>5AF=+(5U{^<&8FrOM)CYi0H>1ch1b7R6b8nWePwXVAYeLr;e<(VA)a`N3Z zT^84c`#(HOy#wyZV_NQi9^xlg@>l-s6(|SxS1$i2ll`|t9XKeiRat#TC{tz#9PR7( zf9;~g^y`3WXHefIY`(SFOE&LpQyCVVnvhN+xEdc3a`e{6}FIZ$f z_3`-jgK<#mjLaEatyOj14t22A@lZ*7fG{;rv-Wub5Hb?Sv=?*XcfBg;lvLT$EUes} z(E!_~_dqp6f@|+T>ytW;a;>tTAYQ1Qo_Sa4ahRT^29yz)pnQ1rtdSv{vvRGVZX_#; z&%eKqoX@Ni{vG56PZ`SrxaWc)HT{YvfB#5$O6)$Wdjf{Lh$hg=BG8OWb@^r{G{_MW zQQey&DK96VVq>%@uui156s&&6%>=jw3AI#n`2!YVI|a@+BP+MTQN&;{(y?2FECR3T zmRhH}_47<(V`>G-_er+*F?!WTI$Iew0Xu^@1Q1(tcM_E#@smjGROdE6 z4eSI~i>G^~e9zB+br}$}6B3`rA8nY*n;;f<;pp0Hu?j{wvf|nQ!28BT|4&qQ9;c8k z{L9ege%;5nm)=eIZT^I}@3Gi8pS4cX;R6dGY`vTf;&uH4H>CG^W0NI)uW+GMO8A6& z;KpU(?xeKu#OS(Dcpt;SW@f`G`j7+g|a@@PNJ3MsTW$ZJnrKuB`Y&kuka!fFXA&hF7F)Zw$l_R;y ziAncK+d@WIb(v#0Z@|rP!zWZ)vU-|~^dWIlq+KLw9@M_6NW$t$d7=~UfaQ=|t>w=L zfkP2j z3(t+={WC5j;{appRt0wah|1;Uej*Fo-<>LRU@*S9rZrnj^mozt=GZQe{6Wk4 zeyOW8tKO#K(J1GN2ETvZmB9%=S=S`Z|Bc=PlJX{LAn_(m9-E#+G$VGqic79lQK-uI zjg*22R;259P2cwVRDCWP>t6ftm6aUW;!}6kngzMaT%uMg{`xTaA?P_4WIWK&3(udX zdfr|cH*#Ago6P5VC}A#B;n<~3|MKGjYM)@Wvb1}RZs+{nd(!i|j?xT69<{|bp7Wgd z@%=#H>2FF5sqf=%pT1JeY8b}PmS&um2Pp>Ww@MOYlXP)cX1MoX{^-uQRh)(Brwu1I zeDjH>6JfG4b7TAadh7l2KosNuGJPu7+C$eyTaV&xi0aMym1!xndHhK8CJx~TG?n&{g{%3E83d{Rrn<83~`{J+o?2b+p!&Bt=#B8~sXZ36cb`b`37evbFV5#Hr%`i<$i2P>fYy>5s z7U}sI4-|xuRj(UC*9IWe8G5J2r0-O@=h81{HB&%kl;M!QoEUjxCFD|R{V=8_7jO^u z_*i1WaK=;K=ub-yaVn?FJoQ-i{PtmdUH2awO!^O0M$^;1#xw~cy+O8cs*7cRuw|`- zC+A>UeJM&(ZG`rSCYPyMTA1-D$%1zPuS}_1^h@vXA@2{&YZKCTpQTDKU@UEF>jeWp zVz7EMs(-q!et3I#VSS@}c+&5*^2dsq^a+4n*@tTB%n%}XfV&B5aRM_l+bwN!MN!CZ zvS75+<%S%(fVs`Dx8ZTt5zyGG4>G;4<~ojQD}kb=Zh|^2QUgH+%N@dSAJZbc4O)m~ zHT&lS7Ge4HY(oa`3Eqn=h4hDA-6*ZS_#pV|1{av^)8-~BJtR$lhkXUGfsQbHJ@tf1 zHTJG3J&<8JG$WfW;59~8>79B{f5j>xG$$T6Syjhb>U$8W?=8BlqIoSdXU@|todc=; z;kHq1wP?G1kHauNjOT)KB2Uq)hP*Y3cb~e~LKMIk!O@~97;4MA*F!jDRL7`629pZw zgXFNHrpfis-M99Ph?qo0hjjdtxA!l%qc=TgVXQ$`rorzBfj|ok5jRmEw@+aHkpA2U&?9J^N!3Xs+ za?&-|qsQ)DJrwTosNk+n-OqXb-v^19d&mXhaH;WUJI3LuX4~P>{O5aohFS4n?+549 zW{mKvmpX#^Rp1i3;@sEeS+>8#>weE|uS}BV)DJgX(zt(0R#`Izn$vy?X3WEa<9{+S zNTF)rz<~qYjIZs66aVp#cMp57My~?L8lhWSxrVXGGtB+u3=qC=wyi^M$o%?VVFjluu;{8QRz+aK)Z zt*@XzARg1-{)p!o@9S|`n+h6GHyu1Zl@Rczwk4vu^p%3+z^_pC3>R*+M|pU9N*MfU zfjKM_dru$C%0_H}brgn$1L&>B$!u-Y4a}2?rA}FPht7z8c%lYEut=$K)rrc^*fY$) zO@}Hh2R7ePll<>F9P9=@4yr^QaFAAmr}G=igs4=60ppvvCx%cF+M^f}Hk5v3n_1AE znU?CSTr7oHqsQ)E=Q?}pAMqM{9(?I~D$;uHzA6UJ-$QAUWq3^}9410Cf*`h!do_lS zk-`l7VQvz?SfMQ0V(p@_eJyk}i+;k6w3DU&^{+QQVR8K#_6Ge7-!Np|Oz#I-S^CZw ztmCA;*e2jJSnCS*rMt=v6mz6JYZrz`2Fi4AtPnBeCMrd{3zAZIHwOoDuoRQE%>^+O z3NBy~z~706ORbjg#A8!*bjYW;qk>4Kmj(5STX-#qV)UF2B;ElKS=+Fr{QYY~r;e^g zjHi00t<12MkyWU-GqN{*?>Y*F?2AZ>uiQWnR~h5q>PXvG?)i&($Ga{x3Ivbbw5>y@ zZVu!h`mR6&8XA>z`l%^4!g(w*_4&ugS9lvoY!>YpUw&R=Z%~>hJ`Jn^7MeB-!I|4z zw@^3m?i1qvr#HZqcmCdi2H7TiKK=+L=C$gt;WGpDuQiI3R^`a(wG>+X8{Hqj|A8Xy zi%!}oh$w?GSw7(Q$9m!()0wAOTKQ2+SF(?e^@g>&OCNH)0C-$ zQf5>t?Pne<#@($pKx0S~Zl$p%Vn;Xi?{{jFG-+>88KxC3j=!|pX8iVpXWn>!(tgC= z1KsnsP^FfE(Q$%epw!q~iQ6igS*9m4K&dICTHNBXL<=OYO>1lGRtvJqTMq9u)qfR7 za-@iFE=NjQHa#_At~EP?$xLOzb@>ko=JZC zIkn9%Yt`EML1TLZ_Pjase`gK?cyzu6@DWy^6*yb2MgddHoTm1~6cW~-3EUu*Tu~m= zs!Z>}7xAB0(6OlAh{RI>X3aLuW?j1uJ2d9N=PX*4{A1=FYEQn(H+wYSSzA7QptO6s%+gv+nn@t-GP_8kK~XrdMiB}cqfd089YZH zq!#Hl*amxU%qGS0@%JYbEASEEysG=b-AjJe&-3uQ_7$u9RzbW5)T}U%+*y?oBzfMK zUiV#--m|+Wl0pqqsRR$5Gp=rB6SRDeETQ!i?GQ6eP^%hGGDwU07@5p%(7)z!3`$8* z$#z7~8$wtBh%Ku`Iw$&VDu?rx5X5F4YN*_83jjEwkvjZp=)=+##Jl2`n`?B;$}uk$ zyYpsNZL_BM2p2s-gpeLI=Crf!%)Y%mHaMD~9C6>z${J!fLy1j$yQFy#Y_%aGD@Zt4Inyz@KlsyW zXXC0K^T;_h&3^l*ZO?}fwh3DuhYk%5BMe3~e0+93ByI{_4dT|qRDSW$#vY8C8!83UQ5FPuHu3r2M|8Lsq_?Q@U9==AF1qOqM$IfaOUDcV$O~wKbo5&?2fJ?Nn(_ z;=vLUXj(qNUp3&9+pd@F;D8G^1nmlJq@KQ*_}}AU9!-89pR)gAku1hIYEgW}xD&hr zsPeDRcD(~@e;P& zS{>wh7Ebl6px!9QV>=Qfl!z8TuM)>wW8TobzWw3$tS;a@R-L7zd!XRt`ia_r@eeFB zoBLJI+mq4}#w#S_-0Fwn-Hoo_?>waz>VZUqjcQ~uG_a3|m0<9ud-EI*czc_%Yk0z# zqGFsu)pNY=nQ^voE5nH}Ju^G3C>(GK_}37ii8DQJ;fEZjI8?1&>)8Z<+YP;sU3ZR~*1BcG+V<0OK5ctWE-l_(+ZEcw#miiW2iCrZ^v4|_nq1@AQV#R7{M&!m-Y@oDCPd)JLRSP zGS-J>i;mEJHyH9d*v`;zcU^s*twnIK5o%q!$V(}{8$!^^ZMTDXEzaPlq5t;I*KHs1 zHHVF`N#c2^6dN&z%Sj#stn%>Xs{lZSH#H%y zT2A*T=U&$wJ{vQNSS|&rl$-j9ewtSgl{OMcv=t^8r%@Qc4-O8`hcif6^nSFZM5*zG z$zyF|Kud>=kW#>X*peT{h2rhaBs!LJflTK(dC9GrsD_q8z=N;|`&MbQ96HLj~O5&fK@uX@qsmTAmqXct*^s@2=SB&~5f{{iiih(|`@3QkY zxyH96t#Q?Pl4Lw7h6n*D$=c^rVd`H4wLBrK!b}a~D}FQYrD1*6VKP zRT{u%_N;O?ERgy2(H=91aw$Mkz?=zd&-5fE1k&x4FF-dnvPP^(^{y~Zm zs6vlh>R4J?HLBe%MV0g0I9Eq$95?fq4g0wBPT>Nbfp2Ml;3i{EDr=6n;GZa<8MRCI z&n`i}u7+wanIGC+dvR>jJL~+bhHsp6b^`jbsjva0{WMrDB&<;5W8*~6;mQ`G7jWl9 zjO%rF5Y21B(Z_M*LtA3QH7%1S%W+4Ez%4@wa!O1`Dnkc(@KgS8TKE zInr1Ue%S5e6vO8FA(m;0gnlx^)OYzx;07NRkxzMrFa|+mx9=JA%b$HWCQMAvNcK5A zwS$5zI(bH?$3CY$^!53kEvUX*&~{Og82@~7-rBi*w)^s_mMbo~hn}v^A4ap<{tA)HBulsH{0DOn@M{rD#L`Z~>)Kv+NA%$1X!7;%$f780C|H zDKm8Un!&ny0M(Zn7k~Th<%RyDos~agtIk2%T+nG(h+n*av{nTjBBiOg(#0ui@v!3P zVg7PZui!gz$7R|bz43;dp>g#9W{Ui4o`W{*$=myi*hWLwaYyJn&^KD^*2r+uIe9FN zIZ5rI7(|LYYGu~78`z`@w11q|dg=i$kn!2=VBGi=wd=->1Gj}UB|Y`-StTWQtpw-& zmT7F?&At$T!Q!wqF@k#z`1ipn530=+GKSMdT=0cSH}yj=6-bGliEl&g^Xl24=?dI)z9Mi?P79xN6mG3V7X8m zswFswAB4Q?>RLKBm%r0%MmldDZ5h#S?fhZ+luqpRa+bLm5YrWq_^N8yO7NqChIe!Y;F^jHKL*mSrSzG0?hg^_X9dx_bs-0kr0CgqpKcBl zaa30iwTLE=JAM{hJU-hkDn$ioOkQTV%jWw$FExZjpux;zJbw>~?Y4iC&|0(NK-%wy z{I=Py+Q}iiTf&6o8R@6r{y13`1F73~-^qj%j_da68@-+SEgO(QT@`ZuS-HSlat*U` zkl0|qdH1Ej+-o+2q4(|e&fP9?e@sI^Ekzf_cIlIxgRlPAnn|nQ{$mD6+W3~J7s(>l z@Ru95(0^eT>?8MUks=QW%&)Dx?MW#%AA0r5`p4{>se?l=q=-gg z*bB%R8Uoq%NzL0kJ<5n(j_Y8~;-yiF_>%1bP|BRFy15_Jr|P{+l-54GL@c-wIw_WO z&fsgYzZoHJW7FO{t_vRFsx95HyhLy=Z~)@8tnzOeUQC{GscI3Wp3O}hc|BaX`1S1* zlZOku2jK^5w`8pcSw8z9E;Ei86ptR?Go$5ar+vpV_kMhWei(I5U0yTT1(t)xnEh86 zm+16sF^2olY1(1fG4;p+HsTZlQ_u|+CV`(@P0fS_cfx$W(VKa{W*GS2C_!PaY}1tV zeB-pwDv-^M0xT|K$UW-|qv+_pg#_fdhGIWfI6FIg3_q5yYeC-2=D{$5Y`B#5c8L#Dusw%0}SvA-vtGF@Z&t2G0DPQ!~BnEHO_L%-Y&!?BE8w(8fde1)Mxq`Uc|x zX~ReHC#Pz(Ml=&^{G73qa~+KK1^6hx?4R&#DQNH>ckJ6@)II1s)(cGB{fW2tm2h?9 z9zc~gd~<}o`fJ|}))}(9U(XeGyzPf{zZ)H)VQu{{B9m=!N6Q&~4x7z_gMSvv%*79u zf9j42xl~*POImaoz65dk&mZ+!4XvmEBT0)X9Ddk5)bRYXH5zni(=EJY_u0r9(>o0H zxvARwI^TUpk9f)dKaOZWLRRfj%qLv@t+DV$i-=ur9L&@uPW_n|K?}psu<}Zux9pWa zj9YIu@2K6AN>n_3+fPwg%@DV_jazTqzHQ+v!|<08x3CBcgQ|YX3?qo1L4;53~B&Z<+_m!6?(^22vKfG`$1iM@r@UUyADM4l|edGls(rOpq7KCQHu@a)I1 zSA2oOSqNey&L~5fD+l;>sf}fw-Tp3K5RT)n*OYyeV#*bIE6)xZjyr~Ti}bo18^z!k z$QjS;7-vNxgFYRxrcR)E@^N`o_yS@aAAe=Au>qP2B&#HPEBWl4f`8@p&YYZu!#usi z!)A(xtv?G@4YboyFW!smC+b2jn9)uHoU23e}kntK``(ml+=!%WC1)gp!WWc?pKP|5$(;afglk8Wv z)9#}zQHm)YNNeu+C?Z{9b8Vu5=c5293?5 zSz37fP-BlMQNo}J-FZi~nw0sbiUgERG))OkGVFwIdAHjuZ1m6?-*WFMFBea}Y0;i3 zEl9<)sq|-%H}!4GiTU`xq_Q!f{pE#i z0@2ZDZ(@w!f9>Junsr^?cl`Yj|JURh0PU@rq#0)qxg*Np`RNHE2aWG(em%y}6FPH7 z6oWplY*W8?cJ4%#YDb+c=G%Z;4|-ekvX_bmyzj>E_})U+bw;Q`XI}B$;p$cO+x@8* zAd)#jy0F=0W^hSs6VI6xduW!ie!Ox89mgFcc2XHp)%_l^yU#+%ANGJZ2?t#w(-@xS z604mysGGmiwEWTQn*TK5yNhMdcN1z=^k;dAlEf2Ej*f)=ITi9Z^L74j?55a~{ob31 z-AWtV^<6z}vn8j5%FJ^Miec;QOUpm;_M|haU-GGeOz=0?NrSdzQVeX3ULt#Vc=IR# zCY72ee1&r}lN9{m*u8KGjwyeL?Cqpx=GpF4yhs{Zc}F<$_HDm{-(JyGs>i|AsVrhENv{EoWAKP zw>v8I)#IghCE2_G`I#I5&XXMWvEB03puZb;oEYLm2g5UJ7n>ssqw}6ZeO=?V;@%~8 z6r5KvFl<3(Q!(678h#An(m^i7uSj+6W521#izF9d9ve>@E_^|9s+Ae?l<7nVhb=XO zA3-;T)1*;0CQc@`icqC#B)4}`ErT5}gh`r9GLR{Cr?W*zR~yw5cb1r#+cDR>O%a%D zw6t^CQ>%n&zGiuKyx+Q!Js{QYeJ@rv;2V3iP(g2G^7=vD^xHze0n6MU2eQ5##cuS{ zRDO9X*mUO?Tak87&iSaZgvI2VlXO9A>sL5On_3R>bJ?00`$TBE<3A_SR}1Y=n4@f% zcbpTae|Lw%H1Y6APXrl@>i5DD)GifzPDO~fzGZtv2+4T#7ur9@)6T<=hLn;u#b){s6(Sdgb=|wxSMJ$cglf6#rC8;Kl%^e zLJ!l?hRxs;9V>hxy;2Ol6S?E>dXN_L5eQX<(NqTZkaKtW0+>b;;cN`(PEcJSn?E%1 zv-2jcPvCL+Wt#Gu1WDlq^a1Zs2sW5Y6Ozq&Y?yCRh|5p3hX9?13E8Afsq{BDBY@$G zz(i=m(aVy@7B^v!M`)}DL@2M6Q_X3@Z^J+~eMVUmQ#{-s%c1r-uG=M>i?(8!2M@8_ z>BansShu9sQ+o@JZLCV{Gv5A5AWJ&1ZM&7K+oXJznGtW#(dFf1Cv2#oqx97wbg*g|7E*iROdRRu3EADoq1RZ>FEM@PL4+|VuT?G-I( zD9n`(F4KiFLCxrEo+m&#Fn*UdDgNyr@U7@sj*f^m_=!88lnmJbk>Y6Ot=Q|0&Gvgw z)>NDnezo=ikE&g1Z%L5fvd9Ldw65``3(z%9xIqNA5%c1lF7|9O5R7>0U=@~c@P9LZ93MTCW#nQs|DoxB3JU5 zw?^{EZ!hikj86Z_`|4R>B~)qV-X|6uJ7(tkuFi0$G$J*|PYYZDcFC$ma#M428D{QE ziw4)JT*bM=4Mxnks*>_E`xnST8%Qi7-8V1#c8lnamVgJ%I%ntM&6Xz;>25{HolMgK zC$EZ1A|2b$H@S{6jJxeuzGj5O$#idF8JgK_@}vLM<>l7Mh9#PiQl7|D7I_$T#uFUL zv>}81a<))mn2Fh!b0^9pOI^+y;HTPU-yvYS6tRU!Xpj!^*6sES+~FOW_fF*^Jm-{J%G6ic&?hG?mkc9h0mo2)NWyKzf$gU7QM<0GKM}P+nu5 zGrps_bP)QKLF`=#_w%r3eup63NalO{IZWU{no2h0<`D4Rc8y*hI%d#pTlL>0dp2@4 zUP<)twucNhIQY%4#T<|@B&r(7r~rFz#l)>$<}wPaymUS~NRKQm8(2&h^6*>vXt2dO zPR+#qMBdwp*g?KNB>kFJt+v%}e^lym)e{S3Noov^o7HmRE8OJjb_L8VDP~uZ7ADi%ExWz?Wo&a1!kz!Boc!zWH+AejJI3R4 z_4Pw8j(Ib;SO40ZDr62&iHjnrm zhYdtzBW5GZR(SXB3B&^OkH-BxYYTqTIb|6!PCL2Q$Y?G|mB8B}xsdp7l8RUb%rTj* zt?hGLtc+^`j<<{u_q=j(L`13#=@neIyq{+8g{>rZS?6RX{iDbz33CyvdnBg2a@+6y zrpPOwz2qvs($-w>>*~rTFu#PJ@)YtEP)r0?cQeR;5PP@p!npaUM7BcKFr6?XwG<`skH61&>xrpU9i@>n@-W2kOwxl_repCqew=b)FLF~ zcA^7!HHzbvaCX$~sLIakO)@~}w;$`6xPDu^Kz-Qj^F7f#99KH1>$~Q6Xk)X32y;k$ z((~wQbd@_Mkl))$Z0Y7x{`4nT#XLyjK8Hd)L;gTN7)nC{1GpReap|`Ftb-eV1_DMv zDCQ%#lMu5kM^L>Tm2I;l5W3>1i6l+FlLT6($S7I@#lU>>#rc3FNWzkQTmA`J%68g8 zuCQwG?LWW8g^4c~pYK_;`jn6y*%H3T!arx6MFkZep@n6-Y8|MLsMwt=F=p0S+u$`9 z$Xm97*QI@^oF(wiyv-pFaT56@65A4AfAdq;jx0kgk(6q6Jj5RgtCv-3=aZ`99!RPpH1rCO=aA{j5})A!~mM! zu4S0!yDQp+Ns{388==isuzoygZfM~${Zeblf>=#!U86|Y+yZqEa)xq5LM0vXrCpsg znk$C*MD7d51$0)5WZA?S%0zp}0j9gEA-ohs>>B68=HIOY?A(mi_?CkHu)HgRbhiqq(vR>A0e?QlzY}oH?i7Lu_ z7*q8qam@+O=aX#@bijaT0#|PMow{@HXs8#6?XbyXi(h4qOb%)4 zM0?5Y;JIt>$X`JairXHL9k?%K6ywyg*~qd$Q9$wx{TJxH8Bc;YAt`z4Ou^qY^gbGK z+owUO)HvtPH%c{amn66giHVY(@r@zaTsB5KK(ltsVh+2VB~1J(o9we*=lij*z688P zP(Q06UKP#m%Htq2aKqOBVB!|RwxVGZBP0ypFePj-5BNjlEwTN8r5_%&zuP6Eq@Nm4DUA0a~9V0v$2fHShTA*CVQXQf|=>94wS zR#`em4SOK)xZz4fDhg&;GLEe>)zicXUAvXT2GE(b6Fl$*MVa+oHLZVn-sp^Jj59V0 zbTjLE^6#}X^f*#k#f^5ugs_8SE{@RCQBiR+!YFkg0a)YaSt$gChZgAqOlTm3t}+PW zz=B)`m|HqEs%TM683X|!FVB?V(SRC5zA1@r?gt8KJMHx@rUYi|jaH=VGVaCa&@jq- zJ79^3jQ}e1+1(QjYy#ZDlmk8-9*bhIQ-Q1{_`3DaC(m>z8B3jWiSLcpRxW>XX>mrX zMt{o)jbyGYGL+jzS?V)W)3wqn?z2`l*7E?s3_S?FQm*mj`jS4;tV)y6J>8Pi^X1X$ z9*3NtM?Oi36$&Jkf-zIJCl$RKj86C+Zv#E0Asdbe5?W8?jz7Fmx23FuQNf(~aBg#1 zF=%U6Eo|8Escn$~uk`4vp;LQvQo~zi-Yo)x@=kv~zcg1gSsn-5p$=?kCyQFxt0+#%TrvBr5)q3IznH&QO9?g z+Xhcs=Mc?#pT!r22^W8Vd0}plwtqho#ptPc>bOp5KRuXawz&)vF$ulK_3&$9PeP1B zaGX(a#HqL$&V14j49iJuRa@zU0L_=nVFyn)_LP*AKuOl+2-}=6Z1_RIM&9?m8X79* zKf$(OfEATqX*C2g?mE1ckn>ihn>_aO$m{1yMpF#(Kt&D!B`m!;1PaxLe@78inKEtc zuW93M+YYA$TX)Xw5SqHbv=;5?vc*6@h=#8p5MV7UnN3E3Zt~;20Ac))MS1jZ1dMZ z4zHW*xxnK>v&_cMGPD?>bEu^9Mx6SS)VVhGYH`t7(-z`#(0>r@HBs=8q+a+~LfD%6 zc7XSFI6>zY2Uw*9e;P*?qg<2^5oVUY0Nd%t(k-hdc~+=Hci!=AX%S8^4w4262J+#6 z#8xq|-X|iHVSN>jKV*L(l)Q-SW2n#eO52zf?`CG!gA_auGG_U)BP#!l327Mza#W6$E>UF6j&v+wwitfU(5x#5f3C9brP2; zMGf9r9n&BFK9|rq{3--*-tvBLf>|t~MICki{C`j?=pb;j1;@HOWD%-_cE_GcTM&XE z@W)52*t$OyFWzhFXJ)n?6`-0C1!GTF=)t|bR6QbdM^$fcbFjYP=n5YdqL*_oJS$y* zY7Hb#+U4|3w`i}3oQ!QY?)1pq^vm&`9@mS3U8aj`$lcR44v-ADu?`OUSyxOj=-%-D zqMIKXZ6Q`333F~U@4Igde*En~DF9Eoh05;H)=_osm|E@RIP^<=dqOc5dcovaGmF=97Q{^4V-%YH|KxD`EVx=P{+_c&0+V&MP8!R~6q z*ns7)U%w8sQ2=cn}wxlX`x z)X4WdtXo7Pnsp+>0zhTaQMiZ*SRD)B?DD4yWMkHs>$k@p8yO7)eSX7zjjxct2wRun zh(j6&2Z^#~^BE%Mzm7}|0D{l4j^nZvda)s$C2#`oUiqR`ZWe=1hA1u8v z`bgn^eB62^H>YIIZ%sF$zmMc!#$WhBu^PYh^?Raoqh$uKt*#9Epwi4PaRVLQtfGmLI zz(r?{q8<<+HjIbkGCiwc0i?iaG)Kt9j##h5OuuSrJcO3*NuXbqB8$9)~Z^3`{(naR*HldOSUVI?)$YUpMj!!erM_a$LwF9KA4@|-Bs#yX(0@lOy&&HT+;^VYq$MB39<2k$4lVWCvEHt69 z2w9kGJKfWiC`qf>nIYPf#q1sI2SjYL&!3ZU_iW_Y;vBPi#_NvHd&cW6&((zL8lGPG zoE8?$T|7;I`}_`)`4XTsM{OKgwQbw>)X;;P+)_t2HmV$NKI-U` zd}vnske8Z&3vd|fljoO(|-*ZtAsGdW+2 z8n|BUHiq2MqJp=R=`}4%}TgjIq!GF5^M6!^qg7!WZwMxguBz^IGwX z2!DR-sSRO9(l&sGhj-DHi!vQI$P(UBiAaa@sUQqs--+50gZ-hK1CbX;&E2t^0w1Wr z=(1BbmA;~YXd?!(jPv?U4{OMHfW)?y^NxgHifchlg4cG`mTpBnfra>qPc=QjeIXsz z(Km6qE?S!rW9XIw_wZ}%I;Zf%yraGz^2JdG4nB-lS05S^XiTx~rpU?u{`>K6Z!eZa zB4C5;jTC>WEme{(q6L2hRZxu0P&V)BLqmdJ)%!U$Xg+U_dj9I!L;b_r&R=RE@N!_V27*1N^b^%oD$26NfRJiAA@M)n_*45NN>=Rus|8lgYLtM|T7 zW?2l^AyB#FQT8RYz8$gi@;XYUbDYxjrtG^IARSaB*XA5;Ef1 zT7cW1X7tH-gL{CAY!iN8FkoVK7iqV$aAM-xKV1Be0eesRe3nRYP7@Qh?@(J@Ps4gg zLZhtC(CY4?)AWMAO;tX|(=$zMxm^NOQ#YrlBYO^G_+VGzxazEdZ+;&mcw~e;Gosi< z5Y`O7VW5eQRk-zX12QL}#4tIaC8!aH&DFkV8L+20!L8kK`!-R8_}^FRxUaP%2mXku zFT~;|#~t&DI%uNB+t2^Kn}s%xmV)rS(3%OX!C<hWeauh zqd+@r!M`k-5fayei^KQ(AiO!RG$D!>Ev(5ugPV1|?_2&jvz+%|61pI9#bULd38*uI@blYkFqo+=S~?8mhkoI<{^TppnrUJxZs_ z=g9#y`p$peLU&8=kz1VA+ESo-U5O{?KcF#?eyHcRVx7js^ji&f7KV>1cey?3!-YG{ zn!5fTxM9sU<87H3-x0fTAIv^%FxKAo39Mn-`3Ph*D3yKw7dcxlDXeoy^g>ZhRIzM6 z2|yI@c3J57^p`Bjot_?DH{wj@s!)TpAaLS8G)xUr9a}vDezTUo-Ey)JLl>xltX8rm z+sq&yUP3*v&OWsDRCLc4oolwEzfvvTy@kDC=%UTg=}~A%LEcLMU}d3U#zbF&yJ@D3 z0%*L-WJJc;M28KIV&PjqY!2<)(c zRMl5<;E=aaBQ@RJF*(VIi;Efi)DZ+BGchr$3v*Wv&Ms*Q&IPUqlH+S_Y401F>2TYWm~%-~Rhow7c0yro*WVpQf9?iAVQwm)pi(s|~9F z<=Vb)j@fY;1Rh>}E-zlYl=gZGdeulURz+6LPBY9ByT8aDCGs>b0=zJ*x49B0p&Ii7 zEhl-3p#Q8$NZyk9<%bl{+HsjpIuhO6-EPurz0Se}I?CUiP_&&IK4h3W z_2$hvn%dB}ds3NNBL1@9&y?UE{aXE6J@g8e9PMuhwI!52w>X1bWzV(!%?ka$TMT z{8Ip1Ps$u~G%ruexX=#@G`N;Y`osxx;qhbajF~-o4#=+sMinocKy`9#zfBU!%(^g`5 zseW{HW|HCUMxM%p$~F5D-#?#!-Je4O7)GR7X7o-C2dp-#s*oiGMs~wUf3h;YFm?B8 zfwG9>`#s53=&i$J_hH2Ox+cPac5oyEBPXefiH9M3)wuPUMe*GeMsdm)HYC&Fk-#2P zJMZ| zQ9{T!@NxpQV>0y!+z7_Tf@f-(U=TT}Njl)D^R|a^_l17VJndi&%IaCy(Vs-7qt9^( z;!GAcH^+Z!T6*RG-c+NB4@1;;@8Jhz0_bbwjU}91^)kUI@p%uDsfUGx1PJAc90f9# zo~+6TXypPqW1}@Q3aYVILoAFaka-)8>ZMan^qrQIOV|+-`92k#+%LL+q zXe942j_PA>3g+We1`u)cKjObi~A7jycODWH`yfl%2FP2&N}>PLHikPi>N zpzUb?_@SCNnBbqSp&BA%SY>bm zc=y8|Ui~1@asMu}nmqMh9E6b$d%z1z6QYW+&K&p_^g&0da+^!y^w599G=shZ9k;Zf z(oCWly<6sbzg!+4T1XsA&>c@AS2UL8Yo(N+Yym9zbFMZuqqLGv-0`2cf#^8FaFdQN zoim@DVN-g(CsM2h-DjcoaGK0rTz}KgbEf4=Tm5SMbIk8F-!6u76X$vD-b|=Jq*-+6 z^nx`bA=y3}+d_nmIzr;*iOYhG=AZ^57AO9xV@0>YV@-KAXv5v>Uo+8omo^r4KDuBB zoRXO|R^F1jXMpi7H7ZyFtl2{H*gVuCzf}waieYmSSSe~%+WZd4D}W~`K3FAC6k;PF zie6)(9*EjER%>Q@wtxEiuw8FN>pMzFnrS&Eg_;Pshuvl{HQWO%{6IFxAFo;judds* zsU<7h^{&2|rcm^2q35d0#*bZ)`CLH1ulr#QDp;-V^YZv{>&?n)vd1Mu8A9-Vh{C?& zv#FZ7UVYc~u5wd!7E_c;6Sg}lh7*zl2tSmwAY!rIQBtYYc9EV-WL-ZgHAKD6q%rG* zmBU63mzs?kYz;+uA(0RKz{&f%_A(0A^PFLt=)uIv)1P=W^LtjK(YXBThM6;o*`f-KAam(fab|(&*d*8<_?zplyWQZ&h$85Y3mV>pR^3457je-^2>-;{Y`x19C0Hc=dOFUTPn z%v{>J(@%3S<4G2`XGF7zGu|k8BiCqc{y;Ic+jOCFbSD`cfSN6HIB&Di$VhtqH^G$n%4=lJ4+ znYQ!qdS=Od>^9U3Y(d`Rc^n|b7DnwP zl#mCIBu(lTpp(iJ&x{*izqYsUbbzaN_S2_G$&HGN`TqOLhEtF_RoFYJQ}kj|T_h)u z1oL<)D^SUl^_19x>;pT8wtmrn{A+5k;scx$lSEguk9E)2Spd!eL0^yn z8LnJ}H|5c6B*e8SU$lTN{Up|%mpJ#uwH)8Gqz*j@7$M}RfI@O9I>OdFOb{!bh3XuH zM$aA}x-dG~XPPwgvt`xu?m?RUHf^~zN~y1hNMV|AF35qq_;_JKDU*dlhS|ryzP`)# zc^heWL1mAdH0nHlx0vty&y#;Y)qcYlMTv=tWR;tF@-^5>Tzs<#WBCZ{xt-6~S{G+1 zRSpL6sf){qeK}hjOo-gr`oO@Pm;e5IWl|AqfhsX(na?q1<+n2)!T-&aPfjXntx(`X z{XQAO$hv!wZUrBR!+$=Un_#39=@{Akul=D1jZ_ttq6bDsMvwazCTsmi$bz)AW67s0 z@Io@38tI_P{Oj)z)gWQ=iOR%4D8ND6{IhiY!*D6(#(;XzhbSDJVgpyy0s$XDet{zZ zxcG!O3@fNc`B_$`a7K5p_zq3|)>TlVV`47Xp|s$k2TCqNG1bWj_B*@Zxf4g@Vem|A zky*BCJP!-es{b=nwSw9~P3Kn8(8<&ai6IoNzMY`^aJQss>&qd&tU6hU<|A;SXE+nx#^w zX=4}WD1o`-g?Ha&|JAk!EB00oh&w`!fBD51e_u2s;e}4WW7#f_B?L zd8z6D$2z-HlFRHK?CYD9$sQ?fa)g@uu7FPO(Lt;VfQ}R8vX3Rtn3l8uwwth<&-%h^ zZM|_L9RE3s<85^3-MQvhA&m1@`ZW~v)PpF0jfq^`28t;+9;7L@PxRZXN=|Lt?v~;Q zhxRh(iH9(J!13Y-&n8GOC`?#`i^zHkrLugaWjH~eWOxX^nSj9$N(7yCbZh&TSU&3O9fPoF*^ zKvWF=Q(Xi2)aVOoMMbzOVZ_A+7A8`J0Mup2#|_pf2q#qukWdd8RT!NfxNT4b2c^=)gh!Q1D!EoZv15D`~`o|xC96a3<5f@3K z7#igPFWhG=`|nVnkLtpfy`TD)xAuwlm_CLR#E;Q(tsF8MvN}?O7sLlwnG&e-Rokne zkYK@m2mk}%xXhu-m-tv63xHb?MBK=sfQt9DycCp%*&2~%7X*X+xx&h9S2+Kb499F| z0rR#px)`M@5LoW+FFsPAet^45CQO5$>!Qhm3RE| z>OEOhL(d0P8eHfkdN2Ru-)AxoXtSYmTo&4&keo5}ddRZu;vpmD9#fn? z*9mP)1U|C2WPLU!i|H1SRjIDsLZfnvhpn|of=8UZiTIZ?eH4#fUQR2pGG;`bcN@H1 zKh#q9i(s}zq@*19^z*juhnkOU^o);Fv9(Dl|M zJ@r3BeUkzb_oo8wk$09N6k@ur-|izWQ4CrT>4}V?p}?~d=4P&NZ5JW;M@Q z>}*m^rfKSgR3j}$q`i}K6S3;WZMUC8Qwy=tkiES86PFuYGY^i$(q6{i4F#Noj*gES zTi%}u3#)hDKRgsz>#w1N?9KI`>-g(`7W#N!zyA$C6*;H1u&@Ex@~I{1sSPk$CZE0` z@YXT@^fTcWHWIea72|emOd%=&H=*DYHICV0*d9RZI{YGKmC*jlWn5Od*JARabvp;% zzV(#|SQc)$E%^deT?G*E&-g-;;d;2%8&*!QncI-)tF4MTwFS(h)?l;N#P6F(4oL(kBkh( zW$-gl9fuDEG8oFB<8`nh%#89O=m|Lyk17rOjFp}c6*Js?DmSZR|KGKUs~7QSyOpuP)}RWaXTM_(HjaL2`R~7fJIIAZ zj`#%QPMkMc2#Gk`Q-?1+bDBtk7AWx-0IWrcs1J68CAag4mSafeke$VX<7RXbEuA+3 zRkPG(M}F9<0Bu#xB}OF59J$``S& zDEC171Z@Ur`C+t19RfPcA|v;WI&4!&mb(Y6bHYiTUPm#nf`!A4w`pdI5$*OjtI|&h z(b=RCp5I9O%Skau4!$e{_@T8ItY#MHIQi(_cI!c6NO3etDwI1Zt@wa19Z_5<`aml< zLGT3?SRy*|DiF#`kLVo{lJ!7`qed={s*-rruAb?oXnI^+;CeT!KmApMAYXp{YUrGh zQU@)!oeA#ZD~a*(yEZF;$!n5GY+DV}Vi*R`AQcw%8)Wz@!6H&_>K2bep))EN)aB`& zIk3+6tmV6i$Qm_5Cu4xrt;;$M7F(wh9&Q=h4Fg)~H%tAr}KooDI`bK8d?{_qsM>;fIHsLT@z%vY$2 zp!JP+HtEknrpgzFww1}q6#gtUga}}Rgy0gxTMxbEis7U{NEe`aYh8?6F0^e>6EYx@ zU-UC1V8_Bk&ipjc;W@_)nkk=MX2P+sbG;6HBO|lab=&=pltJcwBv)qY-#t(Ba+?*g zh97i>V{8%_?*q+CR@uD0=wORqwJH;b4qqUT?Je-Ur$lJeGc%z)v4U7`nX6qQWI@D= zV16hg4Eiy};*#j@_LHY;NMfe?W>$+3WdLlzjxm7w==%6CIWHoXtgmYu=T;c)J{Y9%~r6fj4c-yrO`@0)H?C-9PH$?y8|3`?Ccvr4C^U| zM+nV_yZ48HKmurQCvTFtN~vtm!&aO#hXZ>i=b|Nr;at0n7vFx0GbMWBY66+2nwMvip%U(*Uyxw zFMkV0Md&&f-zxc_$tk6=wbix;)p$y#X){ZqkrL%RS-?{m;^{&3ldD3{MeQ4T7PICS z>1ZS31lqFh1bl`e;3^L18->E&K~Uq-=*vU214o7F*2(6eyDxk(qQJY4I@Zd2^`F{l z!yO}c9KyPCqKs2dFc^LGDMl03)qS5=MR_%TSUl_<<;P+&e<*|C(g!Q=@Dhb+(AWjk zNLI#%s0(6^F^t=53W&iG`HzL@bsDykZe9seq24#Al0&tj_rN83o-cLj8zw;X3^+9TAl6_B6&9ifGYorpN^?~Xlk45^P zZ@%-x(rb(Y}yUli!F1+Fz`_kK#zGvEvos}i2_nQ zRtSA+`E|ogxed2h?+hOoE)i);oP5APZSoR&WN$TDa4F^dUF5Xuhqa0At+q8csWLS zGfph0p(ke7GCQ5GWP=|G2HgI6Q3$-n%j&!4e*g2Wx*B9yGtR5Q#S(!Av!=am?%oQE z$Ne=GLW2NpNal73us%HnPozSaocE{!4+zX@aM^s4B#w$k`Se`&U58w=wTQ(S`+IPl zK27l7e>~A6w*zyRmCz$RF>Y;e#NqWy`S(9o8Vzkkc(_D33?2L4!?t;TyXQ z0O0)aYG}OKy(pmm|24d_0y|p4==qATf1-|bbp?8Hx7dtjMpf9vDgbt-8aGe)*s^pemO*}#h!}^=kHXs1IOzHFVv}d= zpoZ`bqr+&lI%7IG+!&2E8l$YXkI+VXs)Q?SJ}HRVh1Y4-f@|sH)smqV_SE*FVo$hl zRLP(I7A;!EjE2;?`9{6l!(}G02}}>p z9CY%HyXF(lba%$D!WAms8*(=neXAVVR7fA7X%uivqkjPJT!*Q9D3cDHtjlUWRnsI9 z1e#(=G!9B?y##>Zq7tF)V-(>&YCTB>hNEChJ(RC@j>-eKBY9J{=C1i4BTvi2k%T6+ z4)ZHWP+zoStY>75bYE~kr=1RM7K&EL<_80JW45j27G5)em|5pO*Gu-b+YTEd?PV&y zbS>#7e(9S_xl1|+yOh=*0NgHRIthf0|AB`W3*=zv9hpx?jFBHzi!!PWLqg4#+B|*; z4fQ-i$iiYkBgx+O-S*ZqGR~Q!r`DxW(WG!NN|MeTtf^p7&d>}&N?Niz4-S|<5d~rB za|$kIDyVlklvK$$X!haAoso-RrS@^!SD;n#pagg2-%j6q(M|;v9v*o@+z$Rysl`wB zmOm+YOZw-Zje(?_kJl*&gU5G2TVwTl*Hv$TV<|6Jw%l@Q$e#!_|7!FuFalgTQ5isH z>YtxmS3HcUHgm0AvO5$brg+LNxM}EyRDWG&m(1YM-b2v8lr-jh^Q)Mw`}bizAF`{u zu$9docy|85lWk7c0LX%lbFN_oCnswlfEcazV3faKcuuYv(Sd> zP2Gmq>C(bwfqS#0tJm!hFNZ;EH_tDnU9w7*DDEtE$OZxWwV3h%ARdNVUAi$3PL%aO~@nxXy!lRd8 zAKI=D&cz8OXXlJ@0@A0>F_`}I&#R(UxCyMMv4I&Qzu(lDjs81fDBlr<#@c2&t zRvAGtLY_~@-JKdWpFlTi$JXt;3-eV$ zWoUP^zK9|GE0VG%9ct4sVfyq8)v)H;K6kpdeU0x@`VnBK35Jx?Y98ZI%d~|GD!`Bun1`#|(G`2b(^!Ek?W%*MdRAvw3Rsk7 z>K1|;!w^+Z>a#x28wwq=zo0=w#v!4)MM{dMbA;+tBf|E_==#d{ zsAa?VLI7u)3e4LQd$^4`bJc*(qz0RQkG!dTrqFfRKe4HEa+X{PsC{ z63q@cp}#z@Hu>qV+4pm?I#q8>0cMsSd=FlW$Wo<2KnRq*KycpE4ONwoAA?6HR0}@N z)u1E*F>GElbDaqh&581 zGNqq(e`s#iJfp3hnmj6%mML-H9nULQlMWBR?cEcmdF=dh+M^Q4TA+7%hmMYpLTHiC zPr5=-%-1i4HDoA(_B6Bn^<}V|9CG5;Bk-kmeKF;B7t$n7!01-sr2QmB;D2TJit4)4 z&BfQB!9XEQZcJnXEZ4OCh{{FuJy@{UhWHQ*ga`d@w-$RTGF`~naUs)`=eN`k>HjYAqr%ms-T88l9&Zh`b zGN^fdN#}7_od}NSt!)UCuVSGdsB17sI#BpIMeBLKb#t(<>0W$zzmLps4!iPs>R?KxW2k zc|2~J{5|p|jM0PkDpRC!PhbFKQu*$84_Bsd3m!47GdLU)8VY^T6kL(_&K9IjKA$qa zlPNwY^>o;_dGfbHDG^%rIWr@+9V^W24EY(QPXSFH>9X*^i6b_%6;5~XO!+!X!0b!` zpAOa?@F}73GW2DbzI-qOgD8@no%ZDg68zP>&SR(r(Bj{OjDs8pTo}*<0C}mYk<$qQ z_cr6h>3E%V3W~y;-48G`N~+=H6Za?xK_T{7J(gHb1v?zTC*;E9mcXT@gZnYHpOE{z zre+Out~Cdrz9&~s4*X=UDwabSBNP}6hwu2vE6DU0eGJ~{izPD<*X5Wx^f0J`P%M2e zYp{RDW8?s0T$FLb>(Vdal#lX$7}A2RG!1JBN&rjd<>&PCPqWQyNS-H6-BIRdYWvNo zQG|y-kAdCYflvZ&CQcgK{oz0#`ypdm3wk=^L`sBw0x%?Zw|Qgg^sj;L0oE$IbM*CS zW$OPoRUg6lRz*iE$f@Gd(g4GsE@cx?-r{T?D1jhH zUKlnzk8-iP9u<8U!q+d^Eoy2xoulxIXyfI)XM2w<``771j0CbJXnsWdB?!r@r(Pj2 zffL0uyXRfkPC#0By7bs3E{)g1y>vjBMwqg2N25@+h%d;bcNTa{_p;vhDha2TA|zPf zkWC=EGf3|eQaYq;V9Au47!xy$rFE%2@e|BCm`U_Q+QAj3{Ycsvw8AmIq^hc_0X`hz zQ}-i)xeoSg5HUo>%JKraaQ^De>!IqY&`zw<^YQhfBx%CM(c$H+Xi6HL^ZCoXiZZ@z z$a+_Y#g$&PY?%~lu-$Ne;8ie@IZyEmiS*4H53=6<5zDnLK?e<=?wcCEciXMm?6~A|MOkYS-VGYk3DxQx zsd9{jQMaoRckENUjU!BWiWx#tmuPYEE|sdFc6tzplG_*8Y~3GH;U3g1>UbWwyGPi% zw8mT7y*pPuM`G&6NfJ}qN1B2T7GSd)cf7LjsD$5LPfxdAl#wGzzf|9g{$Q`Q_1PT@ zxdsynE~_0Qg@yu5M))H$)9dNQ2Va8IO(y8Vz8i?MaR&`R@?v-G<|ikv&J5U~`no0K z!=u0YGuC*n#a(O!Eax3R9yNGn0av$NgJp^HL?X)lhneBR0_06s$WPsp7ZcdtbKrjH zlhGS+hNULz0d}-hLk{bLl>0!X^N7UQvfwoInT}R~oau(PJi)eBw=AhYsr)ZH6vkj6=Y*P_^ptU&m=yF9w1F~3QtZyU zLIaR>uIvsq3>#lXoE3yGj`lEtIS?8j?>ZT)B?fvA5SMlk>b^A$^J@U`^Te=3OC-;% zeBTwq`q$kkfDCc=Pwq4E-B?cT~r|9v>f%wqg37 z%-n3b^u!cU<^@?wf*(`Nk?3@?r@FsH6}hAu+JL(`*QwThs87UJB%L*Z=2si)RMW7Z z8&rTap`)Ur3cc8heLh)rNK*~|9eFPM{XiU0=)f_ry0S9EX;CQS+FOvY7g!dA#gd*| z9H5`%Na!2w!emMROdsiC5km;2HICS=F5oDuv^nznn)Ye#$3Ku7SkJcysmOz2XvF3P z*p1K|(NpK13kwI)tA)AVeO(0Qm-z$+Z4zQOs44n4O~ia0OX7?aV_;J9N6Dw-{8$FhJ`R_)6jOfc;76w_PPf2CvmE#|kXVTQ zQ?!z00D*~cZFU>)2wd4`Hc~{Z)6}5#%j-PvtTd6BmE%QPSO9<|G%F*UI$pha7#?;2 zD}kn6QZi(HzL@-gX;TN^oWk15N%&3FmqjcENdBT#{pcQC+ct+R4sG>FVGz6B|b zGfuOQQ^7^00K2Z~!)`(buoL*6asbC?L5-?KjPravD(_qjcNUs@fH?+DQ*$6iE!Gx3Jbr=c z%NP{iZtoBhicvDUsH&>U^#)YhW^in^eLG(LL+=bpXbR+8q2aPp*i$8?&}cbri!YX? zau4n&-POQv;gU03`A$biXN7ZXY;{?5s>Y}S{7`bR?sfY>pFoV2PcZmn|kZhQpGW~d*1skQ8xXg1t306q^L z)_(}#gOjsQuQj77+8YCFZ=)WBuv_qOdx{BcZMt#`J2Q3P zL(GrX8L`NnYIH`Q0>gUWjCRG2f0YEGe8Iy>2z9(#um>Ergah5NWzOIAY$rva%HboC zId?cc*1)O6&^&i&Zm;+`y+UM6sPkO6-PtMd`m*AEGE!*aUZvRd&4xfj3b_M@flTS; zksSyga&<7T`qme1?6?*AAhoICuFym?qi{Y~WYUUXuxR;nB$YpUGlxgZ#7|>2+tNf`bxXFR;ha8HM5?cA z3FO?M0)4aE1>E|@LQq5J4lToB%r~K)?K(!pBV08jL`TqT~ns-$jFx)q=ePf zRS1|lzX5X%NZ^Q1m1>6{K{77IvV5aRmh&Jq-CVlb9z-kaU&jl%=;pUs_@@X1*%{lU zMev=;No%p+6NUuwH8@WPSIz&l-i4c!fzU=U3`2m$@H}X@gQnAcR%+3TMedze)&!Qs zN*8wSEb?I}@9vy&Wros345diq9RH<;$wD+Kx>tRt-D-kK0*?Alpp)J1x*ox@)2;Y+ zqkbh-@-l`zHs`IKQ_>BfhRaP!Bu>K5?lb*3vWz`7Vi2dpX!0X{6Lp<*58$_2_b-Z` z@|J$Ax?NSyq)JkF%{NUSE5QnKQTz0j-ou2fr|$*T7Y&4o$V#vUt1G{6X=yKkT6h3= z$YR&j`)a0w-`UkWM;?(5+gn>}RtKMQrZF||& zP#QnNAo3CRFvtvEJ45`8+oHqm%016H^-Kft7|2l7!iB2ofq(u9a&*jxA0%K1x+iD< z{Qkj{_6^sJ41i!5Rraop7uFk&)YFRgaQtsJ*}ujRldN+Y1q{ghvYOlV{&PPHG6#zn zJho=6Z$*IlD_{R?ac{`l`M)tOzUx7-w%Ot7Y6WS~uFjMy>W~N?GTvVBuEh}J|6Ob% zgC^XV>E6A^^YS|U+E@wf#KxDL_Rv}c%t|L>R~~UVon<856Z)0W&IHlrxO$xEOgN$~ zV$^;oW{&*1`{wc;b8(qJ>H4Jtuk0rfU*7Iz>IP^(s9c(ytY30f83E8KnpR^@m|OFw z5`KFR;4F3vqM1Rd!~Kp<5+%|L@2{nyku5G+>D_ot9FJW~|8Vaj6YjvStW>LdQR>9r zY_C?92`&RRSJV!|jR;1V-h#>4X5Q|YQ~q=1T;ksy4<98jzP`J@c)GdyW#SM;3{iof z;F%^eQ@3l1&XuxD8XcUSy>@ljjtJsxfmZ9A6?4f=8?G1NqO3zmV=qqP*ang`h^^jdY443bh%K`-nIIo1ge zElrs^fl}WP^~pYl+QAD0WKJM$ri%F*Ipuu**EnCWLuMZ?2L}vX3cjQ5?|h8qWBz`~poFr`>btyvaIo!e z$T;W;Wt*d*Trp~sR_}P))>i6glsP;+{G5!x4s*@N@mKV{$8*oa53k_x-EuJC?+ZJ9 zj~1Z)i1gu)Eb}&v-P0t!bzc8(CpxbwY`5G8UI$ur3Jyj2x&a+wKUQuVnX*11>+(24bPyO;mtz9_?NQaCHfZn?!y-YQr1qZxyaZTJFk`{AU2kjAqS(m<}K+ zHh4Z*aLGlf(>AO3Out)6jd-D#Q8+|Ea^Kg}E<~M93d1Lv3SU?Ha*x*GBx7e6*8Qml zUXa?CHZHCo7_f{xZS>W~3ln{4Qx8)>WY@!rrqU5PV@lmrr~MK=t4W?!3>-1ku?hXN z+ClXC_a6 z4@(5m#(fF`ysZ)vuZ3f8>!#z>0dJl-SXi{GFocuOgAkY-8e7k^2Ua0k z4|JaRx-gwC|A`T9d-Kbi2{0bg`D7;q$`!?kcb+l;wP6lJmiBd`o6?f%hIoV&oF z+(Wi~pg4o=q1O@qUkOb+VN-SZZ ziJE|G5KoytvQG*jbksjqVFaUT;Lf7xax3KPXjt_ZV(-y4GX`u>GL9{yu!aq>4wb1N zKK}mtW9ac)#U|m|peH*4+d?~l7WFPz6FglLtDD7gR_;S{=3+6RZs0GX9}0GE*voBC z-^ckC7kX?VmR#et7fobBf;8ID$mDIJihRfY~FDQIUTtfUJMm9D?1f zw#K$AOn;4Ay$S2MRgqMoYwXJOxDJzr%sc|f?A77xku9*-gGD;5!3It_*mVO1fT2u= z?}|p#?npkZf^q}I8is3hLhTxtB?$Hl1C&I``03~1o6~5liB?}PGX9FtA>d;q#X_)K z_IRyL9rw82E3*NJaw%UOcXlUUR8)sd6LhoT;=}Tl8(4DS`=s$l1P}7>sC>DTFhQqv zKs3gac{k?dcW*4*AEDGUw#w7s46!zw{vqavCkB!@E`+wBjvkg^#!s*RlJi{UP`+NyZRv(hhXmX2(>cx#Utwd!M+ zESv~bFV~U_QGewF8b|i}5y=M9ka`0sbRLDmP5k(GS0!}Y5wexV&<)}1shwefIM!ME z$k~Nnm^*L@*qkJWGv6=LUEx+$mVUc^!#si|52skx!v>dIM-HX+t+zTKm1XJmW@?DZlO*kle|}!PiXp_0~gP;Vqub4G< z-2n0GCA?b6f>Yv-m>*)`;W(m- zT7_uPz(MUN&2*rU6YdDH|K6tL_-ogYZBdFMe@3uDMX!Wk@PRIx-~KXU{m17$3Q zSBsQ7Vtd!YcfdvvN(y7?SG0Sfq(4W+fNp!|}TFYf03 z@X>)uueiMdqIU}69H5=ZKYaKDXg09A>zYo62MK9!x3?XYo~dqppWGsqN{x_(#qq?y z|EnI3DWimP{XUJQoB=lZ5-A~dx6j+bmi0v%AD9i`$fiI$(JWYWnME!qf05f7j>Opj zS%Lge*E3z|=X#(!m>^M(O%BBA9Dff%#j|jwDKwx*YKn&}`re5qUp2Bfr4Nmd zWU1wR+k!~IToC-k{-?1ri!kwiSM=6(4SD^DO~T>Vo|P&cvXC<#q2k0t1+^X4%2XAn ze27n`HU~9;3U9w}qaH&*p`bDV3z3Z|Y=dtGd|>*xL9BE`U1K%)^0=N5wYgKs2-^;d zt+R@op|sefaO>91tPc3-%W%E2jIBLXrax+<7!@Dbpc>B6I)Iz&#@kzC6F8rfk=)HP zH}ClT>A&9cxBZ!dJ`1pnBtAZZB_{S-aLYpjw2wE})WM3egp%v0r?)FKfC)Z`l0zQ` z7w>v~80^gHsp^n7oDQP%sS@X`q_ec^MuizYJBwDV)KgLO1VscKV82l4I(oV#mwtW% z(WhC)6P_qo2W_RUw&~VzI)TG`%Z4i*9k;=`_?dKO*U;p^U%>WUT9+1-VF8}M8RIjH zp*<5x;*!AZcBlpozO?B$;BM^MLq<-_f?96@MzC*(1Ozg|SnhPV=DQq|m}thZ3QU}z zv>N*%B!VNbtv}u@qHrLh64>yw^gbt=#~%K%{^=8Q&Phtu=k`!x zQ27AAb3b9?cuOEE!r`4E^C>USAWZA{&z2#n78mQE{#DxW=ipDK-)B};2`48BgrpyS zcy5nXor-C^Y3jig5Y}g70IpNHkJbx)pD23%i6*vR@tZrC9=8a?Qp#md2RCmKq+a{i z#_{L5t%C*FQxKvpQR2?h3JmnWGVz1(w_0fpK)=TL(k^V9A~YZsH8kAVEdon39Lj_t$O{Nd+zhoc zf=}me_KCKog}#b(_a|D7j0Wa`rl@bA)S_Bgo1ApKMQ$eiS)E^4AaSSTh&Rkn zZ(qZKtE0(~9YDj>icc4S{Se*CPu#<7>tT^qMr=o*=YOhJ&>v(Tmfx{ zD|z7()e^XZyYfqdnS0dIY^2%J-STfn{=+P~J+v$_+Hv%&Rirk*(qnKS4v)V{xzt+g z*&U2)z4&HeK2oF{0_V~3%G&%rQN4KK+APO&jo0V8oXKHKr<+@yo|Of#+7?@jlIx0W zc*BMiF7$z_a|VEe{W$~;tgA6@GYs>R5aNwUs2s6MM7L2N-FL4h`iA40+;(vMO$=ML zJPq0lprV4z5DF;f=i$vv*akUhCX+gNx$Ze&mzR?5Ocrq%OcLKWS>h$&uf-DN01x$P zjgAAd0{;=#J0Gg3UR<}KA9?t>OOz6Nd}O#koGv#i!eSgz%HLybxZB&Htx6BCSp%7d ztiePMOWqy(?x+J@9cJxW;z7@CYS`Vk-i=e_iJ0?6H z1Bpz}5CjYB)?l5rPNO&TkwS31_WR1gk-(+l+6GrCqSb(rfWtataV1`2FPL=Tt!EV> zsrIT`;dr&}88daKX$PPHNi&jjSGeY1gc=cC3PDf2y~ZonxD4!Q-LC=+Fp5LaPEv~M zglRNab@#uXOvfd`L(DHPhrIzcRLpm`vBw@n6)p2i2r5M^(cYTe-SP_2DZsZd;|a@2 zFN5?xAf0)OX6NRmNPuIRJ7PCuw3ZBcrGAAt3LwE0@-mSI5Vy@$3JsqjrXC zt6~)Qs$~#5gS>=ancefImg2+{L#BeK`7j^Dm7r1U*v#TTdI#wF2JGSC7i4?`jl!=N zpSyhaag@hUQ`^gCY(%)=;#oQ7jfL0Rhq7PDVZ1=Sa$8E&5ds9uL*de3d2h(V@+!Bb z<>k$NYOr&9^;ab30v{;MK@AExy)QaSHH?F>M(9>Z98}{oE6E<`=WGjFu_{jb=0tIU zSF8VpEmZ%rdD|R`Stsb%TAlOXi~3d;=^c^~&o5%T3;8+1CRaNoJoW) ztxplNY@w=6+YlU!V0eyV4L1fR|C*g`T#7jE@i-GZ^8OZ{J*H4RqLsvsJ-Zmexx{=E zV_jxX0sP;E;~qhr;bFa+;G6#&{Ow_lEQh!B?@m)UFGJkTw8ZP}k1897{T#D`%L-jw zIJ~^fL*3w$%&xTzYiSZpCOf^EoIEiEWu8kKJ5YH(-nJMG;6i{rUqL+=&>w!F^ywxl*@C<*H22b&Yu)s1S^xiURl|($;{&F zFF@451Y%y5QY<%rZA9x76=_cV#*lCT+6};jnuT4jL$GZZfma3feT9dZV&eV+18?o} zxn7`Z{Q_+U76_@Qsvs5xm3YO~wXg?}g1aoKNeW>itT8NLdBwkhNk~4U9k8=E`Lwg4 zzbP*!_&Qn+PE=x)h<_>`E*{C{`14cA!^2p=M_qFZpW`{vKCY-83lERyQm0IJ-6r6F zlPs?mVC(G@ND(?dh-jK%>CvLqRakiOB~12d zgI!Y+S{}Z!FgX6tKjU;>uSeM#6o|(+;^S8b>EMQHZ?|NL1GH&3GS*$D2;=-3{QO$$ z%{eblM({iarGFTc^^~=st7DWwX=eX=s1k!1RLa*oUkywOoF8)GVnEzC;KP92jeNQl zDeF&m^nC{yuHLGRs#yYj39%P7PEblqJICo8uRs!$=osgup>xl1kJ(k~=^Cx`z*IXG z2i(Uy@N0k%=%0W7>0|Hxx`RMn2L0c!VJ+!p;BHVHPy+?oa~d1g?j>aQu(UP2w@zd` zJ>1_4K8oE_&-Kn>NxeT4&%((=&;Lv+9J+*o<}}YEU)J1W<&(L;9UV(SQ<<<}5PcC< zy2g79D?kLS6W6=P#{ z+6@g8^urYkTTESQ6WW?OEFHE^TlnGNqgC4$4qO|fh+6HoWx2X%ow-#T9ZqM#R8wg4 zm=B<^eqabuR2qEbz?1Tw&BlB&sQBaK!y82_7{~B<+s$QFd7S~K1RG!?_V%FrdU$Ie zJ3gQNz?7mckM)AObP)U*YEUvMsPyU~VDp%i%VRJ6c15{gtKzTu2VA%ew<~Hb!t#Og z07EVDxe1rE4XI+LII2BRMXvlSvRzLEYwS?k$W%VEq-w07jTT>bM5*bISkn?M^HJy6 zNDE?bU0O<2EQF{2T3-l#9G?iG%g|k5MI)`xMz(N};6OU{v(6rpy-<473_9HtDCh% zWd81kc?0-bfF5)!qbPjuIN z-X|LVL|}G#SAXqXImu`84d&ax@lloU)@*2w5WlNRHF!rl`SNcv(su*Nny-)q__HvWjzk(j*avP; zVGsUvbaWKJ5uCvy@_LWAZv=f`b9kHc&-S!cgFzG+++wvdKBxE)Yac{AXw&TYs2WHK z_{b@oLm5iUW*M=&uft@#Mn8WhK7f`}-aC4Rmqc#bB}@~Aaf3C%I{_Uw^Nm{PL4v0n z2K8z<-uz4IJ<~sis}cZE6ld(q>D-lc{eLNrv7t6P`B)&?w3eDW zQEc1N!b7xt0NPt;X5@>r$}xx{Obvh2s?`I5{Tp^PUl(~t#~0lxXIxtJ3Q^vs_d>&^ zxrg^b$4u?^DGLxzQeS=_;oI{fV3(ZEL9Jn39St8YkhN==p*8mx*g4R?D!`L05^*NY zUWYNq>#i7W6EP|ZRVNGO%J)!n3XY%eXmKJFE;^UWbOHk|D(rGbC6XXLCN>!fWERPpRHn4^xn8Rj z*GdkK=lM(Pov*RFbkH-)c+FOpc8$(R=2&8C{K?DEXn820uKZ|(Yo2xh#Zs#B4Ms3K z7{xPd@H9W(!mWz}ZAp04;B6IG!;a~`krGrDpt{u~qte~FJo;^kpl1FFW~GK6Vgxp$*rM9`9}ik0bmll&{ulnFn=Z^Fhm|r{h`tA1=8Zj^Z`L3!zF|14qzq; z$;WlOU~s0d{Oted$aT&p{r%zYPFQQO+J2b(P)~ymglH8-Qc3Rl}RzwWQN;e^uz@e#JHU^&Z;iV~mdAwl_pa>K&i zZe#=!r25%V%oJPJ6)Y{gPS&qR`?Fu#z6mqC^7g>16rP`n7#vN_2tPRzHooV@uLadR zXI9f=jW`Bx#uw>S=4V0mZJ}-U+S5Wg?1r%?fH)y%-B>(O=>KP*Eadb8v#VO1zrM(*I0&HpSTi6UIxGF{u&M`!^YmWcOq zx?=a4=Va3W67cN{*Ih7R5B)hnPmhHGMQt{QV*R*Z+;f>&f?DTYVfhrpuU53R2m1~Z zW6u62V!ETJQJ(0h*AmKDzD>PYd-?O))uhEyI{$N-jLK9f=VxcHwjeFc%-Aw8P(O6M zg;qId$lZJ6%mgIVpM2-b^Fe5QJM#6@xUwi@z%CVfgjU1!=(rOELz~eZ`hrS zB?1m8?6B^_LG(-@tdvFz8t<%1Kp z25#84*Ps&56IJTmAHmTA8=K&ik#ETXwGLB{P@<%I(fN0Q|y86H&B5E!Rw+ zo?MF*iM=jYZJ{Fz#4F&W;@bNavKE$fVccr1Tbf^CGdF|X?1VCFL;>AidVT0{?#ikv zPzGTyDc*0m`A_9oeSfdPK()~cZBFOpbC#N#4Hp8HN`iY`^996z9aI{$)lMa6o|1eyOk{?PYNR zk5zQ?Ql;S7k1*MIRem++)+V2617`J=oF)X>?@7q#0imT|q`naXcsbrMDU{V+K^98h z^|TLHWxpj!oJesNbi_|tOat`dS8iCp z#+ZfMDS7PJs*r2G&Wdl%uf-LFu+2`swUPSo@Xponow*J3c8y?L%i}r(of~?m?7{1c zPrZ;nD>N4db4)deuM~b1&ksDMv8AopO1Ro*RXt9eO1_8P(o;q8besC|MI!#XW*5k! z)dpGsP3hqnb1eczSgpAKN^;NXtMP~0S< zs%{tszwViy1W>HKJ!p@B@9AiVhd;NU8_rN}!|fBYjL;X(POaP^-uXp7U!Sn`#*L9~ zs{n4&%O5Z1lcGYohdRf{e=@Jg|De;o+%|)@iYQ@u+EW7p0?>R?bX31Or(?r)hnNLy zE1Z>Gg6z}yKLcHTAD3tP!mHnksv$`;*SP`|;gJ6g(y0pfDaZAm+fQpP!&5KU0+bLq zsHx=?&ePg+*b|H@VG1mrTVd1m_aCu!2CswFii`t+BzFA5!JTyTj9|asb*L4sGZ({z z+L_Y^Dhs13wp5w|4Y{>YQ-eW)ivuph9p6T>5x)kQMDzySqZZZ%`w0RTEVWeiD|^EM zyp&hj2a7Fz%yW;ZdV2m!Bmm*%wbqEp)4hice#PydG8gk0U8rm-hS z&x{`@^Ap6Jv1ZrGt-Bqs;G_@OS}_8z@qqrP@2d7pRHr?JklF$I&)dtBs&i6n&1 zk;&vAV#orNx;)q~*EL)#K-C6hx`T2s$ycQX}9)Kd-1%7L}W zmhsuT-QzIhG zH$uL^k~iw6?Ck7lQ}>4ija49{l5f3t!K=;MO_s?J34B| zr8W_!tRG*m?-r#)<9+A@jSVBP$DX9QX*f+JzL(}h2WTClZg?1s2G1^k>0$***yuni zBLDfv;9}K`s-bR=A{G}ozn3s$XYKt|Ztv?WUWjJLM2=to%Jg0^xC!zH4=m{}y42}c z$_c*mWKHNrHyqoNBS`_4FlZp@l(~1N_j;=6hu{@qt9pCOc_M(OAUM$8e)`_IaIR=U z-Sh5|`G4rQvBWHB6b2WOJXmU>mNW)Lm*CT2XppxJQl>1v@&atj z+0T_Z;gFs(aWTv;JYnPRkFkVEMtvS{$!%pU z#HUTs$&R&b3dS-E?YiO6fm5@`tF7bqZK;siDM}t|we86g#tqx@n7;!6g@eu0l@ATc zRzkF_HGN^(+>lz=ehaU)Kdc4&)%eKECS=%}hj7~367fshF36RhVv|vL1hIEXqlt zyp|vnC<2UUXKIZcZ|E>=D?9}?f(tV_+nnm4SVWE&xwJBCjzLp-=KHw+4U)`!QE;d6 zQyFRk(0K$%!8Glb(tS;C7hm6XZL?`vS|e}vr2Aruyc0M)=ih>X$BHxbYSsea4ZpMU zX(ZXtat$tEsl!6!CsZd~L*duU{&V4B#XeD_jH!$3aWNlb*lhgp@c0SN;?*TDRJp_0 ziyVI|R?TKvI%1ae9A4|CA@T7eHUls0vAQVVOkpx`eji=$+n2Bg^PpYQhdbp?--2`6 zD%aa^KZG0B^26g$mgs|U0$v@jDSnmIja}VtkH>I|KlTGvkD*2rn9;A5vzSseOB2|*K9D& zv1L9TwY`$K)fANfnpf+Gf4K-{dmpU`YRcObGVSZ+{OU_t+b;BgxoU}^%~`^bQ=x@4 zp}sJw&eLITba>R-);7P1-R?iL@nY$jI}kt|OPqI0R129WMnlH?cju`Z>*}G3rUcLO zp9QkEL=hmMoJ93anX5GeziDoX%8Q^poNp^n&n}I`o9$M%<_uDxQA)&~G9IDu4C=cB z^Flp3X6vXOjZh|nv~ym*1ZR*eWMK7jfe0I}E;R6TMF6*znA+p>Z~A2rB`e^)`I+QN zd8d4+*Pm`?W|O9#3rO{AZ1P@QE2n94U98C$<2Z;*7l@nw7RrY!EA>j})8qE8Pr z=|#~04P#yUVUDh@PIT0D%5tCa&@9@W?(A##1ReH^kf3V`u*<5d4l0$|-ky53%(*5) z+dQ99RTW$uoH@7(D4cD5P$DtHw+Bik z6#XGT+=LK2lfz4Z=2wRyQ)W%9CGfr|v}XxO*uPJ4sGFN7cs|Vcn$`Ob2`beq(C8un zss!ugiWpJ~baBa^;9;@v@!K*rO$U%?L#FUG8>7KRWK|<-m3-`&o{vewYh~cy)j~Qo zfgJOVnfuP4Nv>+mxwv{32jIh)EOrmXe7v*Mm7!kzK6tZ;f`W9;a??pVLxi0rcJ z?ICAIicxET9?J!X@h^9geWKh$Ct)XBT?H4b7e&5OU-yX9|tx!Y?h=-_EuoS?bpMZp$xklvR^j z+HQQ5YO@abFgj(3qxs0>t5Xh0p~(493->7~&b^v4`5~#994;0H z>&Q51T2jG-nC~+`r>Ft?0SH!4|5y;v&z+)wGxI#xs1neGI^C1QeI@XkdZJ7{kj~ae z$QkSM%4hBEhU>Fe33cU6MJ)dxfY**rNd2r2NC7^m4kqSV*BeC-?mJ@A2P{Xao;5uTBuG9gQb|r{&~uR%f0!WMYl^MFcLVVW5rRu z&CUPE(YeP%owxu0ySwe(9>S_N<lSzZ;03pAn9UFXdU)$${pMQyj7BvW!{T9+uEC({@c>}L;&?^8 z!VS6_3E54a)zPS8C&dgs{Hzm*z&H=i!qGyKS+I|CRv#PLh?0cZo&-T z<8ppK3xLLA3HIk)$bbvrCtG}Z!-E`TBDYe*%57}RE)j$oF{$Yd*_CUGvTvNDZ&Hs! z3`MO9NkzEMWx<#v)(%en5jo%RRj#LNJ2$V^vTUKR8v**AOn9CvAGdW>zyP{gx2e!I zkEqSB4TplhHopx1Pd%a)->2HS3P3DUmll?O{r4(IK0a=1W&0hO(;vCq^-2sHJlzw( zivYG0H%N~%oDiEZau;bKhi{#L5cS*@(}jf!TM}+#WF_T)e=2P*V9+KYKUu^xt!v@z zn_gb;J0;``81841MoE&CVg(hWHT`;MQnA7}KMSQ%peW}D?1pLCQjZmLr$n}2mst*~ zsKak(1GXOaJ@8G5#SZH`6~gp=dF_c%CTIg47)oB^u8w|Vc)`(J?J;IYZlPx9v&*5} z+3&5D7Z_Jnnsc#wU9Y0_6*>D%;t2gSN3udKZgp}bA(j)P+C_9Xtrb^4Ep|q!3`e;5 z7*0-4!%uJ$(&yUREGiI{e!gG`g;rNnaS}V(FQOb5@{_RC%@60dnyVg>6VQ9=x8fs7 zfIdX$Yfl}!b&@LB`0&B>{SEIhZSi5@K*U(x)25^Z^SV`yqRwMG=ptG>q`pK}?%?ea z1`KquXPT1|#ezUc%IAeMJwj4D`CDp;TI4&Gg0ElL~2CdxMH=kcz>0A4_~L>cX`k=0uzSfKRjW|5zo*`P)% z26{%c8=hW?UHP;oii1Y<3JbeEwaDW>>cP%~3U+^qI6)zN39{rE0&yElUtB5NS!7b~ zKz{S$+2mw{Hchv%x11qu(8pOW&1`}(r`>J)u$6lZc&Mz-8j(3@Pbr97)ipF~9)!ci zMgdQxjMkui4Dm^z>OtzhD&M=;ocVjk__Xk}x_aL3#o4(g_R}yo=EOvN3FN~M9 zCz#=^4z}Uuo?jn>1jIyffp-;_bN{w_-b(+{IOh=?8~F2A;X2I#QCAzj=)Lo2&oUz~ z5K10#c|k~SfkR`l0K`(I{BL)QQeAif*%4$rW}@lhByvY*ze4@(dmo#utc|I`P(QbY zjhDmYgTKa$Ux7E_ltW#On+q_i*I$HsP& zC8rjM8l7$7F~t2LAQM5G;PW@D#xled`U5daKC0V255SDH4z#`@WZJZr)efp_Y;R8d z@YeU9{FovRKs!zcy{#atAA+lq`Wix0n9+T}m2!M3La(deu<}ue(;OgFq7kfFOTOru zNL6mW zdus?V*36?sZCiI(7?mD5ShlOb@9gBQGXCwEBOenoSfScRM@SRDo_=+B_-Kfe@v#yCo z$sFKD+X;u)n7VHAT;M1n%i;8p#qWh``Z^c_0HxJzq=nNDW`6RRZ)jW#-#~}NwNS*y~KdC zd#H8o4-c4$P>s#Z7^fc_^z9U?#=@{)gjS(>!BY(=7Dp<%f8&=H_s$!YVl>adbZs`v z`F3M6YUb;Z%$NM~?8^H`{@apxwS$t;1^l;< z$*ng2yHK}e{t#fd2{qNVWM_Bg|^6Sf58%()uTt8ElW*>qmg3uYq)`-&=u_=w$ z0>mnoRl=|yF8SHBVq{_rLcyP+V3!Qj$&qi){CUm^;JNLa?f=eI&jZ~~R_KmFQTABl z;i3{|K1ml307dgUiDqeaLVWd4&nf2)S;NegV(s3UvN!Wr%|fw{PPJ;JdV1X;P~71; z4U?z#AU%^j*p+p&)ONjz{a?dUTWHWF;w5I0Qc4&{<2w)GFIlv#ENA363XP&cVdA{- zcwsFq<8n(=JmBPb2_pg?xOe>MsCo#KLC;*duIrN>D-SaMi`x#{1TrU>k)^6z@_Dx& zV-`}^oiJ3;#^xBpb=%1G8W*Y6#B%?t@x9f>d~a8C&u}rL@T6J+C}h7X88$aT&S{2_^5rhw(|F{>p&B$VV-U~-A2Ag^CK?)IdT6^g%`x`Pixs}O8W%km3dBM% zZ?@ba4$i%PPHTejKx=dAH>aV?;(O8|{c^1T+aWS_^OPSC64di z=}PRe@R)Mj2fyi7pI7Y8M#;fsry!Q%CKi^KYEHiHBfK^LF0ZPagjtVCzr4GI;jRod zz&zE?blf*8wt7gQy!?Zb{4;6koF&gkf8FpP9JxXm)yO)9P5gxlyVQ<;WT|bSapu*| zj*Fgx)|}xsfp1IybSz{3x4AP1ZdT zXsGA7Tzp(#)i{kvb8kKDL*!20fxc8${ zpBfK<#B@**d%hpy^!)p@ERB2Yi`#0C-py>x>{DqQwJ zwf;!?_->p~Z24oN7|Ld~9g zH6CSlNio&_^%{w$Rek!Yp~?tE1ZS6LtkH4ajXEk3yBDceCFIU6=ssLm@C=J{27uCRW&K;v%P|hLfmKS> z;jHbcf%2af%Rcn>_R3>}JuR#Yjg)1nVWybhF3!!4YemzIj*lh0f1W;k46#mB>m{Xs zV@<(2P#NN>#l_E)gTKwBaE!CP0}%2#_!%o~?JG+0#LIJ;-pJCb2uguK{9dY;>m721yGop(MvYyi|i#1{|=7Y%ARf7qFK`R^3} z?Pf$JZr-&>76Uq`lAXI-+c?V2*E> zTV%4J)|nEI1t8=ra(H|y76)e>SmsZ}OU6zsMVCoSL(r=Nv_qnXpK|-yhd%*77$W0= zvdw|2g0VU^GF~Vfn922a1xkYz#il!nFVc=~NAEYz10Kq|C}|@jbNZM&HxTcriAG3> zWo5;6UU6mOtfOCV%i5Z&Ux)5`fB9Isz{aK-P`3!_sA>$8GQFdhiU-7(Yz$Zj-fgfX&1$27Nc;F{jC}1{off8jq*D``nQogJW^Q+7s$Pu8Cd( zXD4uJK6({pW!?D_i-tX9Ums;HtzDllLdSl1+YiF4HVzkEziTXh!VXFaIQM1>gJI52 zzViN!l+ks{5Orm8zOq7o)(7tc;}xRJnnd{DP#35$l_Hkl-u1SpPn%h@Zj?}6<8Ze_ z*U|U`(AN<>9v*HJxJtx~>p=44PvgkufF#z)VF+epy>pIeoXJ0~Y|B9FiCW#~@J~l= z9?`T)PvQJPtu`?*1amblop>iMH$LsecM$Eu+0}IqU4Vbuo)?~7<$Q05BP)c} z9ZOkNUYgOn+6|=WUM{B{`=pgMIG}(-EL)m}RDLh?jyv02X1Yfzv%1Aez%*OgqW&np z6mxtZ^|^U2XDL$*bCjV2xNoAN56rQB{7zP!lk5P0QOiZa&Pmt|yUZlvXel#CtE$O`666BH(rx0WgdWknP-bI*-;@mH_L|U$QbY>cx{%>bquo`{s ziIO*qmpY)Gog_(MB84rzY7p0YrNx1M_(fe}x*uo}R$gMEI5-a6`Gg3e%rqi~#cpqJ zwYwLF2l3Ol(WOV^oTb}8+^#OTy+8szdR!ai6qa}y+JR4tp)*wrIEP>E3sBT(?R)-E zVHautekj@>&~U(wgC@TdVr=qRXat@S9udMbj0fost5|?@;Dqk2hF3g#eHk2*mLc_7 zz>gYT@3?m@iXo~LrKGAn6LP6zk`Ff$Rf@6ZR*`d{ z3}w&E>Y!f)9g@+zFfKv{c{w`i3X4rn+knZ4eOPL0d|9b`M4<7W>{9MI zuC2DO(O~rpfGlCl;Rk=rIan|Y%xBFbTLk3z6Y9f!zHffq=lNDpJ-pNnM%5k8L^}ETo&2ds9Oi|GisyLJnS1d_ zYJJV942D?<Lk9&nB6me5-zpzBwX30wno~djGpB^z z`mhiN95dAA&{o+&p+wosSVB*+Wi^SYZ8oke^3=-aqyo8p{ zHRK*SBfNaTR8L=;ubm_Kde~f_ardRB^4YL?nJt`^j;sGf=?V*0jDZM-6NQhbhX|SU z;e6hP){M?FdS>_qyrMM%ck5%liSq}d%1~>2D|AIg06ucwIamZ&v4u7eZfG~ zFId1nGFIe>8FcRVdp}96R zlT{$O+*MS1sjo&QV;4sol0aAQ`_}%3k1_VUkDRIVl&gwhymiUUwmOS)`~)hUB&yEE-Z?)VNbFZh#NNN zk^p_(^Rd{+FJ}lSdWkt54?p~t++Z7YXAw5}nqDg_D~>3%$&yX#3K&H-AKYMUfrj92 zSh2g&BzX1mDMc+8m_E*Iwkp&kX6-Lbvwctrm(r{E0Js_B_MmZ z^OiJz!8N~@LUcv1q&KsyLrk+eD#AUyu(~<|uWP#J+yKZ-(zdj0KID8;_sAK#2!eJN zJFXUZncuqSoxXry$Q0#ET{Vw9Bn-dhyey|+y#ZUg-QLz}WFoNNGQ~P`dL#+MU}EwQ z8fuT*prENR0+VbQ)4v#;9P00SqElnYCSxkz%wLaZGc^u4BL)YcwqJPmB+wdl+Jimh z^6t3D-~Q~0snXqGMx6LCQVkEOY2h}QoOIM{!L5SReto3$(pz)2(%cGr(&BhLG|Rfe zrbav#+I}dR`v_3qVxQg&F$d{NnjayJ#*PF$hap`IY%YL}wP>uN9^cc&w{=XH)Ms%V z5q9oZZ!r5k@7qrjZkjFx??^^g2%5R<=`^t@z~L4&>-XlmIss&?O|Zsak1ZBF{?nak zPbH5LT2Vm+fky?(o`T(mS+M1x$qOYukxOA-6xRYXT;J!P(x+1#C;}_cHD!L<`TwS0ydNf7B*3C}-ML(L-t}o~`d8{23UhNg%66= zd`#9$uDu8omyF5+ZuLgDy25JG3PH)@k ztHY){KU(=Qvi7?ZjPB{d%b#AbrUyd}DzCYNy8<|OA^Lh8LY7OaOI9i^;YfLm^I4C{FMbV4;f8yg<~;qA?Kw<2y*;(x#gK>!j8 zu+B55IhH~4>L61<=bAWk5<9`**rR}{X3V9dR_O~jA9qlstIHQb9jRKrPMyhFGk1@M zWQyvT`OM^Gqgb|@o*Up=C*J<(G->Y5xR`IoqbMIx$@fPG+L)&hc6Zoo5ePQS>+AS2 zdwj`Mf-Ahu2G&~_ZlHGfJW8Yy2m=ymJmBD}dUFw=1rs;!Ny>C3S@1#ClbfU`(AwO` zZ22T2PuTy0HkKpT3H(EvrhniLZE3d|xDRQ{L(<_E6qj7L)YfN)0&FoS2)obOX#pUf zts`YxUFNz@XWubuub;@}98uJ}_TF2MO( zSr7gSwcGu*5kh`@c<|UoU}}D^(R%@bN!%QN_LxfCK}035-;y=4Ik1-IlMLSB{KQkP zEB#_KD5jDKupJawbD}vx1MBv;0qH1?Ls_BF6#N;?0_=4EehsT|>i_^4=>DRULkW<4 zPm}Y*)L~W8TlLj{&!FV_2VH-R8MYGMP{kE6oDJhZ=@qj`C}4u6w?>-g6){-gZ(5`- z%ZK!#Yh7O9a7*qZKzl@Nj*kaZ`59sro3h!yIVG1Hoqn*hB)J8!GqFO!JAT?#r%LJo zx)h%WpkOUB(HXv7iozE#F5AR0w&uvfz)s% z+Ml`C?=oObGwee&dMOmOpf*{(*yS$^z$hXsoZp*!7~r-Ix*EinHmXfoam)lCUO&pq zz_S*_=Xv?7rsIA`)??VFFH>F-uuXRj$Fg6NU?LGTL+BvAA4=zZ49r;wGHK3Ts2iFZ zjAK_w3WL?|SH1``nX;<$#doEVTeLMa0@c4J#?0>+j#K_qG7mI`>B$s&1)?p5w0b{d z+{N(}VsZVyR=dJcd3thV&BMa#=u+*L8!^6kL)xj`dU}Xn`jfsKT6Y+q1RD=lIYWW0 z3(P;(FUHLk_J%K@c6@-O=;o&v?|s-AV)P1iStf}t%h&h4`r=q_XE6^vlmTiKu zWnOn8*Uig;x_>?-8_2Sess8F)xUGVR(th&Fa!e1)9mo$DKTE~3w;O`96!~9sihyCD z*o4)Z;UkQCYcRn$x3HJFw83D6Y6B>FI?hh1g|V#Qlm7R2)bhxiPvduXT?drUo-8*@ zAE)?Jm(7;?&R1RPY-w%|*@(do*03iY@w5_ovOMJlKV?5_0hkm}$GN*6GwAI+9n~ru z9S^9_E2P7RY2gtkkl|~Q-Iq29Wb0uoDDr!MgH?X&%E?)S29P*m^?GXVrTx9)^|iDf z&fuC`(Zj`|&*M+}g&$tWS|}rOn5YYQgS6O$CUi|sZ=G_^)yVY@+GBAe21)md$R5gs zCi#KuU@xa>3~5@l$p+R3jk#Qn)zzVKYnBD`RC5{Mi&H1*H1~MaRM@{Ko53jW2rvJ3W&uJ<@((Xm z<@mDEJFtpig4eA$4f*Fpe7;``pz{G zjI<%@3L^3ti(F#aZcvx%FD}7nR*lI4(Fm^te@{Zc6OEe^3bX=s0=*ukv*NG(?=NZD zSs&MgF#>nCJGww07V_vJ74@t;u&v;ZG?)a9VjcG9x9`j2wUT(=md%#95)Zj*~7Ec>im4RQIcqg9X}G{k}_F zH8JU)e@Ecxt_x>>icVyclc=QnZ+C9?UvFNQjqP)No}%#^Qc$GkW{WS-jzJdeVfC zfzidEaebEWQqr49^Z&#)b-()!^G7+BIC28;I;2%c#$;jBAiVU#pL3V?@X9Hdm!f$EAsi z7XAN9LXs5!yq{ucfFXHsb?f)i=4d!o+*>sbDDq=8%ti;LlYpekgvZ^4g=cOum#RbG z@q!0E#V1V0)5B&i&mo;;_9%2!V-TY-E6du$mCVWWR&0uoxr0#_s;ArT;V&$l$G2XN zjV4S%RFh}28w`i6)-R?UkhQuw5(ep0co@>g#MC2TZWZAYc!+hD+7Dwx4IT!kw>47{vzl_GpUD}E zSdLQb{1Ejmsi8TD5Ob+xSCvK$nc2Iv+q7FQaYe=$E$L7C5yCST2Y$;3V zqDKZWFZ1_&c=in2pKwYTn!e41mO$I4U#KjztuW1u-kat1fYRkl`AaMl!X?J(kW}za zoVKg+Xt;Rw2dsy;@oFB|a%P!g;@UqG&jY=H3DOcT*^iKL>dV_8^iy#uKL+V>^_t`6 zlcWfQGh&$0m(ppaCgs;s9s`|bFN}&nN}<9PAlyP+7bLyY1beDLEAbGQI;?pZ%#Di9 z6eEs}Ey}+S@04(uklHg97?H^aQt9Ssdm4-x3l(Kw2yKF z%}bsjm&}2QZY?a;2O;dLo$5Z`9;5dCpg;k)$s%PZeAh}<%kAxMn1u~#Wd$+f?W;^Q z{ud8oN3msdStCb$$+(fj==#?#E4G?f0;%*;JI31>x}M>CxW9teV(X8P&;{k#EbF-!@6+iVZI_~40q^&?xu{kP zWz)!gL2mc4M6b-Ms$}Ub01KE^OWFZAKy$0QJ;uqCj)5!=nLrB5V&bvvsiCfu+f(VC zySkIsrN+GfHj#|dF9>Vh>8fKCpJYzamG?+4>939@G(M(uV5Y{Sd}MU=kaWbKuwQPU zuE^gFLTRAv2I{PqwKr%>?pA*U@@}2@&#RrC@C9Bhxb_omXSNl}c63xWzrLmjtIG3N zql@B1==;{BA%W#Nvw!8BQM2Q=$)luB2as=(ZPN zirg$GY@SwF`-&D81ku{x%^d*g8`R2st1g5&YaZzxoE(w-5oq|B68Zs53hEHif!(h8 zJ=DmAGV;W3j;~y9LnT*D*w`A=`kR~8S5~`OoLXy5Cj?v(T7#Irolh$Arc%VB7~ibW zzEciM_;1hUw_RySioUWMb?K?UQU$ZBV@%7L?{6IHCIJtMXR>IWHt94=|#hR0uqeFOE#j(D7}9H7vhJxKBUFNA<@n+onNF_>`(&qEwHbxYd&h}(b2KE z)`i{oV2Gmpo7a3XCaYPbYy)B`e-PqIDXlMV zDF^$J;a<@Vt*vY{sJ?LbhJ*X|u)WdLYj+`PC2ClV7?V}MFsFd>yU%i6Kp|o%vbhNAljHV_rSS+#d{)$;G}pI`N*6>?3|qh@Vhb>7o|v37{Zw?tF99uQyx^ z-3R>l|8y*6r^hBFG@uSji;1bFjmcPWE3wE4O?`@4cz#GlrTx;%USyAc&G|=5ZRbk( zFA>do#8ljfSJe`aDFlM+F%t#5aCq>;?3?k$d`1G<&iL@Kx90zS7>v6sg4% z7Hs#|wQ04h;E<%m1ee~kKe!+RhWAt8s=S3o+yq!t=kP9@)EpG-NRZn4{AnoxG;PRv$oWG_GZ-G*at zEc<#a_pHX0zvE^d-ul5Y`w@9jL1F}+==wxIORSx^uzowHZSL39)S~JH$v`E4a#FK_ z(|)0{U%?hoC^=dtxx*E1drVxVb(isGysqP6tng|eMEUFHgClv{^qW+aL2ha)CmyU^ zf`IK~%-N|QXoUXe(KuZ{A8sg)*lOFs`dc_Zzh}9rklq=(7ab8|6K;({7uzavC)TdRaE`aCpUh?d*Oqjp;E*Vh+!bYJW>;M8Nf zIzbR4+sD@&E=ak2*`Jrv@YD~V00fym(zsHz*4V{7{nG=y@ypt1oj^-!fSCuY`DtEx zzo;SCzCYNiW)D^;=MgOsQS?q^y6*k5Z;uQ`Qb3@vFLE=DHTo1fv8QX{@c?TrJZKnH zt(<`G$(NR*_I4YvWH!6U2A_RFuY#|Z-$s%`-YM$dFq7?eJTUrug#+L+TQ<4w=GaJ0;{ZiHR(BfiOJg>B|lvxiE91yHXt^zKRD#ij2 z)5t3r5@11xxrvF2Wr264khug$Yk*$vmnhM~Y64J!mrNBvZCAW9XGUTyIYImNO%&~J zbMMlycySSmS#wt$s^H#>C%!u^~&OwDhl)c~MSASpg5u>1OE z(SPC4<$-br#{~5(3=8=LxO^6Q!?9sybroL=_HX#3WQuoxeqq_;x}NwJ@@l93cEiHN&WV)LD*ij)53bp((B)fGqFD>`qD2je*F4^CgGAE=zW3N zEP58lnr-H43Di}MlFomF!s^+S@VF>xj9|9E@Txo?al+cF)VIH5>0$(%Ss#Ao5{+4P zl=v6$6;Aw|H`So)I~HaS2DhR89_L*1!}fO1+k3Q=CqNv-kJlaI`A^NM0v@Pz*L z5?W!WX#I86l}J1mAD_xWTiOIh;5o|#vDe$%=V1$1-Pc(qf|M%a!UMqQ4n)YixkLJr z)?xv$SEkJsLIWYw#>zjDL(Md-(e%W6d?ycx`2ILRh5fzv8*wrnjVd8w3^e#kWE|+Gc{r_jXow z5r)4UkxxuW$IC9oFn#GrU?O0{z&c7dGg;l|%jLmNAk{R1$?F9Q8X+EwwQEvY=`Zdl zik$IE>6zolu}>7g27&`@sm%LDB}7D<42Ke^R78nmYSxTfpuVn27T5Kl<@(jlW%}|= z_f>sZk}Ur~ z5B=#UH$sdFtmgnF2Xtbf+}{4fEp@|tZlk|}!=^y`jm09*zm5e)OUaA0RJRKWv;=46 zuhx1Ftmpu*qTZ7yCk8fP7+PMP7#nNOF$216P)WLj3rZV$lt+tyh|taSc9p0$(|%&Z zhy301>)-cI53cn0^ZAAH-OgFtvufa^05l$3tJtU}@eEeB+YWr(r%!tCEsrE&K3bghf?!B1MW#TsqXiYEBHY3b-3a9uzz4-R@sk^q}l zO&V=)^1}mV9KLT?w=@CqJ)Kom3kzyz(kIURA20>+#I1;4Ta_rz6*;phRv0gM^8zrs zdb)|67q$=YPFdX&X28|yyk+w~u}}F+X$1L;!=3WLKmZw{Kyv0gn z?oXF3b`-WH*Q48p)TX}aSA28vSmIHd$-6K+wVVa#@`2oy)yU1WaZWorQ>=}fxy|r$ zt!dBsug{(JkrCrr#hH^)N|&(gCD{-&Ir^2^Xpwdqd& zQpa~2)*SX*g-Ioy)tm&*B&M=CDc8Ek3UVs8W}2^(HlGU~e0LVRGWO~3sKZU{Rx>lE zFCN&(8cDeoAP#_E=*6FG<^JDH=PxG%pBWjxr950j#! zZ<+O-$MVrteHt1XMJ~My3)pB{6PgL>V;VgW5=^3B3Z-?YE^GT@;rzunxA@k}Picnh z+e6EDf}ML|>wTG3?gfIryoaz^S)+tX+xKu>8A}W1X>$@dy@urrBmFDK+-Z3R7BA7D zA^z_VkJ-m};L9kt3@rRL;76~XCipI#aop!2G3eLrRuPaoSpcuF2~0FvW?p)96yiAA z)gtj6L-pbGV)i=-!`3S69sG0Yn^iYMu^sI<;398PPmPY=bs7+oBZUUB$mXswd=DlqllUa~U{`eN=z!2ZL3%;NTC z!IvI~8qOUXb35E)l}n==kzEVv)3nXaDyT=269^k4WJ$=CgqEkAEtCVs0m6T&MTs?` zx5I$k1z3&29;5%l;9E86CGnHfr&0Gh=-s(`mly~?7y2}KF0-Q$YF^6gV>!!G0?;8O z5+pFHqDqfvqp4c~jFu~x3D7Hg5*xbu&&_gBUO>qDVW5Oe#HC9>WGk*-BP2E?U7r6( zeF*ZFgzDwR$tq!`=L+$1M^)=HeM&aC9)ZrM0 zQ&HkVq>h{lEj-Rp5{80o0(t5s?=fqhYy&^?vkd0wx69 zBXDd2NJUPE++P>CVUh7)4m+YX=)1b}fB-r*l0;MX2mv^@_Jk9SPsQriOiwmenCAMz z0?z$!NJ0_%wp!>q7{sJ*lnHJ3nJ9Z|IKC4FZN^LjtzYco;_5<@beVfx*C%_mQKS*M zCrQQ{8hA$1L{bdVKl`T+sv&zi1?U z`iIp=YS*s;_FW2cDclr%FCrDL?(qNLoEg&Gtt;SBQUJ1B*K+Il_FzC-Iw%$Fu8|!r z)8@&Su3QmI)}91vToqU$9}s+663P6L*nZ0hrRux$ZVt>-cR)nbvEtG@9c!Kvo8MTx zN=}{A1x?xCvUQIiFIsxja5^T3>NQJbv)Vh=_5H^-~+nC@X{C((@>k$9knNRcBuqLd0Vbo%ot@+x z3CeY&^XF~P)+8n_jy+8{*2ZNO!aR^kd$z_rL{G{mFN@LH{+yh z;_{sB{Il}`8_`sahyE?)1;yfrPZr(HF&!%}2B89{Uqt7)8Se?id`z8L^}Gbc1S@;F zOxtg9J(#1?p$dpSRju8(y{#`_JI)jbzUgBLRJdU*h#XP({J)zRc` zTxkRdL4bU%z#uS)&d0?5lt!4gcco3e{_TJ857>X(gCNx-M)xS&*N+Mx!IzKhyqgf6 z2*@RUeHFx;Shv5Ns1ikY42>k|186z>N!0Kd`+P-*|BlFD#?md(w6y`jh@*X{;gbT7M~^o3(1|VH3xl_0_T}?!kDG!pTj!NU32sS-d*3zV`qy@f>Dr+MouIs zz}5Eb+3ycS(_dH-2*yLiRuq5-5wt=O-3t~3eFOv%*rhO6Y&&=;x)r^`?%38Jja>2s z7C%})CZ_K|<6u&|z$!xch?Du~%OcsOi!VM84gz2#z9Tf*jw$Zt0yMgW5k4V_w)#@k zkrdS!>5L56olT0Oiy9Md(Zkhy7bpzinkmD}1vthbFJ)LNDAu(lhoR^hR4;MT%Q7rK z93~cYlTJ4trR9gYT|1#g{l3;%q6EoTVHQj-<_R%b@19L&)WYX0RCGLmsR6R4HzeJS z4CGRz^Wl30hH}0A>R4rIlbK%*rFED{C}y78?fk9W`LKK9U0X$yc6GG&hW8g2#Pljw zc*16Wum%u5X-ua%H-pMMnmC`McZct5Lq=~4Gdu-ljdcp@`2Joz2=J65uFo@jtYczK)HQOo-|?8?J`|(}IBuCsaB%R!Hv}Wt zG{KV!iEMS5Si6!At{p3PWe0Uy*ci@8zvlQGIPSmx&yN>n0-a@#n5JkXmC+q~h5Q=n zTsuZM!fqXjk)o^L58@1HKj-Vmm)(eqZ3;P`$wBB*=*f(OaXmHo8TOq#;s422z-@5yVJ08|t-8@-}#$yo0(4sFr0lc`RL~d3z#});7 zlju_4-oq>ATyY#HD6}#$X(B#}x)YF-{(6W=jNg~AP|WG<{OR1I+$k&ds$KJ-O8s6d zX@i+p**7{mQunK0_}p(xU`#XH0au6)GzB3Siz6JMTxQ$BzUPCA2ez9Pi*1Vr*u5<} zF?|f;IQ0@2x~leG_m5_ES+$(Cu#VK&+xL8Xp9z*Jf`1uAVhaBbiyv$xmRlj~vKZxG zw-hcy%;~#qhy!Si#U=0Nn9mo2MjU9qdJ`i?9C5(YU=3Jka?L;?W>Z%)`w)2D`a~dV z#Wwf_^`sRhN(!m~p&cH?s9}}clEeJ#<>tQw>E<2-1JXTt!P63al5*#GVR#; ze-f$HvLq$xhv}iuG%(K*oDiFJ2TlFx!CqB?#wmOfi#1|1S|OOp+D?x_)-3Unn!)-D zAQ#TAHi%h?ZOJYsd&!%Stw9Vew%|@Q*DUXxq<}C*2(Be-v;Refcsb#BR|!#~ZO1fhj0J+|y+1l3Hnwl)7{z0 z3j{Q;`t#=s|B`nns;{WyRh364M@M9*&Cl-hE+?ml*wyj8dC3kQ2;y(8!Tnm83FimD z)D_ZAQnc^7Ep?b8;&BXRiYom)*(-Cpw2#4HLOBeP1C-y)1Ep}mqc zqCLINyY22->}nT{M5KqjZMN}Dd0yjI(tsQ0a(EbAvi`4 zHwD8hJaE#QLlG=Q_k`NLeSt$uWTxFDYkgJu!6)b~N=XVqM<-BPUCwZpednC7E3Z@n zV(kb#jsJB~kv_8|9~~((Mb?ngFJJ!VUutx6xe799kxM)}aOWa05*4O7m|1pztI^UM zZE@<`9JJD$6Y6h@jPN!FYk=a|EiV{wC3>MMk4x#(q18ON9NwkGjEhW8V}o zS3KbZ&OCX;B@pPU6I`_gQRgckym+g*>sYGLno&7F@i?xJL-mpw3{&a3(Lw12$+e#T;>5s5fzAPi#&4I`^3r3LZCF=p4Z%8dc zM8c(8%FtB%?~}<*J7#d4r|5d$UJ`fY+QC%&3QvULuleHY_OW)Pdvv`#p#j2TKWGxq zdJgjyU-C(NXV?L?J0akxp6JvB4^E zcK?ZF+p`6c?6QBA$clkh?q zU2CMeX}hA%CF0a>EwwteLLEYMs6!&oLQ%S{ElROuIZ7!p%iyIG2$Yqf{n@b37V*1x#C@Ox;wC3uwY+TPHb^M%WADxj zBrHz+`ZaFkc}dAdBVPqeEWHMES2b)EIN9EvbCg(A7BqMbvQCtM?AlNt+cZr=iTQ2! zy&U!HB1?U~sv1FyowL__N>26%Ye^8v){mD^jOB);=|`gw1;m+ZxF+TGF4QtO@3Ok? zYtwgboPAP%;qdIkjue4aMDbwFd|SrL$M4fH$)v?samXcJ=%mhKN{U7y{kgc`JDfA$ z3U*{1vHrvk>118ojXI9tG~SLS|_kZhL)s<=Xm$U#;=Trm#m( z$8B)FBZwRKb{!ZF%^QQZ*#_1Zs+aP#ve^F{FY{9HcY;wStA|jt((*TP(>}m}f{jF1 z&uK2_q$2#kmRzhWh?UdE6Oby?1JT6jQXY#6q^&L7k$__T{tKumugR&Yr3lzt!wDjv znM_U(mCK?o7@HnqiR+3O^P?eb&#uf)oZ+}rJQYwlTP#O|yL7_a@hukkbX|WYICw|{ zT?rmeHV?b(CIcx_*zr9)aqJ{~LY0}&`L_m+2-fyieS9fXtBmUVDxR z2Y926C-@lknEzWGVw_180; zfXPYuxKH+APciOOW7h^#Pj9-)yDKIleUN#c^4%CF-_HYT$A$wK_pG}4CPmY07&Sk9 zxTl=XRw&q&p^A8Y8VaR*zzP3$XCWjbX}t06`l(7j#&BSvPi)58%1_nF`pX_?a^9l8 zXRV$<;_s)8ODk{%#h_lh4&_&9gD(z=ilk^d9}){Zeyrb{@3l#f(Ta#Cq2>_?Ue6g1Fy8(bdYJ4l_m5eG&Fdd>iU` zi5Ob8QZoJzg4H;-_M9=>-p~0lZD%_FU9EnF&u#1jcBf5#<32d8&;3cmodAiCC@pRj z1TQZtMiv#Sj!uN!@lYa(LG``6wje&h$yaSfCMN#Op`78}1RWGl8EU6cX$NqBc}FUk zn6!&rRx+8a4?WDD3brmf`i+G|9mzeTIYzV@+G16Y@OrGFL%08gP8D5xO>9w*?tlyY zx!IyI4LOB*tM;wu$4-A}0j&vldJ==dc__$#JOK+Nv8Gy3e`&Br zTHY3Cu@Mmwz<07KSw%4)!?jQx=KvRbS}45!>;)Jp0s}1-MRk zt#+*c@5#wa`_r|tW!X`#@^h7agwE+`uQVm9+)&Yq_F$Z$5iEH8@3UPy6e!x$?|p!4t23 zkIF!`LG5V_qVH5gsDRi!(KkvtzMFQFrH(m_Ph>sl;Eas`q+(M&3XFWMR zdpeMXJ`gZ{t;SoY53VgMSVgID^yPO=%v%omAh!LBlv}zvZRxInVn$&$oVdD5wlb@j zOv&KQi;$_%0pD^FZqroxbG8WVTb3StODl4Q<8RZrLG)K@pqL1PECNz)NSfXR!(txno6wd^LG*$Pr?+7uW5`k6L}bA={ub^3sWbnE_IjP%(0F z&vrJFR5LN%-3G=ymLw12lqn$CDR-fup)=Qz(ay6BA!M9&;g)yqS5D@Cqbg|5G)~}&K%nM>|0T*%;ee=!_N4NYXbnvz}SL^Ut z>hfQcC8}csX;#A#-L){`Md_{_0aX)}=bQ`{N2=_|Zzf1Sn<=JF-nlRnX|>P&I6_^% zH8ITQUt+-ZpeFHBosRhI`qRxF%Q9Ikg!ODEd?lUw_x7!Bl}4{7O^54b5r*DksGF6% z;EeHvazVtwWYd_K>Z-n+rNV+@T2hAO#+T6jsaM^1yb?uIpgeh**JEQ*0gX;r&jri3 zUSj8|a#n}$5EJZq~^Tivz zJuDsukb~zZ`#oEKxZsunH-Gm&>4VEH#n?mOWeaK5{o4gIWWL7@>1a_yD zdum(Cm8FPX9XC}t7d+^F`Hv!fOVP01@kRXOM>D!txl(GNapAqlm^nSexf`PIFWX+c z&9n6@6v7JODY?c>0O>~RM^1L!#0OzF;zL6@Viv`Mm7O^w01zP>PLBwiv4cSf(BFza!!S52p(;>0=FUy6INj#3<~m|%^c+II6hVPE)ZF8iWy^a^NHhBE6e zx0DcvB6NE1$kWga1vx+iHEElA_3BfGDUBQKfYMFsMlY;)rHst}FDH8{bMu{DRs34B z;_%Ldb9>F9l~wT=qh3uYzRe_bSImFt&c?j)oGmhGn=~Y|;}ec7^|2cj8=I!9YeBe( zl;=ZM5ogS5H8< z&`gb`r2?QcMh{i8l9&H#6P7Ve$wNN-YsSuJDCbvP_bTe*wWGIEV~ctA~cIc_0@-zA);qNv`}Qll_f8*7viI84BJ)qv?Ns-GA&?I$Q9fGM|^y`k2|_ zWN_p7Z2~Gvv-srsluDW9UdG)2*!j{2I@GZv9uzNbZTXANZda(FtZiZ25=pMP@MZTK z@^yB`DhIA1xbw$|?y|m(YvyYlq_=PHZ(sZoT%HxYaweOhA|28DeDuC5AaATc4SDHu zoUtEja0&zG&jb;bcQesYXuuoSppILBG`#86`2AFL%S(oyNsw%IDFWX}E8eFqK5MLs zBae&9&$Y7szWxfVl!EZYM6Vwn^@+275fT4$1)}l->jj{6#Q&8f*<^-+pZENydJy{X zih`qXOGZ?5cMu4|9qxb)-YGJW`IBfos}8O9d!-y>fM8In%&V=|!sk4%<9(``(S+;dwo~M-B!7~lS#=8Bi6vgM zv8>zXcB)GJN3N9Aw)K?hWM$)?xe15%cF)iQp@-+6J$qhycG{1EH8CkX5D-u)6Nl%2 zHC;P-y2EmDO_c{sx(RI~TD zTJzvOF>&_18#9>c%WpP~DH~5bXzH(B|50z5;ag6R>CTn*h20y3U}2gFDK9)r!ce8b z_a1@bO0mB`t6)k7F%k3A$vce-h=XHhr}Sxd_L!GjCV#?dh4$C7zx9a>B#{jln{XN= zOFeG`D7e!ex6eGl2=8(o0~xm=e&xk^dVEmC!IYHkOh8Won}fruR+W9_3G)vOGrI<8LX6jG z$bC;rR7+<#VvA!*)}`W^N0|~)&l-qYyL#X&u*1JmH*XlwwJ?O#?6dj~EU|%E`=O%& z-rc>pLGXxOdC|8JPQ@vse%N`ind9JexxS+B+&(oPi>0v<#q7UOC7qtGG+o#siM2Ip zE#wM%o3(Ys24-zbM9h&LVnWv?8^4?tEJ~pzADaR-=U@Jpm8JCfsC3~#gOgJV44wyITk|J|EEB*3TuU|^lP5hriI9lsB!@1~aNG(R|>Ii0TFge?eC zOh9doA#9jK057~RU5Jjkf1QA6hwAF|w{N{`c5yeZzhvI_Q{>em_W{=au(rDS zkkIsR9@raF`?H5!7uOyv_X$f(W~>Q+^-QI0W=z@v8Vu7t^)N~BTIr-5u5xgdXb5XN zsDee$i0y-$-*cFtU{tO?cA&g%B*i2ek2NKR%b})>e!(|_04uPH;d4W+>u+l$(zL=3&H_1 zTs#&{0-=uCS~|5+?I_UdkW)<=4%b(kgGu~m#dJc2jKppQ3JAc?w^%1x$Odqp?amh$ zJ39k&BsR8WUj|GtAC-MiBE^Us>ILkh`k0B*h86SiH09cwX z4il4!oF7pMsL2PHJKQ-eBVScQB3f%LjW@c<`G0lkMxJ)F5 zH0(UaJ!4jklRcd{TcYu)_Jmaw3-6+g+yh4@qxU|;$eceMK)GJ?Boty zGmnL8R@swy)PX#;id%j|Xgy1&(g6HePyP96aa?RyJj&I07@Z&O69Id`eaFuHAyaWO zzqN0clqIbTilyYRsPuHy9?_V{P~J$^^XH;%rtqWc)qxp7!r%L9frZuo+Q;QKDkP zMyx$}gCE7}47V!q>;Mjx6+1}xOO!Ej>D9BZonwb>Wx0{GVii#&wSjw1h4Dg?fR9<* zmY(Uiju6IK7V)m@hfIoJzat?JtwXT}O}4fenY1T4J+TK6;&j5D(XT2&>#bVv8Ew~Z zicg5>DtsRa?AEIjQ_PLct!IyKD}Upbj-21xH!leKM>Gi~S=BflOZ43aR}l21p1q1h zO}6URqk%6k^Gz=oC@AtYM7KXUA|fJPjv1hHaV(QVEA=j(m2^aSZm0Q4m_YNG@cXZ_Udt4$+0s~6@mcQ50@!8Vzo%jUZL@#w z{?c|$e(n;_#ASta*ba~@WDfM?XAkS5lEF+6+DNYO0p}R9LGu}!nduS2Xv-9@R_VPQ-XLBPxkGNRx1wd#> z=nSO6&+53$hKlr^2g9f`*xCpds&K~apu&u0mq@Mp^@Afy(jk~*n{Yht>vP`iZEOf= z=^qmb05wIXfa^Qv@T_+6VCIZ_D3tS!1LzTX`AdkcZ9_&0^Gl$+wA_mEsjr|n(m3Oh zUUq@X3(P~TVov_MxlvE0ts@u-7v;b_J}@rB?W0j%5U3{`5NWjBN`Ay+6s}2CYaD$@KIisDP<7xO(I34XS9_+D8@%EFIqJvl#BV1 z48}_aRHTXBdUU2h8LvH7R>u)RY^Th4x74q3G)~ETUJO8u)b_@Yf#!U`vo2;BogJK$ zd1`hl=)w&zC{PD67uVG$?`8%2Z>LH|K*!F8da0v)Ld-yZt>m|^MpO=A+%z>SA;Rs>`0?Hx6-<7vQos_2uE zca6HvmufD`hFyCey zSOw1n7oEgh+(@OvtZIkGiEt$x_o%Sxh$Emh+EW(r6r|`)NMh#7iyPTHJC#hxqKWaF z(-{r1FA%v?#e2T&9?!z<+{CH8WIlq{_TB%P3wo_@mRHOw;9U6}3Ds+%%FGMbxG z01spMjg*HFFgGZ5wp%I-IIbf^YG?Itsn_2v;fsAEiltMaVSOf|hR zVG*D=Z;2QP$D33{0Ib~0(X%Pab_SofPWCr0hx(TzQ@x4f+D$YH_S1}6Us2so*e72) z8Iv9Egi>A7>elvKoC|}ThTl*!6eS*mMYuqe(AnATxt#_+W*FX^HD|LGy!lb0xuVN| z`V{wMGq8XX(&ZB*@tUc|caWTOZ5LU7$Z2{vGnc7!8ASE_Fv6!-mX=;Y@n2I@^NgG) z!od^g#n2V><-LkgLS3d9-uJ-{LyPPFvqd-wBbZxy!Ha=EjCYv0yfICh89CC{$^Kz+ zbksH{r_?wclB?#`P6x?sn>ASc?75q4ssvKKDVHm=WEK?Py$QoHJWv#S#34d5aOJeJ zaW5Y|3ZC5z2%y3T3>H3GeInvC8Tc#CTB+vMkf-}(E7Qkyx;w6sB2#5BcPtC2c6N

cjn!)A#I({X5>H9C-QK;q~eSf;TjwJk*M&5a#X5tAY zkl=25>WpfqS%XNWw^ioWHo9jtMr(KVf>6s8FT=M4oDLvGS8CC-?qlFrY|R)H8M^p( zoto}bSvF_Kh!5MvpA)p9-9vTgOla$r6iYXe{Yp~o+S=+c%wPMmTpT|xil262<~gl# zSGUIO!_uPIQVG#gv4!@4dNbY^&E;M+cv+Gi)s+w6_v5#=Y*TFEW{*5k5RNwDox^X} ztet$F;J1O7oGa*?n_x5b!FxHMAR_O8M}tJl=l>rlzwuo$MT)M~ESeVvrugx45Q;eUyd!V~=m{R-h0R_H=-#`jhztp(>}S`@RmtE0RPJ5%fe1wHukL?cpWdIW^vt98 zmruWsEsTCU$af75XTs0s2%s_G;I&Ph1}g5N2`VsUr)<8p>f7EI{Le~iH&P0-52|Yf zEWD@XNrF;{DQhc_W@fDFJq~rfFJ~&hh<^U}YEVHG@2kB0c)w^t*YEuW4l09@i5Xk& zL}|VoxH){fn0-)5Z7^>RSnCyw#qN?SRAR=}wswv*1t|!Pg4CsP>?>SLYY=l6Gr%^_ z4^=`ICJ?F$sL6zx68}rGgC>WJ`rV*G`;H{^-zX?BF*5b=qN;QT`8&*B5-~K2LF7R} z2xI6;1f`ff&7rvA9<1KS6Q;AqMiw&KkqMZ?Gu1NSA2J$#OQy&q7S*vRFk5u5@?y-X z1`gFDg@;a8ChQYZcABeIoM4By(yi8#cWHZO*&k4LT|K5v;E5iIFs42Q4>YSp2l9d|K@;xV&sUv30cJ`u z)`x*8Sq!E--z*7#9Bx*X%20Upc>G?27>!}n?+T?a+;|p=Z-4I+jk?5?b!MzMT2tMH zeqF@W&?u9lV3f?#iGp@tcbdhq#K36*I9|pqd54I6Xk0Q#AS&Wlcuo5dO0WZ_El?dE zXCfZ1WntY3g774gIs@)=GxtSfVWI029*%_Nbhvq@zPW0v#_7=k7d&|n=zpzs#G$aC zZbA%P8*S7%{?;B|!RR~kzKsV+W0=>|5$itlJRa;12GBx`sD~=MNdbK#3&-_`hl-K6 zk#=}O(#|<_FfalX^A<2=tp=8{$-wB$F@#K|pV!Pdz1AL1hT?4NjdFL#%UxAiub0Hr zYG&E6XEf~3^BsDcXNK7z>&gW zLVJ+YnW&#pX`ummAByMAud;sovHV(6t2Xfeu}v?0Ts&`M6)!xIy?j5H$^-jbgF`aGc8r~Je$><82R9I2L?xi=*_Ve- zhN35zc>6qS$3M0?`4qD^Paws(AuUp)(%2yvwIR!V(AsO$_TQ_kqv?s|W_v>oG-=$o zAzWbA*IdMW5n(+4>Xp6=!g2Sy*%v>wAWrDU#m11xJJ(2#j>V=C9rg* z-Q6MpA90*uU8JF*etsa}!CcfGxwoDL=UjZ6mNrd?zWnD5?P7Cw@O?;R{K67X=cNlN zp5uLlD07BmczLlfts<*u*BSUvq<>co+aXp;oZZZmK6;-yh^DGCBsR~VMT!iFYAY;g zqDlei-5bJPf}C0+w-}x|sg{luFfhRSzChlpOOO9Bf?I(z2t#ELH6uD%-j3hRiXc7( z@V>P!05q8JdWK=}+N~>V)9ojfg9#{b9GgptE>{6VdB?W;ydwpu018NVQuJYoLDEI7 zNN@pBa?H8M;sr4gsert4`gUF~NxMG2f(Is9B2#Et+)yUP$v*Nx*`fC;Qcvsj8|>FS zri7tET(Lgm20!2F;l$KM0~jQM0+l#%#EUL^hpHJD}yA^3e zRh_|048}#JS(=NWq$GCl$7zI8>7XpQ#tmYIb3Dx2%mWJe<0I+BAp7*WXOXGXRuE>) z-*+H;u;}-mYG>a%F(Ghvqb&fQnKjrbi9sTY?vH=51UUK0m%tuei{Q863i%l1W9OSx zT7we}O4eD~!IyY4Tue+fg3{ZsDSyEa{`fY@3w`ucFy6&m&)3z) zhp}+Sf(o;#3-XI~80vmQa}Pjh@Y4pqu|A+9@OQ1uGUr)@1(@!3bD6im0rqV>c-K0r zwt9w$V1#|U(=2Ae^{~WCr$i3a@>+F1hE5l-Q(pWfqJYPk76?C)*p2>8F9}@?7<6tdLm_&srz(dA`3bUd(kayKQ zmkuLS42~%&NlpoX@|+S%D0%}EeVIKNjC~-pZ+&rOQzy@&8UbCxd?)8%)b0Gwep1#IK4KmCVZcj33%`Vms$Hy4IEtP>*|%W-~@Q<#zoVo9Z4F zwkMm#(zapMwYsSF-rngt9gm8}s*(wN^7HZ~YcO|Anq8ravl)RALkf0i|NgM+|HS#c z+ZRFpQ+-C?KLhR|H6?&0lL>f{?p7vnEePFy1EtTz^{XUchA^##SkCtecnqrrKQ zS|FV^v!x~NS8quE8frM^;wIPf^cnoESl1W7ycLrfpVHm}%C36Cz>umfhADE9kgbSm zI93VznBn8m(bmA0d}VVJLzIT1ce`#6ihe$%8CKCJ4VhyzeFw#K6p;DR@C``*>r+~9=`m*3?>c(eSHrQA9#3;zkl^?>3_FF+nTXYzrBD^w2^cE zOgI|ij3bb096!D-kc@9P4*(hzT*TrFqVMewU<5lTBEC7Kd#DIoOX2hRVtP*P)3k0D zazgXNe`UEj>sKPhIdS2$n_2Jr&W&Rxp!x>*v&PROp{S}wJgl>xdJz^P7b-BP)V(Ak zmd0PCuN)UXeDSzVJ3GE~7u6(CDq+Px4qoZ`1RHm#w$7OTnOmz5RNUn0)}UI*(Lh^X}OM>JN%ABw{sr}F>g5^haf>IkoSz}60_zlt3jGdi`1?MsLF42 zLc=A^Fk*~N0TjEs#OH1q#PHKX(VyAd25|kC-KdaeTK+K-udEPm^xY;Pr?{L^oSk1# z)AY)#$V%bS^SKbzVEQWJFMV=BD#)c)QvU244hg(~^&3X3XdVEh{&~o0SD`3gqF1=+ z2mCvCYksT2kjIiG;p?$RqK07<5WQ1=@5jDuu6CF2$4W|aepn1aAI@Sc;7H8#Z_&RC zc^L)ywuv_#O~KwrSPbl2j&9=yk{^xg&wm$A&kl|T_@pFecVO%@NS-AhgVPyL=FU_T zK25=2-daFq8Ms*1AC0iHwXN+Oj!?w^pKSc78b9~j@SkYq3_K>IR| zI3?i^BHTvRPHj?o z7Klc#rl8DC3kv>X5G%Fq+d>GW;oRbVBajGyKo^4Xz#0^Pv=?mQ&qpD;E}t;F*lKHp+GzL8G%oycTk&ZMh))nP~1QS?@_BcteWa z%YJ>vuM0alDEiciu19*awA28E@<(&uEWKSmDaRb>g&q9v%=%Pww)DYijD6EF`0B|- z^TbP0PPs0Q9bw9-Pw*36v58Tkrx^Dl@Qb994fR6h3I+!HU{VD3?yOV_*FUHc2x_Akhrlp1GeMQk;Yv@HL- zL^W#0ZDf3db@EJqjA_g4$;nAd45wcqXIwI{xP2s~XF@B0@A%2BKg}7v%Ww)>B!lQz zWjQ%v)69PqjikdoF-h*6MRgn`Ben>n8#r62HwKAhf4a=c$d-SBfwWP{tqO5v?Ve0+Al+AgrwxYw^HUi;=xF{kpdK7*nVwv~r4 zt<(q9U2$;H!uwun@li-apaCY)$#b_5mPH#n;eEf*P=Loa64f_W)aY)5xLxpyStGTh z$;fGY+uWRVak~O9ClgxOV)i@8mbghyMXUJorQ-K|dP(MEutc{*G7w z1rM8`sqR>F>Nlz#x4Y5KDa&ItwA$cKolDFL$!%cgMwr1ggjGH}4p|>qG3^zaQB(2+ z0!-jY-~!m zY;xcI$(6+}#>m_~AVBEgeSGkDA0~WsLkD}>r*Y+85`ooE(#mclpD3s>(IQ`8+%Rl8# zp3vRpgjV1#yIL!J`9urvZ$7+vi{q}dvoLO-_SkD#FP^$@c`2?jC#DW~z?OSy42J4A z-0Iq)D^Zf^IDUfQU3a2ge|r=~m6mZ8xNP>?^=^T6ZG>|B=);pk#mwc$jb6ywnGj{->>3u#{M@!3mv#BG#UkVm^EbcY&fg zxPj*CVArOdm6guVr~%Y7HpqXC6CGIL>;C#?&d!RqgH#MUCU#ZuOM1;gA)@uCk`bm&sc$zGKJ%IK@L&bNTHS!pQxV;a$f~(RzgBoZ&v`(Z*Aef z3EJ+*&D{t6jpveFKOn!fwx*N442em2->7At$?pWBaXqWWQ;+?r)Tq||_ka_gywuZR z2x-*Bu>z8IZ0oUK&h0A;{meC2MWMWV0rOl|l8sdj?f}dqWUU;I)t$OY%QY9{FMW%& zGoF~cSLc4@2%cr_{{L$3DD-dFlD;60b~EeoP$vYCJJSYOxn&CEQyhW_k7nm>H9 zy}hkTE-$bBW30~{@-F5lsgntvO-M0L6Iqj4ev%~u8U#Xt83WhcF{jw3KxpPsvS9+F zCScilgfd2%zKnO*!u4tJjzq+e6$PwqD}bWU&Am0dgJ(`RM}-C$_k$Bc&!qtoi8nlq zX<`ejLgT1q8L+~J4t}P;$2lAL(cm2Z@ov`24XC{{`(8?uzqGl!_&*7)oX|30HUex>Nd|mNI2S!6uTVHlb$8mqAX`@pL z4m0ajX`q&h3Hn&=EQ5B!GvSSyI{w9{VNrOAO=3AN-?rM=hyTc|0Qjs1 zE%lx`*e&c|VwFpwz)K?d>^H?+WT($<{aXzR)lrz&C%2g&z1NehAe4Xj1EGB-d^*9; z%Hn8Ej^ANu8t8Z>8qdWyH_0)<$lElBI}8G<&;OzRSH=5ytWO&o#_zKymJjMEf-kuu z0TO|p-q!)e`#cABM-*#3-o!*?XddpKmgFqc%EgnCGnN2Nqm2ch?<7SZ(}Sm`N=tHj z6c#7@mtXy8qu3TF5apI!f;PK8zC3#9*RfPWiZ5;WpbqR${aibPn3YLTYBfIucbN29l2s=g@sSjP0*RoQK!Hem8ZidrW|~=Jp47 zT%GNnTxTWkVDf=G?B0I8BM31+KC&$+XG_Te0jB`E64zPP7aw)1WPF6^`x2^2fL)7W zCz85@fCQga39&YL{zmIB z!~ka~khLP6O9jSN@r!t?f!Dv=(bW3U+>z?;&+}F%kmJ*`N4?$5N|VIEL&|E~Oe4By zFu|5k0|cIBI`me;viZUJ0_W3@^9zuw&3psOtO zcri00+afb{e$v&pp|=|guXDGtM`|}li((v_&zE4s^Gy21I4=pac#weFmKnp*$p0;Z zVnV6FNMN}ame2=ucErz@o<*8d583sc@2DO*Ij!RS%EKL_*tmBFnF#%P-?4El8D)}c z_w9=VcZt?}A@u^P0BDpAi^Uy5hA(%Q>ppo>It`BUU^JM|RPwN0I4i13QE^5E1yys? z;oIW<*LJSF;vswHI>z#Ehq^b${l-`C~rOhMd$vv~^#xD-_3?I!8rH(8d`{h+g zkCn$+3V`J+zxp2D0m={I!eChdpp%{M;%GMeFR_b((9F-!6D(}wI5^URwCVCa;g1k{ z&tt+>wh6R~=M1nm7!1j!b9EJ8(PxC1pwZqGFIy{Q?(wp4J3YH>=5$9}N?SXUF*JPR zMi^L>)@KB0ZdXr$iKJv>Q=^z6y~g_Zk}?SM&}O!c_LuY;7k4P;@TBarZlG-TvWf4y z^xEQtIL)s`tawLa)p{zQJ$tqk8N2;B`8I3#z_a?(@+XYBAH|zQW)@EtK`j=}ZLr_L z(`ID#us-j-iYBGe^)|1hYRSN+R>j}5b$8SWkbr&XnBFB2 zEH&=jjv5(?=(j>3n+QOSOV`^#UK3L}(bw^S;3Nz;%)zYA^cm#G_<*r|`Pot{5WdzbtFq9F^b^JD z&H?=Z1GQZ;oKEXDCG>LKm18DXx`+FbR$x_ zYB*#j;pJA3qD!{PdH2yMs0x)520;uv)9n$H%Hmn!X)!6 zvAh*Deh(3jsL14NsH*Q(u*D%0cJ?ca_;IZMvUjCv_PK-906Srtm3#C6X*os=m-@$T zz@zs4q<;HdvjQ|x%if-|WFaP>f3&t*&>GFl+ zfo!CR4{Hxbk$`#yeaX=#NB^O&A#+282#5TNJH!M6;U)O!pMXftbQ5pMb(zw}VgOIz zYg+^2Tco;3KQ|^Ss?Pg-WxZHpv9_4e$ZxF>?Q=So3xqLT(-$@GYEz;{$>;EmHGn7} znb5x8Vl7aBctJc=kM>}maH47btf5{2JxNuDXPF>evs^~eg&Vy89yh+_T6%7MJYow8 zIy9Q(`(@ch%D$N7(wtxi)q1KmqiRZ`-i(zvpS`@DIU3d)RFJJ$etusy9TM6jyo4(l zoDcrQ4Iam3EOQ-kCrO@GE>^HhO7D{FsCmHv)jO?_oT#=*=0BQCNaE4aMil>`T)DW~Fj@j&^m`@8!NA-PtuT%ySKuS!YhR|$6YPx`h z%_*_DL_yFhVO*k2K&}CB8hOwulD=7ri%q!>ZgKU(3J74_;6sWhEP<5yGNZlHHuF9l znG}!8c1W3RxWl?ESKoU-wD0hN{-sOP5i@>WwM(f%42b@_2sFUb)!c zZmrEvAeS=YQ(FyV-*2_tCf!Z)LjZjXuk*UM)XC$%@?RTCUQDaF*&?Po#lXsK2<%r;)wG25$&>F!E-^{cbP8`b51 z@|_bmyCV+jtjCA}7(z7m{DqWZJt+;^U(|@iyVUXL6Cxsi3$i~V58{A4DylPmPNAlNfVHn6&Ks}BZiX1O_T z5ouZhr>g-rcnrv88IrMVMP02$^`eKU4UcMiIjYrvb;w6vZMqNn4Y{8)*OQn4gx*c7; z7`Q`+Nyx_akUgh-!gA8#2uNoK4eqIkIZZv)?dDxrAi{?i=>x=%2>oLTIge>*VaSmV zbx;}*k7&xkej^DC5nPSc&nMB|!echdpik8_J|Xqf?|<7CczArNKpDu<265#@N_@Gt zrCnmPS&O+k<1NKJUx;!0ie{%>05H4mDc@z_)<9nGb420V{#UVfpW#tak2uF849Bcs zrW(>P)8ObF?PDjCJ8?z(hNq-bRDV(BGCIIWf0T^(-F6!Z&!|)_s&7D(I?wXX*+z4Z zvyv1ooBtwf0bCN+;MuMt&uh@9b^~wiQ5VlVcBbqKRfaJ+z_DDwhrUEyxkeCg|P#Zg{a)3UbGbSSP~L zxBbR#)j?DLL(mSmPO!-J!b-j|*1FWz=W-f}X73YA9Lgw(6M_BfwC z>$YIiiT&p}+!dtLJD+Xyd-F=rK(>v@GvT?Wr}N`lZ4}Cc_kZ8gpNiw(c1>3#mJF9* zFH~K9`Y2y zeo9uonW2!)b)2%dZJrKUe7w;-y!K#oY6<4Et#7BVK_6#l=KX!{pjNBZdc zyO7ilnN(H*codXD&Uc83Mz+4{@Aoqafrn;Kg_qwFa-3%A1hOSK_}qC8FTT;R%e=Pu zEOKq8Yc)W_8Ce6$D=C{-^hb&W@NUl~82*x-TA_)1~z9a|Hqc4kqgNp$dc~f0{4vu(fYOC@hpNN{m~i zerB-pt!FLx+wNhz>TaBk5M%F9+Y4d+v)i-8}Fa&)wm7p!&6umUZmQR^1Pr@?%cvNJ5QI+Jn(LCWhpA zi8-2(&_F9kIw!sx7&4q6KSPQ!u?Q&dQT!5Fc02m;%3)9g87;zDP~nztp+Ef-gh7K* zU0@F+Yf13Fg+8us5-9rP&T2B|e{^baQ^0}^qiDYA0$2+_mXGoBwv&NoP2D{1Q)_R? zLP})k6LJ^OPdB@v{2IoI4$(UPqgbH#eC)lAHSV+XV0=Dge3mHe=(I6?(-tI%z#9w@ zuun%8&N(Z%sDRlN0Q>|N>J=Qag9a`|=pDh<-BVs4Px(Tt{%6CB9?^H3WaUm9O2kE0zlny$#I0)-w;aDXGyJHz^}~lo=q973-ir;28Hj?(9E{$`bF@n zd$aV%pOyvC&Ta$h;``_CT=~R5Y59t#goPK&U8{DdsVc|uOs;lTTc4`KUi(&9baad~ zn)Ex3UsuQ9xxqzMc23|{l!q<vj%dzI0nbLXErjGF{7l!n z7kj{*0pNX;pb5OjuGbasai8WdT9FAO)Q4xpf^4OrcQnCfb|R8tw4Ok)>WutnEVzF4 zEjtvP?Un_0IyzkIc3_<)I2;RN`FPP?+ou9NPFxYO4Eq}A!%ye&MdFYyN9k$5|3}iB z$3wlp|NrNGww4p6l(JPyQH|Xg6en3~EZLV~2pP;G+Ym+PoXXlz8S7BTGM1RJj2Vnf zr-Z@~vtVqeL^PJu(eR14-oLBw@9%Rv)s30g>-oH{$K!s-XUv%U9x}Zrn7jGm-Iqyw zB^^J>xr2sfwU^9q4Mrp^c_l9(9kEMg)R#M1VfA@KaO zP6hVdL|U4erIkhY&l#Fe9vuHQ(|?r_tm2lHv~)IPM1-?Hli%lBdu|qzSFMpzD_#B@ z`v3dK>sHdIMgJvqWjm9j{os%2>ybaUwcM)FRVys?!8^=2w@ zFHI{0bXHa;K-P=14y=v^1+yH3B`hHG0*uoArJfT|$WNfPLD`0TcFgS47E&ae!icQka*juQ7?}vr0j@$FxZ*r*9>_6r*;r%f=T&QD4{#bN- z3z8Q=GmtfmdJCBvIrz$04~5dv#Vp2%^s{@Jx05+~x>D6s8danSCE5z_`jqn9TVpqe zWF3Y*GVk^xhIU!3acWI%67Dqnb5gdE^uym8P|*U8$DGD-8*7Eu`YofYDey8OXm=*| zBNZM%y~B8(%hTG35a$N{Y8@L)gXTj;4Q2I<)%)v_!j#-FdKhMR(lp438Eh2AIO}$W zkBKFymh2frjFBJGtu8nr1Z!Y?3qjBobFHjjYhQ?XB<=%pA9e|kIC{KG*c7*4AMk3$ zAeoQLdm|Pfcy#fXO0m1}pP@v+vt~vF;{}O+x^pyaA>`GSaV($d{Vj_czhS;Hpc@7# z6giuc?)!bHI>;ch-Ra{-pOav5PMpi+DYhLl*jF(Yl%=7uAsGxk_ZHMty@0O@uElE8 z-SnJttQp3>1k%S%=8BTQ=qP?#Nu-=H<@hKCgg82&Dtbd!(_)z#qWS$iDHNHBoYs{` zH+~qL%VgHl^TfjoT0{KMs|SLDgO8zA&3T3t(-0l6&S-B@+3eS7%w-yl#q;yta7}XN*@H-`QTDw8K$w z{oVVT4sb(Z9$6#>^&+$OWnh9;Q++3hX^*b*aHU z94?Orb~fm&ed(V2y8JaL=0+ns>UygpJx@mw62*RCb}nvRWwJ7gj>@ow*Ope6F4U-~ ztc_N}R_jHEEB8zHSyjPMtGBT0HO2DA#N)~9OXSo(6l&DG@tmdP+;n&OQcjg_vE}H5 zY1XLatrgn<nia z$}AH$Fy@<2bh!U^ z*RP(^EQ@0UloNATF-(8l`MPl(ZWS!1th|EC@b$kN1_(8HH(zGA^$cohMa`km_hfvE zNGsCJDwgBxWOac4!OyXy%3N7;s2!A%kRp&_m8>WxdO^-hM zP+)qG#q0YnXRJFMxR>kl@?Jnr&dTH`E8AX@%21Ej>0vSY*Jiv4&)Q6%t!9m99kwj& z)f$qK#ra~}Mc!jwATf~IVgDyYBdP#-Do=83`A{NBj;*KyyT z?qVVMPjoVh_x>2+M&p~MM_p8C2l*z@L6ZG0FL2att3tQxKFhBBuOTlIx6~eZ(3b!) z;k^+)&=F^0U@PJRpY>q2x<+qM6C}X^x$6 z$h$ZOXm?-GOGXu2ABh}2R4N$}4H@iHV10RN>!UleS720%I*Tg6NJBdWuUI~ZBnMI7 z|3nuT7sChuKkaq5>}52Y$)>t$lsSUm8XEiYTSSY@y;dY5a1`}x>2=wjGe%?{wPr8|Jb=t0o|J27k(9vd*p-wusOapUzjFL5W?FN~_`q5gE|9rXjsM zbGO@2nSdL>2kckK7#1--FEfB+E>oW*i>~`!o-umz3pBz6LJTLI=u#FU#(+4-m5x5z zXUfK)2|n$^@sl4TvF(Ym*GK#HoDdz~5|uJ9@Lx zn<*Y2A7@2az|*2}^eo3T%T4Lyh6MhQE0dzJxdGc9Hq`KQ8YzvJ^zW6k#+0iRHib2A zcB!X_0aeib>HWft;Qge1YT*pAHjP@z=SSR%H*xRQ&i0hv?&vTaDe)!}(GCa`WGK+n z>D^$-?ZD8-#w|xBW8Op^^pc{%0fpuM<~EkTgMhx(DWe7x>^hrtu`1xe%}88)>8P}( z!#D?=>L!1?$b~EGM@^=TV%k1TJii&ti;3Qs8`HNC8N_<5J@e0%ThdYSqHv(qZy;rM zty|od`N1h5-mztftlw8tf=a*{hpEQ?D{P#7o}8VnX6}=_*_{Ml) z_xIZ0??9&`DS~f)pA#*NFa25R^MtOCA6NjifdDd*U5ry%l_ma&PshxDzG-o-D67Qm z(1W|GlaTeCgnGE6z!_h%=z2QNeQv8RvtXEn|9dYKf@|8u!{W}lxw6k>w(`DQjN$lP zw{1Ew1(T8aXG3hM;Y0*JDk5&wVu zDaYswKd&1_F9r!ipR48cCmp<7-00NA1m%yJv7Yd z4y2Y@|7U!e8`Si(0A-e2DGhbmEbeywB~H6E4YMg58oDVyT_)8)8|_Z=>K65q9=_;~ zcp_>lCUu-r`1^Ke2RP#=AHTJGLj8M+jxJB^JVn?5GKvE-lYQuWI!-tX3MR9WJ=- z*xB7FlwZ?z5Ma)GNr_@d0g5K;6js(i;uWGMh-O^zQ6g^DX35MZDpA#!p`fXlMEzCE z=-%x*W<3g+8BfPEc&g0oCblFunWt6i`V0MPrLs#C$K9RH!}EU%|-s z#0Eg{warg$jlF7QCFTK2xUdk8p3xoZCI>PhF~jJNYV(WNObI-TX>o9L^Ocjr!*_0A zK#ZEb*@!xed2}v5P<30o->uFIz=*8MW3(xno@cU6tc9{CE<1<2yTvv8M&xET;L%;% zI9gDfCxR}4;iZV`>Nq;}V_r^`lzGl&e=ut!qN6Ah)o5@DW|0@X+P`PC1qem0&>SUW zNBHYHOOH&+2HzhK9fhgCV_%>uS}DVfDPB#RS&hCKb7TFV>TJyWy>E%@CC}o|sjH2T z;V&Vt>CCZDM|Z5e7?b4sXj^?4TvoS?G4MukKP}#kfd|(;!PxC`3ZKG^T>kqX;cJ4b zJ|mU+QtbImSu%t-X0C6jo7AZFCocIvZT43iXz2}-7O1_xP7EesRCF86o?x&|pO$tzX#+q=L2jua1WNa{y|k+3AbfDO>xpg889 zIvVQXj34uMkcJm@%MxdskKw&MR9*hx=)Okbr~bqOE4miC2Hd8rUA7~l@S;o8*eijNNMfgGKGN5Tk)i-vDdtU&`W2hshy!6!T!?b2&-CTsm?l<-;bYwm z$%8xY6~X2`fa(NFe4gE^PqrvNDJ$5CVO=6Q-W3$1Psw>Z|IZP3{E`5Wwl4NpG+tEF z_`d^IpSgP|9$WK(uL-ZYA3NXRSUl=GBWLtg82&ZDsrw-w@u(7l`_HG635=CZWjb5T zH*2EQ272!79zbTXl5xjC+L{{ZV5phlTrD+!Vsc zO3S#8ozke{!4DN&=C+?Id}-0jYSpJ*+R-OYg*Q3Q2+QJr^Hu5bsLb}P<*h9G>3YpX zdu(DfqVYhMKSGTTZXBYCyI)^o&>e#DQ zRs|}HgJGu38Z8z@h#e6n4$>$fqG6x;tBEikW!C*0$rirfxgJVwqz;oc4Xa|INAW5a z=fvNt)1?<6f6xce&j1{nT zK@ov|TUNGmE#V)E(m=p=?)=8mQVAtu_3sz{cWlLWeT_7dZqM8QOV8P+6d%){bJD4w zGuMWn`5GOozPKCFL5{xhwE5YDIZSC9=Lc7o;Q_>78?g1INYAfhTdxCI{L>OY{2!{S z4om#CNH7AYBuOHhJ-XaJ&?_^VB7Y65is&~%epu~lHEV62nEqy8-vPIDo zQxo@9&tIIS1bpx~rXk4qPEHy{;2BQOiv`@Zjv+id10LMmYHX>s%8C8%AD8Kwr4Vj= zB=Ig&%)D3L&&*61$%do;VQWsHes)J@JE`n6^f_1gU3!ixDzvym5EI+BUwhOdjtI8z z536E`Z~FFga4d>wC>lCYV-ks?>rrdV$NOzK5Bja3V&rwv9ZlI=Z5>MoFjSPP$=oWY ztQLqG`A_{@V3uu+Zq9S<-{6fb{xkooIaz#o9Mxt46zu%5Ci;jQr&P|a7PF!CIf;Jp zsy?YdN)<}fOWfJ#Z;4Zy{$~!jfH!d#mCKwH>g|2O{@e*C*O5+u8at_4T4Y^N@kL9&{q@y%y9=M#+1FW%v9dU$09axu|`H+e> zc*;3BwAsbl4UD4E4b>(}y0%SW`JJ6o*_&LRGpB_^tLpcw&*~0e+$=ouWKXTgo4}xd z2aiH668?aTkz=rREXzNFRD3qXvNoOI)#!-64@Z7XWlc!upUwg1j#p_oxcJSbEU8Lv z^1i8WZ@ZeGx27t)_;F#apX*e)(q2vfd}f2IURiT!pAG#q2>uAL_GF*d>S@e%y%@rg zH7w)3%D-W|gSDHm1mk|LzlLuu_RzRdb9hj};M{8Rv2j#ZxfbfD21!>^qAg*t=;Z|ft88Z&J-CSk;drMc^o=Q39 z@;Xbqr6PQratdh3OW+#``kIbM*ASJk{2yozKL=sd=-dGeAbxzjq*TV^!QH#F{shB= z$M(0-(vz2$S7P}nik$nvaOOT&xtCY=$T$Ae;mJ^z@~23syJ zUq{V>w78k|PY!l;shW?2@)#tUs}IXdY} zF|?>dPeHfYN&Up2n{7!bZn1S6@DlzD3ylzqfA_hekTLww9J`re%=VXj=_! ziFc~=3SO9-`8(MKbUoq!t6pQ(=+$|SLxxF>p;O!**?jAIgTI<3M-;z>V!+gsJz5Z5 zX3A{>>?m|_SLb8b-X*E5@`E#%Gx^fM0)WatY)?Q{@uXDipX?U6)a*QITEn64a8)tg z+7kM7U=sfxJCe`4*J9!Yra%2>NJUqN93Xo(!msCBxZYMMQ zm>0PU4J~&MW4w;j;yu#0#bpDNZJS<0*GSBrH)?(z!OoMc&%6)(EQHEbZ{4X$@{`Oa z|Lh89it>q`sK0!;d$DRMrH-V@6bZRY6%lWr9z`rXL_e~_z9#L_{aF;p zu(2^Bv*VJ+CPu?ZU~!r2KC$Qb_q_Vmu3`{_13B3D7aQve-)WJnJ+0EmvX-p^VuK;5 zC|l6j;osL|2)GXA7p6?lr0JT@^o)%!XO?6rW~z&gCP-bM>}lHMomMDxvy@iKoG-Yr zgl1X6DoeH_xm{0n&r_A395+VS7{frWv7)~i(|hXZCEKJWd+5fU()g|p=~(*5-GvY5 z0)LW<^e8hy!9${9a!iX6pzt9oS_vbOD6xz!3@oyWzWvLzbN6b*Yugb z&@xp@ng)dOO8eMT_-<&{y!qDY9$OQq-?q0Kir=csq4>2M(D>Zsl#G(XIKlFB&9pop zGk}6e9Xyuyr?m+sctqy1D>jMYasQRV$9CRh8G^O%C%YY14C6YPo+?Ak2*FFd`!n7R zPth^$HqT%!wiKmG@EVcQORQW(gGeF_a4BCL{*xzwj*S>#R{ie_WUTEHJykU|L^d=f zb^CGTsr7B!wn0`ACRhDLxA7^-z3u7qWpYwg1AdLv>G1MlMGa?ddR)lLFdbn2cgI_c zW$YA~)HjUOhNu`CZhm>{cucRZN;K3Y#^BGLMVXN|+zAK=94Mn-5rLR+qV3r&cMlFn zX{f8v@ML};9dC()5B>ZHRv^(1ym|kIAp?Y%9$5p1d0}Xs)mbiUh)6Q|1+>{>8=VZU z@~KHkT0{J3X=(QD^B|WS`itspp|?**U4FZ3uKOnBfZLld``=1T zh}C0mbMKBq@sc#&ObvZSvGYD|>ZISE+_G8FZuE{leLp$lWB3 zof$vgSG?rQ9AOKi&S|PkoYA3nawRC9;SPgcLxaN?k5&%fy?B?yL87g-$*R68-4upg zZlqH%=T2v5627#5c&PF->f0saLQ&*rtVcQsNMmk1LWHs)z?!aICCNw5;*A|HNYUTS zfe?c~&Cpy!HERp5D+{dC4IFN#AvraUnUJnZ#g9OAiTWfeLAV~{4r((EbPZS_o0;Rq z{5jBD`uH%sTx-ZYjG7~hWCH;pGip9Q#gX)Nv#E z9I8!pAM>*{Dt%9e7Pu{0HK=;P#PmQ-j6)>-F z)+j3@Y-Tj~U{B+K**;A)6_fxVKhhoPi;7irEN|f;E4=%0J5!0pe^x8llpgOvveTRI z>#8k}z}Lxm{KrP+JQw`uEj*qCCT>EFz(^cnG20AR5564nq3g%5Z{MOQkW<-k&7`uR zs@Zr^vrH~HAoR}1I$c(wgNkhx6eFBwK1N^=Y{ueQ3XecR>(>i7Ja^}G*+bws_yqSTf(=8 z0AP!uwCb~JrLz1=H55vm;>xGk6Eu^&}%zQrn}{4KqORvUmoc@)`mdh=yxjf1XqDBWtR%j z}dd5C|XM*LV{xX2s)#m#}}oe_isd z*$l%uI$lV-=C70e$LRR@vrnIEbeitm5Sy=lyvBXL_3cy3BTMRnQ+_y~ zr@lKCCSxwmjrxas79#!R9wCt}#ro2Xk|hRG9TnttO2-Mvelw_7z+k#e2ewM5^b+ zu1&J^Wq3ZYPJ3-be^cqo0=gUqju%#Rmj#uBYzeWpZ zjBtI-Saw{TEkdF9Gn9r&MT5AbT%T0!45oOm{$nyo2#Qkn4w2QqYYHbRkNkjZ^UK>? z=+De!$MP-wbnI*H1NL=YfYM;k&G|7#jGw?k?#s@*GK%k)%s1ctZv3IA zw45nSMzYRPj)fPxRb3v~m~u;04Q1PoWFzFF@3|cib){Cb&G-gh;-CAIfN>=_)V%6Xu~v+p1ehG||n@>&YTL zHj7D2XwZ2Ha_y@+{s1iP$8F(_A4ZTMzv~F&Rc9&&hn-%Z6c0F2{vfp=ofJy7R()C~ z0tRrfxsJPw;eHB}m>&c@Sl7)V^5pa7pYHbE#Cx?GvEqD+%>&8QRNyo3GhVlSRB4ATxqx%L5lk3z!FX+S*l&aU2itED7qb|C z4qoF5c)>yX;_@TQWMU|$p5R{gJBV3UmX|`zti3i%7+Q0Z@R!i$al> z1GTJV`?gh|bnVpJD0f*fx(?~J3!kwj@_md11eG^{ z*LE5|q&W<;U*nAOls%?Wt4ir<*EA3VCAAh@i>2E#q(oLkRO_>61EtbXY2XWC+8C6U z1^5Ibg&84?q|=#Vl=2!~5}%YNiZ-PUwlkIE)_2pnXU*T}Xzg<9EAV%r&)T}fWYt#;bcx&boe%?|gxVa`%`;#widX&?T*T$mPC z2qK2jza{Icaw{I(FVC!8^Hb zm(PPFir$lcPL`TVUMl#?P>$!ZOfQ9x+%J0a-vhXDm&wV_Hz%@J6A&&b zf!-~$o4lci&R5p4eC?7WBN_&LcQdlb(H%=z$+#sdBP~J^5;~0O0|w@uozXMHSrt~NnqH#)RWWt-drU^;*lv!JSg#I z!vs%Rybb>6Dskme#Ydy<*TdV+X1IFV^=aF^{u7$k@ocd4ZOZUr{BE}AOCs-}IM}HZ zCAZ9-Md37hyX@OJBY-$nXJmN-i1&)$lPiQ#znQx2%a zyb3%B*+67GQhsf>Qf8OlJ@)A*D&NMKk(@TY2m!z!nEAC`LHgrkg?uT{?OUIL5&Od^ zRK5b<&nDhArU;DQKaG2^1EC1>Y-ZdlpZB=y`CB-(eXWbDaw;CR99>a5_x>htvcS=8 z04I9gYBupGe)6eKD!aPysCG{vGT=KUUH{Q3$yMt^SPq zXKS(C&veVPXFmcpl!fV=no3?UEAoQ5=8$(Y3Y=uAZ%04v8%r4@!hL5l<^w#^#5KWg zPFML+O&yQ&IgiBTw!9 zWl4_<8FCfS`V&VJLT?=Oa--prS_%d^NDeDRqM%P96~mQ}lRBU+(79vSfnk(r z_2K>U)5?Y`J@GYI>~5*~GB@THn=4&3t;$|fRY{Sx`mZOMCVvC%FEs~RJSGu|jC^T% zr-$VVmzN(k_dJ@7sb4@Z5IUh*Z9_KISvhy()64YWRiBd+xzSKEin$RrDI2kY3yK0j z@D3!!e;i#1#Jl$6CU1%lFR61HMf1*|SxjAQ-`O}Ki>*3R9(H1I1zUVgE!&JpjJ>k~ zD5dDU(4cFvnXRm z91Qt-t7KwAi~YR-l{a$zZvHa2?1%>3KfE$?WQk2l&B|^eF@#WKRnT809!&WSytmYY zsS7WjcMX$MrQtCIf5oK9us*U^yJzKg^He@0lCQg$=iLY1DBmr>UTN#=*SB+Pb?o#j zJeN|rzS%;;pen+v2YEn%az>wUdr1tgbtHv3J#8~QIdNiyIV|pg>oCLhWi+PLVn6%~ zH^Tfrv-n-&t4q3G3gmOZVN`Vg<1ZF;pprZMZdZwa197KO=}X*^&`g_YJ|Q-bbUODv zNM{~hd-4(`@7ojKOY}sWFjMubcmtT#XtFnV0MHr)cuQZPo*GA#wB5Rna=Ji!%IZ*~ z3o)C_>aZdS>K-h3cDXHle1ETK@{B>x9|Vt@)&%0QEGFdh*ay;+#m6vxAX}4_01N={ zR~shg8yK?MLM&Do;^K@qc@BaG4AivQ z`+%OxaA-HSQ-XrEm%Ued^rshHQAO@-7R$6wjAg)vOfPF+`N@3co##Oc{7!@?8DHXT z_}F>llnv38jC%ssn8Q&;QzK*a5TqQ-sP9};#C7wVJlm^%VhPFte!oQhV=Os03I?6~ zw2igTb51ze4iRw>9pEFz$5o8cebChAK(8c{yYgYI(tg`!b8*Uvw$qKq<0y1~pc*Ri{mj#|s`q5`aMHxwM1qk;#L;va6Ox zclcQjtC7_K*F(J5yRZbIq@fM0DILc0Zr(FPLy(Ku6uzF-gY(T?CdC1_%4p8^Or2?6 z=Bh)1KgRd4I+57Fo-f^ZGX5;P|K47DScl&@#E8|+8{I_EQGBY4^-A;GjUCAr;Q#mc zuwHYQcn$?PhR>5v->{3%1Om$iS_{QLp9~!gsG~Q-m?x1FLri|>JxzA7z%Ym*b42|< zViF=VnbT;h(jya|D9-$H#>&^+*X83B-M(s|cxp`I4>*=@n3S9$(QW(oq=1vkVF}k8 z^v6H8f1z(}g)74jV|p+TAfbp-)Qy!dPn0uqss^Z%eP*0Cwx1JQck2viE;EYlF5GwW zGDmeyeq9MZ9*_Ca_*q%NQZAR56LlhPS~O{YgS}E>k^J9LBRGucWP7rFT1Jao`m6UF zQ4kdvg3E)+Ceq<)Ef+3$ygv*?3@VYJl`t_jwfJFj4WiGpPagAAWZ&sCs%D3TG8M3Q z*41wj)%i1t9Z|#^*V?Q@Zp0kZ=ngDcXT7;8MjRC6Ag(@6B^9}gL)H14?8AIem4-7~QGA*p3PMfT_4^YceoBpqZ+ z%VnX>h>R6wY;FB{616K3U2`f|Ig>#t`xRd7O@=UpuDYki;(2K^jH?KY8KWJ!dyn4L z@RgrIF~30J9AAO9BqBPIlf7fsvXz9O(JEySBdy2qUW@iRfg6n^=N%sF2=oGYc}%QE%CZBen0SXM7-#V8^MIKP;oj$UutiC-lf^E9*Q@sHjjZ|o^6F<(a4B{J*5!B z0rchtsGf;y8?Br3041^ewqp9RvK2h%?5HK`py#S&|J_UGyYu@>*~e2k(5~6u1vu!a ziD^rT-x;UFmY@ElUE3*?4H<+cd6n(Gny62Ed^QSLPI1^msD5y_wmN;Lb-BqF0mWy@ zi(%Ka=>3}%?W)Pue85W8)v}mIm!*O88;Px|$E2ux+iuv`P%%RCrrqX^ZA$ITY*)=o zuIb?i2_tr}*6~Gn`KqkWPPr_ddf%1#p}u3TsAQ?6bMiJ*D1*^glrlt9uzmZJ1vH4=TYxZOHN-tQhw=euX{PkvVxiDj&4I)ViVg;f?QkfYyOPrzjKD`7W zSL|Ei&sMk;n*jI4#mxw1nqf;e$t1S<)bKzd`i=X*dJ;` zr;sdGi1{YTC0>Vmv?tv)^>?{h23&zwCr;&;MOUme>{X? zS(@69Et0J+X=k|hG(yt@Po5`&O<=^vt1RzTp2BS8LD!Ja-Y|VrVqs37vw@CajJmoS z@-pkogrlj`WL-TS>OuUu)#|OOsc&aR>HkGl5J`;%jx)}LXBbA@`rr$9MFkftZB>1z zALv;*@D?2Uc+ssJH8E5fMRYq&|IOZA z6Jdx3nKgzI)0?+LNB^GVq0;ZlAQppVBn3R!WIpEK*ma}}2qu6UbyLK%MvjVLWD96S4%Ulj-(YdnKp ztNEk?e0#y92eM5CnyFbS8*wKL+u<>+=ze?TeT)Ikyoqy_T(Om1?(bm6D+CLKqqR zKvJ%V1k&h;kM6Gut~L6!L4eD3pS5~uUvE}_wIV982!b4cF{~L_4~0Njm}T--DuxZb zq`!km6OgA#RqvR>Q@Ok>QU`qNCh^iyOTz%1BpV|+Y8+5q2{PE-jB#AJ;#@bXIfuXiOH*6GXh ze_!FjUFpn57x7>3qL!8o=w>CCo42%^)A);!`>`ThOgmlP%pVB2@s7)kbB$$vLCH@N zBQ7PG#%%H1%y#-V%s~4EdG57Sh;}0J5TnmX=1ANEffq?lxjaL8ZkaD`!zFay23zZ2eDbL!9l^ghwD;%R8cSCS#O^Rv-dIy z7Q91=)vK@p^d}(D>3b;Q2jL%#oXcF|JJQ1OedQiFTSXurdz#Qdp0Jr87rNz8s&xXa z8ykQ%IasMo*BAScH6+9-3h8OZa}QJi>)g~>g3ND8J{eWp-_`{ zqzk8wE4GVxcMNyS%OAs!3|5LYUbx}m#}Ny2;fa5G!~d6{xU&*fJ3T)&k z&i0x-7@pU}g>cvp1W@c34)e|In)6n>CL*u_TpvpSBs)FCC7Jm4t3;n7PHgxrh1%$4 zF>0|C9YOj?pSB9;!>Waq(=VnO>1o63AgZlpA8;h$FW^{>KYnY$%s&ytm2KaD9{xjP zfv)N)w)^|n>=pZflt8?x+)TwABBz?2a)jz8iF+akHYAih32rUnziGMH-_eT*|0Smr z5Tyh+<_O`g{fNnjuW#wjXE?~+yLYF`u0$7A7Ds=08AtK1&sxh~(;kZCsE(uRJTroT z(m2T}$)BT4YHOPPILvd@<`UhrjL zF43D)V;sXTB;a9Stp+}0tYmuJe16m7A0tkbH;gSlx%KqGj^OO5xkI#fwgNeZ&_^oZ zgE&YRi5z@1Jvrrlua-<8@rLX^{To)D6z-<3s!CSdfn|h)-`LZIb~8M_rg8~#NWqZq z^%acby||drEk7uwUKHr9k$Had(bCh{S2NH_+SJ)44OFfymc)h2U}*8GCN#q6G$>$ZA(d$u9MZ`88x5pvV! z)hg2sw1NfV3xD$&d|1Qk`x0hl{xkb~WP8Au^AmPt{Bu$OzPVqF*#XWFZwsg%>Ff?& z<%<%z%Nr^Oe1FM}oHMF(Dn>Q>sZo`!3PE_S-n~nk=3zu(i09iO0Vf`|QL6&b@UC8z zs?5a;OwX@pSQZl0zz4YdKPOIQlO)CQf`(<73*XqhF?lnpRei)w2a;hzCKX7X-$=%l zyvO-ZqRv5uM_S>0@;#DrqNmt1_{7@^aWeAsey^59xymAwmV(5w)TQM8^A=%Sm!uVZAC-~S8YFC_3aJ)g#MWo zfs|Is?p%@(35GcRT~b%>Z1g3wvQtJ*IZK#hR!P(BnxlWs2!H$zcQB=_iABb(TrmOt z?5-W}!r0B{*y2GP%9l_$CZjv%{9!bM%2Q^{j!IB+8P!<+TK!|^`6#P(JZCwrXO(IzoWULot8s8G+yX9>%EIK<^H~y*V*d7+ioUOu{tfVW3hc~ zE{ISR-L!)uaNfC~ns@B`G%W_Zix_ota}?!t$+o6bZvdBs%ha;cgr}<6X@wz?SpboW zvC^l=ogR1Bz%RkGfE{>Fq!p*(=tjut35OSwg;am@M!OaClHT#88wS^2qa5gKJ9pp_ znvt|uDWEk`-6oi0B~%4nrZ@QmMwA;nStmUvTsO=OYmV*xxZOZAn~5 z-3NMITGY8%cDZ1AYB?I3@B6hbx{VjeGI_Sv!htoTT~5FiVoG}g>s+8W*nKlOGP3!s zpQD>P1R`fXFhc=<0?KsIrPvqP%zisvY88 z->w5u6`iMzjlT_7_UGM5-RAvQP|StvY|Ma3OIB95D7wRxri)8j%B*lMd^nr9)DJxL z&i)URV)5M9=b+MEdp=dFl4@6*diMW-rzdfaMq zR-1HjEE!2y8^V{s_(vCcplbkGWIJcXb_P&d#IAa7vGD;Py9CK%-pV=0qax;G$$T0nl&)CydxZE05|D46FYFx}oSR9+BlJ5H<*Kb| zlIKICe6H)U68QW5E|+@idTCPK03YM}-YA;ZMB|smV&MVR&J!kF3j#?%2# zT=CzXEpPHc1v@QLZsPJzyZH7UCj_L*uI@9g4DZc5?n%w|eqI$hNU zZnT;?$IaeGf7d=#38@G-x$Dc{e>a@A*_l}Y706o0!be=2XX@h4*5z-_HjFyw3sFDd zvrFId*X8JgnBhTOoV>v3&`%_@qQP3L?+ton=)##uAt=hXt&Y7Y{2N3e30ouA+xBAQ zE-axLlT?z$;}P`q$aV-{U^vGS8dmt3H{=pu+8}PG!6IpCK{Uh_a`k=d#GTz@90Q9W z$22-uNt9kIWVlmKf&cu3M2Jqu*n^hFQ6-Zv!?(4u;VR^SpobNbdK(iy{9k%t2a}#D zAw{g*lLlI>G*JrOOr&ydP9eOo1?Hdq%-Ua(^{F9F3@ZHFXHapIb?lnQ{4%_*))KB*ms*~T94uBmWxTyURdmy$lj^GV`z!67JoTl|S52IMgx7Df1%aWab|$9R z`Sa=*p#)F9s?UjwZGJc*6G1cS8>{1yTZ%?Z#v5VS7!Ir3!mO9dywTM{GpW6{=8N$0 zU#ZG;2;PDVlEx41OgzK>EhVtw>`LgB*9za;q$4%oV9-z4nZVd|y+1rPG3v(<)1?|^ zR5OQifawL`vDq_2iR1>0(W!}#QczRf85Y7QoX$0+t)u`f)gq1XKSG#VcNh(h$z(kKN z)+)WPaom(u`;)ohgX3^bWTdjKoY+8Cnfr`#K*U(kL}UG)95MKA^dXvK{gZC~=^7NN z2bBeUAS@IND#dWq$p}1Gm--)VbfGMXbFaFao?_ki+P2hH(S;a%@=W6{Cdu3fu-8c-&m|k7Rzn=?d+~iL>sji^ez9zI0pJ#r{yQSLb5mA$0 z{Txjt$t$MVfJN*FycuRL^MVD(p|>(%m8}{Q$zAz{GvH8wKhbO+WCgBw5@#`w3)lk3a}+=2rt-> zW^eFXNT=aYJ9Ucw4w5=$iXu#v*s~LqPu0wPsUM;oN(Z9|r1RwT_+zNBP`=z`6~TS3 zOh}}%=t+gq8wnS7nOUa`crv>21#gjqSPs;aZ`1>c6pvzQG6!>URP>0efR$D!#0uveoy$v(2gTqRPwu*4VVWUwde5p*l;>=r>ExB z#4CN6?lbhIo8{%lG;m4z17E~X0SWm{0jN3-2oCXHmj=97mA-FztTC7a4(52*r}E;m z9KullsiyY=P|wKN=1@0zKf61K;9qv9*$?5>7YK4CX!C_6G{8oPNs|+dilVQ#){D{9 z+33mjq>4LdxwT-c^i<^R*Jo~1$ox_qi|9HbjHh$yR~id0q0R-IDL&AQ6j@jeHEHV5 zv!Jlj?wVo6N*Jm1RP?3`iHAVf%7Um@rImumi*B4BD8F3X+ri}N2nB6I&hgT~f(Cm= zrykD!Qj%p(fy5h~exKwUr;f;9{qiFGZR`{4%H5vZe*YD5@-Oe|m3B-Ys2Dck1E;h~ zk?5v`pQEjJ8s%!ysiJ6~&3T-Sr&eCA2*u$^tHg6G(+rT5V6=-WUEYP68bt}awbS;F z!J&?_z)e=JtTrwi4L1kw)lRO@^m+-ysFRvWK~#OnOt_O_T zt;+j84wvqV-_fPFt5(#DJh8;9-L|byHY)F#sssaIKOL{WqjxHxbOzzi8>*?ZO?g~) z$K;^dj7mgnocC_i5bdt_M!R6=5qK~k63Ec%?;@%r-v_z0Tz&)=R*7WvRTQXVZ(0!E zL)r|=4z*C>;}sxw%eQc#027xLxBERO=4NP{YS_2W0XTa=Li_f)c#ZSMh^=g_0Z(#m z)iDf#q*JL+?=x9>cE4(q*^jQmfCLhx*}%EC13TMV3=Eae99U%@ zxRh#Vr@&^PVGo3E8P$cd5+j>?jTRHT&midj1J_P93eB7{bOc3SYYD}KW7EmLwBQ|$p@T8BSt4Lf< zJb)yZR9h7P6{avBU%s$R)XDHx1Kt#T1cdj8W3doCFH-dk{`LQ>=xqF%-upjZ(z&Wr zG)aZisi9-lDmTp{rxH4SWw8{d(M)4ExZIvY>0I5dA*Gs|8AoK(4qMH9$y}7r1jA={iMK==iornU5k6`M)@X(=Nhp`}nxHjsKtsCq6XnoFQkw zNgrY;7B4$RNVyV}VpnN8C`DVuB7Nt@2(~3`+s#0zKm#980r}~%vLD#+N+Ppo{P^U^ z5OXSC)Ddahu3|P9+9(ZbMo9(Dvo;?MdLan(!U*(eL-fooHwC~ge`qkwN&{XoNLvnwedUS_9TinlVb65@c#@q zuX>a+vT&#_M=f2f=0Fyv%MHe8x2i|RZ$to6GSP#0Eb{DihJz_S-S1c9> zgv4%D0?tDy%1=0-LpQRvi1;#2e0tr1=f2JGPTryjU{M=!LrAnTu(lKyUw`*S6RcunOu-x54%_k6dgf1{lU%eu7w9)-nZ=0b>@)OR*?isDXV}o{Dx6!1 z1%KrN6&JqU_GTowpOwn+Ct+;xqZzC2%>XnF?9Euqi`JDC4=J|qv?%1v& zXT?beENcpjMR0)z?U(NQ)>{(qk00V#;L!~{j-igM9oH^}KH=p$ zp)2>DVFepqNfr)S-ay@3Kc*~IFAb=Cy>U(vDlW|wo}Y(EV)TF>R0Kly z<)40fc3y_jyg?$8wu<{UV!Ue^*i?YB7w%^TPud9Ki(8cJWJV_dK(_7m4qSyJ&BF`h z@J74KZtPS&lS4NyHg1SgfdorT_+CQ%dcE)n1#`35)gcw{6{Smck}xjxH6DyrzsgCzduH0!o6owKWs zA|2V!`-Z(oC1Gu!%-Sx`(KMX z3SgT7QWeN;QaG_b!7+y-RQMdGTA(%)x-ZPi-{VZT2 zW5BPI-$g?~CmB+wmgbDL*KzxH4>2-cGvB_YoQi`{Vp|)r&Xwq*ImW-Xp_rI(xmh0Q z-e-}bgWNi~`qrFI$Net^J^BIq2gV8u={Y00vrQM-MA*vH zlFyNx<61IOUBEu2?d@Jp@O-r^s)Cox_^>$I;_M=Nx3q6v;JO3;Fq%1H6hH_e38g(6h0xedV7ngCX%ZVqldcEz-m!*4 z_9hku@IwoxXdwkMZlrA`MCJ;hS^eql{qkx(oo}FIui3m(luxrg3X3%T9AV(FKMppt zcxB|J5c2>rMF9@QNH`%?_xx}mu+u%g)zzBs-Sx5zS(EudA;+O!2`}kL(xO+U{+KhI4e?=Ca%wCX2|GOY=1o zkv(eYtP@v!=aa>gdFwZC63wT==aI&ej6;o=o=SWB2q>5f>nwW~TkWczI=OvO4wx4Vx( zeW?PZSJ~u2E#PI~{(ZZqLHn4hFLEit`{D3OsP*kwZ!FFv2)=5p%T8@uh3UX8H!JXK z=^mAq(9{IwBB zoGv&GFWas`Ea}eaGeR+wo`gZgK}gfzKle`Pe1nlG5HG)p#f!^cPb1WCb8NzFtUCK@ zbiLi_gV~E-SqUA6?t&AYSHAGu-Sz-ARnm|OzMZ;a>j7skbQZ66o80u+F$_TNa|+6@ z$Ja^EwGMv{)Gz!F$&kYCh532&{7!N<&GtKF8y6bX&=dhn4J&1-SJX7XvAQ|lQp2Y# zQyRm)XQt=pBb`doQ&>wU5j$8h?ux>ep;;dCvROFE@07CAxj_$)3uELPU{$6{H3xhpVeR!3 zAC&Ir-A+^We)j~azNP_B z?Lt!tsLIm=;15HRZiD0DH{*_Lqb0llhCUHUc(PItW~)}6ZVz7XDp7Jq=9@^iOJ(X* z?|UNYcXBIpr#D-3nclNMeGIm*^RO31-;O-D&&)mk56c%2v?@a-1MsE8AE++fZ`GRq zN+RGpVz30OY}x#ZttO6`z}8f;9KeCXTtsS->gz2mddMfkd*PdQr;>F8zfcrm><6)f zUUjc++vNufEOyxVc$;F&FZkfNxs(algD^q6kKiy4Uh9w>E3Wg($zI3!jt;%Qh$Vb1 zPE&CYSQJXF3Eu*>+<{<<#7>FnUzVWXsfEbWfn0)rZB)=a98$eGaAm^}kT1>Vz;PI0=f*`<3)|(*8L*VRS(A z^MS1JsA(0BP)8v5?4L*pZ>RN-c!tQhj}-<;)xb$sq`ApX_^4Q(pp-aFG`yt%tGRZ( zCqSuGG(l;jOFlz8NK8mid6vk=r~s_q!yAN^A=EhcZ~x_Pb`>I6@dF zUgb7XlfPU=_ZW<_(Ot(fK#ka?s|_!0oaBtCd#4#q6;Q(BCJ>BXiS8>8S91+>qDOqQ z#!~(GXpw!G&O(tE8*3ODnq|9fIP;LRU1#L9C6W})d#EpAuiw)`Chw>}4>e;5%NyB! hz`97HD^e9dn~v;I(Vlo@d|ClNCw)lXGOr8Q{vV=h4j=#k From a6bd0b47a5955008ef76eecdc0b2ec9acc7dd40c Mon Sep 17 00:00:00 2001 From: Nicolas Patry Date: Fri, 29 Dec 2023 10:17:52 +0100 Subject: [PATCH 06/30] Fix the CI. --- .github/workflows/ci_cuda.yaml | 2 ++ .github/workflows/rust-ci.yml | 2 ++ 2 files changed, 4 insertions(+) diff --git a/.github/workflows/ci_cuda.yaml b/.github/workflows/ci_cuda.yaml index ec792a25..0767e839 100644 --- a/.github/workflows/ci_cuda.yaml +++ b/.github/workflows/ci_cuda.yaml @@ -8,6 +8,8 @@ jobs: start-runner: name: Start self-hosted EC2 runner runs-on: ubuntu-latest + # Don't run on forks, they won't have access to secrets anyway. + if: ${{ github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }} env: AWS_REGION: us-east-1 EC2_AMI_ID: ami-03cfed9ea28f4b002 diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index 2ca53b23..2809aa58 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -40,6 +40,8 @@ jobs: profile: minimal toolchain: ${{ matrix.rust }} override: true + - name: Setup tmate session + uses: mxschmitt/action-tmate@v3 - uses: actions-rs/cargo@v1 with: command: test From cc06ba2294374653cb61654c482513ef7f9b4c88 Mon Sep 17 00:00:00 2001 From: Baye Dieng Date: Fri, 29 Dec 2023 09:46:24 +0000 Subject: [PATCH 07/30] fix bad pattern matching and function name --- candle-core/src/metal_backend.rs | 4 ++-- candle-metal-kernels/src/lib.rs | 2 +- candle-metal-kernels/src/unary.metal | 6 +++--- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index 48b58e76..6ba60063 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -648,7 +648,7 @@ impl BackendStorage for MetalStorage { ("uceil", DType::F32) => contiguous::ceil::FLOAT, ("ufloor", DType::F32) => contiguous::floor::FLOAT, ("uround", DType::F32) => contiguous::round::FLOAT, - ("urecip", DType::F32) => contiguous::round::FLOAT, + ("urecip", DType::F32) => contiguous::recip::FLOAT, ("utanh", DType::F32) => contiguous::tanh::FLOAT, ("ucos", DType::F16) => contiguous::cos::HALF, ("usin", DType::F16) => contiguous::sin::HALF, @@ -663,7 +663,7 @@ impl BackendStorage for MetalStorage { ("uceil", DType::F16) => contiguous::ceil::HALF, ("ufloor", DType::F16) => contiguous::floor::HALF, ("uround", DType::F16) => contiguous::round::HALF, - ("urecip", DType::F16) => contiguous::round::HALF, + ("urecip", DType::F16) => contiguous::recip::HALF, ("utanh", DType::F16) => contiguous::tanh::HALF, (name, dtype) => crate::bail!("Match {name} - {dtype:?}"), }; diff --git a/candle-metal-kernels/src/lib.rs b/candle-metal-kernels/src/lib.rs index e3f9397e..94479882 100644 --- a/candle-metal-kernels/src/lib.rs +++ b/candle-metal-kernels/src/lib.rs @@ -165,7 +165,7 @@ macro_rules! ops{ } pub mod unary { - ops!(cos, sin, exp, sqr, sqrt, neg, log, gelu, ceil, floor, round, erf, gelu_erf, tanh, urecip); + ops!(cos, sin, exp, sqr, sqrt, neg, log, gelu, ceil, floor, round, erf, gelu_erf, tanh, recip); } pub mod binary { ops!(add, sub, mul, div, min, max, eq, ne, le, lt, ge, gt); diff --git a/candle-metal-kernels/src/unary.metal b/candle-metal-kernels/src/unary.metal index 46a2b0fe..826b9045 100644 --- a/candle-metal-kernels/src/unary.metal +++ b/candle-metal-kernels/src/unary.metal @@ -19,7 +19,7 @@ METAL_FUNC uint get_strided_index( } template METAL_FUNC T sqr(T in){ return in * in; } -template METAL_FUNC T urecip(T in){ return T(1.0 / in); } +template METAL_FUNC T recip(T in){ return T(1.0 / in); } template METAL_FUNC T neg(T in){ return -in; } template METAL_FUNC T erf(T in){ @@ -108,7 +108,7 @@ UNARY_OP(round) UNARY_OP(gelu_erf) UNARY_OP(erf) UNARY_OP(tanh) -UNARY_OP(urecip) +UNARY_OP(recip) UNARY(id, float, copy_f32, copy_f32_strided) UNARY(id, half, copy_f16, copy_f16_strided) @@ -130,7 +130,7 @@ BFLOAT_UNARY_OP(round) BFLOAT_UNARY_OP(gelu_erf) BFLOAT_UNARY_OP(erf) BFLOAT_UNARY_OP(tanh) -BFLOAT_UNARY_OP(urecip) +BFLOAT_UNARY_OP(recip) UNARY(id, bfloat, copy_bf16, copy_bf16_strided) #endif From 5b12fbb1433f09a3aeee530420dae284719d96e9 Mon Sep 17 00:00:00 2001 From: Nicolas Patry Date: Fri, 29 Dec 2023 11:13:33 +0100 Subject: [PATCH 08/30] Trying to fix flakyness by making hub_2 and hub_3 serial tests (potential issue on mingw with mmap). --- .github/workflows/rust-ci.yml | 2 -- candle-book/src/lib.rs | 8 ++++---- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/.github/workflows/rust-ci.yml b/.github/workflows/rust-ci.yml index 2809aa58..2ca53b23 100644 --- a/.github/workflows/rust-ci.yml +++ b/.github/workflows/rust-ci.yml @@ -40,8 +40,6 @@ jobs: profile: minimal toolchain: ${{ matrix.rust }} override: true - - name: Setup tmate session - uses: mxschmitt/action-tmate@v3 - uses: actions-rs/cargo@v1 with: command: test diff --git a/candle-book/src/lib.rs b/candle-book/src/lib.rs index a1ec1e94..576ea7f2 100644 --- a/candle-book/src/lib.rs +++ b/candle-book/src/lib.rs @@ -43,11 +43,11 @@ let mmap = unsafe { Mmap::map(&file).unwrap() }; let weights = candle::safetensors::load_buffer(&mmap[..], &Device::Cpu).unwrap(); // ANCHOR_END: book_hub_2 assert_eq!(weights.len(), 206); - } + // } - #[rustfmt::skip] - #[test] - fn book_hub_3() { + // #[rustfmt::skip] + // #[test] + // fn book_hub_3() { // ANCHOR: book_hub_3 use candle::{DType, Device, Tensor}; use hf_hub::api::sync::Api; From d76ac20e0e84a2ed098f50d8aed3def686ec9311 Mon Sep 17 00:00:00 2001 From: Nicolas Patry Date: Fri, 29 Dec 2023 12:06:38 +0100 Subject: [PATCH 09/30] Fix. --- candle-book/src/lib.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/candle-book/src/lib.rs b/candle-book/src/lib.rs index 576ea7f2..f8ca510d 100644 --- a/candle-book/src/lib.rs +++ b/candle-book/src/lib.rs @@ -28,6 +28,7 @@ let weights = candle::safetensors::load(weights_filename, &Device::Cpu).unwrap() #[rustfmt::skip] #[test] fn book_hub_2() { + { // ANCHOR: book_hub_2 use candle::Device; use hf_hub::api::sync::Api; @@ -43,11 +44,12 @@ let mmap = unsafe { Mmap::map(&file).unwrap() }; let weights = candle::safetensors::load_buffer(&mmap[..], &Device::Cpu).unwrap(); // ANCHOR_END: book_hub_2 assert_eq!(weights.len(), 206); - // } + } // #[rustfmt::skip] // #[test] // fn book_hub_3() { + { // ANCHOR: book_hub_3 use candle::{DType, Device, Tensor}; use hf_hub::api::sync::Api; @@ -102,6 +104,7 @@ let tp_tensor = Tensor::from_raw_buffer(&raw, dtype, &tp_shape, &Device::Cpu).un assert_eq!(view.shape(), &[768, 768]); assert_eq!(tp_tensor.dims(), &[192, 768]); } +} #[rustfmt::skip] #[test] From 4907c63ea1deb4ee4a5eb78b2b3f33ebc36a598e Mon Sep 17 00:00:00 2001 From: Nicolas Patry Date: Fri, 29 Dec 2023 12:12:10 +0100 Subject: [PATCH 10/30] Ignore stop on remote forks. --- .github/workflows/ci_cuda.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci_cuda.yaml b/.github/workflows/ci_cuda.yaml index 0767e839..c67475f2 100644 --- a/.github/workflows/ci_cuda.yaml +++ b/.github/workflows/ci_cuda.yaml @@ -72,7 +72,7 @@ jobs: runs-on: ubuntu-latest env: AWS_REGION: us-east-1 - if: ${{ always() }} # required to stop the runner even if the error happened in the previous jobs + if: ${{ always() && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }} # required to stop the runner even if the error happened in the previous jobs steps: - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 From adc95ca2bf6f165b4d5045a791e56de83d71d7b4 Mon Sep 17 00:00:00 2001 From: Nicolas Patry Date: Fri, 29 Dec 2023 12:15:57 +0100 Subject: [PATCH 11/30] Ignore skipped. --- .github/workflows/ci_cuda.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci_cuda.yaml b/.github/workflows/ci_cuda.yaml index c67475f2..02814ed7 100644 --- a/.github/workflows/ci_cuda.yaml +++ b/.github/workflows/ci_cuda.yaml @@ -72,7 +72,7 @@ jobs: runs-on: ubuntu-latest env: AWS_REGION: us-east-1 - if: ${{ always() && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }} # required to stop the runner even if the error happened in the previous jobs + if: ${{ (success() || failure()) && github.event.pull_request.head.repo.full_name == github.event.pull_request.base.repo.full_name }} # required to stop the runner even if the error happened in the previous jobs steps: - name: Configure AWS credentials uses: aws-actions/configure-aws-credentials@v1 From 4373534d59d3a6357aef0b3f35a247f695f4700a Mon Sep 17 00:00:00 2001 From: Gonzalo <456459+grzuy@users.noreply.github.com> Date: Fri, 29 Dec 2023 15:42:50 -0300 Subject: [PATCH 12/30] Metal: i64 basic support (#1495) * Adds basic metal i64 support * metal copy i64 --- candle-core/src/metal_backend.rs | 35 ++++++++++++++++++++++++++ candle-metal-kernels/src/binary.metal | 21 ++++++++++++++++ candle-metal-kernels/src/cast.metal | 6 +++++ candle-metal-kernels/src/lib.rs | 4 +++ candle-metal-kernels/src/reduce.metal | 9 +++++++ candle-metal-kernels/src/ternary.metal | 5 +++- candle-metal-kernels/src/unary.metal | 4 +++ 7 files changed, 83 insertions(+), 1 deletion(-) diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index 9abbda6e..76577992 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -532,6 +532,11 @@ impl BackendStorage for MetalStorage { (ReduceOp::Max, DType::BF16) => ("fast_max_bf16_strided", true, false), (ReduceOp::ArgMin, DType::BF16) => ("fast_argmin_bf16_strided", true, true), (ReduceOp::ArgMax, DType::BF16) => ("fast_argmax_bf16_strided", true, true), + (ReduceOp::Sum, DType::I64) => ("fast_sum_i64_strided", false, false), + (ReduceOp::Min, DType::I64) => ("fast_min_i64_strided", true, false), + (ReduceOp::Max, DType::I64) => ("fast_max_i64_strided", true, false), + (ReduceOp::ArgMin, DType::I64) => ("fast_argmin_i64_strided", true, true), + (ReduceOp::ArgMax, DType::I64) => ("fast_argmax_i64_strided", true, true), (k, dtype) => crate::bail!("Metal reduce op {k:?} {dtype:?} not implemented"), }; if check_empty && layout.shape().elem_count() == 0 { @@ -579,10 +584,13 @@ impl BackendStorage for MetalStorage { let kernel_name = match (self.dtype, dtype) { (DType::U32, DType::F32) => "cast_u32_f32", (DType::U32, DType::U8) => "cast_u32_u8", + (DType::U32, DType::I64) => "cast_u32_i64", (DType::U8, DType::U32) => "cast_u8_u32", (DType::U8, DType::F32) => "cast_u8_f32", + (DType::U8, DType::I64) => "cast_u8_i64", (DType::F32, DType::F16) => "cast_f32_f16", (DType::F16, DType::F32) => "cast_f16_f32", + (DType::I64, DType::F32) => "cast_i64_f32", (left, right) => { crate::bail!("Metal contiguous to_dtype {left:?} {right:?} not implemented") } @@ -602,10 +610,13 @@ impl BackendStorage for MetalStorage { let kernel_name = match (self.dtype, dtype) { (DType::U32, DType::F32) => "cast_u32_f32_strided", (DType::U32, DType::U8) => "cast_u32_u8_strided", + (DType::U32, DType::I64) => "cast_u32_i64_strided", (DType::U8, DType::U32) => "cast_u8_u32_strided", (DType::U8, DType::F32) => "cast_u8_f32_strided", + (DType::U8, DType::I64) => "cast_u8_i64_strided", (DType::F32, DType::F16) => "cast_f32_f16_strided", (DType::F16, DType::F32) => "cast_f16_f32_strided", + (DType::I64, DType::F32) => "cast_i64_f32_strided", (left, right) => { crate::bail!("Metal strided to_dtype {left:?} {right:?} not implemented") } @@ -767,6 +778,7 @@ impl BackendStorage for MetalStorage { let name = match (self.dtype, t.dtype()) { (DType::U8, DType::F32) => "where_u8_f32", (DType::U8, DType::F16) => "where_u8_f16", + (DType::U8, DType::I64) => "where_u8_i64", (left, right) => crate::bail!("Metal where_cond {left:?} {right:?} not implemented"), }; candle_metal_kernels::call_where_cond_strided( @@ -1226,6 +1238,7 @@ impl BackendStorage for MetalStorage { DType::F32 => candle_metal_kernels::unary::strided::copy::FLOAT, DType::F16 => candle_metal_kernels::unary::strided::copy::HALF, DType::BF16 => candle_metal_kernels::unary::strided::copy::BFLOAT, + DType::I64 => candle_metal_kernels::unary::strided::copy::I64, DType::U32 => candle_metal_kernels::unary::strided::copy::U32, DType::U8 => candle_metal_kernels::unary::strided::copy::U8, dtype => crate::bail!("Metal copy_strided {dtype:?} not implemented"), @@ -1300,6 +1313,16 @@ impl MetalStorage { ("lt", DType::F16) => (contiguous::lt::HALF, DType::U8), ("ge", DType::F16) => (contiguous::ge::HALF, DType::U8), ("gt", DType::F16) => (contiguous::gt::HALF, DType::U8), + ("add", DType::I64) => (contiguous::add::I64, self.dtype), + ("sub", DType::I64) => (contiguous::sub::I64, self.dtype), + ("mul", DType::I64) => (contiguous::mul::I64, self.dtype), + ("div", DType::I64) => (contiguous::div::I64, self.dtype), + ("eq", DType::I64) => (contiguous::eq::I64, DType::U8), + ("ne", DType::I64) => (contiguous::ne::I64, DType::U8), + ("le", DType::I64) => (contiguous::le::I64, DType::U8), + ("lt", DType::I64) => (contiguous::lt::I64, DType::U8), + ("ge", DType::I64) => (contiguous::ge::I64, DType::U8), + ("gt", DType::I64) => (contiguous::gt::I64, DType::U8), (name, dtype) => { crate::bail!("Metal contiguous binary {name} {dtype:?} not implemented") } @@ -1345,6 +1368,18 @@ impl MetalStorage { ("lt", DType::F16) => (strided::lt::HALF, DType::U8), ("ge", DType::F16) => (strided::ge::HALF, DType::U8), ("gt", DType::F16) => (strided::gt::HALF, DType::U8), + ("badd", DType::I64) => (strided::add::I64, self.dtype), + ("bsub", DType::I64) => (strided::sub::I64, self.dtype), + ("bmul", DType::I64) => (strided::mul::I64, self.dtype), + ("bdiv", DType::I64) => (strided::div::I64, self.dtype), + ("bminimum", DType::I64) => (strided::min::I64, self.dtype), + ("bmaximum", DType::I64) => (strided::max::I64, self.dtype), + ("eq", DType::I64) => (strided::eq::I64, DType::U8), + ("ne", DType::I64) => (strided::ne::I64, DType::U8), + ("le", DType::I64) => (strided::le::I64, DType::U8), + ("lt", DType::I64) => (strided::lt::I64, DType::U8), + ("ge", DType::I64) => (strided::ge::I64, DType::U8), + ("gt", DType::I64) => (strided::gt::I64, DType::U8), (name, dtype) => { crate::bail!("Metal strided binary {name} {dtype:?} not implemented") } diff --git a/candle-metal-kernels/src/binary.metal b/candle-metal-kernels/src/binary.metal index 8c3b4a8c..30c90ff1 100644 --- a/candle-metal-kernels/src/binary.metal +++ b/candle-metal-kernels/src/binary.metal @@ -58,6 +58,9 @@ kernel void FN_NAME_STRIDED( \ BINARY(FN, float, float, NAME##_f32, NAME##_f32_strided); \ BINARY(FN, half, half, NAME##_f16, NAME##_f16_strided); +#define INT64_BINARY_OP(NAME, FN) \ +BINARY(FN, int64_t, int64_t, NAME##_i64, NAME##_i64_strided); + #define BFLOAT_BINARY_OP(FN, NAME) \ BINARY(FN, bfloat, bfloat, NAME##_bf16, NAME##_bf16_strided); @@ -65,6 +68,8 @@ BINARY(FN, bfloat, bfloat, NAME##_bf16, NAME##_bf16_strided); BINARY(FN, float, uint8_t, NAME##_f32, NAME##_f32_strided); \ BINARY(FN, half, uint8_t, NAME##_f16, NAME##_f16_strided); +#define INT64_BINARY_OP_OUT(NAME, FN) \ +BINARY(FN, int64_t, int8_t, NAME##_i64, NAME##_i64_strided); BINARY_OP(x + y, add) BINARY_OP(x - y, sub) @@ -80,6 +85,22 @@ BINARY_OP_OUT(lt, x < y) BINARY_OP_OUT(ge, x >= y) BINARY_OP_OUT(gt, x > y) +#if __METAL_VERSION__ >= 220 +INT64_BINARY_OP(add, x + y) +INT64_BINARY_OP(sub, x - y) +INT64_BINARY_OP(mul, x * y) +INT64_BINARY_OP(div, x / y) +INT64_BINARY_OP(min, MIN(x, y)) +INT64_BINARY_OP(max, MAX(x, y)) + +INT64_BINARY_OP_OUT(eq, x == y) +INT64_BINARY_OP_OUT(ne, x != y) +INT64_BINARY_OP_OUT(le, x <= y) +INT64_BINARY_OP_OUT(lt, x < y) +INT64_BINARY_OP_OUT(ge, x >= y) +INT64_BINARY_OP_OUT(gt, x > y) +#endif + #if __METAL_VERSION__ >= 310 BFLOAT_BINARY_OP(x + y, add) BFLOAT_BINARY_OP(x - y, sub) diff --git a/candle-metal-kernels/src/cast.metal b/candle-metal-kernels/src/cast.metal index 8481389d..3baefcc2 100644 --- a/candle-metal-kernels/src/cast.metal +++ b/candle-metal-kernels/src/cast.metal @@ -52,5 +52,11 @@ CAST(cast_u8_f32, cast_u8_f32_strided, uint8_t, float) CAST(cast_f16_f32, cast_f16_f32_strided, half, float) CAST(cast_f32_f16, cast_f32_f16_strided, float, half) +#if __METAL_VERSION__ >= 220 +CAST(cast_u8_i64, cast_u8_i64_strided, uint8_t, int64_t) +CAST(cast_u32_i64, cast_u32_i64_strided, uint32_t, int64_t) +CAST(cast_i64_f32, cast_i64_f32_strided, int64_t, float) +#endif + #if __METAL_VERSION__ >= 310 #endif diff --git a/candle-metal-kernels/src/lib.rs b/candle-metal-kernels/src/lib.rs index 94479882..7b0084d9 100644 --- a/candle-metal-kernels/src/lib.rs +++ b/candle-metal-kernels/src/lib.rs @@ -130,6 +130,7 @@ macro_rules! ops{ pub const FLOAT: Kernel = Kernel(concat!(stringify!($name), "_f32")); pub const HALF: Kernel = Kernel(concat!(stringify!($name), "_f16")); pub const BFLOAT: Kernel = Kernel(concat!(stringify!($name), "_bf16")); + pub const I64: Kernel = Kernel(concat!(stringify!($name), "_i64")); } )+ pub mod copy { @@ -137,6 +138,7 @@ macro_rules! ops{ pub const FLOAT: Kernel = Kernel("copy_f32"); pub const HALF: Kernel = Kernel("copy_f16"); pub const BFLOAT: Kernel = Kernel("copy_bf16"); + pub const I64: Kernel = Kernel("copy_i64"); pub const U32: Kernel = Kernel("copy_u32"); pub const U8: Kernel = Kernel("copy_u8"); } @@ -150,6 +152,7 @@ macro_rules! ops{ pub const FLOAT: Kernel = Kernel(concat!(stringify!($name), "_f32_strided")); pub const HALF: Kernel = Kernel(concat!(stringify!($name), "_f16_strided")); pub const BFLOAT: Kernel = Kernel(concat!(stringify!($name), "_bf16_strided")); + pub const I64: Kernel = Kernel(concat!(stringify!($name), "_i64_strided")); } )+ pub mod copy { @@ -157,6 +160,7 @@ macro_rules! ops{ pub const FLOAT: Kernel = Kernel("copy_f32_strided"); pub const HALF: Kernel = Kernel("copy_f16_strided"); pub const BFLOAT: Kernel = Kernel("copy_bf16_strided"); + pub const I64: Kernel = Kernel("copy_i64_strided"); pub const U32: Kernel = Kernel("copy_u32_strided"); pub const U8: Kernel = Kernel("copy_u8_strided"); } diff --git a/candle-metal-kernels/src/reduce.metal b/candle-metal-kernels/src/reduce.metal index 2d584917..38252967 100644 --- a/candle-metal-kernels/src/reduce.metal +++ b/candle-metal-kernels/src/reduce.metal @@ -281,6 +281,15 @@ ARGMAX(fast_argmax_u32_strided, uint, 0) SOFTMAX(softmax_f32, float) SOFTMAX(softmax_f16, half) + +#if __METAL_VERSION__ >= 220 +REDUCE(x + y, fast_sum_i64_strided, int64_t, 0) +REDUCE(MIN(x, y), fast_min_i64_strided, int64_t, INT_MAX) +REDUCE(MAX(x, y), fast_max_i64_strided, int64_t, INT_MIN) +ARGMIN(fast_argmin_i64_strided, int64_t, INT_MAX) +ARGMAX(fast_argmax_i64_strided, int64_t, INT_MIN) +#endif + #if __METAL_VERSION__ >= 310 REDUCE(x + y, fast_sum_bf16, bfloat, 0) REDUCE(x * y, fast_mul_bf16, bfloat, 1) diff --git a/candle-metal-kernels/src/ternary.metal b/candle-metal-kernels/src/ternary.metal index 1f9cb38a..dfa0dd12 100644 --- a/candle-metal-kernels/src/ternary.metal +++ b/candle-metal-kernels/src/ternary.metal @@ -57,4 +57,7 @@ WHERE_OP(float, uint8_t, where_u8_f32) // WHERE_OP(double, uint8_t, where_u8_f64) // WHERE_OP(uint8_t, uint8_t, where_u8_u8) // WHERE_OP(uint32_t, uint8_t, where_u8_u32) -// WHERE_OP(int64_t, uint8_t, where_u8_i64) + +#if __METAL_VERSION__ >= 220 +WHERE_OP(int64_t, uint8_t, where_u8_i64) +#endif diff --git a/candle-metal-kernels/src/unary.metal b/candle-metal-kernels/src/unary.metal index 826b9045..15d1e400 100644 --- a/candle-metal-kernels/src/unary.metal +++ b/candle-metal-kernels/src/unary.metal @@ -115,6 +115,10 @@ UNARY(id, half, copy_f16, copy_f16_strided) UNARY(id, uint8_t, copy_u8, copy_u8_strided) UNARY(id, uint32_t, copy_u32, copy_u32_strided) +#if __METAL_VERSION__ >= 220 +UNARY(id, int64_t, copy_i64, copy_i64_strided) +#endif + #if __METAL_VERSION__ >= 310 BFLOAT_UNARY_OP(cos) BFLOAT_UNARY_OP(sin) From 87d7f81b438db6a1696f2ac79606b40e61d448e8 Mon Sep 17 00:00:00 2001 From: Gonzalo <456459+grzuy@users.noreply.github.com> Date: Fri, 29 Dec 2023 19:56:21 -0300 Subject: [PATCH 13/30] Metal: more u8/u32 (#1502) * Adds more metal u8 * Metal: more u32 --- candle-core/src/metal_backend.rs | 51 ++++++++++++++++++++++++++ candle-metal-kernels/src/binary.metal | 8 +++- candle-metal-kernels/src/lib.rs | 4 ++ candle-metal-kernels/src/reduce.metal | 5 +++ candle-metal-kernels/src/ternary.metal | 4 +- 5 files changed, 68 insertions(+), 4 deletions(-) diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index 76577992..7a22595e 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -537,6 +537,11 @@ impl BackendStorage for MetalStorage { (ReduceOp::Max, DType::I64) => ("fast_max_i64_strided", true, false), (ReduceOp::ArgMin, DType::I64) => ("fast_argmin_i64_strided", true, true), (ReduceOp::ArgMax, DType::I64) => ("fast_argmax_i64_strided", true, true), + (ReduceOp::Sum, DType::U8) => ("fast_sum_u8_strided", false, false), + (ReduceOp::Min, DType::U8) => ("fast_min_u8_strided", true, false), + (ReduceOp::Max, DType::U8) => ("fast_max_u8_strided", true, false), + (ReduceOp::ArgMin, DType::U8) => ("fast_argmin_u8_strided", true, true), + (ReduceOp::ArgMax, DType::U8) => ("fast_argmax_u8_strided", true, true), (k, dtype) => crate::bail!("Metal reduce op {k:?} {dtype:?} not implemented"), }; if check_empty && layout.shape().elem_count() == 0 { @@ -779,6 +784,8 @@ impl BackendStorage for MetalStorage { (DType::U8, DType::F32) => "where_u8_f32", (DType::U8, DType::F16) => "where_u8_f16", (DType::U8, DType::I64) => "where_u8_i64", + (DType::U8, DType::U32) => "where_u8_u32", + (DType::U8, DType::U8) => "where_u8_u8", (left, right) => crate::bail!("Metal where_cond {left:?} {right:?} not implemented"), }; candle_metal_kernels::call_where_cond_strided( @@ -1323,6 +1330,26 @@ impl MetalStorage { ("lt", DType::I64) => (contiguous::lt::I64, DType::U8), ("ge", DType::I64) => (contiguous::ge::I64, DType::U8), ("gt", DType::I64) => (contiguous::gt::I64, DType::U8), + ("add", DType::U32) => (contiguous::add::U32, self.dtype), + ("sub", DType::U32) => (contiguous::sub::U32, self.dtype), + ("mul", DType::U32) => (contiguous::mul::U32, self.dtype), + ("div", DType::U32) => (contiguous::div::U32, self.dtype), + ("eq", DType::U32) => (contiguous::eq::U32, DType::U8), + ("ne", DType::U32) => (contiguous::ne::U32, DType::U8), + ("le", DType::U32) => (contiguous::le::U32, DType::U8), + ("lt", DType::U32) => (contiguous::lt::U32, DType::U8), + ("ge", DType::U32) => (contiguous::ge::U32, DType::U8), + ("gt", DType::U32) => (contiguous::gt::U32, DType::U8), + ("add", DType::U8) => (contiguous::add::U8, self.dtype), + ("sub", DType::U8) => (contiguous::sub::U8, self.dtype), + ("mul", DType::U8) => (contiguous::mul::U8, self.dtype), + ("div", DType::U8) => (contiguous::div::U8, self.dtype), + ("eq", DType::U8) => (contiguous::eq::U8, DType::U8), + ("ne", DType::U8) => (contiguous::ne::U8, DType::U8), + ("le", DType::U8) => (contiguous::le::U8, DType::U8), + ("lt", DType::U8) => (contiguous::lt::U8, DType::U8), + ("ge", DType::U8) => (contiguous::ge::U8, DType::U8), + ("gt", DType::U8) => (contiguous::gt::U8, DType::U8), (name, dtype) => { crate::bail!("Metal contiguous binary {name} {dtype:?} not implemented") } @@ -1380,6 +1407,30 @@ impl MetalStorage { ("lt", DType::I64) => (strided::lt::I64, DType::U8), ("ge", DType::I64) => (strided::ge::I64, DType::U8), ("gt", DType::I64) => (strided::gt::I64, DType::U8), + ("badd", DType::U32) => (strided::add::U32, self.dtype), + ("bsub", DType::U32) => (strided::sub::U32, self.dtype), + ("bmul", DType::U32) => (strided::mul::U32, self.dtype), + ("bdiv", DType::U32) => (strided::div::U32, self.dtype), + ("bminimum", DType::U32) => (strided::min::U32, self.dtype), + ("bmaximum", DType::U32) => (strided::max::U32, self.dtype), + ("eq", DType::U32) => (strided::eq::U32, DType::U8), + ("ne", DType::U32) => (strided::ne::U32, DType::U8), + ("le", DType::U32) => (strided::le::U32, DType::U8), + ("lt", DType::U32) => (strided::lt::U32, DType::U8), + ("ge", DType::U32) => (strided::ge::U32, DType::U8), + ("gt", DType::U32) => (strided::gt::U32, DType::U8), + ("badd", DType::U8) => (strided::add::U8, self.dtype), + ("bsub", DType::U8) => (strided::sub::U8, self.dtype), + ("bmul", DType::U8) => (strided::mul::U8, self.dtype), + ("bdiv", DType::U8) => (strided::div::U8, self.dtype), + ("bminimum", DType::U8) => (strided::min::U8, self.dtype), + ("bmaximum", DType::U8) => (strided::max::U8, self.dtype), + ("eq", DType::U8) => (strided::eq::U8, DType::U8), + ("ne", DType::U8) => (strided::ne::U8, DType::U8), + ("le", DType::U8) => (strided::le::U8, DType::U8), + ("lt", DType::U8) => (strided::lt::U8, DType::U8), + ("ge", DType::U8) => (strided::ge::U8, DType::U8), + ("gt", DType::U8) => (strided::gt::U8, DType::U8), (name, dtype) => { crate::bail!("Metal strided binary {name} {dtype:?} not implemented") } diff --git a/candle-metal-kernels/src/binary.metal b/candle-metal-kernels/src/binary.metal index 30c90ff1..cdc8fef8 100644 --- a/candle-metal-kernels/src/binary.metal +++ b/candle-metal-kernels/src/binary.metal @@ -56,7 +56,9 @@ kernel void FN_NAME_STRIDED( \ #define BINARY_OP(FN, NAME) \ BINARY(FN, float, float, NAME##_f32, NAME##_f32_strided); \ -BINARY(FN, half, half, NAME##_f16, NAME##_f16_strided); +BINARY(FN, half, half, NAME##_f16, NAME##_f16_strided); \ +BINARY(FN, uint32_t, uint32_t, NAME##_u32, NAME##_u32_strided); \ +BINARY(FN, uint8_t, uint8_t, NAME##_u8, NAME##_u8_strided); #define INT64_BINARY_OP(NAME, FN) \ BINARY(FN, int64_t, int64_t, NAME##_i64, NAME##_i64_strided); @@ -66,7 +68,9 @@ BINARY(FN, bfloat, bfloat, NAME##_bf16, NAME##_bf16_strided); #define BINARY_OP_OUT(NAME, FN) \ BINARY(FN, float, uint8_t, NAME##_f32, NAME##_f32_strided); \ -BINARY(FN, half, uint8_t, NAME##_f16, NAME##_f16_strided); +BINARY(FN, half, uint8_t, NAME##_f16, NAME##_f16_strided); \ +BINARY(FN, uint32_t, uint8_t, NAME##_u32, NAME##_u32_strided); \ +BINARY(FN, uint8_t, uint8_t, NAME##_u8, NAME##_u8_strided); #define INT64_BINARY_OP_OUT(NAME, FN) \ BINARY(FN, int64_t, int8_t, NAME##_i64, NAME##_i64_strided); diff --git a/candle-metal-kernels/src/lib.rs b/candle-metal-kernels/src/lib.rs index 7b0084d9..d080ef52 100644 --- a/candle-metal-kernels/src/lib.rs +++ b/candle-metal-kernels/src/lib.rs @@ -131,6 +131,8 @@ macro_rules! ops{ pub const HALF: Kernel = Kernel(concat!(stringify!($name), "_f16")); pub const BFLOAT: Kernel = Kernel(concat!(stringify!($name), "_bf16")); pub const I64: Kernel = Kernel(concat!(stringify!($name), "_i64")); + pub const U32: Kernel = Kernel(concat!(stringify!($name), "_u32")); + pub const U8: Kernel = Kernel(concat!(stringify!($name), "_u8")); } )+ pub mod copy { @@ -153,6 +155,8 @@ macro_rules! ops{ pub const HALF: Kernel = Kernel(concat!(stringify!($name), "_f16_strided")); pub const BFLOAT: Kernel = Kernel(concat!(stringify!($name), "_bf16_strided")); pub const I64: Kernel = Kernel(concat!(stringify!($name), "_i64_strided")); + pub const U32: Kernel = Kernel(concat!(stringify!($name), "_u32_strided")); + pub const U8: Kernel = Kernel(concat!(stringify!($name), "_u8_strided")); } )+ pub mod copy { diff --git a/candle-metal-kernels/src/reduce.metal b/candle-metal-kernels/src/reduce.metal index 38252967..83a56f0a 100644 --- a/candle-metal-kernels/src/reduce.metal +++ b/candle-metal-kernels/src/reduce.metal @@ -263,21 +263,26 @@ kernel void NAME( REDUCE(x + y, fast_sum_f32_strided, float, 0) REDUCE(x + y, fast_sum_u32_strided, uint, 0) REDUCE(x + y, fast_sum_f16_strided, half, 0) +REDUCE(x + y, fast_sum_u8_strided, uint8_t, 0) REDUCE(x * y, fast_mul_f32_strided, float, 1) REDUCE(x * y, fast_mul_u32_strided, uint, 1) REDUCE(x * y, fast_mul_f16_strided, half, 1) REDUCE(MAX(x, y), fast_max_f32_strided, float, -HUGE_VALF) REDUCE(MAX(x, y), fast_max_u32_strided, uint, 0) REDUCE(MAX(x, y), fast_max_f16_strided, half, -HUGE_VALH) +REDUCE(MAX(x, y), fast_max_u8_strided, uint8_t, 0) REDUCE(MIN(x, y), fast_min_f32_strided, float, HUGE_VALF) REDUCE(MIN(x, y), fast_min_u32_strided, uint, 0xFFFFFFFF) REDUCE(MIN(x, y), fast_min_f16_strided, half, HUGE_VALH) +REDUCE(MIN(x, y), fast_min_u8_strided, uint8_t, 0xFF) ARGMIN(fast_argmin_f32_strided, float, HUGE_VALF) ARGMIN(fast_argmin_f16_strided, half, HUGE_VALH) ARGMIN(fast_argmin_u32_strided, uint, 0xFFFFFFFF) +ARGMIN(fast_argmin_u8_strided, uint8_t, 0xFF) ARGMAX(fast_argmax_f32_strided, float, -HUGE_VALF) ARGMAX(fast_argmax_f16_strided, half, -HUGE_VALH) ARGMAX(fast_argmax_u32_strided, uint, 0) +ARGMAX(fast_argmax_u8_strided, uint8_t, 0) SOFTMAX(softmax_f32, float) SOFTMAX(softmax_f16, half) diff --git a/candle-metal-kernels/src/ternary.metal b/candle-metal-kernels/src/ternary.metal index dfa0dd12..40b4bcf4 100644 --- a/candle-metal-kernels/src/ternary.metal +++ b/candle-metal-kernels/src/ternary.metal @@ -55,8 +55,8 @@ kernel void FN_NAME( \ WHERE_OP(float, uint8_t, where_u8_f32) // WHERE_OP(double, uint8_t, where_u8_f64) -// WHERE_OP(uint8_t, uint8_t, where_u8_u8) -// WHERE_OP(uint32_t, uint8_t, where_u8_u32) +WHERE_OP(uint8_t, uint8_t, where_u8_u8) +WHERE_OP(uint32_t, uint8_t, where_u8_u32) #if __METAL_VERSION__ >= 220 WHERE_OP(int64_t, uint8_t, where_u8_i64) From 0a245e6fa46c16f332555a58271dbd49a8058a9c Mon Sep 17 00:00:00 2001 From: Gonzalo <456459+grzuy@users.noreply.github.com> Date: Fri, 29 Dec 2023 20:00:12 -0300 Subject: [PATCH 14/30] Metal: support unary abs (#1503) * Metal: support unary abs * cargo fmt --- candle-core/src/metal_backend.rs | 4 ++++ candle-metal-kernels/src/lib.rs | 5 ++++- candle-metal-kernels/src/unary.metal | 1 + 3 files changed, 9 insertions(+), 1 deletion(-) diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index 7a22595e..e168c24b 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -665,6 +665,7 @@ impl BackendStorage for MetalStorage { ("ugelu", DType::F32) => contiguous::gelu::FLOAT, ("ugelu_erf", DType::F32) => contiguous::gelu_erf::FLOAT, ("uerf", DType::F32) => contiguous::erf::FLOAT, + ("uabs", DType::F32) => contiguous::abs::FLOAT, ("uceil", DType::F32) => contiguous::ceil::FLOAT, ("ufloor", DType::F32) => contiguous::floor::FLOAT, ("uround", DType::F32) => contiguous::round::FLOAT, @@ -680,6 +681,7 @@ impl BackendStorage for MetalStorage { ("ugelu", DType::F16) => contiguous::gelu::HALF, ("ugelu_erf", DType::F16) => contiguous::gelu_erf::HALF, ("uerf", DType::F16) => contiguous::erf::HALF, + ("uabs", DType::F16) => contiguous::abs::HALF, ("uceil", DType::F16) => contiguous::ceil::HALF, ("ufloor", DType::F16) => contiguous::floor::HALF, ("uround", DType::F16) => contiguous::round::HALF, @@ -712,6 +714,7 @@ impl BackendStorage for MetalStorage { ("ugelu", DType::F32) => strided::gelu::FLOAT, ("ugelu_erf", DType::F32) => strided::gelu_erf::FLOAT, ("uerf", DType::F32) => strided::erf::FLOAT, + ("uabs", DType::F32) => strided::abs::FLOAT, ("uceil", DType::F32) => strided::ceil::FLOAT, ("ufloor", DType::F32) => strided::floor::FLOAT, ("uround", DType::F32) => strided::round::FLOAT, @@ -725,6 +728,7 @@ impl BackendStorage for MetalStorage { ("ugelu", DType::F16) => strided::gelu::HALF, ("ugelu_erf", DType::F16) => strided::gelu_erf::HALF, ("uerf", DType::F16) => strided::erf::HALF, + ("uabs", DType::F16) => strided::abs::HALF, ("uceil", DType::F16) => strided::ceil::HALF, ("ufloor", DType::F16) => strided::floor::HALF, ("uround", DType::F16) => strided::round::HALF, diff --git a/candle-metal-kernels/src/lib.rs b/candle-metal-kernels/src/lib.rs index d080ef52..5d34f61a 100644 --- a/candle-metal-kernels/src/lib.rs +++ b/candle-metal-kernels/src/lib.rs @@ -173,7 +173,10 @@ macro_rules! ops{ } pub mod unary { - ops!(cos, sin, exp, sqr, sqrt, neg, log, gelu, ceil, floor, round, erf, gelu_erf, tanh, recip); + ops!( + cos, sin, exp, sqr, sqrt, neg, log, gelu, abs, ceil, floor, round, erf, gelu_erf, tanh, + recip + ); } pub mod binary { ops!(add, sub, mul, div, min, max, eq, ne, le, lt, ge, gt); diff --git a/candle-metal-kernels/src/unary.metal b/candle-metal-kernels/src/unary.metal index 15d1e400..7fbb613d 100644 --- a/candle-metal-kernels/src/unary.metal +++ b/candle-metal-kernels/src/unary.metal @@ -102,6 +102,7 @@ UNARY_OP(neg) UNARY_OP(exp) UNARY_OP(log) UNARY_OP(gelu) +UNARY_OP(abs) UNARY_OP(ceil) UNARY_OP(floor) UNARY_OP(round) From 51e577a682ab9497d6022b4080f3b54bbbd75f1b Mon Sep 17 00:00:00 2001 From: s-casci Date: Sat, 30 Dec 2023 09:01:29 +0100 Subject: [PATCH 15/30] Add Policy Gradient to Reinforcement Learning examples (#1500) * added policy_gradient, modified main, ddpg and README * fixed typo in README * removed unnecessary imports * small refactor * Use clap for picking up the subcommand to run. --------- Co-authored-by: Laurent --- .../examples/reinforcement-learning/README.md | 11 +- .../examples/reinforcement-learning/ddpg.rs | 105 +++++++++++++ .../examples/reinforcement-learning/main.rs | 137 ++-------------- .../reinforcement-learning/policy_gradient.rs | 146 ++++++++++++++++++ 4 files changed, 275 insertions(+), 124 deletions(-) create mode 100644 candle-examples/examples/reinforcement-learning/policy_gradient.rs diff --git a/candle-examples/examples/reinforcement-learning/README.md b/candle-examples/examples/reinforcement-learning/README.md index 2d3d14b0..28819067 100644 --- a/candle-examples/examples/reinforcement-learning/README.md +++ b/candle-examples/examples/reinforcement-learning/README.md @@ -8,9 +8,16 @@ Python package with: pip install "gymnasium[accept-rom-license]" ``` -In order to run the example, use the following command. Note the additional +In order to run the examples, use the following commands. Note the additional `--package` flag to ensure that there is no conflict with the `candle-pyo3` crate. + +For the Policy Gradient example: ```bash -cargo run --example reinforcement-learning --features=pyo3 --package candle-examples +cargo run --example reinforcement-learning --features=pyo3 --package candle-examples -- pg +``` + +For the Deep Deterministic Policy Gradient example: +```bash +cargo run --example reinforcement-learning --features=pyo3 --package candle-examples -- ddpg ``` diff --git a/candle-examples/examples/reinforcement-learning/ddpg.rs b/candle-examples/examples/reinforcement-learning/ddpg.rs index c6d72fed..1ce4889e 100644 --- a/candle-examples/examples/reinforcement-learning/ddpg.rs +++ b/candle-examples/examples/reinforcement-learning/ddpg.rs @@ -8,6 +8,8 @@ use candle_nn::{ }; use rand::{distributions::Uniform, thread_rng, Rng}; +use super::gym_env::GymEnv; + pub struct OuNoise { mu: f64, theta: f64, @@ -449,3 +451,106 @@ impl DDPG<'_> { Ok(()) } } + +// The impact of the q value of the next state on the current state's q value. +const GAMMA: f64 = 0.99; +// The weight for updating the target networks. +const TAU: f64 = 0.005; +// The capacity of the replay buffer used for sampling training data. +const REPLAY_BUFFER_CAPACITY: usize = 100_000; +// The training batch size for each training iteration. +const TRAINING_BATCH_SIZE: usize = 100; +// The total number of episodes. +const MAX_EPISODES: usize = 100; +// The maximum length of an episode. +const EPISODE_LENGTH: usize = 200; +// The number of training iterations after one episode finishes. +const TRAINING_ITERATIONS: usize = 200; + +// Ornstein-Uhlenbeck process parameters. +const MU: f64 = 0.0; +const THETA: f64 = 0.15; +const SIGMA: f64 = 0.1; + +const ACTOR_LEARNING_RATE: f64 = 1e-4; +const CRITIC_LEARNING_RATE: f64 = 1e-3; + +pub fn run() -> Result<()> { + let env = GymEnv::new("Pendulum-v1")?; + println!("action space: {}", env.action_space()); + println!("observation space: {:?}", env.observation_space()); + + let size_state = env.observation_space().iter().product::(); + let size_action = env.action_space(); + + let mut agent = DDPG::new( + &Device::Cpu, + size_state, + size_action, + true, + ACTOR_LEARNING_RATE, + CRITIC_LEARNING_RATE, + GAMMA, + TAU, + REPLAY_BUFFER_CAPACITY, + OuNoise::new(MU, THETA, SIGMA, size_action)?, + )?; + + let mut rng = rand::thread_rng(); + + for episode in 0..MAX_EPISODES { + // let mut state = env.reset(episode as u64)?; + let mut state = env.reset(rng.gen::())?; + + let mut total_reward = 0.0; + for _ in 0..EPISODE_LENGTH { + let mut action = 2.0 * agent.actions(&state)?; + action = action.clamp(-2.0, 2.0); + + let step = env.step(vec![action])?; + total_reward += step.reward; + + agent.remember( + &state, + &Tensor::new(vec![action], &Device::Cpu)?, + &Tensor::new(vec![step.reward as f32], &Device::Cpu)?, + &step.state, + step.terminated, + step.truncated, + ); + + if step.terminated || step.truncated { + break; + } + state = step.state; + } + + println!("episode {episode} with total reward of {total_reward}"); + + for _ in 0..TRAINING_ITERATIONS { + agent.train(TRAINING_BATCH_SIZE)?; + } + } + + println!("Testing..."); + agent.train = false; + for episode in 0..10 { + // let mut state = env.reset(episode as u64)?; + let mut state = env.reset(rng.gen::())?; + let mut total_reward = 0.0; + for _ in 0..EPISODE_LENGTH { + let mut action = 2.0 * agent.actions(&state)?; + action = action.clamp(-2.0, 2.0); + + let step = env.step(vec![action])?; + total_reward += step.reward; + + if step.terminated || step.truncated { + break; + } + state = step.state; + } + println!("episode {episode} with total reward of {total_reward}"); + } + Ok(()) +} diff --git a/candle-examples/examples/reinforcement-learning/main.rs b/candle-examples/examples/reinforcement-learning/main.rs index 96d7102d..e87afae2 100644 --- a/candle-examples/examples/reinforcement-learning/main.rs +++ b/candle-examples/examples/reinforcement-learning/main.rs @@ -6,139 +6,32 @@ extern crate intel_mkl_src; #[cfg(feature = "accelerate")] extern crate accelerate_src; +use candle::Result; +use clap::{Parser, Subcommand}; + mod gym_env; mod vec_gym_env; mod ddpg; +mod policy_gradient; -use candle::{Device, Result, Tensor}; -use clap::Parser; -use rand::Rng; - -// The impact of the q value of the next state on the current state's q value. -const GAMMA: f64 = 0.99; -// The weight for updating the target networks. -const TAU: f64 = 0.005; -// The capacity of the replay buffer used for sampling training data. -const REPLAY_BUFFER_CAPACITY: usize = 100_000; -// The training batch size for each training iteration. -const TRAINING_BATCH_SIZE: usize = 100; -// The total number of episodes. -const MAX_EPISODES: usize = 100; -// The maximum length of an episode. -const EPISODE_LENGTH: usize = 200; -// The number of training iterations after one episode finishes. -const TRAINING_ITERATIONS: usize = 200; - -// Ornstein-Uhlenbeck process parameters. -const MU: f64 = 0.0; -const THETA: f64 = 0.15; -const SIGMA: f64 = 0.1; - -const ACTOR_LEARNING_RATE: f64 = 1e-4; -const CRITIC_LEARNING_RATE: f64 = 1e-3; - -#[derive(Parser, Debug, Clone)] -#[command(author, version, about, long_about = None)] +#[derive(Parser)] struct Args { - /// Run on CPU rather than on GPU. - #[arg(long)] - cpu: bool, + #[command(subcommand)] + command: Command, +} - /// Enable tracing (generates a trace-timestamp.json file). - #[arg(long)] - tracing: bool, +#[derive(Subcommand)] +enum Command { + Pg, + Ddpg, } fn main() -> Result<()> { - use tracing_chrome::ChromeLayerBuilder; - use tracing_subscriber::prelude::*; - let args = Args::parse(); - - let _guard = if args.tracing { - let (chrome_layer, guard) = ChromeLayerBuilder::new().build(); - tracing_subscriber::registry().with(chrome_layer).init(); - Some(guard) - } else { - None - }; - - let env = gym_env::GymEnv::new("Pendulum-v1")?; - println!("action space: {}", env.action_space()); - println!("observation space: {:?}", env.observation_space()); - - let size_state = env.observation_space().iter().product::(); - let size_action = env.action_space(); - - let mut agent = ddpg::DDPG::new( - &Device::Cpu, - size_state, - size_action, - true, - ACTOR_LEARNING_RATE, - CRITIC_LEARNING_RATE, - GAMMA, - TAU, - REPLAY_BUFFER_CAPACITY, - ddpg::OuNoise::new(MU, THETA, SIGMA, size_action)?, - )?; - - let mut rng = rand::thread_rng(); - - for episode in 0..MAX_EPISODES { - // let mut state = env.reset(episode as u64)?; - let mut state = env.reset(rng.gen::())?; - - let mut total_reward = 0.0; - for _ in 0..EPISODE_LENGTH { - let mut action = 2.0 * agent.actions(&state)?; - action = action.clamp(-2.0, 2.0); - - let step = env.step(vec![action])?; - total_reward += step.reward; - - agent.remember( - &state, - &Tensor::new(vec![action], &Device::Cpu)?, - &Tensor::new(vec![step.reward as f32], &Device::Cpu)?, - &step.state, - step.terminated, - step.truncated, - ); - - if step.terminated || step.truncated { - break; - } - state = step.state; - } - - println!("episode {episode} with total reward of {total_reward}"); - - for _ in 0..TRAINING_ITERATIONS { - agent.train(TRAINING_BATCH_SIZE)?; - } - } - - println!("Testing..."); - agent.train = false; - for episode in 0..10 { - // let mut state = env.reset(episode as u64)?; - let mut state = env.reset(rng.gen::())?; - let mut total_reward = 0.0; - for _ in 0..EPISODE_LENGTH { - let mut action = 2.0 * agent.actions(&state)?; - action = action.clamp(-2.0, 2.0); - - let step = env.step(vec![action])?; - total_reward += step.reward; - - if step.terminated || step.truncated { - break; - } - state = step.state; - } - println!("episode {episode} with total reward of {total_reward}"); + match args.command { + Command::Pg => policy_gradient::run()?, + Command::Ddpg => ddpg::run()?, } Ok(()) } diff --git a/candle-examples/examples/reinforcement-learning/policy_gradient.rs b/candle-examples/examples/reinforcement-learning/policy_gradient.rs new file mode 100644 index 00000000..044cbfcd --- /dev/null +++ b/candle-examples/examples/reinforcement-learning/policy_gradient.rs @@ -0,0 +1,146 @@ +use super::gym_env::{GymEnv, Step}; +use candle::{DType, Device, Error, Module, Result, Tensor}; +use candle_nn::{ + linear, ops::log_softmax, ops::softmax, sequential::seq, Activation, AdamW, Optimizer, + ParamsAdamW, VarBuilder, VarMap, +}; +use rand::{distributions::Distribution, rngs::ThreadRng, Rng}; + +fn new_model( + input_shape: &[usize], + num_actions: usize, + dtype: DType, + device: &Device, +) -> Result<(impl Module, VarMap)> { + let input_size = input_shape.iter().product(); + + let mut varmap = VarMap::new(); + let var_builder = VarBuilder::from_varmap(&varmap, dtype, device); + + let model = seq() + .add(linear(input_size, 32, var_builder.pp("lin1"))?) + .add(Activation::Relu) + .add(linear(32, num_actions, var_builder.pp("lin2"))?); + + Ok((model, varmap)) +} + +fn accumulate_rewards(steps: &[Step]) -> Vec { + let mut rewards: Vec = steps.iter().map(|s| s.reward).collect(); + let mut acc_reward = 0f64; + for (i, reward) in rewards.iter_mut().enumerate().rev() { + if steps[i].terminated { + acc_reward = 0.0; + } + acc_reward += *reward; + *reward = acc_reward; + } + rewards +} + +fn weighted_sample(probs: Vec, rng: &mut ThreadRng) -> Result { + let distribution = rand::distributions::WeightedIndex::new(probs).map_err(Error::wrap)?; + let mut rng = rng; + Ok(distribution.sample(&mut rng)) +} + +pub fn run() -> Result<()> { + let env = GymEnv::new("CartPole-v1")?; + + println!("action space: {:?}", env.action_space()); + println!("observation space: {:?}", env.observation_space()); + + let (model, varmap) = new_model( + env.observation_space(), + env.action_space(), + DType::F32, + &Device::Cpu, + )?; + + let optimizer_params = ParamsAdamW { + lr: 0.01, + weight_decay: 0.01, + ..Default::default() + }; + + let mut optimizer = AdamW::new(varmap.all_vars(), optimizer_params)?; + + let mut rng = rand::thread_rng(); + + for epoch_idx in 0..100 { + let mut state = env.reset(rng.gen::())?; + let mut steps: Vec> = vec![]; + + loop { + let action = { + let action_probs: Vec = + softmax(&model.forward(&state.detach()?.unsqueeze(0)?)?, 1)? + .squeeze(0)? + .to_vec1()?; + weighted_sample(action_probs, &mut rng)? as i64 + }; + + let step = env.step(action)?; + steps.push(step.copy_with_obs(&state)); + + if step.terminated || step.truncated { + state = env.reset(rng.gen::())?; + if steps.len() > 5000 { + break; + } + } else { + state = step.state; + } + } + + let total_reward: f64 = steps.iter().map(|s| s.reward).sum(); + let episodes: i64 = steps + .iter() + .map(|s| (s.terminated || s.truncated) as i64) + .sum(); + println!( + "epoch: {:<3} episodes: {:<5} avg reward per episode: {:.2}", + epoch_idx, + episodes, + total_reward / episodes as f64 + ); + + let batch_size = steps.len(); + + let rewards = Tensor::from_vec(accumulate_rewards(&steps), batch_size, &Device::Cpu)? + .to_dtype(DType::F32)? + .detach()?; + + let actions_mask = { + let actions: Vec = steps.iter().map(|s| s.action).collect(); + let actions_mask: Vec = actions + .iter() + .map(|&action| { + // One-hot encoding + let mut action_mask = vec![0.0; env.action_space()]; + action_mask[action as usize] = 1.0; + + Tensor::from_vec(action_mask, env.action_space(), &Device::Cpu) + .unwrap() + .to_dtype(DType::F32) + .unwrap() + }) + .collect(); + Tensor::stack(&actions_mask, 0)?.detach()? + }; + + let states = { + let states: Vec = steps.into_iter().map(|s| s.state).collect(); + Tensor::stack(&states, 0)?.detach()? + }; + + let log_probs = actions_mask + .mul(&log_softmax(&model.forward(&states)?, 1)?)? + .sum(1)?; + + let loss = rewards.mul(&log_probs)?.neg()?.mean_all()?; + optimizer.backward_step(&loss)?; + } + + Ok(()) +} From 4290b8124479fd0ac2c2eedf0cf8c65dcee4a702 Mon Sep 17 00:00:00 2001 From: nkoppel Date: Sat, 30 Dec 2023 15:42:08 +0000 Subject: [PATCH 16/30] [Breaking] Add training to batchnorm with exponential moving average (#1504) * Add training to batchnorm with exponential moving average * Add more checks to batch norm * Resolve some review comments * Add with_momentum varients of `new` methods * Add check for range of momentum variable; update batch norm test * Run cargo fmt * Add back num_features parameter * Format; tiny simplification --- candle-nn/src/batch_norm.rs | 208 ++++++++++++++++++++++++++-------- candle-nn/tests/batch_norm.rs | 11 ++ 2 files changed, 169 insertions(+), 50 deletions(-) diff --git a/candle-nn/src/batch_norm.rs b/candle-nn/src/batch_norm.rs index 8cfc6740..2b415e90 100644 --- a/candle-nn/src/batch_norm.rs +++ b/candle-nn/src/batch_norm.rs @@ -7,15 +7,22 @@ //! running stats. //! //! [`Batch Normalization`]: https://arxiv.org/abs/1502.03167 -use candle::{DType, Result, Tensor}; +use crate::Init; +use candle::{DType, Module, Result, Tensor, Var}; #[derive(Debug, Clone, Copy, PartialEq)] pub struct BatchNormConfig { pub eps: f64, pub remove_mean: bool, + /// The meaning of affine here is different from LayerNorm: when false there is no learnable /// parameter at all, 1 used for gamma and 0 for beta. pub affine: bool, + + /// Controls exponential moving average of running stats. Defaults to 0.1 + /// + /// `running_stat * (1.0 - momentum) + stat * momentum`. + pub momentum: f64, } impl Default for BatchNormConfig { @@ -24,6 +31,7 @@ impl Default for BatchNormConfig { eps: 1e-5, remove_mean: true, affine: true, + momentum: 0.1, } } } @@ -32,23 +40,62 @@ impl From for BatchNormConfig { fn from(eps: f64) -> Self { Self { eps, - remove_mean: true, - affine: true, + ..Default::default() } } } #[derive(Clone, Debug)] pub struct BatchNorm { - running_mean: Tensor, - running_var: Tensor, + running_mean: Var, + running_var: Var, weight_and_bias: Option<(Tensor, Tensor)>, remove_mean: bool, eps: f64, - num_features: usize, + momentum: f64, } impl BatchNorm { + fn check_validity(&self, num_features: usize) -> Result<()> { + if self.eps < 0. { + candle::bail!("batch-norm eps cannot be negative {}", self.eps) + } + if !(0.0..=1.0).contains(&self.momentum) { + candle::bail!( + "batch-norm momentum must be between 0 and 1, is {}", + self.momentum + ) + } + if self.running_mean.dims() != [num_features] { + candle::bail!( + "batch-norm running mean has unexpected shape {:?} should have shape [{num_features}]", + self.running_mean.shape(), + ) + } + if self.running_var.dims() != [num_features] { + candle::bail!( + "batch-norm running variance has unexpected shape {:?} should have shape [{num_features}]", + self.running_var.shape(), + ) + } + if let Some((ref weight, ref bias)) = self.weight_and_bias.as_ref() { + if weight.dims() != [num_features] { + candle::bail!( + "batch-norm weight has unexpected shape {:?} should have shape [{num_features}]", + weight.shape(), + ) + } + if bias.dims() != [num_features] { + candle::bail!( + "batch-norm weight has unexpected shape {:?} should have shape [{num_features}]", + bias.shape(), + ) + } + } + + Ok(()) + } + pub fn new( num_features: usize, running_mean: Tensor, @@ -57,29 +104,16 @@ impl BatchNorm { bias: Tensor, eps: f64, ) -> Result { - if eps < 0. { - candle::bail!("batch-norm eps cannot be negative {eps}") - } - if weight.dims() != [num_features] { - candle::bail!( - "batch-norm unexpected weight shape {:?} {num_features}", - weight.shape() - ) - } - if bias.dims() != [num_features] { - candle::bail!( - "batch-norm unexpected bias shape {:?} {num_features}", - bias.shape() - ) - } - Ok(Self { - running_mean, - running_var, + let out = Self { + running_mean: Var::from_tensor(&running_mean)?, + running_var: Var::from_tensor(&running_var)?, weight_and_bias: Some((weight, bias)), remove_mean: true, eps, - num_features, - }) + momentum: 0.1, + }; + out.check_validity(num_features)?; + Ok(out) } pub fn new_no_bias( @@ -88,25 +122,64 @@ impl BatchNorm { running_var: Tensor, eps: f64, ) -> Result { - if eps < 0. { - candle::bail!("batch-norm eps cannot be negative {eps}") - } - Ok(Self { - running_mean, - running_var, + let out = Self { + running_mean: Var::from_tensor(&running_mean)?, + running_var: Var::from_tensor(&running_var)?, weight_and_bias: None, remove_mean: true, eps, - num_features, - }) + momentum: 0.1, + }; + out.check_validity(num_features)?; + Ok(out) + } + + pub fn new_with_momentum( + num_features: usize, + running_mean: Tensor, + running_var: Tensor, + weight: Tensor, + bias: Tensor, + eps: f64, + momentum: f64, + ) -> Result { + let out = Self { + running_mean: Var::from_tensor(&running_mean)?, + running_var: Var::from_tensor(&running_var)?, + weight_and_bias: Some((weight, bias)), + remove_mean: true, + eps, + momentum, + }; + out.check_validity(num_features)?; + Ok(out) + } + + pub fn new_no_bias_with_momentum( + num_features: usize, + running_mean: Tensor, + running_var: Tensor, + eps: f64, + momentum: f64, + ) -> Result { + let out = Self { + running_mean: Var::from_tensor(&running_mean)?, + running_var: Var::from_tensor(&running_var)?, + weight_and_bias: None, + remove_mean: true, + eps, + momentum, + }; + out.check_validity(num_features)?; + Ok(out) } pub fn running_mean(&self) -> &Tensor { - &self.running_mean + self.running_mean.as_tensor() } pub fn running_var(&self) -> &Tensor { - &self.running_var + self.running_var.as_tensor() } pub fn eps(&self) -> f64 { @@ -117,7 +190,12 @@ impl BatchNorm { self.weight_and_bias.as_ref().map(|v| (&v.0, &v.1)) } + pub fn momentum(&self) -> f64 { + self.momentum + } + pub fn forward_learning(&self, x: &Tensor) -> Result { + let num_features = self.running_mean.as_tensor().dim(0)?; let x_dtype = x.dtype(); let internal_dtype = match x_dtype { DType::F16 | DType::BF16 => DType::F32, @@ -129,11 +207,11 @@ impl BatchNorm { x.shape() ) } - if x.dim(1)? != self.num_features { + if x.dim(1)? != num_features { candle::bail!( "batch-norm input doesn't have the expected number of features ({:?} <> {})", x.shape(), - self.num_features + num_features ) } let x = x.to_dtype(internal_dtype)?; @@ -142,26 +220,52 @@ impl BatchNorm { let x = x.flatten_from(1)?.contiguous()?; let x = if self.remove_mean { let mean_x = x.mean_keepdim(1)?; + { + // Update running mean + let new_mean = ((self.running_mean.as_tensor() * (1.0 - self.momentum))? + + (mean_x.flatten_all()? * self.momentum)?)?; + + self.running_mean.set(&new_mean)?; + } x.broadcast_sub(&mean_x)? } else { x }; let norm_x = x.sqr()?.mean_keepdim(1)?; + { + // Update running variance + let batch_size = x.dim(1)? as f64; + let running_var_weight = 1.0 - self.momentum; + let norm_x_weight = self.momentum * batch_size / (batch_size - 1.0); + + let new_var = ((self.running_var.as_tensor() * running_var_weight)? + + (&norm_x.flatten_all()? * norm_x_weight)?)?; + + self.running_var.set(&new_var)?; + } let x_normed = x.broadcast_div(&(norm_x + self.eps)?.sqrt()?)?; let x = x_normed.to_dtype(x_dtype)?; let x = match &self.weight_and_bias { None => x, Some((weight, bias)) => { - let weight = weight.reshape((self.num_features, 1))?; - let bias = bias.reshape((self.num_features, 1))?; + let weight = weight.reshape(((), 1))?; + let bias = bias.reshape(((), 1))?; x.broadcast_mul(&weight)?.broadcast_add(&bias)? } }; x.reshape(x_dims_post_transpose)?.transpose(0, 1) } + + pub fn forward_t(&self, x: &Tensor, train: bool) -> Result { + if train { + self.forward_learning(x) + } else { + self.forward(x) + } + } } -impl crate::Module for BatchNorm { +impl Module for BatchNorm { fn forward(&self, x: &Tensor) -> Result { let target_shape: Vec = x .dims() @@ -170,9 +274,13 @@ impl crate::Module for BatchNorm { .map(|(idx, v)| if idx == 1 { *v } else { 1 }) .collect(); let target_shape = target_shape.as_slice(); + let x = x - .broadcast_sub(&self.running_mean.reshape(target_shape)?)? - .broadcast_div(&(self.running_var.reshape(target_shape)? + self.eps)?.sqrt()?)?; + .broadcast_sub(&self.running_mean.as_tensor().reshape(target_shape)?)? + .broadcast_div( + &(self.running_var.as_tensor().reshape(target_shape)? + self.eps)?.sqrt()?, + )?; + match &self.weight_and_bias { None => Ok(x), Some((weight, bias)) => { @@ -193,21 +301,21 @@ pub fn batch_norm>( if config.eps < 0. { candle::bail!("batch-norm eps cannot be negative {}", config.eps) } - let running_mean = vb.get_with_hints(num_features, "running_mean", crate::Init::Const(0.))?; - let running_var = vb.get_with_hints(num_features, "running_var", crate::Init::Const(1.))?; + let running_mean = vb.get_with_hints(num_features, "running_mean", Init::Const(0.))?; + let running_var = vb.get_with_hints(num_features, "running_var", Init::Const(1.))?; let weight_and_bias = if config.affine { - let weight = vb.get_with_hints(num_features, "weight", crate::Init::Const(1.))?; - let bias = vb.get_with_hints(num_features, "bias", crate::Init::Const(0.))?; + let weight = vb.get_with_hints(num_features, "weight", Init::Const(1.))?; + let bias = vb.get_with_hints(num_features, "bias", Init::Const(0.))?; Some((weight, bias)) } else { None }; Ok(BatchNorm { - running_mean, - running_var, + running_mean: Var::from_tensor(&running_mean)?, + running_var: Var::from_tensor(&running_var)?, weight_and_bias, remove_mean: config.remove_mean, eps: config.eps, - num_features, + momentum: config.momentum, }) } diff --git a/candle-nn/tests/batch_norm.rs b/candle-nn/tests/batch_norm.rs index 5bbaf238..73a38545 100644 --- a/candle-nn/tests/batch_norm.rs +++ b/candle-nn/tests/batch_norm.rs @@ -16,6 +16,8 @@ input = torch.randn(2, 5, 3, 4) output = m(input) print(input.flatten()) print(output.flatten()) +print(m.running_mean) +print(m.running_var) */ #[test] fn batch_norm() -> Result<()> { @@ -71,5 +73,14 @@ fn batch_norm() -> Result<()> { let diff2 = ((output2 - (output * 0.5)?)? + 1.5)?.sqr()?; let sum_diff2 = diff2.sum_keepdim(0)?; assert_eq!(test_utils::to_vec1_round(&sum_diff2, 4)?, &[0f32]); + + assert_eq!( + test_utils::to_vec1_round(bn.running_mean(), 4)?, + &[-0.0133, 0.0197, -0.0153, -0.0073, -0.0020] + ); + assert_eq!( + test_utils::to_vec1_round(bn.running_var(), 4)?, + &[0.9972, 0.9842, 0.9956, 0.9866, 0.9898] + ); Ok(()) } From a0facd0e67b546215ea62b53dc28a1cb2e6dcd47 Mon Sep 17 00:00:00 2001 From: Laurent Mazare Date: Sat, 30 Dec 2023 17:06:07 +0100 Subject: [PATCH 17/30] Small tweaks to batch-norm. (#1505) --- candle-nn/src/batch_norm.rs | 35 ++++++++++++++++------------------- 1 file changed, 16 insertions(+), 19 deletions(-) diff --git a/candle-nn/src/batch_norm.rs b/candle-nn/src/batch_norm.rs index 2b415e90..1782e47a 100644 --- a/candle-nn/src/batch_norm.rs +++ b/candle-nn/src/batch_norm.rs @@ -7,7 +7,6 @@ //! running stats. //! //! [`Batch Normalization`]: https://arxiv.org/abs/1502.03167 -use crate::Init; use candle::{DType, Module, Result, Tensor, Var}; #[derive(Debug, Clone, Copy, PartialEq)] @@ -92,7 +91,6 @@ impl BatchNorm { ) } } - Ok(()) } @@ -217,34 +215,32 @@ impl BatchNorm { let x = x.to_dtype(internal_dtype)?; let x = x.transpose(0, 1)?; let x_dims_post_transpose = x.dims(); + // Flatten all the dimensions exception the channel one as this performs a Spatial Batch + // Normalization. let x = x.flatten_from(1)?.contiguous()?; let x = if self.remove_mean { + // The mean is taken over dim 1 as this is the batch dim after the transpose(0, 1) above. let mean_x = x.mean_keepdim(1)?; - { - // Update running mean - let new_mean = ((self.running_mean.as_tensor() * (1.0 - self.momentum))? - + (mean_x.flatten_all()? * self.momentum)?)?; - - self.running_mean.set(&new_mean)?; - } + let updated_running_mean = ((self.running_mean.as_tensor() * (1.0 - self.momentum))? + + (mean_x.flatten_all()? * self.momentum)?)?; + self.running_mean.set(&updated_running_mean)?; x.broadcast_sub(&mean_x)? } else { x }; + // The mean is taken over dim 1 as this is the batch dim after the transpose(0, 1) above. let norm_x = x.sqr()?.mean_keepdim(1)?; - { - // Update running variance + let updated_running_var = { let batch_size = x.dim(1)? as f64; let running_var_weight = 1.0 - self.momentum; let norm_x_weight = self.momentum * batch_size / (batch_size - 1.0); - - let new_var = ((self.running_var.as_tensor() * running_var_weight)? - + (&norm_x.flatten_all()? * norm_x_weight)?)?; - - self.running_var.set(&new_var)?; - } - let x_normed = x.broadcast_div(&(norm_x + self.eps)?.sqrt()?)?; - let x = x_normed.to_dtype(x_dtype)?; + ((self.running_var.as_tensor() * running_var_weight)? + + (&norm_x.flatten_all()? * norm_x_weight)?)? + }; + self.running_var.set(&updated_running_var)?; + let x = x + .broadcast_div(&(norm_x + self.eps)?.sqrt()?)? + .to_dtype(x_dtype)?; let x = match &self.weight_and_bias { None => x, Some((weight, bias)) => { @@ -297,6 +293,7 @@ pub fn batch_norm>( config: C, vb: crate::VarBuilder, ) -> Result { + use crate::Init; let config = config.into(); if config.eps < 0. { candle::bail!("batch-norm eps cannot be negative {}", config.eps) From 1fb2dd905cb49ce99b7a7c31f5d0809382bc12f3 Mon Sep 17 00:00:00 2001 From: Laurent Mazare Date: Sun, 31 Dec 2023 12:18:25 +0100 Subject: [PATCH 18/30] Add support for tiny-llama-1.1b. (#1512) --- candle-examples/examples/llama/main.rs | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/candle-examples/examples/llama/main.rs b/candle-examples/examples/llama/main.rs index c2ed0e25..46f474bb 100644 --- a/candle-examples/examples/llama/main.rs +++ b/candle-examples/examples/llama/main.rs @@ -33,6 +33,8 @@ enum Which { V2, #[value(name = "solar-10.7b")] Solar10_7B, + #[value(name = "tiny-llama-1.1b-chat")] + TinyLlama1_1BChat, } #[derive(Parser, Debug)] @@ -124,6 +126,7 @@ fn main() -> Result<()> { Which::V1 => "Narsil/amall-7b".to_string(), Which::V2 => "meta-llama/Llama-2-7b-hf".to_string(), Which::Solar10_7B => "upstage/SOLAR-10.7B-v1.0".to_string(), + Which::TinyLlama1_1BChat => "TinyLlama/TinyLlama-1.1B-Chat-v1.0".to_string(), }); println!("loading the model weights from {model_id}"); let revision = args.revision.unwrap_or("main".to_string()); @@ -134,8 +137,12 @@ fn main() -> Result<()> { let config: LlamaConfig = serde_json::from_slice(&std::fs::read(config_filename)?)?; let config = config.into_config(args.use_flash_attn); - let filenames = - candle_examples::hub_load_safetensors(&api, "model.safetensors.index.json")?; + let filenames = match args.which { + Which::V1 | Which::V2 | Which::Solar10_7B => { + candle_examples::hub_load_safetensors(&api, "model.safetensors.index.json")? + } + Which::TinyLlama1_1BChat => vec![api.get("model.safetensors")?], + }; println!("building the model"); let cache = model::Cache::new(!args.no_kv_cache, dtype, &config, &device)?; From b0fe5e4453bacc1aecf0049eaa424c39eb1771d4 Mon Sep 17 00:00:00 2001 From: Laurent Mazare Date: Mon, 1 Jan 2024 10:13:13 +0100 Subject: [PATCH 19/30] Do not implement Module for BatchNorm. (#1513) --- candle-examples/examples/yolo-v3/darknet.rs | 2 +- candle-nn/src/batch_norm.rs | 26 +++++++++---------- candle-nn/tests/batch_norm.rs | 4 +-- candle-transformers/src/models/convmixer.rs | 6 ++--- .../src/models/efficientnet.rs | 3 +-- candle-transformers/src/models/resnet.rs | 16 ++++++------ .../src/models/segment_anything/tiny_vit.rs | 2 +- .../src/models/wuerstchen/paella_vq.rs | 2 +- candle-wasm-examples/yolo/src/model.rs | 3 +-- 9 files changed, 31 insertions(+), 33 deletions(-) diff --git a/candle-examples/examples/yolo-v3/darknet.rs b/candle-examples/examples/yolo-v3/darknet.rs index 6702618e..b1dd3127 100644 --- a/candle-examples/examples/yolo-v3/darknet.rs +++ b/candle-examples/examples/yolo-v3/darknet.rs @@ -147,7 +147,7 @@ fn conv(vb: VarBuilder, index: usize, p: usize, b: &Block) -> Result<(usize, Bl) let func = candle_nn::func(move |xs| { let xs = conv.forward(xs)?; let xs = match &bn { - Some(bn) => bn.forward(&xs)?, + Some(bn) => xs.apply_t(bn, false)?, None => xs, }; let xs = if leaky { diff --git a/candle-nn/src/batch_norm.rs b/candle-nn/src/batch_norm.rs index 1782e47a..856c2c7a 100644 --- a/candle-nn/src/batch_norm.rs +++ b/candle-nn/src/batch_norm.rs @@ -7,7 +7,7 @@ //! running stats. //! //! [`Batch Normalization`]: https://arxiv.org/abs/1502.03167 -use candle::{DType, Module, Result, Tensor, Var}; +use candle::{DType, Result, Tensor, Var}; #[derive(Debug, Clone, Copy, PartialEq)] pub struct BatchNormConfig { @@ -192,7 +192,7 @@ impl BatchNorm { self.momentum } - pub fn forward_learning(&self, x: &Tensor) -> Result { + pub fn forward_train(&self, x: &Tensor) -> Result { let num_features = self.running_mean.as_tensor().dim(0)?; let x_dtype = x.dtype(); let internal_dtype = match x_dtype { @@ -252,17 +252,7 @@ impl BatchNorm { x.reshape(x_dims_post_transpose)?.transpose(0, 1) } - pub fn forward_t(&self, x: &Tensor, train: bool) -> Result { - if train { - self.forward_learning(x) - } else { - self.forward(x) - } - } -} - -impl Module for BatchNorm { - fn forward(&self, x: &Tensor) -> Result { + fn forward_eval(&self, x: &Tensor) -> Result { let target_shape: Vec = x .dims() .iter() @@ -288,6 +278,16 @@ impl Module for BatchNorm { } } +impl crate::ModuleT for BatchNorm { + fn forward_t(&self, x: &Tensor, train: bool) -> Result { + if train { + self.forward_train(x) + } else { + self.forward_eval(x) + } + } +} + pub fn batch_norm>( num_features: usize, config: C, diff --git a/candle-nn/tests/batch_norm.rs b/candle-nn/tests/batch_norm.rs index 73a38545..6fd7361a 100644 --- a/candle-nn/tests/batch_norm.rs +++ b/candle-nn/tests/batch_norm.rs @@ -39,7 +39,7 @@ fn batch_norm() -> Result<()> { 1.4252, -0.9115, -0.1093, -0.3100, -0.6734, -1.4357, 0.9205, ]; let input = Tensor::new(&input, &Device::Cpu)?.reshape((2, 5, 3, 4))?; - let output = bn.forward_learning(&input)?; + let output = bn.forward_train(&input)?; assert_eq!(output.dims(), &[2, 5, 3, 4]); let output = output.flatten_all()?; assert_eq!( @@ -67,7 +67,7 @@ fn batch_norm() -> Result<()> { Tensor::new(&[-1.5f32], &Device::Cpu)?.broadcast_as(5)?, 1e-8, )?; - let output2 = bn2.forward_learning(&input)?; + let output2 = bn2.forward_train(&input)?; assert_eq!(output2.dims(), &[2, 5, 3, 4]); let output2 = output2.flatten_all()?; let diff2 = ((output2 - (output * 0.5)?)? + 1.5)?.sqr()?; diff --git a/candle-transformers/src/models/convmixer.rs b/candle-transformers/src/models/convmixer.rs index 76245f37..f5abfa5d 100644 --- a/candle-transformers/src/models/convmixer.rs +++ b/candle-transformers/src/models/convmixer.rs @@ -40,8 +40,8 @@ fn block(dim: usize, kernel_size: usize, vb: VarBuilder) -> Result let conv2 = candle_nn::conv2d(dim, dim, 1, Default::default(), vb.pp(1))?; let bn2 = batch_norm(dim, 1e-5, vb.pp(3))?; Ok(candle_nn::func(move |xs| { - let ys = xs.apply(&conv1)?.gelu_erf()?.apply(&bn1)?; - (xs + ys)?.apply(&conv2)?.gelu_erf()?.apply(&bn2) + let ys = xs.apply(&conv1)?.gelu_erf()?.apply_t(&bn1, false)?; + (xs + ys)?.apply(&conv2)?.gelu_erf()?.apply_t(&bn2, false) })) } @@ -64,7 +64,7 @@ fn convmixer( .collect::>>()?; let fc = candle_nn::linear(dim, nclasses, vb.pp(25))?; Ok(candle_nn::func(move |xs| { - let mut xs = xs.apply(&conv1)?.gelu_erf()?.apply(&bn1)?; + let mut xs = xs.apply(&conv1)?.gelu_erf()?.apply_t(&bn1, false)?; for block in blocks.iter() { xs = xs.apply(block)? } diff --git a/candle-transformers/src/models/efficientnet.rs b/candle-transformers/src/models/efficientnet.rs index ab51c76d..f15c9c79 100644 --- a/candle-transformers/src/models/efficientnet.rs +++ b/candle-transformers/src/models/efficientnet.rs @@ -169,8 +169,7 @@ impl ConvNormActivation { impl Module for ConvNormActivation { fn forward(&self, xs: &Tensor) -> Result { - let xs = self.conv2d.forward(xs)?; - let xs = self.bn2d.forward(&xs)?; + let xs = self.conv2d.forward(xs)?.apply_t(&self.bn2d, false)?; if self.activation { swish(&xs) } else { diff --git a/candle-transformers/src/models/resnet.rs b/candle-transformers/src/models/resnet.rs index f2588e01..30029a0b 100644 --- a/candle-transformers/src/models/resnet.rs +++ b/candle-transformers/src/models/resnet.rs @@ -25,7 +25,7 @@ fn downsample(c_in: usize, c_out: usize, stride: usize, vb: VarBuilder) -> Resul if stride != 1 || c_in != c_out { let conv = conv2d(c_in, c_out, 1, 0, stride, vb.pp(0))?; let bn = batch_norm(c_out, 1e-5, vb.pp(1))?; - Ok(Func::new(move |xs| xs.apply(&conv)?.apply(&bn))) + Ok(Func::new(move |xs| xs.apply(&conv)?.apply_t(&bn, false))) } else { Ok(Func::new(|xs| Ok(xs.clone()))) } @@ -40,10 +40,10 @@ fn basic_block(c_in: usize, c_out: usize, stride: usize, vb: VarBuilder) -> Resu Ok(Func::new(move |xs| { let ys = xs .apply(&conv1)? - .apply(&bn1)? + .apply_t(&bn1, false)? .relu()? .apply(&conv2)? - .apply(&bn2)?; + .apply_t(&bn2, false)?; (xs.apply(&downsample)? + ys)?.relu() })) } @@ -94,7 +94,7 @@ fn resnet( Ok(Func::new(move |xs| { let xs = xs .apply(&conv1)? - .apply(&bn1)? + .apply_t(&bn1, false)? .relu()? .pad_with_same(D::Minus1, 1, 1)? .pad_with_same(D::Minus2, 1, 1)? @@ -149,13 +149,13 @@ fn bottleneck_block( Ok(Func::new(move |xs| { let ys = xs .apply(&conv1)? - .apply(&bn1)? + .apply_t(&bn1, false)? .relu()? .apply(&conv2)? - .apply(&bn2)? + .apply_t(&bn2, false)? .relu()? .apply(&conv3)? - .apply(&bn3)?; + .apply_t(&bn3, false)?; (xs.apply(&downsample)? + ys)?.relu() })) } @@ -206,7 +206,7 @@ fn bottleneck_resnet( Ok(Func::new(move |xs| { let xs = xs .apply(&conv1)? - .apply(&bn1)? + .apply_t(&bn1, false)? .relu()? .pad_with_same(D::Minus1, 1, 1)? .pad_with_same(D::Minus2, 1, 1)? diff --git a/candle-transformers/src/models/segment_anything/tiny_vit.rs b/candle-transformers/src/models/segment_anything/tiny_vit.rs index cd2936ab..d1700cc5 100644 --- a/candle-transformers/src/models/segment_anything/tiny_vit.rs +++ b/candle-transformers/src/models/segment_anything/tiny_vit.rs @@ -28,7 +28,7 @@ impl Conv2dBN { impl Module for Conv2dBN { fn forward(&self, xs: &Tensor) -> Result { let _enter = self.span.enter(); - xs.apply(&self.c)?.apply(&self.bn) + xs.apply(&self.c)?.apply_t(&self.bn, false) } } diff --git a/candle-transformers/src/models/wuerstchen/paella_vq.rs b/candle-transformers/src/models/wuerstchen/paella_vq.rs index 4a69cca0..58f795bb 100644 --- a/candle-transformers/src/models/wuerstchen/paella_vq.rs +++ b/candle-transformers/src/models/wuerstchen/paella_vq.rs @@ -185,7 +185,7 @@ impl PaellaVQ { xs = xs.apply(&down_block.1)? } xs.apply(&self.down_blocks_conv)? - .apply(&self.down_blocks_bn) + .apply_t(&self.down_blocks_bn, false) } pub fn decode(&self, xs: &Tensor) -> Result { diff --git a/candle-wasm-examples/yolo/src/model.rs b/candle-wasm-examples/yolo/src/model.rs index d49cf55f..f1d7ea20 100644 --- a/candle-wasm-examples/yolo/src/model.rs +++ b/candle-wasm-examples/yolo/src/model.rs @@ -107,8 +107,7 @@ impl ConvBlock { impl Module for ConvBlock { fn forward(&self, xs: &Tensor) -> Result { - let xs = self.conv.forward(xs)?; - let xs = self.bn.forward(&xs)?; + let xs = self.conv.forward(xs)?.apply_t(&self.bn, false)?; candle_nn::ops::silu(&xs) } } From 03ce8caf40a81901f371703ffabc867a58801afe Mon Sep 17 00:00:00 2001 From: stano Date: Mon, 1 Jan 2024 12:13:35 +0200 Subject: [PATCH 20/30] Format properly the Stable Diffusion example run with params (#1511) Move out the --sd-version flag out of the prompt. --- candle-examples/examples/stable-diffusion/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/candle-examples/examples/stable-diffusion/README.md b/candle-examples/examples/stable-diffusion/README.md index feb7ca56..1d98f580 100644 --- a/candle-examples/examples/stable-diffusion/README.md +++ b/candle-examples/examples/stable-diffusion/README.md @@ -29,7 +29,7 @@ e.g.: ```bash cargo run --example stable-diffusion --release --features=cuda,cudnn \ - -- --prompt "a cosmonaut on a horse (hd, realistic, high-def) --sd-version turbo" + -- --prompt "a cosmonaut on a horse (hd, realistic, high-def)" --sd-version turbo ``` The default scheduler for the v1.5, v2.1 and XL 1.0 version is the Denoising From 41614b4a9b6af109a7c3c6d186ab6d4c30170602 Mon Sep 17 00:00:00 2001 From: Ryan Tate Date: Mon, 1 Jan 2024 02:18:40 -0800 Subject: [PATCH 21/30] Add one-hot/cold encoding (#1489) * add one-hot encoding * one_hot: improve error handling, use generic to_vecN:: Bails if the index value is equal to or greater than the depth value, which would result in an out-of-bounds error. A redundant check is added to ensure the index value does not exceed the length of the one-hot matrix size, which would also result in an out-of-bounds error. Bails if the index value is less than -1. If the index value is -1, then it ignores the setting of the on_value for the index value. Only values that are less than -1 are considered errors. * one-hot: use two generics, one_hot::, for input and output data types Separating the input and output data types allows the input tensor indices to be a different data type than the output encoded tensor data type. For example, one_hot::(...) will take an input tensor of i64 values and encode the output tensor using u8 values. The generic I::DTYPE must match the data type of the input indices, otherwise the method will bail. Additionally, this method adds an `allow_f64` option to enable the input indices data type to be f64 values. f64 values are disabled by default. TODO: indices data type and the generic I data type are currently not compile-time checked. * one_hot: remove input generic, use indices dtype matching This commit removes the to_f64() type cast and explicitly matches the DType from the input tensor. Currently, only U8, U32 and I64 is supported for input tensors. The match arms on the dtype is verbose. It would be nice to use a generic type with the WithDtype traitbound to pass to the to_vecN method and then return an inner value. Open to suggestions for better approaches here to reduce the match arm verbosity. * one_hot: use flat_map iterator over dims instead of nested for loop This commit replaces the nested for loops with an flat map iter over the dimensions of the input tensor. This commit also adds a test for a rank 3 input tensor. * one_hot: use mandatory on/off-values, remove const msgs This commit also updates doc tests, comments and test cases. * Small cleanups. --------- Co-authored-by: laurent --- candle-nn/src/encoding.rs | 293 +++++++++++++++++++++++++++++++++++++ candle-nn/src/lib.rs | 1 + candle-nn/tests/one_hot.rs | 120 +++++++++++++++ 3 files changed, 414 insertions(+) create mode 100644 candle-nn/src/encoding.rs create mode 100644 candle-nn/tests/one_hot.rs diff --git a/candle-nn/src/encoding.rs b/candle-nn/src/encoding.rs new file mode 100644 index 00000000..51cb75dd --- /dev/null +++ b/candle-nn/src/encoding.rs @@ -0,0 +1,293 @@ +//! Encoding Utilities. (e.g., one-hot/cold encoding) + +use candle::{bail, DType, Result, Tensor, WithDType}; + +/// One-hot/cold encoding. +/// +/// Given an input tensor of indices, this function returns a tensor of the same shape as the input +/// tensor with an additional dimension of the given depth size. The values in the returned tensor are +/// all set to the `off_value` except for the positions represented by the indices, which are set to the `on_value`. +/// +/// This method returns a tensor with a rank that is one rank larger than the input tensor. +/// +/// As an example, the following tensor will be encoded to a one-hot matrix: +/// +/// `[[0i64, 2], [1, -1]]` +/// +/// with a depth of 4 will be encoded to: +/// +/// `[[[1, 0, 0, 0], [0, 0, 1, 0]], [[0, 1, 0, 0], [0, 0, 0, 0]]]` +/// +/// When the input tensor index has a value of -1, the corresponding one-hot vector will be ignored, +/// resulting in a vector of values set to the `off_value`. +/// +/// +/// This method supports one-cold encoding by setting `on_value` to `0` and `off_value` to `1`. +/// By default `on_value` is `1` and `off_value` is `0`. +/// +/// Other encoding values can be used by setting `on_value` and `off_value` to the desired values. +/// +/// # Examples +/// +/// ## One-hot encoding +/// +/// ```rust +/// use candle::{Shape, Tensor, Device}; +/// use candle_nn::encoding::one_hot; +/// +/// let device = candle::Device::Cpu; +/// +/// let indices = Tensor::new(vec![vec![0i64, 2], vec![1, -1]], &device).unwrap(); +/// let depth = 4; +/// let one_hot = one_hot(indices, depth, 1f32, 0f32).unwrap(); +/// +/// let expected_matrix = [ +/// [[1.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0]], +/// [[0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 0.0]], +/// ]; +/// +/// assert_eq!(one_hot.shape(), &Shape::from((2, 2, depth))); +/// +/// let matrix = one_hot.to_vec3::().unwrap(); +/// +/// assert_eq!(matrix, expected_matrix); +///``` +/// ## One-cold Encoding +/// +/// ```rust +/// use candle::{Shape, Tensor, Device}; +/// use candle_nn::encoding::one_hot; +/// +/// +/// let device = candle::Device::Cpu; +/// let depth = 4; +/// let indices = Tensor::new(vec![vec![0u8, 2], vec![1, 3]], &device).unwrap(); +/// let one_cold = one_hot(indices, depth, 0u8, 1u8).unwrap(); +/// +/// let expected_matrix = [[[0, 1, 1, 1], [1, 1, 0, 1]], [[1, 0, 1, 1], [1, 1, 1, 0]]]; +/// +/// assert_eq!(one_cold.shape(), &Shape::from((2, 2, depth))); +/// +/// let matrix = one_cold.to_vec3::().unwrap(); +/// +/// assert_eq!(matrix, expected_matrix); +/// ``` +/// +/// +/// # Bails +/// +/// This method bails if: +/// - The input tensor has a rank greater than 3. +/// - One of the index value is less than -1. +/// - One of the index value is greater than or equal to the depth value. +/// - The input data type is not `U8`, `U32`, or `I64`. +/// +/// # API Design +/// +/// The api design for this method is loosely based on the [TensorFlow One-Hot](https://www.tensorflow.org/api_docs/python/tf/one_hot) method. +pub fn one_hot( + indices: Tensor, + depth: usize, + on_value: D, + off_value: D, +) -> Result { + let dtype = indices.dtype(); + let rank = indices.rank(); + + match rank { + 0 => { + let mut v = vec![off_value; depth]; + match dtype { + DType::U8 => { + let vi = indices.to_vec0::()?; + set_usize_value(vi as usize, 0, depth, &mut v, on_value)?; + } + DType::U32 => { + let vi = indices.to_vec0::()?; + set_usize_value(vi as usize, 0, depth, &mut v, on_value)?; + } + DType::I64 => { + let vi = indices.to_vec0::()?; + set_int64_value(vi, 0, depth, &mut v, on_value)?; + } + d => unsupported_dtype(d)?, + }; + Tensor::from_vec(v, (depth,), indices.device()) + } + 1 => { + let dim1 = indices.dims1()?; + let mut v = vec![off_value; depth * dim1]; + + match dtype { + DType::U8 => { + let indices = indices.to_vec1::()?; + for (i, &index) in indices.iter().enumerate() { + set_usize_value(index as usize, i * depth, depth, &mut v, on_value)?; + } + } + DType::U32 => { + let indices = indices.to_vec1::()?; + for (i, &index) in indices.iter().enumerate() { + set_usize_value(index as usize, i * depth, depth, &mut v, on_value)?; + } + } + DType::I64 => { + let indices = indices.to_vec1::()?; + for (i, &index) in indices.iter().enumerate() { + set_int64_value(index, i * depth, depth, &mut v, on_value)?; + } + } + d => unsupported_dtype(d)?, + }; + Tensor::from_vec(v, (dim1, depth), indices.device()) + } + 2 => { + let (dim1, dim2) = indices.dims2()?; + let mut v = vec![off_value; depth * dim1 * dim2]; + let idx = |i: usize, j: usize, depth: usize, dim2: usize| -> usize { + i * depth * dim2 + j * depth + }; + let iter = (0..dim1).flat_map(|i| (0..dim2).map(move |j| (i, j))); + match dtype { + DType::U8 => { + let index = indices.to_vec2::()?; + for (i, j) in iter { + set_usize_value( + index[i][j] as usize, + idx(i, j, depth, dim2), + depth, + &mut v, + on_value, + )?; + } + } + DType::U32 => { + let index = indices.to_vec2::()?; + for (i, j) in iter { + set_usize_value( + index[i][j] as usize, + idx(i, j, depth, dim2), + depth, + &mut v, + on_value, + )?; + } + } + DType::I64 => { + let index = indices.to_vec2::()?; + for (i, j) in iter { + set_int64_value( + index[i][j], + idx(i, j, depth, dim2), + depth, + &mut v, + on_value, + )?; + } + } + d => unsupported_dtype(d)?, + }; + Tensor::from_vec(v, (dim1, dim2, depth), indices.device()) + } + 3 => { + let (dim1, dim2, dim3) = indices.dims3()?; + let mut v = vec![off_value; depth * dim1 * dim2 * dim3]; + let idx = + |i: usize, j: usize, k: usize, depth: usize, dim2: usize, dim3: usize| -> usize { + i * depth * dim2 * dim3 + j * depth * dim3 + k * depth + }; + let iter = (0..dim1) + .flat_map(|i| (0..dim2).flat_map(move |j| (0..dim3).map(move |k| (i, j, k)))); + match dtype { + DType::U8 => { + let index = indices.to_vec3::()?; + for (i, j, k) in iter { + set_usize_value( + index[i][j][k] as usize, + idx(i, j, k, depth, dim2, dim3), + depth, + &mut v, + on_value, + )?; + } + } + DType::U32 => { + let index = indices.to_vec3::()?; + for (i, j, k) in iter { + set_usize_value( + index[i][j][k] as usize, + idx(i, j, k, depth, dim2, dim3), + depth, + &mut v, + on_value, + )?; + } + } + DType::I64 => { + let index = indices.to_vec3::()?; + for (i, j, k) in iter { + set_int64_value( + index[i][j][k], + idx(i, j, k, depth, dim2, dim3), + depth, + &mut v, + on_value, + )?; + } + } + d => unsupported_dtype(d)?, + }; + Tensor::from_vec(v, (dim1, dim2, dim3, depth), indices.device()) + } + _ => { + bail!("one_hot: rank {} is not supported.", rank) + } + } +} + +fn unsupported_dtype(dtype: DType) -> Result<()> { + bail!("one_hot: unsupported data type {dtype:?}, expected U8, U32, or I64") +} + +// Set unsigned usize index values to the given value. +fn set_usize_value( + value: usize, + idx: usize, + depth: usize, + v: &mut Vec, + on_value: D, +) -> Result<()> { + if value >= depth { + bail!("one_hot: index value {value} exceeds depth {depth}") + } + let idx = idx + value; + if idx >= v.len() { + bail!("one_hot: index out of bounds {idx}, len {}", v.len()); + } + v[idx] = on_value; + Ok(()) +} + +// Set signed integer index values to the given value. +// Signed integer values are only permitted for `-1` values. +// Otherwise, the value must be positive for unsigned usize values. +// This method will only case i64 values to usize values if the value is positive, +// otherwise the method will bail. +fn set_int64_value( + value: i64, + idx: usize, + depth: usize, + v: &mut Vec, + on_value: D, +) -> Result<()> { + // Skip for an entire row of off_values + if value == -1 { + return Ok(()); + } + if value < -1 { + bail!( + "one_hot: invalid negative index value {value}, expected a positive index value or -1" + ); + } + set_usize_value(value as usize, idx, depth, v, on_value) +} diff --git a/candle-nn/src/lib.rs b/candle-nn/src/lib.rs index 8f00e54c..6306c55a 100644 --- a/candle-nn/src/lib.rs +++ b/candle-nn/src/lib.rs @@ -2,6 +2,7 @@ pub mod activation; pub mod batch_norm; pub mod conv; pub mod embedding; +pub mod encoding; pub mod func; pub mod group_norm; pub mod init; diff --git a/candle-nn/tests/one_hot.rs b/candle-nn/tests/one_hot.rs new file mode 100644 index 00000000..36afdf68 --- /dev/null +++ b/candle-nn/tests/one_hot.rs @@ -0,0 +1,120 @@ +use candle::{Result, Shape, Tensor}; +use candle_nn::encoding::one_hot; + +#[test] +fn test_i64_one_hot() -> Result<()> { + let device = candle::Device::Cpu; + + let indices = Tensor::new(vec![vec![0i64, 2], vec![1, -1]], &device)?; + let depth = 4; + + let on_value = 1.0; + let off_value = 0.0; + + let one_hot = one_hot::(indices, depth, on_value, off_value)?; + + let expected_matrix = [ + [[1., 0., 0., 0.], [0., 0., 1., 0.]], + [[0., 1., 0., 0.], [0., 0., 0., 0.]], + ]; + + assert_eq!(one_hot.shape(), &Shape::from((2, 2, depth))); + + let matrix = one_hot.to_vec3::()?; + + assert_eq!(matrix, expected_matrix); + + Ok(()) +} + +#[test] +fn test_rank_3_one_hot() -> Result<()> { + let device = candle::Device::Cpu; + + let indices = Tensor::new( + vec![ + vec![vec![0i64, 1], vec![2, 3]], + vec![vec![3, 1], vec![1, -1]], + ], + &device, + )?; + let depth = 4; + + let on_value = 1.0; + let off_value = 0.0; + + let one_hot = one_hot::(indices, depth, on_value, off_value)?; + + let expected_matrix = Tensor::new( + vec![ + vec![ + vec![vec![1f32, 0., 0., 0.], vec![0., 1., 0., 0.]], + vec![vec![0., 0., 1., 0.], vec![0., 0., 0., 1.]], + ], + vec![ + vec![vec![0., 0., 0., 1.], vec![0., 1., 0., 0.]], + vec![vec![0., 1., 0., 0.], vec![0., 0., 0., 0.]], + ], + ], + &device, + )?; + + assert_eq!(one_hot.shape(), expected_matrix.shape()); + assert_eq!(one_hot.dims(), expected_matrix.dims()); + + let matrix = one_hot.get(1)?.to_vec3::()?; + let expected_matrix = expected_matrix.get(1)?.to_vec3::()?; + + assert_eq!(matrix, expected_matrix); + + Ok(()) +} + +#[test] +fn test_u8_one_cold() -> Result<()> { + let device = candle::Device::Cpu; + let depth = 4; + let indices = Tensor::new(vec![vec![0i64, 2], vec![1, -1]], &device)?; + + let on_value = 0u8; + let off_value = 1; + + // Note that the method does not require the turbofish operator, as the type is inferred from the on_value. + let one_cold = one_hot(indices, depth, on_value, off_value)?; + + let expected_matrix = [[[0, 1, 1, 1], [1, 1, 0, 1]], [[1, 0, 1, 1], [1, 1, 1, 1]]]; + + assert_eq!(one_cold.shape(), &Shape::from((2, 2, depth))); + + let matrix = one_cold.to_vec3::()?; + + assert_eq!(matrix, expected_matrix); + + Ok(()) +} + +#[test] +fn test_iter() -> Result<()> { + let device = candle::Device::Cpu; + let depth = 4; + let indices = Tensor::new(vec![vec![0i64, 2], vec![1, -1]], &device)?; + let matrix = indices.to_vec2::()?; + let (dim1, dim2) = indices.dims2()?; + + let iter = (0..dim1).flat_map(|i| (0..dim2).map(move |j| (i, j))); + + let mut v = vec![0; depth * dim1 * dim2]; + + for (i, j) in iter { + let idx = i * depth * dim2 + j * depth; + v[idx] = matrix[i][j]; + } + + for (i, row) in matrix.iter().enumerate() { + for (j, &value) in row.iter().enumerate() { + let idx = i * depth * dim2 + j * depth; + assert_eq!(v[idx], value); + } + } + Ok(()) +} From 135ae5f3eb90f28327ba5d055291b7b3a2e2a47d Mon Sep 17 00:00:00 2001 From: Laurent Mazare Date: Mon, 1 Jan 2024 11:40:17 +0100 Subject: [PATCH 22/30] Simplify the one-hot implementation, support arbitrary rank. (#1514) * Simplify the one-hot implementation, support arbitrary rank. * More cleanup. --- candle-nn/src/encoding.rs | 219 +++++++------------------------------- 1 file changed, 38 insertions(+), 181 deletions(-) diff --git a/candle-nn/src/encoding.rs b/candle-nn/src/encoding.rs index 51cb75dd..38e2cc3b 100644 --- a/candle-nn/src/encoding.rs +++ b/candle-nn/src/encoding.rs @@ -77,7 +77,6 @@ use candle::{bail, DType, Result, Tensor, WithDType}; /// # Bails /// /// This method bails if: -/// - The input tensor has a rank greater than 3. /// - One of the index value is less than -1. /// - One of the index value is greater than or equal to the depth value. /// - The input data type is not `U8`, `U32`, or `I64`. @@ -91,195 +90,44 @@ pub fn one_hot( on_value: D, off_value: D, ) -> Result { - let dtype = indices.dtype(); - let rank = indices.rank(); - - match rank { - 0 => { - let mut v = vec![off_value; depth]; - match dtype { - DType::U8 => { - let vi = indices.to_vec0::()?; - set_usize_value(vi as usize, 0, depth, &mut v, on_value)?; - } - DType::U32 => { - let vi = indices.to_vec0::()?; - set_usize_value(vi as usize, 0, depth, &mut v, on_value)?; - } - DType::I64 => { - let vi = indices.to_vec0::()?; - set_int64_value(vi, 0, depth, &mut v, on_value)?; - } - d => unsupported_dtype(d)?, - }; - Tensor::from_vec(v, (depth,), indices.device()) + let mut target_shape = indices.dims().to_vec(); + target_shape.push(depth); + let indices = indices.flatten_all()?; + let mut out = vec![off_value; depth * indices.elem_count()]; + match indices.dtype() { + DType::U8 => { + let indices = indices.to_vec1::()?; + for (i, &index) in indices.iter().enumerate() { + set_at_index(index, i * depth, depth, &mut out, on_value)?; + } } - 1 => { - let dim1 = indices.dims1()?; - let mut v = vec![off_value; depth * dim1]; - - match dtype { - DType::U8 => { - let indices = indices.to_vec1::()?; - for (i, &index) in indices.iter().enumerate() { - set_usize_value(index as usize, i * depth, depth, &mut v, on_value)?; - } - } - DType::U32 => { - let indices = indices.to_vec1::()?; - for (i, &index) in indices.iter().enumerate() { - set_usize_value(index as usize, i * depth, depth, &mut v, on_value)?; - } - } - DType::I64 => { - let indices = indices.to_vec1::()?; - for (i, &index) in indices.iter().enumerate() { - set_int64_value(index, i * depth, depth, &mut v, on_value)?; - } - } - d => unsupported_dtype(d)?, - }; - Tensor::from_vec(v, (dim1, depth), indices.device()) + DType::U32 => { + let indices = indices.to_vec1::()?; + for (i, &index) in indices.iter().enumerate() { + set_at_index(index, i * depth, depth, &mut out, on_value)?; + } } - 2 => { - let (dim1, dim2) = indices.dims2()?; - let mut v = vec![off_value; depth * dim1 * dim2]; - let idx = |i: usize, j: usize, depth: usize, dim2: usize| -> usize { - i * depth * dim2 + j * depth - }; - let iter = (0..dim1).flat_map(|i| (0..dim2).map(move |j| (i, j))); - match dtype { - DType::U8 => { - let index = indices.to_vec2::()?; - for (i, j) in iter { - set_usize_value( - index[i][j] as usize, - idx(i, j, depth, dim2), - depth, - &mut v, - on_value, - )?; - } - } - DType::U32 => { - let index = indices.to_vec2::()?; - for (i, j) in iter { - set_usize_value( - index[i][j] as usize, - idx(i, j, depth, dim2), - depth, - &mut v, - on_value, - )?; - } - } - DType::I64 => { - let index = indices.to_vec2::()?; - for (i, j) in iter { - set_int64_value( - index[i][j], - idx(i, j, depth, dim2), - depth, - &mut v, - on_value, - )?; - } - } - d => unsupported_dtype(d)?, - }; - Tensor::from_vec(v, (dim1, dim2, depth), indices.device()) + DType::I64 => { + let indices = indices.to_vec1::()?; + for (i, &index) in indices.iter().enumerate() { + set_at_index(index, i * depth, depth, &mut out, on_value)?; + } } - 3 => { - let (dim1, dim2, dim3) = indices.dims3()?; - let mut v = vec![off_value; depth * dim1 * dim2 * dim3]; - let idx = - |i: usize, j: usize, k: usize, depth: usize, dim2: usize, dim3: usize| -> usize { - i * depth * dim2 * dim3 + j * depth * dim3 + k * depth - }; - let iter = (0..dim1) - .flat_map(|i| (0..dim2).flat_map(move |j| (0..dim3).map(move |k| (i, j, k)))); - match dtype { - DType::U8 => { - let index = indices.to_vec3::()?; - for (i, j, k) in iter { - set_usize_value( - index[i][j][k] as usize, - idx(i, j, k, depth, dim2, dim3), - depth, - &mut v, - on_value, - )?; - } - } - DType::U32 => { - let index = indices.to_vec3::()?; - for (i, j, k) in iter { - set_usize_value( - index[i][j][k] as usize, - idx(i, j, k, depth, dim2, dim3), - depth, - &mut v, - on_value, - )?; - } - } - DType::I64 => { - let index = indices.to_vec3::()?; - for (i, j, k) in iter { - set_int64_value( - index[i][j][k], - idx(i, j, k, depth, dim2, dim3), - depth, - &mut v, - on_value, - )?; - } - } - d => unsupported_dtype(d)?, - }; - Tensor::from_vec(v, (dim1, dim2, dim3, depth), indices.device()) + dtype => { + bail!("one_hot: unsupported data type {dtype:?}, expected U8, U32, or I64") } - _ => { - bail!("one_hot: rank {} is not supported.", rank) - } - } + }; + Tensor::from_vec(out, target_shape, indices.device()) } -fn unsupported_dtype(dtype: DType) -> Result<()> { - bail!("one_hot: unsupported data type {dtype:?}, expected U8, U32, or I64") -} - -// Set unsigned usize index values to the given value. -fn set_usize_value( - value: usize, - idx: usize, - depth: usize, - v: &mut Vec, - on_value: D, -) -> Result<()> { - if value >= depth { - bail!("one_hot: index value {value} exceeds depth {depth}") - } - let idx = idx + value; - if idx >= v.len() { - bail!("one_hot: index out of bounds {idx}, len {}", v.len()); - } - v[idx] = on_value; - Ok(()) -} - -// Set signed integer index values to the given value. -// Signed integer values are only permitted for `-1` values. -// Otherwise, the value must be positive for unsigned usize values. -// This method will only case i64 values to usize values if the value is positive, -// otherwise the method will bail. -fn set_int64_value( - value: i64, - idx: usize, +fn set_at_index>( + value: I, + offset: usize, depth: usize, v: &mut Vec, on_value: D, ) -> Result<()> { + let value = value.into(); // Skip for an entire row of off_values if value == -1 { return Ok(()); @@ -289,5 +137,14 @@ fn set_int64_value( "one_hot: invalid negative index value {value}, expected a positive index value or -1" ); } - set_usize_value(value as usize, idx, depth, v, on_value) + let value = value as usize; + if value >= depth { + bail!("one_hot: index value {value} exceeds depth {depth}") + } + let idx = offset + value; + if idx >= v.len() { + bail!("one_hot: index out of bounds {idx}, len {}", v.len()); + } + v[idx] = on_value; + Ok(()) } From fa3ea98ba92835960fdd825a5b4dda30ef2baaa4 Mon Sep 17 00:00:00 2001 From: Nicolas Patry Date: Thu, 4 Jan 2024 12:12:56 +0100 Subject: [PATCH 23/30] Adding bfloat16 support for the cast kernels. (#1520) --- candle-core/src/metal_backend.rs | 4 ++++ candle-metal-kernels/src/cast.metal | 2 ++ 2 files changed, 6 insertions(+) diff --git a/candle-core/src/metal_backend.rs b/candle-core/src/metal_backend.rs index e168c24b..c1c4aa4b 100644 --- a/candle-core/src/metal_backend.rs +++ b/candle-core/src/metal_backend.rs @@ -596,6 +596,8 @@ impl BackendStorage for MetalStorage { (DType::F32, DType::F16) => "cast_f32_f16", (DType::F16, DType::F32) => "cast_f16_f32", (DType::I64, DType::F32) => "cast_i64_f32", + (DType::F32, DType::BF16) => "cast_f32_bf16", + (DType::BF16, DType::F32) => "cast_bf16_f32", (left, right) => { crate::bail!("Metal contiguous to_dtype {left:?} {right:?} not implemented") } @@ -622,6 +624,8 @@ impl BackendStorage for MetalStorage { (DType::F32, DType::F16) => "cast_f32_f16_strided", (DType::F16, DType::F32) => "cast_f16_f32_strided", (DType::I64, DType::F32) => "cast_i64_f32_strided", + (DType::F32, DType::BF16) => "cast_f32_bf16_strided", + (DType::BF16, DType::F32) => "cast_bf16_f32_strided", (left, right) => { crate::bail!("Metal strided to_dtype {left:?} {right:?} not implemented") } diff --git a/candle-metal-kernels/src/cast.metal b/candle-metal-kernels/src/cast.metal index 3baefcc2..e9ab17b1 100644 --- a/candle-metal-kernels/src/cast.metal +++ b/candle-metal-kernels/src/cast.metal @@ -59,4 +59,6 @@ CAST(cast_i64_f32, cast_i64_f32_strided, int64_t, float) #endif #if __METAL_VERSION__ >= 310 +CAST(cast_bf16_f32, cast_bf16_f32_strided, bfloat, float) +CAST(cast_f32_bf16, cast_f32_bf16_strided, float, bfloat) #endif From 3a7304cb0dbdf8ceeab8a4f5cf9b8e7ced822e20 Mon Sep 17 00:00:00 2001 From: Jeroen Vlek Date: Fri, 5 Jan 2024 11:59:46 +0100 Subject: [PATCH 24/30] add link to gpt-from-scratch-rs (#1525) --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index a03367a5..93cbccc4 100644 --- a/README.md +++ b/README.md @@ -158,6 +158,7 @@ And then head over to - [`candle-ext`](https://github.com/mokeyish/candle-ext): An extension library to Candle that provides PyTorch functions not currently available in Candle. - [`kalosm`](https://github.com/floneum/floneum/tree/master/interfaces/kalosm): A multi-modal meta-framework in Rust for interfacing with local pre-trained models with support for controlled generation, custom samplers, in-memory vector databases, audio transcription, and more. - [`candle-sampling`](https://github.com/EricLBuehler/candle-sampling): Sampling techniques for Candle. +- [`gpt-from-scratch-rs`](https://github.com/jeroenvlek/gpt-from-scratch-rs): A port of Andrej Karpathy's _Let's build GPT_ tutorial on YouTube showcasing the Candle API on a toy problem. If you have an addition to this list, please submit a pull request. From 8d1a57c9a0465b201e4e9e410e2b8fcde37b35f7 Mon Sep 17 00:00:00 2001 From: OlivierDehaene Date: Fri, 5 Jan 2024 18:28:55 +0100 Subject: [PATCH 25/30] chore: update flash attention kernels (#1518) * chore: update flash attention kernels * fmt * remove unused kernels * force f32 * correct stride --- candle-flash-attn/kernels/alibi.h | 62 +++ candle-flash-attn/kernels/block_info.h | 13 +- candle-flash-attn/kernels/flash.h | 54 ++- candle-flash-attn/kernels/flash_api.cu | 40 +- .../kernels/flash_fwd_hdim128_bf16_sm80.cu | 13 +- .../kernels/flash_fwd_hdim128_fp16_sm80.cu | 26 +- .../kernels/flash_fwd_hdim160_bf16_sm80.cu | 11 +- .../kernels/flash_fwd_hdim160_fp16_sm80.cu | 21 +- .../kernels/flash_fwd_hdim192_bf16_sm80.cu | 12 +- .../kernels/flash_fwd_hdim192_fp16_sm80.cu | 21 +- .../kernels/flash_fwd_hdim224_bf16_sm80.cu | 5 +- .../kernels/flash_fwd_hdim224_fp16_sm80.cu | 5 +- .../kernels/flash_fwd_hdim256_bf16_sm80.cu | 5 +- .../kernels/flash_fwd_hdim256_fp16_sm80.cu | 5 +- .../kernels/flash_fwd_hdim32_bf16_sm80.cu | 4 +- .../kernels/flash_fwd_hdim32_fp16_sm80.cu | 17 +- .../kernels/flash_fwd_hdim64_bf16_sm80.cu | 13 +- .../kernels/flash_fwd_hdim64_fp16_sm80.cu | 20 +- .../kernels/flash_fwd_hdim96_bf16_sm80.cu | 11 +- .../kernels/flash_fwd_hdim96_fp16_sm80.cu | 21 +- candle-flash-attn/kernels/flash_fwd_kernel.h | 282 ++++++----- .../kernels/flash_fwd_launch_template.h | 63 +-- candle-flash-attn/kernels/kernel_traits.h | 77 +++- .../kernels/kernel_traits_sm90.h | 159 +++++++ candle-flash-attn/kernels/softmax.h | 57 ++- candle-flash-attn/kernels/utils.h | 92 ++-- candle-flash-attn/src/ffi.rs | 8 +- candle-flash-attn/src/lib.rs | 436 +++++++++++++++++- 28 files changed, 1087 insertions(+), 466 deletions(-) create mode 100644 candle-flash-attn/kernels/alibi.h create mode 100644 candle-flash-attn/kernels/kernel_traits_sm90.h diff --git a/candle-flash-attn/kernels/alibi.h b/candle-flash-attn/kernels/alibi.h new file mode 100644 index 00000000..1afb3687 --- /dev/null +++ b/candle-flash-attn/kernels/alibi.h @@ -0,0 +1,62 @@ +#include + +#include + +#include +#include + +#include "utils.h" + +namespace flash { + +using namespace cute; + +//////////////////////////////////////////////////////////////////////////////////////////////////// + +template +inline __device__ void apply_alibi(Tensor &tensor, + const int col_idx_offset_, + const int max_seqlen_k, + const int row_idx_offset, + const int max_seqlen_q, + const int warp_row_stride, + const float alibi_slope) { + // tensor has shape (ncol=(2, MMA_M), nrow=(2, MMA_N)) + static_assert(Layout::rank == 2, "Only support 2D Tensor"); + const int lane_id = threadIdx.x % 32; + const int col_idx_offset = col_idx_offset_ + (lane_id % 4) * 2; + if constexpr (Is_causal) { // Simpler, we add the same bias vector to all rows + #pragma unroll + for (int nj = 0; nj < size<1, 1>(tensor); ++nj) { + const int col_idx_base = col_idx_offset + nj * 8; + #pragma unroll + for (int j = 0; j < size<1, 0>(tensor); ++j) { + const int col_idx = col_idx_base + j; + #pragma unroll + for (int mi = 0; mi < size<0>(tensor); ++mi) { + tensor(mi, make_coord(j, nj)) += alibi_slope * col_idx; + } + } + } + } else { // Bias depends on both row_idx and col_idx + #pragma unroll + for (int mi = 0; mi < size<0, 1>(tensor); ++mi) { + const int row_idx_base = row_idx_offset + mi * warp_row_stride; + #pragma unroll + for (int i = 0; i < size<0, 0>(tensor); ++i) { + const int row_idx = row_idx_base + i * 8; + #pragma unroll + for (int nj = 0; nj < size<1, 1>(tensor); ++nj) { + const int col_idx_base = col_idx_offset + nj * 8; + #pragma unroll + for (int j = 0; j < size<1, 0>(tensor); ++j) { + const int col_idx = col_idx_base + j; + tensor(make_coord(i, mi), make_coord(j, nj)) -= alibi_slope * abs(row_idx + max_seqlen_k - max_seqlen_q - col_idx); + } + } + } + } + } +} + +} // namespace flash diff --git a/candle-flash-attn/kernels/block_info.h b/candle-flash-attn/kernels/block_info.h index 94251a41..65435e51 100644 --- a/candle-flash-attn/kernels/block_info.h +++ b/candle-flash-attn/kernels/block_info.h @@ -14,9 +14,12 @@ struct BlockInfo { template __device__ BlockInfo(const Params ¶ms, const int bidb) : sum_s_q(!Varlen || params.cu_seqlens_q == nullptr ? -1 : params.cu_seqlens_q[bidb]) - , sum_s_k(!Varlen || params.cu_seqlens_k == nullptr ? -1 : params.cu_seqlens_k[bidb]) + , sum_s_k(!Varlen || params.cu_seqlens_k == nullptr || !params.is_seqlens_k_cumulative ? -1 : params.cu_seqlens_k[bidb]) , actual_seqlen_q(!Varlen || params.cu_seqlens_q == nullptr ? params.seqlen_q : params.cu_seqlens_q[bidb + 1] - sum_s_q) - , actual_seqlen_k(!Varlen || params.cu_seqlens_k == nullptr ? params.seqlen_k : params.cu_seqlens_k[bidb + 1] - sum_s_k) + // If is_seqlens_k_cumulative, then seqlen_k is cu_seqlens_k[bidb + 1] - cu_seqlens_k[bidb]. + // Otherwise it's cu_seqlens_k[bidb], i.e., we use cu_seqlens_k to store the sequence lengths of K. + , seqlen_k_cache(!Varlen || params.cu_seqlens_k == nullptr ? params.seqlen_k : (params.is_seqlens_k_cumulative ? params.cu_seqlens_k[bidb + 1] - sum_s_k : params.cu_seqlens_k[bidb])) + , actual_seqlen_k(params.seqused_k ? params.seqused_k[bidb] : seqlen_k_cache + (params.knew_ptr == nullptr ? 0 : params.seqlen_knew)) { } @@ -32,8 +35,10 @@ struct BlockInfo { const int sum_s_q; const int sum_s_k; - const uint32_t actual_seqlen_q; - const uint32_t actual_seqlen_k; + const int actual_seqlen_q; + // We have to have seqlen_k_cache declared before actual_seqlen_k, otherwise actual_seqlen_k is set to 0. + const int seqlen_k_cache; + const int actual_seqlen_k; }; //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/candle-flash-attn/kernels/flash.h b/candle-flash-attn/kernels/flash.h index be4ae0ca..80b517e9 100644 --- a/candle-flash-attn/kernels/flash.h +++ b/candle-flash-attn/kernels/flash.h @@ -7,15 +7,6 @@ #include #include -// #ifdef OLD_GENERATOR_PATH -// #include -// #else -// #include -// #endif -// -// #include - - constexpr int TOTAL_DIM = 0; constexpr int H_DIM = 1; constexpr int D_DIM = 2; @@ -53,6 +44,7 @@ struct Flash_fwd_params : public Qkv_params { // The O matrix (output). void * __restrict__ o_ptr; + void * __restrict__ oaccum_ptr; // The stride between rows of O. index_t o_batch_stride; @@ -64,9 +56,10 @@ struct Flash_fwd_params : public Qkv_params { // The pointer to the softmax sum. void * __restrict__ softmax_lse_ptr; + void * __restrict__ softmax_lseaccum_ptr; // The dimensions. - int b, seqlen_q, seqlen_k, d, seqlen_q_rounded, seqlen_k_rounded, d_rounded; + int b, seqlen_q, seqlen_k, seqlen_knew, d, seqlen_q_rounded, seqlen_k_rounded, d_rounded, rotary_dim; // The scaling factors for the kernel. float scale_softmax; @@ -76,8 +69,30 @@ struct Flash_fwd_params : public Qkv_params { int * __restrict__ cu_seqlens_q; int * __restrict__ cu_seqlens_k; + // If provided, the actual length of each k sequence. + int * __restrict__ seqused_k; + int *__restrict__ blockmask; + // The K_new and V_new matrices. + void * __restrict__ knew_ptr; + void * __restrict__ vnew_ptr; + + // The stride between rows of the Q, K and V matrices. + index_t knew_batch_stride; + index_t vnew_batch_stride; + index_t knew_row_stride; + index_t vnew_row_stride; + index_t knew_head_stride; + index_t vnew_head_stride; + + // The cos and sin matrices for rotary embedding. + void * __restrict__ rotary_cos_ptr; + void * __restrict__ rotary_sin_ptr; + + // The indices to index into the KV cache. + int *__restrict__ cache_batch_idx; + // The dropout probability (probability of keeping an activation). float p_dropout; // uint32_t p_dropout_in_uint; @@ -88,11 +103,22 @@ struct Flash_fwd_params : public Qkv_params { float rp_dropout; float scale_softmax_rp_dropout; - // Random state. - // at::PhiloxCudaState philox_args; + // Local window size + int window_size_left, window_size_right; bool is_bf16; bool is_causal; + + // If is_seqlens_k_cumulative, then seqlen_k is cu_seqlens_k[bidb + 1] - cu_seqlens_k[bidb]. + // Otherwise it's cu_seqlens_k[bidb], i.e., we use cu_seqlens_k to store the sequence lengths of K. + bool is_seqlens_k_cumulative; + + bool is_rotary_interleaved; + + int num_splits; // For split-KV version + + void * __restrict__ alibi_slopes_ptr; + index_t alibi_slopes_batch_stride; }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -132,10 +158,14 @@ struct Flash_bwd_params : public Flash_fwd_params { // The pointer to the softmax d sum. void *__restrict__ dsoftmax_sum; + + bool deterministic; + index_t dq_accum_split_stride; }; //////////////////////////////////////////////////////////////////////////////////////////////////// template void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream); +template void run_mha_fwd_splitkv_dispatch(Flash_fwd_params ¶ms, cudaStream_t stream); template void run_mha_bwd_(Flash_bwd_params ¶ms, cudaStream_t stream, const bool configure); diff --git a/candle-flash-attn/kernels/flash_api.cu b/candle-flash-attn/kernels/flash_api.cu index 72991257..8113dbc7 100644 --- a/candle-flash-attn/kernels/flash_api.cu +++ b/candle-flash-attn/kernels/flash_api.cu @@ -1,17 +1,15 @@ #include "flash_fwd_launch_template.h" -// void run_mha_fwd(Flash_fwd_params ¶ms, cudaStream_t stream) { -// FWD_HEADDIM_SWITCH(params.d, [&] { -// run_mha_fwd_(params, stream); -// }); -// } - -void run_mha_fwd(Flash_fwd_params ¶ms, cudaStream_t stream) { - FP16_SWITCH(!params.is_bf16, [&] { - FWD_HEADDIM_SWITCH(params.d, [&] { - run_mha_fwd_(params, stream); - }); - }); +void run_mha_fwd(Flash_fwd_params ¶ms, cudaStream_t stream, bool force_split_kernel=false) { + FP16_SWITCH(!params.is_bf16, [&] { + FWD_HEADDIM_SWITCH(params.d, [&] { +// if (params.num_splits <= 1 && !force_split_kernel) { // If we don't set it num_splits == 0 + run_mha_fwd_(params, stream); +// } else { +// run_mha_fwd_splitkv_dispatch(params, stream); +// } + }); + }); } extern "C" void run_mha( @@ -20,6 +18,7 @@ extern "C" void run_mha( void *v_ptr, void *o_ptr, void *softmax_lse_ptr, + void *alibi_slopes_ptr, int32_t *cu_seqlens_q_ptr, int32_t *cu_seqlens_k_ptr, @@ -28,6 +27,7 @@ extern "C" void run_mha( uint32_t k_batch_stride, uint32_t v_batch_stride, uint32_t o_batch_stride, + uint32_t alibi_slopes_batch_stride, uint32_t q_row_stride, uint32_t k_row_stride, @@ -51,8 +51,11 @@ extern "C" void run_mha( uint32_t seqlen_q_rounded, uint32_t seqlen_k_rounded, + int is_bf16, int is_causal, - int is_bf16 + + int window_size_left, + int window_size_right ) { Flash_fwd_params params; // Reset the parameters @@ -65,12 +68,14 @@ extern "C" void run_mha( params.o_ptr = o_ptr; params.softmax_lse_ptr = softmax_lse_ptr; + params.alibi_slopes_ptr = alibi_slopes_ptr; // All stride are in elements, not bytes. params.q_batch_stride = q_batch_stride; params.k_batch_stride = k_batch_stride; params.v_batch_stride = v_batch_stride; params.o_batch_stride = o_batch_stride; + params.alibi_slopes_batch_stride = alibi_slopes_batch_stride; params.q_row_stride = q_row_stride; params.k_row_stride = k_row_stride; @@ -92,7 +97,6 @@ extern "C" void run_mha( params.seqlen_k_rounded = seqlen_k_rounded; params.d = d; params.d_rounded = d_rounded; - params.is_causal = is_causal; // Set the different scale values. params.scale_softmax = softmax_scale; @@ -106,6 +110,14 @@ extern "C" void run_mha( params.cu_seqlens_q = cu_seqlens_q_ptr; params.cu_seqlens_k = cu_seqlens_k_ptr; params.p_ptr = nullptr; // used for `return_softmax`. + params.seqused_k = nullptr; + + params.is_causal = is_causal; + params.window_size_left = window_size_left; + params.window_size_right = window_size_right; + + params.is_seqlens_k_cumulative = true; + params.num_splits = 1; cudaStream_t stream = 0; // Use the default stream. run_mha_fwd(params, stream); diff --git a/candle-flash-attn/kernels/flash_fwd_hdim128_bf16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim128_bf16_sm80.cu index 654400a7..6ffa4126 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim128_bf16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim128_bf16_sm80.cu @@ -1,19 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::bfloat16_t; -// if (params.p_dropout == 1.f) { -// run_flash_fwd, false>(params, stream); -// } else { -// run_flash_fwd, true>(params, stream); -// } -// } template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim128(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim128_fp16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim128_fp16_sm80.cu index 5b7254a9..19b005ad 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim128_fp16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim128_fp16_sm80.cu @@ -1,32 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::half_t; -// if (params.p_dropout == 1.f) { -// // Using 8 warps (128 x 128 and 256 x 64) is 28% slower for seqlen=2k -// run_flash_fwd, false>(params, stream); -// // run_flash_fwd, false>(params, stream); -// // run_flash_fwd, false>(params, stream); -// // run_flash_fwd, false>(params, stream); -// run_flash_fwd, false>(params, stream); -// run_flash_fwd, false>(params, stream); -// run_flash_fwd, false>(params, stream); -// // 1st ones are good for H100, A100 -// // 2nd one is good for A6000 bc we get slightly better occupancy -// } else { -// run_flash_fwd, true>(params, stream); -// run_flash_fwd, true>(params, stream); -// run_flash_fwd, true>(params, stream); -// // 1st one is good for H100, A100, A6000 -// } -// } - template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim128(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim160_bf16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim160_bf16_sm80.cu index 6a9d60c3..f674f481 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim160_bf16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim160_bf16_sm80.cu @@ -1,17 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::bfloat16_t; -// BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { -// run_flash_fwd, Is_dropout>(params, stream); -// }); -// } template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim160(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim160_fp16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim160_fp16_sm80.cu index 6c40a164..afd0a8a3 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim160_fp16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim160_fp16_sm80.cu @@ -1,27 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::half_t; -// BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { -// run_flash_fwd, Is_dropout>(params, stream); -// run_flash_fwd, Is_dropout>(params, stream); -// run_flash_fwd, Is_dropout>(params, stream); -// run_flash_fwd, Is_dropout>(params, stream); -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// // For A6000, no-causal, 1st is fastest. causal, 4th is fastest. -// // For A100, H100, 1st is fastest. -// }); -// } template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim160(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim192_bf16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim192_bf16_sm80.cu index d2f4cba7..aa91bdd6 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim192_bf16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim192_bf16_sm80.cu @@ -1,16 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::bfloat16_t; -// BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { -// run_flash_fwd, Is_dropout>(params, stream); -// }); -// } -template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { +template<> +void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim192(params, stream); } diff --git a/candle-flash-attn/kernels/flash_fwd_hdim192_fp16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim192_fp16_sm80.cu index 2875c926..37a96526 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim192_fp16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim192_fp16_sm80.cu @@ -1,27 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::half_t; -// BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { -// run_flash_fwd, Is_dropout>(params, stream); -// run_flash_fwd, Is_dropout>(params, stream); -// run_flash_fwd, Is_dropout>(params, stream); -// // This one is slightly faster for causal? -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// }); -// // For A100 H100, 1st is faster with dropout, 3rd is faster without dropout -// // For A6000, 1st is faster when causal, 3rd is faster when not causal -// } template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim192(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim224_bf16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim224_bf16_sm80.cu index 982fe7ea..167a0df2 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim224_bf16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim224_bf16_sm80.cu @@ -1,9 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { +template<> +void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim224(params, stream); } diff --git a/candle-flash-attn/kernels/flash_fwd_hdim224_fp16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim224_fp16_sm80.cu index 4c083f7b..58ffe75c 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim224_fp16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim224_fp16_sm80.cu @@ -1,9 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { +template<> +void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim224(params, stream); } diff --git a/candle-flash-attn/kernels/flash_fwd_hdim256_bf16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim256_bf16_sm80.cu index cb074a95..1b370141 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim256_bf16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim256_bf16_sm80.cu @@ -1,9 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { +template<> +void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim256(params, stream); } diff --git a/candle-flash-attn/kernels/flash_fwd_hdim256_fp16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim256_fp16_sm80.cu index ddf5e132..9f35129c 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim256_fp16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim256_fp16_sm80.cu @@ -1,9 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { +template<> +void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim256(params, stream); } diff --git a/candle-flash-attn/kernels/flash_fwd_hdim32_bf16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim32_bf16_sm80.cu index 81e359e1..770de6fc 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim32_bf16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim32_bf16_sm80.cu @@ -1,10 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim32(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim32_fp16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim32_fp16_sm80.cu index 91e6331e..8dbf8b94 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim32_fp16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim32_fp16_sm80.cu @@ -1,23 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::half_t; -// BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { -// run_flash_fwd, Is_dropout>(params, stream); -// // For dropout there might be a lot of register spilling? -// // These two are very slow due to register spilling -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// // This one is slightly slower -// // run_flash_fwd>(params, stream); -// }); -// } template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim32(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim64_bf16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim64_bf16_sm80.cu index fffcbebb..22eac878 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim64_bf16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim64_bf16_sm80.cu @@ -1,19 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::bfloat16_t; -// if (params.p_dropout == 1.f) { -// run_flash_fwd, false>(params, stream); -// } else { -// run_flash_fwd, true>(params, stream); -// } -// } template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim64(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim64_fp16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim64_fp16_sm80.cu index 01bd1716..e6da5dd2 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim64_fp16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim64_fp16_sm80.cu @@ -1,26 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::half_t; -// if (params.p_dropout == 1.f) { -// // Using 8 warps is 18% slower for seqlen=2k, 2 warps is 5% slower -// // Using block size (64 x 256) is 27% slower for seqlen=2k -// // Using block size (256 x 64) is 85% slower for seqlen=2k, because of register spilling -// run_flash_fwd, false>(params, stream); -// run_flash_fwd, false>(params, stream); -// run_flash_fwd, false>(params, stream); -// } else { -// run_flash_fwd, true>(params, stream); -// run_flash_fwd, true>(params, stream); -// run_flash_fwd, true>(params, stream); -// } -// } template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim64(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim96_bf16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim96_bf16_sm80.cu index b0b27db5..9c003540 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim96_bf16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim96_bf16_sm80.cu @@ -1,17 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::bfloat16_t; -// BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { -// run_flash_fwd, Is_dropout>(params, stream); -// }); -// } template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim96(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_hdim96_fp16_sm80.cu b/candle-flash-attn/kernels/flash_fwd_hdim96_fp16_sm80.cu index 820b63cb..8108696a 100644 --- a/candle-flash-attn/kernels/flash_fwd_hdim96_fp16_sm80.cu +++ b/candle-flash-attn/kernels/flash_fwd_hdim96_fp16_sm80.cu @@ -1,23 +1,10 @@ // Copyright (c) 2023, Tri Dao. - // Splitting the different head dimensions to different files to speed up compilation. +// This file is auto-generated. See "generate_kernels.py" #include "flash_fwd_launch_template.h" -// template<> -// void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { -// using elem_type = cutlass::half_t; -// BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { -// run_flash_fwd, Is_dropout>(params, stream); -// run_flash_fwd, Is_dropout>(params, stream); -// // This 3rd one is good for H100, and A100, A6000 -// run_flash_fwd, Is_dropout>(params, stream); -// run_flash_fwd, Is_dropout>(params, stream); -// // These two are always slower -// // run_flash_fwd>(params, stream); -// // run_flash_fwd>(params, stream); -// }); -// } -template<> void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { +template<> +void run_mha_fwd_(Flash_fwd_params ¶ms, cudaStream_t stream) { run_mha_fwd_hdim96(params, stream); -} \ No newline at end of file +} diff --git a/candle-flash-attn/kernels/flash_fwd_kernel.h b/candle-flash-attn/kernels/flash_fwd_kernel.h index 232dea0d..05f5f701 100644 --- a/candle-flash-attn/kernels/flash_fwd_kernel.h +++ b/candle-flash-attn/kernels/flash_fwd_kernel.h @@ -4,20 +4,18 @@ #pragma once -#include #include -#include #include #include #include -#include #include "block_info.h" #include "kernel_traits.h" #include "utils.h" #include "softmax.h" -#include "philox.cuh" + +#include "alibi.h" namespace flash { @@ -25,49 +23,6 @@ using namespace cute; //////////////////////////////////////////////////////////////////////////////////////////////////// -template -CUTE_HOST_DEVICE -auto -make_tiled_copy_A_warpcontiguousM(Copy_Atom const& copy_atom, - TiledMMA const& tiled_mma) { - using TileShape_MNK = typename TiledMMA::TiledShape_MNK; - using AtomShape_MNK = typename TiledMMA::AtomShape_MNK; - constexpr int AtomShape_M = decltype(size<0>(AtomShape_MNK{}))::value; - constexpr int kNWarps = decltype(size<0>(TileShape_MNK{}))::value / AtomShape_M; - constexpr int MMAStride_M = MMA_M * AtomShape_M; - auto t = make_tile(Layout, Int>, - Stride<_1, Int> >{}, - make_layout(size<2>(TileShape_MNK{}))); - // if (cute::thread0()) {printf("make_tiled_copy_A_warpcontiguousM "); print(t); printf("\n"); } - return make_tiled_copy_impl(copy_atom, tiled_mma.get_layoutA_TV(), t); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -template -CUTE_HOST_DEVICE -auto -make_tiled_copy_C_warpcontiguousM(Copy_Atom const& copy_atom, - TiledMMA const& tiled_mma) { - using TileShape_MNK = typename TiledMMA::TiledShape_MNK; - using AtomShape_MNK = typename TiledMMA::AtomShape_MNK; - constexpr int AtomShape_M = decltype(size<0>(AtomShape_MNK{}))::value; - constexpr int kNWarps = decltype(size<0>(TileShape_MNK{}))::value / AtomShape_M; - constexpr int MMAStride_M = MMA_M * AtomShape_M; - auto t = make_tile(Layout, Int>, - Stride<_1, Int> >{}, - // TODO: Shouldn't this be size<1>? - make_layout(size<2>(TileShape_MNK{}))); - // if (cute::thread0()) {printf("make_tiled_copy_C_warpcontiguousM "); print(t); printf("\n"); } - return make_tiled_copy_impl(copy_atom, tiled_mma.get_layoutC_TV(), t); -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - template inline __device__ void softmax_rescale_o(Tensor0 &scores, Tensor1 &scores_max, Tensor1 &scores_sum, Tensor2 &acc_o, float softmax_scale_log2) { @@ -77,7 +32,7 @@ inline __device__ void softmax_rescale_o(Tensor0 &scores, Tensor1 &scores_max, T flash::reduce_sum(scores, scores_sum); } else { Tensor scores_max_prev = make_fragment_like(scores_max); - copy(scores_max, scores_max_prev); + cute::copy(scores_max, scores_max_prev); flash::template reduce_max(scores, scores_max); // Reshape acc_o from (MMA=4, MMA_M, MMA_K) to (nrow=(2, MMA_M), ncol=(2, MMA_K)) Tensor acc_o_rowcol = make_tensor(acc_o.data(), flash::convert_layout_acc_rowcol(acc_o.layout())); @@ -103,23 +58,22 @@ inline __device__ void softmax_rescale_o(Tensor0 &scores, Tensor1 &scores_max, T template inline __device__ void write_softmax_to_gmem( - Tensor const &tOrP, Tensor &tPgP, TiledCopy gmem_thr_copy_P + Tensor const &tOrP, Tensor &tPgP, TiledCopy gmem_tiled_copy_P ) { // Reshape tOrP from (8, MMA_M, MMA_N) to (8, MMA_M * MMA_N) Layout l = tOrP.layout(); Tensor tPrP = make_tensor(tOrP.data(), make_layout(get<0>(l), make_layout(get<1>(l), get<2>(l)))); CUTE_STATIC_ASSERT_V(size<2>(tPgP) == _1{}); - // TODO(laurent): reactivate the following - // CUTE_STATIC_ASSERT_V(size<1>(tPrP) == size<1>(tPgP)); + CUTE_STATIC_ASSERT_V(size<1>(tPrP) == size<1>(tPgP)); #pragma unroll for (int mi = 0; mi < size<1>(tPrP); ++mi) { - copy(gmem_thr_copy_P, tPrP(_, mi), tPgP(_, mi, 0)); + cute::copy(gmem_tiled_copy_P, tPrP(_, mi), tPgP(_, mi, 0)); } }; //////////////////////////////////////////////////////////////////////////////////////////////////// -template +template inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bidb, const int bidh, const int m_block) { using Element = typename Kernel_traits::Element; @@ -138,16 +92,65 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi constexpr int kNWarps = Kernel_traits::kNWarps; constexpr int MMA_M = kBlockM / decltype(size<0>(typename Kernel_traits::TiledMma::TiledShape_MNK{}))::value; - const BlockInfo binfo(params, bidb); - if (m_block * kBlockM >= binfo.actual_seqlen_q || binfo.actual_seqlen_k == 0) return; + const BlockInfo binfo(params, bidb); + if (m_block * kBlockM >= binfo.actual_seqlen_q) return; + const int n_block_min = !Is_local ? 0 : std::max(0, (m_block * kBlockM + binfo.actual_seqlen_k - binfo.actual_seqlen_q - params.window_size_left) / kBlockN); int n_block_max = cute::ceil_div(binfo.actual_seqlen_k, kBlockN); - if (Is_causal) { - n_block_max = std::min(n_block_max, cute::ceil_div((m_block + 1) * kBlockM, kBlockN)); + if (Is_causal || Is_local) { + n_block_max = std::min(n_block_max, + cute::ceil_div((m_block + 1) * kBlockM + binfo.actual_seqlen_k - binfo.actual_seqlen_q + params.window_size_right, kBlockN)); // if (threadIdx.x == 0 && blockIdx.y == 0 && blockIdx.z == 0) { // printf("m_block = %d, n_block_max = %d\n", m_block, n_block_max); // } } + // We exit early and write 0 to gO and gLSE. This also covers the case where actual_seqlen_k == 0. + // Otherwise we might read OOB elements from gK and gV. + if ((Is_causal || Is_local || !Is_even_MN) && n_block_max <= n_block_min) { + // Save seed and offset for backward. If we don't have this here, the 0-th thread block might + // exit early and no one saves the rng state. +// if (Is_dropout && blockIdx.x == 0 && blockIdx.y == 0 && blockIdx.z == 0 && tidx == 0) { +// auto seeds = at::cuda::philox::unpack(params.philox_args); +// params.rng_state[0] = std::get<0>(seeds); +// params.rng_state[1] = std::get<1>(seeds); +// params.rng_state[0] = 0; +// params.rng_state[1] = 0; +// } + const index_t row_offset_o = binfo.q_offset(params.o_batch_stride, params.o_row_stride, bidb) + + m_block * kBlockM * params.o_row_stride + bidh * params.o_head_stride; + const index_t row_offset_lse = (bidb * params.h + bidh) * params.seqlen_q + m_block * kBlockM; + Tensor gO = make_tensor(make_gmem_ptr(reinterpret_cast(params.o_ptr) + row_offset_o), + Shape, Int>{}, + make_stride(params.o_row_stride, _1{})); + Tensor gLSE = make_tensor(make_gmem_ptr(reinterpret_cast(params.softmax_lse_ptr) + row_offset_lse), + Shape>{}, Stride<_1>{}); + + typename Kernel_traits::GmemTiledCopyO gmem_tiled_copy_O; + auto gmem_thr_copy_O = gmem_tiled_copy_O.get_thread_slice(tidx); + Tensor tOgO = gmem_thr_copy_O.partition_D(gO); + Tensor tOrO = make_tensor(shape(tOgO)); + clear(tOrO); + // Construct identity layout for sO + Tensor cO = make_identity_tensor(make_shape(size<0>(gO), size<1>(gO))); // (BLK_M,BLK_K) -> (blk_m,blk_k) + // Repeat the partitioning with identity layouts + Tensor tOcO = gmem_thr_copy_O.partition_D(cO); + Tensor tOpO = make_tensor(make_shape(size<2>(tOgO))); + if (!Is_even_K) { + #pragma unroll + for (int k = 0; k < size(tOpO); ++k) { tOpO(k) = get<1>(tOcO(0, 0, k)) < params.d; } + } + // Clear_OOB_K must be false since we don't want to write zeros to gmem + flash::copy( + gmem_tiled_copy_O, tOrO, tOgO, tOcO, tOpO, binfo.actual_seqlen_q - m_block * kBlockM + ); + #pragma unroll + for (int m = 0; m < size<1>(tOgO); ++m) { + const int row = get<0>(tOcO(0, m, 0)); + if (row < binfo.actual_seqlen_q - m_block * kBlockM && get<1>(tOcO(0, m, 0)) == 0) { gLSE(row) = INFINITY; } + } + return; + } + // if (tidx == 0) { printf("m_block = %d, n_block_min = %d, n_block_max = %d\n", m_block, n_block_min, n_block_max); } // We iterate over the blocks in reverse order. This is because the last block is the only one // that needs masking when we read K and V from global memory. Moreover, iterating in reverse @@ -185,8 +188,10 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi Tensor sVt = make_tensor(sV.data(), typename Kernel_traits::SmemLayoutVtransposed{}); Tensor sVtNoSwizzle = make_tensor(sV.data(), typename Kernel_traits::SmemLayoutVtransposedNoSwizzle{}); - auto gmem_thr_copy_QKV = typename Kernel_traits::GmemTiledCopyQKV{}.get_thread_slice(tidx); - auto gmem_thr_copy_P = typename Kernel_traits::GmemTiledCopyP{}.get_thread_slice(tidx); + typename Kernel_traits::GmemTiledCopyQKV gmem_tiled_copy_QKV; + auto gmem_thr_copy_QKV = gmem_tiled_copy_QKV.get_thread_slice(tidx); + typename Kernel_traits::GmemTiledCopyP gmem_tiled_copy_P; + auto gmem_thr_copy_P = gmem_tiled_copy_P.get_thread_slice(tidx); Tensor tQgQ = gmem_thr_copy_QKV.partition_S(gQ); Tensor tQsQ = gmem_thr_copy_QKV.partition_D(sQ); @@ -208,16 +213,18 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi // Copy Atom retiling // - auto smem_thr_copy_Q = make_tiled_copy_A(typename Kernel_traits::SmemCopyAtom{}, tiled_mma).get_thread_slice(tidx); - // auto smem_thr_copy_Q = make_tiled_copy_A_warpcontiguousM(typename Kernel_traits::SmemCopyAtom{}, tiled_mma).get_thread_slice(tidx); + auto smem_tiled_copy_Q = make_tiled_copy_A(typename Kernel_traits::SmemCopyAtom{}, tiled_mma); + auto smem_thr_copy_Q = smem_tiled_copy_Q.get_thread_slice(tidx); // if (cute::thread0()) {smem_thr_copy_Q.print_all();} Tensor tSsQ = smem_thr_copy_Q.partition_S(sQ); // if (cute::thread0()) {print(tSsQ.layout()); printf("\n");} - auto smem_thr_copy_K = make_tiled_copy_B(typename Kernel_traits::SmemCopyAtom{}, tiled_mma).get_thread_slice(tidx); + auto smem_tiled_copy_K = make_tiled_copy_B(typename Kernel_traits::SmemCopyAtom{}, tiled_mma); + auto smem_thr_copy_K = smem_tiled_copy_K.get_thread_slice(tidx); Tensor tSsK = smem_thr_copy_K.partition_S(sK); - auto smem_thr_copy_V = make_tiled_copy_B(typename Kernel_traits::SmemCopyAtomTransposed{}, tiled_mma).get_thread_slice(tidx); + auto smem_tiled_copy_V = make_tiled_copy_B(typename Kernel_traits::SmemCopyAtomTransposed{}, tiled_mma); + auto smem_thr_copy_V = smem_tiled_copy_V.get_thread_slice(tidx); Tensor tOsVt = smem_thr_copy_V.partition_S(sVt); // TODO: this might need to change if we change the mma instruction in SM70 @@ -268,8 +275,8 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi Tensor tQrQ = make_fragment_like(tQgQ); // We don't need to clear the sQ smem tiles since we'll only write out the valid outputs - flash::copy(gmem_thr_copy_QKV, tQgQ, tQsQ, tQcQ, tQpQ, - binfo.actual_seqlen_q - m_block * kBlockM); + flash::copy(gmem_tiled_copy_QKV, tQgQ, tQsQ, tQcQ, tQpQ, + binfo.actual_seqlen_q - m_block * kBlockM); if (Kernel_traits::Is_Q_in_regs) { cute::cp_async_fence(); } // // Copy rmem to smem @@ -285,14 +292,14 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi __syncthreads(); Tensor tSrQ_copy_view = smem_thr_copy_Q.retile_D(tSrQ); CUTE_STATIC_ASSERT_V(size<1>(tSsQ) == size<1>(tSrQ_copy_view)); // M - copy(smem_thr_copy_Q, tSsQ, tSrQ_copy_view); + cute::copy(smem_tiled_copy_Q, tSsQ, tSrQ_copy_view); __syncthreads(); } int n_block = n_block_max - 1; // We don't need to clear the sK smem tiles since we'll mask out the scores anyway. - flash::copy(gmem_thr_copy_QKV, tKgK, tKsK, tKVcKV, tKVpKV, - binfo.actual_seqlen_k - n_block * kBlockN); + flash::copy(gmem_tiled_copy_QKV, tKgK, tKsK, tKVcKV, tKVpKV, + binfo.actual_seqlen_k - n_block * kBlockN); cute::cp_async_fence(); // if (threadIdx.x == 0 && blockIdx.y == 0 && blockIdx.z < 2) { print(tKgK); } // __syncthreads(); @@ -302,7 +309,7 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi __syncthreads(); Tensor tSrQ_copy_view = smem_thr_copy_Q.retile_D(tSrQ); CUTE_STATIC_ASSERT_V(size<1>(tSsQ) == size<1>(tSrQ_copy_view)); // M - copy(smem_thr_copy_Q, tSsQ, tSrQ_copy_view); + cute::copy(smem_tiled_copy_Q, tSsQ, tSrQ_copy_view); } // auto seeds = at::cuda::philox::unpack(params.philox_args); @@ -313,13 +320,19 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi clear(acc_o); + float alibi_slope = !Has_alibi ? 0.0f : reinterpret_cast(params.alibi_slopes_ptr)[bidb * params.alibi_slopes_batch_stride + bidh] / params.scale_softmax; + // For performance reason, we separate out two kinds of iterations: // those that need masking on S, and those that don't. // We need masking on S for the very last block when K and V has length not multiple of kBlockN. // We also need masking on S if it's causal, for the last ceil_div(kBlockM, kBlockN) blocks. // We will have at least 1 "masking" iteration. - constexpr int n_masking_steps = Is_causal ? cute::ceil_div(kBlockM, kBlockN) : 1; + // If not even_N, then seqlen_k might end in the middle of a block. In that case we need to + // mask 2 blocks (e.g. when kBlockM == kBlockN), not just 1. + constexpr int n_masking_steps = (!Is_causal && !Is_local) + ? 1 + : ((Is_even_MN && Is_causal) ? cute::ceil_div(kBlockM, kBlockN) : cute::ceil_div(kBlockM, kBlockN) + 1); #pragma unroll for (int masking_step = 0; masking_step < n_masking_steps; ++masking_step, --n_block) { Tensor acc_s = partition_fragment_C(tiled_mma, Shape, Int>{}); // (MMA=4, MMA_M, MMA_N) @@ -330,28 +343,42 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi // Advance gV if (masking_step > 0) { tVgV.data() = tVgV.data() + (-int(kBlockN * params.v_row_stride)); - flash::copy(gmem_thr_copy_QKV, tVgV, tVsV, tKVcKV, tKVpKV); + flash::copy(gmem_tiled_copy_QKV, tVgV, tVsV, tKVcKV, tKVpKV); } else { // Clear the smem tiles to account for predicated off loads - flash::copy( - gmem_thr_copy_QKV, tVgV, tVsV, tKVcKV, tKVpKV, binfo.actual_seqlen_k - n_block * kBlockN + flash::copy( + gmem_tiled_copy_QKV, tVgV, tVsV, tKVcKV, tKVpKV, binfo.actual_seqlen_k - n_block * kBlockN ); } cute::cp_async_fence(); flash::gemm( - acc_s, tSrQ, tSrK, tSsQ, tSsK, tiled_mma, smem_thr_copy_Q, smem_thr_copy_K + acc_s, tSrQ, tSrK, tSsQ, tSsK, tiled_mma, smem_tiled_copy_Q, smem_tiled_copy_K, + smem_thr_copy_Q, smem_thr_copy_K ); // if (cute::thread0()) { print(acc_s); } // Reshape acc_s from (MMA=4, MMA_M, MMA_N) to (nrow=(2, MMA_M), ncol=(2, MMA_N)) Tensor scores = make_tensor(acc_s.data(), flash::convert_layout_acc_rowcol(acc_s.layout())); - // if (cute::thread0()) { print(scores); } + // if (cute::thread0()) { print_tensor(scores); } // We don't put the masking before the matmul S = Q K^T because we don't clear sK // for rows outside actual_seqlen_k. So those rows could have Inf / NaN, and the matmul // can produce Inf / NaN. - if (!Is_causal) { - if (!Is_even_N) { flash::apply_mask(scores, binfo.actual_seqlen_k - n_block * kBlockN); } + + if (Has_alibi) { + flash::apply_alibi( + scores, + n_block * kBlockN, + binfo.actual_seqlen_k, + m_block * kBlockM + (tidx / 32) * 16 + (tidx % 32) / 4, + binfo.actual_seqlen_q, + kNWarps * 16, + alibi_slope + ); + } + + if (!Is_causal && !Is_local) { + if (!Is_even_MN) { flash::apply_mask(scores, binfo.actual_seqlen_k - n_block * kBlockN); } } else { // Tensor caccS = make_identity_tensor(Shape, Int>{}); // (BLK_M,BLK_N) -> (blk_m,blk_n) // Tensor taccScS = thr_mma.partition_C(caccS); // (MMA,MMA_M,MMA_N) @@ -364,20 +391,24 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi // Idk why it's get<1> and not get<0> of the stride. // if (cute::thread0()) { print(idx_row.layout()); print(stride<1>(idx_row)); printf("stride = %d \n", get<1>(stride<1>(idx_row))); } // I can't get the stride from idx_row - flash::apply_mask_causal(scores, n_block * kBlockN, binfo.actual_seqlen_k, - // m_block * kBlockM + get<0>(idx_row(0)), - m_block * kBlockM + (tidx / 32) * 16 + (tidx % 32) / 4, - kNWarps * 16); - // m_block * kBlockM + (tidx / 32) * 16, kNWarps * 16); - // m_block * kBlockM + (tidx / 32) * (kBlockM / kNWarps), 16); + flash::apply_mask_local( + scores, n_block * kBlockN, binfo.actual_seqlen_k, + // m_block * kBlockM + get<0>(idx_row(0)), + m_block * kBlockM + (tidx / 32) * 16 + (tidx % 32) / 4, + binfo.actual_seqlen_q, kNWarps * 16, + params.window_size_left, params.window_size_right + // m_block * kBlockM + (tidx / 32) * 16, kNWarps * 16 + // m_block * kBlockM + (tidx / 32) * (kBlockM / kNWarps), 16 + ); + // if (cute::thread0()) { print_tensor(scores); } } flash::cp_async_wait<0>(); __syncthreads(); - if (n_block > 0) { + if (n_block > n_block_min) { // Advance gK tKgK.data() = tKgK.data() + (-int(kBlockN * params.k_row_stride)); - flash::copy(gmem_thr_copy_QKV, tKgK, tKsK, tKVcKV, tKVpKV); + flash::copy(gmem_tiled_copy_QKV, tKgK, tKsK, tKVcKV, tKVpKV); // This cp_async_fence needs to be in the if block, otherwise the synchronization // isn't right and we get race conditions. cute::cp_async_fence(); @@ -385,24 +416,24 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi // TODO: when we have key_padding_mask we'll need to Check_inf masking_step == 0 - ? softmax_rescale_o(scores, scores_max, scores_sum, acc_o, params.scale_softmax_log2) - : softmax_rescale_o(scores, scores_max, scores_sum, acc_o, params.scale_softmax_log2); + ? softmax_rescale_o(scores, scores_max, scores_sum, acc_o, params.scale_softmax_log2) + : softmax_rescale_o(scores, scores_max, scores_sum, acc_o, params.scale_softmax_log2); // Convert scores from fp32 to fp16/bf16 Tensor rP = flash::convert_type(scores); // Reshape rP from (nrow=(2, MMA_M), ncol=(2, MMA_N)) to ((2, 2, 2), MMA_M, MMA_N / 2) // if using m16n8k16 or ((2, 2, 1), MMA_M, MMA_N) if using m16n8k8. Tensor tOrP = make_tensor(rP.data(), flash::convert_layout_rowcol_Aregs(rP.layout())); - uint32_t block_row_idx = m_block * (kBlockM / 16) + tidx / 32; - uint32_t block_col_idx = n_block * (kBlockN / 32); + int block_row_idx = m_block * (kBlockM / 16) + tidx / 32; + int block_col_idx = n_block * (kBlockN / 32); if (Return_softmax) { Tensor tOrP_copy = make_fragment_like(tOrP); - copy(tOrP, tOrP_copy); + cute::copy(tOrP, tOrP_copy); flash::apply_dropout( tOrP_copy, params.p_dropout_in_uint8_t, seed, offset, block_row_idx, block_col_idx, kNWarps ); - flash::write_softmax_to_gmem(tOrP_copy, tPgP, gmem_thr_copy_P); + flash::write_softmax_to_gmem(tOrP_copy, tPgP, gmem_tiled_copy_P); tPgP.data() = tPgP.data() + (-kBlockN); } if (Is_dropout) { @@ -411,37 +442,38 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi } // if (cute::thread0()) { print(tOrP); } - flash::gemm_A_in_regs(acc_o, tOrP, tOrVt, tOsVt, tiled_mma, smem_thr_copy_V); + flash::gemm_A_in_regs(acc_o, tOrP, tOrVt, tOsVt, tiled_mma, smem_tiled_copy_V, smem_thr_copy_V); // if (cute::thread0()) { print(scores); } // This check is at the end of the loop since we always have at least 1 iteration - if (n_masking_steps > 1 && n_block <= 0) { + if (n_masking_steps > 1 && n_block <= n_block_min) { --n_block; break; } } // These are the iterations where we don't need masking on S - for (; n_block >= 0; --n_block) { + for (; n_block >= n_block_min; --n_block) { Tensor acc_s = partition_fragment_C(tiled_mma, Shape, Int>{}); // (MMA=4, MMA_M, MMA_N) clear(acc_s); flash::cp_async_wait<0>(); __syncthreads(); // Advance gV tVgV.data() = tVgV.data() + (-int(kBlockN * params.v_row_stride)); - flash::copy(gmem_thr_copy_QKV, tVgV, tVsV, tKVcKV, tKVpKV); + flash::copy(gmem_tiled_copy_QKV, tVgV, tVsV, tKVcKV, tKVpKV); cute::cp_async_fence(); flash::gemm( - acc_s, tSrQ, tSrK, tSsQ, tSsK, tiled_mma, smem_thr_copy_Q, smem_thr_copy_K + acc_s, tSrQ, tSrK, tSsQ, tSsK, tiled_mma, smem_tiled_copy_Q, smem_tiled_copy_K, + smem_thr_copy_Q, smem_thr_copy_K ); flash::cp_async_wait<0>(); __syncthreads(); - if (n_block > 0) { + if (n_block > n_block_min) { // Advance gK tKgK.data() = tKgK.data() + (-int(kBlockN * params.k_row_stride)); - flash::copy(gmem_thr_copy_QKV, tKgK, tKsK, tKVcKV, tKVpKV); + flash::copy(gmem_tiled_copy_QKV, tKgK, tKsK, tKVcKV, tKVpKV); // This cp_async_fence needs to be in the if block, otherwise the synchronization // isn't right and we get race conditions. cute::cp_async_fence(); @@ -449,22 +481,44 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi // Reshape acc_s from (MMA=4, MMA_M, MMA_N) to (nrow=(2, MMA_M), ncol=(2, MMA_N)) Tensor scores = make_tensor(acc_s.data(), flash::convert_layout_acc_rowcol(acc_s.layout())); - softmax_rescale_o(scores, scores_max, scores_sum, acc_o, params.scale_softmax_log2); + + if (Has_alibi) { + flash::apply_alibi( + scores, + n_block * kBlockN, + binfo.actual_seqlen_k, + m_block * kBlockM + (tidx / 32) * 16 + (tidx % 32) / 4, + binfo.actual_seqlen_q, + kNWarps * 16, + alibi_slope + ); + } + + if (Is_local && n_block * kBlockN < (m_block + 1) * kBlockM + binfo.actual_seqlen_k - binfo.actual_seqlen_q + params.window_size_right) { + flash::apply_mask_local( + scores, n_block * kBlockN, binfo.actual_seqlen_k, + m_block * kBlockM + (tidx / 32) * 16 + (tidx % 32) / 4, + binfo.actual_seqlen_q, kNWarps * 16, + params.window_size_left, params.window_size_right + ); + } + + softmax_rescale_o(scores, scores_max, scores_sum, acc_o, params.scale_softmax_log2); Tensor rP = flash::convert_type(scores); // Reshape rP from (nrow=(2, MMA_M), ncol=(2, MMA_N)) to ((2, 2, 2), MMA_M, MMA_N / 2) // if using m16n8k16 or ((2, 2, 1), MMA_M, MMA_N) if using m16n8k8. Tensor tOrP = make_tensor(rP.data(), flash::convert_layout_rowcol_Aregs(rP.layout())); - uint32_t block_row_idx = m_block * (kBlockM / 16) + tidx / 32; - uint32_t block_col_idx = n_block * (kBlockN / 32); + int block_row_idx = m_block * (kBlockM / 16) + tidx / 32; + int block_col_idx = n_block * (kBlockN / 32); if (Return_softmax) { Tensor tOrP_copy = make_fragment_like(tOrP); - copy(tOrP, tOrP_copy); + cute::copy(tOrP, tOrP_copy); flash::apply_dropout( tOrP_copy, params.p_dropout_in_uint8_t, seed, offset, block_row_idx, block_col_idx, kNWarps ); - flash::write_softmax_to_gmem(tOrP_copy, tPgP, gmem_thr_copy_P); + flash::write_softmax_to_gmem(tOrP_copy, tPgP, gmem_tiled_copy_P); tPgP.data() = tPgP.data() + (-kBlockN); } if (Is_dropout) { @@ -472,7 +526,7 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi block_row_idx, block_col_idx, kNWarps); } - flash::gemm_A_in_regs(acc_o, tOrP, tOrVt, tOsVt, tiled_mma, smem_thr_copy_V); + flash::gemm_A_in_regs(acc_o, tOrP, tOrVt, tOsVt, tiled_mma, smem_tiled_copy_V, smem_thr_copy_V); } // Epilogue @@ -496,15 +550,15 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi Tensor rO = flash::convert_type(acc_o); Tensor sO = make_tensor(sQ.data(), typename Kernel_traits::SmemLayoutO{}); // (SMEM_M,SMEM_N) // Partition sO to match the accumulator partitioning - auto smem_thr_copy_O = make_tiled_copy_C(typename Kernel_traits::SmemCopyAtomO{}, tiled_mma).get_thread_slice(tidx); - // auto smem_thr_copy_O = make_tiled_copy_C_warpcontiguousM(typename Kernel_traits::SmemCopyAtomO{}, tiled_mma).get_thread_slice(tidx); + auto smem_tiled_copy_O = make_tiled_copy_C(typename Kernel_traits::SmemCopyAtomO{}, tiled_mma); + auto smem_thr_copy_O = smem_tiled_copy_O.get_thread_slice(tidx); Tensor taccOrO = smem_thr_copy_O.retile_S(rO); // ((Atom,AtomNum), MMA_M, MMA_N) Tensor taccOsO = smem_thr_copy_O.partition_D(sO); // ((Atom,AtomNum),PIPE_M,PIPE_N) // sO has the same size as sQ, so we don't need to sync here. if (Kernel_traits::Share_Q_K_smem) { __syncthreads(); } - copy(smem_thr_copy_O, taccOrO, taccOsO); + cute::copy(smem_tiled_copy_O, taccOrO, taccOsO); const index_t row_offset_o = binfo.q_offset(params.o_batch_stride, params.o_row_stride, bidb) + m_block * kBlockM * params.o_row_stride + bidh * params.o_head_stride; @@ -515,14 +569,15 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi Tensor gLSE = make_tensor(make_gmem_ptr(reinterpret_cast(params.softmax_lse_ptr) + row_offset_lse), Shape>{}, Stride<_1>{}); - auto gmem_thr_copy_O = typename Kernel_traits::GmemTiledCopyO{}.get_thread_slice(tidx); + typename Kernel_traits::GmemTiledCopyO gmem_tiled_copy_O; + auto gmem_thr_copy_O = gmem_tiled_copy_O.get_thread_slice(tidx); Tensor tOsO = gmem_thr_copy_O.partition_S(sO); // ((Atom,AtomNum),ATOM_M,ATOM_N) Tensor tOgO = gmem_thr_copy_O.partition_D(gO); __syncthreads(); Tensor tOrO = make_tensor(shape(tOgO)); - copy(gmem_thr_copy_O, tOsO, tOrO); + cute::copy(gmem_tiled_copy_O, tOsO, tOrO); Tensor caccO = make_identity_tensor(Shape, Int>{}); // (BLK_M,BLK_K) -> (blk_m,blk_k) Tensor taccOcO = thr_mma.partition_C(caccO); // (MMA,MMA_M,MMA_K) @@ -548,14 +603,15 @@ inline __device__ void compute_attn_1rowblock(const Params ¶ms, const int bi for (int k = 0; k < size(tOpO); ++k) { tOpO(k) = get<1>(tOcO(0, 0, k)) < params.d; } } // Clear_OOB_K must be false since we don't want to write zeros to gmem - flash::copy( - gmem_thr_copy_O, tOrO, tOgO, tOcO, tOpO, binfo.actual_seqlen_q - m_block * kBlockM + flash::copy( + gmem_tiled_copy_O, tOrO, tOgO, tOcO, tOpO, binfo.actual_seqlen_q - m_block * kBlockM ); } + //////////////////////////////////////////////////////////////////////////////////////////////////// -template +template inline __device__ void compute_attn(const Params ¶ms) { const int m_block = blockIdx.x; // The block index for the batch. @@ -571,7 +627,7 @@ inline __device__ void compute_attn(const Params ¶ms) { // the attention matrix. This way, as long as we have the batch, head, and the location of // the 16 x 32 block within the attention matrix, we can generate the exact same dropout pattern. - flash::compute_attn_1rowblock(params, bidb, bidh, m_block); + flash::compute_attn_1rowblock(params, bidb, bidh, m_block); } //////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/candle-flash-attn/kernels/flash_fwd_launch_template.h b/candle-flash-attn/kernels/flash_fwd_launch_template.h index 398ce077..66ab6206 100644 --- a/candle-flash-attn/kernels/flash_fwd_launch_template.h +++ b/candle-flash-attn/kernels/flash_fwd_launch_template.h @@ -4,15 +4,14 @@ #pragma once -// #include - #include "static_switch.h" #include "flash.h" #include "flash_fwd_kernel.h" -template +template __global__ void flash_fwd_kernel(Flash_fwd_params params) { - flash::compute_attn(params); + static_assert(!(Is_causal && Is_local)); // If Is_local is true, Is_causal should be false + flash::compute_attn(params); } template @@ -26,35 +25,39 @@ void run_flash_fwd(Flash_fwd_params ¶ms, cudaStream_t stream) { const int num_m_block = (params.seqlen_q + Kernel_traits::kBlockM - 1) / Kernel_traits::kBlockM; dim3 grid(num_m_block, params.b, params.h); - // We also use is_even_N to set Unpadded in the BlockInfo constructor, so we need to check - // for cu_seqlens_q as well. - const bool is_even_N = params.cu_seqlens_q == nullptr && params.cu_seqlens_k == nullptr && params.seqlen_k % Kernel_traits::kBlockN == 0; + const bool is_even_MN = params.cu_seqlens_q == nullptr && params.cu_seqlens_k == nullptr && params.seqlen_k % Kernel_traits::kBlockN == 0 && params.seqlen_q % Kernel_traits::kBlockM == 0; const bool is_even_K = params.d == Kernel_traits::kHeadDim; const bool return_softmax = params.p_ptr != nullptr; - BOOL_SWITCH(is_even_N, IsEvenNConst, [&] { + BOOL_SWITCH(is_even_MN, IsEvenMNConst, [&] { BOOL_SWITCH(is_even_K, IsEvenKConst, [&] { - BOOL_SWITCH(return_softmax, ReturnSoftmaxConst, [&] { - // Will only return softmax if dropout, to reduce compilation time. - auto kernel = &flash_fwd_kernel; - // auto kernel = &flash_fwd_kernel; - // if (smem_size >= 48 * 1024) { - // C10_CUDA_CHECK(cudaFuncSetAttribute( - // kernel, cudaFuncAttributeMaxDynamicSharedMemorySize, smem_size)); - // } - int ctas_per_sm; - cudaError status_ = cudaOccupancyMaxActiveBlocksPerMultiprocessor( - &ctas_per_sm, kernel, Kernel_traits::kNThreads, smem_size); - // printf("smem_size = %d, CTAs per SM = %d\n", int(smem_size), ctas_per_sm); - kernel<<>>(params); - // C10_CUDA_KERNEL_LAUNCH_CHECK(); + BOOL_SWITCH((params.window_size_left >= 0 || params.window_size_right >= 0) && !Is_causal, Is_local, [&] { + BOOL_SWITCH(return_softmax, ReturnSoftmaxConst, [&] { + BOOL_SWITCH(params.alibi_slopes_ptr != nullptr, Has_alibi, [&] { + // Will only return softmax if dropout, to reduce compilation time. + // If not IsEvenKConst, we also set IsEvenMNConst to false to reduce number of templates. + // If return_softmax, set IsEvenMNConst to false to reduce number of templates + // If head dim > 128, set IsEvenMNConst to false to reduce number of templates + // If Is_local, set Is_causal to false + auto kernel = &flash_fwd_kernel; + // auto kernel = &flash_fwd_kernel; + // printf("IsEvenMNConst = %d, IsEvenKConst = %d, Is_local = %d, Is_causal = %d, ReturnSoftmaxConst = %d, Is_dropout = %d\n", int(IsEvenMNConst), int(IsEvenKConst), int(Is_local), int(Is_causal), int(ReturnSoftmaxConst), int(Is_dropout)); + // auto kernel = &flash_fwd_kernel; + // int ctas_per_sm; + // cudaError status_ = cudaOccupancyMaxActiveBlocksPerMultiprocessor( + // &ctas_per_sm, kernel, Kernel_traits::kNThreads, smem_size); + // printf("smem_size = %d, CTAs per SM = %d\n", int(smem_size), ctas_per_sm); + kernel<<>>(params); + }); + }); }); }); }); } + template void run_mha_fwd_hdim32(Flash_fwd_params ¶ms, cudaStream_t stream) { - constexpr int Headdim = 32; + constexpr static int Headdim = 32; BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { BOOL_SWITCH(params.is_causal, Is_causal, [&] { run_flash_fwd, Is_dropout, Is_causal>(params, stream); @@ -64,7 +67,7 @@ void run_mha_fwd_hdim32(Flash_fwd_params ¶ms, cudaStream_t stream) { template void run_mha_fwd_hdim64(Flash_fwd_params ¶ms, cudaStream_t stream) { - constexpr int Headdim = 64; + constexpr static int Headdim = 64; BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { BOOL_SWITCH(params.is_causal, Is_causal, [&] { if constexpr(!Is_dropout) { @@ -86,7 +89,7 @@ void run_mha_fwd_hdim64(Flash_fwd_params ¶ms, cudaStream_t stream) { template void run_mha_fwd_hdim96(Flash_fwd_params ¶ms, cudaStream_t stream) { - constexpr int Headdim = 96; + constexpr static int Headdim = 96; // auto dprops = at::cuda::getCurrentDeviceProperties(); bool is_sm8x = true; // dprops->major == 8 && dprops->minor > 0; BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { @@ -112,7 +115,7 @@ void run_mha_fwd_hdim96(Flash_fwd_params ¶ms, cudaStream_t stream) { template void run_mha_fwd_hdim128(Flash_fwd_params ¶ms, cudaStream_t stream) { - constexpr int Headdim = 128; + constexpr static int Headdim = 128; // auto dprops = at::cuda::getCurrentDeviceProperties(); bool is_sm8x = true; // dprops->major == 8 && dprops->minor > 0; BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { @@ -149,7 +152,7 @@ void run_mha_fwd_hdim128(Flash_fwd_params ¶ms, cudaStream_t stream) { template void run_mha_fwd_hdim160(Flash_fwd_params ¶ms, cudaStream_t stream) { - constexpr int Headdim = 160; + constexpr static int Headdim = 160; // auto dprops = at::cuda::getCurrentDeviceProperties(); bool is_sm8x = true; // dprops->major == 8 && dprops->minor > 0; BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { @@ -179,7 +182,7 @@ void run_mha_fwd_hdim160(Flash_fwd_params ¶ms, cudaStream_t stream) { template void run_mha_fwd_hdim192(Flash_fwd_params ¶ms, cudaStream_t stream) { - constexpr int Headdim = 192; + constexpr static int Headdim = 192; BOOL_SWITCH(params.p_dropout < 1.f, Is_dropout, [&] { BOOL_SWITCH(params.is_causal, Is_causal, [&] { if constexpr(!Is_dropout) { @@ -198,7 +201,7 @@ void run_mha_fwd_hdim192(Flash_fwd_params ¶ms, cudaStream_t stream) { template void run_mha_fwd_hdim224(Flash_fwd_params ¶ms, cudaStream_t stream) { - constexpr int Headdim = 224; + constexpr static int Headdim = 224; int device; cudaGetDevice(&device); int max_smem_per_block; @@ -224,7 +227,7 @@ void run_mha_fwd_hdim224(Flash_fwd_params ¶ms, cudaStream_t stream) { template void run_mha_fwd_hdim256(Flash_fwd_params ¶ms, cudaStream_t stream) { - constexpr int Headdim = 256; + constexpr static int Headdim = 256; int device; cudaGetDevice(&device); int max_smem_per_sm, max_smem_per_block; diff --git a/candle-flash-attn/kernels/kernel_traits.h b/candle-flash-attn/kernels/kernel_traits.h index 3468e4bf..f000ff24 100644 --- a/candle-flash-attn/kernels/kernel_traits.h +++ b/candle-flash-attn/kernels/kernel_traits.h @@ -91,17 +91,20 @@ struct Flash_fwd_kernel_traits : public Base { SmemLayoutAtomQ{}, Shape, Int>{})); + // This has to be kBlockN and not 8, otherwise we get wrong results for d=128 + using SmemLayoutAtomVtransposedNoSwizzle = Layout, Int>, + Stride<_1, Int>>; using SmemLayoutAtomVtransposed = decltype( - composition(Swizzle{}, - // This has to be kBlockN and not 8, otherwise we get wrong results for d=128 - Layout, Int>, - Stride<_1, Int>>{})); + composition(Swizzle{}, SmemLayoutAtomVtransposedNoSwizzle{})); using SmemLayoutVtransposed = decltype(tile_to_shape( SmemLayoutAtomVtransposed{}, Shape, Int>{})); // Maybe the VtransposeNoSwizzle just needs to have the right shape // And the strides don't matter? - using SmemLayoutVtransposedNoSwizzle = decltype(SmemLayoutVtransposed{}.layout_fn()); + using SmemLayoutVtransposedNoSwizzle = decltype(tile_to_shape( + SmemLayoutAtomVtransposedNoSwizzle{}, + Shape, Int>{})); + // using SmemLayoutVtransposedNoSwizzle = decltype(SmemLayoutVtransposed{}.layout_fn()); using SmemLayoutAtomO = decltype( composition(Swizzle{}, @@ -110,7 +113,8 @@ struct Flash_fwd_kernel_traits : public Base { using SmemLayoutO = decltype(tile_to_shape( SmemLayoutAtomO{}, Shape, Int>{})); - using SmemCopyAtomO = Copy_Atom; + using SmemCopyAtomO = Copy_Atom; + using SmemCopyAtomOaccum = Copy_Atom; static constexpr int kSmemQCount = size(SmemLayoutQ{}); static constexpr int kSmemKVCount = size(SmemLayoutKV{}) * 2; @@ -138,11 +142,11 @@ struct Flash_fwd_kernel_traits : public Base { DefaultCopy >; using GmemTiledCopyQKV = decltype( - make_tiled_copy(Copy_Atom{}, + make_tiled_copy(Copy_Atom{}, GmemLayoutAtom{}, Layout>{})); // Val layout, 8 vals per read using GmemTiledCopyO = decltype( - make_tiled_copy(Copy_Atom{}, + make_tiled_copy(Copy_Atom{}, GmemLayoutAtom{}, Layout>{})); // Val layout, 8 vals per store static constexpr int kGmemThreadsPerRowP = kBlockN / kGmemElemsPerLoad; @@ -151,10 +155,30 @@ struct Flash_fwd_kernel_traits : public Base { Stride, _1>>; using GmemTiledCopyP = decltype( - make_tiled_copy(Copy_Atom{}, + make_tiled_copy(Copy_Atom{}, GmemLayoutAtomP{}, Layout>{})); // Val layout, 8 vals per store + using GmemLayoutAtomOaccum = std::conditional_t< + kBlockKSmem == 32, + Layout, // Thread layout, 8 threads per row + Stride< _8, _1>>, + Layout, // Thread layout, 16 threads per row + Stride< _16, _1>> + >; + using GmemTiledCopyOaccum = decltype( + make_tiled_copy(Copy_Atom{}, + GmemLayoutAtomOaccum{}, + Layout>{})); // Val layout, 4 vals per store + using GmemLayoutAtomRotcossin = GmemLayoutAtom; + using GmemTiledCopyRotcossin = decltype( + make_tiled_copy(Copy_Atom, Element>{}, + GmemLayoutAtomRotcossin{}, + Layout>{})); // Val layout, 4 vals per load + using GmemTiledCopyRotcossinCont = decltype( + make_tiled_copy(Copy_Atom{}, + GmemLayoutAtomRotcossin{}, + Layout>{})); // Val layout, 8 vals per load }; // Is_V_in_regs is an option to reduce smem usage, but will increase register pressue. @@ -223,16 +247,19 @@ struct Flash_bwd_kernel_traits : public Base { SmemLayoutAtomKV{}, make_shape(Int{}, Int{}))); + using SmemLayoutAtomKtransposedNoSwizzle = Layout, Int>, + Stride<_1, Int>>; using SmemLayoutAtomKtransposed = decltype( - composition(Swizzle{}, - Layout, Int>, - Stride<_1, Int>>{})); + composition(Swizzle{}, SmemLayoutAtomKtransposedNoSwizzle{})); using SmemLayoutKtransposed = decltype(tile_to_shape( SmemLayoutAtomKtransposed{}, make_shape(Int{}, Int{}))); // Maybe the KtransposeNoSwizzle just needs to have the right shape // And the strides don't matter? - using SmemLayoutKtransposedNoSwizzle = decltype(SmemLayoutKtransposed{}.layout_fn()); + using SmemLayoutKtransposedNoSwizzle = decltype(tile_to_shape( + SmemLayoutAtomKtransposedNoSwizzle{}, + make_shape(Int{}, Int{}))); + // using SmemLayoutKtransposedNoSwizzle = decltype(SmemLayoutKtransposed{}.layout_fn()); // TODO: generalize to other values of kBlockN // TODO: what should be the Swizzle here? 3 is faster than 1, and 1 is faster than 2 @@ -250,24 +277,30 @@ struct Flash_bwd_kernel_traits : public Base { using SmemLayoutPdS = decltype(tile_to_shape( SmemLayoutAtomPdS{}, make_shape(Int{}, Int{}))); + using SmemLayoutAtomPdStransposedNoSwizzle = Layout, Int>, + Stride<_1, Int>>; using SmemLayoutAtomPdStransposed = decltype( - composition(Swizzle{}, - Layout, Int>, - Stride<_1, Int>>{})); + composition(Swizzle{}, SmemLayoutAtomPdStransposedNoSwizzle{})); using SmemLayoutPdStransposed = decltype(tile_to_shape( SmemLayoutAtomPdStransposed{}, make_shape(Int{}, Int{}))); - using SmemLayoutPdStransposedNoSwizzle = decltype(SmemLayoutPdStransposed{}.layout_fn()); + using SmemLayoutPdStransposedNoSwizzle = decltype(tile_to_shape( + SmemLayoutAtomPdStransposedNoSwizzle{}, + make_shape(Int{}, Int{}))); + // using SmemLayoutPdStransposedNoSwizzle = decltype(SmemLayoutPdStransposed{}.layout_fn()); using SmemCopyAtomPdS = Copy_Atom; + using SmemLayoutAtomQdOtransposedNoSwizzle = Layout, Int>, + Stride<_1, Int>>; using SmemLayoutAtomQdOtransposed = decltype( - composition(Swizzle{}, - Layout, Int>, - Stride<_1, Int>>{})); + composition(Swizzle{}, SmemLayoutAtomQdOtransposedNoSwizzle{})); using SmemLayoutQdOtransposed = decltype(tile_to_shape( SmemLayoutAtomQdOtransposed{}, make_shape(Int{}, Int{}))); - using SmemLayoutQdOtransposedNoSwizzle = decltype(SmemLayoutQdOtransposed{}.layout_fn()); + using SmemLayoutQdOtransposedNoSwizzle = decltype(tile_to_shape( + SmemLayoutAtomQdOtransposedNoSwizzle{}, + make_shape(Int{}, Int{}))); + // using SmemLayoutQdOtransposedNoSwizzle = decltype(SmemLayoutQdOtransposed{}.layout_fn()); using SmemLayoutAtomdKV = decltype( composition(Swizzle{}, @@ -292,13 +325,11 @@ struct Flash_bwd_kernel_traits : public Base { static constexpr int kSmemdSCount = size(SmemLayoutPdS{}); static constexpr int kSmemPCount = size(SmemLayoutPdS{}); static constexpr int kSmemdQCount = size(SmemLayoutdQ{}); - static constexpr int kSmemdPsumCount = kBlockM; static constexpr int kSmemQdOSize = kSmemQdOCount * sizeof(Element); static constexpr int kSmemKVSize = kSmemKVCount * sizeof(Element); static constexpr int kSmemdSSize = kSmemdSCount * sizeof(Element); static constexpr int kSmemPSize = kSmemPCount * sizeof(Element); static constexpr int kSmemdQSize = kSmemdQCount * sizeof(Element); - static constexpr int kSmemdPsumSize = kSmemdPsumCount * sizeof(ElementAccum); static constexpr int kSmemSize = kSmemQdOSize + (!Is_V_in_regs ? kSmemKVSize + kSmemdSSize + std::max(kSmemPSize, kSmemdQSize) diff --git a/candle-flash-attn/kernels/kernel_traits_sm90.h b/candle-flash-attn/kernels/kernel_traits_sm90.h new file mode 100644 index 00000000..e07f3839 --- /dev/null +++ b/candle-flash-attn/kernels/kernel_traits_sm90.h @@ -0,0 +1,159 @@ +/****************************************************************************** + * Copyright (c) 2023, Tri Dao. + ******************************************************************************/ + +#pragma once + +#include "cute/algorithm/copy.hpp" + +#include "cutlass/cutlass.h" +#include "cutlass/layout/layout.h" +#include + +using namespace cute; + +template +struct Flash_kernel_traits_sm90 { + +#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 800 + using Element = elem_type; + static constexpr bool Has_cp_async = true; +#else + using Element = cutlass::half_t; + static constexpr bool Has_cp_async = false; +#endif + + using ElementAccum = float; + using index_t = uint32_t; + +#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 800 + using MMA_Atom_Arch = std::conditional_t< + std::is_same_v, + MMA_Atom, + MMA_Atom + >; + using ValLayoutMNK = Layout>; +#else + using MMA_Atom_Arch = MMA_Atom; + using ValLayoutMNK = Layout>; +#endif + +#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 750 + using SmemCopyAtom = Copy_Atom; + using SmemCopyAtomTransposed = Copy_Atom; +#else + using SmemCopyAtom = Copy_Atom; + using SmemCopyAtomTransposed = Copy_Atom; +#endif +}; + +template > +struct Flash_fwd_kernel_traits : public Base { + using Element = typename Base::Element; + using ElementAccum = typename Base::ElementAccum; + using index_t = typename Base::index_t; + static constexpr bool Has_cp_async = Base::Has_cp_async; + using SmemCopyAtom = typename Base::SmemCopyAtom; + using SmemCopyAtomTransposed = typename Base::SmemCopyAtomTransposed; + + static constexpr bool Share_Q_K_smem = Share_Q_K_smem_; + static constexpr bool Is_Q_in_regs = Is_Q_in_regs_ || Share_Q_K_smem; + + // The number of threads. + static constexpr int kNWarps = kNWarps_; + static constexpr int kNThreads = kNWarps * 32; + + static constexpr int kBlockM = kBlockM_; + static constexpr int kBlockN = kBlockN_; + static constexpr int kHeadDim = kHeadDim_; + static_assert(kHeadDim % 32 == 0); + static constexpr int kBlockKSmem = kHeadDim % 64 == 0 ? 64 : 32; + static constexpr int kBlockKGmem = kHeadDim % 128 == 0 ? 128 : (kHeadDim % 64 == 0 ? 64 : 32); + static constexpr int kSwizzle = kBlockKSmem == 32 ? 2 : 3; + + using TiledMma = TiledMMA< + typename Base::MMA_Atom_Arch, + Layout,_1,_1>>, // 4x1x1 or 8x1x1 thread group + typename Base::ValLayoutMNK>; // 1x2x1 or 1x2x2 value group for 16x16x16 MMA and LDSM + + using SmemLayoutAtomQ = decltype( + composition(Swizzle{}, + // This has to be kBlockKSmem, using kHeadDim gives wrong results for d=128 + Layout>, + Stride, _1>>{})); + using SmemLayoutQ = decltype(tile_to_shape( + SmemLayoutAtomQ{}, + Shape, Int>{})); + + using SmemLayoutKV = decltype(tile_to_shape( + SmemLayoutAtomQ{}, + Shape, Int>{})); + + using SmemLayoutAtomVtransposed = decltype( + composition(Swizzle{}, + // This has to be kBlockN and not 8, otherwise we get wrong results for d=128 + Layout, Int>, + Stride<_1, Int>>{})); + using SmemLayoutVtransposed = decltype(tile_to_shape( + SmemLayoutAtomVtransposed{}, + Shape, Int>{})); + // Maybe the VtransposeNoSwizzle just needs to have the right shape + // And the strides don't matter? + using SmemLayoutVtransposedNoSwizzle = decltype(SmemLayoutVtransposed{}.layout_fn()); + + using SmemLayoutAtomO = decltype( + composition(Swizzle{}, + Layout, Int>, + Stride, _1>>{})); + using SmemLayoutO = decltype(tile_to_shape( + SmemLayoutAtomO{}, + Shape, Int>{})); + using SmemCopyAtomO = Copy_Atom; + + static constexpr int kSmemQCount = size(SmemLayoutQ{}); + static constexpr int kSmemKVCount = size(SmemLayoutKV{}) * 2; + static constexpr int kSmemQSize = kSmemQCount * sizeof(Element); + static constexpr int kSmemKVSize = kSmemKVCount * sizeof(Element); + static constexpr int kSmemSize = Share_Q_K_smem ? std::max(kSmemQSize, kSmemKVSize) : kSmemQSize + kSmemKVSize; + + static constexpr int kGmemElemsPerLoad = sizeof(cute::uint128_t) / sizeof(Element); + static_assert(kHeadDim % kGmemElemsPerLoad == 0, "kHeadDim must be a multiple of kGmemElemsPerLoad"); + // Using kBlockKSmem here is 6-10% faster than kBlockKGmem for d=128 because of bank conflicts. + // For example, for d=128, smem is split into 2 "pages", each page takes care of columns + // 0-63 and 64-127. If we have 16 threads per row for gmem read, when we write to smem, + // thread 0 - 7 will write to the first page and thread 8 - 15 will write to the second page, + // to the same banks. + static constexpr int kGmemThreadsPerRow = kBlockKSmem / kGmemElemsPerLoad; + static_assert(kNThreads % kGmemThreadsPerRow == 0, "kNThreads must be a multiple of kGmemThreadsPerRow"); + using GmemLayoutAtom = Layout, Int>, + Stride, _1>>; + + // We use CACHEGLOBAL instead of CACHEALWAYS for both Q and K/V, since we won't be reading + // from the same address by the same threadblock. This is slightly faster. + using Gmem_copy_struct = std::conditional_t< + Has_cp_async, + SM80_CP_ASYNC_CACHEGLOBAL, + DefaultCopy + >; + using GmemTiledCopyQKV = decltype( + make_tiled_copy(Copy_Atom{}, + GmemLayoutAtom{}, + Layout>{})); // Val layout, 8 vals per read + using GmemTiledCopyO = decltype( + make_tiled_copy(Copy_Atom{}, + GmemLayoutAtom{}, + Layout>{})); // Val layout, 8 vals per store + static constexpr int kGmemThreadsPerRowP = kBlockN / kGmemElemsPerLoad; + static_assert(kNThreads % kGmemThreadsPerRowP == 0, "kNThreads must be a multiple of kGmemThreadsPerRowP"); + using GmemLayoutAtomP = Layout, Int>, + Stride, _1>>; + + using GmemTiledCopyP = decltype( + make_tiled_copy(Copy_Atom{}, + GmemLayoutAtomP{}, + Layout>{})); // Val layout, 8 vals per store + +}; + +//////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/candle-flash-attn/kernels/softmax.h b/candle-flash-attn/kernels/softmax.h index 3e9a7b45..09a93f14 100644 --- a/candle-flash-attn/kernels/softmax.h +++ b/candle-flash-attn/kernels/softmax.h @@ -8,8 +8,7 @@ #include -#include -#include +#include #include "philox.cuh" #include "utils.h" @@ -117,15 +116,18 @@ inline __device__ void max_scale_exp2_sum(Tensor &tensor, Tens } template -inline __device__ void apply_mask(Tensor &tensor, const uint32_t max_seqlen_k) { +inline __device__ void apply_mask(Tensor &tensor, const int max_seqlen_k, + const int col_idx_offset_ = 0) { // tensor has shape (ncol=(2, MMA_M), nrow=(2, MMA_N)) static_assert(Layout::rank == 2, "Only support 2D Tensor"); - const uint32_t lane_id = threadIdx.x % 32; + const int lane_id = threadIdx.x % 32; + const int col_idx_offset = col_idx_offset_ + (lane_id % 4) * 2; #pragma unroll for (int nj = 0; nj < size<1, 1>(tensor); ++nj) { + const int col_idx_base = col_idx_offset + nj * 8; #pragma unroll for (int j = 0; j < size<1, 0>(tensor); ++j) { - const uint32_t col_idx = nj * 8 + j + (lane_id % 4) * 2; + const int col_idx = col_idx_base + j; if (col_idx >= max_seqlen_k) { // Without the "make_coord" we get wrong results #pragma unroll @@ -137,30 +139,30 @@ inline __device__ void apply_mask(Tensor &tensor, const uint32_t } } -template -inline __device__ void apply_mask_causal(Tensor &tensor, const uint32_t col_idx_offset_, - const uint32_t max_seqlen_k, const uint32_t row_idx_offset_, - const uint32_t warp_row_stride) { +template +inline __device__ void apply_mask_local(Tensor &tensor, const int col_idx_offset_, + const int max_seqlen_k, const int row_idx_offset, + const int max_seqlen_q, const int warp_row_stride, + const int window_size_left, const int window_size_right) { // tensor has shape (ncol=(2, MMA_M), nrow=(2, MMA_N)) static_assert(Layout::rank == 2, "Only support 2D Tensor"); - const uint32_t lane_id = threadIdx.x % 32; - // const uint32_t row_idx_offset = row_idx_offset_ + lane_id / 4; - const uint32_t row_idx_offset = row_idx_offset_; - const uint32_t col_idx_offset = col_idx_offset_ + (lane_id % 4) * 2; + const int lane_id = threadIdx.x % 32; + const int col_idx_offset = col_idx_offset_ + (lane_id % 4) * 2; #pragma unroll for (int mi = 0; mi < size<0, 1>(tensor); ++mi) { - const uint32_t row_idx_base = row_idx_offset + mi * warp_row_stride; + const int row_idx_base = row_idx_offset + mi * warp_row_stride; #pragma unroll for (int i = 0; i < size<0, 0>(tensor); ++i) { - const uint32_t row_idx = row_idx_base + i * 8; - const uint32_t col_idx_limit = std::min(max_seqlen_k, row_idx + 1); + const int row_idx = row_idx_base + i * 8; + const int col_idx_limit_left = std::max(0, row_idx + max_seqlen_k - max_seqlen_q - window_size_left); + const int col_idx_limit_right = std::min(max_seqlen_k, row_idx + 1 + max_seqlen_k - max_seqlen_q + window_size_right); #pragma unroll for (int nj = 0; nj < size<1, 1>(tensor); ++nj) { - const uint32_t col_idx_base = col_idx_offset + nj * 8; + const int col_idx_base = col_idx_offset + nj * 8; #pragma unroll for (int j = 0; j < size<1, 0>(tensor); ++j) { - const uint32_t col_idx = col_idx_base + j; - if (col_idx >= col_idx_limit) { + const int col_idx = col_idx_base + j; + if (col_idx >= col_idx_limit_right || (HasWSLeft && col_idx < col_idx_limit_left)) { tensor(make_coord(i, mi), make_coord(j, nj)) = -INFINITY; } } @@ -174,10 +176,19 @@ inline __device__ void apply_mask_causal(Tensor &tensor, const u } } +template +inline __device__ void apply_mask_causal(Tensor &tensor, const int col_idx_offset_, + const int max_seqlen_k, const int row_idx_offset, + const int max_seqlen_q, const int warp_row_stride) { + // Causal masking is equivalent to local masking with window_size_left = infinity and window_size_right = 0 + apply_mask_local(tensor, col_idx_offset_, max_seqlen_k, row_idx_offset, + max_seqlen_q, warp_row_stride, -1, 0); +} + template inline __device__ void apply_mask_causal_w_idx( Tensor &tensor, Tensor const &idx_rowcol, - const uint32_t col_idx_offset_, const uint32_t max_seqlen_k, const uint32_t row_idx_offset_) + const int col_idx_offset_, const int max_seqlen_k, const int row_idx_offset) { // tensor has shape (ncol=(2, MMA_M), nrow=(2, MMA_N)) static_assert(Layout0::rank == 2, "Only support 2D Tensor"); @@ -186,7 +197,7 @@ inline __device__ void apply_mask_causal_w_idx( CUTE_STATIC_ASSERT_V(size<1>(tensor) == size<1>(idx_rowcol)); #pragma unroll for (int mi = 0; mi < size<0>(tensor); ++mi) { - const uint32_t col_idx_limit = std::min(max_seqlen_k, 1 + row_idx_offset_ + get<0>(idx_rowcol(mi, 0))); + const int col_idx_limit = std::min(max_seqlen_k, 1 + row_idx_offset + get<0>(idx_rowcol(mi, 0))); #pragma unroll for (int ni = 0; ni < size<1, 1>(tensor); ++ni) { if (col_idx_offset_ + get<1>(idx_rowcol(0, ni)) >= col_idx_limit) { @@ -204,8 +215,8 @@ inline __device__ void apply_mask_causal_w_idx( template inline __device__ void apply_dropout(Tensor &tensor, uint8_t p_dropout_in_uint8_t, unsigned long long seed, unsigned long long offset, - uint32_t block_row_start, uint32_t block_col_start, - uint32_t block_row_stride) { + int block_row_start, int block_col_start, + int block_row_stride) { // tensor has shape (8, MMA_M, MMA_N / 2) using T = typename Engine::value_type; auto encode_dropout = [](bool keep, T val) { diff --git a/candle-flash-attn/kernels/utils.h b/candle-flash-attn/kernels/utils.h index 2221a2fa..6fb39dc4 100644 --- a/candle-flash-attn/kernels/utils.h +++ b/candle-flash-attn/kernels/utils.h @@ -87,46 +87,6 @@ inline __device__ uint32_t convert_relu2(const float2 x) { //////////////////////////////////////////////////////////////////////////////////////////////////// -template -inline __device__ float2 half2_unpack(uint32_t a); - -template <> -inline __device__ float2 half2_unpack<__half>(uint32_t a) { - return __half22float2(reinterpret_cast<__half2 (&)>(a)); -} - -#if defined(__CUDA_ARCH__) && __CUDA_ARCH__ >= 800 -template <> -inline __device__ float2 half2_unpack<__nv_bfloat16>(uint32_t a) { - return __bfloat1622float2(reinterpret_cast<__nv_bfloat162 (&)>(a)); -} -#endif - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -// Convert two half2's or bf162's into float, then take their dot product. -template -inline __device__ float hfma2_to_float(const uint32_t a, const uint32_t b) { - float2 af = flash::half2_unpack(a); - float2 bf = flash::half2_unpack(b); - return af.x * bf.x + af.y * bf.y; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - -// Converted two vectors of 8 half's or bf16's into float, then take their dot product. -template -inline __device__ float hmulsum8(const uint4 a, const uint4 b) { - float sum; - sum = flash::hfma2_to_float(a.x, b.x); - sum += flash::hfma2_to_float(a.y, b.y); - sum += flash::hfma2_to_float(a.z, b.z); - sum += flash::hfma2_to_float(a.w, b.w); - return sum; -} - -//////////////////////////////////////////////////////////////////////////////////////////////////// - template struct MaxOp { __device__ inline T operator()(T const & x, T const & y) { return x > y ? x : y; } @@ -173,10 +133,12 @@ static __device__ inline T run(T x, Operator &op) { template + typename TiledMma, typename TiledCopyA, typename TiledCopyB, + typename ThrCopyA, typename ThrCopyB> inline __device__ void gemm(Tensor0 &acc, Tensor1 &tCrA, Tensor2 &tCrB, Tensor3 const& tCsA, Tensor4 const& tCsB, TiledMma tiled_mma, - TiledCopy0 smem_thr_copy_A, TiledCopy1 smem_thr_copy_B) { + TiledCopyA smem_tiled_copy_A, TiledCopyB smem_tiled_copy_B, + ThrCopyA smem_thr_copy_A, ThrCopyB smem_thr_copy_B) { CUTE_STATIC_ASSERT_V(size<1>(tCrA) == size<1>(acc)); // MMA_M CUTE_STATIC_ASSERT_V(size<1>(tCrB) == size<2>(acc)); // MMA_N CUTE_STATIC_ASSERT_V(size<2>(tCrA) == size<2>(tCrB)); // MMA_K @@ -184,13 +146,13 @@ inline __device__ void gemm(Tensor0 &acc, Tensor1 &tCrA, Tensor2 &tCrB, Tensor3 CUTE_STATIC_ASSERT_V(size<1>(tCsA) == size<1>(tCrA_copy_view)); // M Tensor tCrB_copy_view = smem_thr_copy_B.retile_D(tCrB); CUTE_STATIC_ASSERT_V(size<1>(tCsB) == size<1>(tCrB_copy_view)); // N - if (!A_in_regs) { copy(smem_thr_copy_A, tCsA(_, _, _0{}), tCrA_copy_view(_, _, _0{})); } - if (!B_in_regs) { copy(smem_thr_copy_B, tCsB(_, _, _0{}), tCrB_copy_view(_, _, _0{})); } + if (!A_in_regs) { cute::copy(smem_tiled_copy_A, tCsA(_, _, _0{}), tCrA_copy_view(_, _, _0{})); } + if (!B_in_regs) { cute::copy(smem_tiled_copy_B, tCsB(_, _, _0{}), tCrB_copy_view(_, _, _0{})); } #pragma unroll for (int i = 0; i < size<2>(tCrA); ++i) { if (i < size<2>(tCrA) - 1) { - if (!A_in_regs) { copy(smem_thr_copy_A, tCsA(_, _, i + 1), tCrA_copy_view(_, _, i + 1)); } - if (!B_in_regs) { copy(smem_thr_copy_B, tCsB(_, _, i + 1), tCrB_copy_view(_, _, i + 1)); } + if (!A_in_regs) { cute::copy(smem_tiled_copy_A, tCsA(_, _, i + 1), tCrA_copy_view(_, _, i + 1)); } + if (!B_in_regs) { cute::copy(smem_tiled_copy_B, tCsB(_, _, i + 1), tCrB_copy_view(_, _, i + 1)); } } cute::gemm(tiled_mma, tCrA(_, _, i), tCrB(_, _, i), acc); } @@ -199,19 +161,20 @@ inline __device__ void gemm(Tensor0 &acc, Tensor1 &tCrA, Tensor2 &tCrB, Tensor3 //////////////////////////////////////////////////////////////////////////////////////////////////// template + typename TiledMma, typename TiledCopy, typename ThrCopy> inline __device__ void gemm_A_in_regs(Tensor0 &acc, Tensor1 &tCrA, Tensor2 &tCrB, Tensor3 const& tCsB, - TiledMma tiled_mma, TiledCopy smem_thr_copy_B) { + TiledMma tiled_mma, TiledCopy smem_tiled_copy_B, + ThrCopy smem_thr_copy_B) { CUTE_STATIC_ASSERT_V(size<1>(tCrA) == size<1>(acc)); // MMA_M CUTE_STATIC_ASSERT_V(size<1>(tCrB) == size<2>(acc)); // MMA_N CUTE_STATIC_ASSERT_V(size<2>(tCrA) == size<2>(tCrB)); // MMA_K Tensor tCrB_copy_view = smem_thr_copy_B.retile_D(tCrB); CUTE_STATIC_ASSERT_V(size<1>(tCsB) == size<1>(tCrB_copy_view)); // N - copy(smem_thr_copy_B, tCsB(_, _, _0{}), tCrB_copy_view(_, _, _0{})); + cute::copy(smem_tiled_copy_B, tCsB(_, _, _0{}), tCrB_copy_view(_, _, _0{})); #pragma unroll for (int i = 0; i < size<2>(tCrA); ++i) { if (i < size<2>(tCrA) - 1) { - copy(smem_thr_copy_B, tCsB(_, _, i + 1), tCrB_copy_view(_, _, i + 1)); + cute::copy(smem_tiled_copy_B, tCsB(_, _, i + 1), tCrB_copy_view(_, _, i + 1)); } cute::gemm(tiled_mma, tCrA(_, _, i), tCrB(_, _, i), acc); } @@ -225,7 +188,10 @@ inline __device__ auto convert_layout_acc_rowcol(Layout acc_layout) { static_assert(decltype(size<0>(acc_layout))::value == 4); static_assert(decltype(rank(acc_layout))::value == 3); auto l = logical_divide(acc_layout, Shape<_2>{}); // ((2, 2), MMA_M, MMA_N) - return make_layout(make_layout(get<0, 1>(l), get<1>(l)), make_layout(get<0, 0>(l), get<2>(l))); + // TD [2023-08-13]: Idk why but get<0, 1>(l) doesn't work for Cutlass 3.2, I'm getting + // "int_tuple.hpp(74): error: conversion to inaccessible base class" + // return make_layout(make_layout(get<0, 1>(l), get<1>(l)), make_layout(get<0, 0>(l), get<2>(l))); + return make_layout(make_layout(get<1>(get<0>(l)), get<1>(l)), make_layout(get<0>(get<0>(l)), get<2>(l))); }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -241,9 +207,13 @@ inline __device__ auto convert_layout_rowcol_Aregs(Layout rowcol_layout) { static_assert(mma_shape_K == 8 || mma_shape_K == 16); constexpr int MMA_N_divisor = mma_shape_K == 8 ? 1 : 2; auto l = logical_divide(rowcol_layout, Shape>>{}); // ((2, MMA_M), (2, (2, MMA_N / 2))) - return make_layout(make_layout(get<1, 0>(l), get<0, 0>(l), get<1, 1, 0>(l)), - get<0, 1>(l), - get<1, 1, 1>(l)); + // TD [2023-08-13]: Same error as above on Cutlass 3.2 + // return make_layout(make_layout(get<1, 0>(l), get<0, 0>(l), get<1, 1, 0>(l)), + // get<0, 1>(l), + // get<1, 1, 1>(l)); + return make_layout(make_layout(get<0>(get<1>(l)), get<0>(get<0>(l)), get<0>(get<1>(get<1>(l)))), + get<1>(get<0>(l)), + get<1>(get<1>(get<1>(l)))); }; //////////////////////////////////////////////////////////////////////////////////////////////////// @@ -319,9 +289,9 @@ void cp_async_wait() { template -inline __device__ void copy(TiledCopy thr_copy, Tensor const &S, +inline __device__ void copy(TiledCopy tiled_copy, Tensor const &S, Tensor &D, Tensor const &identity_MN, - Tensor const &predicate_K, int max_MN=0) { + Tensor const &predicate_K, const int max_MN=0) { CUTE_STATIC_ASSERT_V(rank(S) == Int<3>{}); CUTE_STATIC_ASSERT_V(rank(D) == Int<3>{}); CUTE_STATIC_ASSERT_V(size<0>(S) == size<0>(D)); // MMA @@ -335,13 +305,13 @@ inline __device__ void copy(TiledCopy thr_copy, Tensor const & #pragma unroll for (int k = 0; k < size<2>(S); ++k) { if (Is_even_K || predicate_K(k)) { - copy(thr_copy, S(_, m, k), D(_, m, k)); + cute::copy(tiled_copy, S(_, m, k), D(_, m, k)); } else if (Clear_OOB_K) { - clear(D(_, m, k)); + cute::clear(D(_, m, k)); } } } else if (Clear_OOB_MN) { - clear(D(_, m, _)); + cute::clear(D(_, m, _)); } } // TD [2023-04-13]: Strange that the code below can cause race condition. @@ -350,7 +320,7 @@ inline __device__ void copy(TiledCopy thr_copy, Tensor const & // #pragma unroll // for (int m = 0; m < size<1>(S); ++m) { // if (Is_even_MN || get<0>(identity_MN(0, m, 0)) < max_MN) { - // copy(thr_copy, S(_, m, _), D(_, m, _)); + // copy(tiled_copy, S(_, m, _), D(_, m, _)); // } else if (Clear_OOB_MN) { // clear(D(_, m, _)); // } @@ -362,7 +332,7 @@ inline __device__ void copy(TiledCopy thr_copy, Tensor const & // #pragma unroll // for (int m = 0; m < size<1>(S); ++m) { // if (Is_even_MN || get<0>(identity_MN(0, m, 0)) < max_MN) { - // copy(thr_copy, S(_, m, k), D(_, m, k)); + // copy(tiled_copy, S(_, m, k), D(_, m, k)); // } else if (Clear_OOB_MN) { // clear(D(_, m, k)); // } diff --git a/candle-flash-attn/src/ffi.rs b/candle-flash-attn/src/ffi.rs index 90f34e43..ca65520b 100644 --- a/candle-flash-attn/src/ffi.rs +++ b/candle-flash-attn/src/ffi.rs @@ -7,6 +7,8 @@ extern "C" { v_ptr: *const c_void, o_ptr: *const c_void, softmax_lse_ptr: *const c_void, + alibi_slopes_ptr: *const c_void, + cu_seqlens_q_ptr: *const i32, cu_seqlens_k_ptr: *const i32, @@ -14,6 +16,7 @@ extern "C" { k_batch_stride: u32, v_batch_stride: u32, o_batch_stride: u32, + alibi_slopes_batch_stride: u32, q_row_stride: u32, k_row_stride: u32, @@ -37,8 +40,11 @@ extern "C" { seqlen_q_rounded: u32, seqlen_k_rounded: u32, - is_causal: c_int, is_bf16: c_int, + is_causal: c_int, + + window_size_left: c_int, + window_size_right: c_int, ); } diff --git a/candle-flash-attn/src/lib.rs b/candle-flash-attn/src/lib.rs index 3395bd0d..21a06b5e 100644 --- a/candle-flash-attn/src/lib.rs +++ b/candle-flash-attn/src/lib.rs @@ -3,12 +3,14 @@ mod ffi; use candle::backend::BackendStorage; use candle::cuda_backend::cudarc::driver::DevicePtr; use candle::cuda_backend::WrapErr; -use candle::{CpuStorage, Layout, Result, Shape, Tensor}; +use candle::{CpuStorage, DType, Layout, Result, Shape, Tensor}; use half::{bf16, f16}; pub struct FlashAttn { pub softmax_scale: f32, - pub causal: bool, + pub alibi_slopes: Option, + pub window_size_left: Option, + pub window_size_right: Option, } fn round_multiple(x: usize, m: usize) -> usize { @@ -85,6 +87,51 @@ impl FlashAttn { candle::bail!("number of k/v heads {num_heads_k} must divide number of heads in query {num_heads}") } + let alibi_slopes_ptr = if let Some(alibi_slopes) = &self.alibi_slopes { + if alibi_slopes.dtype() != DType::F32 { + candle::bail!( + "DType mismatch alibi_slopes {:?}, expected {:?}", + alibi_slopes.dtype(), + DType::F32 + ); + } + + let (alibi_slopes, alibi_slopes_layout) = alibi_slopes.storage_and_layout(); + + if num_heads != alibi_slopes_layout.shape().dims1()? { + candle::bail!( + "shape mismatch alibi_slopes {:?}, expected {:?}", + alibi_slopes_layout.shape(), + (num_heads) + ); + } + + let alibi_slopes = match &*alibi_slopes { + candle::Storage::Cuda(c) => c.as_cuda_slice::()?, + _ => candle::bail!("alibi_slopes must be a cuda tensor"), + }; + + let alibi_slopes = alibi_slopes.slice(alibi_slopes_layout.start_offset()..); + + *alibi_slopes.device_ptr() as *const core::ffi::c_void + } else { + std::ptr::null() + }; + + // if window_size_left > self.max_seqlen_k or None => -1 + let mut window_size_left = self + .window_size_left + .filter(|v| v <= &seqlen_k) + .map(|v| v as i32) + .unwrap_or(-1); + + // if window_size_right > self.max_seqlen_k or None => -1 + let mut window_size_right = self + .window_size_right + .filter(|v| v <= &seqlen_k) + .map(|v| v as i32) + .unwrap_or(-1); + let head_size = round_multiple(head_size_og, 8); let head_size_rounded = round_multiple(head_size, 32); let seqlen_q_rounded = round_multiple(seqlen_q, 128); @@ -94,9 +141,22 @@ impl FlashAttn { let dst = unsafe { dev.alloc::(elem_count) }.w()?; let softmax_lse = dev.alloc_zeros::(b_sz * num_heads * seqlen_q).w()?; - let causal = if self.causal { 1 } else { 0 }; let is_bf16 = if is_bf16 { 1 } else { 0 }; + // Causal is the special case where window_size_right == 0 and window_size_left < 0. + // Local is the more general case where window_size_right >= 0 or window_size_left >= 0. + let is_causal = if window_size_left < 0 && window_size_right == 0 { + 1 + } else { + 0 + }; + if window_size_left < 0 && window_size_right >= 0 { + window_size_left = seqlen_k as i32; + } + if window_size_left >= 0 && window_size_right < 0 { + window_size_right = seqlen_k as i32; + } + unsafe { let q_ptr = *q.device_ptr() as *const core::ffi::c_void; let k_ptr = *k.device_ptr() as *const core::ffi::c_void; @@ -109,12 +169,14 @@ impl FlashAttn { v_ptr, dst_ptr, softmax_lse_ptr, + /* alibi_slopes_ptr */ alibi_slopes_ptr, /* cu_seqlens_q_ptr */ std::ptr::null(), /* cu_seqlens_k_ptr */ std::ptr::null(), /* q_batch_stride */ q_stride[0] as u32, /* k_batch_stride */ k_stride[0] as u32, /* v_batch_stride */ v_stride[0] as u32, /* o_batch_stride */ o_stride[0] as u32, + /* alibi_slopes_batch_stride */ 0, /* q_row_stride */ q_stride[q_rank - 3] as u32, /* k_row_stride */ k_stride[k_rank - 3] as u32, /* v_row_stride */ v_stride[v_rank - 3] as u32, @@ -133,8 +195,10 @@ impl FlashAttn { /* seqlen_k */ seqlen_k as u32, /* seqlen_q_rounded */ seqlen_q_rounded as u32, /* seqlen_k_rounded */ seqlen_k_rounded as u32, - /* is_causal */ causal, /* is_bf16 */ is_bf16, + /* is_causal */ is_causal, + /* window_size_left */ window_size_left, + /* window_size_right */ window_size_right, ) } @@ -197,20 +261,137 @@ pub fn flash_attn( softmax_scale: f32, causal: bool, ) -> Result { + let window_size_left = None; + let window_size_right = if causal { Some(0) } else { None }; + let op = FlashAttn { softmax_scale, - causal, + alibi_slopes: None, + window_size_left, + window_size_right, + }; + q.apply_op3(k, v, op) +} + +/// Flash-attention v2 layer. +/// +/// This implements scaled dot-product attention, `softmax(Q @ K^T . softmax_scale) @ V`. +/// Multi-query and grouped-query attention are supported by using tensors k and v with fewer heads +/// than q, the number of heads in k and v has to be divisible by the number of heads in q. +/// +/// # Arguments +/// +/// * `q` - Query tensor with shape `(batch, seq_len_q, num_heads_q, head_size)`. +/// * `k` - Key tensor with shape `(batch, seq_len_kv, num_heads_kv, head_size)`. +/// * `v` - Value tensor with shape `(batch, seq_len_kv, num_heads_kv, head_size)`. +/// * `window_size_left` - Limit left attention to value tokens. +/// * `window_size_right` - Limit right attention to value tokens. +/// +/// # Causal mask +/// +/// `window_size_left=None` with `window_size_right=Some(0)` applies a causal mask to the result +/// of `Q @ K^T` +/// +/// The resulting tensor has dimensions `(batch, seq_len_q, num_heads_q, head_size)`. +pub fn flash_attn_windowed( + q: &Tensor, + k: &Tensor, + v: &Tensor, + softmax_scale: f32, + window_size_left: Option, + window_size_right: Option, +) -> Result { + let op = FlashAttn { + softmax_scale, + alibi_slopes: None, + window_size_left, + window_size_right, + }; + q.apply_op3(k, v, op) +} + +/// Flash-attention v2 layer. +/// +/// This implements scaled dot-product attention, `softmax(Q @ K^T . softmax_scale) @ V`. +/// Multi-query and grouped-query attention are supported by using tensors k and v with fewer heads +/// than q, the number of heads in k and v has to be divisible by the number of heads in q. +/// +/// # Arguments +/// +/// * `q` - Query tensor with shape `(batch, seq_len_q, num_heads_q, head_size)`. +/// * `k` - Key tensor with shape `(batch, seq_len_kv, num_heads_kv, head_size)`. +/// * `v` - Value tensor with shape `(batch, seq_len_kv, num_heads_kv, head_size)`. +/// * `alibi_slopes` - Alibi slopes tensor with shape `(num_heads_q)`. +/// +/// The resulting tensor has dimensions `(batch, seq_len_q, num_heads_q, head_size)`. +pub fn flash_attn_alibi( + q: &Tensor, + k: &Tensor, + v: &Tensor, + alibi_slopes: &Tensor, + softmax_scale: f32, + causal: bool, +) -> Result { + let window_size_left = None; + let window_size_right = if causal { Some(0) } else { None }; + + let op = FlashAttn { + softmax_scale, + alibi_slopes: Some(alibi_slopes.clone()), + window_size_left, + window_size_right, + }; + q.apply_op3(k, v, op) +} + +/// Flash-attention v2 layer. +/// +/// This implements scaled dot-product attention, `softmax(Q @ K^T . softmax_scale) @ V`. +/// Multi-query and grouped-query attention are supported by using tensors k and v with fewer heads +/// than q, the number of heads in k and v has to be divisible by the number of heads in q. +/// +/// # Arguments +/// +/// * `q` - Query tensor with shape `(batch, seq_len_q, num_heads_q, head_size)`. +/// * `k` - Key tensor with shape `(batch, seq_len_kv, num_heads_kv, head_size)`. +/// * `v` - Value tensor with shape `(batch, seq_len_kv, num_heads_kv, head_size)`. +/// * `alibi_slopes` - Alibi slopes tensor with shape `(num_heads_q)`. +/// * `window_size_left` - Limit left attention to value tokens. +/// * `window_size_right` - Limit right attention to value tokens. +/// +/// # Causal mask +/// +/// `window_size_left=None` with `window_size_right=Some(0)` applies a causal mask to the result +/// of `Q @ K^T` +/// +/// The resulting tensor has dimensions `(batch, seq_len_q, num_heads_q, head_size)`. +pub fn flash_attn_alibi_windowed( + q: &Tensor, + k: &Tensor, + v: &Tensor, + alibi_slopes: &Tensor, + softmax_scale: f32, + window_size_left: Option, + window_size_right: Option, +) -> Result { + let op = FlashAttn { + softmax_scale, + alibi_slopes: Some(alibi_slopes.clone()), + window_size_left, + window_size_right, }; q.apply_op3(k, v, op) } struct FlashAttnVarLen { - softmax_scale: f32, - causal: bool, - max_seqlen_q: usize, - max_seqlen_k: usize, - seqlens_q: Tensor, - seqlens_k: Tensor, + pub softmax_scale: f32, + pub max_seqlen_q: usize, + pub max_seqlen_k: usize, + pub seqlens_q: Tensor, + pub seqlens_k: Tensor, + pub alibi_slopes: Option, + pub window_size_left: Option, + pub window_size_right: Option, } impl FlashAttnVarLen { @@ -311,7 +492,54 @@ impl FlashAttnVarLen { if nseqlens_k != nseqlens_q { candle::bail!("seqlens_q and seqlens_k should have the same number of elements {nseqlens_q} <> {nseqlens_k}") } + let batch_size = nseqlens_q - 1; + + let alibi_slopes_ptr = if let Some(alibi_slopes) = &self.alibi_slopes { + if alibi_slopes.dtype() != DType::F32 { + candle::bail!( + "DType mismatch alibi_slopes {:?}, expected {:?}", + alibi_slopes.dtype(), + DType::F32 + ); + } + + let (alibi_slopes, alibi_slopes_layout) = alibi_slopes.storage_and_layout(); + + if num_heads != alibi_slopes_layout.shape().dims1()? { + candle::bail!( + "shape mismatch alibi_slopes {:?}, expected {:?}", + alibi_slopes_layout.shape(), + (num_heads) + ); + } + + let alibi_slopes = match &*alibi_slopes { + candle::Storage::Cuda(c) => c.as_cuda_slice::()?, + _ => candle::bail!("alibi_slopes must be a cuda tensor"), + }; + + let alibi_slopes = alibi_slopes.slice(alibi_slopes_layout.start_offset()..); + + *alibi_slopes.device_ptr() as *const core::ffi::c_void + } else { + std::ptr::null() + }; + + // if window_size_left > self.max_seqlen_k or None => -1 + let mut window_size_left = self + .window_size_left + .filter(|v| v <= &self.max_seqlen_k) + .map(|v| v as i32) + .unwrap_or(-1); + + // if window_size_right > self.max_seqlen_k or None => -1 + let mut window_size_right = self + .window_size_right + .filter(|v| v <= &self.max_seqlen_k) + .map(|v| v as i32) + .unwrap_or(-1); + let head_size = round_multiple(head_size_og, 8); let head_size_rounded = round_multiple(head_size, 32); let seqlen_q_rounded = round_multiple(self.max_seqlen_q, 128); @@ -323,9 +551,22 @@ impl FlashAttnVarLen { .alloc_zeros::(batch_size * num_heads * self.max_seqlen_q) .w()?; - let causal = if self.causal { 1 } else { 0 }; let is_bf16 = if is_bf16 { 1 } else { 0 }; + // Causal is the special case where window_size_right == 0 and window_size_left < 0. + // Local is the more general case where window_size_right >= 0 or window_size_left >= 0. + let is_causal = if window_size_left < 0 && window_size_right == 0 { + 1 + } else { + 0 + }; + if window_size_left < 0 && window_size_right >= 0 { + window_size_left = self.max_seqlen_k as i32; + } + if window_size_left >= 0 && window_size_right < 0 { + window_size_right = self.max_seqlen_k as i32; + } + unsafe { let q_ptr = *q.device_ptr() as *const core::ffi::c_void; let k_ptr = *k.device_ptr() as *const core::ffi::c_void; @@ -340,12 +581,14 @@ impl FlashAttnVarLen { v_ptr, dst_ptr, softmax_lse_ptr, + /* alibi_slopes_ptr */ alibi_slopes_ptr, /* cu_seqlens_q_ptr */ seqlens_q_ptr, /* cu_seqlens_k_ptr */ seqlens_k_ptr, /* q_batch_stride */ 0, /* k_batch_stride */ 0, /* v_batch_stride */ 0, /* o_batch_stride */ 0, + /* alibi_slopes_batch_stride */ 0, /* q_row_stride */ q_stride[q_rank - 3] as u32, /* k_row_stride */ k_stride[k_rank - 3] as u32, /* v_row_stride */ v_stride[v_rank - 3] as u32, @@ -364,8 +607,10 @@ impl FlashAttnVarLen { /* seqlen_k */ self.max_seqlen_k as u32, /* seqlen_q_rounded */ seqlen_q_rounded as u32, /* seqlen_k_rounded */ seqlen_k_rounded as u32, - /* is_causal */ causal, /* is_bf16 */ is_bf16, + /* is_causal */ is_causal, + /* window_size_left */ window_size_left, + /* window_size_right */ window_size_right, ) } @@ -440,13 +685,176 @@ pub fn flash_attn_varlen( softmax_scale: f32, causal: bool, ) -> Result { + let window_size_left = None; + let window_size_right = if causal { Some(0) } else { None }; + let op = FlashAttnVarLen { softmax_scale, - causal, max_seqlen_q, max_seqlen_k, seqlens_q: seqlens_q.clone(), seqlens_k: seqlens_k.clone(), + alibi_slopes: None, + window_size_left, + window_size_right, + }; + q.apply_op3(k, v, op) +} + +#[allow(clippy::too_many_arguments)] +/// Flash-attention v2 layer with variable-length batching. +/// +/// This implements scaled dot-product attention, `softmax(Q @ K^T . softmax_scale) @ V`. +/// Multi-query and grouped-query attention are supported by using tensors k and v with fewer heads +/// than q, the number of heads in k and v has to be divisible by the number of heads in q. +/// +/// # Arguments +/// +/// * `q` - Query tensor with shape `(total_q, num_heads_q, head_size)`. +/// * `k` - Key tensor with shape `(total_kv, num_heads_kv, head_size)`. +/// * `v` - Value tensor with shape `(total_kv, num_heads_kv, head_size)`. +/// * `seqlens_q` - The cumulative lengths of the sequences in the batch, used to index in q. +/// * `seqlens_k` - The cumulative lengths of the sequences in the batch, used to index in k and v. +/// * `max_seqlen_q` - The maximum query sequence length for q in the batch. +/// * `max_seqlen_k` - The maximum query sequence length for k and v in the batch. +/// * `window_size_left` - Limit left attention to value tokens. +/// * `window_size_right` - Limit right attention to value tokens. +/// +/// `seqlens_q` and `seqlens_k` contain `batch_size + 1` elements, typically `0`, `seqlen_1`, +/// `seqlen_1 + seqlen_2`, etc. +/// +/// The resulting tensor has dimensions `(total_q, num_heads_q, head_size)`. +/// +/// # Causal mask +/// +/// `window_size_left=None` with `window_size_right=Some(0)` applies a causal mask to the result +/// of `Q @ K^T` +pub fn flash_attn_varlen_windowed( + q: &Tensor, + k: &Tensor, + v: &Tensor, + seqlens_q: &Tensor, + seqlens_k: &Tensor, + max_seqlen_q: usize, + max_seqlen_k: usize, + softmax_scale: f32, + window_size_left: Option, + window_size_right: Option, +) -> Result { + let op = FlashAttnVarLen { + softmax_scale, + max_seqlen_q, + max_seqlen_k, + seqlens_q: seqlens_q.clone(), + seqlens_k: seqlens_k.clone(), + alibi_slopes: None, + window_size_left, + window_size_right, + }; + q.apply_op3(k, v, op) +} + +#[allow(clippy::too_many_arguments)] +/// Flash-attention v2 layer with variable-length batching. +/// +/// This implements scaled dot-product attention, `softmax(Q @ K^T . softmax_scale) @ V`. +/// Multi-query and grouped-query attention are supported by using tensors k and v with fewer heads +/// than q, the number of heads in k and v has to be divisible by the number of heads in q. +/// +/// # Arguments +/// +/// * `q` - Query tensor with shape `(total_q, num_heads_q, head_size)`. +/// * `k` - Key tensor with shape `(total_kv, num_heads_kv, head_size)`. +/// * `v` - Value tensor with shape `(total_kv, num_heads_kv, head_size)`. +/// * `alibi_slopes` - Alibi slopes tensor with shape `(num_heads_q)`. +/// * `seqlens_q` - The cumulative lengths of the sequences in the batch, used to index in q. +/// * `seqlens_k` - The cumulative lengths of the sequences in the batch, used to index in k and v. +/// * `max_seqlen_q` - The maximum query sequence length for q in the batch. +/// * `max_seqlen_k` - The maximum query sequence length for k and v in the batch. +/// +/// `seqlens_q` and `seqlens_k` contain `batch_size + 1` elements, typically `0`, `seqlen_1`, +/// `seqlen_1 + seqlen_2`, etc. +/// +/// The resulting tensor has dimensions `(total_q, num_heads_q, head_size)`. +pub fn flash_attn_varlen_alibi( + q: &Tensor, + k: &Tensor, + v: &Tensor, + alibi_slopes: &Tensor, + seqlens_q: &Tensor, + seqlens_k: &Tensor, + max_seqlen_q: usize, + max_seqlen_k: usize, + softmax_scale: f32, + causal: bool, +) -> Result { + let window_size_left = None; + let window_size_right = if causal { Some(0) } else { None }; + + let op = FlashAttnVarLen { + softmax_scale, + max_seqlen_q, + max_seqlen_k, + seqlens_q: seqlens_q.clone(), + seqlens_k: seqlens_k.clone(), + alibi_slopes: Some(alibi_slopes.clone()), + window_size_left, + window_size_right, + }; + q.apply_op3(k, v, op) +} + +#[allow(clippy::too_many_arguments)] +/// Flash-attention v2 layer with variable-length batching. +/// +/// This implements scaled dot-product attention, `softmax(Q @ K^T . softmax_scale) @ V`. +/// Multi-query and grouped-query attention are supported by using tensors k and v with fewer heads +/// than q, the number of heads in k and v has to be divisible by the number of heads in q. +/// +/// # Arguments +/// +/// * `q` - Query tensor with shape `(total_q, num_heads_q, head_size)`. +/// * `k` - Key tensor with shape `(total_kv, num_heads_kv, head_size)`. +/// * `v` - Value tensor with shape `(total_kv, num_heads_kv, head_size)`. +/// * `alibi_slopes` - Alibi slopes tensor with shape `(num_heads_q)`. +/// * `seqlens_q` - The cumulative lengths of the sequences in the batch, used to index in q. +/// * `seqlens_k` - The cumulative lengths of the sequences in the batch, used to index in k and v. +/// * `max_seqlen_q` - The maximum query sequence length for q in the batch. +/// * `max_seqlen_k` - The maximum query sequence length for k and v in the batch. +/// * `window_size_left` - Limit left attention to value tokens. +/// * `window_size_right` - Limit right attention to value tokens. +/// +/// `seqlens_q` and `seqlens_k` contain `batch_size + 1` elements, typically `0`, `seqlen_1`, +/// `seqlen_1 + seqlen_2`, etc. +/// +/// The resulting tensor has dimensions `(total_q, num_heads_q, head_size)`. +/// +/// # Causal mask +/// +/// `window_size_left=None` with `window_size_right=Some(0)` applies a causal mask to the result +/// of `Q @ K^T` +pub fn flash_attn_varlen_alibi_windowed( + q: &Tensor, + k: &Tensor, + v: &Tensor, + alibi_slopes: &Tensor, + seqlens_q: &Tensor, + seqlens_k: &Tensor, + max_seqlen_q: usize, + max_seqlen_k: usize, + softmax_scale: f32, + window_size_left: Option, + window_size_right: Option, +) -> Result { + let op = FlashAttnVarLen { + softmax_scale, + max_seqlen_q, + max_seqlen_k, + seqlens_q: seqlens_q.clone(), + seqlens_k: seqlens_k.clone(), + alibi_slopes: Some(alibi_slopes.clone()), + window_size_left, + window_size_right, }; q.apply_op3(k, v, op) } From 84250bf52f58528cf59dca3b82effd9f07a13cc7 Mon Sep 17 00:00:00 2001 From: optman Date: Sat, 6 Jan 2024 18:43:01 +0800 Subject: [PATCH 26/30] fix index_pos bug when kv cache is disabled. (#1517) * fix index_pos bug when kv cache is disabled * Tweak the fix. --------- Co-authored-by: laurent --- candle-examples/examples/llama/main.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/candle-examples/examples/llama/main.rs b/candle-examples/examples/llama/main.rs index 46f474bb..251c184b 100644 --- a/candle-examples/examples/llama/main.rs +++ b/candle-examples/examples/llama/main.rs @@ -165,14 +165,14 @@ fn main() -> Result<()> { let mut index_pos = 0; let mut token_generated = 0; for index in 0..args.sample_len { - let context_size = if cache.use_kv_cache && index > 0 { - 1 + let (context_size, context_index) = if cache.use_kv_cache && index > 0 { + (1, index_pos) } else { - tokens.len() + (tokens.len(), 0) }; let ctxt = &tokens[tokens.len().saturating_sub(context_size)..]; let input = Tensor::new(ctxt, &device)?.unsqueeze(0)?; - let logits = llama.forward(&input, index_pos)?; + let logits = llama.forward(&input, context_index)?; let logits = logits.squeeze(0)?; let logits = if args.repeat_penalty == 1. { logits From 3f04a79ada7ca974176a0c7c3c3306f394eae9a9 Mon Sep 17 00:00:00 2001 From: Ivar Flakstad <69173633+ivarflakstad@users.noreply.github.com> Date: Sun, 7 Jan 2024 14:40:15 +0100 Subject: [PATCH 27/30] Use cfg to seperate benchmark results based on features --- candle-core/benches/bench_utils.rs | 56 ++++++++++++++++++++++++++++++ candle-core/benches/matmul.rs | 16 ++++----- 2 files changed, 64 insertions(+), 8 deletions(-) create mode 100644 candle-core/benches/bench_utils.rs diff --git a/candle-core/benches/bench_utils.rs b/candle-core/benches/bench_utils.rs new file mode 100644 index 00000000..75800761 --- /dev/null +++ b/candle-core/benches/bench_utils.rs @@ -0,0 +1,56 @@ +use candle_core::{Device, Result}; + +pub(crate) trait BenchDevice { + fn sync(&self) -> Result<()>; +} + +impl BenchDevice for Device { + fn sync(&self) -> Result<()> { + match self { + Device::Cpu => Ok(()), + Device::Cuda(device) => { + #[cfg(feature = "cuda")] + return Ok(device.synchronize()?); + #[cfg(not(feature = "cuda"))] + panic!("Cuda device without cuda feature enabled: {:?}", device) + } + Device::Metal(device) => { + #[cfg(feature = "metal")] + return Ok(device.wait_until_completed()?); + #[cfg(not(feature = "metal"))] + panic!("Metal device without metal feature enabled: {:?}", device) + } + } + } +} + +#[allow(dead_code)] +pub(crate) fn device() -> Result { + return if cfg!(feature = "metal") { + Device::new_metal(0) + } else if cfg!(feature = "cuda") { + Device::new_cuda(0) + } else { + Ok(Device::Cpu) + }; +} + +#[allow(dead_code)] +pub(crate) fn bench_name>(name: S) -> String { + format!("{}_{}", device_variant(), name.into()) +} + +#[allow(dead_code)] +const fn device_variant() -> &'static str { + return if cfg!(feature = "metal") { + "metal" + } else if cfg!(feature = "cuda") { + "cuda" + } else if cfg!(feature = "accelerate") { + "accelerate" + } else if cfg!(feature = "mkl") { + "mkl" + } else { + "cpu" + }; +} diff --git a/candle-core/benches/matmul.rs b/candle-core/benches/matmul.rs index 83679771..4f7dfa6c 100644 --- a/candle-core/benches/matmul.rs +++ b/candle-core/benches/matmul.rs @@ -1,4 +1,8 @@ -use candle_core::{DType, Device, Tensor}; +mod bench_utils; + +use crate::bench_utils::bench_name; +use bench_utils::{device, BenchDevice}; +use candle_core::{DType, Tensor}; use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput}; use std::time::Instant; @@ -12,14 +16,14 @@ fn criterion_benchmark(c: &mut Criterion) { let n = 2048; let k = 2048; - let device = Device::new_metal(0).unwrap(); + let device = device().unwrap(); let dtype = DType::F32; let lhs = Tensor::zeros((b, m, k), dtype, &device).unwrap(); let rhs = Tensor::zeros((b, n, k), dtype, &device).unwrap(); let flops = b * m * n * k; - let mut group = c.benchmark_group("matmul_metal"); + let mut group = c.benchmark_group(bench_name("matmul")); group.throughput(Throughput::Bytes(flops as u64)); group.bench_function("iter", move |b| { b.iter_custom(|iters| { @@ -27,11 +31,7 @@ fn criterion_benchmark(c: &mut Criterion) { for _i in 0..iters { run(black_box(&lhs), black_box(&rhs)); } - if let Device::Metal(device) = &device { - device.wait_until_completed().unwrap(); - } else { - panic!("Expected metal device"); - } + device.sync().unwrap(); start.elapsed() }) }); From ad075a5f7edb0114b820b3e99a19b17d0d25ec3b Mon Sep 17 00:00:00 2001 From: Ivar Flakstad <69173633+ivarflakstad@users.noreply.github.com> Date: Mon, 8 Jan 2024 06:48:33 +0100 Subject: [PATCH 28/30] Remove allow pragma --- candle-core/benches/matmul.rs | 5 ++--- candle-core/benches/{bench_utils.rs => utils.rs} | 3 --- 2 files changed, 2 insertions(+), 6 deletions(-) rename candle-core/benches/{bench_utils.rs => utils.rs} (96%) diff --git a/candle-core/benches/matmul.rs b/candle-core/benches/matmul.rs index 4f7dfa6c..a5dba9cc 100644 --- a/candle-core/benches/matmul.rs +++ b/candle-core/benches/matmul.rs @@ -1,10 +1,9 @@ -mod bench_utils; +mod utils; -use crate::bench_utils::bench_name; -use bench_utils::{device, BenchDevice}; use candle_core::{DType, Tensor}; use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput}; use std::time::Instant; +use utils::{bench_name, device, BenchDevice}; fn run(a: &Tensor, b: &Tensor) { a.matmul(&b.t().unwrap()).unwrap(); diff --git a/candle-core/benches/bench_utils.rs b/candle-core/benches/utils.rs similarity index 96% rename from candle-core/benches/bench_utils.rs rename to candle-core/benches/utils.rs index 75800761..a93afc6e 100644 --- a/candle-core/benches/bench_utils.rs +++ b/candle-core/benches/utils.rs @@ -24,7 +24,6 @@ impl BenchDevice for Device { } } -#[allow(dead_code)] pub(crate) fn device() -> Result { return if cfg!(feature = "metal") { Device::new_metal(0) @@ -35,12 +34,10 @@ pub(crate) fn device() -> Result { }; } -#[allow(dead_code)] pub(crate) fn bench_name>(name: S) -> String { format!("{}_{}", device_variant(), name.into()) } -#[allow(dead_code)] const fn device_variant() -> &'static str { return if cfg!(feature = "metal") { "metal" From fb05af4c42a6343856f167893b19974ed6b50276 Mon Sep 17 00:00:00 2001 From: Laurent Date: Mon, 8 Jan 2024 07:19:59 +0100 Subject: [PATCH 29/30] Avoid some unnecessary returns. --- candle-core/benches/utils.rs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/candle-core/benches/utils.rs b/candle-core/benches/utils.rs index a93afc6e..3e8b3c57 100644 --- a/candle-core/benches/utils.rs +++ b/candle-core/benches/utils.rs @@ -25,13 +25,13 @@ impl BenchDevice for Device { } pub(crate) fn device() -> Result { - return if cfg!(feature = "metal") { + if cfg!(feature = "metal") { Device::new_metal(0) } else if cfg!(feature = "cuda") { Device::new_cuda(0) } else { Ok(Device::Cpu) - }; + } } pub(crate) fn bench_name>(name: S) -> String { @@ -39,7 +39,7 @@ pub(crate) fn bench_name>(name: S) -> String { } const fn device_variant() -> &'static str { - return if cfg!(feature = "metal") { + if cfg!(feature = "metal") { "metal" } else if cfg!(feature = "cuda") { "cuda" @@ -49,5 +49,5 @@ const fn device_variant() -> &'static str { "mkl" } else { "cpu" - }; + } } From 88945f2c227d6a76e8f133d8b72c701b180c4f4c Mon Sep 17 00:00:00 2001 From: Ivar Flakstad <69173633+ivarflakstad@users.noreply.github.com> Date: Tue, 9 Jan 2024 18:31:28 +0100 Subject: [PATCH 30/30] Improve benchmarks layout --- candle-core/Cargo.toml | 2 +- candle-core/benches/bench_main.rs | 4 ++++ candle-core/benches/{ => benchmarks}/matmul.rs | 7 ++----- candle-core/benches/{utils.rs => benchmarks/mod.rs} | 2 ++ 4 files changed, 9 insertions(+), 6 deletions(-) create mode 100644 candle-core/benches/bench_main.rs rename candle-core/benches/{ => benchmarks}/matmul.rs (85%) rename candle-core/benches/{utils.rs => benchmarks/mod.rs} (98%) diff --git a/candle-core/Cargo.toml b/candle-core/Cargo.toml index 91655f57..93b718a3 100644 --- a/candle-core/Cargo.toml +++ b/candle-core/Cargo.toml @@ -46,6 +46,6 @@ accelerate = ["dep:libc", "dep:accelerate-src"] metal = ["dep:metal", "dep:candle-metal-kernels"] [[bench]] -name = "matmul" +name = "bench_main" harness = false diff --git a/candle-core/benches/bench_main.rs b/candle-core/benches/bench_main.rs new file mode 100644 index 00000000..4425f2fb --- /dev/null +++ b/candle-core/benches/bench_main.rs @@ -0,0 +1,4 @@ +mod benchmarks; + +use criterion::criterion_main; +criterion_main!(benchmarks::matmul::benches); diff --git a/candle-core/benches/matmul.rs b/candle-core/benches/benchmarks/matmul.rs similarity index 85% rename from candle-core/benches/matmul.rs rename to candle-core/benches/benchmarks/matmul.rs index a5dba9cc..fb173f04 100644 --- a/candle-core/benches/matmul.rs +++ b/candle-core/benches/benchmarks/matmul.rs @@ -1,9 +1,7 @@ -mod utils; - +use crate::benchmarks::{bench_name, device, BenchDevice}; use candle_core::{DType, Tensor}; -use criterion::{black_box, criterion_group, criterion_main, Criterion, Throughput}; +use criterion::{black_box, criterion_group, Criterion, Throughput}; use std::time::Instant; -use utils::{bench_name, device, BenchDevice}; fn run(a: &Tensor, b: &Tensor) { a.matmul(&b.t().unwrap()).unwrap(); @@ -38,4 +36,3 @@ fn criterion_benchmark(c: &mut Criterion) { } criterion_group!(benches, criterion_benchmark); -criterion_main!(benches); diff --git a/candle-core/benches/utils.rs b/candle-core/benches/benchmarks/mod.rs similarity index 98% rename from candle-core/benches/utils.rs rename to candle-core/benches/benchmarks/mod.rs index 3e8b3c57..1344770d 100644 --- a/candle-core/benches/utils.rs +++ b/candle-core/benches/benchmarks/mod.rs @@ -1,3 +1,5 @@ +pub(crate) mod matmul; + use candle_core::{Device, Result}; pub(crate) trait BenchDevice {

_K09$#td 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