From bbe0fddb6106d6db53979e8647582ae3732e6d6f Mon Sep 17 00:00:00 2001 From: "Marc T. Henry de Frahan" Date: Thu, 4 May 2023 14:06:11 -0600 Subject: [PATCH] Implementing a wall modeled LES channel flow (#836) Co-authored-by: moprak-nrel <120606615+moprak-nrel@users.noreply.github.com> --- amr-wind/boundary_conditions/CMakeLists.txt | 2 + .../wall_models/CMakeLists.txt | 5 + .../wall_models/WallFunction.H | 54 ++++ .../wall_models/WallFunction.cpp | 125 +++++++++ amr-wind/diffusion/diffusion.H | 17 -- amr-wind/physics/ChannelFlow.H | 64 ++++- amr-wind/physics/ChannelFlow.cpp | 246 +++++++++++++++--- docs/sphinx/developer/channel_smagorinsky.png | Bin 0 -> 128577 bytes docs/sphinx/developer/verification.rst | 90 ++++++- test/CMakeLists.txt | 1 + .../channel_smagorinsky_analytical.inp | 66 +++++ 11 files changed, 613 insertions(+), 57 deletions(-) create mode 100644 amr-wind/boundary_conditions/wall_models/CMakeLists.txt create mode 100644 amr-wind/boundary_conditions/wall_models/WallFunction.H create mode 100644 amr-wind/boundary_conditions/wall_models/WallFunction.cpp create mode 100644 docs/sphinx/developer/channel_smagorinsky.png create mode 100644 test/test_files/channel_smagorinsky_analytical/channel_smagorinsky_analytical.inp diff --git a/amr-wind/boundary_conditions/CMakeLists.txt b/amr-wind/boundary_conditions/CMakeLists.txt index 51527afcdd..601f8e4349 100644 --- a/amr-wind/boundary_conditions/CMakeLists.txt +++ b/amr-wind/boundary_conditions/CMakeLists.txt @@ -4,3 +4,5 @@ target_sources(${amr_wind_lib_name} BCInterface.cpp FixedGradientBC.cpp ) + +add_subdirectory(wall_models) diff --git a/amr-wind/boundary_conditions/wall_models/CMakeLists.txt b/amr-wind/boundary_conditions/wall_models/CMakeLists.txt new file mode 100644 index 0000000000..fc6006c54b --- /dev/null +++ b/amr-wind/boundary_conditions/wall_models/CMakeLists.txt @@ -0,0 +1,5 @@ +target_sources(${amr_wind_lib_name} + PRIVATE + #C++ + WallFunction.cpp + ) diff --git a/amr-wind/boundary_conditions/wall_models/WallFunction.H b/amr-wind/boundary_conditions/wall_models/WallFunction.H new file mode 100644 index 0000000000..5247c285a2 --- /dev/null +++ b/amr-wind/boundary_conditions/wall_models/WallFunction.H @@ -0,0 +1,54 @@ +#ifndef WALLFUNCTION_H +#define WALLFUNCTION_H + +#include "amr-wind/CFDSim.H" +#include "amr-wind/core/FieldBCOps.H" + +namespace amr_wind { + +/** Wall-function computations for LES simulations + * \ingroup utilities + * + * This class performs the necessary computations at the beginning of + * predictor/corrector steps. The actual BC population in ghost cells is + * performed by VelWallFunc BC interface class. + */ +class WallFunction +{ +public: + explicit WallFunction(const CFDSim& sim); + + amrex::Real utau() const { return m_utau; } + + ~WallFunction() = default; + +private: + const CFDSim& m_sim; + + const amrex::AmrCore& m_mesh; + + amrex::Real m_utau{0.0}; +}; + +/** Applies a shear-stress value at the domain boundary + * \ingroup field_bc utilities + * + * \sa WallFunction + */ +class VelWallFunc : public FieldBCIface +{ +public: + VelWallFunc(Field& velocity, const WallFunction& wall_func); + + void operator()(Field& velocity, const FieldState rho_state) override; + + static void wall_model( + Field& velocity, const FieldState rho_state, const amrex::Real utau); + +private: + const WallFunction& m_wall_func; + std::string m_wall_shear_stress_type{"constant"}; +}; +} // namespace amr_wind + +#endif /* WALLFUNCTION_H */ diff --git a/amr-wind/boundary_conditions/wall_models/WallFunction.cpp b/amr-wind/boundary_conditions/wall_models/WallFunction.cpp new file mode 100644 index 0000000000..d33a2298a1 --- /dev/null +++ b/amr-wind/boundary_conditions/wall_models/WallFunction.cpp @@ -0,0 +1,125 @@ +#include "amr-wind/boundary_conditions/wall_models/WallFunction.H" +#include "amr-wind/utilities/tensor_ops.H" +#include "amr-wind/utilities/trig_ops.H" +#include "amr-wind/diffusion/diffusion.H" + +#include + +#include "AMReX_ParmParse.H" +#include "AMReX_Print.H" +#include "AMReX_ParallelDescriptor.H" + +namespace amr_wind { + +WallFunction::WallFunction(const CFDSim& sim) : m_sim(sim), m_mesh(m_sim.mesh()) +{ + { + amrex::ParmParse pp("BodyForce"); + amrex::Vector body_force{{0.0, 0.0, 0.0}}; + pp.getarr("magnitude", body_force); + m_utau = std::sqrt(body_force[0]); + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + std::abs(body_force[1]) < 1e-16, + "body force in y should be zero for this wall function"); + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + std::abs(body_force[2]) < 1e-16, + "body force in z should be zero for this wall function"); + } +} + +VelWallFunc::VelWallFunc(Field& /*unused*/, const WallFunction& wall_func) + : m_wall_func(wall_func) +{ + amrex::ParmParse pp("WallFunction"); + pp.query("wall_shear_stress_type", m_wall_shear_stress_type); + m_wall_shear_stress_type = amrex::toLower(m_wall_shear_stress_type); + + if (m_wall_shear_stress_type == "constant") { + amrex::Print() << "Shear Stress model: " << m_wall_shear_stress_type + << std::endl; + } else { + amrex::Abort("Shear Stress wall model input mistake"); + } +} + +void VelWallFunc::wall_model( + Field& velocity, const FieldState rho_state, const amrex::Real utau) +{ + BL_PROFILE("amr-wind::VelWallFunc"); + constexpr int idim = 2; + const auto& repo = velocity.repo(); + const auto& density = repo.get_field("density", rho_state); + const auto& viscosity = repo.get_field("velocity_mueff"); + const int nlevels = repo.num_active_levels(); + + amrex::Orientation zlo(amrex::Direction::z, amrex::Orientation::low); + amrex::Orientation zhi(amrex::Direction::z, amrex::Orientation::high); + if ((velocity.bc_type()[zlo] != BC::wall_model) && + (velocity.bc_type()[zhi] != BC::wall_model)) { + return; + } + + for (int lev = 0; lev < nlevels; ++lev) { + const auto& geom = repo.mesh().Geom(lev); + const auto& domain = geom.Domain(); + amrex::MFItInfo mfi_info{}; + + const auto& rho_lev = density(lev); + auto& vel_lev = velocity(lev); + const auto& eta_lev = viscosity(lev); + + if (amrex::Gpu::notInLaunchRegion()) { + mfi_info.SetDynamic(true); + } +#ifdef AMREX_USE_OMP +#pragma omp parallel if (amrex::Gpu::notInLaunchRegion()) +#endif + for (amrex::MFIter mfi(vel_lev, mfi_info); mfi.isValid(); ++mfi) { + const auto& bx = mfi.validbox(); + auto varr = vel_lev.array(mfi); + auto den = rho_lev.array(mfi); + auto eta = eta_lev.array(mfi); + + if (bx.smallEnd(idim) == domain.smallEnd(idim) && + velocity.bc_type()[zlo] == BC::wall_model) { + amrex::ParallelFor( + amrex::bdryLo(bx, idim), + [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + const amrex::Real mu = eta(i, j, k); + + // Dirichlet BC + varr(i, j, k - 1, 2) = 0.0; + + // Shear stress BC + varr(i, j, k - 1, 0) = utau * utau / mu * den(i, j, k); + varr(i, j, k - 1, 1) = 0.0; + }); + } + + if (bx.bigEnd(idim) == domain.bigEnd(idim) && + velocity.bc_type()[zhi] == BC::wall_model) { + amrex::ParallelFor( + amrex::bdryHi(bx, idim), + [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + const amrex::Real mu = eta(i, j, k - 1); + + // Dirichlet BC + varr(i, j, k, 2) = 0.0; + + // Shear stress BC + varr(i, j, k, 0) = utau * utau / mu * den(i, j, k); + varr(i, j, k, 1) = 0.0; + }); + } + } + } +} + +void VelWallFunc::operator()(Field& velocity, const FieldState rho_state) +{ + if (m_wall_shear_stress_type == "constant") { + wall_model(velocity, rho_state, m_wall_func.utau()); + } +} + +} // namespace amr_wind diff --git a/amr-wind/diffusion/diffusion.H b/amr-wind/diffusion/diffusion.H index 6b78f84400..7a466a7db5 100644 --- a/amr-wind/diffusion/diffusion.H +++ b/amr-wind/diffusion/diffusion.H @@ -7,23 +7,6 @@ namespace diffusion { -void wall_model_bc_moeng( - amr_wind::Field& velocity, - const amrex::Real utau, - const amr_wind::FieldState fstate, - const amrex::FArrayBox& instplanar); - -void wall_model_bc( - amr_wind::Field& velocity, - const amrex::Real utau, - const amrex::Real umag, - const amr_wind::FieldState fstate); - -void temp_wall_model_bc( - amr_wind::Field& temperature, - const amrex::FArrayBox& instplanar, - const amr_wind::FieldState fstate); - amrex::Vector> get_diffuse_tensor_bc( amr_wind::Field& velocity, amrex::Orientation::Side side) noexcept; diff --git a/amr-wind/physics/ChannelFlow.H b/amr-wind/physics/ChannelFlow.H index 3542269a80..aa0137a81c 100644 --- a/amr-wind/physics/ChannelFlow.H +++ b/amr-wind/physics/ChannelFlow.H @@ -4,8 +4,36 @@ #include "amr-wind/core/Physics.H" #include "amr-wind/core/Field.H" #include "amr-wind/CFDSim.H" +#include "amr-wind/boundary_conditions/wall_models/WallFunction.H" +#include "amr-wind/turbulence/TurbulenceModel.H" #include +namespace { +AMREX_GPU_HOST_DEVICE AMREX_FORCE_INLINE amrex::Real +analytical_smagorinsky_profile( + const amrex::Real h, + const amrex::Real Cs, + const amrex::Real dx, + const amrex::Real rho, + const amrex::Real mu, + const amrex::Real dpdx, + const amrex::Real C0, + const amrex::Real C1) +{ + const amrex::Real Cs2 = Cs * Cs; + const amrex::Real dx2 = dx * dx; + const amrex::Real Cs2dx2 = Cs2 * dx2; + return -mu / (rho * Cs2dx2) * h + + Cs2dx2 / (3 * dpdx) * + std::pow( + (2.0 / Cs2dx2 * dpdx * h + + (mu / (rho * Cs2dx2)) * (mu / (rho * Cs2dx2)) + C1), + 3.0 / 2.0) + + C0; +} + +} // namespace + namespace amr_wind::channel_flow { /** Channel Flow physics @@ -33,6 +61,8 @@ public: template amrex::Real compute_error(const IndexSelector& idxOp); + amrex::Real compute_analytical_smagorinsky_error(); + void output_error(); void post_init_actions() override; @@ -44,10 +74,15 @@ public: void post_advance_work() override; private: + //! CFD simulation controller instance + CFDSim& m_sim; + const amr_wind::SimTime& m_time; - const FieldRepo& m_repo; + FieldRepo& m_repo; const amrex::AmrCore& m_mesh; + WallFunction m_wall_func; + //! Wall normal directon - Default y direction int m_norm_dir{1}; @@ -72,9 +107,24 @@ private: //! initial sdr value amrex::Real m_sdr0{1000.0}; + //! flag for perturbations of the initial condition + bool m_perturb_vel{false}; + + //! perturbation period (y-direction) + amrex::Real m_perturb_y_period{1.0}; + + //! perturbation period (z-direction) + amrex::Real m_perturb_z_period{1.0}; + + //! perturbation factor (fraction of utau) + amrex::Real m_perturb_fac{0.1}; + //! Von-Karman constant amrex::Real m_kappa{0.41}; + //! Turbulence model + std::string m_turbulence_model; + bool m_laminar{false}; bool m_mesh_mapping{false}; @@ -83,6 +133,18 @@ private: bool m_half{false}; + //! flag for analytical smagorinsky test + bool m_analytical_smagorinsky_test{false}; + + //! Analytical Smagorinsky first coefficient + amrex::Real m_C0{0.0}; + + //! Analytical Smagorinsky second coefficient + amrex::Real m_C1{0.0}; + + //! Body forcing (x direction) + amrex::Real m_dpdx{0.0}; + //! direction of mean velocity int m_mean_vel_dir{0}; diff --git a/amr-wind/physics/ChannelFlow.cpp b/amr-wind/physics/ChannelFlow.cpp index 896c6f39bb..6a5af42f9c 100644 --- a/amr-wind/physics/ChannelFlow.cpp +++ b/amr-wind/physics/ChannelFlow.cpp @@ -9,16 +9,17 @@ namespace amr_wind::channel_flow { ChannelFlow::ChannelFlow(CFDSim& sim) - : m_time(sim.time()) + : m_sim(sim) + , m_time(sim.time()) , m_repo(sim.repo()) , m_mesh(sim.mesh()) + , m_wall_func(sim) , m_mesh_mapping(sim.has_mesh_mapping()) { { - std::string turbulence_model; amrex::ParmParse pp("turbulence"); - pp.query("model", turbulence_model); - if (turbulence_model == "Laminar") { + pp.query("model", m_turbulence_model); + if (m_turbulence_model == "Laminar") { m_laminar = true; } } @@ -37,6 +38,36 @@ ChannelFlow::ChannelFlow(CFDSim& sim) pp.query("re_tau", m_re_tau); pp.query("tke0", m_tke0); pp.query("sdr0", m_sdr0); + pp.query("perturb_velocity", m_perturb_vel); + pp.query("perturb_y_period", m_perturb_y_period); + pp.query("perturb_z_period", m_perturb_z_period); + pp.query("perturb_factor", m_perturb_fac); + pp.query( + "analytical_smagorinsky_test", m_analytical_smagorinsky_test); + if (m_analytical_smagorinsky_test) { + if (m_turbulence_model == "Smagorinsky") { + pp.query("C0", m_C0); + pp.query("C1", m_C1); + { + amrex::ParmParse ppb("BodyForce"); + amrex::Vector body_force{{0.0, 0.0, 0.0}}; + ppb.queryarr("magnitude", body_force); + m_dpdx = -body_force[0]; + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + std::abs(body_force[1]) < 1e-16, + "body force in y should be zero for this wall " + "function"); + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + std::abs(body_force[2]) < 1e-16, + "body force in z should be zero for this wall " + "function"); + } + } else { + amrex::Abort( + "Use Smagorinsky model for the analytical Smagorinsky " + "test"); + } + } } } { @@ -46,12 +77,17 @@ ChannelFlow::ChannelFlow(CFDSim& sim) m_utau = m_mu * m_re_tau / (m_rho * 1.0); m_ytau = m_mu / (m_utau * m_rho); } - if (amrex::ParallelDescriptor::IOProcessor()) { + if ((amrex::ParallelDescriptor::IOProcessor()) && + (m_laminar || m_analytical_smagorinsky_test)) { std::ofstream f; f.open(m_output_fname.c_str()); f << std::setw(m_w) << "time" << std::setw(m_w) << "L2_u" << std::endl; f.close(); } + + if (!m_repo.field_exists("wall_dist")) { + m_repo.declare_field("wall_dist", 1, 1, 1); + } } /** Initialize the velocity, density, tke and sdr fields at the beginning of the @@ -89,38 +125,92 @@ void ChannelFlow::initialize_fields( auto& velocity = velocity_field(level); auto& density = m_repo.get_field("density")(level); density.setVal(m_rho); + const auto perturb_vel = m_perturb_vel; + const auto perturb_fac = m_perturb_fac; + const auto perturb_amp = perturb_fac * m_utau; + const amrex::Real pi = M_PI; + const auto& problo = geom.ProbLoArray(); + const auto& probhi = geom.ProbHiArray(); + const auto& dx = geom.CellSizeArray(); + const amrex::GpuArray lengths{AMREX_D_DECL( + probhi[0] - problo[0], probhi[1] - problo[1], probhi[2] - problo[2])}; + const auto y_perturb = m_perturb_y_period * 2.0 * pi / lengths[1]; + const auto z_perturb = m_perturb_z_period * 2.0 * pi / lengths[2]; if (!m_laminar) { - auto& tke = m_repo.get_field("tke")(level); - auto& sdr = m_repo.get_field("sdr")(level); - auto& walldist = m_repo.get_field("wall_dist")(level); - tke.setVal(m_tke0); - sdr.setVal(m_sdr0); - - for (amrex::MFIter mfi(velocity); mfi.isValid(); ++mfi) { - const auto& vbx = mfi.validbox(); - - const auto& dx = geom.CellSizeArray(); - const auto& problo = geom.ProbLoArray(); - auto vel = velocity.array(mfi); - auto wd = walldist.array(mfi); - - amrex::ParallelFor( - vbx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { - const int n_ind = idxOp(i, j, k); - amrex::Real h = problo[n_idx] + (n_ind + 0.5) * dx[n_idx]; - if (h > 1.0) { - h = 2.0 - h; - } - wd(i, j, k) = h; - const amrex::Real hp = h / y_tau; - vel(i, j, k, 0) = - utau * (1. / kappa * std::log1p(kappa * hp) + - 7.8 * (1.0 - std::exp(-hp / 11.0) - - (hp / 11.0) * std::exp(-hp / 3.0))); - vel(i, j, k, 1) = 0.0; - vel(i, j, k, 2) = 0.0; - }); + if (m_analytical_smagorinsky_test) { + auto coeffs = m_sim.turbulence_model().model_coeffs(); + const auto Cs = coeffs["Cs"]; + const auto mu = m_mu; + const auto rho = m_rho; + const auto C0 = m_C0; + const auto C1 = m_C1; + const auto dpdx = m_dpdx; + for (amrex::MFIter mfi(velocity); mfi.isValid(); ++mfi) { + const auto& vbx = mfi.validbox(); + auto vel = velocity.array(mfi); + + amrex::ParallelFor( + vbx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + const int n_ind = idxOp(i, j, k); + amrex::Real h = + problo[n_idx] + (n_ind + 0.5) * dx[n_idx]; + if (h > 1.0) { + h = 2.0 - h; + } + const amrex::Real ux = analytical_smagorinsky_profile( + h, Cs, dx[n_idx], rho, mu, dpdx, C0, C1); + vel(i, j, k, 0) = + ux + (perturb_vel + ? perturb_fac * std::sin(z_perturb * h) + : 0.0); + vel(i, j, k, 1) = 0.0; + vel(i, j, k, 2) = 0.0; + }); + } + } else { + if (m_repo.field_exists("tke")) { + auto& tke = m_repo.get_field("tke")(level); + tke.setVal(m_tke0); + } + if (m_repo.field_exists("sdr")) { + auto& sdr = m_repo.get_field("sdr")(level); + sdr.setVal(m_sdr0); + } + auto& walldist = m_repo.get_field("wall_dist")(level); + + for (amrex::MFIter mfi(velocity); mfi.isValid(); ++mfi) { + const auto& vbx = mfi.validbox(); + auto vel = velocity.array(mfi); + auto wd = walldist.array(mfi); + + amrex::ParallelFor( + vbx, [=] AMREX_GPU_DEVICE(int i, int j, int k) noexcept { + const int n_ind = idxOp(i, j, k); + amrex::Real h = + problo[n_idx] + (n_ind + 0.5) * dx[n_idx]; + if (h > 1.0) { + h = 2.0 - h; + } + wd(i, j, k) = h; + const amrex::Real hp = h / y_tau; + vel(i, j, k, 0) = + utau * (1. / kappa * std::log1p(kappa * hp) + + 7.8 * (1.0 - std::exp(-hp / 11.0) - + (hp / 11.0) * std::exp(-hp / 3.0))); + + const amrex::Real y = problo[1] + (j + 0.5) * dx[1]; + const amrex::Real z = problo[2] + (k + 0.5) * dx[2]; + const amrex::Real perty = perturb_amp * + std::sin(y_perturb * y) * + std::cos(z_perturb * z); + const amrex::Real pertz = -perturb_amp * + std::cos(y_perturb * y) * + std::sin(z_perturb * z); + vel(i, j, k, 1) = 0.0 + (perturb_vel ? perty : 0.0); + vel(i, j, k, 2) = 0.0 + (perturb_vel ? pertz : 0.0); + }); + } } } else { velocity.setVal(0.0); @@ -239,6 +329,71 @@ amrex::Real ChannelFlow::compute_error(const IndexSelector& idxOp) return std::sqrt(error / total_vol); } +amrex::Real ChannelFlow::compute_analytical_smagorinsky_error() +{ + amrex::Real error = 0.0; + const auto mu = m_mu; + auto coeffs = m_sim.turbulence_model().model_coeffs(); + const auto Cs = coeffs["Cs"]; + const auto rho = m_rho; + const auto C0 = m_C0; + const auto C1 = m_C1; + const auto dpdx = m_dpdx; + + const auto& velocity = m_repo.get_field("velocity"); + + const int nlevels = m_repo.num_active_levels(); + for (int lev = 0; lev < nlevels; ++lev) { + + const auto& dx = m_mesh.Geom(lev).CellSizeArray(); + const auto& prob_lo = m_mesh.Geom(lev).ProbLoArray(); + + amrex::iMultiFab level_mask; + if (lev < nlevels - 1) { + level_mask = makeFineMask( + m_mesh.boxArray(lev), m_mesh.DistributionMap(lev), + m_mesh.boxArray(lev + 1), amrex::IntVect(2), 1, 0); + } else { + level_mask.define( + m_mesh.boxArray(lev), m_mesh.DistributionMap(lev), 1, 0, + amrex::MFInfo()); + level_mask.setVal(1); + } + + const auto& vel = velocity(lev); + auto const& vel_arr = vel.const_arrays(); + auto const& mask_arr = level_mask.const_arrays(); + + error += amrex::ParReduce( + amrex::TypeList{}, + amrex::TypeList{}, vel, amrex::IntVect(0), + [=] AMREX_GPU_HOST_DEVICE(int box_no, int i, int j, int k) + -> amrex::GpuTuple { + auto const& vel_bx = vel_arr[box_no]; + auto const& mask_bx = mask_arr[box_no]; + + const int n_idx = 2; + amrex::Real h = prob_lo[n_idx] + (k + 0.5) * dx[n_idx]; + if (h > 1.0) { + h = 2.0 - h; + } + const amrex::Real u = vel_bx(i, j, k, 0); + const amrex::Real u_exact = analytical_smagorinsky_profile( + h, Cs, dx[n_idx], rho, mu, dpdx, C0, C1); + + const amrex::Real cell_vol = dx[0] * dx[1] * dx[2]; + + return cell_vol * mask_bx(i, j, k) * (u - u_exact) * + (u - u_exact); + }); + } + + amrex::ParallelDescriptor::ReduceRealSum(error); + + const auto total_vol = m_mesh.Geom(0).ProbDomain().volume(); + return std::sqrt(error / total_vol); +} + void ChannelFlow::output_error() { // analytical solution exists only for flow in streamwise direction @@ -251,7 +406,11 @@ void ChannelFlow::output_error() u_err = compute_error(YDir()); break; case 2: - u_err = compute_error(ZDir()); + if (m_laminar) { + u_err = compute_error(ZDir()); + } else if (m_analytical_smagorinsky_test) { + u_err = compute_analytical_smagorinsky_error(); + } break; default: amrex::Abort("axis must be equal to 1 or 2"); @@ -269,14 +428,25 @@ void ChannelFlow::output_error() void ChannelFlow::post_init_actions() { - if (m_laminar) { + if (m_laminar || m_analytical_smagorinsky_test) { output_error(); } + + auto& velocity = m_repo.get_field("velocity"); + amrex::Orientation zlo(amrex::Direction::z, amrex::Orientation::low); + amrex::Orientation zhi(amrex::Direction::z, amrex::Orientation::high); + if ((velocity.bc_type()[zlo] == BC::wall_model) || + (velocity.bc_type()[zhi] == BC::wall_model)) { + AMREX_ALWAYS_ASSERT_WITH_MESSAGE( + m_norm_dir == 2, + "Wall normal direction should be 2 if using a wall model"); + velocity.register_custom_bc(m_wall_func); + } } void ChannelFlow::post_advance_work() { - if (m_laminar) { + if (m_laminar || m_analytical_smagorinsky_test) { output_error(); } } diff --git a/docs/sphinx/developer/channel_smagorinsky.png b/docs/sphinx/developer/channel_smagorinsky.png new file mode 100644 index 0000000000000000000000000000000000000000..78f220bfc3fc1a8629f6e1ed84c356053b322c97 GIT binary patch literal 128577 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

8Ze@=C83m6k+~2!`!GGOi|BON8S7uvzY^$28f-( zEb8%kK)IuLiVq=O6B99UUk++HL;gfbHShV3&NV_N$h+HH&nNA7Uy%HlUB=mtJE~T{ z-HCc4o>-jdB_QNSL$&Ysjj$(Lq~5)>uS})#nMXlcSOD1wA-#}0-JkV#fEop9G=E;y zcBJoY@lzxr=jho!DDW-H!*woJedMUxj3=7!aOcd2g4{KuNUnV^H4Y5bH{LeHzQeAR zXCWJHhbaaX>PtuR)Mqh+i?s;JJ~|mBTUTmpP`tr_1m$`y6abStb0uCs? z3;*pf)|TFQiz)bz9}t+>5y4Pm9Mx{(jLB+Y>OSiSi69)|QSOx_I7$aH0ON)BWI;`& zgp||^{i;7T5#j~r{`#|rSawfKRLpS0kq4?^R&~=aooGqx9955sjO=z*P3ds8vvbau zxYAh3yS~x{W#NGH-?>t3^`|BR6g7w;#4P@l+Yv2PRMqBn;T!!G#uF&5i;H(o66TAi z_=ch1@vdCLlv?nv4vA`6zWp--h3#S!5*RdxS z{H@_wa;HfrCcCTt5r5$Y!*z$F{Z-DKt~%_EYK!pzYMu{yg^O@r-ENr5;rJ%Z*Y(-+ zyyIE`Lt6uhTVj!Sv#+-m#-_bmmtad^VRUMAYDYF<58n@z2@_%LYLE-Ag2=(t>QaFf zOff`1uXuzSSL0ol8U5^wLeFAyz*=X&OG=&&BH`E-0~^Z@Kfw4iA*ju+B+O+XNRJzy zXQC<%6LoIqU2gVt)vj3ls+v{Ftkc0ckF zJ#9=XG+eC;<7FkZLhgPwU`5qoqK*9~tzuSU;!S#gCTe=ix%$UB)>d{xUv}?(gJ=*6 zz>4)>W7T&3WN2FPQYERZEV_sn;Cu6GWxG~fx>eV=!N-q1BiVB06IEfaL{icB_LERJ zrjj*NZ%$&H0U;UsZ(zDoE=Kd{Arj4XHKAP~DMl`AxX}kPCylNK=y5+bhHFugqTRK- zM7*iz$3V}gp?Xm})~YRn`?%_f6G0=8`W^?#(~54Ut`trk*8c2U6hOb%CJrSAos z$C=FgTV|fLf^5(s5fI(cXcR7ZSY{>c7VV-u>^WRUnnI#d6Qq!Ui?n8t%jKyw?{iOI znrl=sI!Nn(E5du&v}|gfxVtULVA}U)qewyYk5q9o`& zV*T&$Y=uG%hX*j0ghW#NSM;-tBMRgHkx4Lll&C)u%GT*%RC0g+!>3{%zM*yxfia&z z5-u+4@dfaZss^z>R4E#%KISi%(jQhb$8MPP+E>5I9@18wl3=F4nFJUV4C`wn=s_bM?@ZM*vst?09gjYpv zr*?(d!g;J!d;6a6A?YUSm?j*I!>pD&ecy6mlM%fo683x!9we{?1R+av1l!Bq*Kg$y zG*eXc_0cXfyOYSR=CiUQfolaG|1JH7Xit>>vwfCfAT4H*0vWdFyNei6{1a(3;>n?U zZ}gF@_wZ0$tRkrZYC%~@A)aC%p;Xs_+3nrpK*F%g#2ok_de5ifo1))#$zQEY7NuS9pu)vbSX`R8hx z_xYWhfFG&%LY=oeb6?rgA}Ca~OKLyY*`(pZXC&w_`d zokfQ==e34t!F|q4Zze1fTNSvrOXtO6$OfncRe-Vt>ni^mE}4=|O*kJC&o)2bs!}Lw z?Ygg{!UZFZ*m>U^*>>+K5EN-RXU3ZtF~M}(?rw?0X7ebtaxZjpw<|5nN>J^4-RdUH z-7cRZA>X~*i)RNt@aL>=nZ9%owzJe|Nt_!|`C)}FNLQ7sDqzTV*_T5qW(PUs>vNNI zJJ)rV0`h3yeSHP&&_Tp@rPUx+Fm*_%mdv`({XDeYPQ4q6bB1D6=7>KE+7Xo)bG=+* zh-P;;p_exJ&O7>BYf3V6y{(c0iesLAc{E+UF8p!Y%cuJsX9^-rhUn?%*_}EKTLc~+ zhWB{S|3e`%*1`QVx?RpAx*=;A8t$v8)#gzvZUM}UEP20`jv@;oZ`0VM*0iuqEZE0- z!#9`@2yPj&ALh)u{+jrr*Jbgg!LnyWXO0Bv*GKN_zeL=@B*?>=f|Yj24mv^3p8pBj zPf)6BtT9%h;qqZS`<~aa3O#!K!1oBJ0n35_9b|Mj5{$M1~%^klBtGjLo;z=+< z5b|;jVWRTxmMO)p)4VF))O4#kKKU%mx^3R<2FeW!QwdL|d&486+ZKfO1hX*O3lV!< zdr>JrgOzx7&*1~bPFga`q_AP^jC)d3I>0OzICURr22#TNbMt`mpLfEOH{xTw1r0Un^%~G=Rd+ zrG=jL^&rtbw**_H5Wqg69}^E#f|RFw@`+4_|8paoRvK>ACz^XeZf zYwI48(|a*-VbXe6;9&E7Mr47|3RqpN(yNQJcF#nlK^bUIL7df%eqrD9k|T{a(bo5N z8ENAJjlgl2Zv5fDr_L0TYRnT2H#RUoc;=hludIxALY_po-O?cY6aGTOe#@Cz0=V=o z2h-9Xa{-}=6na!WVm)25ks^?BCX1Ms&Yt|Y{309u=au=ieI04YC2-E87&In!jb=n( z2R3Ay?qEtXbRbw<&xxt`ldj^_&66%TsN(mJ-cyVuMUGu|QF`>ZRa_2u<_5yO9-l*p z@61J_yi|$`EvmTO_Sp*I58yDFb#vN#t~M3=Em8A!(;BrweecgjEG52JTk*8&{xCJK zV8T~_Kv63)^DG?Zq-51j$^>-V?cyI~Ayf-Y0&*3pNYjiQq`r?=SZ>TlkeQm{9bn@Aw~Y z+zLe=x^kN4ggbNyUYBBENc8nma&sCC5l7}o#VC>*(C6G*GwAmcOEA>fC;K3p3qH+B zzN%gIgn$}{X*;{1s%IX2xg;;%udwPonpU1NOiKuS`!w$!+#2YWfzlMM{k86L7*LNC{pnrtc~%`C>kTPK z{qblEhg;FA>%|DGEzcQ>r8XP+srWF# z%fi%QOtml|@B9!T7vAU0hQLuC&{6HFqet@7LG{dBsr5o0CSV=OD0Q_}FUPuGa!NmO zShqchZ(q4FAhF@kC%XT=C#i*SJ6jABTg(++-ad6Nb>KQQ>(qOCa4)Ks!vsE4^i+}f zz6WlGr+F59WlvHRNkv_)*;~8;bV9~*t-c8Zm$D9Blv9Ne_vst1-@lU^V8iGL7GWx~ zwy(rH8F9NcwPqbUq>8-M_(Q?YF8Hs+O{D>&Mu?Pz_FaiK)R5>J-2APs4>D(dXLz|V zq-IxE`p7HVdMst3@6x;cl?d_R$jEE^G60iLfdO&tf3I_9Iff7EvuC(mXCXy+{jyuc zrS4#l{#Y420Z4Z+_UGgE#6dMS^l9)A_nz28=Wv)}OpVh6ny0(xg8zq4$X}IIX@@jv zJNL$qL+6~TLgK#@t#LWTbaZq*CC|!~bHSIe$eny+ivB>I>N&9MGH)#2O$epUIM z5HS$Zx98aR1spa?59Y$fd_KHSUyVsqE-ZB?nP7+wf3FKrr@s1=-x-&K?3GuKj_aJ7 z-c7e`5TG`|2k4%>^mQXzvrKX#ustm|2NkQ8zJWV7W zI0R*@xh*#9k0B6)y&}C=ciYCXN->AAmMeiL0$fntSgKBpEBbP|NGKy{AXqz^bsAeg7Sr_57UK zspucrnV)QoiMmRuZ1ku+Yc!>?JG@rJK9}6eFxqT+?9Zefq88I((K4euyXQ;Vl$Z>D zKEN)}@$p6YFSLGr&|?b~v9wAn%GVbI*7upe-k;&5wcfhHdo7MLIGH9BWDMoL7gPYv zK|?$Pf}QL% zI$Sb6H`3E4t@uIL*F=%aWVR;3e7sF!@%Ny8pdQ8%tu$k~wuf4X0V73~v(o29CM{qm zDBUeG9(y!5Ol?nCfCShf-gY1{-`?#em`yILP6i3)J-I5uWVbMkMck8B@1XYzh@$o(KfSm#oc-;VZ zXqUS-rpp+wlqnko{R9j0K7F7MGlC{a$L* zMX3IYJa--VTwKwby)t8E+Vm3bWQ;lBto?EE6ee(C`X=MEJBd;-QZ5pyL&&PlW_^`W zrzKfkLDpN78TZEHvnnv%eWBiyF<~-{7ltnWo~qIp2f@ZRARMcAC6`7|l|B1NehM{FkPFW!Rq5}yk9o9_|GjNTEe*8;9&1lb zT8CYu+n82lF3ip&!sN-IdXGyAf^-A~1SC0;xT$eYH)v^_CnZ;BmIDC18_#NK_5;kp z;Dc(nk+7bQf49vBaCU+T!q?aeVWiSU09z3CH7})2(3~5NE|m4U+dennIyD<-O(4BG zz?)FEI3Vy2(uP7*Zjw0^zulU8I+k!`d>U1=T|XubvvL*s$)Ur)^>J|&{jem_Xe!|4 z#kRl2QtHgHVzVUYGJR>;4|pZW!$)64Nt;5Q$PU*C-|d1S_MMXxAM|<(3ozyJ(E_V& zb_9&9GIJ)s%mxZPRkf;kN(ckqz?@z`hCMe6i$J|{F#YI_$MF>YLY1E3^u3ZcHUNqg zl$kEwr~@UbVylu0cUPW3YlfBsF^gtTBQ?*|@pY~FR|uZnpaTWq>d45*a6yfR9*o{B zbSzmkYfkMev3bHZQ7_#SF;v@=4Jd-8fZ)>NK<1~D`FoqN`V%b2$arZw@d*f6;(5t3?{uvvn2=YC zNse?D*&OGd?TE6qwUfVl4!_{YwKzw*tH<8k+MXahiz9(efPXeVFz~&Edysw%^H)j~ z-EkE9uS?ii5fdE)9p${2@NOQab?eP)BpxV-X(Q|dOzDL021W;N@1j?Jlg8E`sEmOI z6=>4#A8z{cO62WpQ%g-=KaQ`$QPNt2GgVQ7VItSi-S(v)83KxynJ_b`5qlP3!(OrK zVU8WU&ibM)8~~l7^!rLR+tL$eu%qH|=Gqi~(Ha=QsBdkYBS%VO`=RD`Ai1SYyLRsy ze<6FZ$t)*t>#Q#8Qh)PkJ8!bOEIjWTmZsY%5MUii;npy-lBzTQw&ssn2~gtTWn7@B zsv45BzGeZ;txYlZMkf=Uq=M@n_|Lq`&}O0)V{1v$TR@nq6+@pRTMfjhhBgX->7kNiT=&u$)_==PS$qKk4ZLiQOHCpa4s&YeNf|Z zL%qn^b8E0lq8%diP3t&_+8;?FF<+bK2==^?Uk{G~^Nvpu2WOj^s}c8?$~>J8U)eohR!@^^tW~t=qS6i;Ot{7TO>*d{w(#y5rlWqTe&L zfrG#GMdT=T*TBGlDt$&#UAdMP#8#RT@>E{C_vb`bG{g{VYmT!hWj~heu#(O&3$Iq; zJ@PxI^o6S~8dw&Lp@YkSy8(j7oUXuD5g^g(Ve$wyi!h+neu6QZ4%3n!FZ0#KKfN>H zK6ynuvKp>keQjk?Hd+1Sk8->u4>pSmW65q%3FI)vQCK&3H5KrZjTZmm**k3k!Ab~F zjcZ>|ldul*iL+I8FqySf-W3=rXwRyz#9mZn#HEyiXbDmOYFsr8I=83`YQEYWcwgR`lq+_Wja#iaZNn5yf4pk%>d8^jRyQohW$)BY5*BM`FRDg(a=x6 z`F^gaNgDUY?D$CVeQ)V0|A=ei|BX)TA|>f`niC5$awp%a2;6<$;yUY)erfEQ{2){t92!PX3_QPA&91ZQk6~Xg(tmp->p zXQ}k~;}&;wkGSq6WI32PQGkw|$g-mT8yGbr8v&Tu$xU??Nf9fk2s&#pJq9s2zr{e_i7*=2x40h5Br;Ly0nppe2M5;0W$|_;wx#1nSu)Q>ObH0-~vI@ENKs_M!2r(=w3lp+<^sH`qhEAUnRqIKgsCF zHFOTV6?w0a>np)Z?{FK9XCC%_z4I=+CE)vSXZQ4?43<;@qAOxQX)U%_aOsImaF! z@|o@o?N6rVKxq^O1=U#5)V8kS(uZhF|7rfU*` znZH*l94`Do1_moh+ZeY`&di9*8Hkf!ym+0Ym`*-D{?54z7b2iBP;ec<1dL#S=V)o3 z(Ox>VB{{VGvbWre$*-I`H5nOpqv6y=n^Dh9PmV6S<=GnlMkQ&($DUzXOux?*Lr|Q? zw!9qArksDwXtYV}TVZRMSS5b{djJ#_L z!J`8(GBji94LJ>{AsW-5N+y;mh*iwoc0+Oz-R%t$e)q5fOhO zCGd+UzbWQgug(I#Uj}`Ipc_?7wpo%v?a;7lUJQobRJA6oW@`izS&r$*q0CdFe@*oi zwU6JS-V2njs)U3Y3yLs)^C#5vbQAn*svW)LbMr4<@1+hoe=8}0LPv35!A8N~1^?N5 zO2|{EN1K($0YTItwkg!ha(OH*#dJzpGDeogis0r{O|*}2UPeRP6D4Sfs&vQp3e(UL z&VdnQLYB{bm+FtnXPb(NtsE|^uTH?--j9pUh6)x7=GPc+%YdOrpQIaClSFBdh9JW5s#2IDL|ohD2>syqP= zi|;ZuA3wiwJod;A*L2BZkJ_O+ZPwdmzN=}OS+oT8bkElO$}|5pk(;ts!Ish*GVj1+ zP`F=zymZI9@OM*^hSFt9O25E-fL@mbLW|`4!&3Vv{Bu{Q?Nd`Ug5z`7?(2~sq1e_u zo7XFkLcGPE9|tr}?zuYg#M|6i-S0myVbHbepko`RXwboQb(%TcZw?ozo*XvE%$9T0 zH<%l)AFlrLiryx(WzB{Ke1f~VtD?NCz1RykNAubL*``TbThWtsQPQF?saYEGFer{H zrkWaa4fG4Ecn!By)Z~9>e3mQ{`frO6@BE8RnETJ~Lz%qX0uXFC)xk!bq)X$zRRO7P1vvm-fxU1Am;2YiY;O>uI!HvYm zn(uhJvM>d+c|O|_-tg}7`NWpXY4(Uzcnl?}WF7HjW>O|UR)KaR|Jd(>;!qs+%`5Q( z^%riQKZGrhMP0%B83vf~##V)i27FfV^O8?8LjTR`lV||Xbv$dY=A`&w8-vU#iTNm0Fa7cKS+)ZvYK_*{pMyZu!Vi~>`V8|M+|&t|nT_--j$kq90^EOAwtdwe zMocFt2J838nTz2tXgd;Y^cO`}8Z-W3me8pfMqQm5(310EJt0i>#!`Q|_Kz7$E)syX z{|L|g?4-;gUS3`p#P-k`MpL^H4nZHV6vGU*p}r0bB>#|8>c^R;{nBL*dE2sKnY8J> zbNh(`o3CRuv`0*AIMpDmP`fqMFD^Ui6(v7SL&!+TpXc*KR7SNrqF^>{Ft%o6Y)o^K zTA1lVadGjL9x}7ua|E=Ht`t~Z*mEi0`mo-dBx(Toal%|MhUbm3R zscY(@oDfBPmJEumRrTYs@j5{Qp_lO?UU^maOIBp$4#++4OJR#3#Ed7i;~n+qwn%>R z9ZRhcCVOkm4%Q^H(7woBHKsOFh6WtaR4Ec%LAs*PUft(5pMB{+oT9b_6_|9wSQf29 zvgAIl(>}U68QtP};15cYh`09CODn+`!j8dK(?(NcB6|7iR^8k&@2h~|fMLo;BQbfr z_&xRw0_)K7WZV6u=@;K@4=HkU&BIv4QjMQwbR4qp_#GdGN3=`#`I&rzsjb*aNgsA4 zA?BBh?_VtQu5KB2);^bOLPG@8uU)62;!mxVfuMmApuw>l)oA}!8arMVS)n+yFxBJd zuFondYH9E2=-4Tgf(A6ea0qcML7Sjop#SL*%orp9N%QM@@k$1UwL0KEL77ekQTf#I zo+f6l&i{ZXK6cSkCkW;faUgqP`Vlv`w6fUNy7J69;Nc zR(0xR*2GhjtSd^PV&l+F{my+Nn&#<`{=us-gU+@IZNoM3+Qcsl?tW@O6s@q$I~f_H zXK0??kK9Mp^iQN})*}Q@(LoF=_#$fj^+PtTA+EOdaZQYeS~H zx+NrWe{z?hM4&*TS#Mz~u3mgco!)uz&6MS%-t?37PTx^kr(kWoJv}|2Xn2z4r)pxl zmV)tTV8h2MCdjYPXpO;y-o`Uef=Oum_*cm672;!TyLys{gF_t0@=R`Ji__!T zZ3KU9%Q18lEyFzEQ~>)E&=q+1y#NAjVaU;9lT?VPW3EX9M@k5$as~#0 zBOvUOX7N2_Y~R!!sI|0EUM>*gs{96nmU1Aln}L~%d}Vr0SyyUd)3g9Rc+TBkvMnN* zfqEm$T4QHOvf5H!yw}h=W)}5$;B%dTuoxBt9rNpqu+Uy>zIXe`SdBv6vL4|#zSg9a z^9G@0x_L&eRk!vP0luoSvk&9m_1F?j$J2vvPj3Y{r`O;d%klziF)H3}ZmYg3PQD^m zH@jtWU+IjZJ_+~_M&OzBpZD}0^7XND5#fxy(PY`qZ~*J73Qol0u7WOn5w4#w%lVnx zaoGj{BJ;R+@-2pRjpaL*Aw&{NN@*IjGvtj+p+YJECt=3ydzpQP%|2ZWZ^cdKAD!2n;39Vr9Q#n`qv} zfKDkfXwHtko~7J&5!>r9m2y8*_m#gGFP1~JPwM?e7GuLunHTFlmh~}X1A-@i@3+vQ z4xahtxoJMkD2~5Rad_a1CK?5PGSOt2&4^AuYOfo{GWdP(>oxsW4CCWtrwm7=+oSaQ zKbc5;2`$w$F-e9b=5Xwmkv-icN&kvHHa5hvSb0BZY5(a3aVKWj<_P8t$uAUZWI=@lNh0gmn6OGdmIZ)?3 z{-cXg#c~=NC7rpeUEk)E{fS5I&>OsSC~^N#M`XC^TJ2T;oRSS$68FQ6!S)LxVkXmT z3tcdm=pU*}@-h1e-<^B0xIrgZBe8c+{YiC0OT$xA_zfBu(2$-?bYZ0#?@oX4Y$5YX z_^Lz%*|E-6C%y(1nCXxqBI{GfvtA6E=MU^>uF!wR!Y81RYtl)vQ~GmG zH|IR>iaMZ^E%QP@8`9t*rJd}%^FN5e3E_|?8Ykj1;$53zPn9VtK0{5JSipX zaN|UW_{Kp($L0IYnMXd}U@l|WU00L|n|8C&D8KdUGG^)hXPHZ4a%wFZI$fP9p;aMW z&U(_lCM98=qc&{{XTRZ}Gzq?A-|P3cj~8AmDl~@ZP}XlqLE-flSO(=!inm7|621VN zm#4s=3?5q6;ig)73RtpJ;x5HV!g+zo`?aafG+582$)q&MJ6p&`kR4Wzzw@bcRD70r z+T7N@s8|^{(#O0~0KViF_6fi1+bh&P51v)PG+FDW(zaw(1-_g|w`(;L<<$c5v8%-O zgToNk@z!AObkd13niE)!YEF&^Y8g4k$rjr6OI$~bmH!;tz8jBoNi(R44MNuz`=#m5 zW_!sSH;gg%x2=G7s56Eh%cMt-$_3Et!VS+%dqvJ%IGV-FWTIV9$N!*c9JeIsy*&CS+uR#~kR&ROy1w=&#u@%6R))NTS`8+qvd<0vc2a*4P@g@f-89_3JxW9AID9u7=;$<7aCSz1ZJ#5 zWIbJ9tm5ePQ%$ddL5YUp*=J<=MZjtGagIUb=LGBbpD9!}3$qh0%>w~f5j!4zp5rmhGhx))PejBxu@H-R z`CIPvq7FQ_BGRmSEXrwLZHEolq1DVoncrE0JDFy2fBxJ6XuVh1l8M;RVfOf7gJbx3 zrQ$EtS=+u8A?`=<+ELdvX+^6xF}Cds^;78yF?7b6(fE!M0?K4o3GMo7t+xH^$OzG; znQj#r8BDUoSgqwgVvg zyr55-Rfj|@*=$+fR_y*)GG`oP`0T!Gmwo$I=-y$x4LKC`h|b-+b4;SNo#;uxg%6WV z5-PK0R3l>}gns4BGEK`zXekDmhCI?Vn8%*&0oUr@Fn}=Wu2j0O#wAG9IAfp%0s^;W z!$lHYx7Tg}`cv2dA_ijz-hC)oln z?=(E<_8O%ZN>wCpNNve-Jwl#)g$Z-_97lwUY`%Cm-iAhdxJ5)nREcb58_A#(i`zBE zTF;!bnN|F*AjdLXPLJvG-J3*~cyug(oj@;mV3Mo<^bDB+TF5#~Wo5P(&E1iy=QX_y zVL@0umCPI4A{c3!_o$TmQQcL|{Ksc1UlkpyIZti%;)v}=gqZU>siW?uN_((t%j!g2 zgcXD~hG4$#!?fS^#fhQhlipfu)a2w*;7^4=jRHa%i=K&)+R#sT-PumCIS$jC+X^hl zibLjL>b0h~{_kXu#PZ1sl_+;3nb6p)^e*wo6h4u-$jY z7A0t&+S0rIW|aOfCk!u)sQ&cnQ)bd!YzT8upTpFpF{PSKofj!+{i)+!;%f6Lfaj1v z4q-mN*~V0DEX2Csx^w4FVoez%-cB$w_nR9@shqkjAsNEgDz;$TKdun>mL?=x+@y?@ zIL9odDwfZB0Olw<$&u^=p`Q@8ljvqyuxv>X*;!|UaIURSB6>y&7F~~~qGX`GGP;hz zlKz{9HpeA-i|dk-dZh7y&x{AZzLM=~&#M)e&o=E=2Fv_bMiuC-yQ0A0)=eTf$q2w; z0$ocr#mz9r-9IPs{=@}cy2nY}I_~ZJ3dgzivo}TptsBI24Kw5ZxO+7hOFc1G+e^^i znT19q6ZLoZbYdLSXk{aukl2M_-PA7yz!|Q)w>S07L{KYFpD!MT2neTI5SZ?ZKb9~v zQ9^d%ShqF3b2NFMbKDo5Zx`ykBzh~&OIiy`w&eppT&2|Brjyy5-sXz>i*1>!U&XjN z)?3qgNolNNtUdz4%c1-9-xM67)?#BHP%SSjJHI);lv}hV_3pyJl1QhuM{Ov7b(`1X zsGhA}86}TGC7K$|jU*{mCnd1YcE`=o3QvAroOog@-ruTwcrRVW1tK)f{gK^Q zUA})JDcsrKKu7HW1=p2tp|c--Yg8b)C_9vsle69G$L!M=0Eydq^liF2x0&pJ49`!F zjEx1NU*;?Co=+4HMTK!@cuNS+t@GVE3zHWt8XJXp9zM5$dD&;>!WWIS{@~@PFTupi zXD<6f_y2%0VQX4v=%JTt%J-HOY_0IEv7G(OJu`FcZb8GP_%0R_r3Y4nJ!)B(C!$Ub zePdBckf)1iF6+35R?WJ8B}Hwj=JSjH`qwD9H+uaXcdDbkK_lT9#=Qz3%Kcs1X{W*P zc!y=)Lk@k}D%thzi2ZeVbUW%R0kJtoDM!EN&Op(e?4~4FgqVQc9Sz&*hJ9HN&CUC; zLf^MHJYT)M`G}_%?~X9Ixy>B_mxvJM3g<3Hxx57*C+s2Sw3-goHPD7kEyu8ma(POH|6JKrw}6N*WR#o24$ z@f!`PKhx)$)}L!?y&d8Dw%3;fF8~8OuXU{AJqiO^C6)#XwKRn|9|8h`clAAs0WeP+ zpj|5@2`F{VW}A|fc&*Qvc=0A^9|?&APK210ial)jkS(f!@mXrafZ5K8^S9L>9L4^F zPj+fiUDzIvN`wLLq#(s%jB^-nI!`9}xU|(3*W-c7Fptp_KjI>E0X#zRvWL zFC#$v>jc``FRjIg(pb9?rX8Thd$wCW>1yzL=SZ!nM(zAiK#_^6v*Gr3Nm+ECbSf=Z z(pq>YR>QxR@WTKNA27(HA`9j8m1J@ByR-|k8x_Y;CgdHCV6w9z-IMmllnhJnx_K8# zc90J{4!oesemw9`S=!=)!)GGlYe9q4UMDX-aoDU?h@O3_a?o9WO2(GYCT9qMSX$Nj z8j)9yz+5tJbS)<1C#jBA2oVrZwko_l_}$r*z=kEqfV-buVP|tqqsVHrhI+<%%X-Fn zL8eSyC)e+tPxZ>)n-E9Pc{W}DnE=eOUut3Ov;gHo3rz4%g^r45R<)XZWY`SVa#(mVUi5Kd3E2 zPo5%=Qn8t9`~HlC(oA`N#%@`ame){pNIIBg?|t#ROCZQSSvq0gLl!Icj}wi#+1Emw znNvG=2bf~2fP0%E>Wq~|Cq_mxwA+T8U6YhF1WKaL7^a)mnE_W|DR2B9u06~TvT70w z7qIweS-mI5%?a{IqN3`#w6@UZ?m`Dewp>R~O0m?c^OJ6{PfJtna%KWs_}l6CiWo?` zI1cRUKj4JgvzR1o*B1?a(;m53_GIFE__10so;+q@b?jQHiF24Z5lS`(5fVbYlsmxP zmJ<~x*_I)e8ndIkaEIaUoqC%tEaZ4JkUT%1zmXm&T^v9{h}I6vYF64V$6e@h8-Q*! zJf>Ydak70+ED6WiFFUWW{qEZ2qYJeePoq_of*^A^|BK8Aw_Y4KiKmj(6y zlA00FPETyjEn*J!>Q!-M^B<+&)_&?lRpYFAM>|qBIP>tH6EDGlAWjD}*DvstmL z0r5@PkX`XrK00K!NDj0dds7Nvl)P0=dQp#y9%$Db;GwVe<-(N2R@d%pB>jZ=R(kcd zTS-X?jteE|DE`1W4a&PCM3Zu3pMMb|?>V%!Acx>ROXD^>ZepFidz^H#;v@Px^mFhh`ymr1a2FxAjAhM7J?Yh=ZyuKc^nmCl=c?rA zGBPr5r80k`h$v}m1IFN*LYR>CZRprx`4Rh045l=#2P_73B?m)MbD2tB}K z)N(TvN=zberA){OKbTBj=_pW$2$tqJ9{Ya1ZY;ccpk7QNc_I!!GXfTY1+fTx&N@yK z1`x^sy!38QDjsxw{!!8^5d;-Kv&(l3K_MjjI2H6MRsPI!o9ViJNkLBm7j73SxXwYO zAZw%kXyAX6^u-yGcahK{2Z?1Q6TJx?1d2nbn&8L;L*;xA8TFhz6#c7|$ z-!q2(9Jh#rRvjB}F7|z_@%PV_SO+MLHU^8CBnDi-2wdFOR8b+J`=4SX*ZX3F9B$rx znZ?!c<2~eFKvbjzc0-R)K^4>aS2&r~EN0q07Xsq@B`%m$7%OjlHa%&^47)aZZNU}p z=p=NF^<40w=DrT!@WdPHt-_v4pF&p~uN3T0f0Ian*qiOXbbl8}!#mW8bV}m^U{FFr z$T5|rmGG91Rax3)6jkpTyR3Q8e*~Yq|BFCXE;8pXwt5}Tc0_?lSs{@jft5F2$I+@$2t>`@&tn4<1_)EwGH=^dU8blw!saV~(Yqw5i2 zHV`TP2mv=e3*(WB!tDkRj;YTugdVZ}^pv=+fU$^ND>@P4W5p3&u3fi;;yISS^0#^M zyt~-u_pA0Br%eu#cTA~dd?cuGmixdYqqsJc7f`M1`~m+IO0*pZUa_tuMuT&C*k8^F zxVXAETbr9LF;Y~B0E%y1VnJFPqS-_+0{YKHPwNqy=hA(Qt36qm*Z7@0Hui-nV3W5R zuLObl3Sd$A##;+=Q(j2C$^>2h6!5e)Rx#&_D9w0GOa#2|V%F%*-`297={p!Xft^qHPgOJcTSU_Bu5NEu84@@LkQ`Nhu<-cY9v(i^9UgLcl@=0BQ!PEAh+b>>8-<!vUUCI77?>?^*XYfM;>01Z(U;$lCn0rsX+1<(TOs3I* z@CeC~(>I^+L5iaZ7*_wq=7CTG8_9kkr72FIPKJY?_|FT{I#vlaIp6nU1offJZ_0gW zLkB;>YTf+$*X~i>M}GpzjSvtL=9qT#rPU?AtTg&zGg4Jp-Qy3%Ra!4pH18f8d0LI5pOCY$tyuM=&(GUpiyLl&^FdhJdgcPIaTE|)*s=M|5IW9l7l7?so~Vv+-BtyOKwwG?{~*b<@SdXEPrYM)Heb5K{4ZDS+P)M zFq2<4$}Kq#mmx589GMSdz#)OmfpH2s0+mKLp18j}wGVjs|zg3a&z zp+ELeb`3lUm z5kg8985x?jU-o2%D>Omjk=Z_1+ln9B!X8Cumcq?Qg&;Hmt!h6eBTP*hGiEc}qVI8( zt;>Xdd;HwYG)@D~sXaH@9%R7)!(%$CuZ!~qdLlvOZ$XM59|1(sP5gaMNH#7>0!2Va z&sg_*bA8pq8saDqb`AMecQR5g-oE;a>f`gL4`0IzW>M4UAQiE(*{062=b>&Arw&JkEk7Es|%w!YcMKE5&|ZB*AM7ojX|mk%g5$(fLZb#&7{ZS=w3eKJKIJ~+Jv2{lCR zM|u4Cn;dKI)kzm%lfA)R-ern8w8xA>8r>NN^Q5Ih6gi&LuIUf?&T3kQ_hktSLM3@hR^8)=p?V4F=|*3^)`3FjmnLj zyG*-xZQYm&mcwnmR4w%Bix*>QJzrZ*&dP|`NM|rb+Ac2CqyOqd)WN~-d&G@?Wr)a3 zUu6=rHX3>a<^xSxb(`i1@(Zcf@bz+($M#IOrGz4>v@#gq17jCj0+#8@cKk*2 zQzAxQgA*pJ(;^}fpQ-Jw4Qq&@1mI05g;LU{S`rkD+LD8zbLrgaDx5%Fgt!)9A?c~B z+~R*M0|^1Jp)CL`tYD&!-R1Qi_hho8Dm4BfmbVPzA9AQSVEJ(k;VxSg&a*u`WDgJF z$N!lxB;1LYP4-!+k+3(2m>Q_%7u>Z6x?rhEii73s*|Tc>acz=af8ju4pA0d+u);|; zWogS=@-P@PBAasc@~$NIe-}xD^+1nRv&{V>o0LH*MLVGpReztXm2lBhHvMkw!I_6X z#M)@x3FQ;YbHT(ZT;9WoX1XD7lB@x8dL&LmZ1#ujiF4v>!{nf}?<;7mB)}Rv9Hgr8 z58){O{#4<{9K-~58786_$N@}3Y;~(yhg)#((v-Fy9EPI<)J7{J(n0W9(yd4C&*QH? zPPYjrc^KtG-!5w@?)wa1*a~nts zw2+g{dHPEUZW=Mbiit34^%ie;zXTG=@4O{Ebv-S5vRr)!2ho^`$G zik)?QFBON-CrmK2TvgAp$qp4Q!wv5G@sBK)SMU%nP&=3W22dC~9EfO*AZADndED68 zc#2E+CEWB`qO^~8>kS{efCQ(r>)*#~j#C$w*|)U%Xo|AyJ{iPtK68V#_}dMXO*yei zTL35(z7*`#26M-i>(dw#ID9!m*TPn0%hu8(u63Dr6>PjhMZLJ=ACWi1!ogK(?fRxp z?N*rc+!}q0JaE{;|Nht5(Cnl}7~3*(A3b`?Plj)Kwl^s*+~GDzwjP_U4{~(JKF-J? zWtItvb_1=78NPrHA(OaXxz*}&gKxd0g;fU??80PnV7O=!A5(lDBw@;e1Dr^t`NDcJ zj%@2S)c>)PNA^XKPOEZlWDi1s)l%Z>s$wMDZLSgrj{iO=7@?L?$EvNTSa<1>f(gVB z5p~ue%vxH9uJPo=e84UxK(ZwP0G=xP=@kCTgGnrw0MR(wLu2MD8kc>{e_+(!vVJom z0Yhgxd#;{c^`oh2H>=6WZS&X%7xB-XF2TNtL({5Rrv;xF04*3IY@2E#!S-MSa#Vm# zIbd7r4jQCrVuS|TRUZm}rMSBD{mW6bF~kHL=m5`y3U2`Ms9|c!gMc8kBtWYUek}M? zDGQ-?1nt0;KhoG#OdC#WW-{Hq&kWz3IGU=th->sN-ZqIXxR6SJROF-!Ji< z9rjYcKb)yd*s{v~Kg1v)24aL2+ihR+c;G3MY*;*!O96A=3^S?1m}zEM^J+R|!vsE< zW7n>ufFHQ?;pzJFOlZ8j<|Z!)!{s57fsja;!b-2c2;1Ly@aIo`RImomEPWlp%-UOL z?gTlG*f8;q&Be(IZlEvk`>f5a0&3tt9shTkeGx}sTh&B1A>H20Zb|+Frjr$t;6IgMF1@h(Rshi3-kiJPq|h6t6m9>oDfYCC9S-XB+7~C9tt&+|?CrC1mLN1u zq<2}p0;-?h5v>L4y_bT)>tKhYxSDM}j=xLDDLnU3Muvm&jti#1Jfg1r>-filh}=&Y z|5!88Jr0*E&n-fA;C;gTe56u|kmQJ!@>E$6&AWG9puLQTifsijk~Z>cZHY=!h$cX> zgd;{Ub!j6#{W38LiEtXj!f-U%wJwHUkkTuJ6$0k3Tk1M>$i>Bl#RoKr*o${yz*whZ zR&HlNKA(Xc{^3NuBRf63&b(hu3$beurZ1MfUz6J2jk5$@p$ynVzJf?aIEbG_? zmcdx5qeN&L7M8zNi@oanD0yg!XXzMXq6i$=t@-v?M$|ORV~~{@fzVYpWevb~r_S>) zOls0p3btt;2?~7)R)#N9)DsvMjvf!dxu{9b7FPe~JfHEKP@XQ(L25_H`?Cx$UcGv? zm#knC3pX&Iz=iKpe9DaeGkb`hR7CZk2zT+YLCtd`qAG*Z4MzUgE<{`@2#+=+SN`g^ zvS-z=6fj6EOaoD(;?P{2Oggqb%LD&!7KsIkENLzdd2O4+#du?isu;X&_!tECdGF&gnMv=0LOxI&3-V&z> zf;F_q>d=*`@*sk&nhq>q`~5l$egg!E<3q{^pvsD=@{VPUznXq#T{bVZ`F`cp2LW28&M^YA(Ec09O{R5`Bw56T&0lO1>uO=RGVV z)sN{7SeBcbo1QEIU^EFsARc2_m6L9+uJN-=`+$0?DDt z<~U!4lCI_{abr5onJj(Z@QZi?rL#aV||;2C|OKi|obqii=j8VaUvQq+S&-*&>+s|LYg5E48%65Cx zJ}x}G*JsD%*)tnDHDeCBa1mL*y8V-Y0%D0rGAz>OOMdiwDRVaPn4G**8cMD33)7jZ*eK1SLKW%F8;)<>LRD!&SZM zFIwfq*TA_+d^@d@ zKHG)McgFI}WGv|Rl*>r0Bk~(@W1r{vo(tAVBIHnyO}DA6_ZkoYTJ!hJgSbxU$ppU| zzCZloY8MV74Vkcb0fmsKdxCmu4v5c&TnX#&g0`PN0HsKI;a++qn7qm2>E)4`H-lxZ zH7#Cp8NqJ2H=H`zL!J886BTbLJh=D#W|J~7-(Blm!he1+RPLzEfO)wEB5Eu2)upO{ zrO}kULNUio3zvmQ#1QZ|FN`^Ig>m9T!h z(uDYCq#AZdQkN#Mb(&b%pg~_R~Q&R#UO(w46TVkB`4|Ul7G#wdl7< z&hx46sXu@N5m%JNESH|*7ozbhv6V1gd273-8} z^3U$x@Tnh+fQ4>UcUm;Bddv~^MIzMfNH`lXl6W=1WwXklwSDH zZF|g1074w4Z5p!%G4f$yNK2I~Tzm1{ATXg_Wql$JUFf{6Vqrc#{|O&NO7M|0q>q&y zH6yeq+<&+M{5~|Xur3n?g~MT^*$ub)0#&6$b`q|lqS*prujyaZ+@Ra<|mH^->;HgrQM_xmln#j0+&lxLpOO(&3>d;|?#C(yvMVi33-`SC)7k48M`AWQySZ_rOXPat;f&<)OD;TJV!1_}F^a*8~q|3~i99+f@qF-oB` zzGJ0;H=XGHK=vY*%256^B&iLRPL=yRQ(H{_f=>7)EfBrEjqdAt;OWs_+7F~EhIAIt z^xSQaVc|bbMw3RQVs|cUOZtap?7aKgT=SLHRjQTQR*+gMZo^q`su_TG5%XAl^uka? z>gU;9%Rx^`IYKmY!le~(xIQlq7+v|plbu^orFV(uv*Ez_If(zy=N@kl z=l&TnDb6O;DAYs8tH(A%MgN55a`N)xOcG)2tfus}=PDaW(dw_0iJCqOg4|jTjBz`= zN}5cRD#-lX$BcUo`mh+~Gx0&w%UiFO@*^2b=GKx_5=)zuJA7?Jcq4W35oE5LRP zG>cGmXZ>eq13*-dPF`rtj4^UuK@*r2&wB=DEPN&wrKE^P@2Dl%PV`?fbseRq<+k1! z%$LJ{q}BSJir0mn(2iyJ^)UC)dXCT& z)cPNz(Ae+ZG&w1zYG}@*<@mD6idh1|EMd2zsWkZ*PlV+F9ZJ!LkkZEH=H?<4MIiLq zWN%U4V2w--nEq%8O9i$P94<3mWuPT$OVdh&);5KrU;qMpmYes~S9V^FbYqdZ>$q-3 zYd0s#d?yd8f5qLOGZw7sJ$PVLWEzU&Tp1%fL@95APzh6USyJ!gKib#djg)xnJdP*S zW)Oy{@Rkc~-KF8CMK$D4k26u;6yrGLEG+D}77?iBqN-P`;0471il8^V?sJ-jW|4;T z;qyRl&eN#ZltJ3^)30fT`E=x-M&ZSyZXiGFh*WPqDt2d;jDNhh4(%^me=O_aoV}$M z4mx^@YNduf33eQAwj90S)Xb#BiMm3=h+jAC*9&^yiBT$ZNLe(~82{Mp7P6aY?aDTc zg1t*bD&@}1+{OZY5yc#-xA^n$+@#v)SkhZ9Lh<)b)d{oB|2*GaghMjgiSV<%`>wBZPskuUdPAqHcG;VDoDWM=%5U zI9HC_nCr8;mcWUvN>B-?@s&Ob#dNMhH9omaCM4i`Apk?ldA3)Fjv_sr3RiHBkO<7Y zHk7)273m-2wDzPI${y+{Y$z4)+-Yc)EqB4&fS9yoC4wf%|jP(s^~ zl!i?l-x-<9Lt(2GtTcJnwr_Z!3aELFv!!BFu1T0*fmUUXCESj9HsmLH(LY3hXjPIcP-yRopjg4TJYEG06FjIF^1ir!HKyyYijR z97@!bk9us3DZSl!OqP}(CD#2B%8`HSjyQEFs3=Dk=YLl_L$(?TqbOWznPfr?;8hBN z-a@~D5)T`BOD3ugP(wYZ!5*+uWEJ3BCL;L<^zcz7> zdD^k8Q+rCil#es~Gd#dCF*X(lTPBnS_+5zq)Td>pPa>3m8-GTT*`_bl zX=e8zv8Ja&472v6GTGLOFLAk8-_YaOb=m*=q^29CZN)o_&2p{Klt6T$hMV-@!THrv z@sJD~;y#kt*Vnz>{wmWbjwb|dVit5|XevcjDP_l(TXN#Fsak+}Y$;2spa7U{qbhzG zkZUz|kIzO*qcO)l zj!eXW>XwPMs*_{Ag=GdvU8Kf;I!5ZxXWw!w4d>W86?W*)kmCT9AI5M(r3mj9h+;rO zL2so|Q7n3Ol!n-LJn|)4c&G@`O8k0f2AFu#QOzSx$@~ZV4kR+A zK|>@83IxZaM;EUTC|YG}US?Yn<6~Q$zAe_xK8u?nT9K^@`jEe~WY5iv&*@h{i+xAx z^Ys?^@z&43S;_`!YElExG$MSDQv97WY0Ky*gU`b`b5@RkMl!c7m;&wLe$=+f^7@PC zcDz*hiH@I-rK`FT%DmZ@s*$9?#4NripZe1wamg}Vz6^|}X%om1W?OF&Y2-)ReEPJ0 z{u5@aAb>3=MTX`DyXs)8I(}vVOg7w>c$iVcF$I&a6u{psAp&-Aeb57=*u#kW}{qkmQ zvo8Cug@?z;E0r#kti?_~;O^74DGN8{9Oc*oNvi^hf;9*s?!{&RoXuh7Nx6;15O7trsMdc>>sI8IhbOwV($W>O4a;Dlua`29ueoEFw8a{{WF6dadtl>+wx z>O%EYjBiM&8`Nu0Xzi>A0^Yq2nL25bqjXk{XX*lf^#X9N-~XRuAB~m(70)7cP(g}T zGgrQc^U)O27|%`=&GaPbFg1+v_~(p)_{~_~m(EkfrlvVzkGBswbgX0HZAX2*9JK88 zMM5B=S(shS8rm-YU;~5%EooZfN~!9q;7ijG5-vSG{rOe=E;s)>3Lpp^$6<=#YvLeB z@4&lp-T!S?igQqV^!RJ@fvI-3cm$xH7r-|+t53l<7_U;Acw<0j0Ik+EAh8nx4Nq#X zWt9c<(1D&x9?YXstTc5FFFzqtJUBSDbpBM$@3ua_4&+Tr6jXy6K!`TkniQzAfcAQI zw-4jUJ6yU?a+8BhAJULr#1KtcVj@b(#ALO|j=DP(kson2jBk)Bpvh1N+p*B$4P z`UvsLWJKA8b8u3J@YfrIV0`f;(q?54V5N=xW3xVNuPQpQrv<4a0CpJZe+Uk< z`c`Xj&%O2k*pU87Vkj8smauO>AJ%TB!v1kpUw(FAEZ2xvuf{s7+r0|o1@(8KsA_J8&}8tZn+m(v_4LPjs9 z4hqa4tAE{%{rauqs>k9-mQNN;tdk`hV6kq1p1~(o!@81a9e7?2tkCeg#b+Z4kX8F)2m<;G2gx2P`D%v44nTBp7&!5GAc?NBR}$RF$pLjP~?V zmdkoFcP{HGM^$oH)}`f5`x(atnVFeBt;R8E3cV-AoPP@8^dT+=0gUQ>XvNd2?o~gl z0QI6W5n>w96YzVd6g5`m3;4KC9c%c4hx>Zk(mv==dIP=to3>kLS=Fzqj zl76>j(!PmDelT1jc4AF$kCUTE1Ov#;jFk?4`@S7LYuWvp?eD_paC@-JC-hDN)4a$gtR<- z9&pAj)=Fy9sq4vYIGzc?M8$-+t?XV?zs0Bji{BWUNjo+cAvUbSWo;m4pOH#NsO}TV zk@!9wMu_+T6sW)P)`OP>EU%kBdzvjM(v#CiydapbA^c)< z(Lc!-zcY*c)zUZuN2nCD)=*GBJl*N#IGs_hh@?HN|DQjDJ@Xidctf!5&GflYHiENY8B^IkH`V@S4PR-Eteame5m@3_5SvVlhMF%=Ht~gv z&q438FNj5MJaeXN>GL5WXe#9?b8OLTCmjE;h){m-{Mm#@6yq+9RXE^I!_{kV z`T0*or^}3j*v}Yb84eRMfyIT>;PM@u=QJ^St|ez5&fLfD%yM+?$DswzY*(Ep4btWZ+(_17jD<|6x;E0X4LT*My#Ree-j>zgBada( z-booem(`RC-G(Mx68xcJdtyGJPR#l?&6h8{*+#89^*FR!yK3tz!tEF~Q`E`oBQbg; zcS#=WTkIb_zF*(!Tgl-G(n~KM9`}>H=#`v#;pxl6XXTR~qE4QEe8=Y4h0LplNqo0L zXB|Ul4VQ(}T0#26~^m~ZE&VexwTWKX?g&>Ntc4gfik!NLsDi-pzY>w&h3%j-RcZEPBptJ*%MZN?jK5P9iPbXuDo^uZpyA-;asYO3whR6&4eO{!FGd3%{p3l)fkW!IvILw`f0xrh-Z_T+?c| ziK>>Xcl)FEy3)LhkC$3i__ryI*Ev)}U1tD-s+lFf`#BQg-*vEO_rqDNpy!;J0d0B< zOs9W&a%yI(a*61Lq~x3J?JJ3D7@zzj(#P2!%D5DNw+=^oh&M?0cj)+fgY32(lG7mpCTkW-8XD?B zo7i)hXK8!|Plumn55Bqa(XPTT{-)2&yWgGOO=KC;2puP`#Bszxmv`6G%xEilkp0BX zXHKe_6`a?U^GPzOMq#16hd(^2q~OIHys<++zjruKB25$X5bzu)3`e-RGq=O@tK7fGrTTc=VDV+*#()jj?UnxXgZC4Y`aAxB)blBje5%Vvaik`{{!~^rFRrIY z(;f4c*4b;enEUn(U!M@hRlEt09g2}M#LIlNcIykEw!KfZE(?t$^OxGxXzB~=S7@El zLOF)pqtye!_?4$~Lp$2e`^<_#b8m+4;PbO%cL-(&w@~x3%=HMM#x1Yb0 z9V;OeX$w-+uTmTs3P^rbCrpjCC%-~f&LUItXu4a|)Tk`68@)j*TXQ#@pLo8x_P<|* zvlppByd1)zzaXKt?t^t*3v_)&zu8YR4`$U}Ld%k~e$OgG@p&6*nBCwj?;DokF6$G5 z);Za+Om%3^b981lL}OKbJ7S(BWS(TMTgI|m3DUp*NW(T!m$i1<+LIVU=X$XX6LtHM zfcY{GmyCHIF%)+6b~xU2gP#MPQYddmoLwA`^8LmELn_9hQn;;`my!1<&M@xeQW6#W z>$h3;J~2bzBonb%$%4bbwi@Mgrr`sDV{Krzh#>BxedJs=%p;-S{_Zgk{90#Y`{|lL zkA+OlXiq`>S%gPK#lD4^B&c+E^kOWK0nrI@+TkVfE` zlanKp4rL1TlE@7eV_my3^}vI+ExI^|z6piZ54UGZ%^&n!{Y-^z$d8hXOv?#a!kYnv zY@E>h(&INyH`<-AD5KIk4PBr@(VOM|Xy+&h!?H%`DNKU6&U@}Z@>;1f;o6B`2U?>1 z#Q0me=9I+5E&&*cj1zW0Ox?5^woUS#BqET}_02NGxcn|L98uwdmZRVJQnm)3NoWam z1j-goXG)!hF3|IGJBxA_O}CiKKpjg1eWNKK7?Y3t?w-E?{a`?hn(Zwrhj!Z3abZtx zAEp-*dCy;TBMow*7S$+{>+P3_w)tqUU;R;DX_;2Y+9n%9LBi-7*(11yezAMH8n%gl z7?o@4>5W{Uw`#bk&;|0Yhj*SlSagPA?c8q<#X#qIilbty+R?tb0>ge+xp)n8ia}>+ z-qX0UR_`h%ww&QxrUElv^1);dLcH(epx=`hlH>E+9wFva!ja-;#9`1dXA3}=*HGy> zT!zljSK-;0P^a0$xbuZhnc4Mq7!IQXEIz%m((i%o!pAD0BVVlWvJJ!w$#yF;KJkCU z(1jtrmWf`+L;ls#%{OerE$aj=AimdcEx(cS?#Lpd9p{8t@+Qf86P1qZv2mo5Ta2fn zy}=KALJe=Y-p|u7^tM#9Qq*ChkGba!(T~FO!b?ph?SJ!`+;h5kaG6%{!9UYZHJpML zEf+Pq?B;NT5j!IC*4BbKO1t(X()8ePtKi$v*^a5ksPY?cdmtP*>rFcXa&e1|Xy$OcheM6%i6Pu~AFV)_O;5(f_(G z|DLEworBSHT}6t0%4o3yrA-!t}|>z2^?QT{~==54iM zwjB=VuZ?yjXq9+7uS@LSau=c>tm!Hm8koC$TU5p=ZKWye%^-rV(X;El{T zdqU{f&%0*47sH+13Xom!cRd|P=tS>?NV0jg+N09|P4ezv6FacT%d)upQNMoZxE9%7 zE>3qtWbw|$;+fogYhTGj-A7cbq!{cDQ4%yU*w8X+o=NIy;8jZ~HYz_==zE zI{s}(^6RKZ9Xc>QvP%BAA4T#FfXg6%$(qd2ECvvA8Hejy^*7;-rj?ajyKnUG4=B^~ z&=jX3e`EH0-!`9((0F8+rh=f(b&8|ZC)iw8io&{n`zk+i0s=?1f|DfYcV0rZS=JD0 zn4@pBK7u|bCWaH}BIH0%1Bg2hV;*Q*l0BWQx54)5?`~6WG-l)Z&R;Meg zH2lR2i?7d)UibZSq}nhyyI4KXz>Jh#G16f z{?Y&JUfZ#8i++^FD&f(u;aA;Gz6?AuC#5P^JcH z?vj)CTzfqdT&R>Y4GG5W9XnuF{T%1KQyr(@CDrUd_c#V-*TF3!@DY>nUeX}Hi1ixm?}dcLA3%bt;xyH7M*8pUz# znxEX`$2z+CQdO4jO8Zb4<&m0{tT{&gR@VtBEzi%x|4i1y{Gp{mAU_L7goxlz;8ic$&e%t|`;p7YGKket_i+gb zMr{Yc{I!GROkbe`-1`h4>HjQA?y-)wAf3UA#W_YXk+)9XA)M!C)rtis z6%xFyC;heidf3ul7qn|oEz$6q)U52rl-k{3>`WbX%zsa>{C91JV!QfX7A;v&s(lv$7o&DI0XX@vFBS`Wk%B{eO*m@Fe+l!M*dE}kA1hS zgtmEi=j1Nb*mdMgL}JSUX*{#Isr5>^Zn}##?EI zr5+0-mzpi&kY8GosS^1&lqEWljRng#6*~EQi1NQ1&@f6=IF}{Y6EWS-CSxxx%T3%akhDfUi|u!E>}WaH2Z} z6Y!?v{_oNMN7z+{Rkdzi4`Me8sH8_ir9`^%C?X;t(jcIeAOg}2ZoL+%bP9rWhoH1U zhjf>8igd#_-%aQ}Z0`4OKi+#5YrQdJ%rVE*PR9eTgEO7m-8(=yNPerXOi;O493o_R zPe&&&xjg@6(S6H z_{k@(ca&B_jl)TG@X~*8NwZ7dUwcT8GUYBA-GSye=T#o2mN#hYdnx({zTyCt%;q26_(3K^xm@TEP_A;88-5SOb3w$@WHU%>D2gSzGEnVQ*pYE;!5QeN#2L@(q3NrexsXdGz>(=pJCs5c8h@( z42}{6Mzk8J0ivjB0NU_szA*5zQEARHfoY=pD<>aJ(*s%R%h@K64Ceo{@67|EIo;b; zo0nT~@5ua_%~#+2Q6zE~)I6C%&W;m$IgB50=zV>D(u1^ozBO7#tT_xI7UGowVc52} zDQU2ezI!$fE+!YO>2li_+KqqMJkl8YU59x_5&?DN=z<8kw{ybzhJY7)ubIG1*rig0>xUU3aM>-j{8h(BQLs_l}tUM}}Sa-vp-iZ_mS>V5Q@Ss8tQ%za(+ zAw@eeKx58F*d9mgqbnvqTe*gh$%NfDoLrh84{Sbh-E)(qBpW8LPE@3Tn;HBH}I@P z?N%mzV8WwhwuPbl-y7irX67916S-Vnz=mboJgSx#9zhPkMqaJ}a@aL{z3b`=B7Ir9 z+o>MQd5`q8ub{o7UL3s~hY4ei#1C66vNT z+x*e`~(tBh~owYfHn0Ya%?a?qg)+=E|Gs;Idx+;| z(sRiSvZrN9EqmT@iDZ4SvpqjxFl_6t{W@K{ZSAEmbxKh zaa>&)TXg{rCj+hXJ}@tdJwLOXJUzKSNNoh)uM^;o&SzXI*b+ffCQ5d$F6XWiBXh!J zJ19yrnLK~X4}bbO5pkhC?PdOrz@xGrHne$R|LLvf`03uM;RYrZ2oOQ{lOz;0sTICw zaChA?W{|b~^wZCaLdI-XXK@#?!TJa4? zBX0&SLCf3bb{t2hd{@p=FH<3~@w-%4r&W!u8oofBaI84nI#=XphiF(e$M~klT_S+H zlrVkqG>*493RObBE?4^{^;T$VsDe~I);d=7!3xOrbLOV9%GTCvwTTO@|Azol!V8g? zv|s-B!J$mNg3p*S5MlvFth<|H)k1vC-gIMmL{#Xj^p1U z#pArg#B;R~{DfoBjUCXQpenAeAf-y-UFJt9a3_)S0a>}Pdtk|$X~|oME3BwDJpG1~ zJz8`YL(XUQ?L*Mq)un;pr)muqfySqso$&Ja-Xj9Iv_VFb4S4#D<)BXw~~t>y#o3|IIUzr7f3%S^Ig9ccNW z+g|?p@!CDXxSWTR&)m=!yYWh!Mw3i2SSop^fd)Y%iS^u%Bm;thQjgtZpYD@3WSWQn zZMpvc!;t+AaMzW_?Efkp}Ya4<(5PGnQW&j?iB~x5RYaWxbtrMOfm-e z&qL+%7PtI;e6z?rsGb)x>>)qdKwGFkGf;cp?1tH7SWqTS(55@%-)B-B@%iL|E!(&Q zLq`3pF2}ZeKx0owY;-i|qliGW+KXA<>(??-0jy7X^|{R*+x#)0jkoOfSY<(U!%zW! zI*C7FDC4wY0k`Zn{I`NE@H{O_@~z+T+ah6sSpIki=8fI^{XcEq@T1x^oi1w+g47&F zMxH^o$0;xtR7KQtwtznyMyB&C7-jy}>xc00jgHEL;)92WM^EKHGF$H2`a)5X!0SHr zs68V{sf$7A74xIcJf~?2@RX5JQMgdSjgM|jhMVJM>p?*IIy4Wa>5vU3+|&V4;g`wD z$v1^2aD5V5TFjAS15;;u9sbw)94*=jZ^bK*e`Rwse*btaLMbCh9JR2p`A0B^QEd1Z zahu21hc-VK1XNWkz*t zZ$L!pz?bEl*En(L^a+xcnRFWxzwz}G&~h0dBOXfYT{up3Jwc?x$BQ?vIlb&XPJ8Ww z=Yu%?=__k5llm8|9DCyR=huI~+{Wt$zY?^yMb#vq`ErA6oOG`|4PzbG%9@_Pd}j;OXPUf{}XgL!&c5QXT22dD4P6~V;%*pHlAGO}qthB5?8 zbf?(qOUUiBgnZXaV8Nr1wtrY=W8Jys#$e1YR7P3PTJ#p3?fz63<6rhj)~KhilIr8E zHbIZ>Td1QluZH`FOg%XeVpbR3m%q+3z_8O-h8=QktK51xAvCEpDDz=A-_r){{O)Ed zLGSZ*?{AMk?UAqGaO0VYAMFrWFwt3v$uTv^Iwo{K;MlT37PA$F`JHgap7ov5yBR!a zKibmRd1%9;ZG1hfhhQ3>?aDYsN}M0@^aEYpZht6fdU$&q81g2>DwFJVbm&^#x%=CF z^QJJ7whWDkj@ScCPTAl2d1m-$TL)_6l-!Nh4YXhj!J`xRTNIf>x4O6iN<2AbQ<*GC zloiU&gb46S`HZ!e8bX95A^p;Q>*YeyU@@!G8^BfW$h+=#^{&HlJH+7iZfj&?LW+^F z9g<2CO(C;T^0Va*n1w0UT_bL8^76`UArG*eFsPyhSw;WeGd;+RKRBCSy0LZ74%1wG z*qCSmJ+Iv9YZ@J<;fGkvxNTwuW!9fWu_;?3Gxz?Al6jWA${i zoxC>g&gN|j-noy|=GW(OpxNXDwKzm7V#MB4uB!5ALs=k6hiDFaZA1D|rNt6DNt1$8 zNh^WozfbCf9Oa_@p`I~Pr!9#wY*i*9io}2mBk&Ta;`}o(vpS$}-XvLg^T!}mi&iXNrwM}9&A(7V<8Z!d8e-PEI;knpGjp>G`G)(=8WUYCgK zYFXPeXJf)dL(h2Tyh_kfG#bm6ykuh`%^+Wynsq2Dz%gQx7_?4n1}d`A3L8|(0-yAiwt!s312AS9`o=PzDMxQ+Opiw*^ z!rfVE2?EzrSJR98 zw;b5N@F)~IJ64xF(2gN=y|=b-Bs%(}7yc}{LQ;rkCIIRonLi&K{3QeaEcwpiwKYs^ z1J{(s^ND!tg*vKji&>s&VN$X9@$4gvvaB=wLqT3hhy?`O zM5CumO4aMBy}z{%$2%@KI1u%2tm)`kSX0}8Y#bYvXLfw9wV$6DLBnUDC^}V<47r*; z=$=A~{hA@Y^i{ zaYqocLzPG5~ThdQloLqjB#h!FZ?4m!rlq_2Guy7;Vw@;*NTYc9bY?a<| z*+3i{RYZZAvb7$xo<%&a>m6Uc^`f=4U+VUkJC2q69`Bu=X7KaOofJPoNL1kGt*S3c z^K|Vf!Um75(zP#))t}vZqX5Sg35G2<1ks-YXp*M@=C^^kfh}l>6tr2}HzmFk%3Oey zdPdVb{|nEU)AQ))-y2mAr3YO;QNFEF!OC=j=%Cif@So_aD&$zyJad74vxLvHaRGxqw ztF^1T&@kM!cPVIfKBy61)Yz|Z49bG?hK6Oau@9@_p(5ntInt^WFxB>Yq-Pya!o9k!3ygf%t@3si zMWAe6**gNr)HpN;7lLxsX%KEMx2j-^l5S0VbngzYu54_4jBZstOgA`p`Vy5a|FpE@ zrBna^Q@`#t8LB;x&br0uhlVa_kE_sWPl$)OBtpV9y&+DwicvTIy-4 zbvw@iA#Q6{?Pl?6^P*E$-UG$vrtbwn`=$W$S*cEiX0c0lRan?~jgVsqdsA@(Zyboe zBSQ7`SXRw%>#++S$6b5&wl!tt++Tmyf9`&l_zTyiq_}XA>JtTW?USG#_oBWn^~)51K+<E!d`E|y9 zS1oOA9kmD{^%i=%JAa5+MSIhL%w-DBtWGamlLX>{^SurDyri9 zzsIVOJ#}zUYkq!+p_xruwjh96T}_;THI|9VK$3CYFg-dE5rpea@%f+RiO>d~KnUaN zoa<^))O44hA1Cc6^D%Exud7!s)PXbZe~U7(a}o<)YcGWf$1@vYoBo9(9CN;@YaEQ zC^Ih~{KHpl2IZCe@r21trL({#8-CtJ+*8|HBIx4N1SWOn#!9n@^&RWr0}? z5S`ck@Y|$2G}x8X9s~0}YWuAG-}GL%qj`sqHUb~F3$y@S5$C%Kv@>IcZ~5QIcO_zU zaugL+H`UW~G=uYgwfN<+B%7{p*Qrg{0G`S>Xn(37_|xIopV4zbwmS*~pk6hoSTh{v z>UkZ|zBH6!$_z||_8U3r*G)~6exrl<)ys;$|k;A{wPJ~Vi;G2sZpEdT!1 z^xcjfx)+xbWzzVxqyj-6k3iEWbGhWFOxf-UmKW^%1CbqJOUSC;up`>u=zm-Yt)~g8<*rY z(UvX?@ZH>`Bj`2n5teUKe>Q#aV?h!E&R=;u(R_JlkXhj7HZ56^^YDbK(sGuiVO;=M zQcg}zzEh0blH0wnAtU33N*fi$(aV&Js}Is%H2G~*EPp>0R>AU2C3Ls}CBwf9$mdQ_ z0~Ls1&Q7#4El}sG349M;*sj`OP>5Ja@3zF686FjZB#|#J{1c9Aq^*tzr1Dj)1xc`9 z9#(L*naWu#kj%EyOIpcjP;m@lsd#CckeiclwIAyq1(g7G))kG>j9qg~oBM)(G{4I$ z1nRd1P&>K+0S8SdtA~cqgW4?nIf0&^Cg1<`ONLBL$kdku>f?N~SFa?yufL)msz}Er z1dngP$$!{SZCbpJr9O^slyabq_SF5_bc2qQvtXXQk2J+KWQ|uFLZ43=%URn!>nzpg zWI^vVUJKY|%2j-rk*)?)Lr(3Hm6CF2R$aSazg?YR=S~dZO0d_vofGz=NL#KsW#n~(OgTL3?Oxw zFw;5cB-nD|`s!02+lSA$*x0#9JQ)1#ipmv+CFdi)A-s=HHufcota7~Yr>mnDR~8F@ zUCyYZ_FH4c)n(|2E&fN)Yi(@d}6(t5!2`vhQa;sNniVu}8foPn{9w}d^n zO8_TxAC2(Cc%aFY%jmvQ^&i0t@NFGTmzel4`|HP>!zb3vJY~nOrG^U~az%4{Q<*V4 zkMLfsR`tCN&DSiNzj?TuM?LaAs>307nZaTA5tllqtk+UJ zYvqN!86pT1+q>HT)eM3?s(I|k5k-n~i6i$_n}h&gggL9U^f%CT!I|bU(-$n@=~VZZe+J0Ih4Exixbb zhtb7P%gjTRdr~e#wGpc?`?#_*wTj(*n2j{(tvfN-*;sov__c`)DBTT<&%qJ;9&LPw zr)=KBfaUzohB$^$HWhoD05puXq4a30@&O06ctrtpD^RFHI#|a zk;Ok8%L(yc<6!VpBdhPv&r6+l?YjdzwpoH~0S1+UQsmGU7A<&wOxE!M!=f|JpR;pR zmmi3$$1pLuDj+6Kd@lbG9i8!mm^J3Bwitw=^|iIcxYpQ`0illrLHGlQGbSqrS|cRH z)s^R82wWWxzAPyz?Xj`ng1P{&eDHd2_lGUoID$vDS@3Lgro!gt{yX0-7tjf(IpafG#Re_xZ$m%^~0uQY`+-D?0oX1K<(UNR~t2VDWK zEI`ZW$oRM)$i)`r1o~mE%UwFOQv|n+aqV|=JmL|Kuso0^9UoQ|p51x4Naye24oli_ zVn}i2REne4D{P&i;Hzz=xkhn*69*ojEAJ&2i-C8IqqS1Tep1WLAD9=bMb+;a-B-P0 zYPxxbKfzOaFNE`Ne#sv{MsEijyOJArGNgaQ2+UnJX}9bT==*51G%0qBKfrj_Z7@k^3uIUD)$npTN*7M%)} zaIFjFYht`zB7z3F2N+*|1=8d|+E@-lfya%ouDTwV?3+4mkSGW}dzSRmnd1`Sy1AkN zpF4IoNoR`#fDAN;#F6Wun!OyU6uj0}H`rVFo<7&wUo4YPy&;Y({` zCjEff$>KNuD9?CcX?g7h>cE3m&1(PwoGR7CA}E-LaK4f~Z{vtJcVG@PRnDrevMo51 z0W$l<%G6(*J}T;!u~ym3MQ{373q3C@`l2qKr&~{2H_!x1UD)8*DCteE_vYq6jcG15F6^?wYQUIe?L3HCiVgPUdtvc9I11*{*9O*%W%V470YCnTWfJ^Ic&F|qXiCl0*((69*Uv5 zA^dd(`PciBi(@jfb#?jA!om#iCqGR{d-r2(*XnGP)_9lCo7T+q5zL;yJ>O*s?ZoCR z0B=AVRCe1RR+8j{_HAodDlrU;H8ma@_h@7c3w%$g-0oIgKy8x5s>OumGYi{qM_ zr&{!`o8c2t+a?6Eo>%{bElCf^!#Lv&iGG#eghyWTyGF{ z!>qsUB5;(Mfujt^|KZ!A(lyvPi$wqB0@cxT=u8O~Lb-PMqprc09w@XDsmZ7x8ThmX zXmJM`fUJ=%kgFwj@TS?AmXn+m~IRpN57+o|8)AMTz&O4B})#2Utfw>PUq~$}%hYLn7siZh7sNB99G32nKZDxOH zytTKhjhC+qk;hg{Q&qt#&19x&ZJ}$Tz*G zLPewgGUNzTn4RikMhR=F2H6$ZbM@F11spImW#Z0VE}UI2Ar|H6Zs}MtJ8|NK2A|u+ z!oo>V4zaOs&x(9_eXLj4Z^+$xUJJw-=)rtz1B$LVfGwYGPpkxUPf4*0cz5Ii^TiTf zhz1NmFH6Lk6}#S&lWtg(QuI4z_43l9_r}7nqv&;QV?z~ig=dx5@WmmxM;0Z(sN_7C zvxQ3X*|9P=H;YH}6W7CTGc?PVza`86`dp}~+co{1JC-fx$`x9| zH2EensDfvaHp3T%6g3%yR7Cmt`PkQpN&1n_D`fg+&MUIIVV|uB-5v?$^qv@8i(B~? zOH~F;5twlX-=KrrtERSHKAmyDdnlJGv{4JYT@?>im62=sXv_q<3Tf}&3AMmea;gn%=@0{yRim-3Aq0c1br)H~ zfyz?-dnYbG7o2@yYN(D5W&jZ%rxkZX?GUVOQ-Rj^sm;gAwNZiWTk){dUEI zEzqo_%cHCLeyeGMD{72EOn*ee1C-82oP{AO*69rBAuJ{*JB?m&&r_{>eI{ulD&mq? zDS9Djmw=1JUSE6;mq&t@VnFXvz zR<*ONr8b|!QqU@Az=$@t`<-IOWkg5sP?A+bgDpu{7$lZE4|7sRH030MDFH_3Y-uS= zn$l#1fRH3~P)Pio#scxsFb(l`-1H?y95xxB`*q$c+P5bW(g_3X`63jU;^LeoS+u^{ z0?=s-K&PIb5mQH*WT;wkW73Q}p z`fi*uB5})7rNU&JfF%(VD?JUx?G4|Y{pen)5f|E-|5ew82Ycc516k&#xXX85up~-E z`e*K!KpQtulyd>AQ6vPZ1;kc~QMEX;Zu5&M;2XbUw}_+I3i9>6ZnRpSrpn znOvaTfdSC&#H<|tcpny8{QwT83+~^`rLG7Gm7QXt>9ZNLmdu6AL2*-f~e-aXp4g zd=&K|AFcy{&+m|zyHuL{EtP7A`A}3uU#*SGT7c5+&EP0)^j&3AI>o}!gR0Pu z5u261HyFa614>mmR}-4lPV3+|atD9>0j~W3HmZ!9B$xh#p(`(^#B&}>L2p*3F?2p8 z0<*EcKJB3wX~U<1_)N9FNJ+^Q6P@)911=-H@7_#rT;@bD*c59|fNG0cAFeGN&bd=f zGTb114=A!}0C#BhLM=pS=bi#U{EOrnvFT|V^k=lsOwX|6I=J=aM2)Va+1qP zLwq?QKE}~etK5MHVA|$`!UpxUpL4m?3%)H;tXzaf65}ByP4pmbWjF`*)3qdjeD!Zr zVCI9BVHs&m8ZSEQdKG$gj7}F`fp`?#`Vbv`DUD7PX!^XI7u?9~uzkEEC*gTy-9O`g zKjaUm+NgyG#j@2?=w=-k=R6Z(UUuEA=a3klxvRIQ=0iC?dpnPV6y&8~y`+sK*1TQ| zu$&AQt*mjsVVdLb7AjDeuYx|S*bW6x{1N>dcorRjAfiHDXu>WLMP={G<{&hf~@1$_e_C2;zGd=Rqje}Q7gl8zmpy#?f!RE-X=9I zq_;Z^LMCQb{obkf5;Azf({M%=JEUE4etQueX6jAAU?^9Out}erSABhfC0La2#7r&= z>)V6Sg#*xGb2>W4cu-LpZO`0ZFens%i58WfOF!JBdy7CghEInsX{M6)Idj7s| zS=77W6GSG(T2IVN3te5i0QF5yWgWJY!CL87cugaYnkRpr^vze+lSRE#<8YAjp?}Z4 zhBREi@#s!)b3vdjq@D@mrcOV#)^ruvs2)7bMp+`s5Dr)xp09VK6GT>BVFCaPWA;=v zw%uU_wL1W_$na~HrKEytM~HHCI1M&cRc z3I2JFrMW@@mkkqwZSTCSqvN4RW07vs`tcm}PJ#9h54LpD$PJe$Zn6dkXA#zP^dCyw zhIVQ=EZF`9!*9p9$_LA*hr4sAMcG@zFL9-%Sp4dgp9hhXxKOM)R#sWtsGPOHw)8%vDMPKMshK8AypXQ+uP%+fYU@3~eaDpyn z7U4ou9t*x8M4k<46O1Eq9%y_{6M8Yl;jgqQ&IJL2BgVPbhbEg1KML zoeVq&qMjo2L=?B94Wh=ao`Afy@U)Iu^a2av}Ds zE6%2iQ-jAr$)>a5ZpT}w=N>CIcD-_>O-;4@0Ja7BMsvK~k7s>CSQ28eFT{^5M{yey z%GU~=pqK3$B^7b)-o1O>WHy6sHvZw{K(~G&@Jn#yE$I(m(FdsA$?4Q_2gDS(-G*EAZjy}E8`u@id0CWUo?9F zjy5@t@g&(3GNcuGgJbSkfq{V~ALF9VpaB4K|~un&pmv zZsewIw4|z>O#IsQau0$JP6x=owKZ``w=y zK}4nQX;IP_BGOQ|L@*zs*u0Qo-RyAvFE^0ee`MEf9{6(9+{Ro@d z)vLfbbqwK-Jr_kVh ze_@yP&sWlVdTUs_U=Bjshf7Z4tYm<~zfS*nU>I1(*~gkaz3Nm3f%g4Jg9`N zWXt`%*B17*D_o)Zj~5DXq0w+u81NVDMs*FpLC4|uv#t*%)54q_LPE}w^Kt?Qsn#p{ zJbZv)J94SZ1g9u*Zq8mC%0y6|HJpQ%E^8W0#!a1jrl#+2M-d4fl96E^^V3zE@nM#P zRx?K8qZ)RAxL^v35h_<+6ud27u@)L_X}E9} zrAzbY?w+r(AtltqLBIl+h}pf*WUjHW>oLfcyi-~rAex@Al(U+(!`3dJT93@0cn}k zFXTF#sx$B+YxhPl=fF)r*7N%IU9V!xZET9&IC&J_8jF*)e2cZ7ZNnZgDp9Pw$J$+? zI5T>-vINVA1)Yx4g_`(4VR1SV@$xNEO;5I)#;S{L=*Q=ab|rA1_t}@$>OVtJ~*%Fvup%7pZ&%ZR~7w8T*k- zKM%*i?{))7b>NC#gB9>W*^mIKUqc&IQ1PJMSiBPPQ}-~gAk`dR-Rz0F81)Kh6=?nO zHB@bRAy!iZJ@XUTem~J>+ds|h?;tK%WY=LR>{!4Qh3=u41ecJIklh`+%E{jC&XAR- z(+E%(UkYfdu14r|N`-@)PEB&47u4x7S_n%c(&E4gsqDb?9UTCr5~#E<%R$?v{VObr zs>JVJ)=a`{`XI}@tgF{7$eh-kQ(toZnlrknj*!S0t@FD-*T~dd3b5XrPC-(q|AXJn@mEE z-*gr#C$K&PQzR9cv4#7xhOG2B=ON+?Ds~_#f!gqWy7k|JA@`7zjVn=1c-ULw<9Wxr z9V$~vI#TtQP-0!_11HNlYETjP@qg`&_kzq!J`40#*T{J}p1r+>`Jgh>_4SClx{y$P zh9iYFefV2js8y68I8plsod57zQ$5`0zla0_`qH2m#(xs!Z6nF0j9edd%iO39#gk{- zN2Z5U>RVpZxA^X!^#a;#{Ur7sPoj5xH*gyFJ61lx&w>7}f}Ub`tdLApIWi&&U_>a~ zDOJ;?KN+f*k+IWjDH{sCFU1-u?T7G=1w^K}Ls`V+MzWqLdzmYiup=M?#koh;9I~h~{k~CDYu(UI38TIjt-{vI6T?+=HuwjiDM?RehWxPZX zKi7xFUYQuRyM~5YpR~m4t$+_!Q0BxJt!ve0Nbl z0-bFnbgTBO^E219t_VRQ3Ag&SRvy56s9ENd!=3?zQSK-ii*uo36`G)$|B>QM1YG7`Q?4Y9+Wzd$87@515QJGG7ChG0dI*2O<6u zD=P+1_ zR%BRp)k;|?x$nE^ObZWFlevL3!MB*$o910De^aL{61Cdf-xOF~YUH$EA)+ONC7{fN zH#Q^wg!}NrEUZcpT*g*r5Zx7-68SLt^OoiWshQe+W%9{z)2)Wxg70Op_B%i_W~G9R z2Rkv?r#oMfxYg!6{_*41i#$O4Pa{KeRIbCo|)9mH`#5EN>OhnG)WS*w@J5pplL>>$JL&uTs@vpJ&xL2UE5f9p; z6>q-f<;npG^&XQ!Unn3pi98yc6?x61dqZp1cGF8+7}oy{c1qhHE~=h!>ojg?3IFuv zyCCM}lDjgUzzi*T1C{TtJWcqRlzhp~kG|Bh7i#j!$f{udG+31qZ)-;60XqKah~R zCR`I)77RP|yf<9it;m7f?*$KHYn{-sXP{OaDT%c#9T$;h(U!E~*wlus3pGw$o5hM&2s2_s@=4r#{B6vUR52!0`1F~9NWc$x$*99Bq5GMmGt-TL;ltm z*Xj=w7%nMIsaKkWwiaH1+N`GQV*9~h-9qm48CSg3Hj8RWSqY&e(se=81)=50Q_8Vg z!TLT`%Ir##zH+^lCWw>70=L5Qtnjt`a51b42u_5UYQHY;^mE+SW#U$+sOrLPn500B zP}TrN4yJvLVT(WcG9KNNu1!j4?d)uPxcq)1GMhOt<@J7#KjW+7PN3|hoW|?%3a38R}6yt zKTN{Hu+9CKrGHcm?Qbv=t?M}GKZs}hd^FQLc+;zIX|co;e1LxIN#hrX92I~yscGs_ ztSAYlDh}0->kfK8-_EV$P+6`87S`XFwe6q6z zKV3Y33L@zhp!q=iEjEyX)DRRk4a!n+v?HKh+kbtni4o>noA2$k~Y#52cRt<{R% zxQ7{Rdfxc3Yg~VLU26`4s8l=fdi4U&t#CO~cv{?@VDqu|ag=U@BsV!WJ~3dIkuCUj zM8Js-3R9k%nhL|7REra0eBDm+Py|%?4n^ePX@pq4O{%_)`@o;Oi!mE*&OgM_dNd(t z;Qo#Ycj-2$<0`V+Y6gwUJy4q*6-=-_p;P9JvOCOA)Hd{iqb zjMbzqWBFe8N=*mieRPWWC~Qw?7T?TysFUBAB+09NE7rC@5Nq^b_rr2p@(cRm;^@K( z=t&?+rg0EQ$sec+J!{)m2_x3+K4?n@a6o_pqm=6(_(O4SkoeBg1LRicE|iw0c)bCu zZ--!*{*T&(xUI<1mnqQf-7cclU<+L{QoVa= zzNr)-dde}lM-%$jSzqG5nR}N+J0Amyb0pJTIaxp@-CUO@f5}hN0 z?6`kIERFaG&bseKO;;8ga$Wc#0-B;=p~g`yORh8_AV1Nehgw_)?65Lmf zvhoDppi#hJasU#jG>KH#YIj*)5L(sf$X1r%V~e2iNKhe5fp(L=!xZF%pgJTicMlK$ zG?e}m#>JFzF|^QuX3Z3g5D!eV`fdg(Rt_{K+O7=ehS;X-D=}pD79(#h^_`dHMz}=B zga;s7ev7cg>hH^6xSBr+4G$rqDkb1oX zQ-D%@QeipVRs^ixjo?V-%mLHSy9}Z3S$G)H`DW@8a>-E+7Cqi=9324}O$$<)wzYeJ zJ6PI*k!47%dH3SlY9WPdVD5xxz=C9&nowEB2xRd_8qyD&J*1SM?K|4Y4%??^EQPyP zfxq{Jli*^YnFBvm+><&I?^Q8c28t>!HLCk&&(?qUbr)sRglFtV&k&Tt(bSDy-V-5t zjH@#SzD?GH^uSSAIK`qi1Y=jKBi@#T`6UDH2*8B*S)VT4eo8R-^)7CJpva~wuOt<| zK66Y+=+Msxy#>z99KPcm!_hGzknXQ7>~lbT*;;RiYm# zmgUa2N76HtV^2#hs2a(oJF{%}P2~qn2I?7RKn#rEuG_gP-njp{HS|(`5hi~H8q35a z{7Z>Hrai!wiNo4*>jdCTHPPxu<6FJ8vzl5QH3${WwUbdew4glEZp~~8#anQPhb|-> z{R__&)}>Cb`ylq5;&@V`uV6o5wRX7+G9z{cr~G^CSCawgn(OTISFf0E5T5sAo0hu; za|UC6yN(T!*5c0&G=sG6D~<2kno< zZtY)&jt?XP!8|X}yr5l9l}w0dxCOrQIjO!{&;Et5fWN!zq$Xq8>`6t}mq95i$)B(AM_bwr# z?RM{VreLOcU{|-u>z|L`oDBtEMg-Z=D^(bHGDiJZCQCT9+A62TRyZUXrdqVA~SWFy-$yH6>u4= z=>hJ*gLquwhfWbVy7}6Bide!b_`xY*<0Hi~!g0N{Gv&ppW?l8F4AT$sQ%j)B^YJ5R zxCWQ^`8yk~Yp$y?RYN3h;nLnzP1u+;-h~D6ZMN7?uyaKtt-YqW+Rrp>-k&{xzBtGF z2-BUDgq||S3lF?hcnsA}93eePr)u}9Z=W!Jb0U~=5^@{mZNHh}*LV9BmiUaJXe%av z#sW*#Wa<7&uvvznf96#p7w6Da{9)Z&Y0&-cD(H{;3#GosrEGWCb#}o(C!%5K9QY;H z4kC2BX+({4QjIhNO}+TXuioSvjy)&xS}#=;pwYzK14{UFsu)xy6`|-GkS6snqf;{{N^X{rAj9?ZMVA~1%}ts$OgpmOQJN5-Lj`DM4niy6EVf7v=2d#CW;_rCY1iJ^n$pgxmtS|M|Usw zT@$)feRT4BIy8TmGs%XU0UJP*}if|iZT$JDJe;=rxVp0DZiohvz&zM(gk+C z62)sYn17%XfiCq}-M?qhY^>{RVLX_oWC(*{@*(jJHR#CU`tY!IsE&Ccd$!BD$6Q%w z9AfTN|WSTLun&>>npj$nCC35FBPYpKR7XU-`n02b(Bf%AK zsjrTrH`IQCOwdTOrfI#>bb7APILO3nb$#P5<-8pH0hP+@-_+=D=T;qdEdV8@yTI8I ziPb?(#^R%zt&q^t0GNsA8WPzbdV3Xi-GIKEQ!vtFax9zUf~Y9UQi9p`vo5Wkk4rLd z-Y)dr+Y=}F;xJhk;$kB_sR|~?eaW-b}+ zOT7eELzexnpXio-THCPwVx0$6=l;PW3BVu^$Y8gx3Fow5n6j|={3P-^o@LYRV(T%X z@y^dlBcJ+FX(m_(RqCUERLgI(41kCrtr;X^YX}XwLNH$PbZfB*a|NRKKZBhQp{j)a zidCh+=9MB|%k-)#G)l)T@fA_ABjzNH^L7_i?@DKghCvo0z@avj0PZETWUBsP4V?;a z+4$I$c8A<0Y8GpQ(Vk+gS?5QE@5upe++;_nTs*~lL27jUrq9JQjGubk0<3Z~vUuZ> zib)U;2fMViMqK83-!=}E|6#G;+bVxo`oTq2tkKrl_M)D}gE@yTNCy9{WuGr1Z;5By z83CAJ3}AxfZMSR{f+;0zTKVL_--m#Zt%!76bx)li-S(?*bs`8EyGPuE?*pt>SDqg- zoJrLg&&+omj!oCEevd>5P;?Qf89@130^H6#>*;2kJWOOwY6*~{bJlD8j^{@x$RWdw zHO+~4sxB#+OR${mn($>&7Xpw&t+%+{#u)lD`RB%6L$l&f*(vCjP*pC$)5{Hhx@>c) z9t*l)?FrQ4k1SLkSa-u$GgsX4x^(bukAd@#p^Ml~&U9LiJ8K%mE_l%Y4% ztS0uddc(>Zi)7+#*hTMOc@7T>G|n(5JKw;5u?5&^*5VDMfg_(dsG6(|^pp3f)_dUZ z5P*JeAImDCB%NZnSRoAp?ep-yUT)^9+gt#_yO~%$0wnMq>dMa@F?@p7dN7dL^udy4 zQ!@8(oG&M{1BhFAGUeX6e~NZ5D~#PyF?P(Pz!f84UsD@Pbw^x(1o~<>#Q(VGI!#Du z*s_P>+q7}tH@}IA*wOQ%K8s`{}a z5kup1nHz(rwiv8R`Zc?P#H;gm9=VF_ip_V2_dUxXaPmY$w*3p%u55T}00O{MH#roY zt$Yt}D^@bxwe67=-FpY5!O+OUd~7$$XorYb52*)z`Fw-MtBQ>3A#jWqoq6)h&AO(9 zZzO_65Q^}hI-%{>6yrrS(2;A8H7r2X4e(122g4%f)t+SwbKz9qRP@FKmbjg=W^o^` zK&~2S00dCc26uH>b9UQXpm;SHsNRMER2BkgMFQZ2lDM7)GA+7bT2yY|zMq{B!-No$ zUd=a0g(n87S3~WW_-*QlkimV-Ysi`T;B!gyMu5#kG1rIQ*5aQ!tW_xo_Q5a!08sw9 zD{gxV`Z3UKhX!}BDxUU>O4#J8-6kde?}>d6K_tALy(S8W3h3I=N|nW`y<*iPU=o_Y z6tS15XFhdtS@s*SDb)x_7IoL;xqp!CG}c$UPY_@VP>4$}(y$$3fv@N(2-*kO0V;@` z0m2P$q*^FMpP2X4SdZDhrvL2AMqO&oh|phze}U0TA$lW1DF+tiPQJ%>p*a5j8+UId zoAjX}Up~-O9i=MOkl>0E8UZF{#rxTA5T`qUMfKvFy@S1WF?0S09W+ z@JLYh|KM~J@6a*rIi8d=a#GurDUgM|u?z4Y3T(3*m{=uH*yiV&RvUq2C-NgFjREze z^e$j;bZMA%HlLR=%1HYHi9G&HG}RLBiUK+eRCuU=3KiivQMJ%m?I##p%f6enD{r> z^j(6i%!~Veg<*1H&nx5@e_oy~oC29p)=JuA+L2(ju7r8uBnqNjyg49m7huu`IrCaJ zLsCH{QDbAVO5O^7llfT7l40InOke&0A&x#fD^co|uKJ37T*P^bhpye1}rbUSK|Sfz8_P;)^(|ghcQ4dlWY3f+hR2uH!6@_m;*mUnl2zo6&F{JZ*=O+17^UrugJ9|Y_bIbOqRK~j z=obW5EJl{<66)nr3+9tGOV#?IzL^DZQ%GuR0oR^qbd~QOWrpA1?om51OT^k8A9SZa zEzbxv#H{Qunvx60yb^=5#;bhU3J)gM;zSmKPdAhe5{QSU=TX~T zorQem=2GU{FjV!322#KCW089DE6=Z%FgPbsr56#fRP<1}s9?Ry{l) z|1{OFM-!d)88_ zjNs<#*;EuogD>Mv!tleG_>AbwnuOcD;L?c!_Pc^pt8HUl>Y%Y>$9^lu52;r*6}P<> ztT}LyjGI+9PO)x^!w5IQ|ETtD%wd>hup+RiV6y~6JtB?!X|lZ?`*Xo!t+>7+B7oT( zSP~WJrE%3sZc`YZPzvrJj1XRh5kWi+~^H5}1#th3cd(TVze(vu5)bo44yr15Cf7`ab ztpD}DuJbz2<2;VzTtfp|K3g?$koBCne>F2?ycrC&kPow|=)O^hO;SdXr9V z%1tC_{8xavqoq_%^8ci`0;Oe23K)81bbJ_~Cj`2cE;E1mP5sws28i|fQ!Bva=<~tk zc1;tcxnWXi$DCdy1$nN9P9@BfgO@HddT*%p3Am_$#aHg?Yo1?54QOR@H(HH`Ma@9Q zy9HZ+x+b3R9fbjx=frf{op-D%=`-$seZMuT`Y3Z;uIt{8%fDQ&H8~v;cpnVFV9YSm zz@~PH7JanjlgE<**N43&p_D`eYi-c8 z-G~jt&}quHy>DM17+&h5{a1CubS;(u%`Qv8N&J%iT&TZ)9*?V>vBPlo!!*aypM71E1kWd#}sp>c9}1;f6-K2Xbq)M{8bp`-`wIf=&8)e931R zq8_^I%;L;IsVJ}0Yzip*Q;Vhxm!|DXnGub_tT&$zNQcFBbCIN8YX#s+i4OH7kieVl z<*uq$(Wu!pIQ5r$BhmaI5i=^Ey>+nYH=1sqlkl-CBTTY6!#E5Ju5`S?? zHtuny0LZ7+}#L7);>yeZa6_g-&b7O)Yb)ya97s8~* zzI$RVU>AG0!b4fx1&Tu-;P0e1L~1FQgNfh0nwa6Fo1!h;eNkySF` z3+TBLh8CL_Szf4)aGmp&De|jpA4tj z5RF>?lphx-cYTDk$<;8jz`A+WdtvjN*)t1?9wyhDT) z=8zzUL;C~7R{mA+Dhni=f%yV-+;{Tz9~Or@E@IO2MJ#&k21JC^*00wfCzG`!%-prd zU+%~fQXnLk1G;ZIpN!Qef&VkoO)jktY-(vf1kzkaPFX)RV&<93%f>zBzaQ6Z5a^Ri z10*0Pbps9Y%CZ?l^401ic6U`(u1a(&=BiR zZU-HGIqkJUMm;bD4tb=JJMSG3)X=%QHYyPz7%vQnI%2#{<_$R4Gu$&vb}snar2VIF zwAHB0PA*F?u-3b~J+NoZd`@jS^iy5Q=48w1mD_@;`jp(YeH4qCksoUmTn8ZQzM-Y1 z6$Rrkip;MP9t4HPHGjLi2;1)i#Gv*1tR(FSz%YC_vhT?T?U5&uiEXaUM~Q^&)70*E z>}pg7A;*Vj`%Q11hweG|u$t6|UwRUgQz?D1E!z@i2N@zsYp!ug@^_=QE`kN?3rSN6x-as)mmgxC}fh*pcy@4Btf17!( zSN2h{)U!{l8(N_*WrB-gg8zuNyvW1w;EA#;sz%TGhV zVMJ12=H9>5K8b#W)IOD`w3-F?0Ya#T)0>j9_7n|oz28*D0OU{ke-7roMuv-!7iYXq z>N5T4_eOc2i@d?gx^-XS($!3X(Y=~QD*CH^f5N(Olh5Q9?5dM5p?^7@k>@b}((!^0 zGywX&iq1ut}M7BX&ji{F@~pGo`iojHrSz_8^hR z1xmxwTcw5X7=N8hE1o5La@w_E;G~9f4FBu{wb%T#;vHsLt?k^~62NPd3|JoaX0R+lf3W-wZMDmdq@`9hM1Y<{FZN!bz3VRAr_oV3q9 z`LEn9kMB9%{oSmj1BGSAAg;7rA$qwL*?dY!^7jw;9xkg=>aUI{kovuSf-n<+yMM}~r8;Kbnf_Kb`&}<9T_v)lpF0FW1{4f|%0Fm})R2H(ku^Oss`}k`=Fo-Rpr)sUV z3P}A{3Iin>a+n@%+p9JG83WEuO)NO>#j37F+8XubPZqrl6tc3iCbkzebW&B`rrf)i z6tSaHU2mm=bz@Hu7@8+*775KOLD?V0JmHtngzivai|}+&~oS zc(6GA#;vT1i`mM6x^DRXr{s$%@}WY*51tjX!=$6=+l4m9(W|?s0TA?UFyN9c;cMbq zUcAKgP0pnTOu5!qh`u{IP#$2TT;(ya%b2yPMH`g`S2ZM=AfgUq` zJ@+F=kJ-LYst^0mmy}GTI<$7@b{&Au{`u*Y)Q&E|sWT238XFrYWnE$Qi%TS3~u2|Fm2JtnR6VM3+_pa zQ+Y|0UE_J}hj2X<8QuXn(sWqJwqQ9TG{2=G+2c`u^}A$XkBErcvFQwGv_*h0I_?xd zvCv}FaE`mt{c&+jnbyVKreAFnlarHG;&OXsQdL~B=Q7)7AY@{4-lXn3c;TU0TkVd` zei-(8PR>Ip|MBBrAL&M2GEKj!a0>yYw92)tzI@HxYYyad@<)3zLkZzlJ^q;#)Gbcq ze|zBnB6doOBeLgEypa;O>k&U9F7H|ob7!rJgvK9MwX34P2NbhmIG~nXe34-Tnf%_) zS|PnODaxdl5inx;_2mv%S3TmrbJba7;>qBpb&**Y^q%f{j-T!;8hx+}s9?WL3ef+D zD2`^W7TFji;EPwr{Lj%C08vLu>;2zR^8lWCfMTrSOvCw|Fo&^7g#a?0_L|z0dQhn3 zcv4Tc9ryjEQ4-1pzCD8{45#_az)Vvo4ZoPEtn>A~d(Pa0Pq))`E~X5^Xaih|7?St? z`g^-NqG>HpZZvveDKaS*RZ{O9Viq!s&$GxS1HZi&etv%HamaOC-Qjon2R!;R@Fjxi zq9SRDRE|(WeN;cylU$Tck@vAqs3#2^SDH#)Ho0X*f1UAdJp@WTou9j@w6dkc3NgaASeB1;uDh3;Xi|VV4SRtnTILLaFN>;{` ztia|%g;jW=GT&;*Qs(x|A^xOGgzxSNn4_tZ%~`2XW` zqtNHRklmKePMdEY63DAvqOa0W{e%T;gk)oaMZ>AO5oSPKk_RtuWaB(*9DY6+T6o@2& zBC86}o5M)k+~$h1&T_bes}EaWqd5qMEx@uFgY?g4?E5C37Wr{^0yu2a)^jcj%E^$j zugEAZCMG7N1)=+~(+I-k_EKe)fI8NyO<7f$)n!tT)eDiV!9q|gZ1n&9l0a0qy*F2^ zNvJCV&|svu#wG#}_qx7wZt|NQ>rDGPoMYx}azx`8NsUn^h0I$9Dj- zKZH@$<7#$OJ$XJ0r|SpS;u4t&8xIKza088;#!EAe$r-LfXyaLgPf$au+;$u8FyJah)J>KmZK3pw!-qagY&xR+gg?}BK6eTNM#!)P%$lu2 z?mog2!?tYH(fn-MP}wG{YT~iB?T$za{>$AixegnW$jshEMc(YR+8kjc{bdp+h=Z?t z$nbgCc{6n-&ID)d&H0^3bn81^x@E7lRUZBG1HFOT-;p1l+Wwx5urHGG@O{aVIQP(I z1Iqyj!>Hrjz5yarJT{^tnd0~4R9myxS@GuvqPs-~RK8|$|C*}z zzaNLVGdpRtxaEKUho64(%@s~H3(ezG|NQDd{m!0vq;C^H2Bi64F4)$i|M!Fbf4)YN zPsEJeU>kwADF-KK5>8!9iv^I{w(8%VYF9_bc=*R+a3sP()lg{G>)p55&6Q~UGs}@V z;5wKisgt|R^&V%sv0vLBQeEDXYr@^0u2!VS-e55N@HaxiAKSJEa=AQn3zJ_LBR>wX zk;*pQq#$Qr=w729vb=t*X)>4`xup*{uU4|)CYuZ{q8ZJ%^Y7n1?6NisaJFi;+7l0( zHFRD3vdI{D_QQqM1c%$>7U#!vm6erN6|};)NK;>*u)ffI*cG$V`6Kcwo*@Ijj~U&% zV7`!P#JqEF=3WOeH8VLHv|_)pJPO=Nmf0lm-e*pYq;g%O2NaQRkP>X(V_hNSnICpq zXj<;M&0WjsNwN&}bC13IU%IWQ(G%^^q{($Z`} z6^e>v1WIP*PXn^b`<(ZK3KvPYV~1c+`rN>E^LcK?M!Yisp-HQDph9!-Q8l%{5mA<` zmX+uQmv9*_PCbfPf-Ey^hgzQf0ceOBF@v$5^Q`qq-8eH66{BH}%B-Wc)N)oMwO5RO z%SZw=%QXcQcIFh-?7zJLQRa(?>%44lkNg}2{~7vn;g|C056AuH7Wokry(FJF8b5sq zaWj&87ZR>FN9;Z#<}txcg3Ya;-24D8Q6jzF-y;jo{NcJd)uXz(s{Kb_69qK6r6R{2 zUT%>5FGV(zH*Z#@U@hY|r#KObfplFeMqQzxUSe}j%&5yMX{CqF{BnsigW9c-=s^7k zf6teUJVrJI4v5fIN-Z2)Tb_?nP1E|#fmG}yE1|mCIh17ge>^k=JhST2?Fr2P$M3i! z0m=V&pL3K=QALFzRLJ}tln$=n#lD|9W3z2$_D|Nk>uinpUH^1s0V$2+TELI8gq!0& z)ES5ZdN+2aHA4!|} zkCz1S8zMTRqbuzK5V`h{2nPHZ5(7@VfzEp0cd;|cv#p`sWc@=q^56CtC6SrWIzaNG zGBCCBpF^N2P9pW;(qdj|SeHy1Y^d1;1t*Rd5*thQ-^(e7AnD|eFBu2Pjt1j*vCcxD ztQ74sTrtt-Ez2GwF4x>8F=(A8+xbjvD=T*nJ_}wSW9Ls$upRX_9T< zLGzSPuPQrL+LRllhR44+G@eN2c`XCq&_Uqf>pvsiDY^&eBQ>c*i~hbI8fD2*4{m88 zP9iLX;w%V`Rhmue|FN`aQ4~cW!*k~k#QtF1zP^OooO}}^LW`>My*oAk=O#3R6%F;h;^Oj^TKg%wz&>?^Wyz@ww~ghhI$AdyGy}-O_2-}Bk8ZXX1Q*b<9GV5*m0k!@D zI7I?JlfmtAT zOt4-6KhaNj#@0y#pNlv1HWO1DZ^MT0K1mP_rH=it(uR>0os7*BibKEec@(}i|V(T=(;|0$b0i5u$|*1lJSo=8VULM6!3 z=~0jBIPH#(fM!xnnd|l~L#3@gFui|-AsK=H3o-=R%O-uPP{PWIo%S1yiIr#&V@&=_ zF+ycNj3n0SJYhre67_A`7}cR_A)4~4Yr$z6u8wR}f4Kv^97+9X1lT!kmBb_$C zVI<~bzWQGmO-R+93%vnB=TJuI7nP~kUtaV4EE02l%&-JLOd%l-{3fmOdzEnT~B|MBIqkhKN8UrAasZx50JdG|9gnmM|{ zU{_xL?Yv>ckR3$e7`;3MgJ1HGB2F7>M;R0s*-of9&D-z}U3A-_-_M9@JlhgRZZ?Po zBGZKV2^{F^qWL8gn@7@;=GH8n;UX9j=3TfD>%tqeSrw!G=L$l6;o(H3c-KQut-q`F z7VZyLdlm^**P$1HcUHqux`TdO%Glr6fm6QuLBp=(rQ={z4QSfhfG^QXgbY(k)H zJ2L~u8h$7Da{B9^<%9ygx8`0!ZL*#}*Rc*G+NGbkrrC}JV_d4fIUF=@CB#K8}V?_K<`~1wB zaP`<3%^%-9Jm36kIxMJRDbe)&+s~jJpZ(^qU|=v2E%(qud_Py;6W%`46PlTm;H7Q$ zF(sgDhpSC73k)f(%lpU(l0Sl(-;bXC2=jz8>6+oxI?x)m&BU#f#_z0L&b>3zUPT` z;j@}1#W03gSuMvoZc{wAwkdA4F_yo|84xY$xyr}t!}ma1J$i9SWMp2Mt1{$sRFwHo zSME1&$-)o)bS_I3*KmGaTC?w|d0P*)_7pc6he5-i2PRQxJ3K_xhZ16nWhF4vOuk(J zy5PMXcYb0Gpe(T}m7R3qT9EoRl7E6MLVib_6jc?|67Q^(tFAa-tyPV&VNbI05odQH zZzi?dmCT3L`MJ4K(!rHH>ywca*+0UqKvEZjPL0rK&wEvt(X7v7adxuu=oAU05|mr$ z2&fj3hQ3Zq--mz+`tK}hL04R-4qPb>&ed1s)pRDIr%-Xj5;BJfjQxnrIL;8QZNtIM zog%*Y&I&DQ2S01tsq`S9sCV*c4I0PE{VMkjf)JzD@k+4s!H!qPfO?~PhNHQQl|XqF zhJNZA^sS(Ijq~zWtb2rGN=(7^B#@$cblUHv+_`Oq2sA@ZbUUmahdH&MdGQp+t1LtG ztpeX8bxv*Rp`C~Cmu(AiIjsPf&y~P|=l2e^)#X*Rbm5R2IR9s{EGvubO66t*Iypd z4Ph4yomiq>Du4|mMO*OKxt^n69MWlxXp_%DvT!9Z+Cs;;^0h4NpM-mw!t__RFMXPu z_ucV4vDr|3J_MnZZ0qk^+i!|iVAjcMN7(UNnKr}`H7((Hux&t`NQi-L6SqA|ZEMM} z5@=tl4rrZs7a%p#0k~peZa!L4u1((Q4b%R zTDmq@+m<&4r2kWms$or!7-3$lRu6X;kpuXw1s(5V<>Mc+ zsO>5U4NAf~f#semK6!Q(m=4yb{?KG=xfr$6o<)F4FU70wwO}nSH&C|rp1n`rbDTzj z=}O)>a7AwP^#Oj#H{W$>MfkcCdl(^z+q~qOQ||m+u4dW1PS2FOTz$%u77aPx>>nK6 z>_?I-v{^QmF*Xu!5+k*`pT{l@*#N)Ece>W!IsVNKqF;S1Tc6j-br1W(zrQ>t zb#9rES1sesL=XAn$GR`3+nDlD$S&U%y{%wjIoz3T84T@uVmA_z9CMcedvt-!d@ie_LhS>@pCuw&zNaUEeuwuvMJ5>k3@%deNd5($)Ot zyfqwL(@HY;4YB+$U^xcm^HxPMKfsn^A1~ml_Q089uoAq&Ch+=YD*&vm& zQnEVU_bx8n-K;N?ca1RDM(EGHd3P5q;D9~Vq+mqO1q4z^Zrd5X%DE0DO3j+g1l-Dd z2`(RFYcmCvWhE|MCmG0+?q4P8$|{MgS zQWsy(by=abQzB>P7oL@X&1S?#Mi4)0EE^F=uqMJnBsuep{;Akumb5UykZ_i~8Plxg zI9tgSMu53Qs9}P#r<5B4n$tz>o73@D{FEB>P*xqu3{Nvvc^~NBLeG#{|Ddxwkw!zS z!fJ#1z{>p5^*@BeQeHa~&N}tIb#pJD+tlpJ=jK`<*$9iO_qayie7 zwp#t ze?m4uNV;gSE7``UXr!~2NAt1iho^hnObE&Ng^FRYSX3P~-#8wISppqH6?|irFehL* zRDubW+TR_6Z>Q1?>R)#{KD@qixCHRrsMMH++=s-%#odC_Yb>>SIe6Dnb{W&5y;* zcyTLfZtLT&HFt3QcVRYoFdTca@u!kH~}rp=OF z)o>f4@{UcDtpxPqR$%m2HIcSiI@L#+eL^|pk1rQ4T^xK-_R{UlRUPt+k`EeWUY-y+ zv2EL~9VfV0)H(y~4_w?Mef8W^5#6ItC%1W=J$p7QaDqxN@I6}I#LWy=@?Yn+|vPX@J`=+WlTzZwYiEQV#gg!jGdVS7HiyP zM$K%?2elH_Bq^HFgP7u|xGxaPTcDkyUJ@36cH}RwyKnV&wsiJGl@VSq-xKIf>nA(! z%qY;U$Lnmjpox;NlB?o&k~+}lswZ1TtNWTyPr4fp%1yC5$`f;qQgp)x=A%-24$Q4A z-x9KUQZ#zp1~wM+*f$1?*hZdu_lvk$SvloxCfiI1_B$86&2T>$GsalDbh)yj%I2t) zc@ssSo}jI;zW)JrUzWM1 zyF0y-o^h>-^)t5=`sRRzsw1-NL!-Ub{JAu{9$C(mTf&#gx6K8P(TeYpBd7D4&#t8H z+F4j>n&gJVyJ4;FSUEQ7WrPO7?C#v-M$Gfom(J$->VsTJ9`O{FW*j<>A7mEphQ3kP zm4KRTMIGPE3|E1HYAq$$?>JviKRmcuzO*j%(rYo&sk^V6V-IK8HLrjQ8u6$Az7EU0tH&ZJH>@B zFSITYc>rg@Q{P`Fj&+zJx$79~?xU6N~ zyj4j5;TlV!YoDuOiO)$6S60=`nY2z}%>@MA2J(x*%<5iTlbl|p1xt|7BrSkF9{FX^ zGH-runi?|rY53p+GdP(I8}DRnF>-Ys!hrF59#2Zi?S7O~KO1)L?)$&Y;t4@oSoWSE z@WSSzp45Es>7?4{LeC?~Y{z)xNi7i@0@N(+H|k&3tpLvuuUiVG=!R!DcHf+bU9!-O zUJ5by+*6GSq2bVz-=P71wzBv&KFFOx{S5OU-mY7+xPv8Ip@6x^ZE5<9_@jeL`@ZEU zOzlr8HR!NgHz2+mt1>MPA7b6@0P`CoR(nTlc4M5CKBTvj23%Y`O$VX+R^aQtEEc~{ zDVSzqJE#7IjtSTWjMB{gCUo78L_;|!77e!F`(Yn;(8yJLbESg-SqE2-S(Nqs2k*gt zxwVfh63&jsOKu#D?1W?&sTY>v?nK=T$Oj zyz&?>hS-qxMXNX4+~#)U*Tbz|E&JzBENZ?cq%hhJ2l(`#BXZ%N%sqeLP(F+u_s_F( zwSTuRBe8PhGRWQTU#yVIRk@{N2=DZII#ZUN25!$3x-SEdtV7!2TLNAi?Pr?0%u;6- zm+g84`^6L9s#(7oDAu|Sx3@jv(edwg5N@NPMvi^ezAFE`GrdhkBL<#K%n7VC#_@@4 zGdYw~da$^kbJgoT29r;*g>8jtn=3klAD+=`Y_!ISEBmU*y$8=}Enn`m4bN-)&~A$4 zCTrs7vFtJkHJ|hAd96}h&{V`oqF24+TR%%bKiyVDLyFY0A0|d8<*6EKlMKjkvyqKZ zVEZG#*-R6?+pUP;&QPBB^fG&iOQV!sS?^Oc${G+zL@NLCZ;@pwl3+;wPv z94NI$rt@)WaE-HjWcoPrG2IZONryH~OmI|I3j`62p(L)6rDMaSO)pL2$i&t$k)$L? z@Qr7R5QO6qBB2Oso$XHkj)?Z;x^2%>m+$@eD`@F8)SZ`yvzXcFId>fW${(?Otq?NT z%qf}1V}UyxE4_oq%2iE2V=m%-uB&J%?D8CA`UB`&` zn=UiPKnj6>)&5Di+pT@vP6_uNdQq_eM+ca*e35=30qE40%!Ip@X36MnVHLianGT7X_hOJPA>|!v*j~Nouqfefi7R4q1TJW zF^hV7*Lc0C5?s2|$#k2WJiKRBeG?-7DxQNFq-F8!N(6YpsOz{=WSW|kQ!v&+J$e55 z*K|)ga*HTcgF8Na*GRxkQOaSquRNz^y5AnI>1JSyWc7#g-7_Iyi0ZgEQ(zdVZjxYw zC=tSc>NPZ!XB*L}+X)rMV4eyM0tfjM%f3$RL`us=$|J3!(c4l#5&P7?TNG4jBsF7l zDlu-w!*KMk?9KLy?3Wkrd-YE9qsE}K)Y_u=lc(KiD1+ zi!n;cUX08M&uKlCuIlB75(&6IACb>hrTb{vIS3O?`eK$Y_FYJ49EQ<`%^Cg2a;Ebf zQMz%;b!YH!eGE2eYG?uI1?*< z!DH|_^OS?!Lb2(+gKfoy(SoPa;iLx8=7gx$0*oAns3R|SEX*$^1;=8}$O@3Uxu?p{ zkG}C=?>W{TgeITXzomKH4ErYRFZ9r-n>7XLSr^A~x0`8y2L_E z%Ww$3sOUCPBzXEQbLwpS6&pkDN=p0+OCLz+!vg_+KTv9Jsy1kMjeHx97upTlqO%|N z<4)U7!U_m3zzT@8D|wY^VboE^1dk^~jY#$M8b+~sTDJmK#XUR{4GBF%yq0SVa0LWG z0Is;I^Zu`0UB$L|pYtr;OK>hDbi@71vp>{(!~HD?ZQOMY<2+~ZY>bAxt&}VObiC>y zJI-IY)g+6q;#}p|u!JBLk6FXpV7oEkC|!r?!%kSh30gn~-)xeU zqSD<3@YRJ-!!y|Fs{8S7kR1xxNqb;%d(0JR$`1*f>WL@ofe7vV%Zn=A#J;s%hsHbX z=gImsE5MjUh4=>=INi0ot-t6#O-DiFpVY+bH6y_(LWcL%sMLJG4u=oYEZ+Vz4%s@6W)sbRF)CPmghrv2CAk_1isk3=+!v)^{dBNKA#l z=SJ>28R(|&dg^EuGX(7n|8OTT)S}S1QmnR8EX=WuMIcq86>u=p|BWq0T+%Od3^*MCB53;B}`Qr}(%+*U5Z%IbVlR03%&S87ovX)_whClZTePWem z42h;J-(QAn!2?kDwLtJz&HaRYN>hNm*tIg&mQi=EHX8al#auqfAnV{X8DB>i#Kllz zE4%t7MP84*UWd^zud8lzM2MdxthEv%u~WPq^mJg7_!<_>(|0fDa$fbS++yM&y`OClkrqtJKn;v;~3&f{I|Z=kJNQU_V$_TViwW1@OLwL z$2lnj%7l8%{8iNS0~SDP7&N6?SIuZ%2@T4C%!Tsr7jcRMY6laiF4B~{Kyx&9%-0F( z{CjLRt#;p}`12-;Hs*zHrOmGR*w_cgFKXy@=?9tbyq8hQP|M9o=UsW&&ds=qrPW0U z7AaIv<4+&F0Y$)%N|O7)N9xJTbUp@wTk%*h>&OZFi}#>rhUh@trvl{#77FE z=csja^wr8d{WPRm6B^Z08$7%Dl4OI^(n)2BEuL%A>pz!GaolJQ(J4tskwC6@q5Ne$ zCVriZrgHHMaD1+!hX2Et$S^LfpLHh45HR{LF!Gn!FCBcPA1A(~1YmvdEzhP_zGG_aVyjl61>OK|w)jH9)oB z=WXm2ddLAKm0jV_oS1?mn6UImB^fo>OWNuJM0DZi4_3W%znmf_wAhKnKhoO+vj!ND(+`$!}ix-PgK|8^?1u-2I=eu z|2s_lKyueU&{k1#{IIK0Kl4&}(x6{SmS}d4_x2J@pYKp|FGkTx(M_^9xD%RLEr0?0 z4zmC?_%+~G-MU`fCTB29nMiI(fLVz=Q@3fR*1~2SPjhE}JRXw`y#e+6Y0wz}?%kPXE#ItszCwgUH7>NCa>%5^-lbYsGp4MDGwn{u?JJ*( zN?(R%DCqX%UwoWHMWjMQgL5m3z{uYx3!Zw6{fB-;o$IAAk3-hxSUsoql#Hzxos2CC zoiem~#PSou$11ai-P-}(zX_u51 zPtC+42d+SXDZ(-xbDW^Qygz8%+(Vq2!5VlV~-oPDGQuG)E~Zu^De zH?Wp)NIDgAK z1KtyKIi|(4Y)8UR4qf2!@SZM0{eLHala)7i+Q+F>R#}o0ni&k6Sp;?`VvKrIoBUwN zOU>UVHQh%WUzBO}@3*ybYu}<#r0jjld>EmzSV(rWs3eF93Ngr44Qh82LGv#_tG>pk z-3M8PveL#w!@{LOFKag}pg*d)g#4?xTJF4C3%$(z26gGIf!5xF?H@6i%14&dHO~9y zv8$C8=X10))^C|ByOFu9PiVKC3N`ZsPJ9GpuznU`qp{#^>Bv^O$AidYRbc}f%z{d2 z{1@~txL$|%#*>N}8?ZRLhWkM5+dTiePrYMl@-L6Y6;$;P6T5N5HdSWPbdzo6Cj)Q4 zd%L2pc?H+_CVnyUe5tf-QPRII*{zEeT-3|%U_w9R&ha=$YoN?J(!te8j|8FL25JU_ zfXijWfTzpJ@f6&v53mHwCu5-R5P*&>mz10-TR+_GYXw%21n7ZYt6Wy|!Vo<#;s=Gi z%JE|<2QbaL&(4!{55bIx*C4aaB2`RD@U4wQ3i>*%w!fOi6_0X6yPNVe^JI^2xb)As zzvg(AVC>47ntxn)rwc^XXr#_ZU0<9Op>uS_vOv3~Yzpe3=x~ycg;= zytU3AB*S&PWh(VH!o4kJCQrYw)6`Sp?$$lisP0<4D{-F8nrJ4N=18-CZ!5SppN;}vCaWgEgfEqOf}Kdd$uhV>qDEYtNt?}r zYTgjCI3So+3^+G^CB-7gl@n+~Shzxz=B})Nben0{_~il=#kDdcwNB&iu7jRb4jB3N z^%wDGanzgaJ4o2i1$L0$M8ncpcJ8h%fbxmnK{n01A!xBxNg-hTOi33USWip*LrEP# z9&7tdXp%yNORrgsY$`neYB%p3S2>PKjna4KnsFGTBWX|z1*RlI8OiafPoW)uz~WxHVTS3QaLi0bC5Mg|C+v1jmoR4`+zb)PqU8Zly(vMR2U`q~wjih=PFS0bf_WTv!JE1>YLt*JaK1EaPy z)n3zW=S+W3#re(R{_0eof&&}xH-nAM55QXp+9;g}wS;Le2TssTzy5X73KOexPYEw<8`4ahTt+V->RHgx*{K0{B~?h8c%K65dW z7`qPmLPx|46s%EkOfg4>US4O4`IU=wR#L zL)H*|n1cgAQM*O6#=z-ydKBKv^q@@Ikv*LN_0;Avl^2T)Aap_v%gs7i_)!Dg%Rk2f zt5@7oS)(PJGG(-lCA&YniAi(7yN0OUAlP53Ae@XDi*&2m%{I*o0{|1aQUd89dzHJK zi!6bTn;(V5a_R;wS9Oj$sF&LAMQ>>nU3c$H&ZuH4(5RoV4MKOFmSt)FvD-6iyiSQk zloM8{9L07{!fm7W(g3nCd4Q8_7h4}>x2&(PgXPv0KJq4i1@RCRe-UXZ7TGbPBs4_- zG#L(wVMM>ZlzP2;oSxUC_)9-@xh576nEm#2kry#{o(RCF>SdyXb&JZq*YbbTn0Dj9 z;XqZ^ns4#?%*;BBO$bFe{LR3FRGe59by3ben0Z85p85cGk|78-696^$t(mis}qm%EwM%8Bc~n*GbOVI51hf_G$**-*kvaT?M< zO^B|cULpoyH+^X3u!JGCPiD3&l#)wV)Np6_sA`1f-B@~@gDON=5?U&hbz$7o#xqNi zc8s=t@kYk``o7GScN_2buhOzT z#!Ny_yZZT|7C-sJ(6Q0CMY0yb4vqY-W~H640s|z*!Za(BWl=WIyF&KBsot&u?kV0fFdxplB6EW1E1;uOM7p;(^ ziSL=4dDL{d3kOD?r55-tSxl^lF%A!DRZ8-9yQu-tqQ)Ra)D#OdMrQ*e1=9f|8J!u_ z$LjLwU)r`7I zy*c$bJ>7BM{5)WHFC4(`IFMztmec6PLwdvDp)$GLGqBOVutD!pks9v;*Qa3HD(u1h zNp((|wmul}lh$!dC3cbe(ihuM^IZ0@C{(-0owZY}XMQn}be2vp!7*d%wsA}V77dJh zJz;!Vda7K;6RPO6*!O4K=sRrg^tiuWe4SQY&U9xW>&u-XfQwA8MV>uu-?ce}QZ`&H zv{QR(cuJNAGaoeZpecqOX0`y1dJrV0N>}D`{}V- zSqAK63@ePh)HfzNKK=Rz$)qxm-_UN=n0WvNLL3~Ug5*vZ>GBf!*<}i_Zei|>*ZqpZi%;x@<~)MqO`KD!fY8`LZZ;FClS{&LX%BlNwGkwa|Vbl>?9zo)gEH{T&LS zp6_efg3|`=&b#Agitf*bsZO*V)5ep{YS==Dh=Z1mby!cN-V~hGQZj2e3fk7kWF%za zOx{uJQM7LqVfMrVH=sbjJ3yqjWaj-1Tw`jI@ypf=ucG`G|87R8M;^f}8q@{fm_1KjF}3jB%ypk* zEmWIdEGKetq+YMPLE+%LlWUP?Io!mb*fyH9$9|$H#95;Htc`nUSIqiO5@bB@PGemc zwW!Lg!-4&reEN;&YB7vRT0B4&jn8tBcuG!Xebiv|oJS^ic-Ehf(&E1Vq5K(Az^47? zG7DumSY@p9=IQ_m*>=P@R<6w!mhWJOQ~PD|qpvaDYtzq9OmTZKp*Zad?_$=cx#l98 z15J;X8YZsrizW*(Vesv0hGChTo2Wq+jtHZtyDI?V;9G6*@^wQ^gG|S!>z7KdbHhO? znHgN8?U*UPu9=n9lgff~Pip?boo1pplJUWJ2B8Q~fFUnejq~2+Nq&`i;K@Rs!!sN0 za+fFmRzBet#{;m3h_iqHqgKeF76XN(8eK~9)e+OQ7;J;vZqYMCZF?vMTF~DfO>j&#O z2GuzD<0r!)1vHMt-4A$J7W$fEQ1k)-D@w=gRjorl9xQEn*NYJCch%ab8KztpBYh`$ zuo*IGlSb9=gss;uuXg6ibLYm)GMO8%(T_yebr(WAUm^v#&faDvBj+jzE4vR2I0$Mp zofA5?2h$$)1lz0nbTban+`LYx_kxJMDJNYn%o)**)HrXh(DuGaO5(SrnzXIzQ$anD zNIBRGU!va^@70&tFLk!^<^FmuzDu2uxhtz&rs+E%W!+YI2mDzRzTdNF$F1qD0<2Wy zQG4bjR_cfDo+h{qp|Hp|)dKR!TVrpvGx`p`;PdExem7gV_kM*Zao>)-GSoSvvfiaH zwT}TCH!^KTGf@cL#e1$j2eD4B6bv8hPiL%BWK;IJym+#@x3H>cmFi3#cPP@H+5q5S zNOz2c>0T=FdRt9`5CraWtFJr+WU(V1B-Qp+&(L)@J4hj?}kxqqsYC?xS>$I`gvMx{A&P(bjNJ1vs zK=pyN0Cr~q(51{sCe@s)N~avFMtpO0rT$c$-^=;#R%c&h60s+L_K@Y z87d<>&wW}&%4LH6DTa$tL!M2vNE~b?J``Ln;#`Zs6k~87QUJZBwjFD6RFZ}yPElA5 z*>WlyC;!L@)~P@EwA&|cfb$hk?d@Re;}eHSFpe~n3*S%2_tyxD!YZ3U$xynx5!R)m z9K6cQ+@26@g`imE)2MFr*4^`})~{5R2X*1^NKO9LrHLx5gZ8eoL)C@~5l(Q3*hf;l z9%<18pll<0E090Y?VSr2K27GrC!s|nwbxqV!yFo57MjGKrxWoZ*vk-#>uX5+o_i|% zJ52AK$UMfqa*x}I>zdIU+O9*ZOmbp;cJMniAH`&2!oL5?9M&}utl4wk+;T?=bE7;N z;v%R+%BF$6ve&)`5)6~nc_8-7LeXuA$by;Y0AaR6IbbuwIt74YeiH+{0SP4ay8(khZ!D^c^&jLH+t5v3-a7c1k{SzgEOW?8Rg8o3AD%!S!DWa%fihG9X!9Qje(6ufU-k=tIZ(Ci+_dMV~}O|GC;#= z(h}tS*8rW=RtMVQM52blPZypj+u3(<={5!}x&NHG`Bxbr5)r#a$08SiM=X*4dAeHz2VOuGGU+~ zome}c{-2J3kWp9^5@NHV1sVe)6kes!VxRnBXab;dv0SG1#DSsA#Ow5pVFAe2)h?J1U;;7H* z_;*5qu6CV9P}tMHR=O+m9~Zq&{;m(-gHaO%3!`Q-r6i{FhngXA4nO{J5wtF`P& zP*)UOp|GcMKaI~QI|>sknNOU4Z}A@yrR@8D5kUP~kW1%e8FHdpcp|ZOEOdL?89v+b z)@%^tF-in#LCU;=`gZyeaR74ya#*wgXoNuos7nGG#OCV+04WfFj_|9R1*iR(HQk+v z{*q;;Oha6TDZ0^s*969_{&bKfM=26F-_NX-bp2ysKw}PBQ|&a=KXorGL-Yf$BC-|r zc%>&IVAaEC((f<~vsDRv2+F}NipGJ~9z@~*KFgckpptcV!`=`XnOX&(|C$fKflV|P87dn~6M&F13^h3!csH<6L z8^qY^Wm_59&!A!E>kLgq;RCH+SooI=`-Iy_v+OCb>!+L7Mg?-?tc~3N9N$-=_{FYt zRg(};2Zy3U1`fXKyj!1OB2E!#d|@;4)@E2=6I9Zb}a^V5hyQoGVw z;jBwPMV=j(By}t$gU$c?k5As|cmg&#-7Al;y}+JrhR%g@fB`Tdlsk@q$B6NhBM;*X zO9JVeG-f~qTURd%lD1x(XFo5&byx!H#oVp(>wkU@O8`fK^9T{BbGNYrB>9EOqRoxf z)l-HMQE>ynBJeFr4gY{xx8sMMVQ4^N9EZbCCGNpLpq|(!nY-(!?+<}O@c=Slm^JT) z-6l7)TCzMJvH1q|07^b}je-vA7(ZwZ9)BzuHi6-~`47PHU*F#&qzpJw%LiQ6x%b*6F?9C8gRgR`&le^r#Uaf1 zyznNX*M#!?G*=j~kAt3B|7(YmbC9E^404S2T)1MStTO}GM}3OKK8nS}=G*_a+l!1s zAz?Vr>L2fcUD5n$U9h&Lzr0WaSEHmXm>I*J6&?uC`3{p?KkYErhX@kTxV`?5#kuZk z;);h4`0CD>nw48Ki6*JEy%i_6CoTB>zznx;iF9;J1oGdN_>WuSk>o`{?!>R4URmnp zB#*Dq>R@gG)?jFnH@Hy>32XlFhxifOetr8%MsDr<=&>6?dD$H4c5vN{C`S-?^a9V; zy5s6keh`uKum)igl#Blv7I(fPPo%BrN?axyG`tBxa9Q&rwzLbd?-mGFEf+rFep<5~ zzA(1vsOX`G{}>{Ci+VE0#2Jq?xWJ%ws0B_{KoFPrzfY*^MKDtlzH0Eg&Zp{)q1J^t_AQx*w>k(h7ARs689_}7^!yU&mhfW`wlmlx+pu7sLpUY#z) z?sFj(4a5M(d?D|n`0Av8sMfVN;B77n{F9qB!~g06q1PD6PiAdvkoCXvp9Ok!xCf#q z=Mk}1H@?mw2K`6#03RZ8O-NCU0b;z;H2?YE+vHJM8TD9(@b{72e~g9V zActG484w*!UzT0a^-;6HVxA#?07Naa@EuDL?zqzyvF-$SWp@O_Gypo!1bruTXu;UCw9ixP#`aFZFh^qAJoT1OF*vcUh}AptuWER^vlH z;E^N=P=HzF_Y!CWA%Qx3!r9r@$t&2VX@5$|x>AxN%vv>iSWFP=1|{b~&m{k^;65JK zr=i9qO3ktR2|pi5WDuSCpy@i%P?Z)msA78}7Z#gJyFei80F7@p;9V zaZ}-aIVT{;4hB#0YER`uRZK38G3v>RMf*qxlBT6#z)o(HDCZodgi=|(^OLv89qCg_ zxgt2vqmf#z-P_YOZ`xmcprX5)==PH*Xk5yfcaUe<5PIG+07AboYQMD_ghB5gYU>< zMDQxP_QIun^q)>$+Zu9=UK*ORJOw!uRH&Q+;3nAIxy^S#7sh67ZJ{AJ)%6udj>?}$ zl-Q`a-wd5C*TvV})+)f{P!t#I&yRF)0|yP^MChH<(qD4)ju@c5gzC(pKxkExD80{J zCY7?{DqnkKP!By4>$rDj-7?YnBwCi&_2#ux`!Dyn*3VPW?}spG%c#!nk4gW_N{I*$ zTWgbGeVO&UzNWOH8{&VmM<&8J$-;xYIWEX(cRMiUW?G;QW?4zrV^((87!IwDa9HF@ zn7i|glUP%*;K3!M;)<�)JjqKW=0!Ig2&~v>_nw&0;IS#tqs~F(U)UvL64j4O;N2 W< 0`): + +.. math:: 0 = -\frac{\mathrm{d} P}{\mathrm{d} x} + \left(\nu + C_s^2 \frac{\partial U}{\partial z} \Delta^2 \right) \frac{\partial^2 U}{{\partial z^2}} + +The analytical solution is: + +.. math:: U = -\frac{\nu}{C_s^2 \Delta^2} z + \frac{C_s^2 \Delta^2}{3 \frac{\mathrm{d} P}{\mathrm{d} x}} \left( \frac{2}{C_s^2 \Delta^2} \frac{\mathrm{d} P}{\mathrm{d} x} z + \left(\frac{\nu}{C_s^2 \Delta^2}\right)^2 + \mathcal{C}_1 \right)^{\frac{3}{2}} + \mathcal{C}_0 + +where :math:`\mathcal{C}_i` are arbitrary constants. + +To solve for :math:`\mathcal{C}_1`, we set the requirement that +:math:`(\nu+\nu_t)\frac{\partial U}{\partial z}\Bigg\vert_{z=0} = -\frac{\partial P}{\partial x}` using + +.. math:: + + \begin{aligned} + \frac{\partial U}{\partial z} &= -\frac{\nu}{C_s^2 \Delta^2} + \left( \frac{2}{C_s^2 \Delta^2} \frac{\mathrm{d} P}{\mathrm{d} x} z + \left(\frac{\nu}{C_s^2 \Delta^2}\right)^2 + \mathcal{C}_1 \right)^{\frac{1}{2}} \\ + \end{aligned} + +This gives us a value for :math:`\mathcal{C}_1` as + +.. math:: \mathcal{C}_1 = \frac{1}{2} \left(-\left(\frac{\nu}{C_s^2\Delta^2}\right)^2 - \frac{2}{C_s^2\Delta^2} \frac{\mathrm{d} P}{\mathrm{d} x} + \left(\left(\frac{\nu}{C_s^2\Delta^2}\right)^4 + 4\left(\frac{\nu}{C_s^2\Delta^2}\right)^2 \left(-\frac{\mathrm{d} P}{\mathrm{d} x} \frac{1}{C_s^2 \Delta^2}\right)\right)^{\frac{1}{2}}\right) + +Using this :math:`\mathcal{C}_1` and setting :math:`U(z=0)=0`, we get +:math:`\mathcal{C}_0` as: + +.. math:: \mathcal{C}_0 = - \frac{C_s^2 \Delta^2}{3 \frac{\mathrm{d} P}{\mathrm{d} x}} \left( \left(\frac{\nu}{C_s^2 \Delta^2}\right)^2 + \mathcal{C}_1 \right)^{\frac{3}{2}} + +Finally, to make this problem well-posed, instead of setting a slip-wall +at the top boundary, we set a Dirichlet boundary condition using +:math:`U(z)` computed at :math:`z_{\mathrm{hi}}`. + +Parameter values for testing +############################ + +.. math:: + + \begin{aligned} + \nu &= 3.5e-3\\ + \frac{\mathrm{d} P}{\mathrm{d} x} &= -0.003969\\ + C_s &= 0.1\\ + \Delta &= \frac{1}{n_z} + \end{aligned} + +The hand computed values for the constants and boundary conditions for +varying :math:`n_z` are: + +.. container:: center + + +-------------+-----------------------+------------------------+------------------------+ + | :math:`n_z` | :math:`\mathcal{C}_0` | :math:`\mathcal{C}_1` | :math:`U\vert_{z=1}` | + +=============+=======================+========================+========================+ + | 8 | 169.90632344067848 | 49.63299783004268 | 0.5322727144609587 | + +-------------+-----------------------+------------------------+------------------------+ + | 16 | 2449.4399999999982 | 201.95839999999998 | 0.5576738677495996 | + +-------------+-----------------------+------------------------+------------------------+ + | 32 | 38115.76743991355 | 811.5733178848386 | 0.5646234542509774 | + +-------------+-----------------------+------------------------+------------------------+ + | 64 | 605551.4603806001 | 3250.1208744082833 | 0.5664029656909406 | + +-------------+-----------------------+------------------------+------------------------+ + +Test results +############ + +These are results of running the test case for 100 seconds. + +.. image:: ./channel_smagorinsky.png + :width: 300pt diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index 1848dee810..7a7edfbac4 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -191,6 +191,7 @@ add_test_re(joukowsky_disk) add_test_re(channel_kwsst) add_test_re(channel_kwsstiddes) add_test_re(channel_godunov_laminar) +add_test_re(channel_smagorinsky_analytical) add_test_re(halfchannel_zerogradient) add_test_re(halfchannel_symmetricwall) add_test_re(ekman_spiral) diff --git a/test/test_files/channel_smagorinsky_analytical/channel_smagorinsky_analytical.inp b/test/test_files/channel_smagorinsky_analytical/channel_smagorinsky_analytical.inp new file mode 100644 index 0000000000..9bbc2250ee --- /dev/null +++ b/test/test_files/channel_smagorinsky_analytical/channel_smagorinsky_analytical.inp @@ -0,0 +1,66 @@ +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# SIMULATION STOP # +#.......................................# +time.stop_time = 100.00 # Max (simulated) time to evolve +time.max_step = -1000 # Max number of time steps + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# TIME STEP COMPUTATION # +#.......................................# +time.fixed_dt = -0.01 # Use this constant dt if > 0 +time.cfl = 0.95 # CFL factor + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# INPUT AND OUTPUT # +#.......................................# +time.plot_interval = 100 # Steps between plot files +time.checkpoint_interval = 100 # Steps between checkpoint files + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# PHYSICS # +#.......................................# +incflo.density = 1.0 # Reference density +incflo.use_godunov = 1 +incflo.diffusion_type = 0 +incflo.godunov_type = "weno_z" +incflo.do_initial_proj = true +incflo.initial_iterations = 3 + +transport.viscosity = 3.5e-3 +turbulence.model = Smagorinsky +Smagorinsky_coeffs.Cs = 0.1 + +ICNS.source_terms = BodyForce +BodyForce.magnitude = 0.003969 0.0 0.0 +incflo.physics = ChannelFlow +ChannelFlow.density = 1.0 +ChannelFlow.re_tau = 180.0 +ChannelFlow.normal_direction = 2 +ChannelFlow.perturb_velocity = true +ChannelFlow.perturb_y_period = 0.0 +ChannelFlow.perturb_z_period = 4.0 +ChannelFlow.analytical_smagorinsky_test = true +ChannelFlow.C0 = 38115.76743991355 +ChannelFlow.C1 = 811.5733178848386 +WallFunction.wall_shear_stress_type = constant + +io.output_default_variables = 1 + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# ADAPTIVE MESH REFINEMENT # +#.......................................# +amr.n_cell = 16 16 32 # Grid cells at coarsest AMRlevel +amr.blocking_factor = 4 +amr.max_level = 0 # Max AMR level in hierarchy + +#¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨# +# GEOMETRY # +#.......................................# +geometry.prob_lo = 0.0 0.0 0.0 # Lo corner coordinates +geometry.prob_hi = 0.5 0.5 1.0 # Hi corner coordinates 8*pi*3pi*1 +geometry.is_periodic = 1 1 0 # Periodicity x y z (0/1) + +# Boundary conditions +zlo.type = "wall_model" +zhi.type = "no_slip_wall" +zhi.velocity = 0.5646234542509774 0.0 0.0