From 07e8681e2ee1c3c0c3d65480bbc26c664e7f83af Mon Sep 17 00:00:00 2001 From: project6-dev Date: Wed, 12 Aug 2026 11:14:01 +0000 Subject: [PATCH] fix: topk_softmax .so + fp32 router + enforce_eager + comp168 params --- computility-run.yaml | 11 +- .../build_corex_moe_topk_softmax.sh | 29 + qwen3_6_scripts/corex_moe_topk_softmax.cu | 44 + qwen3_6_scripts/device_utils.cuh | 81 ++ qwen3_6_scripts/install_prebuilt_corex.sh | 4 +- qwen3_6_scripts/moe_topk_sigmoid_kernels.cuh | 601 +++++++++++++ qwen3_6_scripts/moe_topk_softmax_kernels.cuh | 840 ++++++++++++++++++ .../prebuilt/corex-3.2.3-ivcore10/SHA256SUMS | 1 + .../corex_moe_topk_softmax.so | Bin 0 -> 696256 bytes qwen3_6_scripts/protocol.py | 3 + qwen3_6_scripts/qwen3_5.py | 27 +- qwen3_6_scripts/serving_chat.py | 3 + 12 files changed, 1631 insertions(+), 13 deletions(-) create mode 100644 qwen3_6_scripts/build_corex_moe_topk_softmax.sh create mode 100644 qwen3_6_scripts/corex_moe_topk_softmax.cu create mode 100644 qwen3_6_scripts/device_utils.cuh create mode 100644 qwen3_6_scripts/moe_topk_sigmoid_kernels.cuh create mode 100644 qwen3_6_scripts/moe_topk_softmax_kernels.cuh create mode 100755 qwen3_6_scripts/prebuilt/corex-3.2.3-ivcore10/corex_moe_topk_softmax.so diff --git a/computility-run.yaml b/computility-run.yaml index 41351f46..9fd7ac4d 100644 --- a/computility-run.yaml +++ b/computility-run.yaml @@ -8,18 +8,18 @@ command: - --served-model-name - llm - --max-model-len - - '262144' + - '256000' - --gpu-memory-utilization - - '0.9' + - '0.95' - --trust-remote-code - -tp - '4' - --max-num-seqs - - '1' + - '2' - --disable-log-requests - --disable-frontend-multiprocessing - --max-num-batched-tokens - - '8192' + - '4096' - --enable-chunked-prefill - --max-seq-len-to-capture - '32768' @@ -29,6 +29,9 @@ command: - --reasoning-parser - qwen3 - --enable-prefix-caching + - --enforce-eager + - --dtype + - half env: - name: VLLM_ENGINE_ITERATION_TIMEOUT_S value: 3600 diff --git a/qwen3_6_scripts/build_corex_moe_topk_softmax.sh b/qwen3_6_scripts/build_corex_moe_topk_softmax.sh new file mode 100644 index 00000000..09460d91 --- /dev/null +++ b/qwen3_6_scripts/build_corex_moe_topk_softmax.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -euo pipefail + +VLLM_ROOT=${1:?usage: build_corex_moe_topk_softmax.sh VLLM_ROOT} +COREX_ROOT=${COREX_ROOT:-/usr/local/corex-3.2.3} +TORCH_ROOT=${TORCH_ROOT:-${COREX_ROOT}/lib64/python3/dist-packages/torch} +SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +OUTPUT=${VLLM_ROOT}/corex_moe_topk_softmax.so + +"${COREX_ROOT}/bin/clang++" \ + -std=c++17 -O3 -shared -fPIC \ + --cuda-path="${COREX_ROOT}" --cuda-gpu-arch=ivcore10 \ + --no-cuda-version-check -D_GLIBCXX_USE_CXX11_ABI=0 \ + -DTORCH_EXTENSION_NAME=corex_moe_topk_softmax \ + -DTORCH_API_INCLUDE_EXTENSION_H \ + -I"${TORCH_ROOT}/include" \ + -I"${TORCH_ROOT}/include/torch/csrc/api/include" \ + -I"${TORCH_ROOT}/include/TH" -I"${TORCH_ROOT}/include/THC" \ + -I/usr/local/include/python3.10 \ + -I"${COREX_ROOT}/include" \ + -I"${SCRIPT_DIR}" \ + "${SCRIPT_DIR}/corex_moe_topk_softmax.cu" \ + -L"${TORCH_ROOT}/lib" -L"${COREX_ROOT}/lib64" \ + -Wl,-rpath,"${TORCH_ROOT}/lib" -Wl,-rpath,"${COREX_ROOT}/lib64" \ + -ltorch_python -ltorch_cuda -ltorch_cpu -ltorch \ + -lc10_cuda -lc10 -lcudart -o "${OUTPUT}" + +test -s "${OUTPUT}" +printf '[ok] CoreX MoE topk+softmax extension %s\n' "${OUTPUT}" diff --git a/qwen3_6_scripts/corex_moe_topk_softmax.cu b/qwen3_6_scripts/corex_moe_topk_softmax.cu new file mode 100644 index 00000000..50015b03 --- /dev/null +++ b/qwen3_6_scripts/corex_moe_topk_softmax.cu @@ -0,0 +1,44 @@ +// corex_moe_topk_softmax.cu — CUB-based fused topk+softmax for MoE routing +// +// Source: upstream_ref/xllm/xllm/core/kernels/cuda/moe/moe_topk_softmax_kernels.cuh +// Adapted from vllm v0.7.3 / TensorRT-LLM v0.7.1 topk_softmax_kernels.cu +// +// Builds as corex_moe_topk_softmax.so via corex clang++ (ivcore10) +// Loaded at runtime: from vllm import corex_moe_topk_softmax +// +// Replaces: torch.softmax + torch.topk in qwen3_5.py MoE routing +// Performance: single fused kernel vs 2 separate PyTorch ops + +#include "moe_topk_softmax_kernels.cuh" +#include + +using namespace xllm::kernel::cuda; + +// Python-facing wrapper matching wudixzy corex_*.so convention +std::tuple moe_topk_softmax( + torch::Tensor gating_output, // (T, num_experts) + int64_t topk, + bool renormalize) { + + int64_t num_tokens = gating_output.size(0); + + auto topk_weights = torch::empty( + {num_tokens, topk}, + torch::dtype(torch::kFloat32).device(gating_output.device())); + auto topk_indices = torch::empty( + {num_tokens, topk}, + torch::dtype(torch::kInt32).device(gating_output.device())); + + topk_softmax( + topk_weights, topk_indices, gating_output, + renormalize, + /*moe_softcapping=*/0.0, + /*correction_bias=*/std::nullopt); + + return std::make_tuple(topk_weights, topk_indices); +} + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("moe_topk_softmax", &moe_topk_softmax, + "CUB-based fused topk+softmax for MoE routing (xllm upstream)"); +} diff --git a/qwen3_6_scripts/device_utils.cuh b/qwen3_6_scripts/device_utils.cuh new file mode 100644 index 00000000..c1b734ec --- /dev/null +++ b/qwen3_6_scripts/device_utils.cuh @@ -0,0 +1,81 @@ +/* Copyright 2025 The xLLM Authors. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + https://github.com/jd-opensource/xllm/blob/main/LICENSE + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#pragma once + +// BI-V100 corex CUB compatibility +#include + +namespace xllm::kernel::cuda { + +#define WARP_SIZE 32 + +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) + +// Aligned array type +template +class alignas(Alignment) AlignedArray { + T data[N]; +}; + +#define XLLM_SHFL_XOR_SYNC(mask, var, lane_mask) \ + __shfl_xor_sync((mask), (var), (lane_mask)) +#define XLLM_SHFL_XOR_SYNC_WIDTH(mask, var, lane_mask, width) \ + __shfl_xor_sync((mask), (var), (lane_mask), (width)) + +// Define reduction operators based on CUDA version +// CUDA 13 (12.9+) deprecated cub::Max/Min in favor of cuda::maximum/minimum +#if CUDA_VERSION >= 12090 +using MaxReduceOp = ::cuda::maximum<>; +using MinReduceOp = ::cuda::minimum<>; +#else +using MaxReduceOp = cub::Max; +using MinReduceOp = cub::Min; +#endif + +template +__device__ float convert_to_float(T x) { + if constexpr (std::is_same_v) { + return __half2float(x); + } else if constexpr (std::is_same_v) { + return __bfloat162float(x); + } else if constexpr (std::is_same_v) { + return x; + } else { + return static_cast(x); + } +} + +// Constructs some constants needed to partition the work across threads at +// compile time. +template +struct TopkConstants { + static constexpr int ELTS_PER_LDG = BYTES_PER_LDG / sizeof(T); + static_assert(EXPERTS / (ELTS_PER_LDG * WARP_SIZE) == 0 || + EXPERTS % (ELTS_PER_LDG * WARP_SIZE) == 0, + ""); + static constexpr int VECs_PER_THREAD = + MAX(1, EXPERTS / (ELTS_PER_LDG * WARP_SIZE)); + static constexpr int VPT = VECs_PER_THREAD * ELTS_PER_LDG; + static constexpr int THREADS_PER_ROW = EXPERTS / VPT; + static constexpr int ROWS_PER_WARP = WARP_SIZE / THREADS_PER_ROW; +}; + +} // namespace xllm::kernel::cuda \ No newline at end of file diff --git a/qwen3_6_scripts/install_prebuilt_corex.sh b/qwen3_6_scripts/install_prebuilt_corex.sh index aca8052c..9821ce16 100755 --- a/qwen3_6_scripts/install_prebuilt_corex.sh +++ b/qwen3_6_scripts/install_prebuilt_corex.sh @@ -16,8 +16,8 @@ MANIFEST=${BUNDLE_DIR}/SHA256SUMS } mapfile -t artifacts < <(awk '{print $2}' "$MANIFEST") -[[ "${#artifacts[@]}" -eq 12 ]] || { - printf 'expected 12 prebuilt CoreX artifacts, found %s\n' \ +[[ "${#artifacts[@]}" -eq 13 ]] || { + printf 'expected 13 prebuilt CoreX artifacts, found %s\n' \ "${#artifacts[@]}" >&2 exit 2 } diff --git a/qwen3_6_scripts/moe_topk_sigmoid_kernels.cuh b/qwen3_6_scripts/moe_topk_sigmoid_kernels.cuh new file mode 100644 index 00000000..3a8463c3 --- /dev/null +++ b/qwen3_6_scripts/moe_topk_sigmoid_kernels.cuh @@ -0,0 +1,601 @@ +// Adapt from +// https://github.com/vllm-project/vllm/blob/v0.7.3/csrc/moe/topk_softmax_kernels.cu +// which is originally adapted from +// https://github.com/NVIDIA/TensorRT-LLM/blob/v0.7.1/cpp/tensorrt_llm/kernels/mixtureOfExperts/moe_kernels.cu +/* Copyright 2025 SGLang Team. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include +#include +#include + +#include + +#include "device_utils.cuh" + +namespace { + +using namespace xllm::kernel::cuda; + +// ====================== Sigmoid things =============================== +// We have our own implementation of sigmoid here so we can support transposing +// the output in the sigmoid kernel when we extend this module to support +// expert-choice routing. +template +__launch_bounds__(TPB) __global__ + void moe_sigmoid(const T* input, + const bool* finished, + float* output, + const int num_cols, + const float* correction_bias) { + const int thread_row_offset = blockIdx.x * num_cols; + + // Don't touch finished rows. + if ((finished != nullptr) && finished[blockIdx.x]) { + return; + } + + // First pass: Apply transformation, find max, and write transformed values to + // output + for (int ii = threadIdx.x; ii < num_cols; ii += TPB) { + const int idx = thread_row_offset + ii; + float val = convert_to_float(input[idx]); + + val = 1.0f / (1.0f + expf(-val)); + + // Apply correction bias if provided + if (correction_bias != nullptr) { + val = val + correction_bias[ii]; + } + + output[idx] = val; // Store transformed value + } +} + +template +__launch_bounds__(TPB) __global__ + void moe_topK(const float* inputs_after_sigmoid, + const bool* finished, + float* output, + int* indices, + const int num_experts, + const int k, + const int start_expert, + const int end_expert, + const bool renormalize, + const float* correction_bias) { + using cub_kvp = cub::KeyValuePair; + using BlockReduce = cub::BlockReduce; + __shared__ typename BlockReduce::TempStorage tmpStorage; + + cub_kvp thread_kvp; + cub::ArgMax arg_max; + + const int block_row = blockIdx.x; + + const bool row_is_active = finished ? !finished[block_row] : true; + const int thread_read_offset = blockIdx.x * num_experts; + float row_sum_for_renormalize = 0; + for (int k_idx = 0; k_idx < k; ++k_idx) { + thread_kvp.key = 0; + thread_kvp.value = -1.f; // This is OK because inputs are probabilities + + cub_kvp inp_kvp; + for (int expert = threadIdx.x; expert < num_experts; expert += TPB) { + const int idx = thread_read_offset + expert; + inp_kvp.key = expert; + inp_kvp.value = inputs_after_sigmoid[idx]; + + for (int prior_k = 0; prior_k < k_idx; ++prior_k) { + const int prior_winning_expert = indices[k * block_row + prior_k]; + + if (prior_winning_expert == expert) { + inp_kvp = thread_kvp; + } + } + + thread_kvp = arg_max(inp_kvp, thread_kvp); + } + + const cub_kvp result_kvp = + BlockReduce(tmpStorage).Reduce(thread_kvp, arg_max); + if (threadIdx.x == 0) { + // Ignore experts the node isn't responsible for with expert parallelism + const int expert = result_kvp.key; + const bool node_uses_expert = + expert >= start_expert && expert < end_expert; + const bool should_process_row = row_is_active && node_uses_expert; + + const int idx = k * block_row + k_idx; + float val = result_kvp.value; + if (correction_bias != nullptr) { + val -= correction_bias[expert]; + } + output[idx] = val; + indices[idx] = should_process_row ? (expert - start_expert) : num_experts; + assert(indices[idx] >= 0); + row_sum_for_renormalize += val; + } + __syncthreads(); + } + + if (renormalize && threadIdx.x == 0) { + float row_sum_for_renormalize_inv = 1.f / row_sum_for_renormalize; + for (int k_idx = 0; k_idx < k; ++k_idx) { + const int idx = k * block_row + k_idx; + output[idx] = output[idx] * row_sum_for_renormalize_inv; + } + } +} + +// ====================== TopK sigmoid things =============================== + +/* + A Top-K gating sigmoid written to exploit when the number of experts in the + MoE layers are a small power of 2. This allows us to cleanly share the rows + among the threads in a single warp and eliminate communication between warps + (so no need to use shared mem). + + It fuses the sigmoid, max and argmax into a single kernel. + + Limitations: + 1) This implementation is intended for when the number of experts is a small + power of 2. 2) This implementation assumes k is small, but will work for any + k. +*/ + +template +__launch_bounds__(WARPS_PER_CTA* WARP_SIZE) __global__ + void topk_gating_sigmoid(const T* input, + const bool* finished, + float* output, + const int num_rows, + int* indices, + const int k, + const int start_expert, + const int end_expert, + const bool renormalize, + const float* correction_bias) { + // We begin by enforcing compile time assertions and setting up compile time + // constants. + static_assert(VPT == (VPT & -VPT), "VPT must be power of 2"); + static_assert(NUM_EXPERTS == (NUM_EXPERTS & -NUM_EXPERTS), + "NUM_EXPERTS must be power of 2"); + static_assert(BYTES_PER_LDG == (BYTES_PER_LDG & -BYTES_PER_LDG), + "BYTES_PER_LDG must be power of 2"); + static_assert(BYTES_PER_LDG <= 16, "BYTES_PER_LDG must be leq 16"); + + // Number of bytes each thread pulls in per load + static constexpr int ELTS_PER_LDG = BYTES_PER_LDG / sizeof(T); + static constexpr int ELTS_PER_ROW = NUM_EXPERTS; + static constexpr int THREADS_PER_ROW = ELTS_PER_ROW / VPT; + static constexpr int LDG_PER_THREAD = VPT / ELTS_PER_LDG; + + // Restrictions based on previous section. + static_assert( + VPT % ELTS_PER_LDG == 0, + "The elements per thread must be a multiple of the elements per ldg"); + static_assert(WARP_SIZE % THREADS_PER_ROW == 0, + "The threads per row must cleanly divide the threads per warp"); + static_assert(THREADS_PER_ROW == (THREADS_PER_ROW & -THREADS_PER_ROW), + "THREADS_PER_ROW must be power of 2"); + static_assert(THREADS_PER_ROW <= WARP_SIZE, + "THREADS_PER_ROW can be at most warp size"); + + // We have NUM_EXPERTS elements per row. We specialize for small #experts + static constexpr int ELTS_PER_WARP = WARP_SIZE * VPT; + static constexpr int ROWS_PER_WARP = ELTS_PER_WARP / ELTS_PER_ROW; + static constexpr int ROWS_PER_CTA = WARPS_PER_CTA * ROWS_PER_WARP; + + // Restrictions for previous section. + static_assert(ELTS_PER_WARP % ELTS_PER_ROW == 0, + "The elts per row must cleanly divide the total elt per warp"); + + // ===================== From this point, we finally start computing run-time + // variables. ======================== + + // Compute CTA and warp rows. We pack multiple rows into a single warp, and a + // block contains WARPS_PER_CTA warps. This, each block processes a chunk of + // rows. We start by computing the start row for each block. + const int cta_base_row = blockIdx.x * ROWS_PER_CTA; + + // Now, using the base row per thread block, we compute the base row per warp. + const int warp_base_row = cta_base_row + threadIdx.y * ROWS_PER_WARP; + + // The threads in a warp are split into sub-groups that will work on a row. + // We compute row offset for each thread sub-group + const int thread_row_in_warp = threadIdx.x / THREADS_PER_ROW; + const int thread_row = warp_base_row + thread_row_in_warp; + + // Threads with indices out of bounds should early exit here. + if (thread_row >= num_rows) { + return; + } + const bool row_is_active = finished ? !finished[thread_row] : true; + + // We finally start setting up the read pointers for each thread. First, each + // thread jumps to the start of the row it will read. + const T* thread_row_ptr = input + thread_row * ELTS_PER_ROW; + + // Now, we compute the group each thread belong to in order to determine the + // first column to start loads. + const int thread_group_idx = threadIdx.x % THREADS_PER_ROW; + const int first_elt_read_by_thread = thread_group_idx * ELTS_PER_LDG; + const T* thread_read_ptr = thread_row_ptr + first_elt_read_by_thread; + + // Determine the pointer type to use to read in the data depending on the + // BYTES_PER_LDG template param. In theory, this can support all powers of 2 + // up to 16. NOTE(woosuk): The original implementation uses CUTLASS aligned + // array here. We defined our own aligned array and use it here to avoid the + // dependency on CUTLASS. + using AccessType = AlignedArray; + + // Finally, we pull in the data from global mem + T row_chunk_temp[VPT]; + AccessType* row_chunk_vec_ptr = + reinterpret_cast(&row_chunk_temp); + const AccessType* vec_thread_read_ptr = + reinterpret_cast(thread_read_ptr); +#pragma unroll + // Note(Byron): interleaved loads to achieve better memory coalescing + // | thread[0] | thread[1] | thread[2] | thread[3] | thread[0] | thread[1] | + // thread[2] | thread[3] | ... + for (int ii = 0; ii < LDG_PER_THREAD; ++ii) { + row_chunk_vec_ptr[ii] = vec_thread_read_ptr[ii * THREADS_PER_ROW]; + } + + float row_chunk[VPT]; +#pragma unroll + // Note(Byron): upcast logits to float32 + for (int ii = 0; ii < VPT; ++ii) { + float val = convert_to_float(row_chunk_temp[ii]); + val = 1.0f / (1.0f + expf(-val)); + // Apply correction bias if provided + if (correction_bias != nullptr) { + /* + LDG is interleaved + |thread0 LDG| |thread1 LDG| |thread0 LDG| |thread1 LDG| + |--------- group0 --------| |----------group1 --------| + ^ local2 + */ + const int group_id = ii / ELTS_PER_LDG; + const int local_id = ii % ELTS_PER_LDG; + const int expert_idx = first_elt_read_by_thread + + group_id * THREADS_PER_ROW * ELTS_PER_LDG + + local_id; + val = val + correction_bias[expert_idx]; + } + + row_chunk[ii] = val; + } + + // Now, row_chunk contains the sigmoid of the row chunk. Now, I want to find + // the topk elements in each row, along with the max index. + int start_col = first_elt_read_by_thread; + static constexpr int COLS_PER_GROUP_LDG = ELTS_PER_LDG * THREADS_PER_ROW; + + float row_sum_for_renormalize = 0; + + for (int k_idx = 0; k_idx < k; ++k_idx) { + // First, each thread does the local argmax + float max_val = row_chunk[0]; + int expert = start_col; +#pragma unroll + for (int ldg = 0, col = start_col; ldg < LDG_PER_THREAD; + ++ldg, col += COLS_PER_GROUP_LDG) { +#pragma unroll + for (int ii = 0; ii < ELTS_PER_LDG; ++ii) { + float val = row_chunk[ldg * ELTS_PER_LDG + ii]; + + // No check on the experts here since columns with the smallest index + // are processed first and only updated if > (not >=) + if (val > max_val) { + max_val = val; + expert = col + ii; + } + } + } + +// Now, we perform the argmax reduce. We use the butterfly pattern so threads +// reach consensus about the max. This will be useful for K > 1 so that the +// threads can agree on "who" had the max value. That thread can then blank out +// their max with -inf and the warp can run more iterations... +#pragma unroll + for (int mask = THREADS_PER_ROW / 2; mask > 0; mask /= 2) { + float other_max = + XLLM_SHFL_XOR_SYNC_WIDTH(0xffffffff, max_val, mask, THREADS_PER_ROW); + int other_expert = + XLLM_SHFL_XOR_SYNC_WIDTH(0xffffffff, expert, mask, THREADS_PER_ROW); + + // We want lower indices to "win" in every thread so we break ties this + // way + if (other_max > max_val || + (other_max == max_val && other_expert < expert)) { + max_val = other_max; + expert = other_expert; + } + } + + // Write the max for this k iteration to global memory. + if (thread_group_idx == 0) { + // Add a guard to ignore experts not included by this node + const bool node_uses_expert = + expert >= start_expert && expert < end_expert; + const bool should_process_row = row_is_active && node_uses_expert; + + // The lead thread from each sub-group will write out the final results to + // global memory. (This will be a single) thread per row of the + // input/output matrices. + const int idx = k * thread_row + k_idx; + if (correction_bias != nullptr) { + max_val -= correction_bias[expert]; + } + output[idx] = max_val; + indices[idx] = should_process_row ? (expert - start_expert) : NUM_EXPERTS; + row_sum_for_renormalize += max_val; + } + + // Finally, we clear the value in the thread with the current max if there + // is another iteration to run. + if (k_idx + 1 < k) { + const int ldg_group_for_expert = expert / COLS_PER_GROUP_LDG; + const int thread_to_clear_in_group = + (expert / ELTS_PER_LDG) % THREADS_PER_ROW; + + // Only the thread in the group which produced the max will reset the + // "winning" value to -inf. + if (thread_group_idx == thread_to_clear_in_group) { + const int offset_for_expert = expert % ELTS_PER_LDG; + // Safe to set to any negative value since row_chunk values must be + // between 0 and 1. + row_chunk[ldg_group_for_expert * ELTS_PER_LDG + offset_for_expert] = + -10000.f; + } + } + } + + // Fuse renormalization of topk_weights into this kernel + if (renormalize && thread_group_idx == 0) { + float row_sum_for_renormalize_inv = 1.f / row_sum_for_renormalize; +#pragma unroll + for (int k_idx = 0; k_idx < k; ++k_idx) { + const int idx = k * thread_row + k_idx; + output[idx] = output[idx] * row_sum_for_renormalize_inv; + } + } +} + +template +void topk_gating_sigmoid_launcher_helper(const T* input, + const bool* finished, + float* output, + int* indices, + const int num_rows, + const int k, + const int start_expert, + const int end_expert, + const bool renormalize, + const float* correction_bias, + cudaStream_t stream) { + static constexpr std::size_t MAX_BYTES_PER_LDG = 16; + + static constexpr int BYTES_PER_LDG = + MIN(MAX_BYTES_PER_LDG, sizeof(T) * EXPERTS); + using Constants = TopkConstants; + static constexpr int VPT = Constants::VPT; + static constexpr int ROWS_PER_WARP = Constants::ROWS_PER_WARP; + const int num_warps = (num_rows + ROWS_PER_WARP - 1) / ROWS_PER_WARP; + const int num_blocks = (num_warps + WARPS_PER_TB - 1) / WARPS_PER_TB; + + dim3 block_dim(WARP_SIZE, WARPS_PER_TB); + topk_gating_sigmoid + <<>>(input, + finished, + output, + num_rows, + indices, + k, + start_expert, + end_expert, + renormalize, + correction_bias); +} + +#define LAUNCH_SIGMOID(TYPE, NUM_EXPERTS, WARPS_PER_TB) \ + topk_gating_sigmoid_launcher_helper( \ + gating_output, \ + nullptr, \ + topk_weights, \ + topk_indices, \ + num_tokens, \ + topk, \ + 0, \ + num_experts, \ + renormalize, \ + correction_bias, \ + stream); + +template +void topk_gating_sigmoid_kernel_launcher(const T* gating_output, + float* topk_weights, + int* topk_indices, + float* sigmoid_workspace, + const int num_tokens, + const int num_experts, + const int topk, + const bool renormalize, + const float* correction_bias, + cudaStream_t stream) { + static constexpr int WARPS_PER_TB = 4; + switch (num_experts) { + case 1: + LAUNCH_SIGMOID(T, 1, WARPS_PER_TB); + break; + case 2: + LAUNCH_SIGMOID(T, 2, WARPS_PER_TB); + break; + case 4: + LAUNCH_SIGMOID(T, 4, WARPS_PER_TB); + break; + case 8: + LAUNCH_SIGMOID(T, 8, WARPS_PER_TB); + break; + case 16: + LAUNCH_SIGMOID(T, 16, WARPS_PER_TB); + break; + case 32: + LAUNCH_SIGMOID(T, 32, WARPS_PER_TB); + break; + case 64: + LAUNCH_SIGMOID(T, 64, WARPS_PER_TB); + break; + case 128: + LAUNCH_SIGMOID(T, 128, WARPS_PER_TB); + break; + case 256: + LAUNCH_SIGMOID(T, 256, WARPS_PER_TB); + break; + default: { + TORCH_CHECK(sigmoid_workspace != nullptr, + "sigmoid_workspace must be provided for num_experts that are " + "not a power of 2."); + static constexpr int TPB = 256; + moe_sigmoid<<>>(gating_output, + nullptr, + sigmoid_workspace, + num_experts, + correction_bias); + moe_topK<<>>(sigmoid_workspace, + nullptr, + topk_weights, + topk_indices, + num_experts, + topk, + 0, + num_experts, + renormalize, + correction_bias); + } + } +} +} // namespace + +namespace xllm::kernel::cuda { +void topk_sigmoid(torch::Tensor& topk_weights, // [num_tokens, topk] + torch::Tensor& topk_indices, // [num_tokens, topk] + torch::Tensor& gating_output, // [num_tokens, num_experts] + const bool renormalize, + const std::optional& correction_bias) { + // Check data type + CHECK(gating_output.scalar_type() == at::ScalarType::Float || + gating_output.scalar_type() == at::ScalarType::Half || + gating_output.scalar_type() == at::ScalarType::BFloat16) + << "gating_output must be float32, float16, or bfloat16"; + + // Check dimensions + CHECK(gating_output.dim() == 2) + << "gating_output must be 2D tensor [num_tokens, num_experts]"; + CHECK(topk_weights.dim() == 2) + << "topk_weights must be 2D tensor [num_tokens, topk]"; + CHECK(topk_indices.dim() == 2) + << "topk_indices must be 2D tensor [num_tokens, topk]"; + + // Check shapes + CHECK(gating_output.size(0) == topk_weights.size(0)) + << "First dimension of topk_weights must match num_tokens in " + "gating_output"; + CHECK(gating_output.size(0) == topk_indices.size(0)) + << "First dimension of topk_indices must match num_tokens in " + "gating_output"; + CHECK(topk_weights.size(-1) == topk_indices.size(-1)) + << "Second dimension of topk_indices must match topk in topk_weights"; + CHECK(topk_weights.size(-1) <= gating_output.size(-1)) + << "topk must be less than or equal to num_experts"; + + const int num_experts = static_cast(gating_output.size(-1)); + const int num_tokens = static_cast(gating_output.size(0)); + const int topk = static_cast(topk_weights.size(-1)); + + const bool is_pow_2 = + (num_experts != 0) && ((num_experts & (num_experts - 1)) == 0); + const bool needs_workspace = !is_pow_2 || num_experts > 256; + const int64_t workspace_size = needs_workspace ? num_tokens * num_experts : 0; + + const at::cuda::OptionalCUDAGuard device_guard(device_of(gating_output)); + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(); + torch::Tensor sigmoid_workspace = torch::empty( + {workspace_size}, gating_output.options().dtype(at::ScalarType::Float)); + + const at::ScalarType dtype = gating_output.scalar_type(); + + // Validate correction_bias if provided - must always be float32 + const float* bias_ptr = nullptr; + if (correction_bias.has_value()) { + const torch::Tensor& bias_tensor = correction_bias.value(); + CHECK(bias_tensor.dim() == 1) + << "correction_bias must be 1D tensor [num_experts]"; + CHECK(bias_tensor.size(0) == num_experts) + << "correction_bias size must match num_experts"; + CHECK(bias_tensor.scalar_type() == at::ScalarType::Float) + << "correction_bias must be float32, got " << bias_tensor.scalar_type(); + bias_ptr = bias_tensor.data_ptr(); + } + + if (dtype == at::ScalarType::Float) { + topk_gating_sigmoid_kernel_launcher( + gating_output.data_ptr(), + topk_weights.data_ptr(), + topk_indices.data_ptr(), + sigmoid_workspace.data_ptr(), + num_tokens, + num_experts, + topk, + renormalize, + bias_ptr, + stream); + } else if (dtype == at::ScalarType::Half) { + topk_gating_sigmoid_kernel_launcher<__half>( + reinterpret_cast(gating_output.data_ptr()), + topk_weights.data_ptr(), + topk_indices.data_ptr(), + sigmoid_workspace.data_ptr(), + num_tokens, + num_experts, + topk, + renormalize, + bias_ptr, + stream); + } else if (dtype == at::ScalarType::BFloat16) { + topk_gating_sigmoid_kernel_launcher<__nv_bfloat16>( + reinterpret_cast( + gating_output.data_ptr()), + topk_weights.data_ptr(), + topk_indices.data_ptr(), + sigmoid_workspace.data_ptr(), + num_tokens, + num_experts, + topk, + renormalize, + bias_ptr, + stream); + } else { + LOG(FATAL) << "Unsupported gating_output dtype: " << dtype; + } +} +} // namespace xllm::kernel::cuda diff --git a/qwen3_6_scripts/moe_topk_softmax_kernels.cuh b/qwen3_6_scripts/moe_topk_softmax_kernels.cuh new file mode 100644 index 00000000..785b1041 --- /dev/null +++ b/qwen3_6_scripts/moe_topk_softmax_kernels.cuh @@ -0,0 +1,840 @@ +// Adapt from +// https://github.com/vllm-project/vllm/blob/v0.7.3/csrc/moe/topk_softmax_kernels.cu +// which is originally adapted from +// https://github.com/NVIDIA/TensorRT-LLM/blob/v0.7.1/cpp/tensorrt_llm/kernels/mixtureOfExperts/moe_kernels.cu +/* Copyright 2025 SGLang Team. All Rights Reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +==============================================================================*/ + +#include +#include +#include + +#include + +#include "device_utils.cuh" + +using cub_kvp = cub::KeyValuePair; + +namespace { + +using namespace xllm::kernel::cuda; + +// ====================== Softmax things =============================== +// We have our own implementation of softmax here so we can support transposing +// the output in the softmax kernel when we extend this module to support +// expert-choice routing. +template +__launch_bounds__(TPB) __global__ + void moe_softmax(const T* input, + const bool* finished, + float* output, + const int num_cols, + const float moe_softcapping, + const float* correction_bias) { + using BlockReduce = cub::BlockReduce; + __shared__ typename BlockReduce::TempStorage tmpStorage; + + __shared__ float normalizing_factor; + __shared__ float float_max; + + const int thread_row_offset = blockIdx.x * num_cols; + + float threadData(-FLT_MAX); + + // Don't touch finished rows. + if ((finished != nullptr) && finished[blockIdx.x]) { + return; + } + + // First pass: Apply transformation, find max, and write transformed values to + // output + for (int ii = threadIdx.x; ii < num_cols; ii += TPB) { + const int idx = thread_row_offset + ii; + float val = convert_to_float(input[idx]); + + // Apply tanh softcapping if enabled + if (moe_softcapping != 0.0f) { + val = tanhf(val / moe_softcapping) * moe_softcapping; + } + + // Apply correction bias if provided + if (correction_bias != nullptr) { + val = val + correction_bias[ii]; + } + + output[idx] = val; // Store transformed value + threadData = max(val, threadData); + } + + const float maxElem = + BlockReduce(tmpStorage).Reduce(threadData, MaxReduceOp()); + + if (threadIdx.x == 0) { + float_max = maxElem; + } + __syncthreads(); + + // Second pass: Compute sum using transformed values from output + threadData = 0; + for (int ii = threadIdx.x; ii < num_cols; ii += TPB) { + const int idx = thread_row_offset + ii; + threadData += exp((output[idx] - float_max)); + } + + const auto Z = BlockReduce(tmpStorage).Sum(threadData); + + if (threadIdx.x == 0) { + normalizing_factor = 1.f / Z; + } + __syncthreads(); + + // Third pass: Compute final softmax using transformed values from output + for (int ii = threadIdx.x; ii < num_cols; ii += TPB) { + const int idx = thread_row_offset + ii; + const float softmax_val = + exp((output[idx] - float_max)) * normalizing_factor; + output[idx] = softmax_val; + } +} + +namespace moe { +struct TopKPair { + static const int PAIR = 2; + static const int MAX_INDEX = 0; + cub_kvp max; + cub_kvp secondMax; + + __device__ TopKPair() {} + __device__ TopKPair(cub_kvp max, cub_kvp secondMax) + : max(max), secondMax(secondMax) {} +}; + +struct TopKPairArgMax { + __device__ TopKPairArgMax() {} + __device__ __forceinline__ TopKPair + operator()(const TopKPair& candidate1, const TopKPair& candidate2) const { + cub_kvp globalMax, globalSecondMax; + + // Determine the global maximum + if (candidate1.max.value > candidate2.max.value) { + globalMax = candidate1.max; + } else { + globalMax = candidate2.max; + } + + // Determine the global second maximum + if (globalMax.key == candidate1.max.key) { + // If candidate1 contributed the max, compare its secondMax with + // candidate2's max + globalSecondMax = (candidate1.secondMax.value > candidate2.max.value) + ? candidate1.secondMax + : candidate2.max; + } else { + // If candidate2 contributed the max, compare its secondMax with + // candidate1's max + globalSecondMax = (candidate2.secondMax.value > candidate1.max.value) + ? candidate2.secondMax + : candidate1.max; + } + return TopKPair(globalMax, globalSecondMax); + } +}; +} // namespace moe + +template +__launch_bounds__(TPB) __global__ + void moe_topk_fast(float* inputs_after_softmax, + const bool* finished, + float* output, + int* indices, + const int num_experts, + const int k, + const int start_expert, + const int end_expert, + const bool renormalize) { + using namespace moe; + using BlockReduce = cub::BlockReduce; + __shared__ typename BlockReduce::TempStorage tmpStorage; + TopKPair thread_pair; + + const int block_row = blockIdx.x; + + const bool row_is_active = finished ? !finished[block_row] : true; + const int thread_read_offset = blockIdx.x * num_experts; + float row_sum_for_renormalize = 0; + // Each loop finds the top 2 elements, + // thus requiring only ⌈k/2⌉ loops (calculated as (k + 1) / 2). + for (int k_idx = 0; k_idx < (k + TopKPair::PAIR - 1) / TopKPair::PAIR; + ++k_idx) { + // Initializing the top 2 elements by the minimum value. + thread_pair.max.key = 0; + thread_pair.max.value = -1.f; + thread_pair.secondMax.key = 0; + thread_pair.secondMax.value = -1.f; + + cub_kvp inp_kvp; + for (int expert = threadIdx.x; expert < num_experts; expert += TPB) { + const int idx = thread_read_offset + expert; + inp_kvp.key = expert; + inp_kvp.value = inputs_after_softmax[idx]; + // updating the thread_pair according to inp_kvp's value + if (inp_kvp.value > thread_pair.max.value) { + thread_pair.secondMax = thread_pair.max; + thread_pair.max = inp_kvp; + } else if (inp_kvp.value > thread_pair.secondMax.value) { + thread_pair.secondMax = inp_kvp; + } + } + + TopKPairArgMax reducer; + const TopKPair result_pair = + BlockReduce(tmpStorage).Reduce(thread_pair, reducer); + if (threadIdx.x == 0) { +#pragma unroll + // updating 2 elements to the result. + for (int i = 0; i < TopKPair::PAIR; i++) { + if (k_idx * 2 + i >= k) break; + cub_kvp result = (i == TopKPair::MAX_INDEX) ? result_pair.max + : result_pair.secondMax; + int expert = result.key; + bool node_uses_expert = expert >= start_expert && expert < end_expert; + bool should_process_row = row_is_active && node_uses_expert; + // The inputs_after_softmax is modified in-place to avoid unnecessary + // loops for finding the top k-1 value. 1.f represents the minimum + // value. + inputs_after_softmax[thread_read_offset + expert] = -1.f; + int idx = k * block_row + k_idx * 2 + i; + output[idx] = result.value; + indices[idx] = + should_process_row ? (expert - start_expert) : num_experts; + assert(indices[idx] >= 0); + row_sum_for_renormalize += result.value; + } + } + __syncthreads(); + } + + if (renormalize && threadIdx.x == 0) { + float row_sum_for_renormalize_inv = 1.f / row_sum_for_renormalize; + for (int k_idx = 0; k_idx < k; ++k_idx) { + const int idx = k * block_row + k_idx; + output[idx] = output[idx] * row_sum_for_renormalize_inv; + } + } +} + +template +__launch_bounds__(TPB) __global__ void moe_topK(float* inputs_after_softmax, + const bool* finished, + float* output, + int* indices, + const int num_experts, + const int k, + const int start_expert, + const int end_expert, + const bool renormalize) { + using cub_kvp = cub::KeyValuePair; + using BlockReduce = cub::BlockReduce; + __shared__ typename BlockReduce::TempStorage tmpStorage; + + cub_kvp thread_kvp; + cub::ArgMax arg_max; + + const int block_row = blockIdx.x; + + const bool row_is_active = finished ? !finished[block_row] : true; + const int thread_read_offset = blockIdx.x * num_experts; + float row_sum_for_renormalize = 0; + for (int k_idx = 0; k_idx < k; ++k_idx) { + thread_kvp.key = 0; + thread_kvp.value = -1.f; // This is OK because inputs are probabilities + + cub_kvp inp_kvp; + for (int expert = threadIdx.x; expert < num_experts; expert += TPB) { + const int idx = thread_read_offset + expert; + inp_kvp.key = expert; + inp_kvp.value = inputs_after_softmax[idx]; + thread_kvp = arg_max(inp_kvp, thread_kvp); + } + + const cub_kvp result_kvp = + BlockReduce(tmpStorage).Reduce(thread_kvp, arg_max); + if (threadIdx.x == 0) { + // Ignore experts the node isn't responsible for with expert parallelism + const int expert = result_kvp.key; + const bool node_uses_expert = + expert >= start_expert && expert < end_expert; + const bool should_process_row = row_is_active && node_uses_expert; + + const int idx = k * block_row + k_idx; + output[idx] = result_kvp.value; + indices[idx] = should_process_row ? (expert - start_expert) : num_experts; + assert(indices[idx] >= 0); + row_sum_for_renormalize += result_kvp.value; + // The inputs_after_softmax is modified in-place to avoid unnecessary + // loops for finding the top k-1 value. 1.f represents the minimum value. + inputs_after_softmax[thread_read_offset + expert] = -1.f; + } + __syncthreads(); + } + + if (renormalize && threadIdx.x == 0) { + float row_sum_for_renormalize_inv = 1.f / row_sum_for_renormalize; + for (int k_idx = 0; k_idx < k; ++k_idx) { + const int idx = k * block_row + k_idx; + output[idx] = output[idx] * row_sum_for_renormalize_inv; + } + } +} + +// ====================== TopK softmax things =============================== + +/* + A Top-K gating softmax written to exploit when the number of experts in the + MoE layers are a small power of 2. This allows us to cleanly share the rows + among the threads in a single warp and eliminate communication between warps + (so no need to use shared mem). + + It fuses the softmax, max and argmax into a single kernel. + + Limitations: + 1) This implementation is intended for when the number of experts is a small + power of 2. 2) This implementation assumes k is small, but will work for any + k. +*/ + +template +__launch_bounds__(WARPS_PER_CTA* WARP_SIZE) __global__ + void topk_gating_softmax(const T* input, + const bool* finished, + float* output, + const int num_rows, + int* indices, + const int k, + const int start_expert, + const int end_expert, + const bool renormalize, + const float moe_softcapping, + const float* correction_bias) { + // We begin by enforcing compile time assertions and setting up compile time + // constants. + static_assert(VPT == (VPT & -VPT), "VPT must be power of 2"); + static_assert(NUM_EXPERTS == (NUM_EXPERTS & -NUM_EXPERTS), + "NUM_EXPERTS must be power of 2"); + static_assert(BYTES_PER_LDG == (BYTES_PER_LDG & -BYTES_PER_LDG), + "BYTES_PER_LDG must be power of 2"); + static_assert(BYTES_PER_LDG <= 16, "BYTES_PER_LDG must be leq 16"); + + // Number of bytes each thread pulls in per load + static constexpr int ELTS_PER_LDG = BYTES_PER_LDG / sizeof(T); + static constexpr int ELTS_PER_ROW = NUM_EXPERTS; + static constexpr int THREADS_PER_ROW = ELTS_PER_ROW / VPT; + static constexpr int LDG_PER_THREAD = VPT / ELTS_PER_LDG; + + // Restrictions based on previous section. + static_assert( + VPT % ELTS_PER_LDG == 0, + "The elements per thread must be a multiple of the elements per ldg"); + static_assert(WARP_SIZE % THREADS_PER_ROW == 0, + "The threads per row must cleanly divide the threads per warp"); + static_assert(THREADS_PER_ROW == (THREADS_PER_ROW & -THREADS_PER_ROW), + "THREADS_PER_ROW must be power of 2"); + static_assert(THREADS_PER_ROW <= WARP_SIZE, + "THREADS_PER_ROW can be at most warp size"); + + // We have NUM_EXPERTS elements per row. We specialize for small #experts + static constexpr int ELTS_PER_WARP = WARP_SIZE * VPT; + static constexpr int ROWS_PER_WARP = ELTS_PER_WARP / ELTS_PER_ROW; + static constexpr int ROWS_PER_CTA = WARPS_PER_CTA * ROWS_PER_WARP; + + // Restrictions for previous section. + static_assert(ELTS_PER_WARP % ELTS_PER_ROW == 0, + "The elts per row must cleanly divide the total elt per warp"); + + // ===================== From this point, we finally start computing run-time + // variables. ======================== + + // Compute CTA and warp rows. We pack multiple rows into a single warp, and a + // block contains WARPS_PER_CTA warps. This, each block processes a chunk of + // rows. We start by computing the start row for each block. + const int cta_base_row = blockIdx.x * ROWS_PER_CTA; + + // Now, using the base row per thread block, we compute the base row per warp. + const int warp_base_row = cta_base_row + threadIdx.y * ROWS_PER_WARP; + + // The threads in a warp are split into sub-groups that will work on a row. + // We compute row offset for each thread sub-group + const int thread_row_in_warp = threadIdx.x / THREADS_PER_ROW; + const int thread_row = warp_base_row + thread_row_in_warp; + + // Threads with indices out of bounds should early exit here. + if (thread_row >= num_rows) { + return; + } + const bool row_is_active = finished ? !finished[thread_row] : true; + + // We finally start setting up the read pointers for each thread. First, each + // thread jumps to the start of the row it will read. + const T* thread_row_ptr = input + thread_row * ELTS_PER_ROW; + + // Now, we compute the group each thread belong to in order to determine the + // first column to start loads. + const int thread_group_idx = threadIdx.x % THREADS_PER_ROW; + const int first_elt_read_by_thread = thread_group_idx * ELTS_PER_LDG; + const T* thread_read_ptr = thread_row_ptr + first_elt_read_by_thread; + + // Determine the pointer type to use to read in the data depending on the + // BYTES_PER_LDG template param. In theory, this can support all powers of 2 + // up to 16. NOTE(woosuk): The original implementation uses CUTLASS aligned + // array here. We defined our own aligned array and use it here to avoid the + // dependency on CUTLASS. + using AccessType = AlignedArray; + + // Finally, we pull in the data from global mem + T row_chunk_temp[VPT]; + AccessType* row_chunk_vec_ptr = + reinterpret_cast(&row_chunk_temp); + const AccessType* vec_thread_read_ptr = + reinterpret_cast(thread_read_ptr); +#pragma unroll + // Note(Byron): interleaved loads to achieve better memory coalescing + // | thread[0] | thread[1] | thread[2] | thread[3] | thread[0] | thread[1] | + // thread[2] | thread[3] | ... + for (int ii = 0; ii < LDG_PER_THREAD; ++ii) { + row_chunk_vec_ptr[ii] = vec_thread_read_ptr[ii * THREADS_PER_ROW]; + } + + float row_chunk[VPT]; +#pragma unroll + // Note(Byron): upcast logits to float32 + for (int ii = 0; ii < VPT; ++ii) { + row_chunk[ii] = convert_to_float(row_chunk_temp[ii]); + } + + // Apply tanh softcapping and correction bias + if (moe_softcapping != 0.0f || correction_bias != nullptr) { +#pragma unroll + for (int ii = 0; ii < VPT; ++ii) { + float val = row_chunk[ii]; + + // Apply tanh softcapping if enabled + if (moe_softcapping != 0.0f) { + val = tanhf(val / moe_softcapping) * moe_softcapping; + } + + // Apply correction bias if provided + if (correction_bias != nullptr) { + /* + LDG is interleaved + |thread0 LDG| |thread1 LDG| |thread0 LDG| |thread1 LDG| + |--------- group0 --------| |----------group1 --------| + ^ local2 + */ + const int group_id = ii / ELTS_PER_LDG; + const int local_id = ii % ELTS_PER_LDG; + const int expert_idx = first_elt_read_by_thread + + group_id * THREADS_PER_ROW * ELTS_PER_LDG + + local_id; + val = val + correction_bias[expert_idx]; + } + + row_chunk[ii] = val; + } + } + + // First, we perform a max reduce within the thread. We can do the max in fp16 + // safely (I think) and just convert to float afterwards for the exp + sum + // reduction. + float thread_max = row_chunk[0]; +#pragma unroll + for (int ii = 1; ii < VPT; ++ii) { + thread_max = max(thread_max, row_chunk[ii]); + } + + /*********************************/ + /********* Softmax Begin *********/ + /*********************************/ + +// Now, we find the max within the thread group and distribute among the +// threads. We use a butterfly reduce. lane id: 0-31 within a warp +#pragma unroll + for (int mask = THREADS_PER_ROW / 2; mask > 0; mask /= 2) { + // butterfly reduce with (lane id ^ mask) + thread_max = max(thread_max, + XLLM_SHFL_XOR_SYNC_WIDTH( + 0xffffffff, thread_max, mask, THREADS_PER_ROW)); + } + + // From this point, thread max in all the threads have the max within the row. + // Now, we subtract the max from each element in the thread and take the exp. + // We also compute the thread local sum. + float row_sum = 0; +#pragma unroll + for (int ii = 0; ii < VPT; ++ii) { + row_chunk[ii] = expf(row_chunk[ii] - thread_max); + row_sum += row_chunk[ii]; + } + +// Now, we perform the sum reduce within each thread group. Similar to the max +// reduce, we use a bufferfly pattern. +#pragma unroll + for (int mask = THREADS_PER_ROW / 2; mask > 0; mask /= 2) { + row_sum += + XLLM_SHFL_XOR_SYNC_WIDTH(0xffffffff, row_sum, mask, THREADS_PER_ROW); + } + + // From this point, all threads have the max and the sum for their rows in the + // thread_max and thread_sum variables respectively. Finally, we can scale the + // rows for the softmax. Technically, for top-k gating we don't need to + // compute the entire softmax row. We can likely look at the maxes and only + // compute for the top-k values in the row. However, this kernel will likely + // not be a bottle neck and it seems better to closer match torch and find the + // argmax after computing the softmax. + const float reciprocal_row_sum = 1.f / row_sum; + +#pragma unroll + for (int ii = 0; ii < VPT; ++ii) { + row_chunk[ii] = row_chunk[ii] * reciprocal_row_sum; + } + /*******************************/ + /********* Softmax End *********/ + /*******************************/ + + // Now, softmax_res contains the softmax of the row chunk. Now, I want to find + // the topk elements in each row, along with the max index. + int start_col = first_elt_read_by_thread; + static constexpr int COLS_PER_GROUP_LDG = ELTS_PER_LDG * THREADS_PER_ROW; + + float row_sum_for_renormalize = 0; + + for (int k_idx = 0; k_idx < k; ++k_idx) { + // First, each thread does the local argmax + float max_val = row_chunk[0]; + int expert = start_col; +#pragma unroll + for (int ldg = 0, col = start_col; ldg < LDG_PER_THREAD; + ++ldg, col += COLS_PER_GROUP_LDG) { +#pragma unroll + for (int ii = 0; ii < ELTS_PER_LDG; ++ii) { + float val = row_chunk[ldg * ELTS_PER_LDG + ii]; + + // No check on the experts here since columns with the smallest index + // are processed first and only updated if > (not >=) + if (val > max_val) { + max_val = val; + expert = col + ii; + } + } + } + +// Now, we perform the argmax reduce. We use the butterfly pattern so threads +// reach consensus about the max. This will be useful for K > 1 so that the +// threads can agree on "who" had the max value. That thread can then blank out +// their max with -inf and the warp can run more iterations... +#pragma unroll + for (int mask = THREADS_PER_ROW / 2; mask > 0; mask /= 2) { + float other_max = + XLLM_SHFL_XOR_SYNC_WIDTH(0xffffffff, max_val, mask, THREADS_PER_ROW); + int other_expert = + XLLM_SHFL_XOR_SYNC_WIDTH(0xffffffff, expert, mask, THREADS_PER_ROW); + + // We want lower indices to "win" in every thread so we break ties this + // way + if (other_max > max_val || + (other_max == max_val && other_expert < expert)) { + max_val = other_max; + expert = other_expert; + } + } + + // Write the max for this k iteration to global memory. + if (thread_group_idx == 0) { + // Add a guard to ignore experts not included by this node + const bool node_uses_expert = + expert >= start_expert && expert < end_expert; + const bool should_process_row = row_is_active && node_uses_expert; + + // The lead thread from each sub-group will write out the final results to + // global memory. (This will be a single) thread per row of the + // input/output matrices. + const int idx = k * thread_row + k_idx; + output[idx] = max_val; + indices[idx] = should_process_row ? (expert - start_expert) : NUM_EXPERTS; + row_sum_for_renormalize += max_val; + } + + // Finally, we clear the value in the thread with the current max if there + // is another iteration to run. + if (k_idx + 1 < k) { + const int ldg_group_for_expert = expert / COLS_PER_GROUP_LDG; + const int thread_to_clear_in_group = + (expert / ELTS_PER_LDG) % THREADS_PER_ROW; + + // Only the thread in the group which produced the max will reset the + // "winning" value to -inf. + if (thread_group_idx == thread_to_clear_in_group) { + const int offset_for_expert = expert % ELTS_PER_LDG; + // Safe to set to any negative value since row_chunk values must be + // between 0 and 1. + row_chunk[ldg_group_for_expert * ELTS_PER_LDG + offset_for_expert] = + -10000.f; + } + } + } + + // Fuse renormalization of topk_weights into this kernel + if (renormalize && thread_group_idx == 0) { + float row_sum_for_renormalize_inv = 1.f / row_sum_for_renormalize; +#pragma unroll + for (int k_idx = 0; k_idx < k; ++k_idx) { + const int idx = k * thread_row + k_idx; + output[idx] = output[idx] * row_sum_for_renormalize_inv; + } + } +} + +template +void topk_gating_softmax_launcher_helper(const T* input, + const bool* finished, + float* output, + int* indices, + const int num_rows, + const int k, + const int start_expert, + const int end_expert, + const bool renormalize, + const float moe_softcapping, + const float* correction_bias, + cudaStream_t stream) { + static constexpr std::size_t MAX_BYTES_PER_LDG = 16; + + static constexpr int BYTES_PER_LDG = + MIN(MAX_BYTES_PER_LDG, sizeof(T) * EXPERTS); + using Constants = TopkConstants; + static constexpr int VPT = Constants::VPT; + static constexpr int ROWS_PER_WARP = Constants::ROWS_PER_WARP; + const int num_warps = (num_rows + ROWS_PER_WARP - 1) / ROWS_PER_WARP; + const int num_blocks = (num_warps + WARPS_PER_TB - 1) / WARPS_PER_TB; + + dim3 block_dim(WARP_SIZE, WARPS_PER_TB); + topk_gating_softmax + <<>>(input, + finished, + output, + num_rows, + indices, + k, + start_expert, + end_expert, + renormalize, + moe_softcapping, + correction_bias); +} + +#define LAUNCH_SOFTMAX(TYPE, NUM_EXPERTS, WARPS_PER_TB) \ + topk_gating_softmax_launcher_helper( \ + gating_output, \ + nullptr, \ + topk_weights, \ + topk_indices, \ + num_tokens, \ + topk, \ + 0, \ + num_experts, \ + renormalize, \ + moe_softcapping, \ + correction_bias, \ + stream); + +template +void topk_gating_softmax_kernel_launcher(const T* gating_output, + float* topk_weights, + int* topk_indices, + float* softmax_workspace, + const int num_tokens, + const int num_experts, + const int topk, + const bool renormalize, + const float moe_softcapping, + const float* correction_bias, + cudaStream_t stream) { + static constexpr int WARPS_PER_TB = 4; + switch (num_experts) { + case 1: + LAUNCH_SOFTMAX(T, 1, WARPS_PER_TB); + break; + case 2: + LAUNCH_SOFTMAX(T, 2, WARPS_PER_TB); + break; + case 4: + LAUNCH_SOFTMAX(T, 4, WARPS_PER_TB); + break; + case 8: + LAUNCH_SOFTMAX(T, 8, WARPS_PER_TB); + break; + case 16: + LAUNCH_SOFTMAX(T, 16, WARPS_PER_TB); + break; + case 32: + LAUNCH_SOFTMAX(T, 32, WARPS_PER_TB); + break; + case 64: + LAUNCH_SOFTMAX(T, 64, WARPS_PER_TB); + break; + case 128: + LAUNCH_SOFTMAX(T, 128, WARPS_PER_TB); + break; + case 256: + LAUNCH_SOFTMAX(T, 256, WARPS_PER_TB); + break; + default: { + TORCH_CHECK(softmax_workspace != nullptr, "softmax_workspace must be provided for num_experts that are not a power of 2."); + static constexpr int TPB = 256; + moe_softmax<<>>(gating_output, + nullptr, + softmax_workspace, + num_experts, + moe_softcapping, + correction_bias); + if (topk == 1) { + // Note: As an optimization for better performance, + // the softmax_workspace is overwritten in-place by both moeTopK and + // moe_topk_fast. + moe_topK<<>>(softmax_workspace, + nullptr, + topk_weights, + topk_indices, + num_experts, + topk, + 0, + num_experts, + renormalize); + } else { + moe_topk_fast<<>>(softmax_workspace, + nullptr, + topk_weights, + topk_indices, + num_experts, + topk, + 0, + num_experts, + renormalize); + } + } + } +} +} // namespace + +namespace xllm::kernel::cuda { +void topk_softmax(torch::Tensor& topk_weights, // [num_tokens, topk] + torch::Tensor& topk_indices, // [num_tokens, topk] + torch::Tensor& gating_output, // [num_tokens, num_experts] + const bool renormalize, + const double moe_softcapping, + const std::optional& correction_bias) { + // Check data type + TORCH_CHECK(gating_output.scalar_type() == at::ScalarType::Float || + gating_output.scalar_type() == at::ScalarType::Half || + gating_output.scalar_type() == at::ScalarType::BFloat16, + "gating_output must be float32, float16, or bfloat16"); + + // Check dimensions + TORCH_CHECK(gating_output.dim() == 2, "gating_output must be 2D tensor [num_tokens, num_experts]"); + TORCH_CHECK(topk_weights.dim() == 2, "topk_weights must be 2D tensor [num_tokens, topk]"); + TORCH_CHECK(topk_indices.dim() == 2, "topk_indices must be 2D tensor [num_tokens, topk]"); + + // Check shapes + TORCH_CHECK(gating_output.size(0) == topk_weights.size(0), "First dimension of topk_weights must match num_tokens in gating_output First dimension of topk_indices must match num_tokens in gating_output"); + + TORCH_CHECK(topk_weights.size(-1) == topk_indices.size(-1), "Second dimension of topk_indices must match topk in topk_weights topk must be less than or equal to num_experts"); + + const int num_experts = static_cast(gating_output.size(-1)); + const int num_tokens = static_cast(gating_output.size(0)); + const int topk = static_cast(topk_weights.size(-1)); + + const bool is_pow_2 = + (num_experts != 0) && ((num_experts & (num_experts - 1)) == 0); + const bool needs_workspace = !is_pow_2 || num_experts > 256; + const int64_t workspace_size = needs_workspace ? num_tokens * num_experts : 0; + + const at::cuda::OptionalCUDAGuard device_guard(device_of(gating_output)); + const cudaStream_t stream = at::cuda::getCurrentCUDAStream(); + torch::Tensor softmax_workspace = torch::empty( + {workspace_size}, gating_output.options().dtype(at::ScalarType::Float)); + + const at::ScalarType dtype = gating_output.scalar_type(); + + // Validate correction_bias if provided - must always be float32 + const float* bias_ptr = nullptr; + if (correction_bias.has_value()) { + const torch::Tensor& bias_tensor = correction_bias.value(); + TORCH_CHECK(bias_tensor.dim() == 1, "correction_bias must be 1D tensor [num_experts]"); + TORCH_CHECK(bias_tensor.size(0) == num_experts, "correction_bias size must match num_experts"); + TORCH_CHECK(bias_tensor.scalar_type() == at::ScalarType::Float, "correction_bias must be float32"); + bias_ptr = bias_tensor.data_ptr(); + } + + // Cast moe_softcapping from double to float for CUDA kernels + const float moe_softcapping_f = static_cast(moe_softcapping); + + if (dtype == at::ScalarType::Float) { + topk_gating_softmax_kernel_launcher( + gating_output.data_ptr(), + topk_weights.data_ptr(), + topk_indices.data_ptr(), + softmax_workspace.data_ptr(), + num_tokens, + num_experts, + topk, + renormalize, + moe_softcapping_f, + bias_ptr, + stream); + } else if (dtype == at::ScalarType::Half) { + topk_gating_softmax_kernel_launcher<__half>( + reinterpret_cast(gating_output.data_ptr()), + topk_weights.data_ptr(), + topk_indices.data_ptr(), + softmax_workspace.data_ptr(), + num_tokens, + num_experts, + topk, + renormalize, + moe_softcapping_f, + bias_ptr, + stream); + } else if (dtype == at::ScalarType::BFloat16) { + topk_gating_softmax_kernel_launcher<__nv_bfloat16>( + reinterpret_cast( + gating_output.data_ptr()), + topk_weights.data_ptr(), + topk_indices.data_ptr(), + softmax_workspace.data_ptr(), + num_tokens, + num_experts, + topk, + renormalize, + moe_softcapping_f, + bias_ptr, + stream); + } else { + TORCH_CHECK(false, "Unsupported gating_output dtype"); + } +} +} // namespace xllm::kernel::cuda diff --git a/qwen3_6_scripts/prebuilt/corex-3.2.3-ivcore10/SHA256SUMS b/qwen3_6_scripts/prebuilt/corex-3.2.3-ivcore10/SHA256SUMS index f2915aa5..7360f63e 100644 --- a/qwen3_6_scripts/prebuilt/corex-3.2.3-ivcore10/SHA256SUMS +++ b/qwen3_6_scripts/prebuilt/corex-3.2.3-ivcore10/SHA256SUMS @@ -10,3 +10,4 @@ ec2d11fa82d9d0816a6da53e62605e962786fa20ecd5f62e50f9d43087fc4d67 corex_gdn_gate d26f2fa39c3921a95793786601e90cf6ebadd06f1d752af541bf82c21acbc1c9 corex_moe_exact_reduce.so 50b0b44c1da779bb2c03419ed549aee9bb922d1f9bab8b7f11a3d91cca0d21c3 corex_moe_weight_gather.so e944ec0528ed9b6cb74518de3c57e3730543a7bdebc872f993bfdc8424f13e6b corex_paged_kv_gather.so +c3208c8e0c13f54dbe22a9cfc88bdc6ab040e920d6cae4bc0ecf7087880795f3 corex_moe_topk_softmax.so diff --git a/qwen3_6_scripts/prebuilt/corex-3.2.3-ivcore10/corex_moe_topk_softmax.so b/qwen3_6_scripts/prebuilt/corex-3.2.3-ivcore10/corex_moe_topk_softmax.so new file mode 100755 index 0000000000000000000000000000000000000000..f88e0e5c99cd05258b62c8b26887086d9dd0390b GIT binary patch literal 696256 zcmeFa3w%_?^#^_f1OkE^5i~woF=+6a4G9DkO(20?4Y(3eD%wp*HYAXjn+*h?fq=5c zXzCNKwNb00zqUqg74Q`v0&1&~R>gOG-w0~NilEi}zvs-{&B^92#+H8mfBCx_?tZ`b z%$b=pXU@!>JNNFD**R1C#KaiZr>}8_L8!J_F&X+q%dLa-H^ay<(v5-m*J+Gk*?!?O zJ-@X4Mse2Bh*y~Mh^4Ph^bbBw{BQWUGZ-^;e$mP~TjysTRjU|AJ~BE0fb_6ugq%jLVZ`*w zXf)#c8OKZlxiRJ-qfgt2f z#`Niz)TimrWBQ%sG$z5hl4JVy_rx}&r1#4h8ruRdt2Lbcu07Pqb1vI5HY>?Ux@z_8 zev@X@4m_w9YGUHJEC=es9fadB{0-OmP#h1(-;ww`T61J4C%zw}@ko74#BmhTiTFDMf0OWMeX{U98-G*q z=f>aJ_{+iHH2j@|zjN_NpIjWz!{2O;iMv35pQDc#;po%f^Ki`9-{<03fImO}itslN zf5rGK!5@7V;8=#g3XLzuu^NAi@OKIRF2&y!_*;U%rTANhzvcL|K3C!U`nh|y-SFs3 z3)a2#`0|mncIGA=bl{rN-woV3{h{YJ&EIuLQrbn;H_!Ulz!SH<>;>C5e&Y2Vbi#=9AA92E#=N`lo}Y8XmuH?k`^2T2GcP><`45st-}0vaYxl?ncRl=^ z=g_{FFL-BA?VM376VJP={oK%d z1O9L8zse_Pzp~?+gwAtLd}Y@&yKe4$=%v4YG3}x`gKM9-xF#X#_m7&CT9XI#AJN#_a2&%9#wJ2zFlVII`7d%iDr%*6ALIQvsq?2c#enK5F|zfJ#% zpZ%Y2fTdJ^)oMC^Tg#TWfvbk$#?g^PrC57>5KpG!M7Hz{osbn zu0M6aM@=83uej~i>F3^l$$g{l>$mFt15O`*|Kaale9MByYj3-D&fnh2t$*vpmva5{ zUflgn+l@O98oups+oyb&aoU{- zu_5wY=mdLy&@uLWHR8z7NF~58jI@`p9c?ckKpeATo>aFJgOHv68z67TKM*C~hez4# zUmHb!SCYN{A5b`J2$JR8gmT)I|BWd5{&9r8{!Fxr*DfbUvBU8g6z%L;6-EB2!S?!VjU82378i##-pNpb@{)zT_Qj_iTr3sOppF5+( zfjMYjr|c;DdqtG;-!aC%{NEsM*yXzb<+Ssk52N(o&!e<^2ywu!y#_|iu}n@ z#-mP*J9h1RRFrsla+LaFVryHkJJDb4>YES$wDY%LN3p{XQT*-UDE;E=zV`X{iBc~w zj9^#JHBs!jyN|v6QBmyt0xD~#|G6mf=MPch-se%~3D2QkcKT;TDgRAT#upFbiJhJg zPPK2ZDTsS^@{dGm$D$N_`NyJ+gOky(?fhhG6#juIaqLl)->#gMQR@48l=%4>#wok< z^hJBw^`j=kKHrfTr|jgnqJ8bknHyzXK0b>7pM-qT^gTY0MX}G!DE2%QO6=h6%{AaMIUAvqYrQNTO;y<4ZwAWvU zIB91$SCqJPN0c~oWR!NSiempz6#GAb_O!Y;S3sJ`9KSh~exsI^6LjxM!uDza& zGLJg_cze6O6Q#ZSMj4M{;0ewi-e4FH9%Wz7M)W(o_Ifjloy($(1A1)`|P{c?5YZwED zDZZ6%isEDCd&e<~chU_?d@}i8!}tyQ1=maG8&s!_V^9FruWz_|H2)FWm-xIN6cN5} zi}hY=mzFKv+hq#IJCgSfQT6p9F3_hB+L!p`@ru7w(T1D#3^8ukH~Qfo{232_Bl%Xk zsfy1`{?{OTe;e#P6#9)FN83Y6Is7m766ki!I8^EPYknm<0_&k0 z==gl5>zg%>`upKV>o(QCTHJV3`%jDZw?X>EHeLQsU4Dd3{+y%xMP-B?_MjthzGrtY ze;X=7dUiX*U zh&V?3A-MeX1)mqRo@T5s5#OZaTdC&%qV3tJ?P=Nn?vd0VhZy-wRXMdg8-LUBEkoNO zQ|p;LOzCga?P#^~t=fN_ZdINNEq^S=HLll*ivLt)W1P)?azqb5Y0~T7P^*zK`hs*s6KUAI{h1uhip$ zR%1M$o%}|hH~{MdRL+{`mBrwe{7KjT)~M~ArTOPi*5x#m!E|>uo6U8(zpRnB*He{a;|@-!`f3I;gR-=W7}%g=Au<vX+Y!nRxIE;~I34F3Bl^)aE#EOv$){`iJFK{* z9mI-bS8_XIoYnTR{4HC@hejPA0QvKQjt@-{cJN{1#CAJP)z{L$O8a4pHbAD7V8g z=BJGH2LcrVUv+s^b!BBmAm}gj1#zwn=dyE?QHKkrk122^k1YgIQtC<#Rs;%)Cl~t* z7EA%o_MTmko8p^~KTFazepY#*AI0|FjJSXBrzX&0kg-T%65jP0tJj@)ytW7kN;z z>9BW%e&(cFNTf{jmsJE7PpJr$0b0 zQGp*XA16t5=a-^3UE<*eweu5KI+X`*>MzXo2eq@<_>JY*g(YRa zs?v%@)F?B3@NN7*mns!u<*XF)j9KN2O3Dj;GyGN6Wqy(h`*zBh?3#ko>Oy~3NmXTj zkj%4~9eJ{g+{KkDcodR-1X=tq97MTZdVY1VVqPG>&^4wke}Uh(Fh5X2(I{I6khxsd zAFo7~OZ5wq)V(o%Az~I>&o9oXz>zYBecw}#IEZ+ZSykl^1S28{1rhJ!nZ@X{2trj= zK6GXfQ$0DkLFn{N^#^AbmsBYMrVO7YuOwz!O%BnpDs^hQe^HoW<>}%uOk^P7o8m`%>F;P-l-_TN=jJc8WYH-QtLGxXm-`B+h0*@G!SSeM8RB=)&;2g9 zYHUe4)i=8g;j)ZeB)2LR4pW(u?926WIPeAhl^8cF0{Qd&><37cUs>rdFU&?DuR`yu z3@XDc@Gtfiz(hgzHLVEol|~u_vx>!(Am3AZj815oihynv6#ywNp$T9p z-2kfj(47$cG2}ov>_FKVGbuPJ!F;JJOTznUlFDf(2{AJ2h zgxgUmkw7u*Oo)~h1>Gs#M&8Be%$@Hq2>MVW4|L1&%6!0#dR#8Ybnam!MLe+rto>NdjgJ2=MT5x<=p>~GCQZGAZIDooRr&07n z5p|#}F({^^nmPGZ+US~K+i273SZ9UM6gY5zBWR^R;5iGv4o}3qBRdrXVQF@5nh*b5 z0dm~=`GIn@j|zq3I1-fy;d(R(x@MufXaO}Wrf2yp1AcTdc!qTXemLW7j-$C1)qw(k zPK7$3omgq`+5!I-?r+ z7c&h{0ZzCIit_`$U?9IFScPuLeK8x=Tu2^W>c>cm5aAl@Z$IH$g>+_OvOLY?~nUV_R*s}=PX$5dJObvss6rZP}ivB2~Qd-Ose_~a}pc)+C zXU_b|X_4d1^N=b{l~>trZgr7esg>b+rhpNmq);I*I2L^|ztnGyPnZV7E*zQuAo}xy#WiaPaIBHLWh` za%0NTm5M-EoL@fAAMT~ydth${S?XUYDU&P8DoaZJGfT?+*)$u?Whdt1cg>USYB+vg zxK3(L8LpF^v?~>%N0u19RZiUZo>wZ*t9y|R&BC=wA~FbrXDa}&zB&xvP-C!(6oQgnUw%5Cm z2b!_E>iKYr@vLe}Y5u%y9xEBDQTY6lU@@Jj>N+ul6%Kf;#T*((#`vaI$tCs7k{<%c= zBE74SR{^-)uU@yNcL@(o(>3TtVaHW1#^pw! zq8zIUO2F@v$`Hj=8n&ntNYWW(EL@8Xu$@vAvn5tyb zTs0q;8sqhh6N^UOr0pU>R&rN+XunIP>7FN_=6U3_G#ksUz!k!bvuFCUD)DdE>XFN( z!n3;g?Y@3P-BMM@@)B#5rS9w+dtON(Se;)Qo{M#rmCmQ2FzgodXyu5)E zs+HAI>?Ww_%C2NpI$o*i(ecLma>sL*Q%z)FDEnd2UbZW!s%&N0?s7Z(v^|DId$H&P z;@&FJnn zgQZ%Bz}{RTSo4P53e=geTOt<^Q!@23BHclloRaP3D;sO&+=H;3J(s3_so8~kHH+qN zt}$3?2~<~=EcElrG}$ukJiP*`7kyl*`U_71`~i-QY6WpjYFBdHU%`YH3tl{Z_LWzc zmhxQ-50(%y4yDrKrsu2~^YI-Q%2}0IuCfdvO9_{Q7Hdt^r|x;+4nTEz38n#7AyZtk zy5Xe&x|&Y4N>GTEoS_uuHYO>S`PLaZ8A(6{s= z+{&PJ0nZd#S+zWP5|$2Wt(T@=SS!gLhhxt4@wf+BUX3-;8fe6d*aBZ=MQKUF;_Q^J z29e6UdwXO_)28UGy#c?wqGExq(^~}?ivn29+M_}}jNrohEh1gvRNRi}b-5#~6sa_I zdPSkXm&&LuqjYUu2|W+}@gNnBEs;(h8P4Q@l9JpN&(PvN71J#Hap`O&T;l?2*%fKk98v+WyRgo z=yP(RNnMUaCZ($rL+iIP`)DE#zq6?1}jUWuR`X|RqL)Z5!iU$^&G?t zEVf%~`$4*aFsrga?Oi-2kdHxUDwbnV1mqpYIk?L{ zy}E2JZg#L*_z_mw7h(a>SXfnFiJ}IJ=uEc=f?Gzu8q70L4^M6tOgYo%ol@e(wH@wd zAxwH*V|=)c=qtq)7hHH=b{Xt^3Eh|TW%>E~QWjxSe!+sDZfjJPjZJqprqj4U`y#Lu zYTYEEMeM3^1z6HV_|(HJ%%&{cW!T=gFf}f>G8@WfC}-n~8%w+&0?Yf@>k%-Dv?+^< zN^v8-n_tYDIVIg{eRZd1GA+#iB$H6#5bN!WmeS=Hk;S%xS}xp5c_i;W@X=K-2s-#Y zRk_u3Y1Orxgypy0NcP}J&(;!EKIPwhXD;AZ_phw`WxN{aQ}yo7W$`3RuOjODp{|u` z$p-@?ZW{PKy%^%)uXN*3-5D(Omto1AcHFR^q+(|ZR`k%7bYG(2RaVXO^)hgDgN@rG zCDrHSlKU`e@KqG~0<`k(D=G^j@g=A!JkU2o&GGoA7?)Vx*By`By6XO4c3HS#N!2B#LBvf^StYnbs9QqE6xwECjlQ5V16WV=F1GGm((P>O#kiH?>$+h` zQwP@=thuYMK~RMXUW$P*`n;-BSf&>$tQpFW5xf%}oc z#g={f+zjk7pti6AxIdT~3O%YX)S1NZB*Pz;AQ2x6wJ8PT_+~zSL1$eBw2ww z%r!xnAXv(q8hrVMg*0GrtHTlKzA!Bst18(yYq?*o??p6kHexUwfvzgLZu4rwm0F=~ zrLI9N+NC_%&-c>x6-kP8a!W7;cPr-wi@T@BUIyOf;lni;HoTOhUh1MIrLdwbANwGr zUfd)t^jX6IOvr7ZtEpp74yKjWbeCV-+f(H!$K`W*0ol>|iVMx+ibBOFg*?#!4QGasZ)E#!yEK?-Z=@&20JU}|N4Nx*Y9E=;>7z}_iyz2kfpe2adD zcOg%t$73GLUncu-T@Xx%>#EIfNQe+s5Om?5IC%fXSeL{A>48Sz)MAu~zfaH2_PNr1 zxHYeX2A#nO3T@dw?D^2QebmW9ADy*Mc>{FG81NHk&D>etxUPy>_m-`#6>3XHHZp|m z>7t;_%SqCdjml|GLZK7a=~OUfA|KJ7+{xI`fz27{;vB5iDr&yk57Uj)lg@5j{#e1HCefWOFx(1i_e5T|?3VdEmDP2I7zWSXzsk4U0S zf^bScWo>DbAMa8X@Au}r(JJHM)16q&5uR_#5C@MT3>su5JIohaP@t*gJem=@x) z6tgUAijDP(8oCS{s4b9C zeMb@W1{Id0Q?^B+CMhbxiVKD=+SJseEM^xO!ELW3aOaapZkz>2uLIuYO*OX@8+FsKs zGIx!uFaowca=4ZgdYZUtGqO#>Zj0FiHVpE_Bp1_rE5uakP?Aa!gt}amz)^+z>$p+H zlJ-#}deERVHvNWm*@g@k@5WLgga0k5$vy{D!nr(S;u%G^7-~}~T<`ZTEJoBWEm}}a zi(WrIWnV$4`_UR^r?|R0j$YQIz=t@3UD8T#N%7a}KO}=Z4Ge0s}&Ci9`hc__(h_H1%4tXnt z=vf=Ej{P)US6@}h)ADI&H?Em;%CKRQOWYM@kh&|%@K6*$AfHu^J!4h;bU;|`)XCUi zOw&!8YGS(VqkOQ{5OXf~CP^z17dV1yJxtN~0T-LIx zi)U{RR+FQmve7F&u6v1=LQ3@Ops0c_6K8sO!7%#M8zht4 zdl~YelvK4!AKn4bbqhx1*bB+-m7p2qUTQ%4>^C1+<==~hvO=#GjfpSq^PZH9ChN~_^@y;+9ghWXEu{0F7uO|0GTx1}yB#=|kxiDu^ZCYF(0FG3!9 zc<;ozI~(;F>n=`2kLfPx!s=_K+L9h2=jql3X?(*yvI0!4tNHm8G{0|NO^pvr9aZ$i zR|yt87A6~|C3A6gP=IU6#khhlKc%Xoi=xQUov5sqSbw*+s&+x^8`1}Y0H?T;Pe~!Y zSOG0K@kCy$CbLxApr8bo6!^zNj%9vA8v9YPADm#xkwGa#9 zCs$(J#seKyr*a#R#Du*i){htBK+j9k)4cuklhO*&`Mw4{g^LF<^+!FEtDdh^|Hg7k zI!zdle&VRkkjDO;wvYIi*a6TQ$5KkR4=|-sPZam#Je3~xq_--C^*pf3$;wToL1N_9 zhx3oaccm9EBnf|14q>Qs@4|Fmm77XqJzZ}rQOJ^`W6b}L z|2vi6NnjXG*x}%k5dS#weXW8Ru{M%`NCIgN$m;RUcjgckgS|hUEtsKWKdrH;Q-Pisl(&T&v{+FF%C* z4={dfrDq&xtkO7i6`${KY|!{04=sSZ_A^>F4vwZ@2t?H&Xx#1N#oWC-l^Za&=$dGXx@zAo%;EBLmw@>J*?k%5+A`Y*L*?* zzgz1~ir@oUJ~@Jq(>No7->T)^5xmtd>H57nRyi%~jo>Z$*%7?uZ+Q`Xy3Vg9f^XFC zW3bXuYj4M&^}N6Jo~B6NdLK*K5oGe7Q9#Ry6bY1*@Djy@_B;Suk2v?V!_jIC0UI{D)>4f-zdr>`8FYchLAS}Prr|4eL4hx zsNi=C-X(ZLZy0uU~z`e7xZGtGbv^5c~x~zfsMOwsTG31 zLdZ7>{s6(R68x_PzdH)wEcjF*zgqCtZ>>>*;)I_|ev6PlSm@a%_}PMQ6Z`_fcSPY0 zk?%=D-YNJp%a}N>7I9wkULk*o&{HdT{pu&y)+l)WY8~cR3SPegj`?Q6({H(1pDlvd zQ(Hc@LX=bT+l2hRmJ%GT_XLq@dUuo+muBmE0rC2kP56fSvf%M*w6J`!;4c>CtP%W` zf;V(It^8Oy=@aFb;t7Jc-cd(soPxLBSw(!3;PEP^@F!XDcy&|wlP-9?YAgJ43;sY+ zAg|z^VQKv4pWqV(pC@>{8Zi8+74rni7Ylj3LNffR6#R){)-Y;>o^HI5PZsjEg2yYt z!kSb6I|P5D;CBoDCczsobMQwVA+IlSIaRvgCy9QMA^5)t{f$DuNeAlWh#uveNtxV!~W(9Ap zo06tSzYp@Ls2_~C+Y68s^8UnTfM1>Y=q>m7u2dbQy3O40DAMeul4 zZTPcA@Ob5C_|qzQ>z#{qa+~0f2}>JBo8U(Z-W2??g6|OgD8cU*{BeReUheYSB*DiC zezf4@1%Hy@69lhc-OOj5f#FhCk_or{4y(J{f{{StO2b!Q+*a z;g47Fc;#gHGh6UjUJifq1b?{5w^;Dw!_tOPDfkJ3uMvE)&{He;(}esA!JjVpM!`=M z{7S)}A^0Z2pDFlNg3l0qv*0rYzgqB<1m7a~$%5Y^_)A57TLqsbCo&>>L?{KBlPQgzT@=1c%uY~2Z z$%3CQ#{<^P33K2Gp{!N&`}Nbm`Q zKT+s+3VxoDPZGSo#lmNk1z#-W(*<85_zc0%7ra~WrGobgzFhFL1%Ik2f1cnggnY5! zokG4+@QVarBlt?8r&jP)f?px{px_$?UoH5Rf?p{3Cc!Tf{3^lM2)jhe23s`h5T;8FA==)&o2L8D)>0T z*9kse@XG|BAo%5icM4wLYUQ&@g1<`0Ckwtt)GJ-^R}1+J!LJa!Tks*ldj)@u;Aac| zTEXWD{yM=I3;ue+R|>vS@HK+}jo@nqf3x6M2>uqqHws?AGM&$^6#T71zDe*a1;0x0 z3Bu0Jg8!|MUoH5>LcT@tcL@0{g8!Z1TLpio;I|3BTsPPy*?7UP67mUxe?ag~!9OVYB*Fim;FAUaN5Q8H{!fC>5d5D7 z?-u++g7*r(S@5$3|A^r81RoIgFBbfxLcUV)e-(U<;Exk}Y6btekY6GA)q-yn{2IZp z6#QDjHwk{8$aj_CpAhoRf`3x*s|Ej*;9CS=DD-a;{4+wnRq*QszfJJ#1>Yw4je<7? z|E%CU1iwk}y9K{l@W!iM{$C=>A1C6f`3Kud4hjc@Wq0EP4Jb1e_il3f`3EswSr$R%DF=D zwSsRH{N;jQDfl;q{wBe{CHPf>PZN5Y1^>2?UoH62LcT@t?+E!Vf`3o&t%9E;^lTIS z`$E1=@E-`?6ui8z+9CK4h5T;8e=K<8wJ!f}7kr%Ht>5IK)A54eA>FBbU4 z0>4<`7YqDifnO{T)dF8Rj{eqNw!xgM{fayuFg~-Gt)^=P|yWFfCTKdl}zAco5+X#@7(0Eo$w_jF%D~OxVfz62e0W z$1@HPK9I1%cs^kV;f^0bjG9Y0o^TuE3kcIzwDwlUGYAhQ+`{-Q!Uq#>W;}`TFv3lY zClDS^xRG%R;X?@5GCqOup@b_Lk0hKxIFIq+gbyR^WjvJd;e<074t< z$@tq-fR7>^&v+-{qX`>~KP5bZaL4yl|Mv+y3AZtRgYYqgTN!U9Jd$t=n;5SpJc@85<3|V|N4S>pgM^PKT*>%u!bybl7~f8KG+{5}8wj63ID_#ugij=# z%y=o`lL$K*Uqbj~!tsm)gij%CFrH8NRKgwq=JqF?Ot_8l1%zpfS$iwv8H7^^w=h17 z@EF3)j3*IJCEUb#0^u~mjf_(Wk0o5o_yoe^2v;&5NjRNw9^=Cak0-Li#wQRypKvAPk%VUx&SQKy;a?H< zG9F6!0>T-L2N9k_IGJ%D!WR;DGXC}?;EM>yGu}z~*MtqmpAz;F?%2caPdJZo8{;*I69_LNT*-JO;Tpnu zj1MQgn6Q`eP{NlG&R{%<@TG*48TTQ48DS^mZ%+iioNzqjorJF-Y%u6>mGDx+EsUQhTt~Q>@p{6`2sbfaOL#fqM#hg2zKU=y;|B>}O}LWr z-Go;V&SQK#;Sgaj;~NNHLpX!+HH7O4Co^73_*%kF#+MLoARNy)K=?Ys2IKjJuP5BG zi`$=YBjGm27ZCmp;a0{o2;V@sh4ER0ZzSBzcoN~82sbgFK=@|Djf_(W-$J;S@d<=) zC0xmPB;l2W^B5ma_%^~`#zP6;PB??{Ai}>ToXofn;X4RB8Gm~M@b3u6Gu}z~PQnJ` zPYM5?aL3o&{)C$dw=sT$@Lhyk8E++gH{lk>&lA3fa5Lleg#SReiSb&(_Y!Vo{0QOu z2-h-xknsJ4D;eKScopG1#e-2IKjJA0piGFK&Or&4k++UqJX_!mW&F5PpPk3*)m0KT5cn@g%~3A>71x0^z?B zZe*N7_%Xt@j87o^IN?ghBMGl2oX7ZZ!fOb784o4AmT(5+L4=?)Zw^pKuG|HpXudUPri<@m9j?3AZqQp6~|3&5YL*-blEK z@mj*q5^iMt2;ohHYZ*UCcr)Qj#&;9mLO74{?S!8r>}7ld;pYiwFusQH3xtyyFD3jp z!cNAQ5dJ&ic*X(3FA_Ew&nNs6;f|f${)Afzw=uqe@XLf-8P6cRm2eB=vk3o#a5Ljc zg#SsniSY!&uMlozoI?0j!nKS~Ap9EPO2#7zZzG(?_;A9n6ZSG5O85=J8H@)Jev@!A z<35DnBJ5=RZ4&U?gyR|SB>WCxgYlL8$dNkew)z~@ec0T618;&{`C31(}HJfq0>8_vHjuY;N z;kP55JM_++_R$E#MUD|PWx(@04HIKXydjp#?H<27I2=nCXHXI>T@37ObBw4ZxefXV z`IkwsA&tu69{qzm)Zt$D`I+u@yZgFhHo0H^Avg>Q{(6*B5ZBp;tg^b&)A~s5#Cws} zs6KI)yKdt9kVLsY3Jyk5cO5s-FkP^US%`l&#a<4%n2V5iIDbmtz6d9Ed1hsvpLt&9 ztjw9Y?j<|uMIJe!ti+m~j)RsZl1<&A@7?ti9FJd3158of?!z5*v-%iD=mk&c6;EiF zGeH_b^8C@PBGrpV5 zX+WO(GrFtE)*?Bfza-W|yHYn5?6mr7Bh&HtRU*%GSi?fMd-*QMb-TwJhO5O>x5?|S z`=P(1uJ1TXle#IV{&Gqu%X&JeTcpx`pwn&E={^Vc)c4!$8NbP~{5VMF^vswl>#5fn zZ$$!k!<5dhtlPj)*6#XcT#20e^oSC~$`Y&zE3nG2S(afZnx{wQLl-6n9m{v&RJa`X zht*gn_$#Y9a?`Y)Cis|BY7^WHIWnDb;@#Y6*&3DXbd_w7O7<}&+fB(lNam^UpA-7V zwX4&c>JN}G24%KH!R~+RAM?ECG|68d^2V{ z%nQLL)^}4P&FLvy!scIa?MWwB0OW)&OH9ZKePMRuf-IauOFkXbAL7qqjBwXqt90QE zZJlyA1QQe1;){{(YB6s_T2Fnpk>z-NH3!$sy3WJh^*M<(j=IxRV1&hSu)r;lcGr*Z z9;fDvA(CTijAQv+pq%<+5J{FLiXeC)Xit4GQAM*Wfv78Q)X}V-RUk8jw2hv1KR9#7 zcQ}?$VK&Ap5enp}%K%qY*V*5(oOHNDFPS0KZF?VA%T7nU8YFf)E@=76aS+Ch%-YUa z$FhU_83?V9y;Qfy;aC;}*R0!vKHU4~D#p%XB6BjhH@ke}a)A)x&$P)@T{u6!44nzKl zP1ygt#@_@lq{bhOvi~m|pPWTav$B33PB4UrP&+56nr7n!KbYDH+D_{31b%pjc7h4G zs*z4`IEFFums)m29RY?zNH{@}a)Ouerl|j&6Rd+bk`pAN?7ujHhy-!ewQVE8(U~?* zu;*j#1aF>T7)!q6cGdCPv25^h#8Dq`EH@F2|BHxy5PXx`D~N3NMSD@9>>~EhuG7wL zkJesi%&=)M&qunwP8{8{y>^f4YOm`5uD$Z%M$}##lYVKhZX@lgPolQh6r1+C?E~Fj zmmc4_M)c)-x}E-kHkr2kGsm)8 zcz$S$Cp<0n4BYHqOJN89!^EBTGt*jAoU_tZv?$jCo>)`DUB4N-rv&jDFEx zhU*D7-ekDpPdDBUwAufMjrS+&%eF4n7fWkmlC6w)=exZ&-dBj~?Q{*y#_Nw^_oo~0 zA?P6Et?!-ZQAhTY!}Rjf=0Ekgn)jm_?amWzj8^hauZ{LJe7WvPzMhMzKAoz5=t%Sd z>`!w%mX&xJE@xc3+@VkD@^b}jk{Q~T$rqB|-1&z29x}%jkhA@RW3b|dv~S|Lx3qNa z*#tG5`bL^DQ|fz>YM))zeg^-dqIjXSd+hknu4>~@-2GyXluBX9w&OiNxtkBEtJ_g; zDIaPd;M|9;a}FGtTIZ1wzqC%b8PP4&Wo=vMEiC7Yu&7$+>Nj-jlpIa1x+lsBGfv=p!9#)cYZ$epSPp6%C7ElSGCHQ+jOh^s$^Oq1I_TeBZPVCV%@!>uh{ITI)(N9|Aeitr6tuqNq_eI~y*k4-bI0{v^K;QqO@7x0y zq1NdSrTe0Focl}P`II_?ZQp6KTNQb;RkzMl!}ej{iN$C}twRsC?2FdfZ^oURe?)7Y z04DC!>FtyG;nn};YXhyB`{Lp>VI&_nDzqkth^UKj%XC`*g^k|*m|6RAv zl7pyq_R*~1Ik*V5&Ph+n&{}b1C-4HDt!DGe^X1>1=s< zcZ0icT}%Jv&pABn*6r@L`wh1lDZ)_fx4*~uEF6T|23yL4LiuJlx z&h1aFvX938+u$11D*uk%H?0yaj{R)9I+gCoP%kjuodA&uq$`go3`zU_JV#K00 zp%;7Xi=I*&rKkMt_JZYXh}JeE?e5u3d`7p;2<*7rM{QGr@rv5!Zc^}0YK~IOf(;ZhmDa_Yr#N)B1nBYhW|8HJ4-AopcS`Fr**egTD4) z#KHC@7!6>W#GKG4{InN8wqrd-vuv#rk0tS85Z^w_eC!Eb=s%&a@l!b->rtGg)exUn zpP1NQ%IPN7)X;NcY5y*x!;r;5YyXK+%v}E%m*R~JKn#akJa};pvViF9*)fKB51*d6 zNKx6Kka`IYYrjIAHJ7Q>Pg3e^l{yEa+Yg4+h-*M@fD}}IK@Zh5q{Wg-FQvg#dFd{k z3T+5`;S9?Q@qA7KJa7ByIJ^C5`sXnEXV~^W+bKcU^E+!hJHx4a`0zlq4n1yr*XqvB zM)5pq-H!B7PU1QCC}c@phqbas9P zCn%*Sw=PR`7H#gAXdv59%=suB9?=a>(=o&vb-BtZVB$wVr$zF)h4Q_Hdc{VNITSBPg_BC zJcGCjW{7P>cSSNP6s$25#Y2lb$ibjI4$6;>RE}4`>3GS?0adVsxKJJ^l|xlLRBd}V zqMRs(R0U|MiWjQlrK-?2Y`#kuF;(_=Jc-hN|MygO=qYaR?E1Qx9*3mpxDgYlh>m_S z#JHmulYGO(>+w4P=xPV!b^YjsjX0$$!PO?D(8wJX62P-YX+S(dj{AAraEru6IAdiuacr{Zb#5iq#B9{YdOmOvQK%2(sy zdJ~U>!tK6=CO4ZiVNT|+H<%C7^I#2W8(DJ54iiZmE@Xdz+1|!Of>3xBDZ~?WaFw*X zl;9wG)(4J*2ix8?7fuF%hr-F>>E^fqg3xcNd=0c~GPI%Y+dkDU5}eqK%yB*RS%#AcD;KJR0F%{`ubN!=aht1}vv@I0J_i-$0)b{p- zesI^PjiU^ybC~|eDL#B-{_b)J*KK6WK`kCbb~n_RcyxB~+i^xUccS^Ew{GGD5Jqq? z%GTN0;aKP1y?tQ4dw0XRogwe;<m6qHm-uM4YI$W{KPpP)6ZdI zY!UUKiezM=XoIuxEe_9q4xnN|VlQ<;p>BJ?b}M` z?B2fQr}V-Mw6SVlJlc!rp!@xJBX>D0`)Docw!GJB8Y&9}J$=gIEQt}fT zqO{)g`Exj)+DBkIGww8!iB?Em(7g}Os8?eW~*`@cP&y|?%FSaa9@Z;!uH zOz5S5JkYfN+v8q}3B9z(ZNK0D?Qt{3gkIVsbm#tWkL45-dTEcvzuW)qQB5(Sm-Z;R zqq{x+Uz<<1P{*|`bkF(ZUw+Gl{{PE-@?Pr0wx;R1-g4XR-P?12oKN0NeYltQ2;H{- z+haNP;a=Kf@yh+*9@P{cdTEc6Tlar^_$emz(jLFMW&gLwEQ$%ew1?;B{ofwh6cc)B zkMTF{|Mp0un9xgmjJ|RIx5p@o3B9z(VK)eS(C!)RF_^gH**L?zl6n&M!G&VWHsNjF zcy&2$4#ztV>X(RpEqA|%lMO>U=F&bCycz%bOzeN_?96sOXWrk4-4WfTm%Y!@LkoD< zN;m1nJ*A62VChsF>9c!EyFX;<^KGP$>M4D~M=X7bjr14S_bB(^k6HRo8|igDr9W5F z>uscO>?z&)3G4pYM%v#~`Vo_*4=C(u!ErsM3*TnxWE<&$J*9Uk=?ON{Z(i5KCadXf zRt-ZkY^49xQ~LRKmd>$}zOtwEA3tU3ppEpoJ*BVP&eC_-NFUo%x^f3gZ?uvAx}irc zXMD!epV>%n?kS!6IZGev@7X%H^^`v33zp8bkzUYKdbg5ZU?V-Tr}P^gtos%lX-7}# zQssl|Y^2}2wueoo?_}LC+ekm!Q<{Ds3Vsq()YB%*drA-e7fZWrq|fgu{Vye*ZzDar zr}V2|v+f&gq`#~0QOni4SbC$4^xu0*-~J6t@3N8peNXAjcC&QSyq-3>xTo~5_ptOF z8|leCrRn#CVDIZ}q=!SA_RSp?B9V!B=L^4_aZdXm6Jv~S`@!lbE@_D~+6$@sjL0z5 zerEi-4u*xS(6gS5eZr;Dw+4-)KbIg~#e=sNXaZc#l z%#dkbd=0i_e)FoEu5a-<#&B)*EZ^j~X+7<0qpg7a>Pd4xoYdM>`{G|BcEbJ#n`&wQ zvN?;!L*B&cq&>0xlmTsGJc_oG(@t;NhM5e<*^W&~YR|KI45xY5d=BLf|6UUR+|bNi zFE%`OZNdHo3A=5<#;#}lF2*yoeJKZ9u^!BZ+L9s?KN{QMSx$6?)j@dLLw z9{)Y<#(sd_pzB!v7kqWsUrqJ`)6zFM5{Fu&dc>OHiZc2JN6;SLVO#J+M(%ZO&h4XI zE!&S#7RJ76WBYKV$iVM#+(4?>@U+X@y$1haNBIYxo@4&zS@%i&w1J;E9)BTc;2!tD zbyoWvi4EXeuy->~8*GExElis@@#99<(@%9c9=n>0-iD&9GB3-)6krYBOklJZ;2T`6 z#0^hxNc(Ie9fr&YQoDp7y^2r2$b6bQ3_1FY7(Aa6`xFjqchf@yf4UmB4{z?p{=Hn3 z0$Zg2`Uo6jyxPj0LcR#r+9Qo8P)_5rVxM$hwLjWH6n1e#XuzD#ytp}-(`+`KFcGyU zId?LY6w&Wp#Kf3eu+iOvDNX(AEs!urli$*>eb638Y#ttJ9*W*1nBYO?tmW8niJu_3 z85*j`Z^wft&$Lq7%Q4mpNyoBUm?m@cRZTe12Xd50PH2}o65WTktiA#N&+KH0@P<$9 z>7)(O*Ds^4acP{n5J}zj*sso;)@fHLwtyy?*K_YCSB{+pPl4kb!C3RT-&nq%j1A10 zKDhV98_&e^5lyMk0y`v-HXP&iF%Cy-Keg9fTZiq!X_zz1{kE`H?UhcWI*>yf;!$k; zvY6>igPw-rBWA@IYv@@4(5_wP8!&;p9{n3T46&8@;D@nCxNcp7JA}>8mtrR?`o4MI z3X&oFs@=h#H)D71C}OaKn)eI8Ma<|;lbtc{x(!H7+uPNy;<|~QIA;V$a_CW8heu#T zZ#%Qc3f3t%6yNO*eQf?2`EFk+>E983E73QG<3b!9K*WVTWM#zChvC7EUiQ32sM-10 zU%lBJjHI*KyVheXeNkgBEM+drMQdCNkBv1?$AnaQ-`(nb?Ump?klHkr_IQ(XZ+i&T zSmoTL#3kP$h(Fw9wVHB)s|R zMjW*0)hqE0(%a||x|){1J)8N*=&UrWK_Sf+9IQ00_=Ys`5J8$YLYuEPaj?>K;5*VV zR)xNrYJ)Uxm4=>bLK+Hi_@63pbrQZHO*&zu$qDUt$F3j_=Q41FxR=l2Yv}6Pipj%) zND?Z>7bxJ$>P%~i!l_1mY|_UqI8F2|6eAgLwe8WBt^4mA;kI*Qb5{xbl)X*H&C^CZK!eC`T-tM8gb?_>+A^ z79xO9RHsVwb5ryXXA)6fqUcL9e?c0r`A`NZPJJ(ZLrlfb8zCrvY~G75LeH3PqC}8L zHtV!(lDSxai!&?m4Q~1jWoM>f=)#D1A`0gYx#K+b*OPq__F!K6W-d98>Pl8=CfEn= zrQm8nWgGfthJIz8XaPje>3A#-RZFLbzrH_{7<5;<*w3I6yUh>+Ho{X1j8Cmxw{doO z1aFu)AQOGJYi+PJyb1w7&O}X@`G^tWb9|2MvQBMqe{wgY9$L zpFz6zwfKh;y-gET9ADALzw6_(`uG%%NWT4)_7#+@4*yVpg#{DLOq6~5B1(O$l2Y{Z z=TbRn5Ob2ic_gq(Cu6V7_S8a zlvBDn_FFbtC#*q3@N2cIR-H6iNBVDY)W0{0*@D--nSKXOt%qdBIS$Iicyw`+tEG10 zM9f!Vm+#z;?Dg(YX0m&8W;!j3Kqdo!NST?3ln{C8>8}yT%xRY)2L$9p+#yUnF+ZO} zCuwlQv#Rt&fs11H&-fS zKc6suLW#nyS!|=~y=<4$qSY zhi;#qSwAJN!QGh|nodmh8S3W+=~>{qi5EvE8mtl>hD3u^B4VlsT8Uu2cXfr^FS@jQ z0Y&+4xVuOB`bTEfoASN9Dxy-oDWAFV60&x`4G(=^VWSHm*IH&2cDmWHlVrs zqds|aHkb!O45oe7NmqM3GRFQ*e|IAEB#lK=p?N-GVE6i>H0i2WZU2H#|0G zZiQ)xW5`bc#kqFTbCILbxO~DqM-SP_=Dk-aF3vm~9axoyJmq9u+DZq&<~}jIh8tl% zGu5f*T*dce&eaFAnYxL0;OkzVj(U@3P5E%H*^&Cx{CdfbO7s{!)9j&{qPlW4*P)l; z8Ep*e!NV!O9HT3U=_GztcD;EQ^litp=46-p4Ab3kdOvsF=J@(xzvQ|XW6bw!DEV0O zRV4q$e4mU6`ye@!*UK3FLg5-)d?KuNsj=X{ZKSz@udk*4nG*h@B&CG zGX|w_JYJd@7c#ex3YqK7ILFhw%@^R}5R50mgV_G&HtHOYgDVP6jw=c+7zF=Im~#({vg8ZR(duImggo zn8*3{OZ=5^LT^Ux4>8pvtsZ(5l~yDQ z--g@B9%^_k%?BgluQ>Yu3X5{#^$C5teHc{?>o=j-6tk;+D3!ahYyDzZCRrxc9r{OB zs6#jA(+g?H*z5`Y6FrJ9>E1>nOd@hZ@2d#SODEKj6{^5hd>FEU3Otnx{1!A&pxOAP z%6}GJUN6~Ei*xun<6v3n6?f<>YU7j4htWYZLz@sT3lKfOH)D`A^eoM?-XZDw*v3D^ z8MWy~5Et~ZgK2cC=egtZg}AsR|8Id4P`Gt0KMRhFS4dqSVhVptSggL)m`@|bwL3a-LH#dQ5IaGX=8?liY06L<{Mh8*gGj0i z^QAt|g{c&USxqJGR+vgv7)Q7;Y2m`ubKJWuvC?!=yseKt0hWc89m{XQMPvIP@Q-=E zD%|g=BWP0%mxZgM!Xf^M!p)S0D;9-2qDSG1RpA2R!D^*7vYDTA8&SNx3DLZLG!^D~ zRuCI63bW!cVX2@h%so|ImfEb(v!xKH!_9UbmAIRw@>F3y;&?;Nc0jl=`MNN9<^U?p zL*J9RFww@dsqb_)HY3~ig~Y+zU&ZRby51J+rOCWr`YQZ=MNZ;?+C81YA@taJO!^kb z@}uCwIrYcV)kxe|nU0G7MUE@sgGG)jT24pgewUmV^>V7@i3ubPv`i zq1qIz6Cz^pOf)mzHqoE7T?lPhj>OQYyZNmFGDBLXQu;Zp)h#NSui^Z(b~#i zsC$D7Q}8U}_3wwp81<=3sAO^GBsNsqzYpb-Z9q?f5?sVv!^jPkNqy`KOhHTc z@yC$N!9@$Y8Q#}m4#Q-CW6mb?FoZ6Y?jEH$U6t;-F2&&cl`kf zJ8F8-`5V4)M;^gD5Dp(?Q>J}!2pMC@eLyOHAH~VoX=o(xY+OZd(+?2+o`9*WIOm zRjFKhaK!v$2?BxT((j>sJQvX({cHu?ry;FE={yp34Q)n4iJ{i)1GVI9@#ZS3HeK|- zgEuyuO>v`P_%>8tCAkl(^-Sm`XoXkB!K-K-A`e@3N7%zoqght<1?xVe$^ZA}Bob~& z+krj;eYdebng3EcU$+tWA21r_)N^c#H;+VFaMiDdTTEL!f762eNptW%xX27{leAk| z>5%C_%CDZ~urRS*o&JmuLnfly%7e~BUMe2ZpnEhHAu&Iu;dR5r*@!&V4l@XA;8*N# zYMHYEQy7#xRh9cySP*w&Xjxwy;ra5gB<45mZ^9`=`_t?b?M?BkU!rR6YP`YY6O;V~ z^FEp^Oj5<1qKbJ74yu?BL3Nidp8rMF_b7Rd*0+dwHu42YR;sCNvSOWdUZ6@g}t32}u4gz!)Lsg|vso&UzOT@*{ zu$N1jKhP!O8E~HMw}%(jeLR79*PI8NTI(xnz1ll1w8;~C2@_Em(D7J*6%K=m{nsL2 z!@LT5=v6crq=I-K(kJFerKmc^=8wsg^C%m zCJtbAWV=+>$XAn4_>Fm!rI4>B4~eGmA}9>6*Qm*Hmvhkkn{S+=4)x>IsCfsu0rE>E zcgD&SY$6J7Fr^8 z^g8to&JF5CIo;1urk!Qdch&s?4&OsOvh(~Y44J)L1-F%bgrWlmqyGY6R zhFWfc?{W_~8Wn^qehy+UuBhK7^DuQlWY!LQhp(U9^;e>w4Cu_m*foNd)f9#!#dWsP z`$P13r}o#b^9k}iXDFP=);PeQb5rN$i*c*Wn$GXag{PQI4%qxzpPo+E$`I_#y zwif=@+16eU5ASkm>-rIwbQA$1w*$nPJ783+XJT3A6Z7m6SeYh_x^KRKCfZAw8$6GC z=+nBll(V+3HJ%@e!^*f{Ua@y&&lHikj*dI2tJcS!cr$sjeRMpB&V^&2h>pL$2_A-5 zhQ)r?O@gE2Abo+8XSUHyi`RIp=*V|l>n2k2z4+t(6dI4EUT>}O#F<$%TYz)sbTdEQ zPo({MUGXGG%l(r>DY`}M`Wxenx^$y@Hoi|sajlul^WfDLbafVKUeCr!TY}Do`N}_W zz%;C)E68l6^ARzGrY{@JV$^v1UE*5EM5^uo$Gx&!Jfdvs(f-1JxcrW%r^eLn{^1Ho z?U_b(zhx~~p2HKP4G0NX=#DKoNQH;4$t}Lkq<1929z1GJoW!M0%i_b3MjX~Yib8lo z+sto~A+|$kU0>}*m!Wj+a*zemcJpD#FeF$@(;w3HXXp}d9qXhq7=?HoZYahpTHvVU z-q3A*^F2t*_03E+I1HrMH`k$Q_p-kE|1kIE@lh2^+X*BPz<2@@jEEW}Xd<8ii6(|< zBHJ05AnqWDxFKHgUW6IN1qsXq7>5yj)$4YzqPXC8MMXs161E^Ji;CbHP>~)71YAM@ zA>Z><_spCL0ezQ0K7N{WPOsHf)m7Ei)jiFw!%PUCrA^kZ0;=&==5iJUQ?LH71Wtw? zh7Eet1!Te-Wk@?W5YJ9w5WI3S<F1gFWV<1$W@|vWj~dVUt|y$L~|mL3{7d$ESJ*w18uaL8*E0{m|coWRRU+ zUa|YNVNs5ObJs8nmWAbSfh`)SlPAzLpnDpvEyl`CwnDJ{40F2^5TLPZOJ>U;g8?{H77BOKeOaIw&A>Olnzp#fq= zZ+|U}l?p449q7_~uMo^bS!XX91a*cw>bL`EhS#FQGGI#YG+|u}SiF&GNV^yAumJ;fHe6I|)HPW4R!!1mgdY=lHW3kKDv8rw)ubP-y&d*d+-x=Tq4IZ`xEI>s&a5N^-T8x9Dh!;q;U7 zg%Ge0@K|ybaHL+ix}ibusAp*YhO8dUvap`-9!)?B&IlajaIEG-o~)^&0iuH&rNu8 z*ZFW5i4-yyA~r)EfDT{>1sGJMv#I1{{Mht}G&hyf)WeYX!f%bBTwv7EBx4n2sK1*x zTV02@$S~7ElMEU;CkE9G2C653oJbc_DZdeMB~F5uaK_-;1uPM+`4~*Bt(&B+J?efW z!XAzKhx!GoDC{dg@swdfwt4Miv|?L^T^-Jvx&;LrdhS4{R{wBm z)y|ZD)}orSRtlCzzrgyTWf!Y~v>bfPp{W=dpgljF?d&KJlNxG2*cNA(6C#HJVqrJ1o;`b4Pj6Nvq6z0D_H`>(VCjQU)?myOo!u%8+580nb;T8A6mAa$?;IbOVQF?v z-|>W&5^KN+mf5M^yPgtkr}`036c>?q8d&n>>B5rQHn6G(9)-(j2U0f%E)bJI-)k?P zrwBNl68%?B7ifSC^#$1)oVuH{lUi2IKpC@M06$y>wfmK4FuEBa-L#E%(^tY*G9vlG zzO;D)gT>-GnSQK5tu}btH>x4AD;Xn}1^Wtgg9W->x&{KBv#?%t^!IrshxOm-@99Q0 z{T_M>@YC)l*whs&fvVHOyEv%{gz+)}hGx(e`N+M+tYlA>1+UV6iLM5;Fme zy35sYL5AlW&a_#>IT>oy!u3&kh+leUR>hApVPVw9``5Qf|+szf5K}QgQih` z!u5nn54Bcp0u;b;+iA3-!D3BBKNT=9<}JWNVYJca{iYg!!lwx(#GkN>!^GQIwNgal zA<<6*Q27X&-}n<+0m}}5!f9esAikBj6My7k{4ZAnA5MH#Uy_KgGPZm8__ApiIq+2} z#*p#9%qQ}Ksaq-zkFQjWtVw*eMw5ksEzjQ$5KgZV>K#T)l z`$Qkss%C)N_zwfS{8gUgtVPSY57MXO#H=xafz2u|XaS!K9efoxwAiEHFg+$<5f=5^ zPciRs$Hk@!3{BZ}&QiC4!7v-nY$LOwSRUy!@X#~nQwo+VWiE*K9#c*1!Dc)FQ3!2V zh?gUbE>rkb?Uxp6)wLfJMF@bZRm1QaT|aRC@Vvv}{L^kooCN>$iy*TM$M~na5qrWF zoC(}LV$@-58*bdtSn-4W!HJ^`V?dhJs@deQVCt&76Bq;S#5dr!GtW#U$k6x(-2Ta6 z47!-_0UF{ZfM{DiM|Qy5Xf;`w-?;&2T+FO~1muZ}xe5X!#u#a83s6C*!=PJi|HJ4X zM6Do*`8~w3)@Q+X45jD%0?X;zK2u%EYa=b)p_0C&E6kp87fK_>rTH^@Ffp03i#8;h zE8hBb?7yjPxnnP2BSt$V>H`y>tez&>q1aB>3;R?sHJ6;Si?41YQGx}9zyTCw9#Blx zbDvPQWFx#hP<7wQBfS7{FR6nKqOOrnm$BpxMx@lDhO>LdG23nja5@M?hdM`e zk@<-LXt2BKp|SjLQ;l3iP7}M9KA~zV^iV;Sj4JbeKA>eECj*KuW0|ut5iZrJFrFlOZc7PCE%1=!83fPX6g|VG|Nb`t7DK| z9)pZO+RR1;GF#nC9>m~44;ftD?Ht?;4cQx9(nKL^Psko5n4yBRV~`yL$~BDF8OVka zvdbGm_JlMWia}O`1-{1FyXGxhy>8wFvSI4CAsVt_2C|XT#0?s<A*nw3Lm(241<_?aBAHL4h z+|__ssDid^19X=*dILV>S^fp^L(}t~9m$~mSROdYQ)2!{n2g!_wOF!<1=^!JLxhwC zRxCjdn?Q?~BVb1TR8D9Hj@9!9#2CuAZ20gs_pBz#kesb2A1h+VLCrIyi>k5WNhIAx zGK*l6k5zWV3cGmhuG?A$OY1AE?q=v1B0bayN+m`n*lJ};S}tEhHhvK$ecx?t;8ZlQ zBm)q#|6oBmT7~qT0ma)tpb+feiPJ#>9aLunLAD{$ThhQj)Lp_gmLB4Lh|5zg^$^D& zZiw52T!##?%J4vRh{L3VSJ-y2xf?@tHLP$q8X}@o)Fev%*brOChj^?s;70?l2FuH{ zRq800_8~3@aTs~raI{rf2%DY+!?L3x+zlU)F2|#4lIL%6$r8DtrnDX{VVtlpQ*x8S zD|E@-x3c6YN68VW|COYUb);Tz>bp_@d^P}>tjh6_Tyk{TaVXT9%|KKh1G^g-33tLr zLT-p13sa0@{@so9*O=O+%&lf&uv3I>hp?0|!M~@`nRWQkGhe5}Z6A z;7M^d72?eNUREK^>rlbpagH#0fL`^&v}LhJtE3wB_-u5_NtSCQ{Ki`_$@26hZjMp# zElce+Bg6RlCR4BwrYFyB{eT)rSQaeQlj%7K;mCZBJY71kQK{y6;C%vv_$})9(iApd zs}>JDWW9y^Fru*!7{cZKNvP#m%ydQn+OBObCtAlVcQQisYSkqgIaoJfS6q!5AY-O* z8w@PzG2jHGj;JF>QDrIw6cJQ}?qlnf1b=w0O9C$4q1zAxt$onqH){#!H+3q+V(R_l zqYw?u8Y4b&^okowRIk27HXUA;{~jr8r`1iRG_JtTZ8cOneh3gj1q?5s?|4E#g0sy; zZ+ZX}fHZBbgxHFVSEOqw}j0(eBmOMFX4{r&#JY^>4FP!qD#m^ zQ$AZQ6q%msHmSz)eb31BER_P2Kp2O`rJbed5Ioo_v7K?conDFU+!|}=9av9^?cAZ; zsm3m~1D+h+PWQxiPLH+YIi#Ilx}Dn-+xeO{NGQ`vZ0AQQOXlxx+JS8kG!Q>Ok%2;) zofB&;G&M5RIg(#c8qHq<>pn^SKiq&3blw}6Cd7O_lbmKyCWo1re`=c%#W^Z9vZtl=~HnFA>&BFi*?A`>k% zo`%MwSzu6=iVT`-AtR(J$)%W+ljVD-dPZ6_O2FYUt(THUL_Ev28crQ z%*Qk8Pq>5@1h)Cs9f?FTh?Wp{~(+TM=DZ2%@=lN$-_G*;X-l1*a)@c9K zDFgL<9wRPEOuHqWIG=Z;eCZp>1R5BsRa=0$o;yJIU4Ik0Zz1-P?gD|x8&Jei55f?X z@TMd5%G-~KeGVnSpSL0P26euK(RD>Tf=sJ_d+Eoy4-6}Fb&77dQaT9v++XGD4rV16b;d?Oiy0Mz6e#7K4JdmcI18E{H@F{IjFFe>NC0F?x zrDUsH8l_~Zs~V*gs`5rD`Rc>{02Pdzj-Sp32|Fz^g0EIxEi!(O`U0TE>?`h9kx}5T zu!HBgg9DW-d6m1kbl0sd+{FWT-HMG`(E4-r0La0g?%mi^T)kUK6YM1g+Q2EAeFMg9 zu6%-**RjPH-M>K}VEyr=2lg|;Q7yFV^!+SO)GSC4MsWe$cZIG6qei2}Q095>YOVBK z9~nd}eCr`?PO4fgg*c~LiX;QSzHx{=j_acqzQSgAb%TX?%NT-7Uo3+NK>swg@(&J& zpNz{R(^4a0iXIS?IF=xWa+7T}1QHmKa>`?jfCEa4qBu#`}_aK0tOu@Cr5|DEs7kxqRW6kx&A` zxoAL1`$e0q%9;4`z0I^FYo?!naUwax(+0bYz0@G$xEo$?WBc!*U0h7pmUp3T23phz zAl}xP!xdd8ki2pV*X(O`0lbH2K5I6H2)KV#KY%{rJbr{qM()8{9ICox7GIz)OWwkZ zdUdPhKD-O>&+r{&KjBsV%rwt*^Gubena+i;u@LSXAWl$8Er{!5hcJ`)l<){pHa_QZ zKOC-L3Qoc4tPFiE+>5B}$Paf*EU)D)_I*OBwLFVhRO9JVao%a(mOY`wAv>W-YLKq_ zfl)BuW68c{uwjtjggkrl>O>q)OTak7y45Vyacc7I;49E#$4E*Tt;x&y9?X1H zgbvPEg9SOcMNxc1+2PRSh3dmbDH-amMk)E~xkf3u>cK`S@Lx4b$x_J>kPc0L(SMAP zsZ|eQ7Ev}>PSBSAt`qkaI2kZ1&!CSE!oH(njKQ5pwb7|(9nMETMkL}F>F+`w?(M@g zxcy9N$Shdyq>u>}tVH~};F_^BHvm@34Jfi93V@)Q&q!KqGrM;vMQ9iAu@rw| zku4`kG0g_8wi@||7c5giPww)BFuKSRNRT4ze`AZNr}qd6d72rN&L@1va7^D0hMuKK>dPvv((L3lEEN(5tq-E3B>(~@b_qm z@zi!;D`{3HTgX$lZvwqs0c=F?cLyr7A^+TgP%a*jw`W*+mHBwJ@Le%Ja^#@+Qx9;qYwee9QK2-sQ?e82oQ`s4@v<>_Go2JJcVL^j~Z*&PIp% zWRgJt1xQ_h(ZT-1h3?o3FKhS&GO56Q?Pfc4Dd@Hh5`D1fz7_7!B%Z19q`Q27BzsT7 zv6vQRGh4cgdo;&jJ*Py9un?@r#B%v+vLeUA)c|Qh&)~m+O_cfuS>8-{pqRobbUi`^ zV&1W`n*L%Rln1U)>btUE*Q}(-#yC#3JZ;%9b1q<3|2YH0DQ@mP&$pQ0Nt4d^G()@# zcCI}*6IY{7>;>&~XDceFzM#B%?2s_E3$CszrXNBxg6?FVgQr z_&xydFnRR)94Y`NbTe-47pML)f(D)#Fg*ML^94&<>;krcwUUPXubawea4fu`JV#ry zZ;LSE%y0Ne{|#RVHhb(lcp>Dp#9g2`N`0nFU875_(WShxQkS6=WfoS}#i=*4%K{za zce-9|>sY#D=nv3L7`;gMXyYQ#0kAYI)eAk*BXIZ0^BA-7Z;L;o23!BY#XXoPV$#qa zl^TUdfoF@p#a;;{j?gZqi@3yOEiJZB+R4Gt0MF!`ub2`jn3^vF7_z+JbrRu51`dc( zE`ADVen8U?(D2y@PmUCFYyHo9F773YkkuJkCVotOQoDpsXYs~_lOVX@a0tu?D0`~$ zC);y;?2^$lBYo{)N>{>Z2WQ5MVEZdr(h11KrIc0bT1@Q-HpDPyJ%sbyuspR04Rzj$ zWvo-Z$T<^?E;c95lR&UzaJOF!F%ZhUVgbQ!P)otPlr_;aDz8zZVOaZi=wY2~hBauu zQ>Mi1?dUXBk8%z)vC4W)l!dIaF4q9mUnBs0@rnkZtPub`4FIyzqb#2f;;H8gWSh2O;Lh?outW)G7>F*q_C55d|J9vX z*+>!#qihEjz?EgbhNHZl)xpyY^~J5X06Y0E#MDT9NO&AP$0*juYpac>80gXih_^2h z1;1sO`2Fk}ZrL`db{sBBU?X2zdkyrAU11nLQMcCGdzK0$bh;nDWAJQyGzOU-tw1!; zitm9&!rvteB&|@lJfZFsU3X5?b$5gB!_VrvX{g&ap>A_s_mZaTzQMYG({)>-?uI-k zqGn)%0_Loy>)y_~^wa`-El~H7gt~2X-FKRqLDoh?%&b?)U&;wqVS z>8wKC6z`d;b3)x?bltm}uDb$G{>WrhY>tWw3Q}Z((D6|;i^1M>S(Ba4V#R*y4OBtx zX5KD_`U{bcS_M*zqG-wvh@w#}O%ZiMEPW8u2OwSD0znw=c7P1OOkIbM$lv*P1>dgY z+fcq;!M6c?8_Ksnd>g>GUVQ7rw_LvU;@gRQ%ZG(sQ(yu=L`j)l;^84RJ{ZZmfVeD^sH-mC?C{DE8>4xOt~j> zZ9KhdlxV)8W_Kw~jf|y@MjF=dFk@0LAT}CUP!5sS_$V}!#3z>;A>9H#MySKiKA^vF ze-aXF)fzxsSvBbr;I|CmvD*xFBSXrtAjJx=Ae*Tu*#A`Vddsx|8ETut5Cp_;_!id< z(2UczgA~thWPy?w`2Hx~wFq7SO{V!mUAmJ63hK%Mcqnt@3tHHmhZzPm5KFy@*-VPA zFP~x}^dFv)=vvhggkziy45@ET#qtNVRH$G*+V?MRwd?iQ3~hKvOUp;IXel z49*UuAkti!k6ztP{Lw{79BuM!%mJ%h1s{vv9Zy!pDCpi%Uz6v%K zN^Q=09PmA?zbf_D9Q{=zUw!k5`ED47A<^Rz))apkH=;ozsJ?>9Ohv(`y2eR_`wg~n zOxsi+d1?n*^m6)JQA0KV90fupbNRk!LzG165buUWuTi0d3NCgFiF!Y8^g%A$6%ySC zV@{Lk>?fHB{~w+)5~ZoCAEPAdzzjeMowQ9ok7NS8UYe>=d*?dzS$w|*1ggP$lLUGQ zL(@}+aiID7H@lFHButxrFA=N0LOpFR z(_gvzYuL-o19@tE>rgS5l`)>F7!N2l3`qMe%%pAVL}8Bhyu$r+Nvc)*y9k+vG5ZO4 zN$PyhqkgG(f~M>&ah#A|dQ&J=@(C8u>eA1E0pa`O#SAXk&Sf=r$7QK~teA+~)RZ5h zbnJh6jE+A=ShXNHNa#53IZemUPGM@v=dwC4_(LA)LxArkEum@EGl0^N>u+GdNOLp2 zGSmouVwoT;a4*;;a$F>j#P9V4tJJ8|@WkdR=B`ltZNLr%Gzq5DrI}IuXfTQ7ww3)lw)fPXi@S_7Tu~XTaq5Jv`1R| z9CackldP)Ea%`C@1|U(mtjZf3p!2T6AJFmwS&S68w*v4``aC?Av;+IAFIXc~a)!?C zp|kzW?#S#V$acub%VhJArh2Gk_7FJ9PlE+$H&kH6@Y)wAd2F>djg6Dh}llN1C4QcA?A5=nSXIM_mw<~>?8OKYP7%LO0Y}h?HDtzA%4I` z({n_G^n>lf`@;b|q{h`8Hw?=2M4;8u9K2gh=w*n4#7~t}e&szbl1}-u?If1`%G+A~ zn+;-n_hhZqWKpP<*RP^Zz|uA9VFe&Eb@JEo!n)R#L;~L-v*{tH+pHb-s9^OxWE^w{f>!MTq8uV-yG%a<{^9M-JfqBB`YB$&q zL+9G&N6=8maRG?DEm{Oz2p~9|+aGhvU&4dE69nU{IWjjf(J^Q0h{=}f%0JLhs#-)c z)JT6^)4~9F0=1Cr5xAivNr7MJMhyW#i3Zljue>R8J%`J5Qdq>O$a$ z=f!@-cF@+rKwU6%2$h{#k4z)qW6;<|r5!sW40dYhiTnKGgN47y)bG!V!OWu__0Mly ze+!m5hpT@A4WVG>8iHZ^Z`Qc}lSioEU&DW|qyAEg6DRyvAEADx8NZ|cw8r&2AEEv; zy8h9Q`sX*UzXhiG;l^LC>#w1bijKc={U?u5|59E5UPt|{aAH1yh731iP+F0&%i|QUQNpB&)NDCYa0kEcjuwsBU%hi))1o+oaqhGhHJ2-yprNwZ5`4LCS~Kti}t zi_`CedhsBJDRmV!T(E+R6?6gF2nk7AOj)&JCLDKxgw4o)hi zqHR@gSF3Ea9oPi=?m?65UBUk7BV`o;@SYgHJrx&XBX7^1gdEF18X4{&yq&|+JT}+c zJaXV5@Y5t2_51xl*;x z0r+ieFnL|Oo--Mrsa48a!e zV0Tqsxx?Efycl)ybAoY-;Wz&F{8k<~U>E&lRX&Q`^5A52g45S}m*;l801HKXJU3&T z)6+`b1nmc+UWLQtB<|nJgU<>;5&_1s?9gLb;Ywb?s~aL&v9avrSYE`~uodBMwFQ@} zWLuSYQY(H^76Zc11jN3GUCXOff5KI&>J6^oIM?cgZPL6~Y16PN?A;#kQLtBp9wAOZ z$|%k(e+5P=*upKa@c9i1_5p(Mdt3J*J^U+p+gg-bbU_+|t1SQJuyWnOt|#O3@SUbK z>U252T|i+%uk->)uX1*QG%9m;kGrELp=%+DE3nf|lH7m1K+scFY zF3<_sYyrD}Kz8R8b#aQWkF+Gy?+&al4^E$ta^=BJtK5N2b1+5dgD9%^{_YMQ>ni%y z)43e?x7_Lqo{x5xy7i>@^w8}Tt@ieaT)_hU8x`mjE6^!YBwg`VvolWHvG0@0 z1D)16ASf@Y^)@dL9P6q{Sp}dloR)R~;^S1616;cr?yW+i8E<6zOdQdM&n z2u?25U%zJ(;XBn1JR$KvFT>n{9g+|?-!K~XdC8}+yi^A$HgfEPSRTA@qYw4K@o0{Q zbB+4q@9eYWDVk`Zl6fpY{Y3ELSQMr`0f9Lk-54K3$ut&tqdoI#)ysg2ZEUz#KR-6l z73TS_dA?zu{C(uOaD;sxy&uaCaD_i)4w?x~f-y!dT}4M{U|C>8-O^-FU*7fy6NWKe z^s6vb@gx{CT!+g7gKOGvnGj#daM|(Ir-W>q`c$5q0zVmZ0TGvg`ve15raZ+V@`4ns zRi6;GD6%i)1UW%p!byb1iTs)w-CtNqa}dLKp(5rd_VA&X9h+#)tV$oaTsG8FEdL;J z05eW&B!9YW5)OUh;3iAh)!Ul){Ho^%P+UE$*fPrSHynVY+(=G>ekl(i!hH>Pjd6Fu zGU$<79W{ktT|LoV3y|^B{gnv_9MIbq(CNA}YHicetRUc^X4k(xJK(mRd zi_te&;lQ9!`&|1yU8Mmw%x=5r7i$J(H#PtJ(F}L8vV8X~;+O>3ZLKfm1yXhHwW#v+_WFdEREre=b|W@4{BsH)mnct1yxqm0$31aTGYp zh~ln1#ZnO23#xyxa{xQcJe@CI2J{{gnU`xvknbPYMK-_e|u$QvB${s)Hv zd(8vq(oXdPcu{f;O>zGp28j8K-@!~loO<63H#l&p@Nl@f@YD~cgDFo$7Bm`fpxy}o zUvLDWXs_j;4rVG3wxbT|;tJjYT-Qgb`YGOx8u`WZNpyWUbtrHu_C*yIw64&QWY~P} zqH11u9v3pdMGhxqyd9(59cDwJ@mUO!-5S0ZU(p<1ElR#Gn~6(`#^u<9LPudE33Pz0 zhzg=YmJvZjQ&l8TE+tTQ9fn_I~bKd<$*sy`25Dw=eDyONuFI3dt;J&&W=f(WulQ*L{1fg#1?T* z`LJsOew2W+!TUka9YX@+euu344q`})C-}g3^6*o~qa3m+1hyFzN`c=U$VgU$Lhb`# zR{XrdcCt*am^9A8SCT;@m{nU1(ug_H3KxH@31-`Q_{~k>H5)>tF#OGas`3N;T?8=4 zPSuf|YJRjb`s)Irk}a?b)kzkzLM0pcevE$qfbT8!`_8XO?}Er0KGN&(wWLKFvM03x zOmNfHsMBYl0X$EUCsaEoKaNvTdTA(M{s=`+WRd15A{h+sisgrpZzC2CD@~lcrhdIC zolVxNc?28vKAi4Um)c)pe)SGN^TCA=#TtIC8w*P87K&Kg#Rw`mo{dyHHgc5~X}g@s zkV3(HSMiWEFKn+cy(e5x>iM<{3d(yLJr6&a>sL--po7dc-PJ}j*I3f?xsJJ>(~cll zo4}UxAp9hDn!acZ*9Delljv^TMdx-vjCW4iMi6I3Ztm9<$d?1;a)OKp*k$QAod)g-*!ieEiWh`r z{{1Imw@5FVpg+bSQxhQ9Ww!>?v?T)JdfkI>pNZoFqdeso6M?qbwmew;(25eKblPfJ zOQ?&0Ei%*{C>J*w6XSW*yX5>tm;4<}f^MWse#s_`^{vHGm;71~+!(!{btn}o$UK8a zZ)RPPeKx33m?;2*uNRBSYhe242O6gLkWZL?^Z_RE4{87M-L&0cq>pONd|d2yDPH3K zqf5Bw@gaW9Lwk^LpHen_aJd?>x8kR9FN1`xRzsn}<|li)+kwsEw?S0lQiWLz)jI@C zxY;(=z$th)i|dUb%%EV(UJTfS-wOu?n#*S(D{^^1mf{lFQONt1D|9QYfB_H(K=>%w zsIs4NicA--V*^;k@1x@bM5C`Kk|GY6Kqt6-jvf@~z1P(+0Lp+~H~5sy@8JO@_qPxf zai>5*<*Cao~YjIrZ{< zAV(I?fp>CN$@jvX&3L+lr%)6?ISu6sYBZ9-cjy&Yc!x?Btw#%1|9UkmMP|tR&?`ym z0)Y@}Bws8%7}4N!Ug?EDqss%mAvT~QfLtn?@t%Qdh^d{y+HFx=?0opYf?&p$(ETpB z+Nn)4K~XVCS#ucwjHZ?zUk*z(tsJTsk!1aFE(0A+a>11L?+|H|`bJO8XF0p%&sm2~ zBKeK%Gk2hi?E{E#o{WKG1x>nqE3@6jo}5XRe?A&(!=eABj{h67IN#cYQF? zaK0K?O;fI=7~pg`m*S(Iau4q1^Oc;1qDR=gfgs|smc8KW$U;}J6T^0XgwK}(qc<=H z9mpfpUz?=Pl7ydli!@u1j628ilTH0{h6k4VzB|}z^_VhDwc&nTz%?BV>D%0F3^>9p zll$e27pH*cfd^zT>V8NhR}k?iG1|j3t0s%)N&OjsBf8ZcEa=^XG5jl`&lz;VRV13? z-9vzk&Y_X4fcwA*BNLW%-~=2)Hs_}v;Xv><3Y{G*bSev#$y~t1#+rg67v-_GSg65k z&niL5%$Cf8&Zc(uk_y&t9ZspYcKuH~HQUScA_LS7iB{hK)vLs`KDULZN#hXd$HAr>gW?7gP{+wL^7+y`) z4V;5>6XdgOcjzSP_NI4SjyHM(#OId>#1%h~`z@bnjS0!CVvqMvj)T3;Qk{MY!Sf5Hu(}`E z4NpXJ;`(kuGN87jY*jHS`83P_5d1o2pv3S}Zx^B8D7y$0X+*Q{fHhTq@F1j4W5xnt zlei`7<9-kvBX;$cRClm9d|J2=@EN3$c|Q3AcnK^G)0n2VdsNsPOz)20tY*#l8gf`J z=(A?8$7}ct{82UVl5*vPjv>CdvGs%AbX@LAUQUQe|;pd^-+cVgXP$PYn*6{^fD?hYgiV^E|}&;(C-Ql^c za?EgKjxdkI>5fEw)1yX6K>#>b2lpRrhzihf20+ydL%0?C~eZg@J&gZ|GEOG4jxh3 z)C$>+&N@Weq4usah@tJxfPDR zD2@Tx|OiKCu-6(wzkzlmENjb`Vy zrt9eJ+~38p^K43|%4<+>~N9stV1|{`IN9q`)dL?y|Bh~A;N)R$A z69ufM%n>1f89ePW$P z*qh94iw{RGI+-M$R6slHPUf)KE%CCNUq)^ps{iNGEXyv(OERg{;|Q zO>Ph7j=+amoK#nbTllslLxZ%WhEl}RajV2UuqvPBv6GltHcOjjzCNoU1%r|W)u$rA zaGoOy@GkgGume2WVkkM>Y4}MJPtGu`O<-E`1;!a1f!yXQhEc#MvUkMrR(Y4{ZrC}N zN%(a?TD6npw&EEw!^(J4_vCDZAw~-A8KYot~FX|0IC9P0B zbk~h!)RksrTa~@_7w)z~7O(#`;cOQXjruZIz>v#XoU0DdZHuAhs{1L3S!FHknw~qt zJB@h*50p0HU3oQerwn$UEdM{-#J0S--z`oV>@=WYe`*NY@p#xf`$+H1DS%ZGuSn?0JBuH*EmmEt^QR`HQbks zr&uo*09oX!S^^600TY?JHJ0- zJ*!kP7+MThOd~AuPX9MZJrML0qidGoidi}H1#d8%YGW>tw!gAe+~a`bg3lfgd#0!X z*1cFOw6tI#OG*cmGTt35X^6Pas1(zyt@22)h1oj)U;GVUpu#iY@=&`BJh+8(cgOP*D=$hiCYob(wOcE}!U# zF8x!1vY6>Ji8nwOCPn^Hr}-(_d)c3L@g#(olxb>Ieb`0inHW_?Nuj`B>4L2ov9Rvu z8jkYa z_<9vkDA%IE=nhWGQoDuUAsTGo6qSU-Kf8W9*br$3j~HYOJeY$aIm@!@&L5uP=^3wI zs6LPhn<#qz!8K$wvVIcU(S+t|vbbb4+*VfQZ^E&0m*5~t-7l%w_z~;Ejd;o~bb!R- zFR;(0YyygiA>?|o4(2XV^jex8JCHSXIX9|eJ6~5WQ;Rs^Nl0(17KyoPp2gAI<9qIK z6}vG!tDmB*%vJkd1bQgGBCz5q;3wI^=+;(C_0g)RZDqY#K735i>bmL-tMYqDy63ra z^j-?Zp8#)Q6+-qZh-&-<10v8KFxs-UT?2`M(K1+R9Fj1>T{$b>L?uAiw=Axk9R=J zmj5ec#V1Ob<~}l~>dY;PnJkOU>vZN1_`;%1|8(?#`Y;`-$Q___RbtiebY`B;j3j2# zmPO5@bmq^AnQRD|J2M4b?ixG5WkbmPL}&h%n8}6`W@$T_rN+5F16&$TYCMrs%|y;s zH!!~r@}Mj@pdPA2j)CY6bJBH_i`Az8U0GEONV~l-&6rFu_!wZwZy$0P(G!0W;|Xl|f8R ziHfLE`LD1*!TNNn@XXi#rme7!!gnQJHgT?Qf*L?wqtg}BPtobiU%`7v{hq`!=Ng`c znueLAPNI?s6SL)vv2e_D2&RBtnc5Ydppm(+ z<6-sN#fG>RwL=f&RI$nupceV}nNBK99?Pgvx}UJ=XKc*ddp-Ms2!NO^jd`9@SPWC# z>F0hYCyf#kOo02?O8E9pj-31g#LQ7`&SfIZSYZ@G#cbu5d6_w9iOz+W1p7(qXTqwx z&1Xw;i2&c%JcGQq{A4ei60n61u{mP|6%hha7W!|7043JnSpH$4*#n0Xv}*$}($ z%R=lQ+6b{%jMc>MfmjdC7Zc+}vvkq7bkRpm(Pk(rab%{K*8o?fxugI%H81|D$EEIz zr_d&z=KRc16XTy6qv~pBir}^u1JP&O3q}L_fCRafs#QoP%EzkHSw#-Nw~rRkj%C#z zIZ;*#ccvE7C+hov{Uf)SagayCDe=scsL+W*(^ane7z}L&X@>oFl*PkxGX+979=S?j z3s+Ih2bP5w>n9;h3qKqG$W;~q4?iL)HR>8uEnvPcGT*o3JA8w)+NP&b?HW_8n-r^2 zUCi@%^E}2p+n8r_^V~m5pyT>#4%HLi{c@z6^pkD(X4|g{>T1*sX}d;EG0)p{U*X45K2j9E$5fxKpE7&YwdCt42VW*1 z5Ch@yrtHnpvW5)33Dao=;$odcAg%%rhx8&C@*qd! z;%_YT8&?;=(z{m@do}6}^L*JnpONRX@aIx)nRD3!gKOu}wAbkcgTm@;L7RDwifc0b z7H{0_v}QxDiF`>@n|}oOPiyvz+|99t^hbEMJQ4q?yVazC9D$q_3-4}p=y9X7g?Kr9 zXH)Ro8w*8xDi8YNPmKsgv((mY8v7OKNNqA7bNMmiDUFy6RV~S!c5j-uQdNT7aE)Q9 zIU|MD!f(pA<`oq*jd5CqACBf|Du!q3?{KAgihBytb;~vvxku&%Q(**YiU%{c*sEB!fFVAJX;>S>G%T_%O z%zyJXRQE!%h>!ZG#g(%nDefT8pgR{ z+yqjFy4IUl4Mzwi?k@*RAWR?`$f{eG?M2)q9AElIgAMNh+8`oC%mpNz-Rqygs7~YF zbW)^?qwModlzj$eV?mC%cMy>MGF&6zCp_a2G9DE_W(cn%?zHHgqh^utJi!EK7z6p$ zolFQWriK=WSw|#7r6TMmderTB=lY|G^KQJbQT@-3yN#KHUA6x&&%5=mg=KN*c{fG_ z=RFRL`Qp)~ab)AXSS)2it#ugBO;c z`{d=pUasO>aq@}oh@Rla3OsQLVULcuw*33}i2zV{pvtuA>5O;oLH^3aeO<%U_gvjN z*0=pwpiBx_l_aveXr=cB{LXNB(LP92uq+OJo1oG!8C0s_j5V549_X{aJg_fv1y4Go zp#;Dy2R2~Wsv&X>f4CTJ;b*O#ZFw$^wR3#rLdL?bvqKkW;83U+lQ|!!3_k!w@Ydo+ z-ex8e4&kPYzo8d;k6M7I-7q*y&h*>SpX-bc$Fr(D(4JU?Kly`bvoA%Si{`_J1>nM^ z_!Fm)#GC6Wu6AS2(|APaY-{zy7W9QToU|?GR{n1k5eQbnQ6e1@uC2%(Ool+ge3Sdc z%q=b*;>mA|J}DTPEOuy#SO&G~84M+Mi_621=p0|hw+9;%;$azAX$Kz287t3)+M~iK z$alI?l0eE7r+$@2XUB_3Kybkj>DMpzHT@C(*QB8Foy1OU;V|D~$tcU9=em^5V{ACs zd1Ds$33fpopC%cXj}`?XjkOQjs}a4XHmrHWJU5C@oSmy4{V^nhTh79i`cTnj68ww{??mg zMq(Rkz;HA`MeEyKTCEV=>_>Q$L~D#1g$pT*{w3qPtt$F9u`R;Mvt8W~6<%GBpr=g} zo}o6&29+6`U3?xvc{*nj+91q=oT5#3;0tW6tl~1Hf~^A!&D;>64Bx2&SY8I5gpa0q zgi0Kk?JG?3;M}@Kqv%njHVnmKxF+cFK8_UNSe@)7aF}#EyPH4V*$%OmzoYvk z)nzkhgWfiZ0^kayZ0G4Ip4yy&LN4EmdVITaP|$avaKg3jz!rDjUY&xQ4zed)=&Ig< zAIieP|FG@b@`o$b{UdB5t?kLfV}5pnpqh-7jrilzmvo$^bTg5^LiPU!hoAfRKDce_3whhG(>qc-@3-m=PN%vU~Qh<}qMu0F?&{U|3# zYSP(3PtH*6KOth;gNW%~p)$rm4fE|i&)XKeIKv309ikkAOUtgQItU43e_CaCZc+9Q zh>#RHUO#adDzF+`CBredW8-rdKP?P1p}W}ObF4*Gfz>!W(Hn(a4a=k1G4L$^kKiF! za1=uG1|TvIx}rYSRkYmlO+#1ZfgfGfKc)@|^*IwR$x`dV6}Imk5f8YNnNG^iuHf0c z4jrWIUm88|3zGdGcv|8@>48}} z$%(kP{J=^>=)z>gx;DoDWxzi|*L6JIr{CeCr}lQ64w1}8^1|NpiQT1x9q15#98KZ; z!v_vZqNbIsQ>sV)d~#~mA(M>`R|#DExX&BoF!e-KHS z>Gddsxn=wI7f!fA&#h<*=GLWlHB4YcGD0$8Zk5O9mUF)R$^5d5K0IW8xdM8AVRmDF zDerc^@bIF{uWp~4`9*o1Pw~bvVpcELt|XG!9n?tUb}Ug$o+HXhdaE)Sgb6pt9~Pr9 z)l(92n^jWQZ}gok_vmU_j6FpN`XQs`sy#!GqK_=!e_^V?0?MM-n?$lK*JJCLjpOtFXwA=$Fbo#KuOQ9;z^eOZlqA~qDWNm;ttv`Ab53(2wpo;@VY}e zA8Ntt;0K7?Pa$nTjY-?@DQ$6B*2zDRx30iZIh409SU!dymJ2^1asVmcFlw&QsO2RDJSnv~6+)n25~!CTe@p(-{KvVo9M1o)0&d)(%R%J4 zmav~}go)KECJ(r)fS>1u1`t-Vi`Go+CA_0S5uTB=wXi~L!;6S4K7chCu5(-{{Ds^7 zAlu^EZ&sJR12+|-G*=1_ThpGfG`CM8H+GvPmWcJ9woe|eu5W2SY$vaxiSjTD@JxMP zDt0;jVs4H%TMO59Kh6V`@5IhAU;LYyRB9_hSku{8dfOG(=NiRLB z08V~?&xuYbz3Jh!Y;Mp3-b+r%02`f&F#%imhISO-* zjO(jZf%yc(3jUDRrF{z#uoZA(azZJsIWTiO2)bbyM8@y+Ox^_JW z#&9h(5_(B*d!hO;a)y5~&qKnrrg?(T_A+VTk;R}ZuhyD=4HK~1I6+!5F+3EQZ?hsK zBJ7X2M9gSXBJK`4B;pVJFl$xIe=(XTI@j?T>a+>=p`kBRX`eGhU0=b1#r);RGhrM% zeMt_%&}vO$T}Wc?Eb$-CS$|J~MFAWW#8=KIQc+K?l2{93bDi*YM~-f%x&T07ky2i? z%{wEENbw|%Rl#}qAlr#T)41JKX;*^bqQ`_x&w}!%6vTJ;IMA^HACaLTlb-($1P_t1 z{v`y@akl8ghc@-Ovet`cvqC0oK(?>A6~C5(hGFm2g!>SCviv@kiU1gbAm$n-%m~6L z9*lAdzs6ur$E8JBfxibFHabfCSC`)N*EyEn?A*ETo&vNtT6d2)WZmsbH2>o3?l}(o z@Be1Kef;Vs*V~CxU+h0m_rJcfjwNe+V7C zU?zLz=%}$|P?uwZYQ=@{aAagL6=$|^y9?q(%!1+ek+N|Uh?Rlm zjnx*uO(YcBfdN_Y{6jCabkz*ZK)ECtP}>37nj6{<0O?8Iz<^RtlA$aTb&-|@2j+vr za93=u&E*c#M>C%_AioFLOc@(Z!L%CyXDVhJQ`r1az%k7B`32mu_&pquavkd1U|>B z>*bSs+9UWDgcFOsoUZyvFMoNc-0k27P5*5;mYRgR;bOeWO*$)Lytz1+PUCoDJ)lz8 zE{D4U`(C(nX9YGrQmo2e5D~P(!tWn!SPVv#xk6@E8$W`~OEi3);wao4UJIPzu>2n3 zU%elMkofVqkP~aH22Uqm7rq|t(qz4$Q6bv3nOMj|4d~0be~ezn{R&e-PMpJW!wrJf zu>U+*)B0ZHR+jJcw)hBUgu5e=Hw#AR7ae^B-12w8UoNwSu&}ntnzEh1WgUNN(5n0u zZ?dz3A>qUTuE2AyFV#)Gi3kbng>Rm3xn!e!G_3E2>Yss6o8rO_33r#mDYZu}Lp|J4 zjKMVwh53hL!F$vhr|M3_>YAU>wvIbN$gcy^?<-Z`L`gUqe5VnQXJ zG8`|7;Kfw609y~@)7%(C)|C$0)s+s%&53g)MWXGbCc^4wB1!pHV7i0~UIQ@EnY9Gu z!tW`eRTE&h3*R^pmK|vcpX^OI04XAVF){mQ>G1hHoij)37fj|uq7yNh7`nHLeVoKT z;G)s(@E|%AX%nZ>Wt+@MY8}v#3e<+1(;N#GyewVFv1r|ts=?gAmI#dSTJ<7O%{dG4 zC1Ju}fs0XT#w^xF@>}qy;T*R*26n0ZfGMxo_(wE%$uAu8bEu=5p;7$U`MjS3F;d*@Lq!1&o zvKTPB0C#2eC8mimBd(<&`-KW}XXxDQC72J0|9;mL&`McYGztvQ zkv}0lknMD&*d+w7a-Qi|7*l5yOU831Lr)bM(8-eVA~N0ul$Zz$WnQ{NPwS;Kq!wp{ zJJ3A`{zr2(Xb%n!UWke~8Wg+>`YfPehGhd)Z@~wPvU}vj{Dadmf;(2mMnG^d0(0(N z+cg;SPtcO8IR=XT=qNJm0M7QvHNx3y6Q@9w1USbrejDa1PYsRa1Oj@a!<57;O=5J2 zk~qpFawM9yd14vci@cVM4p(3w)5^@hfz^bi;XUXrPA#=W)(9@&avb^u^4-Owak1|C zXy7e03yk6Nc~BQ4Sz93$W?;w&ATqdM#+*t(TC)`UW)14Cw>caVy!duSX3Uz{fj9m7 zR^WFR&^%mox8;VvXUl<|@8xM2t`it=vE_h|&5fkt%cV0M39EK1qmIk6+ zSzNLXr9GEmdbIdarpF3mibL1agW)W({bIwm|3(!+ZB-6NraO429PC=~7Ri9ansVgp zJ7C~1jOH=QM>FX7K`1jiJ(_%U=DpqyK30JdHmtxta*XMNVDic=m=oc%I9OjvUzAPq z42pvv8Hm&#k~+eX3QMl!SVUqvntijgYBN?HAt?pVP9y7R>vajXh>}zeXi2iH!Uq>GdUk3PK-D}z;j9&p_2#hQ zzVERjspIKM%*~g~^d5&>vAO?Y>Rd~?jH}#y+#xS}Gr6p8WwNJJOtfg`EjV{F`kucS zr)4lZ(1Uaq4^OQr zi%BW5Z|+A=k>_<()XJvcj4C7Kne^n z2FV^p8!yi!VNmLANT*24Xc;7&0~lio1V7K2pvTbxNoBr+&8^C7M8WjQQC$||oaixv z2D6F@6+BS^YIJ-P#z-neQ@9z245EzXR3moxP)ZZKq8`b*rM7b+Oy%t%W@r_V401BSx`vYtyU=vr7CvZ>c&?(jG9;lI$n)GR6LVZj|7KR}7J zj>ZG^{7P$%r{U*RXWUN)!6ocJ$5hdF?8-nDF(hv)Y$tJCA5<%WL+Sw>N)a7CYBS~Y zy%;I&_?aFyvr|>z$@x-G47^T5f&YfKdNQ z%A!u-WYrR_hZl&bu4kfLs6cbIlsL<;|$h`Ltga^%7j#G7oVF5d*q zJC1zfpjq%v!dI{qOboLx17Ayy$HG^=g^@TYGv%F_HrWXTM_vZG4}1f1TYkXrFa#o# zk@LOIfuZQg39}$FSL#fxkDQr4o%y`Zq(qLhQJ4*(<}97ba4bhA8*)Hu&0hK&G0&4* z{m2Wi<1-Zh-fWF-N<*XZ}je19A7TIxSZm8xTL2iztcv~7bh_o`m_!XhRgMZ+Ch;3|qN3|!q3 zFW*6ze^Zx#*pyGw-ORgP==>#m1D$j6wPXhAy#7A|(YHuYsaLVXl1aMgE4t_bJeIU( z(Pwqhk8ZmL~5|}P$rw?N40lvX}59s$wmMPa|hVi{jzq|Qfpx=*Y`Qf_!brjYoAU)g> zJyANS3owns8S+)5rsW~)DU6m%*UOJ<k4GC$VDt-qjGpPB_mQwnZjS# z4fix{p3aovOu59gMNOEkP62mBQba=GJ56(5 zPDSM@_=sG_;YK>k-=m|r%uuU^KVhR_00ryG_(PNQyr8C~3tw@7R8#)NOcd$b$FE!VTBOHE^oPr*lFo& z;~nm23f+%F1S@EsK32kkT4AEbSj|=*nM9_y8_b7rJg0#pI|A#-J@ZtU?y7M^N)xSf?+L{cKnA|0dEI7yRP5{y=( zE|0;W8T2_E?T-ziBaCENYw&?L_hzW=^9j z%0wl9mA8j_hZsp6YKU|Y4I>$$(5WwOq&Xn|SPur!4-BYgQ%QBiH4N$vyb%@ZE+*A8 z)P!Gu=hsj8iU^|AD1Lt_xi#v(9Q@v^obSOe8u1K?{=ot`Nn3U&V)3(sSXeAoU%be+ z<=T4uh&2Lu>i!>l-vSs_b*+8!eoP=iz+%yQP(V^hAV3g;kpvQ$F$quu7Hf4Jk_n`F znwjCDRTA=m+%c_f?c?6QyjQKZY9D_~Yx`fV@1U*q^|#vF)>mygG@!ITp!Qz#f8W~Y zoH;WIA%UoE@6g6G=bZgqd#$zC`u5uU7_(vXVslBV`uu^Kj$THKc(^fov!|8REu4d+ zqTsD$%%fp9Xk3MIus?-A>(CDS0|ei!7c1F#O6tM)&*3`Rc!J~m#iinkNJq?FXWkz6 z^98o(2Q%5^1IEWun6<@)O}P_=$)tL~DCH|KXuVm_XYh*qXWX5KunFNU*+qlx7h;8z zGZIibPbbGd6&0zH69Qg@Hv`L!sStZYCxCQ$0Ig(#^EnM1i7r#cKeH9J;ny_dQT}2+ zuE<;$fh8m93Ejd1pJrSLz6D(oOUOr9b;WX_L?_}r|8Js3;na z$jv|Kaz+blF8tQxLjCZE6?I=n{(-qF@%fR&zlCZ?;%imnE6l`?NMbS#4x2w}{0I}z zz}YPO@^e^szp)Y5flU6Y;4darjr;8uCV0U}{uY_0-jg^f{P+#68Zz^n|yiyEFI^1fI{v4~)2vf-inGkj~#n z-|GDpsKF!Pe+46q204ynlPeA!DltD{7TY5#-{4E)G!&0$n- zwdUY&@%Bu!HB-=<$au)N>hZ;NEVcKhx%<~p=c?7MH97rjbhQ?a<@rf#mKu-EphCwP znuXyeB|KpI4bZorp}y#NWD|8EYO%>$ zrAPhdfosM`!Or;J0Y_{dN%nzTMa))J^9`*sz?+Cq5Ru|qsamXtbtn5Z z-iBf@9>x&BFa@R$BpczOYPYQQxhSwy*;(p)ARHgHKl#MppLr6Jg-B5t056JOk=gcd zkoTDH&w!*ankPFyOOoP7J~LC=9K(v%8p}seB05y)+_h#7d%8d8+ zdow@!cTz0&dox$bq|9ud@QvxJoAXG z*#8^k!p$#oLj_<%NhCe_^3AH=LzVa-*p4bJx8NLVNFqebKCwDjqdth6fG&YeH(DRW z^?1T9NM{{Y9dqP)=hy8iT8=zlMIOM%!!qQk>d+p@fLU*FuL*JumCA3Q;hY;~eiC~R zbBA{tj&Yl&g(_tqav0haEISeWOy#uFM6GFiVTaj=++iGABi3FL?YDHQ31#mb5}<+Z z!OQ$5X4y1oQPV7YT*erii298-Ki>BhPJW0}>(nJSuxv)Lr4=;N9HtHypCiC|&^cCE=(s`d=8D2Dy0x}ldhwnnBcBuZrb)RmJigFn-Uc;ZROh zxO^JU06@q)$0UqsiB&moty+M@GjlmmyErP*hkj4BZ1$Cl#~BG_`Kw@w?q36 zehGzndOxIQ*VXB4LI?-AUzRg)1|EC*R}0fr^&#~$7i>1;PUrLke{ucSZZ>rxc0P2m0cr~y9 z_&w>y_dZ5>5I-Z`cm;{=6IA9HzjWT_7>_t_b>m0Q+iAw_&Rgu)!mY^PSKk?Q*gN1) z%oXRm`_^EQ2{I3rftZpt3ou+-{~Bea^{sJ>?^oHkYrU*Gtx1PXJFS1s9Hzq0669FV z-|pUz;yB+mSMqmR_K&uGT+RU)#GR-2O%Ff9Y3^HZAZ1`_z+przBArnlrA+SP(IUC; zfd7y2@Z{dN-Q4Ze;=y-dbIm87&SQGp~RhMt$aMk(|Lb#)w2De7a>}~4>{7i!wd2GHSBN4_VxRr z93Q}bCkgI)=HIAiu&B%b0}JkdG0DB`NSkY55@LQ4 zfO;eVBEMj~swOZf(2tjz#+8J+4H{jSV({ri8&~re(k8-|r5^y+5|cW`SdS)9VeEwl zqT>0kdae)K zj*QCUh7$ctEtKfBYn0A^^E7omjB8}D&>qKmJ|8x`$ZvgvuYc7v8D@33PyZ@4NA<7L z`Sh{}?f%0*B+}8@zus7|36=C+<2KIYkMK1*do&+3(2W#TvSN1Sk(8P$%+n9&7bNRn zRU%h*7&9;P;sb?O9DEF2<^;$Q$Tzz&o81t7YPCNcNH^MHZqp4x&eY2eewO(p*Re^_ z<0bPQ#1RwM->8Q~1ucTq$_g!)d=b1hohZR2mH22fhJw@E<}b>qln(xKpb*ms=fV|W z3@)U8^z*zPFkZuy1$D;d;Wy;x0pm>0UgtyS4BV+Eco&%o-%?mTeJ_{~=+*AG{QfuuC#ltDQ7HSOGo7=w#VSMY3KX0&Tn?<2pPMK2(S-1#fk}y`t~p1b### zy9_7k-~+*Bef0@={?`?JScWratNLcX;Te3QtoI;3R-JGiX4Gr7dx<8vpZOyK*q;r2 z+v8e1bKpBT^rZ@h8wS7Ma6>}fVo)cUasW>$r>wVO8a9HaLNy(MS)<1|apwNCDEnku z@8kTMXYZSonD9q)!rQ00mw!~x?)o_!(EAkPrr_WbDb4M7_hmi7Bl|yfBj5F1m(csy z&X-nzjH%eq`gUbs@~=F(_pLR*`&^Z~-!ph$>5o?+ZE5dcJiX5hoT>Q5bM)EDb62eE zJM;C*-W8s~{ZQ!%*OhhtHKFuBkyfiZs8q||G&T;m97;7cgic6L(d$LLo$*Z(r26_z^z)>xw>) z`Rp-#F5nT*;A0+;>bmmE@I+-md7gRElYR4F13##8r4Hl*Rxv!PUmr*^rM?8HO9D`2G{!}}t zfDO}+xpV)5S^O}^+MWBD8$@|)pwik;dGuK~n(s#Q3&0bDD@s9<>>KaTE_jyPPxBR?SRDHjn1i}tkebfq*wvV?N95NsY@7odVQ|32 z_hVol0LT8qJ-ELNatguE{!|}|9m2SGka6!kp8okiqyr|kgad2)%4S1IJ!mnCd+9!R z?h}3MO2}HCCp`BbOI^#&T=x&IAj6HIpy+Ve_@d|NGnMC_4NLOr%HFdr{j`$$$O+vpqGMjQq8DvtcX9QE;G+V<~kw(InRU&pm<*^Aj- zT&6ASed(=Vn~8_E>N+nPr|1Ljij6PnEfU zL9uiSOQqyjvb*-O6RPb}w)>eO1#fj0e3{u=HZ;6y8WamA=lfSwCcFq%*sn%Al?Jst z35K;W^8T{ER?wK=eFPuehspOb=%SpmY|oK{&!c+PR8g_3a>5nR8IM%vzFG#SsrLzY zE{>R3e3VCqeCj%;?Mnto@MJ{A?iVQ@xQKWW>=pO9Ay6Y^>(}i{zy8J4ufdt3VE@~x zVE+OcF6}*9-uni{___~?#R8JRXt5RSt!`IH8~8>!W7fq6PBA_W3R0`Ud%!_(SYCwF ziMG*L>2;k@$=)dvV(6~Bgy@idI+f$zZd<=Fr7dfOc@eu{6C z@qqT~f1^vW?SVCgCVdOZutfDiH0g^hmQBKz7`PJjBDyeHpr&q?wI9FHs$Z#AT@-26 zr~e?W+QjUA#g{Ve1#A^`qqJ&;qgBiKwmGa?RmWC|Ju#Z~lw-&h@$a1LDQo}5;oilr zr`(Th%DamYz+rDId;xalib^;`wCUl-|M-|?hjDY-&tZUhdVh(p*z*V%_m3Z5d*~tl z-<|y(&JPj84B9)Fv5 zEI8TIaBQn_>;_PUc!PP!ho|A8t=Q3s{kN0KQn7M>_@iqBI z=NoRXEMLH13&7qO#>$iuBognjw7+~QgiOP|&MWQ(9AOqWiz{J1H(m=)!pEEVWE0#B zZuRK;88i1D!qOAvk>D}5bmI`Dobq&J=M)SC&;%J`8z%`=>*ObzS6;%jCu|%k) zbvFQBGrP0K?#>$39R<{_0lC*$u7K*i@+rP9dAl2IF1`j{6ec zV}q;Jqcvua)>u7KSQSg(H z16Ec+S;ty}z3ZT)`g^&c+0NFe_>R}%Fs(OkBKSc(;*0zdg-3)~LI0|g!6S;0)xsmb zmVkm`#(n`;r~LD?n%MTFDLfi8+xmgiO@FL!H3spKX`W@zLlp);MrC(wH5~1}>y8<( z@kjW&CrN|_RejezX*|9MDzks}i_*3J)rPvRN$1t0;%o5wh}?#+yPFxmYJ3Tq2EL$F z1zUGaQ>{FLtD+CI1i*u29Iq_ciwb|?0$ec^5S!%3RV_YHdpg#06#n2?@4%Oh0BD-) z9amr=Xp&%69D-zHD`_>*tNgSK7IXLpE6sS#7@+9IkJrEk3Y+}{f5k3-Jc+r8&q?TIz*zg(Ek)PucGrTdVu7_}qs81_?1Z!YeD^P%iu?z!@ zK9ovJxG~r*77@;)#iT`W5WzI*#<`qZk!&`*A$W3u-DWd%19Qk{J_7bUw#W)TpNJlq zGvN0tqz4Ns7Xn`Z(ADZlOm!N8?$HfTuSV%~U6H zMc5?lPJgT84zN2;`Pq$&yLXc;1Ed?@U&Wfa+5le>XrY8QeeG!kL+2o!aU-T~Qa)Vx zlkc!66FwoB*@2(vcndom+Y>v)#E`uUSd>3%e2?Y#6`n>O3r}r8Ha`7Z7kb)Pyo7q^ z?1db|;sN|dLJboR3cd)JpS%Sh(YUWe29sfA-RRK(`U&PeVC>)x1VL7LuLzA0%A!77R2a#qO9HOipf|{t$0d20&O-l^o$Hf#|pIChK%zKs9YW;Soi<+&e+L z#7$iLzZ^eDSo{ACJ9-Y9v*|(cOb&8ZQS)6C{yC>NIP*;61zp!er9uY~YuC9yHhtiO zDm^*=xpo41?*Q!0?&3!vaPsf^s_?z-D3qEj1!)GKgll;wHeO=g#JC+D!?c-hd|my> zF}@%_cxG_3?p`*4Z<<;C1C4Xvl-<9{NG+ABa1lNc{baL`T7OpS_}=ERyA_deyP@K zbI>$qawC&Pe=HV3^B*vvAGJ*nia$xmg;OtAVz`UL2)&nD z1HV4OH?((gg(q%o;Utev&*B_{Po4G;KEtqWnW!1{nqw4F6`NCon&LXiBD59yjX9iB z`wAcZ51Hb=g$b4Ap9b1k0j`%s68{bJ3=)4uCBD{7{0B5sB#Swpqax2{$=4mluS6ws z=+vi=u`@3i=cDL|y{h{EPE7x=QLSiXmsS5yGrS}y`U#B;`v4S*>E$|(PQ+?r3;z2p zl^?ZFGHd@a+G_JlL_T4&|3Zu)91srk0U&9vd)bsD!OP|2e6La%m-0s_ebs$$|OSli7H3QJ7$J)|1vx`Rc-B z{OUsPMg7SyqO;ICIDIA!aiEb8FRVbFB>nlU8y{W(at)?}h3pWVexvtI_8Rg3xH|mv zaiH%{ua2g{F3@DW=vxz0_PImLewXM=iv9t$AD^PTSuGW7G-WvSk0!$JV z5)hro$3XhToeY3e4Mtz2KpW^7#)y8Nb*G&!CpH9N%`!nY=>#MAewXb ztyBpgf#D`Di?TBi`GT)tq+HE+^aef-iv+GyB2`S^HT>Y_YqvmO&bS*>GnI}m;d38E z@}c`&ljZ3wNs7}CRvjBS$6+Vz`jRLGqaXY>aD8|czfIU%flm|ex|uI>jBn$Gvl`F< zrsT8%^iO`}7+In}Uoaj*$IN&&Fd`O@z3FdteiOYeQQG7c%-$Rbp7V(7;O9z6$U#@+ z10NudV)iQzeqdWfe@Xm3ZA`@9!!bAnR}X4c1y=#Uend`c=&7Y+yB1LoIGj9pzo1V5 zGJ^=ej@Rq(LfBY1#=SXV6=n8GLg zWyL$p{Bu@fR>Ix{(+!d$yws=R30rT*NO#_kc?oK-@FEN@{DBAg5DYi4!^x8lc?aVy z72{hG=9$ex74yh%5XbAueImQ-GL9#C1#x&u1@{f8WeVvwwKeg17EZ3?X*$B9JgEq5Y-Au17(o+CN}TOQyj{X1S7pTuIFtRJ6+ni1rd z5XxiysE(%z(KzBsLO4?-`-kcnA;i&~&ckzpIU@gJrjTLz9g*ajZn-1&zL)+5OW5y$xpO8Sb@a)l_u~Feq-ZCE|-iLR+PQ_S1^$zDAc4= z_j7o_0YDSsVwaKbON}S51-o=!Ge?8aK$m>R6uo+I2$^t-8CaBM293kq3!a58=cwch zN$KcVIpf=H?+h|U==p(HASFL82gSa1t}}#3{5{5Rg4K*CjwqWZe79__hb544Og5kB zP>GxzVJ$u73HMBsQBK}Z>6>xzcevy0qeo+3W_R6>clf}zXPGxW=%)Tq@k`lVx8sE; zyd51qVpTFlKHkJi@Uf-S5B4BM-3|OIl03n;fbqb+?D^1tR)x19%(BHiTW?K{g)CNu zd(3uMX543OnnA-nMSwnks!_r|AMF){p>hl5Xo(_z~o2fu(~ z?K{i_#SgCn?fVLYD|wmlEbe~7vmA}HuA-8BkR?D19560NM)L0GgVgY4z*DK;VVxsr z)@XfI5?6-ZJ7D=#W>Dwq!7cbrV*Qy5$l+D3p0F@hunz2AxolT@u(rJ5=>cp|X(u7n zSF-*LVun6kx$K?b8uMdvy8t1QnXFO~=?l(bsUZ8W@CmIJ+4@m>^v_YXg#N7ng84M} zW4=8w1^9=f{9=?JT3Qu8jpGZXzU}zsBW!SRU;_EOa@qDAtjc2%W!bZ#zu23vh;d>? zIpa|=Vl%D&4y2J4&?J1RY(Ku<1$`p?=O+JEhR^ma`wRK+H^HktV&8)Qu+(hvpHLxh z;0h*K8IwTxPZFFtP%M>@5Q`A!^yC1T7nSn$S1x;!toK2DJ#0TI zPE)=&)#&6%4~F;R$#>03j{S|;|8zslkOde>K#mYaDo9bg+C2)p9}IFq73XOB0Nn1< zdpn9ddO!Yyi9xQw<+8z8?mpmh*uzE*bI!s4vQpvgpYhurw%@AQ9Go5h-~c`Zg2~}k z&NiZva||yGC`z}}{}y?8J-e$%%9+cpJ3DZ?hYIM%yc)uU_?j^lpMJzr3k(iy;#syo zxZgaJF;I_fLfqc-BfQ;&w^#BlzW4Ugbht#|clWZKAdlaNgTFuYmw_7~6oczA_75ZC zBfAR`!w`?xWYQSKqoPoQa zq{7HBzT8Bi>NlznM!AZw0Og?|W{H6I8~onsknx(s@zND+T^TOIw+CUD{+}PnL*^1L=ci<0ec_mo2E5UkQ3D(|9@U=}Ka+SUKhGHM0{?Xmu@&$GM3`7z`=F*tzU}c?)2>LN0BG{hnqHml%&3HEJ|dGOEzWy@O6^+ z4cKYyq|kMF%9~%r5pKmt+=K4)&=U2K(oUNm$P6Z* z0WGpT85lkZ@SxTIga1orEVm z{CV;s?!%X)Xa8^_$0mL7NsF6q!`oBkCg~e@szIjGq~$iVy2qn<-~|neUf=w^13y#o z=dcczr@V9{da;bOPY*2=Jj-GUcrlFPSL3tF6bNju#6u@*C83b7u#hFH5TFcL0x{VN zUrt7TS?4`4(i?jKPzcY?UaRA~Md3-EFDDp>Fn>|u+(ZfOy9WO4YWy)l zD-t3}qWh^o8Q;KLxOCU?El#4$VVw6>mCK7~bL1|?kIUJ7?DSiWjN0wVAt3c!bta@! zeAhBe6K}v%f~|1@(teL=m#YLNS8}48fu6eg1C!w3;FE}S2~6z0Z{Unak`e|!_(+n5 zIq;3G*kEREwZ{e$tUP``$+D9o8n{mR_t^4)-D|Vd#Oub&12CUX)_Pj+FM$y3z)z#o zFRRGe1-}u_@A;H_2c5R*H`!auDT(6wJ-sG9aY$U=wf{6~tlhQ^}qWft8EC-v! zWa&3vevxTJq_-1z!L;*r$<}Z51SIuFUVmj~JJ_`f&>-X{ta11Ii5^oN0^ zCIbP7a^-LQoxUgf-uaHdzk*oF*k@z8zw)!EmVYdD4VQK%f>>62XN1; z_4fnx-}*h=^*_Ec^84ZPIG;6RmzVSYz5ZQN|s<1i;>bzaIQukG~u6_Z9rzj=z2Q`#k>s z9e>}(-+$uoe*E?0?-%&{CH|hr-vRs`!QV0bX;@iG$KOQ!O~u~~{EhUFQ>FEfzvpjl zY4Xpn-P!1Cp5NNm@(F)U(7R;*Ronf|i@Zy`ftt4Z)?i?MQ;XjlY-w%q23qQZO}-u8 z27g<#zcG+s6WXe6@dfLfw|HAZ!PZbvZwdv1`ewgg*Vy6ELUe;|Nmavyrtru(l7`5KYfNn)+0rL7HYfR1}N*ZU$QD~KK) zdqiT>2kNi(tC5NH%}jjUvQ2K$HZ})Bt*tF>L4R!wF>8Z6Tm9Oi{DKAA`kle87?o}Q zHW{6!`hZkaq&KzHh8q3)b~L)CrKz>P5vA0jn`VYt;HAxA(co4;XcY9fwYK^3U%R0C z03I_V74YW~;xZ!CzbL50?42 zf#bCKp+MXG#+Dji<9sP9Z&Cij{6+H{>o+f1Jik?XvS@y7eIS_E>Z@t+ZSe=@2V2@| zw$4XW8bh`I`85R#=GTO3ee>&^S{vuD+E`Y)Cgf|Y_24dltHyhDxUCr?SftCX{aOp^ z#l^a6#|BWZs7O+K)@~@jcx`E=URqsUe(?rg0c#-3BOuyCH<+UWNM z{Cb<8!>s!-B3sCT>vwKoxAXOJq8NrvQB3vUCW?mxU+1gwgLq)`mbO}LGlr)@yDH>w z+gZNN-yGBe_UP5-*9W|${+wL>eWY9Af>F?ogIgVJ^ZS~{iG*ajNTHxtIh1e>MKd7P zc=Kz8$GsFy5NJ4N!^mPX2)2d%O7^z2;De~X#(+Ox*XOKi2{qP293goAwl)ZA6OO=7h7h1x_cue0)%c;MgJ36&AC$I(lXA6MJZWn&2UUhvS1pE| z*ZOzpnqJ$2IiVSCQmRTZ1VqW~;dz0W3^gEc(66{egvn2aLG3mEdNfuKH8(W3Y==H* z^lecbrERg8$!0+)FyVC_{bt>b_03Qj`u6(ZR^3#8qPEaHp>JTE$8$B*6tz|WLu!s> zU?((JTT3%kccj7EHYm7S^mm-^{OBaozZ>!dC zjOOg<{$1^FgTP6@{5xtOWn27;8rt89LR?fZicXe>f-PIxe6>~npzqXKSk1~cfwr3Y zKC|HY+k9>HK9~v=B!6R_ms9k+I^ZKW;+&#I1*4fMs4VN-`~feiqX)K%8m7%o#jMxY z>3r_3Yo>z2T&Qgjqns9pQc}&K#>UoQo29>OlTEu0W>s4#0IBfey*KDuEUt0Le$CC{CK>q>XnNx@%F-G$jY#ybEo%q^-0- zpFLZ*Uq#5Q-n~EcT2wF^3q7iLMfzI*_Qsug$}|G!iqL~2Yh{|`RAO^sAYU(|#Z?dA z9ZoHb5AZkU)7lnTcujs-g39#bgafmvfqojwt>c`l${!*OdR<#flYS+Q$SYSsAq0K( z&0ek9zujvQTc1%37JYx{xp2wSQA|`Z^jzg@rdcRmSFV!Ma=NdM?rJ^lO&=W1TAjqr z*GK_RbFj3n&A0Pne_eHB%l7fnxpY|PSMPKd4yEg;ii1dk2h3qnDyc@b9}^0kJWMmN zkkM9XD4(thgQHsOhu^n~&hlC{nRuFIGKKdwE>5VZ1B)VPbeS*cBO_Q-7gS!Qzj+HR zZjr?IggYY5Ij5*_G#02OQdY+3+1Ce9h=!<0Sfg}ihK|{%sHmlt<~@*|Hh*J1#0>z2 zI9Z$hlrPK|FkKrpfhxQTaPz7x0WS&#))s8@0S9dIH?_3w^a4SFcXaB*QVKIdFp&8& z?p0FyYAGB8v<~>554r&0l&^u!R7S@-=?b)k;wilIgN>r!iQ{B;AV0>o@niZ#k?=qB z^$m11>jTZ_LAGGah~o&x-02VIYo^S>+JO`5=(fJO1v~;oExJn59+*~ReGQ}$3NJ(_ zbh(9X)cP9%EP>{ffZ9-Vtq(pTiiY&&YmL60fJ#rDoPrBcKvm0Voq>$-LYf*HYnz+j z3&0|_cA7Zn1M)o~#Is?mzYV%w)Q0l>iCKbNiZ~eU#+p#0g4P;aw$#@sC0C8-zBWQx z<3m1C5(F>mYe_o61TN6mhMFQ31>T#9!)nAiMT?i5KMDeFY$jB(h5mZ2u3F0?fN0E# zCcenMkT_Rcxf8DZs;#~@t$Hi4H!5AA3?6A+DA633;w%kp|(;|1J;+vi+3zkKNjv-tgXaUU$A4TT&;U1;B)m9*(Cc? zufMQqq5XSt)1ta&ZR6UCwd+2*)?2-*w6gSKEl|_a>aX?sYQ%pj!t_G`iIb&i9R#;x zY9v183;JhhGuH1cZ)@|etEmYA(uRL<>TJ`xb2Ip)pkRJ2Ee&G2O-(J$;GS(Q^|iY7 zwy4PZ+7iytkUEWe{Gtl8cqc4CCwl)I39JZ7TwF}Ct)^E5}H*2_1%gihd z7G-LgBUEWug=yJpc2SY)Ur~|pju)01bTT;x3qP1xtnmqj2aFq)HR+; zzV!oJgy~30+3JVLU{va1Z~@-S*VijRKH&H3TZ6&YK+$}xODHbKZ0f5;&f1omKz@D8 zd`#dFE$D*zzS?cXUTf!L^`$0%Yp|*DTqO#5ftFAkR@(Af>hiWUwrut_=GBvH)LKg( zq4qpskbq#EVh3W#x9BJl>m~V_KzlJkVp8?fy4(gU82rW7%Y@MkJQ)iHU>ziaQ_xZi z0FLQlAn51T`s?bO!H1Ww^sFr_DDbXb=T(awUeLkoF0U-}de*MGxO}y@teh8m+4TW- z2sMCAViM)+9x^6;>l#|$EPSgEyokiWK|*MUq_rwzHn=ia!GQ_TxKj@W&|a=OK{8-? z_?jWLvPKlbl2O0{dqI;H7&2SHO6NlX_j*#rn4T z7F8zJr#4`asbfe&Z~_@Xe0>P)mMtI}#=035;Z@6KuI}b%Vv$YtxP=`IT2c!uKFA>z zQB-pYnz(B2ToFC}JY?f4p5XsBfmdF-p}ZP2_EvAW*t2#Gj1IO1G|G=kzLQgrSh3#H zK(*)+XVO^^7O%IpC7{oNBEhOEXgcfaP_BNVkUH-|E-4~I^jn8eC?(}Of0SC*Y_RIyq2ZW9mj~O0bJI zt2TC)iim0vx)Yh7?A2?TotlF)M#^Y6fO8(KNf?z_#)79eVlI(9TVKzB*F_ogLQH(< znMP&>4ZaYCQb0Jh1RS(M4t8b{T)*Jjg zXJ{B!QnAbOewz;x>!m|JXZ_A~B5?YL z=ZS)VIx**etH8)48%1g_$iWi4HNMsW*0UqsTxFX(ka8?3!^beE2qoJy;Kqay7(s8` zT8Xk}(BWP-V}T4B!jZ-kGs6#UtCF=kKcXMRTeN4w$8F{zfcC zzHZNlVsY{XlgCd*mFE)4(PVFw)$EU!Agn#KmjT#iHK6(W~hx?UD^v>ejZgU zfO^imD5bGBFA&@bJtw9meOWATZI^UPAyXM{_M^gDB0A(e7!K927%(~Mp;oRJ`1LKJ zdi)m@wwQ*?r?ecD=WQ+SqUM%nXpU|50ft$?c0{=hyO4MdWEY!&!5o-HAUv|PqQS}5 z^kQ9`r_YZuLrvqe)rW8plNt0t{g!55kaP8%f?QC9aW1qoF~-pxeuB&kb1h_ml;$D> zgauPQDr5ii0x~I+pP8vSdp4?m+7q*f1HH;~klKtas5w$GlS? zK#&ux-L|M{Dw1&?w4^nC<=Si(a3H7})MyB%kypUHIb;A(o3dsqEcSDro}Zs@&jy0i znQjL?5V#H^u~#zbl{SnPBcVk$D=FhP(snX61|Q6}9ia;l$WYT}3<5kgv_=rQzzoE! zSRSN5fH5Fva>2k<$C0VeHq~3&W@r>YSP*t7n68NjuU0EGi?y{#Jydb9GFvb$Zx>-S z8z55?U@j;kThic;>-eYXc^B$hCU9?rIV!2ejCcVdb6w1cTD_b>F&Apfbxlba-d}TV zvBS2dg9HjhD1`NoP#Z$ye2pRKW_lQ=(JND=G%}(Z5hs_K;jo>Y#un3KBL zFxu9z#a4N3{w?%-=w-kbjxvs|!YlzODx#4i4HL6rD<&O(TakXHnv1B5eD=g4rCFGO z@{uH+DNLp!xL`8?sS8CNC{FPDLOXz2S(uP*Bn8Q+rp|;JG&BLNN&CGLX-DC8aJ@ha zQ8dHo2eOJ27I9Ei=`F9Xwf+LMleP^35zOW5cfuj97E4yikHc|_7A)9QFxB(1oIWRa zJklF1e6~3%J_kX>(Q(Jq)0$3;-ORb@<+3 zHKx1rTnI6PC?iz^zW_{r;gu`&b#0EP6m=k=cr!24ZsvST(0$A@&zYRDQZ4cjb}%d< zEMDq%*E5w^(vMf7Z?DI2CN>u+=` zl##iL9C21>#3<<|MrAN8j?iUMkqoo99=t0somIa10uF66Ln=h`**xtvi7tF%vNuKl zM8>((=(b=$n0m)8hS==}>L9l-uo^LUFy-cu1voKzH>_V>S-Pg$>n^>d+`DGgc#4Ih z&3v(wAs&%gFhU)Re8ab0HG7@u`sHet{v#Yjmkmr|_P7)X1sK5#M0z#1K{xY~^h=0;K?i!7{0((E|AlhK4^7$QN#i z^>-~=)Brtvm{`JBrffWZ|-bTGlM+}(es*Nl2$X2u?`Co>x&owt6 z2)I_&Qm(gQ9gWg4XGddW6TA@k!U%rN)nEs-?#$=p;I&L5Q{Py`jdz!QKr zy)ak5Y=g{5#cu(B7x+?f!) zf5Y48lZf>;&3eAQrL6&`Ay7ce+hi0j+&TqmI(A~v*5%SCd>S=%w`^Co*TQ_w`?0kJ z3%zS9*R3qA^m^BN3ksGE(+E#pWqm=p`df_a;_~wHZR;yGc-L2KUSC(gz8?QJ*R8Lp z8$)>uQ4arD-qLX>Pqj;xSFmK93S4S7aNG(+LF3%SMHUgqt&K}8QjS}R1q;WOkSuIr z;Ym@lfZIb%5h7Q!m?&Nzo{N{7yGklNkt|5Lxw^nB%wNBG7|vg0Z$+ttA{tB1VP$ZM z*Si(VzR{AnFuL_)mqfc%r#zmreA}g3tTZlCZkI|17(b4RDs~(NG^*Tj6w|13$5B|L z${kOUjVgFN1lKNbl;S)5q*ky9@ZL7BwbOB&1#3v@<0@c7N*`B28&dlC3f!>8kE7rX zTmCo-;IQS7qaY4j{&))HuoaAlU=AsGcmZ9z)H3f2&L6TMT&}HMgowGt+{?F^(SHSt zxPQyulV!c>9ulbLS|3NJCYguExBy<(klhk^8R^FYaWs`s#H=7|Bpe4ZJza! z@|GxfZDFAz&oFCv^6>wH=KaO!5;a_56;;!<_)rkoSD{(BB{7cl1p#U6$bE|q%q8@AaJ*bM} z(-Li|mWuyQ)Ut5J=T+pHN?0PfnMUR3agh9HU2%$`{Nv;3#+eDte5*dM(pgtc&iG;H zG!3WAX>Rkq)lTcWX+e@?w64y4Z0k)AtM@nkLDg$-T4D$2TAw8+5Yv+>6-rg$1d+YssA#*~}u^AL(7xBSr-%*(6a#*qHJ zg1iNJ3pD2YeUGMP#^l@mT`OC@dCbFawHbZ4<^z!p-0DsONTp|4laD+uQq0I#a z{q1~TZ7p#7fLEZDZ>TUh z)u(S%01WpoxGle>u8wg^x8^f%Ix6FmjTe#cwRfrXh(V}B(9tMLE3isSACJ-&TBYTj zu(U2`pB7p9rm1|%&OY6~d8b0iM$w(cRzdpM8c=BEn=?`aqT0N~$}(@%SBGym`^2*S>viJ{5{_CU zEF3{2{QBZ?ZdHsPnHbk2!|Avv){pCv=2}}_Mo}iNN0jN|v=PRlN1Ry6aTfre8kyMX& zv*Ma0u1SVBFXEcyebFQ*UUGb2G|7pZ6{ATe#eJK&Z=>L?xF#7NP4bbkP5z@;>>M9e zvSHlY6{AZg$8||um&A3+khPRk@NdSbOGXjc@V@AhQM4;YmrRZ8lDIC3>yr0Tmy9Ba z>3z{9qi9!*E;&7}OX9jDu1m&KmyBV>mALC@0v5+dnQR=RlQW9l2r=5^195E<*Cugo z@;+%30-U3XP98~{=%Zf88G|+%ZNp-;$r)qNCSMpaa!9eH9XRyAE=DbCebtUeJM*L? zu@pV+@U#<$wH-eYOFvGK<#B+4Iim=~I)CUqH>&+?Bguv4l#6pl3X~{1$=YL>e=Jk! zzy9xG{!#QaHr#52_`u=i!er;+!#$(2*b*>vBvFdWVh3oBKBm)Nd>DO9ryW>j#&ixJ zpm}_$oHsV9Ts#V?Tr@;3PP|)mB#B(=l*mmZN#v4~s5wR&%f>Jj#ieniAnLd@UhN;N zG;SDwXS@o+slQ8MZVZ$9^8oMuyRPcJ}si=b0zRJ!xSiy%A+ykGP#-(@?!J4yQoG z=#==ThG92uMTvB*l|8(*9M>two9&~B`Om*OYRo#txryMo=d6sRQ%1kFVaz&ZRBemv zlz3QjJS_Qyo2lPRJH@%p;iR@pjeeKIn03mi+7{O-ah(#^DetCExn!*V1=qGtyt7~= zLuK?!ZkN70jf>GL@of)r@5dis#2?Q^{EwcD;GW{>G%^4@KhI4R9Cn&!pW zEYrq-vBbAbj1&zQ6`x_pz5TOpnJ6AQ^F?i$utU9u{ZPS3W_?s>*N7V@N=~T_F@i9b z?Gy2^(2)co9>Nt5;o{l#zrK8^d=49WIppIe?_qf8mG5dBV{}YBOf(Ji>tz$;j#<-4&hj_)If_D=tIB6X-su0bQbj;|(M^9SEjH-=s9TV3v zaUJt+>X<7|)(?3v!%2PbZX;u~OgyYK?k&Z=rE&F^yr&|-?^$^1=6AW3F?uE*W*XNs zaXs_*qi04D&^eONH2Ua`Q_?e|Xl0C^iHDuW^-NsP{Qc;eQ3QDY9q5@+v@%A|#KTbI zdM2)C##PUpG`jlUhNIS;lH(K)OO1!6s@-<+qtqH(Hv1aAn?rSV{n8nc? zrFKf1W;F4i<73jClBO9=Gh=L;c$n&V*);#V!c@zL&WKTAszXB0-o8pQ_bXZ#@ug>xo?fR-w|`)9&^7p z=KhA5`!B`Z-xPCyd(8cJWA5*cxxX*wet*pUlQH+t#oWIbb05V#r*M;Vg1jXQ(zPV* zjWm;Ohoqi%yccH5&H~Awk>SXh?)cs6eBpR*{Twd8v(0;_S}BLWo+$qfvxm=TJ?$E% z{m%NQ6mezS zR7`%yEBV=8HL?H<$A3=#e{$p4^E>(Ph;Quqbw?-C10&}jj(?r`Z~xS(eU7)bghvKDGRtCMG(lIrL|2`<=97>iZUqoIjTTV{1q+89D!n_-~VY?D?Jiw`0TD z^E+v9gMZ}wC*r>++fOb3v9FDsKX&{`e`ovC?>)8r)1E)I{5gYT%kOME`!a2YsTg@P z%)eOvt8cEYuki;itFPU0xqe}>zCfG5wWY~FzjkM%uX%oJTgxZ>H9_x^`B!cCH!t!o z@dj$z>RW?>`Asc;Z?L7c!5e6)3pV+7cpLm}&HlzfeobhrwymYUR-fZ*ZfV}x)DjBl z+`|%R_0{-ui;B#Q6?5tuTYN$N!}Ii-mgYcE-`vvD$UFOSeY4{&ZmfhS{K=AX^~*M_ zU#S=C@Io#hO?w)=b-qCGy=>I1K+&vFk&cVLxv{0Dp-8`MR_#3b|K;=a;MO+3uh#iY zFAW6zZ9(`P`jxW+SL$`X`bK|kex@2^YCVp80{$oeMplEGWe0X7nFXj^QU8rKT1V-aZP3}O}jZkT_?|U$&Wi`EYhw+k>_T%Ye!Nw zZF!Nd^F_mXiaUNbuR}W<`OZym*Gh18m1iWeAlIP`;Xv0z?c%6TzdHfyYCWs=d$m>X8d1$XHw>(`6sF>H0@F6@8-_pT? zQD3^GcRi%;r!T`pl;~>AminsSZ07^Je+}p5NW1P>o0iPct!NbS(dITQy4^8*Q5_SU zo6)ZAM+tMAwL0eK{SCOc%H1kCZ%#`s?of=sjp(^7Pw#F38^3o}7#t`23nJ=@+t|1oJ-kTi?3Zx_9ks=VJ}&QBHzZ zJ)s?UC^to2!%eFHcg$XKojfnhmX2aPc`JN44cFy#3h)Typ!hv5 zE2Tun4gE?=LP-|AEADAelJVHrA@!mhX>ZzXs{FaL6O%b`=XFnz`do#(h2J?IOjvz+ zJO2ChO57`XPARe4l}tVaUrNvSd|s7Dx~5<}C*QMM=qC3m;KReJTvwr@@7&o5!vC&A zC&++J5p=f&*pU|Q0^=8Iz>-Z+|{n+bY5qwlFRl4wj23UwURR*ncHZ#zdV!b z2lASkF4yjkB#w7OmzF@eca?RevwT;1RtDcszlX0O$A_|1zK1$9`F{F6$>>*(wrHLP z?EyWqHm#0y4mW{+adnli#D7sPax?ww*UPQuDl3tGP+zs8zJ^;S%6s1DV8AW@XlPXF z`TQ6PNV~Oz&9wOi{2~2*eaZxl9oh5w4pt+4OL-w(lQH7xeb87R#Of6Ao*R z^qcJ>U0FW*J%Qy-FG|H@rH7f`wXcI>$!iK31=m!e-@cAC5`6l-syxaG)1Qk!D<8{e zJ`NP~(UQP5&4ugq3sa>XuJZMg&q04_Kk4cw{n3Bc!}}YUAKC>M?Pqtk%e(?QD0<}C z^iceEXS>q>Gflodl*#U4d~N-Yd(gq;D_hR@bx3*Bi&+f#%H$JA`)vNW8|}N9h2kF@ zMR^;oedV+(NGI!`+xmg)l7Aq(!nP-x+9$CK1J^H_Oq$rwXDU0R;m-8avhciNX2xl> zI~s1un9S=ySB9i-xO34Iz8}cSoWlGKGc%{i`($;0#}6{5OyTo8)2C98-?2DzDj`8U zKkYPLlQT}^eZwv3QZDW%Pv-rd8I#Dj4Kq_G?_#MB=u80;+353WNlvY}?%IRbt;>?+6+ z|G}?+GHvE>=|6%%Cd z>lk8RB}dy=QciW=Zp*$B`oq2weP`QODZ5jcuwvitRMS366Z=ZN(lUy-fa zvkN;@(l8^Yo!80X*D8uTQ`CI!u+L~;-KOj_*kdVam><$^HSY_XlQ|z-^VX+lK@BI< zzDh#-XkR5|#@JWV56n-QrhSzn_7&{G6tsxX#lAv4$>zP-SLQwJ2Tq(C?Ja7vVeBjE zKkX}a*i|@5>mm8wA?F%F6!QsiQf?QDfQUWMb-PexN@VvWS z=ma}Z`p@wrqhS2Rp2qkI-$cd_c6`+MB}#r{PX3{s zv?rNzB7TTv|EAs4L2|&Jg7U{d*uSdXg}c+}2c_NCA=6?-@$NJwFP%~j(xovY-mCIW zdl=)CO8$WVlFIaHx0&(=`IB}Pb_pL)jyV37T@1Nn^|ZrKZ2K<0XZff{^hWjJcHBMv zfNNhTu9QR7-|FAB;|_K;?p69u4x8AsBiYrKJx%+X3})Na^nY*?&KbJ zPeOv&Kd2$RBwO?_<(L)DZOo=Q#dT z{f(>05B+RT87|n}R9Ke%)6kXT;{4E%oFetUem#4Q_olskGvxjV?%`LbN&63FQ~%K} zm-gX#I{RVq&*WKMf-{7hy2OqQA1+B}2PS_dTkK_5R#z4au;zowGjrrQ?nySZOWFUH z|1)>CxR03kx)oi_`6ArZGeO3ue4=W{J;~@6{e_7cQqDtN$}YYq1&$y5g()c-=|p-T zduMR4BCji5=$G6j{5ZY1E0z5tou0${hFfyPZ)18UwD=k0Bjds6M=(&9e}M6m@pyfT z>gUP(1=%Sh`vqCY@e8t~UB~we5|i1{hOR^@|NZw1NPXe67{4Gph5SkSD!(963cegXLNpWiPK zIR*a-gV8VG1E*hb69A2o`~s%`*}UDBUl7gbC+!#P7QHfzoXNZdJR(}oZc%;&@QCR8 zC5}S;0+~pv-`p)6ZuQr)Cr9!N(xCtxeu0$Zuq$Prz`T|w^YJWYpWE_W*q+V=up2P1 z(5_VT5pma4AWWE-q&>i0rJQQuSSIdz9KWCwb_?d$eVys1y_2E*0yS?`Z>0U;^b5Mu zG7x2xc3zjvLlwncmYtJk=7$=lU!d%m?0ubS8R8e1_l3==^b>#&6R?3@33Zq{qF*5W zz`SJn1!>AJ=uAtC@(a+9D8E46y9ztSe}zATa)$K_r2kI8fcn`QN9x5f`UTS7&y zO&zi0mpHuq!HbOY>ym`dV;;YK_V^{GCppFsey2HpSjPZfbEER}s_(LKmE-v3yHlya zD+)U!`cKxal)kI}CFcjHUk<$oiGY5j`h(xsDSjXFM{pTgw^DkadMlm!)0_vg3!788 zjs^cq>`3_KsYxj#`Q;sgU_kyXzdTi~Tfy%Hhw{1d%R5t3%zNdRt9uvl6*4mBo0KHb ztGdq|KloXsQ}}R)^xxr^)19aO6gwcIKjD@}jbEbVx97F9)cT9-tGmSy#5I-W(@$r4 z6@~4}ABLaKduv?~etHz$BYwJ~ziR^IlI5h7WN@6&4=m7-{^tC3&+bg|(+j&*`6(qX z@*n(b@dKg9Wqx+`fj{uP0_y>s=hANL7Qf8$n_T<4GMFKJxXY}kGn4uq<7<^K?Tq;E zoLAYe4y*mh4nH3GSx(wbX8Ti0#9?&p>z4GEUvK&EmOqdFNxL!MPM}`0+K2ilC>)|k z>R~=9-<+STn>e0NKai$(QcZ(SJ?tj@_-@m`?G)Ui`f^E!^|;PN=4XA(09+uQaulhr zJzdeWOV<5dDV?G}taZQY!>T^eRqPwoBYGJ4j;zC0|IVtXJweseiPAxjTa`YA-$}MW zy%-P3fm|U^Tz}@c!LAU#g5Q%$0|mH*_`SGiHr@*^!Fw8Z=6xdXS&w<2M816y58(GI zoM|X-A-E6vAvgr=%0yW=ysJIRjszYpdMZ3q*^@{w_N2vE5!^z_^H^|;612~OTSVa% zc%A`&KM~hVT$3ngtav#5g3tM${hxfRiEkV>@r|a^bSf&o#|8PjO*&irq2Am0$030~ zG~ggEHfYQ^NLdUHa=3ef=z){KL2f?*4zhPlILK}pH{u{vY!Mt}x6p<7SfcPFu8=>B zZxZeI$;BN4P+^`EKE4@zMM^fzjN>4bSIXHx6AogS2C6_aIKiv4lTg@4)K4WKSh5K58(vs z#6zZm9Y(-I#NI(%ip(#LbyAsErr%9%;#eo$+m6y@oisCMoivlU;M~R(nI{n6BI_NF zdCOcURr3|_5Sd3S>~+%N@sNs{?Xu^l;;v57i>`9D&S0-^-qk5Mw1u}%H}R9|&~9m` zMHkCo8woeL5(>kz_pzSJ>0Pa}f&zAZ$6rsCz>@5JU9f*>FLaAxN8BVC$a}a+*;l|# z#BLqKdTOSLd$<&C(oM5PbF8Ow`fSgJed&_*RAo0-6nDq2ry^hUda4Wa$#Cnbtl-nL zu-p^9o|+!D9*1=;wxgj@OCPeHiWc#?y`E~`+v};gcb(*VD%Ks$b@tO_U8rJSR|?l9 zT!&5*x>)1vD(jZG9LqnLzKmvNgpU~)#|+kZJN$Dg2lJ~-;bV&4mVJWtCow=U&IwtN z#L2}y8X2DRb0$_yu&yHV34BG$sm|*@0Y294V#11j-C5>1Pf+9BlZD3^XY!5scjh?v zxF*0dPCKth0`e+~dtA!??sl2^k&ol7_#k^Ut8_)7-;7mTNczho->r7JTNh5(-{{G~fH!@O7ci@LXP1?aPkH*FpdnSqVsBw(oJiK?{JTgASbNJlG zd2}@{#Ao;%xI`B94{)9dF3j`L!{#{ews4RMrXFT8@PX3P$TyMg#&~DDFhgK|&Zgc@ zJ8uueZ=wJ9sQL?gvZ&ZGk4Qaf=c)QFTnBiLX3rDAbJFy7W|#ELhkCNvAXnj@Ox72{ zbGkFxAhrV+w4*)81$}4NU)-LfaFxBP{Cyo6tS9Zfb|%*>94PIkE)EOlj|{1=dynu3 z>f>Y3tpopk`T+|+Vtvej`O)QqJlgf$({9aMg5y~DkA>qfzv@r7*tHH^CzJCs>XUhP zI9x~N>k#`G{E?(VgWLQ7y+V0Oo277`JyScR{A}p^B*>jy(ay>DbeMc*+N*^fNu(?A zn?w9g@zllUHSDyQK>{^hOq%=MkT@IDdK zsrdPf1INAalZAH>*P+~5^JW9$J86HvuEIYMr;sk?-<%Gd2|YCN8eWOlB;e{Y@tdq@ z{H9yvgyYNpA^t?>f6!0pJ^5Di{bBQcQ|Scq8Q1+_8aW;*g2Pcx<2c-C_bG6+FivG9VlUHfSNjzHIpdK=hr=;aKJqV)!$H6P zqwQ00;BcIPiNn!;aN=;}{L$cWT%UYDa5x&mc>@czjOzfnP`5 zl#K^ak9<}6fezeG;bVx;qC;rSzlhJ0br0Znf_zjI_9O~!b(4wDHnk)5(+>c5%gKhn z2;5C@t~9+v{CeP1f-_^CBr}`1oQc<_o!3G4ns}Mu*JwZd>-Jr^KaCmjUKZIa3inEV z7Cu;E<7OSQJP+JhwdXvwet>esQ38H7kqN?0dju!2@IBlM?%~?EHwwQaj>h(+o!2Yn zX7B5nlnqK(+|x5jt^e#5+>z@#tiZw@hr{g%6u43>+-|Sn4Ao6NcnaL^aF6VFXMOa` zf!k$g0}pfHc7j_1uQYKx$+yzR?GE<{e&9+`>q{1H=fvySK4%=3YEL(65nL!!!%8vf zO`H$>sc>Ax1CpPFPw+nWIpVkYn&%17Ohvnq9(W$tVOhT118D$#toSV^v+z01wXZ{P z8xyZf;5~5-8_&Z%+vmjdj-jS8;CV?LIP@#S#Pfs?P6p3wN4+MF$18C>;(5gJ7>_j} z3eN*xCvteWTlfihp2XFGehSY6UT4awdf!wk8^ZV=%|*PH`TlT^tm_DF2LuOrUM3kb z4BUo*44zLQ&L`u7j!yo3x59qt9u*I>$Bero@0&Yw1I_ zi1$gm_5o)^d%-t>PjaYY8A;n69jL(vnMMSZ)CcPyLuGPn5Xc; ziaUEI90zX{JTW|TZ;s%Lhh(_{@pRo2S+VP(o(ber8*gmdBOA+sH!3`_I2CjjyiwZ4 zIBSvLvYu?_n_ip-y*L8i2%J&y#yh(O4|OFg91(bD(!Z4^-N#|6}R+E0K7No z%IXn4MZA&i9u9B34+$&o>~@`r_b6B51A)Uzx#*v)ck?|3ui}<&7m}|)I$58t$WwZ= z0{3`Lyiw$#!NMDhyE81janpF>jpjOprAKVMacYOiAL9ySU4qvn=zGi`68DGo3HAf= z(Rd0yncg0c`vada?(v^7?$0`Zapbta=tF?xc;i1d-blm8+L!Lc8)@K-25&UpC%lo4 z#dzS2l;b$w7{?n0caO*Y#pC{<58`ou$B*NT$NkaI?~2F$A#eeH%imkvpTu#%&lkUD z7`!o)b`9}H`t21nce{4*3cQha5b;L(nLLMx1qluTyaDfJKj-IeG~Z+2D&OO|9Gv+% z;0coNaF4`~z<-)V91>SpNA0_Y#0#FK{6yddSvH=5@?7@wE{SKd@CrT`|966lC$A_p z@krp5bR^SE91=LC#CHRylz6F%eI`z+n{nPv?MMxra$on9NyI7d>7F9-fqFC!30y8m z{NloY5!@3vq#P7QzYqlwubfOjKD)4I$|N8>Y3J>wTh8?y;pdisC)i`-#L)iDydt%{X%4nu5Pt@s6&2d&IvEA6EXfg%4UdrmJwT#0%j)32nzA zqJ1P6abfYxZG2Mi7QVpqOs02rtGIaAzTPbMr~0soPn!9h_~aybz*hY@7d9H7{9Oz_ ziTqaiq@#sTf_@WX;|fVoCr)YR6MtLq?id`B9RuIEh+o?L0o+nO2j2|y9Jr;>!--om zK7aB(-GXxvw{!uq109cxTXLMnf?IwG0%hS14JVF6Owv(4=#zP>xTTJIO}vs<;+4cL ziB}T0oEU{$0+%FVzz-&$mB_jR=&Eo_;F9tlxTH!~D)DoCk8FrTR5&{Dbitzqp9IGN zw{%fp!oYt_+;SrEK^ZUNmQ#BazGUH+z{QC-*|_Bd`+YQSIYresX58|Sl7Cm@9^nHA zZaGmydj+?QX&>dmjyFX6c<*eV`98XRrXCz~`x^I9Oo*$-w6AM|YG2piCH;oMRYgw{ zS7k?lt8!Q|-}ForTy@@_39+~;(^cf{k$6kstCOe?D(3B(cpO|+aMSQDdnb|pINyyI z#Bp|Kvtn1-o{3yAvT@bJdrlKSzI>v>P47tsods8wb`e)4;ep4>Ijhs}NrU(fi(Fji4VZEPh?(>#<5%)>>(cYJi`lm|2%>Cz9yeDv3g}a(KsfF)4a9P0xfUDs{ zEW|(C@n4+dkA3aHjqJg*50-Z2Q3Q-(BZ;qSl!u% zxoE(<*i3`~`Qt@?%#Q#jfnKBso1Mjs_j#Uk&s%R5`BIXj?pO&65U=ii?>+b2d+x`% z=i}bSapURD<0+))UbTB1YA=TU0r#o!z6Rba!G@#VQ4e~=<&;slM={7_VOLt!IlL~P ztxC=k;dHFYrgP1iovcld|$1}&JXnL%Ro{E`D_o@sYUo1 zbA3X3o^nRfm-5*cP2L&HKUbUNpXcN6P4Z8x?|sNWHNK-2lY=JYvw7l+aV9x!5$>)zBl5Bb&&mZ!}zV#48I_!t>ae-_(49~)PElc{EAi48|(N7lD_N6k2x%L z4*=-|`LX1?rED#4cDc2_X8AGml`hvzZoIFi{h;)EEuSJkmV9_|WMP2xf&7>O>~iP& zS#k7MO&3MP^5awUg&;pR`S76}#)0I=CU=JXm;(cH=Plegh7NUNS>Hf@47st{<<3dI z9cAb81oZan=AVEtZ{KTqv#+g5u3f^t1^+1fT#HkVtnsyu9Qo^z@6s-r?+yZfET5)a z19EoxL7=@7oI~Djeh69P16-~QJ7{(*%6DpAiRH-fzjHZq|E3)I1MqI)rW~2$^aTHe z-={LS`+pT~%8_qvIWk9hQhrQ**!9Sde*i}IS0O*9J?+h~%hf)xc^~Jd{21eD^FGea z`#8DoZQA8-%8xhY$Jqbj|IKq5&Ly|XeVh~{QobU&%sO_t@jU>;$Orjx&(jPcKjyiV z@?##zXqQVskk`nMAK%+4;Gq0i-(i<4x$3KD@~jB*szR{C1vj*={8;i}$&by>w~P9D z%8w16-5Vge3({eStMeq}#gZ$aev~49=4VX5c-DX6g;?$+JEXY$x94=99^?@!pGenv z^rfY$?A_w@AfKkZnfSo&*W}8OH#44lIo!{@R5p9s-f7t&BJ!@C+%#RA9CW` z3LpXG!?y*yU&$LvOVf700OZM%lLk9s$fH?|a%el}LmtcmrQ)LSi0>x|cEPasy{!Pr z9PE4zevl_4zwpZ!=Wi>3GNnWF_WiZ9awf$0e%S-JkKHCbA^$G4(QY`tf4V_l?RL1h zzrf_o;XVPEZ`b9}3$iRb=! zHO6=2IDkBy2)dpl9v^Xflm5cfi%sLn)0@XxNYCxG{;q8``3Lk6J-pYuaK+?_ilYZy z9vc;D_Z-^=L#{uk2_DO#5obTda%jZazN8%br#C2vE~7l=b<5=>7&dG~~?ee~gDP-t68A&>`3fhwqRxTfW1x&*XO$gPrhvC_gW|NXeTqf*^

1N{Li_LA-$jSUeOmLtFX1^a$Jh9G6m>EDEErxyuI=FCONOw_devjBp2QxnAd!$ z%Xxtp@WuF(yf=v-CqOKR27Zhu@eAJ@@x%Ja3T_y`sd>XM$fN7{RRVq{kN&{nhkIev zf0RQv(f5PVf51!h1)fd#NzNMEssC!m-#T(~-HSszYmOtx$%!WHtZV&dXFV@Day%|^ zUoP{N_RX7o{Bo_peY>=GzCT4yE;;z(#f1Xt135VZ*jdkQVa3t0`F`pzV>$Wi{9uri zn;iT~4&zjEa^XcgYYtq<*9TZ`=t?KHi4ElBu%njzW3S2aaZd&A6@px4@4WP!2>b2( ze81UC*R+q7aNovHDJMT?amvXxzSfbG|Kz{Y-n!QJA>sx5bmI3m;*{S&pP+is-d@%l z%gu3L2J^Yx9CqzmCm<)+x);mIugvwhocyb(=ce78yJ>H&4F&xFroA=BVcKu*6P@5Q z{;7-iSPUmJok;xuQyGr@`fpQC{%a{G_j~1~DB`16zSk839&Ix=vzT%#?!LssC?2F%DNqIlq-U}$z zN2+z@@p1^xp~iO{s&(1@con^8f%6Gk#rKiyUU|NIlE*nJ_iBh2Pj~V?alCUb1wYdJI(@IDgWOJ{qyzlL|Py6k;e? zyM=fML+>S!pC&z{;ue2jz}`I@AJ97o@XzWZzl3+N$OgpkCqe%&zh~aZ&UeO#?&tOR ziFa904+}V*6Z91v^q0=Zxt&2?u~hEo2hg{rA0w-9XkO`d?w@-?(drq;{$9J>1*`Q zFV*r}MBflEp6(;PDNi8(1^VV&`Zl01pc+r(9#;efA8v+ zp<~-dbX=P53-WbeZ{PQPOnL9BnT~Di)A9JmbcEl3az6V0d(HI~awe9;`kL(rM-Z>C zcrP)~Q}tB|W;dcI>^{k`+>CjdMSo57&ahjsf6l0%pqFT-XSSK1_geiO z;>*U{Hl{1!Hqljl)HUh46w|f6AMbR=bj7>(fv&nIx%R@XL)Z3==nA`7>VEIS!i>`p%L|5^}*Q9H4*5_+Szut-WeRQ@X&{gj|)dpv8 znfcnW5nYS3edI%L237dO>YQ^;x-P|Z z&Gq92;`)4@%>}yVD37bXFspOX#N|2Xb5q`toU?luinThQs&^!fFP-@D9H1rNkpzEA zzmV5zWK*FRto7*}13of72k9M2*|xBMJE<2+nkSM-ul(gt)yUX>s^%NdAa@t2c-Knm8ZmTAfutEw0Y0{p54G z-s2oY2DafH$*>M*c_79)Smzq>yE?z%+yd@8ac%)zB=B6T^D5qzWE6Vfvfhp4{qX?9 zd*tojoNtHsClPY}h!AodBh0ehxOb{;nBm3g+|vwSJ)`@&FT60F;dkD%%L-n?Jqj5t zDEQvN_=Uk)eMj8S3EAZRQqWfwaGq{kd(YHNm)5aUvyvA=ztq9|?*S+FyRv#`q(=vz z&u(LTx`?;*jh4TI?Q}dae*#`L!~0ZC{gf=v0sB%B;}+!;>ADc*rKMS%cN6I!vGXbQ z+-xuO+&V``&~r16_aJ#3!TXhUzbebu=vRe$?3{9bp}_C-pJKs$v2|+~K0%+&VM_fW zo5SxCIFznbwn`uF_gF2Rwfft~23dgRdvW5-y%x@cSLT$zv~)K3SG8`AivU;7E#pNC=}di%wOb8yg; zwmY8ee-a=%e^!F0($f4O+Zo#5ksG%DAzs9T^>duy`)!m5`8jrCbpfgJ7t6ClQUC3@ zXe{oJ(xJ1ro4jRF@OjQwe}(=h9*jr5^ZhnX=5JSjzazLuaxX7Z4Wsk9q;L`9qz~3yz2U=o0PU%6i=|4&x-$FSthtm-PY<$rsoU9A{DS zY=QMmobvh?q^F96BSHOn_iO-g;NqpuVpDkLyixrJCAGZ@vdHo9oZ#V11IMVt* zv3eFU^n3BF^jwRp^YSa1ct`2LdtUl2jFUkYK>fG%cP8o&b{(-j2iiqEW4nw~6^Ac< z734U&_h{lNrNiE0zSHqy|6v`(LznWu8=(9T{b1`8;Ie+{%aiMir-Kh}Sa&=feAK$> z*oW6khrCYxQhTv3$K(D-d0s!p0rzX-3%oUN@y;<~+AlH~&lpb?ElAiu7{_}L73m>E z9DaEf$;Cpvjd6~H5YIAB`h<8p2nX072)S?3-eM4; zBC*bd~=I_mSg@M_4n8uFbwJV1H`xb1Pioo53)AJ=g{*4q*1 zdo|=+wS1wz9OSfuThG^2?`r)!@hq&VZ*Guyu{;9!CC2p(ke(Rlg$y*)SjV<-{o(yy zJ(fP0!3;#XEP5XHAPX7~v0nR>#q0JK@plf3c)k<{t-c$!w^%WM;ArYB(Tv}B#k?CN zz6cA=_!0jkevBva3*Q^@d%^nihVh#^%Wj1{dZ7`&rGVek2Nb{JZ0Nt)4`}}ZFVc4j zczyuK-#YdnvLmED2nPb}LAY#!-(DCrdyumQ+DpXa680d>SK4>>Hm*0N%L}(F+ac-n%9TWDl}1VD=#MTJPT8yD*@0%Vpz3(B3U}aBj@dKsH#wU~z z$7lLYYTd^Eqj^4bWxn6-L4NrEu4fNo`_T=*qnxk@;eNOIuF2;8dmMkwzjoMzZjzGJk*(xWLI z)3A=|n3NfMgWv0Nk3!Fw3S1i5|IEKedFcJ0;rZwl=;enIlJEN#4sJ-7UE6D8Ezcl1 zBY79nOC#m(_pkt7x-Zkp^)H&LQk;+}jNn>pgy171Jj4E81X()cZ|^PV!urf?SYOIQ zw6wR}$@LEWgXCR&@4X+2nP^4s1euAim6;v+t7H(cSwc*Sxg7t^3cgFw|(cW8J#bO?zjDD^mLtW z&oci?q= zd6@Omz9PT0Fvttg88><4*}+1Hn>^CuxHr5&!XbZQ0R1x2%XR=>`-1ud=NI)G<&hlc z(NZ+P{FA$N-IeC&Fa8_sH8BoUE{ucdt+LVk`&~${&r8B(Mvk8!pq%UTV|nMw8G^}N z{oa|(g9tGmH6QREpN;QIS@QvWkiwUW(>SE!d=0te{|ZKl_u})zRmdZMVDa|9w@~+_ z;Cpzt&Fp^=?;A$`-G?9Kvz_(x2Hxdk#fz(D-HYUUX523>Jg#0mlfjV~xf41mXs@Nm9O=OCmPUMzFiqx_8Qnd*F3xrOP3|5<%6yT4Go!+#6yad=l> zs5*Sj&m?@wP2o?(c8s3RYJFpSm`?bgHu&uvsF0IJ0e;Uv7<|FIiuXy`kEoC2PxMbY z+)q{2JBg#G+hh1#kO==Cgy>Ctb+rtyd2-;@%)FjLCYK z&U(1+q8{@_0>aSK}a2 zFOxG@&)GOdd9uM=-?dI){n2>6>q?o)I&ZS$0GHjKxm#aRz9;aDpHmNO&Z;!+YubW$c3W{)krRK0R)(%6xIB2g8McR$A0}`-cN)6yOZPZmF{xp zUd&(8QR#u6Sf4X|9|Y}YJIcOa!_N@bRGgo!S~r}oI9DQ7>nWCT`WKZI_w{j2zT!+% zK3nJ3qVTZ|{xlbp@} z>CPnFs0wBlzew6Rh8E{IU^~5Cxt#{DwzbUc91nV*llHDH;ByLCFPUF)?66LEwsRZO zlk33x{gKV~Yuo zcw!w&gV&aXx6XP(w7}o{dNM6O1M7+8>+COnN7xqlb*vKQGgv>cuWaZVQ;VFS>*KE8u*H;ida}K14Yh(r@Fz3g|5$p2je+&+f)_1wXYl5uW`jI$i#gKW^`zV1PmzjR;sAVH@-279pV@ti)$c3_-qfKBceIy#p;0eJ83-F83u!_khd>ab`^ z(--Tqj@Q>AH|Y8pH)ft!STW|;$Arh!)=@+m7hRsa$X?U@{1`*ZEq<~O^KRvg@GAXb zdFwfJJmdklS^sYP)V;`87`a38Ow4PN1^uwC_z8rF-^p_p_)B(Ad>+C%NExGS+2p;I zGZ~(Hu8x#5e}@o!w6AY>k=}qa%yr56T=L6@5MMksErgk$=c8nK^1&##os1{K9rMpT zGmr8FmpGS9b2#w4li_(JS)L0A%H56iiSLJv1b%-P^ViQE(_|A=p688ZdG<5P?c8bM zuFoJu{Y*}rE2b$XR(ZltmLF#NRA%>c7Vcpj<#qn9pBJXtEh^7*M_hjISzFIX${+a! z+8l@@!*A$H>)qO4+F$$_H!{}8@#6d5-Jl_Vla+2*8Duhl zeXcvh`SnU?IdcFQ1Ai1N|6R0F7CgwGhW#A&GvpiH-L+!?q31(r^{-5KAsPGbbf<-9 z8EBn2fslBNAe_WJ=6;O!nEy$(tUb)_wF=ubtjJIA*uiq!w}_u6ANVxlu;Fp`J zGpmCn&Wj_C=kpl9h4VAAW5T#%cV!B&x8iSfSN@r25Ypa>aqQ1I02H2IMmgfCdJzsI z{iUVF_6#hg5Mpy_CI1%p$J6)@Jh(h$3abVmcbVjJWE-jDM+kPWU9^0k4kr@p>x2zh1loKCqJ&e%>F~#A~SuucdPV zufom2>wWjv`KJClAMonDIe5MA{%XQ&$?=MA4qorOzrNAbU*8D*)pK+3y21Xk^K^ga zr7OS#96ZM(C$!JIyTf{RX?vgM9oLBySU3~slVN7TdGSupqtScv3NLNXYh8Ki{%>l% za(L0H%E+H0U$k1;$#C>^{?8CxKfLd+f%oYEZ#W6Bu(MzDKAO@tj(I;MJRI+M-GFqK z3jyN8#G~-SP*_L$ho4b;KLf5KI?n)Kk854Kg!OJ%-z(B5B))6igx?>RKiIDf1bhaB zM_m7TOONY^)e9FW$l*rRue+M?Se+p__M73cIuq8h7!R5aksia`4@U3lx3Hd{#j(!z z2l_lO{9^j7&KP}8%{KHW`qA1E_v-+wVZYh>-`tOA2OByX@UQoi*}-D{i`QT62iyBT zYer8Gu)C!nJ%E8edV0$V z#@&B8TG`UY_|O5fF9)4Rz&^Y;IyJD9>4%EYC$_$baE` zmX3Od5k-A@PLGV|yY!gxT}iz5;5+dpV#q&?fFXw~Lc^c>TjslP-oMkQC(B1G zGUtx_G47{xYy0VG+i=v_&HuR=0Sz^&bQUSr_smv zC#MtkOWWVdL!IpCtNj%zAlR?p1^mg2LnH4Y{W+|+|3j$f4)izUheLcU#6ONW+wp9` zD;X!gKLg=?U*UKF6b!6XVrU^L+mxKOz z9(#LfN5P-Z8{#|PK|CON#BX%!qgqF!sfyN<(bIPwQTplOV-^l*{es;9qbRpa>#W8D z?w@DBd==@W2LUlY72?k$B)!;=toI+#Z!Gu2(0{)l@{NUjheN)XL%#2Xd_35BbU=-?L5mem~@UBINrrLgM52oj@GpOY1}0I_cvF>&H%HXa9~Nh|i}!p5k$n zfZvH8C43Bn)OFb5vtQUQ_TRrl$o9@7B))7v+siofdA~jz@|6+ZKsz{m*^ZqE7!EV^ z@#5_no$BAtbk_G>6d)dsS3lCdKlr^f#F-!Kr^YSY@yCd>9b*U?=la69xAUP8{{ce6 zA4eGXFY*neUczU{@|3Hv{L=^-r~HKRml3i&>r0mZDdH^8koo_Bapd>@BRG)bmkCVy|045*xWNdp+}jwc{>!LuNFa zd7z;k7l%Hrb^P3r`X$QV)kT1g_eS_KAN%Wv2#3C3?Igd5cb#=F>(KWrU5xvDSsbZ! zld-ybUlo4=KkVD!YaejF_F1HtvSryVfS-Jf^Z*~$Be~b|nEJhxt?Hg2mn%8^tDSQM zOZn1ck0HFYefJk!U;7639iA_lUK*)(!yZC$G89gyOS`r|K>D!1t-k_a5%`Xu-#3h} zfM3~jatz_Sr*<(w`QgK)^QB!o#+Wc!+4gDD^U|)J!^4bY-C)PRd#Zmpi!jRe%aG0Y zJMO3bu(M^oPaqtf8a|9{7zZjYe7;QkAwPGFw+{3ByKl8_XZYv$XFC5UAUt__m*k3* z`#ySC8`4KBd6O?@^X+7iN|l++7ZCb7ihkoT%nZ>her$krQvA=)AaRUvjsNxj#d;@u z2%Mkq;(7P4;cdrulm1`bs&+SoDH_X9cI5A5zffMt?~pSK9{7Cm-_cv< z$Mffhh#>TSS$vPnz$TA4imbe0#U* zU)iqtGug5I2oXiSvgeCVZpXMoe8s}WllH#(&_S9R^=Doi+kcGTM|VAVjQ;`shld$% z??2|_?ptA;DLu$HqUFP?cj#btC*fdx+&PAFz&~Qcqw&MC-$Fh5j`UuoFOTUSf}w*Q zyVM`y-WS{h6X4}`hjfFpeAMB5G^87x@uLpM;j6==n&&v-x zoW^#IKkV&l>Yo_Sy$x{2A8|O1?OHB59EjmnZ@{PI_;`AtR}9DN4gK?|!}(+boaK`a z$J4|3IqCT95BUSVVmMxJz~?cC)CLAAcZ|I*Gj?*{v&leny;~(&O z(&0Fsp?{uqd_3LYEXQ!X-hj^+9Zq9EFMrA5czVF+OOB7zH{cV)@p=P3Uv@ZNZ@}lb z98P1q#(&H4@p&EkCx+wc0iWM?IADL0^Xn@P$LSLA`HJHM^;MEyF`TCH^E(d5$4S8F zDTm|pI^gq^;{&tOBt9`5Z*RcocOA~bMtpwH;ds9Vdi|c`(+FodhU4`HeDZ?Bb^a*U z_o0JL>-2bD@c5k@6V`o5xP*7WPuGZPpE#`V9ljo}fzN#i@V#FHzIFHy8T_XCQ-^=t z;5)q<-~%q$CEKsYkuP3H$E`f@e$c<4u>l~yc0pH)<&T>fnnx>HuigKR^4%;rnceXa>zS=;8-^df@M)Q-c9Lw-4~aOH0C zF){pu`C4GRqUFazIbPSGbhS4ce=H^c$&~yjQ}REWlK;_^ z{H2uqrIh@Sq~w1jCI7=I`5#WneCQN@*hsgZ}V~JVDtEVLholL#;2QHC*1#nd)B$`!yi`nSYX|@`8`$M z!uq1|s{HzChtBy=Kdxb>9~&$1V2JY?PRE?*aep1wIy!#X^j!yseV!jx`tn%FzunVA z{v#>*kEY~5nv(xWO8#Rh`Nvc8kEi56mXiN?O8$pZ@;{W4|9DFN6Dj#0PRajpO8yfm z`5#HiUrNbeO3D97O8!Sv@}Eq}e=;Tiqbd0xOUeIuO8&=F@;@ejh@pe=_%uJmFut$$ z*nYU)eE(r`zT-V^n^$vsuRF??W#e ze6F7Y9r$J1zPUWM?z(hguf21#9-c1m_r;-<*TGjvo{6v*%NqF%-G4cB zpxRCTZ|IG=E#edLy%paPAMiLCNyG~t@345k$H^%Ip4y3gV@!|6kLvxJp#!zUiXR*6 zBc9RnQ3>M6$Elt-JHQ`_e~}^=awe6lf6tAD@1gvW=JJOd%OAFS-^^i|6x>kmu*wa+ z*@0!YUf3DbSS%n`B={|;*%pEmR}C^B_t61`Oe}m_wzP67MUNj$ywh( zy4#0y{(J}V+|C!7JyYBIBD<6JrSgY?{dWfrhB%kC<+zSa-qWUg>v(T?=10)GA2PdH z#W8Ma7efHB!|CBTM|&Ayo#}!@*#P~^TIP^4S-ImAJO}*z98ZV!b4gSz%g+RMA(pSB zqlZ00Jh@)HqTJ?o!Eq7HIxHc4TQB%eO@0`ZvGWJvSp56#hF70&c|Q!%@i)~E1M`&2 zBjg9y^uJI(_+M~1Vf|pY)#qQcy#eOehW;0&i{%XcKYV^+{6p&!#_y9@2i^bTKbLQl z|HbR&+c^U;&*XoBd7*hcxwoxIOt9Z-g3vF6KlnFjeqesKJ;?Y}W*Y=zJjZLExt}`x z)jp(k6ZzRdz`vjK82Pwu%WnY!EX>#G53`=DFPzCha3uJgZ-Bdfn}s_lcR{%x1S$u? z8OsfMIo40SxXz*6-Fqz@89|70yAY@x4Lwj!{=Tg50OBmi13t>_D#!H-IBEvr93r{RA@2f?3$pNXeB z*!?L=m&>i}H^AS+br<2s=+}XKA7*~$^|({gBpmqCqs0D zUxmgS;Ay-?$1EN3(VfVTa4!Ud4EH@};m3z9yyt5c-utgC{KTY%pZo(0_x~FU@0+r) z_!SF3^@kRI`Y8(!JZs_o|JK6K{Jw>s{UZwx{)vT$4qN!ZA6xj~(-w}Mw(#&X79Qb% z0=`E-ZsA7}XkR*k@D)bzBVWgH5>;RLDES@6*-q}K2x33^Q#phx7p;^d=EuC!Jcy>wIX$qC%RfltocrqY zgbO@5j={gE9_aB=FXOYy7p=^qoaNhra1#DW8BCyPe2W~ik)O>4e=^<5mI9990sR&c zp}z$YfLu~=AXgMz@XN!)NQa(s2hZ_5k3Wq#-fKqvz zeJ>+F@X2O|Y0qr<;NI09Hf-@!MSSsv9=op*_Pyc{m7m|?2g3fqykWI^r;!LEKFql5 z;psO*!qGp1guwi6C1Kp2g5TMn?pG461iA(OlkFm%R4*2imx|}rzC>K@OvKgRL_D;+ z-`MV@^P$~^TfE)hXr%WN{4E;V{f(w}eN!x$0?^u0y&wFD3kzFDEos#X0zpu`UuZ-LI{eQ20KW^vhjJ5OBY(qO8&ls;J z`0js${?L9N!@vJOXrHgcH@_X&c{RXCIpt$Nvg2{TQ8yFZ4juQ4OOAHo++4V4X|~Vu zO}DZ_$1mBBq(h8vb3d+DwJY?a^d`8kOZWBj-ca%_Xn&vOv-ULi-&+1>&igHAe9&Bn@lC-GZFNR| zX5fo-ABOWg@Xw3=r^^2XdC}$WCpf?N5AKowG36`IBAtFw#Ov+7mEcca3I5U38n-ci z@QY%;guk@x!r?D1zhTFld@u=9+FNNSW4Aam-O4!pcSNt~tr^^w2EO)C`!4dequD(> z%no47-8{cd-m@jZz3t!*#34s|fN~`8*`Gs{eoS5e34r0(MKF+enSY`CX+=F1;qCri zPVsM(p$tTDDTVF+mI5!9`^Fa>VmhQi0elW=;7)gW$i#_R@cgep~e4x*g%o@ZZwD0s3pbA3D&EVI+H%P5&*7 z7xzEodF&egTcICq-}HXO`p0RVDO}TkYtN(12Y;C_FvK}k@Y4Oa?7TU;^3jtj7yLzO z7ySlmB)-2ui2Y(?ynb{1x7O_k-zS|;*oPk=zZ7Ne>iihOHU3*8cl|T_Zy7yZp5Xop z8~AV8I0@qh>zu~XI{sT&H`n*y;)1%ye{0J8utujo25Aq+QC0gxy8l*1>oWYew9az; zee2iDe=Cfi#&y!i5B9$_|1FKDNgp@xqnSc~a({2~-`Ws9`}3hSHy99O-3*3IDAP>p?pxuH$~b69L0vhRyS1(|_wX&VS47akC%&f{zb| z^xq=m2mdV&XYilyzg6w*M0_LvEgWxA&g7APj^O?^hIEa0RDkgp`){!xUk|ZA_8=PX zmtH>Mzx7~0zDFyu|JH+ph|>;%cws(1@E*eFV2we!epI=ulK`Wv;k};!mgCEOoL4_Y zICTG<>G37EF2Ns; z{SCdj`&j|E;e>lZf%jV-)?#gioR#b_eA!4doO5Te$U<=elW~>u}y6x}a}G z=dV9M#A^~k|M6o+f3)LK%kTbM&;r!QgO4wat61++#&_4dV167y6!5m|Vs7|nslK}Z zR#o;Q@ZU1H;rrsrism)!c`^KdDgQ0i3;Xp^!ePIS5g*ur@ZbUeEuFhjkG>;4uXNZ! zbHjo?{9g43?4T|GkpQoAUr0AN%SRm!)RgEyhckZE;W&JQvmC>Lx=i^4KF1u6*BkH| zcQ{^ez-Qd?xwiq%atz1e8=Udu4#(jKd>(Q*_cg#7f5`EH+Bng!(dun))Y(1NC3Be;#o-jqO@4IUM(w2>6s7A5RbTis5*@0iQ=5&fN{| zT0ZG;JU!6sq~jC&VQ8Ez$8fyffX`zN$LkIFJnnEDe!%B(#|LV1^+TXn3xC%aX3Cs0zOYU9G}+#pQjw32OGxWatz1Y8}RvEhcniQ&+j=L@3%m&-*bE#;Vj2+ zyxxFMUU0b1AJzKZv`)kSiR(JQb7R7~f4Fgc=Y=1?;{(@!Uk}&7KW6Z~Ujx2%_zxNU zrukEcf85|Zy&B-dt{><%_-{G<(0?6ho_#+7IM{Dg9_4I2!cUFu^nK3v(dR}WUd4}m z_b^_9se!i z&3-3>@ZTC|{&fE>vSWb1ayQXLIA`senlro(@Hm6-;74?>0G+oWpW}D6v%+HFZ)5+h z0V104-_koR>Hb@PDL%{j^b7Y*OP-(P=gfbrA_d#kk@-}K(Z&|rFyF5MQ ze=H^c$&~yjQ}REWlK;_^{H2uqrIh@Sq~w1jCI7=I`5#WneCQN@*hsgKbDgJ3Hf6V)yK2^GOzYb zbDHp6y|Mq+$h_vyh5P2Em}>Ul7{z&;3sK#FYg+HsE^eFe<3yxCCKsGEf6U}OHvg@^ z90>EcfMS@(;hm1Z2=5l3o7cOACA_aneO=UJ{#`f+2LG*Tn&Dv{&*?oV`fbU7E4wf- z%yi6WY)4q<4j*F$L-qL#%So0yd|c@VclbPiNa@RCmjB@0o*wcaNy&dSCI8Ws{6|vq zA4|zUo|1n&CI7LM{Kr%BKa`UHp_Kf`Q}Ulk$^URl{)bcYpGe97NJ{=vO8!zx{zp>s zKbn&NWJ>;%Dfu5w$^TeN{>M}DKc15RvEZ*2k57AlER64~=jJiG*Pri={#&&^&8u^@ zJomu}`y=`tC}v_i{6^EeKYupH?K<<_SUc~uaBq8`?%gv z&UYk)6i~rmQ*uwr!@$VI{N#H6Tht$3i!X#+s#km)?n&bM)y)549qHqFDCx(Ag@Jsa z_>Q3i)4`8xT5?VB89n@tQ0w8)fr{OWm7VU-B7NwU$`Eq`5rEkSu@L>V2~l%Vo0MVUxq~z_Nt9ce zBf8*gYebLuia%Y?kL!o>EA|CD z2L?JIe>hJb)_ExIpM!=EzT0^UZ1J)DPf@ z;P)5f9fM$}~vryOMJ7t zi0`|5uW6t21hUiqCHF%t2OI83x^HXH=0XH-f-RaIRxPPeU8^L#Cg9m)7`!W zdYKVK<9s*cer3Xk+~9+9zcSH5Kbk$J_aoOGrqe#Bxu2d!dVIg~)E>G^@qXP2hV}bw z{XX3tV@!|rlT-Ho2kd!HT6*gJ${XVa`Z|m7CMQjC9_woJ^-&=<7)5IQy2$ zeX-$tJRWera&x({Q0{4jykEKb`*8R^rtfRvVj-p7!7w{m;~e@&+ADmVao{zN4amPY z+sitA*67n#XZ(KU_KyM1)#qn^sr!|Qhu^PEcV}Jf4Q&Qx(>Npvwe>4XO8W2-e|>n zMCUW%TdGue(GkzpviEoRSLdsOo3PJW|9<6*m9Fcw&k6gE@g4E~%Gqn!=VbR>>wab3 zckKJ!O}Edvy!L)&HiYtsFCg@F8vS-H`y3484xEgYI3tdf%+ZK~kSnM#?(&Iht><&ryAK`o-0*$zkasf+dVS}+r8d!&&;^vb8iEj2uK~_@xOe%@)=xCFYdMDV$&eoKIpJ{jH^5nbc>Q*b$M-Hb^-m0^ z*Z^nz5r@;*uH}-q%k3osJ|)M;(*wO?I9_k)pGO_e-3{$pKIw2gJTZeI}a`Mkq%yMlnvgv0T174Ql7F0YwiF&w9Fz~>7N$MFyNJn8LnJOe)Qy~~~+ z@QL9x_Vf4`9Zq9EFMr9~<>>*RFF8I=-+)gH$LkIFeA(f6y#b%!ayX6c8V~m_zuD^Z z+Tbk5a6CQW^V<%`?Q;S?U-5Q1T>?Jwz00v3iPpX47*5mp`5lMj<0Rnol()<0b-?E- z$H(nt0zNSuZ*RcocO4Fv;pBM!J%{7{W^l&Cy~}U5Ho{qs;ds3PpS&Ezai-9UxnRaXM8C zat+fh~@p2>Tr9MZgdF{mN4#YF`ZhpxggQY>sn&#o9Gh zF}x0Rm_8=ldq_I>0-l$@I)9enaXyLdbEJ<**yl(Ok!qilJu7>t67Fv#pHBN6kdywY zvAwm~=gjF|m9+at=|8J=3HPMSo@jAftxxuI z!QO}Wve@8gG$DLrAg zqx9vmkUzHD3HgttWw|5!@?<0<(cO3D9FO8(<1`A?+e ze>f%o!zuYsq~w1jC4VU;e<>yZBPsbGP04>UCI88k{Ew#Oe=H^c<0<(cPs#t7>}rSV zc4e}!_3?eR$Lwp?v&U<+YXysAcIL?Y~u5yJR=tLwgBd78y24>W#eysCR@@y?a4 zOL#YeADY*t3wx`&&v`vOH?+@Lo@pmPLB7lRQObMPv(Nc17N~@Mj`+c-a<|qg*lo-2 z681T|_lA5Q8{&K)){kz&b$_u0|L1l&Zg&%L9Rz=&`(FK?U&M9)FXG|8^u*=bXLFD5oj~jZk9m}%# zmp;kE#*e66{d))aN_`LIk2IGDpP4Lw*y^p{qa4Z|Ryov%<+Gk2_a$R_MSOWIlq0zk z^~LuFR*4?*#WKFp{mRqo7ue;P{dabn2Gs0#`3DZYQE`5|ivZdGfiA%=C)~e`_t7K= z40J*NnYI=$W zd+`O~MLzvMBIVcRzUA3ZbmD^3f9hIj({iS^^3RF*f0@iDGvs*czqV|)14oPZ>M0+b z|9$o|7z`LWxiN@Y@GFg!TX@fJ=?}{p-s3xYIV(j1?tzuvLR2Xu7xx3Pft(LqPBMj& z$oRtT`!nt@@iUC*&wgfjm>(v0liQLWK>Q!i<70?N<6Uh85Uoh&;HdL52Buq z%%6PX?{Y8Odr%WUF5~NWkDxz^PdUFdlkGr>+-oyhmr7S=vfudIzgt52Y$%WAuKZwb z_l)odp4pBc@xFDBpKi$_j{BNhxGsKkCzjck|GVYV_6+dbhVy9Zv9hRn5FW_h#=3X=Sqq|zOB-rk%o)193&ggz-(t#N#o+{(-kB%U2^SOP@ z@yc@CVH}cNnc9m6kNw#WIu@?jJ7J3BB{AGnYxh1EtzSoXwP^fDD=e*cTD_;rdUp)= zoSJ{7eY098a1XWk5ZGmQzzh=evfM(v(VmXX*tY*|bSmIKuIu`+K1fWAaXj5dI!{(I zEu8o8^OxOoG~UyN72CE0wk;ih+u%8!CVca4F z-+;e>i_+|npPy5d=R~!G>(y6L-{i$UeP^7KG#?kFJAX|7M*zsZI!!b)7#C{q&*2Ty ziFobBY4tbzk@G_#D2;Y&pDY}jQGVd1_3IVDV}+9=y)C~${cq!*Z?0olk4>(1xt!Jd zIo=)mv)row95MTF^qcUAj)nO6i5?;_^fw&-koV#*@nU}xKH4j}+t6od=3whD^G8e5 zoQ4dgr$;FLJVM>aH}tm#kLw@v-;IA>j__HI1Y$YvoGeFvdguX~6M$ahPpDj?-_<_$ z=Lz;Z+E0F$@#k3{s|kYoJ>`C{`M$V6Y@CIA%NIw&cwG@Y2)f$3k9Ql;edvcUo_zfV ze#Xbc{?_n2!s^x?7d(%=qOaCw&a0NcJM});5`HjhoT?K~kR=Sjb^7Z|LJt+5XPxm0pPmXjC>U-AW zm%i5}zZ1aO%60qFecf9jxXvJ5?+abZb`3B-d9hP)5trY}}8aMt6 zb{1M6q7@x4WBz6+@HalbuX0_%5ByYT6F=37;S7E%%jU=YRQw*mW#g-`{%C)S#=Erv zl`zl5U)ARsr$N2``xzsDCAYnG_^SbSJJ)6Hf8eXsKJr!k;CPqzmfP6R;IB0QZ@)Ut zV&b#Djv7Z#gFVErwsni@C;!Eqs8{f?&WgWsJ_URO7a**|(_pI-d=}SdTyUJdc$=`8nW-^aeWv%S3~OFpX&_>s?Q>u%t) zz)xvDO=Y?RpVclt3w$9BmoRR-#b=?OY>11`3UTlg+(Gid)40P3|`Oa=ZpUs{_}a#^XI|Z&P`v-!{rk&!w__1kl>HO$2ZW8 zs}%Bo+xj^=UlyNP!Z_pjk9x~mA9BNXE+`etZDC&M{4udwM(H2@eeUIH@tx0&U=zR( z{IB6#oXK%s=3cY=v`U9&ayCC^1qbEye)K*fA=r9I+4F_~>wy+1!E^2Pk}E12j1 zi2UHMa>9Q_?sw$Ng&)#8*$!XV3p?#S58P`mesXbjO!v4I{vt2_6!#s=-_G}i!brc; z5ofmnFXR9H{4=^s$42ZwRqL0qFW~-f$s?n2xmDu4kVUh2UeNXF$X_x3_=?H*_7Aq} zVlwvkFaA6Hvi4QT_CtPH5xX{YsM5jqv7df|?~@n%wZ1aHoeyk0gFf**YCIq0MUS83 z_6Gud|L22z`^M*ko|N-}#L}Q!+WDY0OS~p4t%ConKOcnk=Ga)%`5@oU@u_)%Fv_-S z{w4Sp0c{B%ChzBBP(rkN1)ht5A<@A&}dk@j#- z(7Jp3)w0$DoEHTD_Nz03Pd<}!YUev~ZqP=S;6Js$U_Z=hAKz(wJow;Fejp#%i50(a z$o4Pt#T}4HVIR}}T^ls{=>+6nK|Y&uZkWvxUTJBzGw?@Uc5bkJX5z_Nd`+GkD!Hy4 z&kYqjryZ&|Uz7{wv263)V0=%0X*SoTb3=$1Pj~Pf!FQ#&zT@1G%XVyVZYa)(|G_@y z=Z2h}8)kESuz~4zZa_O4&J7liinBWR;=I$5MSo57TK`AwGtP&p{fTn}H)ism>VK}I zDdz^2cluqEZcEcnx3*4<)R=DIiv!*CU}EisY1Mlx(5-DFx^-)`tF?IB)Zk z{2<{ju1+`8O?={7y0tc+_f-D+=~i~SwRB=B;>b2I4H zf}UCDoZd_~$ye9X4X4Y7^IqyXUHx8Kvrfiz1Am*K8}wL#ZWu-2dk0PLFmXASucVyQ zXXK|-D$dr|Iq9)%U7PqZ*OlZs9qSw9I9La{%;7vZtMeer*X1+PW7)dS^{JEVWLW3( z#nbK7Yw=w^u1DY8iPLoZhUawcAE29`(>qL$h4UzSi0O7thrdyX+d19h5#%iFNbDl{Gt$d2RC=$Sb4ys~bv`~nZRhGB zx5B>U=XUK&6Q|hEI=8D|dG045p4)|gakje)>pafob{;)6+pTkZvFhh`DRl6i*?I0H zS{cd<2nTWkozru>tJqDbX9;qFrK;p@+_zXDU#vvj2TO-4k;w(B+CL|r5`IUpKiWBX zsqFhI@Zq_BR__bthHZZZ-e#{-tZF}*Se*s*AN_q@KA<>^WX6Oy>h0~qymI_df3MX) zr+Qe94M+XfKkailB2t%kgnlpDJ?Y>Vq>y$w1mZ0$&-&OO7!UA&OVoE|rpxN9m^`C8 zi(a4{#NfJ|0{z-az9lMFrMKZYX1~?-fHQjcDyrIhpO7nZnByF3a5xUhCn!V>g)6f< zr{aC5pa-&dnINaoIT+(t{fAKNF+zfKIYtZewcxzmijZ=QHty>`1>)Bu$6){cD&!br zz%L=k(0F$F1;Q@12ltkj}_e=4vo5?#)9hSWrzvDB?S7mpxc&ZxY zA@)6%hpb2(0=wFZ?09cjE^@3%F0xvE-*S=fTthB0zbO}?{Pmw%Z^}`JdHx$B7pWxd zu!hxg`*R}k|4(JMBx1MByZ1tRQ*V0RdQ=%~y53Z9 zV*7w}y=h02-c&YzqfksYJUt;7kw6l1kv1;y)SI#*$SF*3deQ6=V6V|oKjiHp zJ{HOy6F-A_Zv5N$aq&;shwy{^I_wI%#J^xT^PR znF0OBR3F;!^$T8H|J4e!p?@kZ#E*Jl0(3bJ&-p)rNtT}Ka&g;|xK*jIJAO=r*>YM+kvhV5n_Us|g6 z1i4GE$!+F(i2uZsRs2oLZRVn0SRUtg&jEY1@6ep{tx+hCa+KRt#b@M~s!=b`Bd>;d z@pN~@^T?^H-hqMKCdzg5Jdy=|)Ej1-^u4n(pu)MsB#$tM{+c*HOSGX6g4_oo_(1sw@H|5LKyN6!9-K!+|AgG8v++EVRe7i1HR)EI zak^!DByS6JgS;)!O?)ThZMO{FvK!H@I3vTYn?bh}d0R8xbY59YH`wJjoFh%IcHMMa zns&Oi^|8P3iqoxuZqldK2FR?Y;vVYEozcFWAS%!YI;s~tCkZYlD%X1a-A zSW7ps1&wr5KVLW9mSVcK^nhiH=Ns(M0^KAxfPDLwp8F<;W&1CG2-x0&`pH=X-yFWfqON&AL$n~^;7X3!0mir^<_G*6-` z><{rj$S0fW*1rD!hHFV0>8A2dH$S&ro3D(|106lk6U6j`9w5+9^5)v$tj-q`mn(iA zNYPJJx|y+5tk(H?=_ibTpZGD)H98NFKQ4p6@9x1&0Kc#ELg`A?<>cMrJb>oY&&JL# z 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 literal 0 HcmV?d00001 diff --git a/qwen3_6_scripts/protocol.py b/qwen3_6_scripts/protocol.py index a51a1c57..3a041b44 100644 --- a/qwen3_6_scripts/protocol.py +++ b/qwen3_6_scripts/protocol.py @@ -180,6 +180,8 @@ class ChatCompletionRequest(OpenAIBaseModel): logprobs: Optional[bool] = False top_logprobs: Optional[int] = 0 max_tokens: Optional[int] = None + # OpenAI newer API field — treat as alias for max_tokens + max_completion_tokens: Optional[int] = None n: Optional[int] = 1 presence_penalty: Optional[float] = 0.0 response_format: Optional[ResponseFormat] = None @@ -193,6 +195,7 @@ class ChatCompletionRequest(OpenAIBaseModel): tool_choice: Optional[Union[Literal["none"], Literal["auto"], ChatCompletionNamedToolChoiceParam]] = "none" thinking: Optional[Union[bool, str, Dict[str, Any]]] = None + reasoning_effort: Optional[str] = None # NOTE this will be ignored by VLLM -- the model determines the behavior parallel_tool_calls: Optional[bool] = False diff --git a/qwen3_6_scripts/qwen3_5.py b/qwen3_6_scripts/qwen3_5.py index 1823934d..aee361aa 100644 --- a/qwen3_6_scripts/qwen3_5.py +++ b/qwen3_6_scripts/qwen3_5.py @@ -138,6 +138,11 @@ try: except ImportError: _corex_moe_direct_routed = None +try: + from vllm import corex_moe_topk_softmax as _corex_moe_topk_softmax +except ImportError: + _corex_moe_topk_softmax = None + from vllm.model_executor.models.interfaces import (HasInnerState, SupportsLoRA, SupportsMultiModal) @@ -179,6 +184,9 @@ _USE_COREX_MOE_WEIGHT_GATHER = ( _USE_COREX_MOE_DIRECT_ROUTED = ( _corex_moe_direct_routed is not None and env_bool("BI100_MOE_COREX_DIRECT_ROUTED", False)) +_USE_COREX_MOE_TOPK_SOFTMAX = ( + _corex_moe_topk_softmax is not None + and env_bool("BI100_MOE_COREX_TOPK_SOFTMAX", True)) _USE_FUSED_MOE_ACTIVATION = env_bool("BI100_MOE_FUSED_ACTIVATION", True) @@ -1599,13 +1607,18 @@ class Qwen3_5MoeSparseBlock(nn.Module): Output is partial (pre-all-reduce), same contract as FusedMoE with reduce_results=False. """ - # Softmax is monotonic, so selecting logits first is equivalent to - # full-expert softmax -> top-k -> renormalise while normalising only K - # values. This saves one 256-wide softmax in the decode hot path. - topk_logits, topk_ids = torch.topk( - router_logits.float(), self.top_k, dim=-1) # (T, top_k) - topk_weights = torch.softmax(topk_logits, dim=-1) - topk_weights = topk_weights.to(hidden_states.dtype) + # Fused topk+softmax: single CUB kernel vs 2 PyTorch ops. + # Source: xllm/core/kernels/cuda/moe/moe_topk_softmax_kernels.cuh + if _USE_COREX_MOE_TOPK_SOFTMAX: + topk_weights, topk_ids = _corex_moe_topk_softmax.moe_topk_softmax( + router_logits.float(), self.top_k, True) + topk_ids = topk_ids.to(torch.int64) + topk_weights = topk_weights.to(hidden_states.dtype) + else: + topk_logits, topk_ids = torch.topk( + router_logits.float(), self.top_k, dim=-1) # (T, top_k) + topk_weights = torch.softmax(topk_logits, dim=-1) + topk_weights = topk_weights.to(hidden_states.dtype) w13 = self.experts.w13_weight # (E, 2*I, H) w2 = self.experts.w2_weight # (E, H, I) diff --git a/qwen3_6_scripts/serving_chat.py b/qwen3_6_scripts/serving_chat.py index 4ed841b5..366253b1 100644 --- a/qwen3_6_scripts/serving_chat.py +++ b/qwen3_6_scripts/serving_chat.py @@ -394,6 +394,9 @@ class OpenAIServingChat(OpenAIServing): assert prompt_inputs is not None sampling_params: Union[SamplingParams, BeamSearchParams] + # OpenAI API: max_completion_tokens takes precedence over max_tokens + if request.max_completion_tokens is not None and request.max_tokens is None: + request.max_tokens = request.max_completion_tokens default_max_tokens = self.max_model_len - len( prompt_inputs["prompt_token_ids"]) if request.use_beam_search: