From 2fb6d43f9a02342123d3e4229fcdffca372af3b2 Mon Sep 17 00:00:00 2001 From: Yulong Ao Date: Mon, 23 May 2022 08:42:32 +0800 Subject: [PATCH 001/101] [Fleet] Improve the quick start of fleet colletive (#4732) * [Fleet] Improve the quick start fo fleet colletive * [Fleet] Some minor changes * [Fleet] Modify some parts * Update cluster_quick_start_collective_cn.rst * [Fleet] Modify the quick start based on the reviews * [Fleet] Use the new launch command * [Fleet] Chage the version requirement * [Fleet] Change the title Co-authored-by: liuTINA0907 <65896652+liuTINA0907@users.noreply.github.com> --- .../cluster_quick_start_cn.rst | 558 +----------------- .../cluster_quick_start_collective_cn.rst | 248 ++++++++ .../cluster_quick_start_ps_cn.rst | 190 ++++++ .../images/paddlecloud.png | Bin 0 -> 14308 bytes 4 files changed, 443 insertions(+), 553 deletions(-) create mode 100644 docs/guides/06_distributed_training/cluster_quick_start_collective_cn.rst create mode 100644 docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst create mode 100644 docs/guides/06_distributed_training/images/paddlecloud.png diff --git a/docs/guides/06_distributed_training/cluster_quick_start_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_cn.rst index 9893fa9ef65..f7fb7804797 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_cn.rst @@ -3,559 +3,11 @@ 分布式训练快速开始 ================== -FleetX 是飞桨分布式训练扩展包,为了可以让用户更快速了解和使用飞桨分布式训练特性,提供了大量分布式训练例子,可以查阅 https://github.com/PaddlePaddle/FleetX/tree/develop/examples,以下章节的例子都可以在这找到,用户也可以直接将仓库下载到本地直接。 - -一、Collective 训练快速开始 -------------------------- - -本节将采用CV领域非常经典的模型ResNet50为例,介绍如何使用Fleet API(paddle.distributed.fleet)完成Collective训练任务。 数据方面我们采用Paddle内置的flowers数据集,优化器使用Momentum方法。循环迭代多个epoch,每轮打印当前网络具体的损失值和acc值。 具体代码保存在FleetX/examples/resnet下面, 其中包含动态图和静态图两种执行方式。resnet_dygraph.py为动态图模型相关代码,train_fleet_dygraph.py为动态图训练脚本。 resnet_static.py为静态图模型相关代码,而train_fleet_static.py为静态图训练脚本。 - -1.1 版本要求 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -在编写分布式训练程序之前,用户需要确保已经安装paddlepaddle-2.0.0-rc-cpu或paddlepaddle-2.0.0-rc-gpu及以上版本的飞桨开源框架。 - -1.2 操作方法 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -与单机单卡的普通模型训练相比,无论静态图还是动态图,Collective训练的代码都只需要补充三个部分代码: - - 1. 导入分布式训练需要的依赖包。 - 2. 初始化Fleet环境。 - 3. 设置分布式训练需要的优化器。 - -下面将逐一进行讲解。 - -1.2.1 导入依赖 -"""""""""""" - -导入必要的依赖,例如分布式训练专用的Fleet API(paddle.distributed.fleet)。 - -.. code-block:: python - - from paddle.distributed import fleet - -1.2.2 初始化fleet环境 -"""""""""""" - -包括定义缺省的分布式策略,然后通过将参数is_collective设置为True,使训练架构设定为Collective架构。 - -.. code-block:: python - - strategy = fleet.DistributedStrategy() - fleet.init(is_collective=True, strategy=strategy) - -1.2.3 设置分布式训练使用的优化器 -"""""""""""" - -使用distributed_optimizer设置分布式训练优化器。 - -.. code-block:: python - - optimizer = fleet.distributed_optimizer(optimizer) - -1.3 动态图完整代码 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -train_fleet_dygraph.py的完整训练代码如下所示。 - -.. code-block:: python - - # -*- coding: UTF-8 -*- - import numpy as np - import argparse - import ast - import paddle - # 导入必要分布式训练的依赖包 - from paddle.distributed import fleet - # 导入模型文件 - from resnet_dygraph import ResNet - - base_lr = 0.1 # 学习率 - momentum_rate = 0.9 # 冲量 - l2_decay = 1e-4 # 权重衰减 - - epoch = 10 #训练迭代次数 - batch_size = 32 #训练批次大小 - class_dim = 102 - - # 设置数据读取器 - def reader_decorator(reader): - def __reader__(): - for item in reader(): - img = np.array(item[0]).astype('float32').reshape(3, 224, 224) - label = np.array(item[1]).astype('int64').reshape(1) - yield img, label - - return __reader__ - - # 设置优化器 - def optimizer_setting(parameter_list=None): - optimizer = paddle.optimizer.Momentum( - learning_rate=base_lr, - momentum=momentum_rate, - weight_decay=paddle.regularizer.L2Decay(l2_decay), - parameters=parameter_list) - return optimizer - - # 设置训练函数 - def train_resnet(): - # 初始化Fleet环境 - fleet.init(is_collective=True) - - resnet = ResNet(class_dim=class_dim, layers=50) - - optimizer = optimizer_setting(parameter_list=resnet.parameters()) - optimizer = fleet.distributed_optimizer(optimizer) - # 通过Fleet API获取分布式model,用于支持分布式训练 - resnet = fleet.distributed_model(resnet) - - train_reader = paddle.batch( - reader_decorator(paddle.dataset.flowers.train(use_xmap=True)), - batch_size=batch_size, - drop_last=True) - - train_loader = paddle.io.DataLoader.from_generator( - capacity=32, - use_double_buffer=True, - iterable=True, - return_list=True, - use_multiprocess=True) - train_loader.set_sample_list_generator(train_reader) - - for eop in range(epoch): - resnet.train() - - for batch_id, data in enumerate(train_loader()): - img, label = data - label.stop_gradient = True - - out = resnet(img) - loss = paddle.nn.functional.cross_entropy(input=out, label=label) - avg_loss = paddle.mean(x=loss) - acc_top1 = paddle.metric.accuracy(input=out, label=label, k=1) - acc_top5 = paddle.metric.accuracy(input=out, label=label, k=5) - - dy_out = avg_loss.numpy() - - avg_loss.backward() - - optimizer.minimize(avg_loss) - resnet.clear_gradients() - if batch_id % 5 == 0: - print("[Epoch %d, batch %d] loss: %.5f, acc1: %.5f, acc5: %.5f" % (eop, batch_id, dy_out, acc_top1, acc_top5)) - # 启动训练 - if __name__ == '__main__': - train_resnet() - -1.4 静态图完整代码 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -train_fleet_static.py的完整训练代码如下所示。 - -.. code-block:: python - - # -*- coding: UTF-8 -*- - import numpy as np - import argparse - import ast - import paddle - # 导入必要分布式训练的依赖包 - import paddle.distributed.fleet as fleet - # 导入模型文件 - import resnet_static as resnet - import os - - base_lr = 0.1 # 学习率 - momentum_rate = 0.9 # 冲量 - l2_decay = 1e-4 # 权重衰减 - - epoch = 10 #训练迭代次数 - batch_size = 32 #训练批次大小 - class_dim = 10 - - # 设置优化器 - def optimizer_setting(parameter_list=None): - optimizer = paddle.optimizer.Momentum( - learning_rate=base_lr, - momentum=momentum_rate, - weight_decay=paddle.regularizer.L2Decay(l2_decay), - parameters=parameter_list) - return optimizer - # 设置数据读取器 - def get_train_loader(feed_list, place): - def reader_decorator(reader): - def __reader__(): - for item in reader(): - img = np.array(item[0]).astype('float32').reshape(3, 224, 224) - label = np.array(item[1]).astype('int64').reshape(1) - yield img, label - - return __reader__ - train_reader = paddle.batch( - reader_decorator(paddle.dataset.flowers.train(use_xmap=True)), - batch_size=batch_size, - drop_last=True) - train_loader = paddle.io.DataLoader.from_generator( - capacity=32, - use_double_buffer=True, - feed_list=feed_list, - iterable=True) - train_loader.set_sample_list_generator(train_reader, place) - return train_loader - # 设置训练函数 - def train_resnet(): - print("Start collective training example:") - paddle.enable_static() # 使能静态图功能 - paddle.vision.set_image_backend('cv2') - - image = paddle.static.data(name="x", shape=[None, 3, 224, 224], dtype='float32') - label= paddle.static.data(name="y", shape=[None, 1], dtype='int64') - # 调用ResNet50模型 - model = resnet.ResNet(layers=50) - out = model.net(input=image, class_dim=class_dim) - avg_cost = paddle.nn.functional.cross_entropy(input=out, label=label) - acc_top1 = paddle.metric.accuracy(input=out, label=label, k=1) - acc_top5 = paddle.metric.accuracy(input=out, label=label, k=5) - # 设置训练资源,本例使用GPU资源 - place = paddle.CUDAPlace(int(os.environ.get('FLAGS_selected_gpus', 0))) - print("Run on {}.".format(place)) - - train_loader = get_train_loader([image, label], place) - #初始化Fleet环境 - strategy = fleet.DistributedStrategy() - fleet.init(is_collective=True, strategy=strategy) - optimizer = optimizer_setting() - - # 通过Fleet API获取分布式优化器,将参数传入飞桨的基础优化器 - optimizer = fleet.distributed_optimizer(optimizer) - optimizer.minimize(avg_cost) - - exe = paddle.static.Executor(place) - print("Execute startup program.") - exe.run(paddle.static.default_startup_program()) - - epoch = 10 - step = 0 - for eop in range(epoch): - for batch_id, data in enumerate(train_loader()): - loss, acc1, acc5 = exe.run(paddle.static.default_main_program(), feed=data, fetch_list=[avg_cost.name, acc_top1.name, acc_top5.name]) - if batch_id % 5 == 0: - print("[Epoch %d, batch %d] loss: %.5f, acc1: %.5f, acc5: %.5f" % (eop, batch_id, loss, acc1, acc5)) - # 启动训练 - if __name__ == '__main__': - train_resnet() - -1.5 运行示例 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -假设要运行2卡的任务,那么只需在命令行中执行: - -动态图: - -.. code-block:: bash - - python3 -m paddle.distributed.launch --gpus=0,1 train_fleet_dygraph.py - - -您将看到显示如下日志信息: - -.. code-block:: bash - - ----------- Configuration Arguments ----------- - gpus: 0,1 - heter_worker_num: None - heter_workers: - http_port: None - ips: 127.0.0.1 - log_dir: log - nproc_per_node: None - server_num: None - servers: - training_script: train_fleet_dygraph.py - training_script_args: [] - worker_num: None - workers: - ------------------------------------------------ - WARNING 2021-05-06 11:32:50,804 launch.py:316] Not found distinct arguments and compiled with cuda. Default use collective mode - launch train in GPU mode - INFO 2021-05-06 11:32:50,806 launch_utils.py:472] Local start 2 processes. First process distributed environment info (Only For Debug): - +=======================================================================================+ - | Distributed Envs Value | - +---------------------------------------------------------------------------------------+ - | PADDLE_TRAINER_ENDPOINTS 127.0.0.1:20923,127.0.0.1:10037 | - | FLAGS_selected_gpus 0 | - | PADDLE_TRAINER_ID 0 | - | PADDLE_TRAINERS_NUM 2 | - | PADDLE_CURRENT_ENDPOINT 127.0.0.1:20923 | - +=======================================================================================+ - - INFO 2021-05-06 11:32:50,806 launch_utils.py:475] details abouts PADDLE_TRAINER_ENDPOINTS can be found in log/endpoints.log, and detail running logs maybe found in log/workerlog.0 - grep: warning: GREP_OPTIONS is deprecated; please use an alias or script - I0506 11:32:51.828132 6427 nccl_context.cc:189] init nccl context nranks: 2 local rank: 0 gpu id: 0 ring id: 0 - W0506 11:32:52.365190 6427 device_context.cc:362] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.0, Runtime API Version: 11.0 - W0506 11:32:52.368203 6427 device_context.cc:372] device: 0, cuDNN Version: 8.0. - [Epoch 0, batch 0] loss: 4.98047, acc1: 0.00000, acc5: 0.00000 - [Epoch 0, batch 5] loss: 39.06348, acc1: 0.03125, acc5: 0.09375 - ... - - -静态图: - -.. code-block:: bash - - python3 -m paddle.distributed.launch --gpus=0,1 train_fleet_static.py - - -您将看到显示如下日志信息: - -.. code-block:: bash - - ----------- Configuration Arguments ----------- - gpus: 0,1 - heter_worker_num: None - heter_workers: - http_port: None - ips: 127.0.0.1 - log_dir: log - nproc_per_node: None - server_num: None - servers: - training_script: train_fleet_static.py - training_script_args: [] - worker_num: None - workers: - ------------------------------------------------ - WARNING 2021-05-06 11:36:30,019 launch.py:316] Not found distinct arguments and compiled with cuda. Default use collective mode - launch train in GPU mode - INFO 2021-05-06 11:36:30,021 launch_utils.py:472] Local start 2 processes. First process distributed environment info (Only For Debug): - +=======================================================================================+ - | Distributed Envs Value | - +---------------------------------------------------------------------------------------+ - | PADDLE_TRAINER_ID 0 | - | PADDLE_CURRENT_ENDPOINT 127.0.0.1:10039 | - | PADDLE_TRAINER_ENDPOINTS 127.0.0.1:10039,127.0.0.1:31719 | - | PADDLE_TRAINERS_NUM 2 | - | FLAGS_selected_gpus 0 | - +=======================================================================================+ - - INFO 2021-05-06 11:36:30,021 launch_utils.py:475] details abouts PADDLE_TRAINER_ENDPOINTS can be found in log/endpoints.log, and detail running logs maybe found in log/workerlog.0 - grep: warning: GREP_OPTIONS is deprecated; please use an alias or script - Start collective training example: - Run on CUDAPlace(0). - server not ready, wait 3 sec to retry... - not ready endpoints:['127.0.0.1:31719'] - Execute startup program. - W0506 11:36:35.667778 6697 device_context.cc:362] Please NOTE: device: 0, GPU Compute Capability: 7.0, Driver API Version: 11.0, Runtime API Version: 11.0 - W0506 11:36:35.671609 6697 device_context.cc:372] device: 0, cuDNN Version: 8.0. - Start training: - W0506 11:36:39.900507 6697 fuse_all_reduce_op_pass.cc:79] Find all_reduce operators: 161. To make the speed faster, some all_reduce ops are fused during training, after fusion, the number of all_reduce ops is 5. - [Epoch 0, batch 0] loss: 4.67622, acc1: 0.00000, acc5: 0.09375 - [Epoch 0, batch 5] loss: 30.24010, acc1: 0.00000, acc5: 0.06250 - ... - -从单机多卡到多机多卡训练,在代码上不需要做任何改动,只需再额外指定ips参数即可。其内容为多机的ip列表,命令如下所示: - -.. code-block:: bash - - # 动态图 - python3 -m paddle.distributed.launch --ips="xx.xx.xx.xx,yy.yy.yy.yy" --gpus 0,1,2,3,4,5,6,7 train_fleet_dygraph.py - - # 静态图 - python3 -m paddle.distributed.launch --ips="xx.xx.xx.xx,yy.yy.yy.yy" --gpus 0,1,2,3,4,5,6,7 train_fleet_static.py - +一、快速开始-数据并行 +------------------------------- +.. include:: cluster_quick_start_collective_cn.rst 二、ParameterServer训练快速开始 -------------------------- - -本节将采用推荐领域非常经典的模型wide_and_deep为例,介绍如何使用Fleet API(paddle.distributed.fleet)完成参数服务器训练任务,本次快速开始的完整示例代码位于 https://github.com/PaddlePaddle/FleetX/tree/develop/examples/wide_and_deep。 - -2.1 版本要求 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -在编写分布式训练程序之前,用户需要确保已经安装paddlepaddle-2.0.0-rc-cpu或paddlepaddle-2.0.0-rc-gpu及以上版本的飞桨开源框架。 - -2.2 操作方法 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -参数服务器训练的基本代码主要包括如下几个部分: - - 1. 导入分布式训练需要的依赖包。 - 2. 定义分布式模式并初始化分布式训练环境。 - 3. 加载模型及数据。 - 4. 定义参数更新策略及优化器。 - 5. 开始训练。 - -下面将逐一进行讲解。 - -2.2.1 导入依赖 -"""""""""""" - -导入必要的依赖,例如分布式训练专用的Fleet API(paddle.distributed.fleet)。 - -.. code-block:: python - - import paddle - import paddle.distributed.fleet as fleet - -2.2.2 定义分布式模式并初始化分布式训练环境 -"""""""""""" - -通过 ``fleet.init()`` 接口,用户可以定义训练相关的环境,注意此环境是用户预先在环境变量中配置好的,包括:训练节点个数,服务节点个数,当前节点的序号,服务节点完整的IP:PORT列表等。 - -.. code-block:: python - - # 当前参数服务器模式只支持静态图模式, 因此训练前必须指定 ``paddle.enable_static()`` - paddle.enable_static() - fleet.init(is_collective=False) - -2.2.3 加载模型及数据 -"""""""""""" - -.. code-block:: python - - # 模型定义参考 examples/wide_and_deep 中 model.py - from model import WideDeepModel - from reader import WideDeepDataset - - model = WideDeepModel() - model.net(is_train=True) - - def distributed_training(exe, train_model, train_data_path="./data", batch_size=10, epoch_num=1): - train_data = WideDeepDataset(data_path=train_data_path) - reader = train_model.loader.set_sample_generator( - train_data, batch_size=batch_size, drop_last=True, places=paddle.CPUPlace()) - - for epoch_id in range(epoch_num): - reader.start() - try: - while True: - loss_val = exe.run(program=paddle.static.default_main_program(), - fetch_list=[train_model.cost.name]) - loss_val = np.mean(loss_val) - print("TRAIN ---> pass: {} loss: {}\n".format(epoch_id, loss_val)) - except paddle.common_ops_import.core.EOFException: - reader.reset() - - - -2.2.4 定义同步训练 Strategy 及 Optimizer -"""""""""""" - -在Fleet API中,用户可以使用 ``fleet.DistributedStrategy()`` 接口定义自己想要使用的分布式策略。 - -其中 ``a_sync`` 选项用于定义参数服务器相关的策略,当其被设定为 ``False`` 时,分布式训练将在同步的模式下进行。反之,当其被设定成 ``True`` 时,分布式训练将在异步的模式下进行。 - -.. code-block:: python - - # 定义异步训练 - dist_strategy = fleet.DistributedStrategy() - dist_strategy.a_sync = True - - # 定义同步训练 - dist_strategy = fleet.DistributedStrategy() - dist_strategy.a_sync = False - - # 定义Geo异步训练, Geo异步目前只支持SGD优化算法 - dist_strategy = fleet.DistributedStrategy() - dist_strategy.a_sync = True - dist_strategy.a_sync_configs = {"k_steps": 100} - - optimizer = paddle.optimizer.SGD(learning_rate=0.0001) - optimizer = fleet.distributed_optimizer(optimizer, dist_strategy) - optimizer.minimize(model.loss) - -2.2.5 开始训练 -"""""""""""" - -完成模型及训练策略以后,我们就可以开始训练模型了。因为在参数服务器模式下会有不同的角色,所以根据不同节点分配不同的任务。 - -对于服务器节点,首先用 ``init_server()`` 接口对其进行初始化,然后启动服务并开始监听由训练节点传来的梯度。 - -同样对于训练节点,用 ``init_worker()`` 接口进行初始化后, 开始执行训练任务。运行 ``exe.run()`` 接口开始训练,并得到训练中每一步的损失值。 - -.. code-block:: python - - if fleet.is_server(): - fleet.init_server() - fleet.run_server() - else: - exe = paddle.static.Executor(paddle.CPUPlace()) - exe.run(paddle.static.default_startup_program()) - - fleet.init_worker() - - distributed_training(exe, model) - - fleet.stop_worker() - -2.3 运行训练脚本 -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ - -定义完训练脚本后,我们就可以用 ``python3 -m paddle.distributed.launch`` 指令运行分布式任务了。其中 ``server_num`` , ``worker_num`` 分别为服务节点和训练节点的数量。在本例中,服务节点有1个,训练节点有2个。 - -.. code-block:: bash - - python3 -m paddle.distributed.launch --server_num=1 --worker_num=2 --gpus=0,1 train.py - -您将看到显示如下日志信息: - -.. code-block:: bash - - ----------- Configuration Arguments ----------- - gpus: 0,1 - heter_worker_num: None - heter_workers: - http_port: None - ips: 127.0.0.1 - log_dir: log - nproc_per_node: None - server_num: 1 - servers: - training_script: train.py - training_script_args: [] - worker_num: 2 - workers: - ------------------------------------------------ - INFO 2021-05-06 12:14:26,890 launch.py:298] Run parameter-sever mode. pserver arguments:['--worker_num', '--server_num'], cuda count:8 - INFO 2021-05-06 12:14:26,892 launch_utils.py:973] Local server start 1 processes. First process distributed environment info (Only For Debug): - +=======================================================================================+ - | Distributed Envs Value | - +---------------------------------------------------------------------------------------+ - | PADDLE_TRAINERS_NUM 2 | - | TRAINING_ROLE PSERVER | - | POD_IP 127.0.0.1 | - | PADDLE_GLOO_RENDEZVOUS 3 | - | PADDLE_PSERVERS_IP_PORT_LIST 127.0.0.1:34008 | - | PADDLE_PORT 34008 | - | PADDLE_WITH_GLOO 0 | - | PADDLE_HETER_TRAINER_IP_PORT_LIST | - | PADDLE_TRAINER_ENDPOINTS 127.0.0.1:18913,127.0.0.1:10025 | - | PADDLE_GLOO_HTTP_ENDPOINT 127.0.0.1:23053 | - | PADDLE_GLOO_FS_PATH /tmp/tmp8vqb8arq | - +=======================================================================================+ - - INFO 2021-05-06 12:14:26,902 launch_utils.py:1041] Local worker start 2 processes. First process distributed environment info (Only For Debug): - +=======================================================================================+ - | Distributed Envs Value | - +---------------------------------------------------------------------------------------+ - | PADDLE_GLOO_HTTP_ENDPOINT 127.0.0.1:23053 | - | PADDLE_GLOO_RENDEZVOUS 3 | - | PADDLE_PSERVERS_IP_PORT_LIST 127.0.0.1:34008 | - | PADDLE_WITH_GLOO 0 | - | PADDLE_TRAINER_ENDPOINTS 127.0.0.1:18913,127.0.0.1:10025 | - | FLAGS_selected_gpus 0 | - | PADDLE_GLOO_FS_PATH /tmp/tmp8vqb8arq | - | PADDLE_TRAINERS_NUM 2 | - | TRAINING_ROLE TRAINER | - | XPU_VISIBLE_DEVICES 0 | - | PADDLE_HETER_TRAINER_IP_PORT_LIST | - | PADDLE_TRAINER_ID 0 | - | CUDA_VISIBLE_DEVICES 0 | - | FLAGS_selected_xpus 0 | - +=======================================================================================+ - - INFO 2021-05-06 12:14:26,921 launch_utils.py:903] Please check servers, workers and heter_worker logs in log/workerlog.*, log/serverlog.* and log/heterlog.* - INFO 2021-05-06 12:14:33,446 launch_utils.py:914] all workers exit, going to finish parameter server and heter_worker. - INFO 2021-05-06 12:14:33,446 launch_utils.py:926] all parameter server are killed \ No newline at end of file +------------------------------- +.. include:: cluster_quick_start_ps_cn.rst \ No newline at end of file diff --git a/docs/guides/06_distributed_training/cluster_quick_start_collective_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_collective_cn.rst new file mode 100644 index 00000000000..89c0692fff1 --- /dev/null +++ b/docs/guides/06_distributed_training/cluster_quick_start_collective_cn.rst @@ -0,0 +1,248 @@ +数据并行(data parallelism)是大规模深度学习训练中常用的并行模式,它会在每个进程(设备)中维护完整的模型和参数, +但在每个进程上处理不同的数据。因此,数据并行非常适合单卡已经能够放得下完整的模型和参数,但希望通过并行来增大 +全局数据(global batch)大小来提升训练的吞吐量。 + +本节将采用自定义卷积网络和Paddle内置的CIFAR-10数据集来介绍如何使用 `Fleet API `_ (paddle.distributed.fleet) 进行数据并行训练。 + +1.1 版本要求 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +在编写分布式训练程序之前,用户需要确保已经安装GPU版的PaddlePaddle 2.3.0及以上版本。 + +1.2 具体步骤 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +与单机单卡的普通模型训练相比,数据并行训练只需要按照如下5个步骤对代码进行简单调整即可: + + 1. 导入分布式训练依赖包 + 2. 初始化Fleet环境 + 3. 构建分布式训练使用的网络模型 + 4. 构建分布式训练使用的优化器 + 5. 构建分布式训练使用的数据加载器 + +下面将逐一进行讲解。 + +1.2.1 导入分布式训练依赖包 +"""""""""""""""""""""""""""" + +导入飞桨分布式训练专用包Fleet。 + +.. code-block:: python + + # 导入分布式专用Fleet API + from paddle.distributed import fleet + # 导入分布式训练数据所需API + from paddle.io import DataLoader, DistributedBatchSampler + # 设置GPU环境 + paddle.set_device('gpu') + +1.2.2 初始化Fleet环境 +"""""""""""""""""""""""""" + +分布式初始化需要: + + 1. 设置is_collective为True,表示分布式训练采用Collective模式。 + 2. [可选] 设置分布式策略 `DistributedStrategy `_,跳过将使用缺省配置。 + +.. code-block:: python + + # 选择不设置分布式策略 + fleet.init(is_collective=True) + + # 选择设置分布式策略 + strategy = fleet.DistributedStrategy() + fleet.init(is_collective=True, strategy=strategy) + +1.2.3 构建分布式训练使用的网络模型 +"""""""""""""""""""""""""""""""""" +只需要使用 ``fleet.distributed_model`` 对原始串行网络模型进行封装。 + +.. code-block:: python + + # 等号右边model为原始串行网络模型 + model = fleet.distributed_model(model) + +1.2.4 构建分布式训练使用的优化器 +"""""""""""""""""""""""""""""""""" +只需要使用 ``fleet.distributed_optimizer`` 对原始串行优化器进行封装。 + +.. code-block:: python + + # 等号右边optimizer为原始串行网络模型 + optimizer = fleet.distributed_optimizer(optimizer) + +1.2.5 构建分布式训练使用的数据加载器 +""""""""""""""""""""""""""""""""""""""""""""" + +由于分布式训练过程中每个进程可能读取不同数据,所以需要对数据集进行合理拆分后再进行加载。这里只需要在构建 `DataLoader `_ 时, 设置分布式数据采样器 `DistributedBatchSampler `_ 即可。 + +.. code-block:: python + + # 构建分布式数据采样器 + # 注意:需要保证batch中每个样本数据shape相同,若原尺寸不一,需进行预处理 + train_sampler = DistributedBatchSampler(train_dataset, 32, shuffle=True, drop_last=True) + val_sampler = DistributedBatchSampler(val_dataset, 32) + + # 构建分布式数据加载器 + train_loader = DataLoader(train_dataset, batch_sampler=train_sampler, num_workers=2) + valid_loader = DataLoader(val_dataset, batch_sampler=val_sampler, num_workers=2) + +1.3 完整示例代码 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +.. code-block:: python + + # -*- coding: UTF-8 -*- + import numpy as np + import matplotlib.pyplot as plt + import paddle + import paddle.nn.functional as F + from paddle.vision.transforms import ToTensor + # 一、导入分布式专用Fleet API + from paddle.distributed import fleet + # 构建分布式数据加载器所需API + from paddle.io import DataLoader, DistributedBatchSampler + # 设置GPU环境 + paddle.set_device('gpu') + + class MyNet(paddle.nn.Layer): + def __init__(self, num_classes=1): + super(MyNet, self).__init__() + + self.conv1 = paddle.nn.Conv2D(in_channels=3, out_channels=32, kernel_size=(3, 3)) + self.pool1 = paddle.nn.MaxPool2D(kernel_size=2, stride=2) + + self.conv2 = paddle.nn.Conv2D(in_channels=32, out_channels=64, kernel_size=(3,3)) + self.pool2 = paddle.nn.MaxPool2D(kernel_size=2, stride=2) + + self.conv3 = paddle.nn.Conv2D(in_channels=64, out_channels=64, kernel_size=(3,3)) + + self.flatten = paddle.nn.Flatten() + + self.linear1 = paddle.nn.Linear(in_features=1024, out_features=64) + self.linear2 = paddle.nn.Linear(in_features=64, out_features=num_classes) + + def forward(self, x): + x = self.conv1(x) + x = F.relu(x) + x = self.pool1(x) + + x = self.conv2(x) + x = F.relu(x) + x = self.pool2(x) + + x = self.conv3(x) + x = F.relu(x) + + x = self.flatten(x) + x = self.linear1(x) + x = F.relu(x) + x = self.linear2(x) + return x + + epoch_num = 10 + batch_size = 32 + learning_rate = 0.001 + val_acc_history = [] + val_loss_history = [] + + def train(): + # 二、初始化Fleet环境 + fleet.init(is_collective=True) + + model = MyNet(num_classes=10) + # 三、构建分布式训练使用的网络模型 + model = fleet.distributed_model(model) + + opt = paddle.optimizer.Adam(learning_rate=learning_rate,parameters=model.parameters()) + # 四、构建分布式训练使用的优化器 + opt = fleet.distributed_optimizer(opt) + + transform = ToTensor() + cifar10_train = paddle.vision.datasets.Cifar10(mode='train', + transform=transform) + cifar10_test = paddle.vision.datasets.Cifar10(mode='test', + transform=transform) + + # 五、构建分布式训练使用的数据集 + train_sampler = DistributedBatchSampler(cifar10_train, 32, shuffle=True, drop_last=True) + train_loader = DataLoader(cifar10_train, batch_sampler=train_sampler, num_workers=2) + + valid_sampler = DistributedBatchSampler(cifar10_test, 32, drop_last=True) + valid_loader = DataLoader(cifar10_test, batch_sampler=valid_sampler, num_workers=2) + + + for epoch in range(epoch_num): + model.train() + for batch_id, data in enumerate(train_loader()): + x_data = data[0] + y_data = paddle.to_tensor(data[1]) + y_data = paddle.unsqueeze(y_data, 1) + + logits = model(x_data) + loss = F.cross_entropy(logits, y_data) + + if batch_id % 1000 == 0: + print("epoch: {}, batch_id: {}, loss is: {}".format(epoch, batch_id, loss.numpy())) + loss.backward() + opt.step() + opt.clear_grad() + + model.eval() + accuracies = [] + losses = [] + for batch_id, data in enumerate(valid_loader()): + x_data = data[0] + y_data = paddle.to_tensor(data[1]) + y_data = paddle.unsqueeze(y_data, 1) + + logits = model(x_data) + loss = F.cross_entropy(logits, y_data) + acc = paddle.metric.accuracy(logits, y_data) + accuracies.append(acc.numpy()) + losses.append(loss.numpy()) + + avg_acc, avg_loss = np.mean(accuracies), np.mean(losses) + print("[validation] accuracy/loss: {}/{}".format(avg_acc, avg_loss)) + val_acc_history.append(avg_acc) + val_loss_history.append(avg_loss) + + if __name__ == "__main__": + train() + + +1.4 分布式启动 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +准备好分布式训练脚本后,就可以通过paddle.distributed.launch在集群上启动分布式训练: + +- 单机多卡训练 + 假设只使用集群的一个节点,节点上可使用的GPU卡数为4,那么只需要在节点终端运行如下命令: + + .. code-block:: bash + + python -m paddle.distributed.launch --gpus=0,1,2,3 train_with_fleet.py + +- 多机多卡训练 + 假设集群包含两个节点,每个节点上可使用的GPU卡数为4,IP地址分别为192.168.1.2和192.168.1.3,那么需要在两个节点的终端上分别运行如下命令: + + 在192.168.1.2节点运行: + + .. code-block:: bash + + python -m paddle.distributed.launch \ + --gpus=0,1,2,3 \ + --ips=192.168.1.2,192.168.1.3 \ + train_with_fleet.py + + 在192.168.1.3节点运行相同命令: + + .. code-block:: bash + + python -m paddle.distributed.launch \ + --gpus=0,1,2,3 \ + --ips=192.168.1.2,192.168.1.3 \ + train_with_fleet.py + +相关启动问题,可参考 `paddle.distributed.launch `_。 + diff --git a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst new file mode 100644 index 00000000000..3ea32175c61 --- /dev/null +++ b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst @@ -0,0 +1,190 @@ +本节将采用推荐领域非常经典的模型wide_and_deep为例,介绍如何使用Fleet API(paddle.distributed.fleet)完成参数服务器训练任务,本次快速开始的完整示例代码位于 https://github.com/PaddlePaddle/FleetX/tree/develop/examples/wide_and_deep。 + +2.1 版本要求 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +在编写分布式训练程序之前,用户需要确保已经安装paddlepaddle-2.0.0-rc-cpu或paddlepaddle-2.0.0-rc-gpu及以上版本的飞桨开源框架。 + +2.2 操作方法 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +参数服务器训练的基本代码主要包括如下几个部分: + + 1. 导入分布式训练需要的依赖包。 + 2. 定义分布式模式并初始化分布式训练环境。 + 3. 加载模型及数据。 + 4. 定义参数更新策略及优化器。 + 5. 开始训练。 + +下面将逐一进行讲解。 + +2.2.1 导入依赖 +"""""""""""" + +导入必要的依赖,例如分布式训练专用的Fleet API(paddle.distributed.fleet)。 + +.. code-block:: python + + import paddle + import paddle.distributed.fleet as fleet + +2.2.2 定义分布式模式并初始化分布式训练环境 +"""""""""""" + +通过 ``fleet.init()`` 接口,用户可以定义训练相关的环境,注意此环境是用户预先在环境变量中配置好的,包括:训练节点个数,服务节点个数,当前节点的序号,服务节点完整的IP:PORT列表等。 + +.. code-block:: python + + # 当前参数服务器模式只支持静态图模式, 因此训练前必须指定 ``paddle.enable_static()`` + paddle.enable_static() + fleet.init(is_collective=False) + +2.2.3 加载模型及数据 +"""""""""""" + +.. code-block:: python + + # 模型定义参考 examples/wide_and_deep 中 model.py + from model import WideDeepModel + from reader import WideDeepDataset + + model = WideDeepModel() + model.net(is_train=True) + + def distributed_training(exe, train_model, train_data_path="./data", batch_size=10, epoch_num=1): + train_data = WideDeepDataset(data_path=train_data_path) + reader = train_model.loader.set_sample_generator( + train_data, batch_size=batch_size, drop_last=True, places=paddle.CPUPlace()) + + for epoch_id in range(epoch_num): + reader.start() + try: + while True: + loss_val = exe.run(program=paddle.static.default_main_program(), + fetch_list=[train_model.cost.name]) + loss_val = np.mean(loss_val) + print("TRAIN ---> pass: {} loss: {}\n".format(epoch_id, loss_val)) + except paddle.common_ops_import.core.EOFException: + reader.reset() + + + +2.2.4 定义同步训练 Strategy 及 Optimizer +"""""""""""" + +在Fleet API中,用户可以使用 ``fleet.DistributedStrategy()`` 接口定义自己想要使用的分布式策略。 + +其中 ``a_sync`` 选项用于定义参数服务器相关的策略,当其被设定为 ``False`` 时,分布式训练将在同步的模式下进行。反之,当其被设定成 ``True`` 时,分布式训练将在异步的模式下进行。 + +.. code-block:: python + + # 定义异步训练 + dist_strategy = fleet.DistributedStrategy() + dist_strategy.a_sync = True + + # 定义同步训练 + dist_strategy = fleet.DistributedStrategy() + dist_strategy.a_sync = False + + # 定义Geo异步训练, Geo异步目前只支持SGD优化算法 + dist_strategy = fleet.DistributedStrategy() + dist_strategy.a_sync = True + dist_strategy.a_sync_configs = {"k_steps": 100} + + optimizer = paddle.optimizer.SGD(learning_rate=0.0001) + optimizer = fleet.distributed_optimizer(optimizer, dist_strategy) + optimizer.minimize(model.loss) + +2.2.5 开始训练 +"""""""""""" + +完成模型及训练策略以后,我们就可以开始训练模型了。因为在参数服务器模式下会有不同的角色,所以根据不同节点分配不同的任务。 + +对于服务器节点,首先用 ``init_server()`` 接口对其进行初始化,然后启动服务并开始监听由训练节点传来的梯度。 + +同样对于训练节点,用 ``init_worker()`` 接口进行初始化后, 开始执行训练任务。运行 ``exe.run()`` 接口开始训练,并得到训练中每一步的损失值。 + +.. code-block:: python + + if fleet.is_server(): + fleet.init_server() + fleet.run_server() + else: + exe = paddle.static.Executor(paddle.CPUPlace()) + exe.run(paddle.static.default_startup_program()) + + fleet.init_worker() + + distributed_training(exe, model) + + fleet.stop_worker() + +2.3 运行训练脚本 +^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +定义完训练脚本后,我们就可以用 ``python3 -m paddle.distributed.launch`` 指令运行分布式任务了。其中 ``server_num`` , ``worker_num`` 分别为服务节点和训练节点的数量。在本例中,服务节点有1个,训练节点有2个。 + +.. code-block:: bash + + python3 -m paddle.distributed.launch --server_num=1 --worker_num=2 --gpus=0,1 train.py + +您将看到显示如下日志信息: + +.. code-block:: bash + + ----------- Configuration Arguments ----------- + gpus: 0,1 + heter_worker_num: None + heter_workers: + http_port: None + ips: 127.0.0.1 + log_dir: log + nproc_per_node: None + server_num: 1 + servers: + training_script: train.py + training_script_args: [] + worker_num: 2 + workers: + ------------------------------------------------ + INFO 2021-05-06 12:14:26,890 launch.py:298] Run parameter-sever mode. pserver arguments:['--worker_num', '--server_num'], cuda count:8 + INFO 2021-05-06 12:14:26,892 launch_utils.py:973] Local server start 1 processes. First process distributed environment info (Only For Debug): + +=======================================================================================+ + | Distributed Envs Value | + +---------------------------------------------------------------------------------------+ + | PADDLE_TRAINERS_NUM 2 | + | TRAINING_ROLE PSERVER | + | POD_IP 127.0.0.1 | + | PADDLE_GLOO_RENDEZVOUS 3 | + | PADDLE_PSERVERS_IP_PORT_LIST 127.0.0.1:34008 | + | PADDLE_PORT 34008 | + | PADDLE_WITH_GLOO 0 | + | PADDLE_HETER_TRAINER_IP_PORT_LIST | + | PADDLE_TRAINER_ENDPOINTS 127.0.0.1:18913,127.0.0.1:10025 | + | PADDLE_GLOO_HTTP_ENDPOINT 127.0.0.1:23053 | + | PADDLE_GLOO_FS_PATH /tmp/tmp8vqb8arq | + +=======================================================================================+ + + INFO 2021-05-06 12:14:26,902 launch_utils.py:1041] Local worker start 2 processes. First process distributed environment info (Only For Debug): + +=======================================================================================+ + | Distributed Envs Value | + +---------------------------------------------------------------------------------------+ + | PADDLE_GLOO_HTTP_ENDPOINT 127.0.0.1:23053 | + | PADDLE_GLOO_RENDEZVOUS 3 | + | PADDLE_PSERVERS_IP_PORT_LIST 127.0.0.1:34008 | + | PADDLE_WITH_GLOO 0 | + | PADDLE_TRAINER_ENDPOINTS 127.0.0.1:18913,127.0.0.1:10025 | + | FLAGS_selected_gpus 0 | + | PADDLE_GLOO_FS_PATH /tmp/tmp8vqb8arq | + | PADDLE_TRAINERS_NUM 2 | + | TRAINING_ROLE TRAINER | + | XPU_VISIBLE_DEVICES 0 | + | PADDLE_HETER_TRAINER_IP_PORT_LIST | + | PADDLE_TRAINER_ID 0 | + | CUDA_VISIBLE_DEVICES 0 | + | FLAGS_selected_xpus 0 | + +=======================================================================================+ + + INFO 2021-05-06 12:14:26,921 launch_utils.py:903] Please check servers, workers and heter_worker logs in log/workerlog.*, log/serverlog.* and log/heterlog.* + INFO 2021-05-06 12:14:33,446 launch_utils.py:914] all workers exit, going to finish parameter server and heter_worker. + INFO 2021-05-06 12:14:33,446 launch_utils.py:926] all parameter server are killed \ No newline at end of file diff --git a/docs/guides/06_distributed_training/images/paddlecloud.png b/docs/guides/06_distributed_training/images/paddlecloud.png new file mode 100644 index 0000000000000000000000000000000000000000..8f44e043e98b2e4eec092bd9ec35d98141425bd9 GIT binary patch literal 14308 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 literal 0 HcmV?d00001 From eb664fe51891f8171eef9bbda9edd6fb7de1a69e Mon Sep 17 00:00:00 2001 From: onecatcn Date: Mon, 23 May 2022 10:36:11 +0800 Subject: [PATCH 002/101] Update accuracy_cn.rst (#4811) the doc was editted based on the discussion in the issue: INT32 Failed on paddle.metric.accuracy #42845 https://github.com/PaddlePaddle/Paddle/issues/42845 --- docs/api/paddle/metric/accuracy_cn.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/api/paddle/metric/accuracy_cn.rst b/docs/api/paddle/metric/accuracy_cn.rst index 0f2f2792799..3107bd19737 100644 --- a/docs/api/paddle/metric/accuracy_cn.rst +++ b/docs/api/paddle/metric/accuracy_cn.rst @@ -13,7 +13,7 @@ accuracy layer。 参考 https://en.wikipedia.org/wiki/Precision_and_recall ::::::::: - **input** (Tensor)-数据类型为float32,float64。输入为网络的预测值。shape为 ``[sample_number, class_dim]`` 。 - - **label** (Tensor)-数据类型为int64,int32。输入为数据集的标签。shape为 ``[sample_number, 1]`` 。 + - **label** (Tensor)-数据类型为int64。输入为数据集的标签。shape为 ``[sample_number, 1]`` 。 - **k** (int64|int32,可选) - 取每个类别中k个预测值用于计算,默认值为1。 - **correct** (int64|int32, 可选)-正确预测值的个数,默认值为None。 - **total** (int64|int32,可选)-总共的预测值,默认值为None。 From 9cf7b0e0b6aec77664cbd12aad15d8144ede956a Mon Sep 17 00:00:00 2001 From: Sing_chan <51314274+betterpig@users.noreply.github.com> Date: Mon, 23 May 2022 10:41:40 +0800 Subject: [PATCH 003/101] support doc 2.3 (#4819) --- ci_scripts/ci_start.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ci_scripts/ci_start.sh b/ci_scripts/ci_start.sh index 86d8cd5ef5d..12cfca3d0a1 100644 --- a/ci_scripts/ci_start.sh +++ b/ci_scripts/ci_start.sh @@ -23,7 +23,9 @@ if [ -z "${PADDLE_WHL}" ] ; then if [ -z "${PADDLE_WHL}" ] ; then # as there are two pipelines now, only change the test pipeline's version to py3.7 PADDLE_WHL=https://paddle-wheel.bj.bcebos.com/develop/linux/cpu-mkl/paddlepaddle-0.0.0-cp37-cp37m-linux_x86_64.whl - if [ ${BRANCH} = 'release/2.2' ] ; then + if [ ${BRANCH} = 'release/2.3' ] ; then + PADDLE_WHL=https://paddle-wheel.bj.bcebos.com/2.3.0/linux/linux-cpu-mkl-avx/paddlepaddle-2.3.0-cp37-cp37m-linux_x86_64.whl + elif [ ${BRANCH} = 'release/2.2' ] ; then PADDLE_WHL=https://paddle-wheel.bj.bcebos.com/2.2.2/linux/linux-cpu-mkl-avx/paddlepaddle-2.2.2-cp37-cp37m-linux_x86_64.whl elif [ ${BRANCH} = 'release/2.1' ] ; then PADDLE_WHL=https://paddle-wheel.bj.bcebos.com/2.1.3/linux/linux-cpu-mkl-avx/paddlepaddle-2.1.3-cp37-cp37m-linux_x86_64.whl From ab7345d2ae1ebe88afb68ba3fa8be4241d6c1e8e Mon Sep 17 00:00:00 2001 From: wangguanqun Date: Mon, 23 May 2022 13:06:35 +0800 Subject: [PATCH 004/101] add ps quick start (#4731) --- .../cluster_quick_start_ps_cn.rst | 211 +++++++++--------- .../06_distributed_training/index_cn.rst | 1 + 2 files changed, 111 insertions(+), 101 deletions(-) diff --git a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst index 3ea32175c61..9d12f0d34b5 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst @@ -1,9 +1,26 @@ -本节将采用推荐领域非常经典的模型wide_and_deep为例,介绍如何使用Fleet API(paddle.distributed.fleet)完成参数服务器训练任务,本次快速开始的完整示例代码位于 https://github.com/PaddlePaddle/FleetX/tree/develop/examples/wide_and_deep。 -2.1 版本要求 +.. _cluster_quick_start_ps: + +快速开始-参数服务器 +------------------------- + +搜索推荐场景经常面临两个问题: + +1. 海量训练数据:单机训练太慢,需要增加训练节点数。 +2. 特征维度高且稀疏化:模型稀疏参数过多,单机内存无法容纳,需要采用分布式存储。 + +参数服务器(ParameterServer)模式采用了一种将模型参数中心化管理的方式来实现模型参数的分布式存储和更新。该模式下的节点/进程有两种不同的角色: + +1. 训练节点(Trainer/Worker):该节点负责完成数据读取、从服务节点拉取参数、前向计算、反向梯度计算等过程,并将计算出的梯度上传至服务节点。 +2. 服务节点(Server):在收到所有训练节点传来的梯度后,该节点会将梯度聚合并更新参数,供训练节点拉取进行下一轮的训练。 + +因此参数服务器模式对于存储超大规模模型参数的训练场景十分友好,常被用于训练拥有海量稀疏参数的搜索推荐领域模型。 + +2.1 任务介绍 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -在编写分布式训练程序之前,用户需要确保已经安装paddlepaddle-2.0.0-rc-cpu或paddlepaddle-2.0.0-rc-gpu及以上版本的飞桨开源框架。 +本节将采用推荐领域非常经典的模型wide_and_deep为例,介绍如何使用飞桨分布式完成参数服务器训练任务,本次快速开始的完整示例代码位于 https://github.com/PaddlePaddle/FleetX/tree/develop/examples/wide_and_deep_dataset。 +在编写分布式训练程序之前,用户需要确保已经安装PaddlePaddle2.3及以上版本的飞桨开源框架。 2.2 操作方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -12,9 +29,11 @@ 1. 导入分布式训练需要的依赖包。 2. 定义分布式模式并初始化分布式训练环境。 - 3. 加载模型及数据。 - 4. 定义参数更新策略及优化器。 - 5. 开始训练。 + 3. 加载模型。 + 4. 构建dataset加载数据 + 5. 定义参数更新策略及优化器。 + 6. 开始训练。 + 下面将逐一进行讲解。 @@ -39,37 +58,36 @@ paddle.enable_static() fleet.init(is_collective=False) -2.2.3 加载模型及数据 -"""""""""""" +2.2.3 加载模型 .. code-block:: python - # 模型定义参考 examples/wide_and_deep 中 model.py + # 模型定义参考 examples/wide_and_deep_dataset 中 model.py from model import WideDeepModel - from reader import WideDeepDataset - model = WideDeepModel() model.net(is_train=True) - def distributed_training(exe, train_model, train_data_path="./data", batch_size=10, epoch_num=1): - train_data = WideDeepDataset(data_path=train_data_path) - reader = train_model.loader.set_sample_generator( - train_data, batch_size=batch_size, drop_last=True, places=paddle.CPUPlace()) - - for epoch_id in range(epoch_num): - reader.start() - try: - while True: - loss_val = exe.run(program=paddle.static.default_main_program(), - fetch_list=[train_model.cost.name]) - loss_val = np.mean(loss_val) - print("TRAIN ---> pass: {} loss: {}\n".format(epoch_id, loss_val)) - except paddle.common_ops_import.core.EOFException: - reader.reset() +2.2.4 构建dataset加载数据 +"""""""""""" - - -2.2.4 定义同步训练 Strategy 及 Optimizer +.. code-block:: python + + # 具体数据处理参考examples/wide_and_deep_dataset中reader.py + dataset = paddle.distributed.QueueDataset() + thread_num = 1 + dataset.init(use_var=model.inputs, + pipe_command="python reader.py", + batch_size=batch_size, + thread_num=thread_num) + + train_files_list = [os.path.join(train_data_path, x) + for x in os.listdir(train_data_path)] + dataset.set_filelist(train_files_list) + +备注:dataset具体用法参见\ `使用InMemoryDataset/QueueDataset进行训练 `_\。 + + +2.2.5 定义同步训练 Strategy 及 Optimizer """""""""""" 在Fleet API中,用户可以使用 ``fleet.DistributedStrategy()`` 接口定义自己想要使用的分布式策略。 @@ -82,27 +100,18 @@ dist_strategy = fleet.DistributedStrategy() dist_strategy.a_sync = True - # 定义同步训练 - dist_strategy = fleet.DistributedStrategy() - dist_strategy.a_sync = False - - # 定义Geo异步训练, Geo异步目前只支持SGD优化算法 - dist_strategy = fleet.DistributedStrategy() - dist_strategy.a_sync = True - dist_strategy.a_sync_configs = {"k_steps": 100} - optimizer = paddle.optimizer.SGD(learning_rate=0.0001) optimizer = fleet.distributed_optimizer(optimizer, dist_strategy) optimizer.minimize(model.loss) -2.2.5 开始训练 +2.2.6 开始训练 """""""""""" 完成模型及训练策略以后,我们就可以开始训练模型了。因为在参数服务器模式下会有不同的角色,所以根据不同节点分配不同的任务。 对于服务器节点,首先用 ``init_server()`` 接口对其进行初始化,然后启动服务并开始监听由训练节点传来的梯度。 -同样对于训练节点,用 ``init_worker()`` 接口进行初始化后, 开始执行训练任务。运行 ``exe.run()`` 接口开始训练,并得到训练中每一步的损失值。 +同样对于训练节点,用 ``init_worker()`` 接口进行初始化后, 开始执行训练任务。运行 ``exe.train_from_dataset()`` 接口开始训练。 .. code-block:: python @@ -115,76 +124,76 @@ fleet.init_worker() - distributed_training(exe, model) - + for epoch_id in range(1): + exe.train_from_dataset(paddle.static.default_main_program(), + dataset, + paddle.static.global_scope(), + debug=False, + fetch_list=[train_model.cost], + fetch_info=["loss"], + print_period=1) + fleet.stop_worker() +备注:Paddle2.3版本及以后,ParameterServer训练将废弃掉dataloader + exe.run()方式,请切换到dataset + exe.train_from_dataset()方式。 + + 2.3 运行训练脚本 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -定义完训练脚本后,我们就可以用 ``python3 -m paddle.distributed.launch`` 指令运行分布式任务了。其中 ``server_num`` , ``worker_num`` 分别为服务节点和训练节点的数量。在本例中,服务节点有1个,训练节点有2个。 +定义完训练脚本后,我们就可以用 ``fleetrun`` 指令运行分布式任务了。其中 ``server_num`` , ``worker_num`` 分别为服务节点和训练节点的数量。在本例中,服务节点有1个,训练节点有2个。 .. code-block:: bash - python3 -m paddle.distributed.launch --server_num=1 --worker_num=2 --gpus=0,1 train.py + fleetrun --server_num=1 --trainer_num=2 train.py -您将看到显示如下日志信息: +您将在执行终端看到如下日志信息: .. code-block:: bash - ----------- Configuration Arguments ----------- - gpus: 0,1 - heter_worker_num: None - heter_workers: - http_port: None - ips: 127.0.0.1 - log_dir: log - nproc_per_node: None - server_num: 1 - servers: - training_script: train.py - training_script_args: [] - worker_num: 2 - workers: - ------------------------------------------------ - INFO 2021-05-06 12:14:26,890 launch.py:298] Run parameter-sever mode. pserver arguments:['--worker_num', '--server_num'], cuda count:8 - INFO 2021-05-06 12:14:26,892 launch_utils.py:973] Local server start 1 processes. First process distributed environment info (Only For Debug): - +=======================================================================================+ - | Distributed Envs Value | - +---------------------------------------------------------------------------------------+ - | PADDLE_TRAINERS_NUM 2 | - | TRAINING_ROLE PSERVER | - | POD_IP 127.0.0.1 | - | PADDLE_GLOO_RENDEZVOUS 3 | - | PADDLE_PSERVERS_IP_PORT_LIST 127.0.0.1:34008 | - | PADDLE_PORT 34008 | - | PADDLE_WITH_GLOO 0 | - | PADDLE_HETER_TRAINER_IP_PORT_LIST | - | PADDLE_TRAINER_ENDPOINTS 127.0.0.1:18913,127.0.0.1:10025 | - | PADDLE_GLOO_HTTP_ENDPOINT 127.0.0.1:23053 | - | PADDLE_GLOO_FS_PATH /tmp/tmp8vqb8arq | - +=======================================================================================+ - - INFO 2021-05-06 12:14:26,902 launch_utils.py:1041] Local worker start 2 processes. First process distributed environment info (Only For Debug): - +=======================================================================================+ - | Distributed Envs Value | - +---------------------------------------------------------------------------------------+ - | PADDLE_GLOO_HTTP_ENDPOINT 127.0.0.1:23053 | - | PADDLE_GLOO_RENDEZVOUS 3 | - | PADDLE_PSERVERS_IP_PORT_LIST 127.0.0.1:34008 | - | PADDLE_WITH_GLOO 0 | - | PADDLE_TRAINER_ENDPOINTS 127.0.0.1:18913,127.0.0.1:10025 | - | FLAGS_selected_gpus 0 | - | PADDLE_GLOO_FS_PATH /tmp/tmp8vqb8arq | - | PADDLE_TRAINERS_NUM 2 | - | TRAINING_ROLE TRAINER | - | XPU_VISIBLE_DEVICES 0 | - | PADDLE_HETER_TRAINER_IP_PORT_LIST | - | PADDLE_TRAINER_ID 0 | - | CUDA_VISIBLE_DEVICES 0 | - | FLAGS_selected_xpus 0 | - +=======================================================================================+ - - INFO 2021-05-06 12:14:26,921 launch_utils.py:903] Please check servers, workers and heter_worker logs in log/workerlog.*, log/serverlog.* and log/heterlog.* - INFO 2021-05-06 12:14:33,446 launch_utils.py:914] all workers exit, going to finish parameter server and heter_worker. - INFO 2021-05-06 12:14:33,446 launch_utils.py:926] all parameter server are killed \ No newline at end of file + LAUNCH INFO 2022-05-18 11:27:17,761 ----------- Configuration ---------------------- + LAUNCH INFO 2022-05-18 11:27:17,761 devices: None + LAUNCH INFO 2022-05-18 11:27:17,761 elastic_level: -1 + LAUNCH INFO 2022-05-18 11:27:17,761 elastic_timeout: 30 + LAUNCH INFO 2022-05-18 11:27:17,761 gloo_port: 6767 + LAUNCH INFO 2022-05-1811:27:17,761 host: None + LAUNCH INFO 2022-05-18 11:27:17,761 job_id: default + LAUNCH INFO 2022-05-18 11:27:17,761 legacy: False + LAUNCH INFO 2022-05-18 11:27:17,761 log_dir: log + LAUNCH INFO 2022-05-18 11:27:17,761 log_level: INFO + LAUNCH INFO 2022-05-18 11:27:17,762 master: None + LAUNCH INFO 2022-05-18 11:27:17,762 max_restart: 3 + LAUNCH INFO 2022-05-18 11:27:17,762 nnodes: 1 + LAUNCH INFO 2022-05-18 11:27:17,762 nproc_per_node: None + LAUNCH INFO 2022-05-18 11:27:17,762 rank: -1 + LAUNCH INFO 2022-05-18 11:27:17,762 run_mode: collective + LAUNCH INFO 2022-05-18 11:27:17,762 server_num: 1 + LAUNCH INFO 2022-05-18 11:27:17,762 servers: + LAUNCH INFO 2022-05-18 11:27:17,762 trainer_num: 2 + LAUNCH INFO 2022-05-18 11:27:17,762 trainers: + LAUNCH INFO 2022-05-18 11:27:17,762 training_script: train.py + LAUNCH INFO 2022-05-18 11:27:17,762 training_script_args: [] + LAUNCH INFO 2022-05-18 11:27:17,762 with_gloo: 0 + LAUNCH INFO 2022-05-18 11:27:17,762 -------------------------------------------------- + LAUNCH INFO 2022-05-18 11:27:17,772 Job: default, mode ps, replicas 1[1:1], elastic False + LAUNCH INFO 2022-05-18 11:27:17,775 Run Pod: evjsyn, replicas 3, status ready + LAUNCH INFO 2022-05-18 11:27:17,795 Watching Pod: evjsyn, replicas 3, status running + +同时,在log目录下,会生成服务节点和训练节点的日志文件。 +服务节点日志:default.evjsyn.ps.0.log,日志中须包含以下内容,证明服务节点启动成功,可以提供服务。 + +.. code-block:: bash + + I0518 11:27:20.730531 177420 brpc_ps_server.cc:73] running server with rank id: 0, endpoint: IP:PORT + +训练节点日志:default.evjsyn.trainer.0.log,日志中打印了训练过程中的部分变量值。 + +.. code-block:: bash + + time: [2022-05-18 11:27:27], batch: [1], loss[1]:[0.666739] + time: [2022-05-18 11:27:27], batch: [2], loss[1]:[0.690405] + time: [2022-05-18 11:27:27], batch: [3], loss[1]:[0.681693] + time: [2022-05-18 11:27:27], batch: [4], loss[1]:[0.703863] + time: [2022-05-18 11:27:27], batch: [5], loss[1]:[0.670717] + +备注:启动相关问题,请参考\ `launch `_\。 diff --git a/docs/guides/06_distributed_training/index_cn.rst b/docs/guides/06_distributed_training/index_cn.rst index e869479edad..3a3c0841dc2 100644 --- a/docs/guides/06_distributed_training/index_cn.rst +++ b/docs/guides/06_distributed_training/index_cn.rst @@ -5,6 +5,7 @@ 您可以通过以下内容,了解飞桨分布式训练的特性和使用指南: - `分布式训练快速开始 <./cluster_quick_start_cn.html>`_ : 使用飞桨框架快速开始分布式训练。 +- `快速开始-参数服务器 <./cluster_quick_start_ps_cn.html>`_ : 使用飞桨参数服务器快速开始分布式训练。 - `使用FleetAPI进行分布式训练 <./fleet_api_howto_cn.html>`_ : 使用飞桨框架FleetAPI完成分布式训练。 .. toctree:: From 24c08f9a8b457f648fbef89f66c3f0e2b9b3b858 Mon Sep 17 00:00:00 2001 From: kuizhiqing Date: Mon, 23 May 2022 15:38:29 +0800 Subject: [PATCH 005/101] add distributed deployment (#4652) * add distributed deployment * update index * review and update * add faq * translate launch api doc and fix doc by comments --- docs/api/paddle/distributed/launch_cn.rst | 54 +-- .../06_distributed_training/deployment.rst | 424 ++++++++++++++++++ .../06_distributed_training/index_cn.rst | 2 + 3 files changed, 453 insertions(+), 27 deletions(-) create mode 100644 docs/guides/06_distributed_training/deployment.rst diff --git a/docs/api/paddle/distributed/launch_cn.rst b/docs/api/paddle/distributed/launch_cn.rst index 28c75e626bb..46a36c19a7f 100644 --- a/docs/api/paddle/distributed/launch_cn.rst +++ b/docs/api/paddle/distributed/launch_cn.rst @@ -7,6 +7,8 @@ launch 使用 ``python -m paddle.distributed.launch`` 方法启动分布式训练任务。 +Launch 模块是在每个节点运行,负责分布式协同和本地进程管理的模块。使用 launch 启动分布式训练可以简化参数配置,进行稳定可靠的分布式组网训练,同时使用优化的调试和日志收集功能。另外一些高级的分布式功能如容错和弹性都依赖 launch 启动。 + 使用方法 ::::::::: .. code-block:: bash @@ -29,7 +31,7 @@ launch - ``--rank``: 节点序号, 可以通过主节点进行分配。默认值 ``--rank=-1``. - - ``--log_level``: 日志级别, 可选值为 CRITICAL/ERROR/WARNING/INFO/DEBUG/NOTSET, 不区分大小写. 0 号节点的日志默认不输出到标准输出,需要开启输出请使用 debug 模式。默认值 ``--log_level=INFO``. + - ``--log_level``: 日志级别, 可选值为 CRITICAL/ERROR/WARNING/INFO/DEBUG/NOTSET, 不区分大小写。默认值 ``--log_level=INFO``. - ``--nnodes``: 节点数量,支持区间设定以开启弹性模式,比如 ``--nnodes=2:3``. 默认值 ``--nnodes=1``. @@ -91,26 +93,26 @@ Elastic 参数 .. code-block:: bash :name: code-block-example-bash0 - # For training on multi node, run the following command in one of the nodes + # 在其中一个节点上运行如下命令以启动 2 机任务 python -m paddle.distributed.launch --nnodes 2 train.py - # Then the following info will be print + # 这时,日志会打印如下信息, # Copy the following command to other nodes to run. # -------------------------------------------------------------------------------- # python -m paddle.distributed.launch --master 10.0.0.1:38714 --nnodes 2 train.py # -------------------------------------------------------------------------------- - # Follow the instruction above and paste the command in other nodes can launch a multi nodes training job. + # 按照提示,复制命令在另外的节点上运行命令即可启动分布式训练。 - # There are two ways to launch a job with the same command for multi nodes training - # 1) using the following command in every nodes, make sure the ip is one of the training node and the port is available on that node + # 要想在每个节点上运行同样的命令启动分布式训练有如下两种方法: + # 1) 使用预配置的 master 信息,其中 master 的 ip 为其中一个训练节点,端口为可用端口 # python -m paddle.distributed.launch --master 10.0.0.1:38714 --nnodes 2 train.py - # 2) using the following command in every nodes with a independent etcd service + # 2) 使用额外部署的 etcd 服务作为 master # python -m paddle.distributed.launch --master etcd://10.0.0.1:2379 --nnodes 2 train.py - # This functionality works will for both collective and ps mode and even with other arguments. + # 以上功能介绍可用配合别的参数使用。 代码示例一 (collective, 单机) @@ -118,57 +120,55 @@ Elastic 参数 .. code-block:: bash :name: code-block-example-bash1 - # For training on single node using 4 gpus. + # 启动单机4卡任务 - python -m paddle.distributed.launch --gpus=0,1,2,3 train.py --lr=0.01 + python -m paddle.distributed.launch --devices=0,1,2,3 train.py --lr=0.01 代码示例二 (collective, 多机) ::::::::: .. code-block:: bash :name: code-block-example-bash2 - # The parameters of --gpus and --ips must be consistent in each node. - - # For training on multiple nodes, e.g., 192.168.0.16, 192.168.0.17 + # 启动两机任务,其中机器 ip 为 192.168.0.16, 192.168.0.17 # On 192.168.0.16: - python -m paddle.distributed.launch --gpus=0,1,2,3 --ips=192.168.0.16,192.168.0.17 train.py --lr=0.01 + python -m paddle.distributed.launch --devices=0,1,2,3 --master=192.168.0.16:8090 --nnodes=2 train.py --lr=0.01 # On 192.168.0.17: - python -m paddle.distributed.launch --gpus=0,1,2,3 --ips=192.168.0.16,192.168.0.17 train.py --lr=0.01 + python -m paddle.distributed.launch --devices=0,1,2,3 --master=192.168.0.16:8090 --nnodes=2 train.py --lr=0.01 代码示例三 (ps, cpu, 单机) ::::::::: .. code-block:: bash :name: code-block-example-bash3 - # To simulate distributed environment using single node, e.g., 2 servers and 4 workers. + # 在单机上启动多个 server 和 trainer - python -m paddle.distributed.launch --server_num=2 --worker_num=4 train.py --lr=0.01 + python -m paddle.distributed.launch --server_num=2 --trainer_num=4 train.py --lr=0.01 代码示例四 (ps, cpu, 多机) ::::::::: .. code-block:: bash :name: code-block-example-bash4 - # For training on multiple nodes, e.g., 192.168.0.16, 192.168.0.17 where each node with 1 server and 2 workers. + # 在多机上启动, 例如在 192.168.0.16, 192.168.0.17 分别启动1个 server 和2个 trainer # On 192.168.0.16: - python -m paddle.distributed.launch --servers="192.168.0.16:6170,192.168.0.17:6170" --workers="192.168.0.16:6171,192.168.0.16:6172,192.168.0.17:6171,192.168.0.17:6172" train.py --lr=0.01 + python -m paddle.distributed.launch --master=192.168.0.16:8090 --nnodes=2 --server_num=1 --trainer_num=2 train.py --lr=0.01 # On 192.168.0.17: - python -m paddle.distributed.launch --servers="192.168.0.16:6170,192.168.0.17:6170" --workers="192.168.0.16:6171,192.168.0.16:6172,192.168.0.17:6171,192.168.0.17:6172" train.py --lr=0.01 + python -m paddle.distributed.launch --master=192.168.0.16:8090 --nnodes=2 --server_num=1 --trainer_num=2 train.py --lr=0.01 代码示例五 (ps, gpu, 单机) ::::::::: .. code-block:: bash :name: code-block-example-bash5 - # To simulate distributed environment using single node, e.g., 2 servers and 4 workers, each worker use single gpu. + # 当启动 gpu ps 时,需要指定使用的 gpu, export CUDA_VISIBLE_DEVICES=0,1,2,3 python -m paddle.distributed.launch --server_num=2 --worker_num=4 train.py --lr=0.01 @@ -178,7 +178,7 @@ Elastic 参数 .. code-block:: bash :name: code-block-example-bash6 - # For training on multiple nodes, e.g., 192.168.0.16, 192.168.0.17 where each node with 1 server and 2 workers. + # 使用如下命令启动多机 gpu ps # On 192.168.0.16: @@ -195,7 +195,7 @@ Elastic 参数 .. code-block:: bash :name: code-block-example-bash7 - # To simulate distributed environment using single node, e.g., 2 servers and 4 workers, two workers use gpu, two workers use cpu. + # 使用如下命令启动单机 heter ps export CUDA_VISIBLE_DEVICES=0,1 python -m paddle.distributed.launch --server_num=2 --worker_num=2 --heter_worker_num=2 train.py --lr=0.01 @@ -205,7 +205,7 @@ Elastic 参数 .. code-block:: bash :name: code-block-example-bash8 - # For training on multiple nodes, e.g., 192.168.0.16, 192.168.0.17 where each node with 1 server, 1 gpu worker, 1 cpu worker. + # 使用如下命令启动多机 heter ps # On 192.168.0.16: @@ -222,8 +222,8 @@ Elastic 参数 .. code-block:: bash :name: code-block-example-bash9 - # With the following command, the job will begin to run immediately if 4 nodes are ready, - # or it will run after elastic_timeout if only 2 or 3 nodes ready + # 使用如下命令启动弹性训练 + # 当 4 个节点 ready 时,训练立即开始,当只有 2 或 3 个节点 ready 时,将等待超时然后开始训练 python -m paddle.distributed.launch --master etcd://10.0.0.1:2379 --nnodes 2:4 train.py - # once the number of nodes changes between 2:4 during training, the strategy holds + # 在训练过程中如果节点发生变化,上述逻辑不变。 diff --git a/docs/guides/06_distributed_training/deployment.rst b/docs/guides/06_distributed_training/deployment.rst new file mode 100644 index 00000000000..7f300bbcc6f --- /dev/null +++ b/docs/guides/06_distributed_training/deployment.rst @@ -0,0 +1,424 @@ + +环境部署 +--------------- + +环境支持列表 +^^^^^^^^^^^^^^^^^^^^^^ + +PaddlePaddle 分布式对不同系统和硬件的支持情况如下表所示, + +.. list-table:: + + * - + - CPU + - GPU + - 昆仑XPU + - 海光DCU + - 昇腾NPU + * - Linux + - PS/Collective + - PS/Collective + - PS/Collective + - Collective + - Collective + +目前 Windows 只支持单机的 CPU 和 GPU,暂不支持分布式训练。 + + +常用环境介绍 +^^^^^^^^^^^^^^^^^^^^^^ + +下面针对使用多台裸机使用分布式的场景提供指导,总体而言, + +* 强烈推荐使用 `docker `_ 环境部署使用分布式训练,不建议在机器上直接安装使用 PaddlePaddle +* 当机器数量多于 5 台且长期使用时,建议使用 :ref:`Kubernetes 部署` 或其他类似集群管理工具使用 + + +裸机及Docker化部署 +^^^^^^^^^^^^^^^^^^^^^^ + +paddle 环境安装 +~~~~~~~~~~~~~~~~~~~~~~~~ + +根据 `安装 `_ 部分选择合适的 paddle 版本, +直接使用 pip 可以在环境中安装 PaddlePaddle, 例如 + +.. code-block:: + + $ python -m pip install paddlepaddle-gpu==2.2.2.post112 -f https://www.paddlepaddle.org.cn/whl/linux/mkl/avx/stable.html + +或者在装有 docker 的环境中可以直接使用 PaddlePaddle 官方提供的镜像, +下载对应版本的镜像然后通过以下命令启动 + +.. code-block:: + + $ docker run --name paddle -it --host=net -v $PWD:/paddle registry.baidubce.com/paddlepaddle/paddle:2.2.2-gpu-cuda11.2-cudnn8 /bin/bash + +* 当使用 gpu 时请配置 nvidia docker runtime 或使用 nvidia-docker 启动容器,进入容器后使用 nvidia-smi 命令确认环境正确 +* 使用分布式时需要添加 --host=net 参数让容器使用主机网络以实现跨机建立连接 + +安装后,运行以下命令 + +.. code-block:: + + $ python -c "import paddle; paddle.utils.run_check()" + +确保输出结果符合预期以保证 paddle 环境安装正确。 至此,可以进行单机的代码开发和调试工作。 + +分布式启动 +~~~~~~~~~~~~~~~~~~~~~~~~ + +在多机中安装好环境,同步数据和代码,在任意节点上运行以下命令 + +.. code-block:: + + $ python -m paddle.distributed.launch --nnodes=2 demo.py + +nnodes 为本次分布式任务的节点个数,这时会在看到如下输出 + +.. code-block:: + + $ Copy the following command to other nodes to run. + $ -------------------------------------------------------------------------------- + $ python -m paddle.distributed.launch --master 123.45.67.89:25880 --nnodes=2 demo.py + $ -------------------------------------------------------------------------------- + +按照提示复制命令到其他所有节点即可启动分布式训练任务。 + +* --nnodes 为分布式任务的节点个数,默认为 1 即启动单机任务 +* --master 为分布式同步主节点,可以直接由用户设置,这是用户需要配置主节点的 ip 和任意可用端口 + +更多 launch 启动参数和用法请参考 `文档 `_ 或通过以下命令获得 + +.. code-block:: + + $ python -m paddle.distributed.launch --help + + +Kubernetes 部署 +^^^^^^^^^^^^^^^^^^^^^^ + +在 kubernetes 上部署分布式任务需要安装 `paddle-operator `_ 。 +paddle-operator 通过添加自定义资源类型 (paddlejob) 以及部署 controller 和一系列 kubernetes 原生组件的方式实现简单定义即可运行 paddle 任务的需求。 + +目前支持运行 ParameterServer (PS) 和 Collective 两种分布式任务,当然也支持运行单节点任务。 + +paddle-operator 安装 +~~~~~~~~~~~~~~~~~~~~~~~~ + +安装 paddle-operator 需要有已经安装的 kubernetes (v1.8+) 集群和 `kubectl `_ (v1.8+) 工具。 + +本节所需配置文件和示例可以在 `这里 `_ 找到, +可以通过 *git clone* 或者复制文件内容保存。 + +.. code-block:: + + deploy + |-- examples + | |-- resnet.yaml + | |-- wide_and_deep.yaml + | |-- wide_and_deep_podip.yaml + | |-- wide_and_deep_service.yaml + | `-- wide_and_deep_volcano.yaml + |-- v1 + | |-- crd.yaml + | `-- operator.yaml + `-- v1beta1 + |-- crd.yaml + `-- operator.yaml + + +*注意:kubernetes 1.15 及以下使用 v1beta1 目录,1.16 及以上使用目录 v1.* + +执行以下命令, + +.. code-block:: + + $ kubectl create -f https://raw.githubusercontent.com/PaddleFlow/paddle-operator/dev/deploy/v1/crd.yaml + +或者 + +.. code-block:: + + $ kubectl create -f deploy/v1/crd.yaml + +*注意:v1beta1 请根据报错信息添加 --validate=false 选项* + +通过以下命令查看是否成功, + +.. code-block:: + + $ kubectl get crd + NAME CREATED AT + paddlejobs.batch.paddlepaddle.org 2021-02-08T07:43:24Z + +执行以下部署命令, + +.. code-block:: + + $ kubectl create -f https://raw.githubusercontent.com/PaddleFlow/paddle-operator/dev/deploy/v1/operator.yaml + +或者 + +.. code-block:: + + $ kubectl create -f deploy/v1/operator.yaml + +通过以下命令查看部署结果和运行状态, + +.. code-block:: + + $ kubectl -n paddle-system get pods + NAME READY STATUS RESTARTS AGE + paddle-controller-manager-698dd7b855-n65jr 1/1 Running 0 1m + +通过查看 controller 日志以确保运行正常, + +.. code-block:: + + $ kubectl -n paddle-system logs paddle-controller-manager-698dd7b855-n65jr + +提交 demo 任务查看效果, + +.. code-block:: + + $ kubectl -n paddle-system create -f deploy/examples/wide_and_deep.yaml + +查看 paddlejob 任务状态, pdj 为 paddlejob 的缩写, + +.. code-block:: + + $ kubectl -n paddle-system get pdj + NAME STATUS MODE AGE + wide-ande-deep-service Completed PS 4m4s + +以上信息可以看出:训练任务已经正确完成,该任务为 ps 模式。 +可通过 cleanPodPolicy 配置任务完成/失败后的 pod 删除策略,详见任务配置。 + +训练期间可以通过如下命令查看 pod 状态, + +.. code-block:: + + $ kubectl -n paddle-system get pods + + +paddlejob 任务提交 +~~~~~~~~~~~~~~~~~~~~~~~~ + +在上述安装过程中,我们使用了 wide-and-deep 的例子作为提交任务演示,本节详细描述任务配置和提交流程供用户参考提交自己的任务。 + +示例 wide and deep + +本示例为 PS 模式,使用 cpu 进行训练,需要配置 ps 和 worker。 + +准备配置文件, + +.. code-block:: + + $ cat demo-wide-and-deep.yaml + apiVersion: batch.paddlepaddle.org/v1 + kind: PaddleJob + metadata: + name: wide-ande-deep + spec: + withGloo: 1 + intranet: PodIP + cleanPodPolicy: OnCompletion + worker: + replicas: 2 + template: + spec: + containers: + - name: paddle + image: registry.baidubce.com/paddle-operator/demo-wide-and-deep:v1 + ps: + replicas: 2 + template: + spec: + containers: + - name: paddle + image: registry.baidubce.com/paddle-operator/demo-wide-and-deep:v1 + +说明: + +* 提交命名需要唯一,如果存在冲突请先删除原 paddlejob 确保已经删除再提交; +* ps 模式时需要同时配置 ps 和 worker,collective 模式时只需要配置 worker 即可; +* withGloo 可选配置为 0 不启用, 1 只启动 worker 端, 2 启动全部(worker端和Server端), 建议设置 1; +* cleanPodPolicy 可选配置为 Always/Never/OnFailure/OnCompletion,表示任务终止(失败或成功)时,是否删除 pod,调试时建议 Never,生产时建议 OnCompletion; +* intranet 可选配置为 Service/PodIP,表示 pod 间的通信方式,用户可以不配置, 默认使用 PodIP; +* ps 和 worker 的内容为 podTemplateSpec,用户可根据需要遵从 kubernetes 规范添加更多内容, 如 GPU 的配置. + + +提交任务: 使用 kubectl 提交 yaml 配置文件以创建任务, + +.. code-block:: + + $ kubectl -n paddle-system create -f demo-wide-and-deep.yaml + +示例 resnet +~~~~~~~~~~~~~~~~~~~~~~~~ + +本示例为 Collective 模式,使用 gpu 进行训练,只需要配置 worker,worker 配置中需要声明使用的 gpu 信息。 + +准备配置文件, + +.. code-block:: + + $ cat resnet.yaml + apiVersion: batch.paddlepaddle.org/v1 + kind: PaddleJob + metadata: + name: resnet + spec: + cleanPodPolicy: Never + worker: + replicas: 2 + template: + spec: + containers: + - name: paddle + image: registry.baidubce.com/paddle-operator/demo-resnet:v1 + command: + - python + args: + - "-m" + - "paddle.distributed.launch" + - "train_fleet.py" + volumeMounts: + - mountPath: /dev/shm + name: dshm + resources: + limits: + nvidia.com/gpu: 1 + volumes: + - name: dshm + emptyDir: + medium: Memory + + +注意: + +* 这里需要添加 shared memory 挂载以防止缓存出错; +* 本示例采用内置 flower 数据集,程序启动后会进行下载,根据网络环境可能等待较长时间。 + +提交任务: 使用 kubectl 提交 yaml 配置文件以创建任务, + +.. code-block:: + + $ kubectl -n paddle-system create -f resnet.yaml + +卸载 +~~~~~~ + +通过以下命令卸载部署的组件, + +.. code-block:: + + $ kubectl delete -f deploy/v1/crd.yaml -f deploy/v1/operator.yaml + +*注意:重新安装时,建议先卸载再安装* + +公有云和私有云部署 +^^^^^^^^^^^^^^^^^^^^^^ + +在公有云上运行 PaddlePaddle 分布式建议通过选购容器引擎服务的方式,各大云厂商都推出了基于标准 kubernetes 的云产品,然后根据上节中的教程安装使用即可。 + +.. list-table:: + + * - 云厂商 + - 容器引擎 + - 链接 + * - 百度云 + - CCE + - https://cloud.baidu.com/product/cce.html + * - 阿里云 + - ACK + - https://help.aliyun.com/product/85222.html + * - 华为云 + - CCE + - https://www.huaweicloud.com/product/cce.html + + +更为方便的是使用百度提供的全功能AI开发平台 `BML `_ 来使用,详细的使用方式请参考 `BML文档 `_ 。 + +FAQ +^^^^^^^^^^^^^^^^^^^^^^ + +怎么知道分布式启动正确? +~~~~~~~~~~~~~~~~~~~~~~~~ + +典型的启动日志如下所示 + +.. code-block:: + + LAUNCH INFO 2022-05-18 11:53:09,773 ----------- Configuration ---------------------- + LAUNCH INFO 2022-05-18 11:53:09,773 devices: 6,7 + LAUNCH INFO 2022-05-18 11:53:09,773 elastic_level: -1 + LAUNCH INFO 2022-05-18 11:53:09,773 elastic_timeout: 30 + LAUNCH INFO 2022-05-18 11:53:09,773 gloo_port: 6767 + LAUNCH INFO 2022-05-18 11:53:09,773 host: None + LAUNCH INFO 2022-05-18 11:53:09,773 job_id: default + LAUNCH INFO 2022-05-18 11:53:09,773 legacy: False + LAUNCH INFO 2022-05-18 11:53:09,773 log_dir: log + LAUNCH INFO 2022-05-18 11:53:09,773 log_level: INFO + LAUNCH INFO 2022-05-18 11:53:09,774 master: None + LAUNCH INFO 2022-05-18 11:53:09,774 max_restart: 3 + LAUNCH INFO 2022-05-18 11:53:09,774 nnodes: 1 + LAUNCH INFO 2022-05-18 11:53:09,774 nproc_per_node: None + LAUNCH INFO 2022-05-18 11:53:09,774 rank: -1 + LAUNCH INFO 2022-05-18 11:53:09,774 run_mode: collective + LAUNCH INFO 2022-05-18 11:53:09,774 server_num: None + LAUNCH INFO 2022-05-18 11:53:09,774 servers: + LAUNCH INFO 2022-05-18 11:53:09,774 trainer_num: None + LAUNCH INFO 2022-05-18 11:53:09,774 trainers: + LAUNCH INFO 2022-05-18 11:53:09,774 training_script: demo.py + LAUNCH INFO 2022-05-18 11:53:09,774 training_script_args: [] + LAUNCH INFO 2022-05-18 11:53:09,774 with_gloo: 0 + LAUNCH INFO 2022-05-18 11:53:09,774 -------------------------------------------------- + LAUNCH INFO 2022-05-18 11:53:09,783 Job: default, mode collective, replicas 1[1:1], elastic False + LAUNCH INFO 2022-05-18 11:53:09,784 Run Pod: gistdo, replicas 2, status ready + LAUNCH INFO 2022-05-18 11:53:09,806 Watching Pod: gistdo, replicas 2, status running + + +可以通过如下信息确认符合预期: + +* 检查 launch 参数是否生效, 参考 launch API 文档设置各个参数 + +* Job 默认为 default,当环境共用时,为避免冲突,请设置单独的 job_id 参数以区别 + +* Job replicas 对应节点数,3[2:4] 表示当前 3 节点,允许最少 2 节点,最多 4 节点,非弹性任务三者一致 + +* Pod 为逻辑节点,可以在一个物理节点上部署多个逻辑节点模拟分布式,Pod name 为 hash,和日志对应 + +* Pod replicas 即节点上的进程数,在 GPU 训练时,一张卡对应一个进程 + +* 当 launch 日志显示 status running 即表示分布式运行已正确启动,后续默认输出 0 号进程的日志 + + +GPU 分布式不生效? 节点数不对? +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +在 GPU 训练时,一张卡对应一个进程, 每个节点(Pod)分配到的卡数即 Pod replicas,确认显示的数量是否符合预期,如果不符合预期请检查遗下设置: + +* 首先使用环境中使用 nvidia-smi 命令查看环境中的卡是否正常 + +* 检查 CUDA_VISIBLE_DEVICES 设置,卡必须可见才可用 + +* 检查 --devices 设置,该设置为卡号的绝对 index + +当检查设置无误后可通过设置 --log_level 打印更多日志以排查,当任务启动后,可以查看日志文件查看节点 ip 信息,然后检查机器连通性。 + + +为什么弹性不生效? +~~~~~~~~~~~~~~~~~~~~~~~~ + +弹性使用需要满足以下条件: + +* 使用 etcd 作为 master + +* 任务需要使用唯一 id,即设置 job_id + +* 设置 nnodes 需要设置范围,例如 2:4 + +* 检查超时设置是否过长 + diff --git a/docs/guides/06_distributed_training/index_cn.rst b/docs/guides/06_distributed_training/index_cn.rst index 3a3c0841dc2..1506e8053e7 100644 --- a/docs/guides/06_distributed_training/index_cn.rst +++ b/docs/guides/06_distributed_training/index_cn.rst @@ -4,6 +4,7 @@ 您可以通过以下内容,了解飞桨分布式训练的特性和使用指南: +- `环境部署 <./deployment_cn.html>`_ : 部署环境以使用飞桨框架进行分布式训练。 - `分布式训练快速开始 <./cluster_quick_start_cn.html>`_ : 使用飞桨框架快速开始分布式训练。 - `快速开始-参数服务器 <./cluster_quick_start_ps_cn.html>`_ : 使用飞桨参数服务器快速开始分布式训练。 - `使用FleetAPI进行分布式训练 <./fleet_api_howto_cn.html>`_ : 使用飞桨框架FleetAPI完成分布式训练。 @@ -11,5 +12,6 @@ .. toctree:: :hidden: + deployment.rst cluster_quick_start_cn.rst fleet_api_howto_cn.rst From 08285689077db8f6a163d14e60420f0027e1a41d Mon Sep 17 00:00:00 2001 From: kuizhiqing Date: Mon, 23 May 2022 20:31:39 +0800 Subject: [PATCH 006/101] fix deployment link (#4847) --- .../{deployment.rst => deployment_cn.rst} | 0 docs/guides/06_distributed_training/index_cn.rst | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) rename docs/guides/06_distributed_training/{deployment.rst => deployment_cn.rst} (100%) diff --git a/docs/guides/06_distributed_training/deployment.rst b/docs/guides/06_distributed_training/deployment_cn.rst similarity index 100% rename from docs/guides/06_distributed_training/deployment.rst rename to docs/guides/06_distributed_training/deployment_cn.rst diff --git a/docs/guides/06_distributed_training/index_cn.rst b/docs/guides/06_distributed_training/index_cn.rst index 1506e8053e7..f7986052cc6 100644 --- a/docs/guides/06_distributed_training/index_cn.rst +++ b/docs/guides/06_distributed_training/index_cn.rst @@ -12,6 +12,6 @@ .. toctree:: :hidden: - deployment.rst + deployment_cn.rst cluster_quick_start_cn.rst fleet_api_howto_cn.rst From 923d0dc161e54b424b8b163b6ff72c73ef10a43f Mon Sep 17 00:00:00 2001 From: Chen Long <1300851984@qq.com> Date: Tue, 24 May 2022 13:34:50 +0800 Subject: [PATCH 007/101] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E8=8B=B1=E6=96=87?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E7=BC=96=E8=AF=91=E9=97=AE=E9=A2=98=20(#4851?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/guides/06_distributed_training/cluster_quick_start_cn.rst | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/guides/06_distributed_training/cluster_quick_start_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_cn.rst index f7fb7804797..77d505cd330 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_cn.rst @@ -5,9 +5,8 @@ 一、快速开始-数据并行 ------------------------------- -.. include:: cluster_quick_start_collective_cn.rst + 二、ParameterServer训练快速开始 ------------------------------- -.. include:: cluster_quick_start_ps_cn.rst \ No newline at end of file From 7a27816a986bdf2e468cce1e1104c3a5e246b788 Mon Sep 17 00:00:00 2001 From: wangguanqun Date: Wed, 25 May 2022 11:44:26 +0800 Subject: [PATCH 008/101] ps quick start (#4848) * add ps quick start * dataset and contents * update title * reader * update dataset * Update index_cn.rst * Update index_cn.rst Co-authored-by: Chen Long <1300851984@qq.com> --- .../cluster_quick_start_ps_cn.rst | 77 ++++++++++++++++--- .../06_distributed_training/index_cn.rst | 7 +- 2 files changed, 69 insertions(+), 15 deletions(-) diff --git a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst index 9d12f0d34b5..2953330cd8d 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_ps_cn.rst @@ -16,13 +16,13 @@ 因此参数服务器模式对于存储超大规模模型参数的训练场景十分友好,常被用于训练拥有海量稀疏参数的搜索推荐领域模型。 -2.1 任务介绍 +1.1 任务介绍 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 本节将采用推荐领域非常经典的模型wide_and_deep为例,介绍如何使用飞桨分布式完成参数服务器训练任务,本次快速开始的完整示例代码位于 https://github.com/PaddlePaddle/FleetX/tree/develop/examples/wide_and_deep_dataset。 在编写分布式训练程序之前,用户需要确保已经安装PaddlePaddle2.3及以上版本的飞桨开源框架。 -2.2 操作方法 +1.2 操作方法 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 参数服务器训练的基本代码主要包括如下几个部分: @@ -37,7 +37,7 @@ 下面将逐一进行讲解。 -2.2.1 导入依赖 +1.2.1 导入依赖 """""""""""" 导入必要的依赖,例如分布式训练专用的Fleet API(paddle.distributed.fleet)。 @@ -47,7 +47,7 @@ import paddle import paddle.distributed.fleet as fleet -2.2.2 定义分布式模式并初始化分布式训练环境 +1.2.2 定义分布式模式并初始化分布式训练环境 """""""""""" 通过 ``fleet.init()`` 接口,用户可以定义训练相关的环境,注意此环境是用户预先在环境变量中配置好的,包括:训练节点个数,服务节点个数,当前节点的序号,服务节点完整的IP:PORT列表等。 @@ -58,7 +58,8 @@ paddle.enable_static() fleet.init(is_collective=False) -2.2.3 加载模型 +1.2.3 加载模型 +"""""""""""" .. code-block:: python @@ -67,14 +68,66 @@ model = WideDeepModel() model.net(is_train=True) -2.2.4 构建dataset加载数据 +1.2.4 构建dataset加载数据 """""""""""" +由于搜索推荐场景涉及到的训练数据通常较大,为提升训练中的数据读取效率,参数服务器采用InMemoryDataset/QueueDataset进行高性能的IO。 + +InMemoryDataset/QueueDataset所对应的数据处理脚本参考examples/wide_and_deep_dataset/reader.py,与单机DataLoader相比,存在如下区别: + + 1. 继承自 ``fleet.MultiSlotDataGenerator`` 基类。 + 2. 实现基类中的 ``generate_sample()`` 函数,逐行读取数据进行处理(不需要对数据文件进行操作),并返回一个可以迭代的reader方法。 + 3. reader方法需返回一个list,其中的每个元素都是一个元组,元组的第一个元素为特征名(string类型),第二个元素为特征值(list类型) + +一个完整的reader.py伪代码如下: + +.. code-block:: python + + import paddle + # 导入所需要的fleet依赖 + import paddle.distributed.fleet as fleet + + # 需要继承fleet.MultiSlotDataGenerator + class WideDeepDatasetReader(fleet.MultiSlotDataGenerator): + def line_process(self, line): + features = line.rstrip('\n').split('\t') + # 省略数据处理过程,具体可参考单机reader + # 返回值为一个list,其中的每个元素均为一个list,不需要转成np.array格式 + return [dense_feature] + sparse_feature + [label] + + # 实现generate_sample()函数 + # 该方法有一个名为line的参数,只需要逐行处理数据,不需要对数据文件进行操作 + def generate_sample(self, line): + def wd_reader(): + # 按行处理数据 + input_data = self.line_process(line) + + # 构造特征名数组feature_name + feature_name = ["dense_input"] + for idx in categorical_range_: + feature_name.append("C" + str(idx - 13)) + feature_name.append("label") + + # 返回一个list,其中的每个元素都是一个元组 + # 元组的第一个元素为特征名(string类型),第二个元素为特征值(list类型) + yield zip(feature_name, input_data) + + # generate_sample()函数需要返回一个可以迭代的reader方法 + return wd_reader + + if __name__ == "__main__": + my_data_generator = WideDeepDatasetReader() + my_data_generator.run_from_stdin() + +在训练脚本中,构建dataset加载数据: + .. code-block:: python - # 具体数据处理参考examples/wide_and_deep_dataset中reader.py dataset = paddle.distributed.QueueDataset() thread_num = 1 + + # use_var指定网络中的输入数据,pipe_command指定数据处理脚本 + # 要求use_var中输入数据的顺序与数据处理脚本输出的特征顺序一一对应 dataset.init(use_var=model.inputs, pipe_command="python reader.py", batch_size=batch_size, @@ -82,12 +135,14 @@ train_files_list = [os.path.join(train_data_path, x) for x in os.listdir(train_data_path)] + + # set_filelist指定dataset读取的训练文件的列表 dataset.set_filelist(train_files_list) -备注:dataset具体用法参见\ `使用InMemoryDataset/QueueDataset进行训练 `_\。 +备注:dataset更详细用法参见\ `使用InMemoryDataset/QueueDataset进行训练 `_\。 -2.2.5 定义同步训练 Strategy 及 Optimizer +1.2.5 定义同步训练 Strategy 及 Optimizer """""""""""" 在Fleet API中,用户可以使用 ``fleet.DistributedStrategy()`` 接口定义自己想要使用的分布式策略。 @@ -104,7 +159,7 @@ optimizer = fleet.distributed_optimizer(optimizer, dist_strategy) optimizer.minimize(model.loss) -2.2.6 开始训练 +1.2.6 开始训练 """""""""""" 完成模型及训练策略以后,我们就可以开始训练模型了。因为在参数服务器模式下会有不同的角色,所以根据不同节点分配不同的任务。 @@ -138,7 +193,7 @@ 备注:Paddle2.3版本及以后,ParameterServer训练将废弃掉dataloader + exe.run()方式,请切换到dataset + exe.train_from_dataset()方式。 -2.3 运行训练脚本 +1.3 运行训练脚本 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 定义完训练脚本后,我们就可以用 ``fleetrun`` 指令运行分布式任务了。其中 ``server_num`` , ``worker_num`` 分别为服务节点和训练节点的数量。在本例中,服务节点有1个,训练节点有2个。 diff --git a/docs/guides/06_distributed_training/index_cn.rst b/docs/guides/06_distributed_training/index_cn.rst index f7986052cc6..c769d162dbc 100644 --- a/docs/guides/06_distributed_training/index_cn.rst +++ b/docs/guides/06_distributed_training/index_cn.rst @@ -5,13 +5,12 @@ 您可以通过以下内容,了解飞桨分布式训练的特性和使用指南: - `环境部署 <./deployment_cn.html>`_ : 部署环境以使用飞桨框架进行分布式训练。 -- `分布式训练快速开始 <./cluster_quick_start_cn.html>`_ : 使用飞桨框架快速开始分布式训练。 +- `快速开始-数据并行 <./cluster_quick_start_collective_cn.html>`_ : 使用飞桨数据并行快速开始分布式训练。 - `快速开始-参数服务器 <./cluster_quick_start_ps_cn.html>`_ : 使用飞桨参数服务器快速开始分布式训练。 -- `使用FleetAPI进行分布式训练 <./fleet_api_howto_cn.html>`_ : 使用飞桨框架FleetAPI完成分布式训练。 .. toctree:: :hidden: deployment_cn.rst - cluster_quick_start_cn.rst - fleet_api_howto_cn.rst + cluster_quick_start_collective_cn.rst + cluster_quick_start_ps_cn.rst From bfb648ad7c3a1b0adf584bece723ca6db5fb7dca Mon Sep 17 00:00:00 2001 From: Chen Long <1300851984@qq.com> Date: Wed, 25 May 2022 11:46:01 +0800 Subject: [PATCH 009/101] Update cluster_quick_start_collective_cn.rst (#4853) --- .../cluster_quick_start_collective_cn.rst | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/docs/guides/06_distributed_training/cluster_quick_start_collective_cn.rst b/docs/guides/06_distributed_training/cluster_quick_start_collective_cn.rst index 89c0692fff1..5b0e6b1b439 100644 --- a/docs/guides/06_distributed_training/cluster_quick_start_collective_cn.rst +++ b/docs/guides/06_distributed_training/cluster_quick_start_collective_cn.rst @@ -1,3 +1,8 @@ +.. _cluster_quick_start_collective: + +快速开始-数据并行 +------------------------------------- + 数据并行(data parallelism)是大规模深度学习训练中常用的并行模式,它会在每个进程(设备)中维护完整的模型和参数, 但在每个进程上处理不同的数据。因此,数据并行非常适合单卡已经能够放得下完整的模型和参数,但希望通过并行来增大 全局数据(global batch)大小来提升训练的吞吐量。 From 510fe500d506c6d1a19e5a5b27e0c9cba137ab5c Mon Sep 17 00:00:00 2001 From: Haohongxiang <86215757+haohongxiang@users.noreply.github.com> Date: Thu, 26 May 2022 13:05:24 +0800 Subject: [PATCH 010/101] [Dygraph] Add docs and tutorials of DataParallel (#4813) --- .../data_parallel/img/data_parallel.png | Bin 0 -> 1565683 bytes .../data_parallel/index_cn.rst | 12 + .../data_parallel/principle_and_demo_cn.rst | 220 ++++++++++++++++++ .../06_distributed_training/index_cn.rst | 2 + 4 files changed, 234 insertions(+) create mode 100644 docs/guides/06_distributed_training/data_parallel/img/data_parallel.png create mode 100644 docs/guides/06_distributed_training/data_parallel/index_cn.rst create mode 100644 docs/guides/06_distributed_training/data_parallel/principle_and_demo_cn.rst diff --git a/docs/guides/06_distributed_training/data_parallel/img/data_parallel.png b/docs/guides/06_distributed_training/data_parallel/img/data_parallel.png new file mode 100644 index 0000000000000000000000000000000000000000..fa7557ddbd510d02f486db6797c95bebb5c54c7f GIT binary patch literal 1565683 zcma&O$Iisck|uU%GY|%t^#B8H571il1-)6)6utN4=7O&1y({twMlYk6&|dp_fLZ7* zlsu;!8bB?ef&VWm`$S)$kh^YVFGQ|JAj>_)9dfe1e(Lt-=V+1&AED=2GB@=AqX78 zD4O^?jG^Gn|NDS%Yvk|mF*p6DYx6(d?tS)hPpiM4yBhL?dfe?FLd$5A9{ZjHM*p@s z%XMqOWc@jH|9bQH#D34^Uq_4bY;rJ?_vj4fXZzR2?;-R9R-tIpYE1`lzWJAl-q&lh z9u4`2vO<^~x<$~xYXe%0DR`50)ls&qqZHhtH= z7{>rbzui@{W#amc2$Nru@cfo@A!Ua%vWkX0_k5C*qoM3j)3tv$Lq$J&pbX(F7ktlP zn+#vpB|24@kvp{0`euGO_;E2=U%XB}_3-3kFoW{(@uehFn$Hr}kn(GKMHt|^(sZ3o z?Y=?>Gx!5x;X}u71SJ>dQ^=q867-_%z0a)1?gOu(euA#-Pv_rHnXMb0;XR88tv<(f z+XTM;S*xNNMMEz|FmJ51n11XQKMX93P-Nn;vvbSin&I1+RjOt+tKooVz!qYgi(VIX%lIcd%>nS^ycO3?EFPP@!U& zIFNxasz8;|Fw6dLbbjCh{hd_EX+~51-aK#m&Z>8w<2#PgqD90KhsRSM&CWhHyZVb9+eie{HxJ$5XY0Kj zHYU@%A?qj*ldj*;E4dm{L$o`jtSa+$8vr`L?6B5 zdm)S(=sQD&@O8ooEi=N;MBxl6VwB;rbR)z&Wnt6IgBp-$`yt=?-LBe)8UqQa3?Wu? zE30s~ijBg&74P@t^auWx(KB%fPa_vPx%pT9>G9PF!mrpl2DZ~3qE@QI)M31{`F2 zZhqzq`eXvTF!1RhQ@iwDd{E0@V8?_k*1>RJqYX29h(cH5f|CNGi#@|2PV#`3*w@#F z6^Vr4ly$?y7SO<~qg~a8i1NQHQ?XNT~X=Cl&TP`pEdsP7k?Ao&wk9b;6{$daH}-71*R zet6$oHdZ3>9m- zeo*UCwp~yh^tL1XO4|Nr2<`eTMZWJ2Sdd+AzqBMNmQcXJ@MU>EwS)%qvDiBESh|6s zAQ%UDsn9PX#nY>ncMAog+eSk(_fA*kURIN0l;~&9fK_DaIUg$TG^;@xklAwXinJK@ zQ?r6}xYdn59Fuh4y0y*E2P-v8d>T1`{I#(>@;8>42dSx46ScUkZUJuhOTzvWS}^8X zO$LA~HeG+o*Wo*va|;g`&VF^6^k&fsjwbu$-1A`{WeCyr`Q3N zuA&<0L-+>F;RDBupX`{rjUBH6p!Xu_xgG3Z_lF-+PK|JTIHxph#@c}0nj@w-&uJ+% zu!&!*P8xD5;QJt_i*_(5ro%pXd(A->G_%p-8Ef+ufQA`wg#l$Alj16aU0XXxMpm@v{$1=_s)7E?&3b3-z**np!4R zs&l|gmd|0#N)*?cpDW}5$pWak@v(T zE)%w6;Es7M;c!E(AH8Ikk2$XEGSsUfO}xHNW8r2cuqjPt)ws|R8A3r-^AbQ29;&NDS&BEifo9^xcjaNHw8=SCk zm#uKnlk|;{Z8H0sYi@;Ho-WAo#f#4#6#`&BXzAsLwjb}SlU!t%E`E>wR{SP@8(ajQ z{Y%f3PeT~Emy19kEpjiLgEVBR0LSB#1;M(qP(Z)ib}&9-@hZ;n`Vv9TUv8?+nM&H3 z05csv3(iq!Xbd47_w`6N!FbyQtzRGlSLXoMSOGqQn>w`$&mO3gA5X&Dch+Em$M@UrShphQUV7)WsWm3oTtOOu!Q|~^QMp&@ zeG!t0p)K^kbNG!6MYOBM^>p!-sze-rY`+XUTwgGo{_>Ecp&}-b3!x(o`hh|03(CMK zfzxTuyTG{vc>K-DMXk}ULaELZ&df9{VOaI(;l}JI&TX3WXt*rQ6lkZ>eZ#_*d* zC+0BQ*qo330RPu4Z7_oC_nb;bHdK;8+a-PNyT(1vT44_;M4_!iH{<5OZh?!Mrw(;W z6u2l94#qfQw7^JU*t5saL`dGrbC$>1dL;awrN0>j*`8Kd*D%k@j$ zOWw{Q^!1Ii&%Y98ehZp`k4q08|4U}p>+fVT-5_MZ7Y(VpQhWZ)Z)f3Qr>C$o{L; zF^J&&faWMcV|xI*mi0c8rVqj24*h3j9iQY;Z!1icOX_i4;pMKh5I zS8NXy?h1hWiNq6JDL@_YuiX>f$`@WRA-_Lb={o>U9>7mbjon0Ni&vmU+~L&BO@6eT zF%>6HU)5}77L$_)g~zCVz3$%Z{c8R>U=9lmU}lBs*nYUY%sSx3VGQwbmeHwb;_OjU zhxt@#KIk}r(SwTBx{IA|4?b$=iOVlVj}y=hwO~=}N4-Q&Bn}=to)TB(>x~?^hUlm8 zJOQHJgAD|lz2KNSEB0gNUwD08p#BQyBbDBJ7(u>eqe+i~v+LI)XWlFSS1a}6=tkj5 zfN#z3Mb3rFG0h0s6qd;i zuM@UlYu40WV>L&Aun3BZ*YE((46sljSG;-lPxp;@b7PzGGljLGa<#{cM_IHeO|hyG z>6Ts~bv>m799YE>Y{AZq zu*x5w@|5_AzyP3+6OHBPkwH^MEynosY7SGCfZG))yZmz={aw&y%2%>l;%o~$Jy+~g z-{bg>>9e4#b0Z%$RJSNPhGz;{6y=pK8!*VQ4?Q3tj2TM0)Ty#*Lf+-+eh*{v@=m0$ zahG^~4p9w+D>MNdSvF-Z-oDpCq{EoI3-^8AA`wV4FC;Y%NvE*F&u(qUmo-+!mN4E`l zD}1rwke@{BfqX`&n*c_yN4ub>h4CFKd=F*$ZZ1;KNzXp~=Z4F0JA9Z{sWB;>nI7nE z@6jEb7z~F7R|6KM)1wB8allUDhbKhPI4#Jja@yqggG=oTyeWW&}qJX<$?kEL%C;U1<5c)N2+>)@L z)c&>TqZ1WQy?(TFO1v-WPTQ7Ldawb;%)nyYKewxfc%w{lBYtngt#!U9R(EPXm3JF5 zqCCX(4R)ZkSTi49Iuy9vHEBn(GnZ03uiI`QVkNEKl^@lsLjgPVdoHC6*ku8VPT0xv z5Vu=%Hv@P+)Ino&0Ynq9g=xT&IFT|N1?dg6^3j5tT|sgrz3LNDre!;dGfS`rLyH9; zf=LiUy*16)S(156#MT|?mflSo^kFfJ0pWbZC^84|4ro% zcGX|X9nNx~+=cDMBQKp134faJ*z4wulxw*hV}fq*X;Vcg+L@ch2QSSLPtsiTt2^K& ziZ~?A`4} z+oWMtjlRond4mVu_0cev{`Bwa*0zYryxMlbEPaakP^l0cJ%!`t2yVzf;@Jd2U%Fv7WCD0Onn& z$b*!6oRT)3fA49jje>dtVUz>FQ>8oWS-`kWI0N-W(X!@x43TzladFy-Jr(_c+S!zw z&VG5$TE1(vo~HGUm)4X;sW?C8_!{*DqJqJW#drfpA@#}P8-bg9q9$WbG?DRVQQ}0On^?zU!*Y>iL{Lhqv64`*`LFIr;CsE>UaPHp9IUV zdLIvF>^u213?aix=VnBFkwpBQW@;pO-je9j+!;ogtTF7tjZp1xm+65I`i3E^!OPaoKZ8Jha4W_Q-84~8w6Zl(6zbR>||d+Sh2s@W%Q~aqGF-cl9?GTS3{wq z>srJ0-I&w9pVuy@Dnf$ZCu>$oK4+^Gn>Q6)7VgikC?qzar15bPemw z33+}}NJ7Fi^2tYZ5IlH%1IiLKV+n~e%K-nVXx!gN9>O8y-aEJ!aQz$FM_Vu4#m z9WwXCk9GIZM-cXhIc2P*@aAe}zVyT50Du<8Whm0w|L6(qz=3K&BA?7sF&<}t3V_Z3 zdXI<;>kkGch$bboR8W=R(d08h$|AiycGEQqyC ztsweS^NqHgjMW z80BkEpIOT%Ohk3-9t0s0Yz4}-?#>|KQ@}CsW<1;=Hg`GJ_MtH3S6P%$j#jZx7Kn)T z^5>8|Yvqh7UQCn!DyjDPH%tMRihRP8&SU#(Ffn3mCm7P(ZK)w+7kbF}{?iA^y;h=T zhDCczCt|LoPZ198z#7E8&MzST1Sxve{qxWvzPyz_+Y3)u4ioJSa1KE(~iF zBKJgdNu{>vIWQ2R0e!J{;bAYBXUd{Uoa*2jbY=R%P%|d3>(lDPFYS}j{;agDNQ2}Q z<93(M2Up-Rja%`f#|E z-biE;O?(li)Y&A(av7g_lI1;b`^{kMhqed(_ztX$prtw5-J`1T(*UKX3t5CR%SV%T z6&Tvzt`7Y$^g`UJy|_>}USY(bORqdD6#904m3zRLyvsLluQ!2-Wluy5N_FBc=L zB*-9y4;LNh8z}kuca7M0I*QuR>g|n6xQ@uuGIf)i9+Xm3!?*}_)({>7^ACT=2;I$G z_hN`4&BspVUoq-7+fU+<#ZN{0?WExg!2hu0OeRH1=JaL)oD-KeVl$b>41iWJ&P=Va znppTYmMk(BmCjN_rz0dgO#rW00}m$Hd)bncaZMEf0u-!u0-I7wz_g_NF^IcKKUGXf zX5zVoGmr@h5K;(2=bYMkn`k^le&}}YC|iP1fjKp3)F z{LEG$(NEkaG6whu*B#cI^&1dbRS+y^Rpo=`tisCaDoZZ#sVV>52dx*@*tyLEF9$uNiX) z0)w7Z1Dz!(egCO_fD|oaAbmlozv3uhIQOS$I~(h~)13p&q&gWkE>{jn+gxS1JH~*g z*Fpq@^=l-|sU^8fnRNMZ_4~p(8Q>*0K$U$I;p9x^SO@8%+eBKwovMCVdTO_qNvLUe zq#oPOvu0*Swyi1LO7xJ2u=ewb`Rw~T36&W}eI;E(BO>MEJb-rlwrW-CI3~RQF@C)G zpZHOBQ?Q+v74chB?ijaG=y{9aP@qx|Yz!%i(5xBOxZj5yzcTVPI+T+%Re3;u06iYn zRvO%}|7G0wq1dN|!D|MhjNjQcP>pEc8PlP4KRje3Z~&t0Q{+ZWgqD{a&CmK885ss+ zlvwdrM6MM4MrAYBzG;->p>q~pW}7# zf^tHA;neVIrwazujZr9Ro`Vd9M=DfmFNG0niS|M@Hcx=HN^7byI4OVkkhL|;@wL%i zIl=IYL^$p3vH(5+>hn0Fgdw@kE*tlj(9JQe#uk=qD5>Y(4!mBKLeE&^;tbH9N&-A! zhvO@Tz-3~mGTZxTh+sQ37@qQnuR^1|8JN}V!@5PIE>~j0huYRC4;~hU&*G|3Iu>y% zx?hO=o+F8$dzI`p`d!|Kd~tEOH2d4EOcjmJ35e)K?LnGRc%$@$6bZmm);uftK0gFX zmsoUZ;kTqiRWw15&AWSm(;%q84gJ%5sn+_u&>M{%4`9#kh~ul%3iNG#GY)tqBBkw1 zfkiOwHT83nf47%{_Uy@Hw&WR)=WH)raJEC8W zBeDDpB#JuvP*rpt7(XnX`#mb2KLC*Bm@~�w$6Hh|5Tj#qgUS-3&kH987dO{DNSl zRVn<#C7eWjhW`9eZhHA>{kA`j(<^mH$lNwg6k@jKBs)_Qwvm2=JDrc5%BnM^K@BVW ztluVY{Or(gWEys=fahMdFm3pj3@qf{*HLh`No@1*+x(zqwj%pjzfKT?0QoALZHR#r zYc~k(53spU3re|t(0$klR$epju3dr9LUAx)*=1RfRTlYr%iJ?X-rlmP?39IFS>S3` zNQ^6YJROFq0?584`c#HG^>G+p{~-wX0p{VqJhn!oVWFg z5oSK+{Eyr3%~jd2lCM`9(_li@Xz}c;wUzDrRSu2kU>19%g5-OOKa_!*t=iee9^ zTP*D5Y_q3F;}uC2s@V&JyKd;@g}3`?$54@hD=exi<}NVb&Cy+UJAjxJBF>Z!vLC?d z_JGfyq-{AI6e|cGYBko;hm*ALmQ8wU;{8W@XwI>C zXu%vfS`72Ca*l(>#m*7pNHR(0x7MQge-{b#uvjCK z#6o0(CpA=*4T$?{Gm100WWTk!^^WUEI42>L$Ck1B00Xi3UH?~~|sG84j&5o_iH0eEN8PB3<&lFE;DtcruP2|7I~ zmnu2U*MsRncjE`xMSCBuC4Vx&wA+LNSuit(Z-R4UZG^@=I5HZ$Q)({|U>9RI?)Q4_ zV1?u9Q`;Buo758!5bkUh2*5U^SBlP7w(wa zs4$OxKr{>VN2EmsTud+mk^>#sm;8-V6q;8k&942YiW z`uJq&G_j{i^#}sgl>p5z(!^5}mfl5KpWqqMv^s(TtJo_syn{+i&3e}ehcqF=15rT8 z6YY5JVHn|jVP`6M9{~x2(a12W>BeDU>h17>e)=OaBEy&=e@LIi`|gFSzX{sWG*J^0zT zR9n8(leXhMke~%OL+OL@n1+KNjQrA$Lc(vuqtTa~#yrT4gw(oOesPpQFmtaN4awBU zK4+f(bq`%CZ^%KXffU`?*riA)lMyx_vbBo_HSe;U%4M|YAoIeU*Omj;0!Uji?;%1L zCs_uPOKaajV?PvzGU&$UnU-$g;-iLiL0>>1A~>a3pz3{H77fgtAOdQ^$Cg%YL^Dmu`Ha~I-cLD+V;Rtl=}*~<2S8CO2BvK@q;-H07#qfPwdi}qV=g6|S>u}$ zE8$8Yk`N(G-ESVU*v_4&8te`CQAxehb=CpRi|bOJgA`c)0O<^9zf@$&md!i>)!`-^ zh~$CCLDW{+C{Gl2`$Qctd3aeQxL6#H)wyRtVxFMLU^Z+B5I`gEe{39(iwYGYZY)g? z2k}H426*{UtqsPM{Zx>=>Y%w0$d5Wb9WZdu>s8VIZ?~j{aDOqO1m&oOk~DTW-9Qv; z=_Jq+>|tF6^KM+x2rt)4yv#$&u=X#69H<5DlA^%SW&sT(tg@=~P`rg)UL#(^NRrQC~SRzTzAdaPhUK={)n!s^L;C!sP-r7i*lR7u;CY7Zs`urE2Gx?jS0R6hmQV z%y9yA@THiR@OR!#*eeBAP^h4sWy&qVon7&rZL55e-k_a6+{rF}5ym;MQ!SuJrwsH4 z*mUQh@7s+onx)=SgMUv3ATj}((Cu2DL@kp5X{PsEs{su8|EXYMn96_bYub#!dixjU z8lYJK#OQNEsWgalQ53Dr7>SPSx^lZ-Q6_!AvOOigj;R>o=3ymuagg`5`PKOIrtI|qM6fRf?Omd9T@*lrN!a>>y$BqA+{YXNe6#rd9kKz7 z&h@lvkSf^wC!g67bB_?I;UN8U>?^`NRq$;a1o>t zX!;HK&%*iY1n~atubhv8$`Q^;v#vWk!EwDF=?nd$(v#-LdydWYcWz4bB9yXrpwACX zmk?p3iVXn!!6kbnai_N+V*vQ9zRXTqT|tv|NN4SfdcpTifiOt|O&vGF6Hg|e>szkB zQXV0yhoTjROcL6O_LaUDcBASz2ORpkh@}IAcs5h}-3#jN8%|plI0b3EK&2@O`t7+3 zQGFBw9|0%D9y6vNz(4?BpQ^A#@JK?9_FroO)UwTCzxMl1RvcPC@7cyWJqj;JNuw!y z)2H4U3_=_P?cmV|pFa;@)Uo)`@49Mh=dmE$5fsp1-4kOt0~agMZar3q(c@NGWn43} zR}@|&sv66&NLu2=@a+%9KY13n*YMJDsWs8S)WJ@BkaoC3-*t{=y!aygNEXq2gA{~! z_`DioCkt231SGnG(p5-G7Z_Rh6)&JV1?(l35%+@UJ1s!U+Q0jy<{mD$o8Nak*8_C1 zY6PX$1^85=#@z2TsJD7C45aOX$HAxgi#8}|$bu3UK7NdGj!&xhk7T?H;^husCtirC zYAuNGH$<6Z-sI0~{~736mj1V$@wsaD>UrcHGE_ePyh80_qYAb@oWM;0$R6pg8RvyJ zKAK_u0~T3uWe_McRdScFQjK+xm%TuPAOjMG=%G)ZVmgxen*CdrYR;}-5~S=3OtYt1 zWS=YVhnqVMZeCHT$q=(7PbhQlBAr;tqX*Q!Jewnt0rMl1Fy$pYgAp0cY$V5{O)MF! zY32%&E&`u4>U8Efe56qOGrcy(LYcR%XCmyW4!$s?U=;@@kfkyw)JEk=14>^BV$HB3 zu*z*wvG2R3%B33GdmYC*X|Egx;tztoA2Cuhb+SKk0E<^(@hwB;a$`L43o7dI0 zfIiUebqT>A2!`s@HDL7keE|8^0=hqYPg&>?3J5w*XOBRsK3M#GXpe%jiAy(v%#;N1@{2*>%yFG)3f>NooNeYkX- z1(1iusWnN!%)}`vJj6X>s`c=z@(y#+@H>o95k84~Z|L3rArJl-&SbECFAnY*q#!Nz zU^@9n6_%jD$8BC?p1DAHh0P`J-GbS3td6xN8INw$OyvS+H|;|NLm2Gk+E=}F4$MOM zU*e5wBWTW{N<5Lvo8s>iIi6z%V{G~sBeG*(21n^2lpg>=7c3=2`lX{scD2nHjX~Mc zuacrT)H3I_40vx>^;@l98@lMDEN<9Hg_VSQDP#8CLxDs~Xn%y?pO<)hK8QL~DF<2P2y%D8<$3kZp=#~!$5!PRCfXRDJjH?h3j2VdmQF2W z`zNIxeyL-co`tk4+=s3jTd1cz=Aw;fnRv$yS%$)IoYh-j&0$U2Lj(K?w#KjJu^@tr8jFPkdV2SzO4BiB~20!K?#NWyj}T z;d9Vr#@j2l{YjOc&SubeObyl6f}RlAOhVQ`uZSDYNibi_m8j6q7km3wzWMgzf~`ZY zr1^Ltk5u$QI*`B-_+x$z__uv&l~*6}>W1Y6H0tx)B})e-I@9&pQ&KHKV;z*|C4I?k zF@c6j^upr;;z%GNqN8bGu}ztI=1YV6=JLh;1%#yDKv7d9-LFvQA^{X9@LPIxIwf@W zv=PKiuCs2nNBeen1`#@ctj8Y3doOKJYFntI!lw`TN!&6fxj zPP2E_rvRn%tPOre4pQUe%#s{sw;4;=0r~3KXRvWFEA{8*qNx(@ZP?pz5lPb0r+0-c zf5t()Wg3f}nSLVAE{%f6f|MWxTPQ@mMfo!ze^$qxy z-}Tr82_2VxU6{a5T^nhk(ASEuD_l@l^H0=eCx=U=2^Io52sw)eCFoWNu2m6qtU7Rh zl0mWq$KV1vQAQuyG;a`H=u13;$_dJ}jt!Udv?b;mbh&?TD|1;NP;H6%wsvFy2KFNg$C&KcZXH1riAzg6nT^s!P@lNZ3W!+_>6jhA*I=NfU-! z?iYOIjQOQLKQ9ysh&xA&@EJ~uL)!4=>8T7y=~;M#6RH_%-m1#~)I z>e3|+9Ym*wuf~gMkjw0!nFu@|ay&;~@fYNoNTmUdJ3sm9jFT>?&Qu@c`>x`v19^}5 zd~?5+NP;X&yk3CF{b`ccNiD^piGs4@x)#~_@G$h37a-KL1GZyJSjY3QV=Ci9+VRnn z;;seV%~_uC=)t(g?f&>n)WsiH9Ch`e5UhL!7}SL;c|co;OiAM%pE(I~B0+ZQ$2yzL zs42x77Q&7@m$GA);(5LlPlI+nYyycjia$%1txh_26H6~DhPfbn)uwu>DeMnwnOKa_ zs<$}j)L!iO9c??a+SkFS}oc=F7;pj5SVKNn2IJB}%Wb+H=948|qfap?D;mcV4( zr2Y1(cRru!Pb1Lz>NSo1JcKk~;~9ruccuQdVj6;)S>R=M7bO06RB1pc1tba&*r#um z9#_rBiVXTDco3Pi3y^?g_+eGD&_c*5$c}_)hV-adJQI-5Fn$V~wi}+LLOz3TQ^|r& zW_VEgr`-=IntgTo?@41cawoH`LE=_L__+Gr+7Ys#IyqY25ZSYjN~#At2@FuG6(rwJK&ep`P~E8Nhc`P)sTh;B z>Fpc1`bC+oW6gIUgd49#PP_3~zJ$f%gETgC&LUH1c5e9@`ZUnfpH@fUuvxu8_wK)2 zX0Jkkr~Q>&ZOly!XI#oRvMnJP6)L%^$&-v?^Ffc)SA~rn)LS}uXqPy$@<7_yMrQ6O z=LF~RUh`mX5q*{41;4Ye_<8-$&Tm>!;f}W;?}(0;U-oNSKxE5?3nyJz8TwF#AWE41 z;uhIo#nQua;o9am-9<1*!6m_6LvCT2@h9ifV0(I!n_9QR9eytT zfkwYR0!^jzw1p73Dp0e6pkkl+1}M0l6J8f}phkcxFDUPJ(M(Xca|ZXbi=c9z$aivN zd5MMNhUBFKRIH{hx)h9wi4Vvf6Zzo9=Hy7Y6j0C8lRwboW#GXq2#+)ZE6FeRhD*Va ztt6G&`v-Hw3G?J(mAFO^CMMqQ-=(cfOuqUq_h!0I)_;wX=>iJoErZaInKz$pv*73H*3 zcM??c8BzAo6-a-dtsnVntAPO%D@YW!92f%pXOkG{Cm0$)59^h9_{ss`8n-+DV#pt1 zu+vvZoX{82g0ezzh~E#g#n8}A zjbU@#V;*KBd3N=1O2Ltt+*vIhe@=Qp3cNXnlZCkl@lgl{id#8$CV2FkZZU_Odpb3OSfG?%2Vyf!JVr|Nk0k)0-+`K z1IWb+NAe@D=pmuG#d{!5qz#VBAb7?60OwfJP3Aug zNgsV3{p4yS`*UQweUGo25J42J{ZkVco!cynqKY76&5dc^&EEydK$y>0L>Cp#B3Ua$ z<->ihm>(V$ld2VXU#;!189zF)EI^9hevEB5k>Y3WN;*w%kFf<-r#X_jMbqyGT;>`C z{(j10d-O-yQlxpneq_ORyljEDCl2CvH@ijqVFJ%+xrMSRLU8M3EJqZCkXI9vyELN$#kF30 zW<*hYWkQwP-vF{zZQF!{-(Hc0wWJ$o2T?6{-zR@>K*7e3X_VX*_|ooUNKKsdGKVxx z+*pf0eKnl%u5FISMvKNldd^E>>w+wl@PQ^ARD6~oR{|Oy78D|)2mK1c{sxT30`QUu zNb0eZOx@C#kS03tgSE4L>iZxlg*X_3?V8A~QV^a+ z1rn=T76jVh?#wSE(77Kd6yOUpli1U0nOwd+kbAH3E3yuU0U zpo!IBub2O6U>Aj-r#oKldjYQkyoCg(-NhhSuB*n^|fN)Y4+=fC?;8sZXSy<_G4gLvL zn!!KsI5`p&uA5)+r%VPzP&be(cB$%CudC|1vQB9v3$TYDg#y2h@C&||0_2E&eehw8 zD_~)9Kq0ZO!jXPf^Zzh*WlgIBN%j{_1pD$RARwZGA}B8ttRe!kFaG*D^>t57Pd|0U zcfBqw1yp5aWu9}AfA`Gcsqj0_*1m?YdG7rXZ?^s%tqM1U%|%*(B`OEcPD9d zkh~ZE{s7n*W@=@NqsVik;q$f* z3k^apYz*cJCq5xT`-IR7LdL2^0t!fQyY zCRe#%^^u)fMU-`NtlvxRDuvI9QOI)RwAri*rXNoAQTc0nndoNXL^*GtSw;@bnLS(t zEg5=!dN|6StOdPxVur{0u;VKsw97X3`p-MziVJmYE-T%GG zVUlr{ue0sF8AU0SznHaF`PZh9<#zcKH%I+?GMP1139t^ z>%2Z_kSO+33wZ(DA6LuS(BK3eB=~S;cL@V=G_Fz9Q1-a+YiTpXy-VX}9z69d?o)MKL`+j8hK#6SH* zn)BE?XqdcNo(Xxh_&(1I;^%>>wTwIQS~|5;rUUJ$#eJkoBbPpz_jiQ96wT$&tk^BH zzvT}1lN(;#4+fbewxUw*;u_K4IsGj?KRMk_b{%2<%XQ`U+p3^17Mw2B1#FYRAPqkz z#-46%`{qk;+Eq#BQzyf_N&o3oPly&cCREC>@p~h!CvD-LCc-#)bGSCU6n!2xz1$rt z7Kmk^#LO-&3k{=7Rr+}jq^MF~=p}v3c&Gixsmv$ijF5An)rMvenOSgfp3jI)#-9t#jJ_W5^{Psk zlU=EMDDLg_YY*;5SArQNTnRR`N1yJ%?)?rA5Laj2vQONQVA&r+_UWE0zh*}v9R1po zTV1>}5`Xu!x^$@FrMOoOCsLVXARSMf}?R>cbV!_&L z@%Yw5bm)Wj^7zEJSF^=$=mA>rsjja0GI|xlTEBzi%a1^#-OIwfVl|ouqg&)xnrx6# zXl`0cBK@!Po!;y5NRQ8ccN`nD+nBVT``t@_1Hg?Y~s={tI?@FNe>?xvA%i& zO4DaTP{z9yJ-i<~#4n!OQ>6o?Juh@1^Kq_HKl4J%hm)UGy}r~tw^zEUA2oj%e!ubl zeagw+M>DD}$PytaDu8?J=OBp-E*tRThe3CzEK}$xgmY2SMq{XpSgExBB;0f3P7RP{x5i zL1gZqzl^n_p~uD7*?$6=qX#2aQQjA(YIif{zSAPkpJLwcJB4X?_Y=uc($pVA!uTCj zzNrF8jdVuwkN44}3aRhL)XM~BC+rxz1!YPv6;IP|j~84+Al~-J`?Y8efZ4iC&iToc z4?q3m=|stOv%CAF$hGUJtbvYrH;4G0f0=jb8FewkD+g#f~0RhOUpBxB^;&BM(&+{5nnJqb!4xOV;A12ix7>+=2jb)HLX zQ%MQ+ZhlWOxIUYAUIr28e2~wjBRN>a3(ZmWexG-NdQbE8w2rn8>3)c1)w zhnmH(U!eupksHEdtt)iV*p-YQq?(nM(_3gC4b`0=*DdT)?vmEu=o@_`&3F!vmk=I~ z2q(nha!(%l2yD#*3P^}t3S;Sz6{sZ8Bw1sl$rL!48_V3 zYxwNSvmAdnsItC%#d&{_mfdy$I>C8xzKl_#N@d+=g#o^94U}8Ctb=#Cf35v)O>@2g z3eY9j2si=pCf?4(LvJFv-j__*FJ5&J*m!+KmK)VjaTrA`v~SED57()CNsQ)ufy{7; zzjoy-=_DMfKejaei-sb6oqMske>P@ZmUbkmsMGDms4-dlBHJ)H>U>&W%q7m8ZduAY zd{dFnMB6Y-rMd{k;WJc|srzA?A8y+whXuG$z`ke@4)pJ&BZUZE6jc;w)VVA|jG2(> z_Q(9TXg4w$(*a%E@8evoVcONfPV1q-hw-U63R7ub+zMVB(meen-c0p1t4fCT$!WX4 z+YIot6%A?}aYg|H%!{ZJx9H1z{$zCLCE@wA2lrXwjzy(W>7{oN%wfAiXeNyE_b^q8 z@1;K>W`eHcpE8+il~%@#uWPm_%7|$Xlt=m(Lp%V@1c7*(m8_de;jj(A6ax2yH6l8EA= z-`j@*qQ1h*3R$bB7~VZfoIyqR4_qB|L805fi}EjXp4%{cf^({Ip-Q-%TF`9h#cFR% zC0q|2y5Ih6C8~#hZd$V3!qS8i{U)@s6GZs8;d**<&bjxmGrqMFoR+0I^{?O+h3Az#t=(|DmIp=PDjrInTL&CuE}lg0 zt;TP;Fs=5mKsO--CHww$?%w8pb-@G}=4xpX4># z?q`uBV#Jc;KK*G*%u^PnjH{(w_6+kbW2g9`RUu4_Znb$}DvMt)!q0hUD$MFaJy)vW zO|O+lkLn?hkOloC!o~<(MkgbFjYwo%iK%_`xyRu|wTI~L1K9YMjD^ss1@q9JxZV?x zANA3@mA-kkESVe@C<6ayn7jLit~>rpXq9#+$L`y)fYD|CpQF03qG5caBU0YKA@Arh zmIr1J!C;&eUUYj#Lm@xM23q=FzE@~djF;EVzKz#-e+q&c2hr!&s_JW884G|%A8~fC z-)CxUHt7$JlepwmP4srkA?GwS?g4WY?o_pFQ1eIdO}IaYF(`?U)Y zfkC$DTrPC}CFGKyS7u_4vja?`|7>97Z^Du zC4Cyv)<)k``L2;_n@m9p0(k@d2!+aS7>BdpeAJVcO_mrwX2&V%Ee-T>BRhK*f2qG) z9uARt-q)K1FJ!H3{$M#^h}Yu}v*&T%6HA>efEq5;0ztzZi zNVjE|JeKwke<%)_Lwgy0eB!J~@c_td@j!cEJSnlW$Qn$C!eeR5%XSvu%fo|;5MU)u zeC2i8uFdn2v(O-^9*~bXv-rWh-hcG>>TkIk#Hpol%NyoQSr%%9@0@>kf_%elt~9*+ z9*XMpc#oUCW>>6z_K~q&p{FNUvQ?dNtPNbf(@6rgQ8-Fe)&d#?Y~SS2O+xS3u|7Zz zxS^c-b!jJMf;NC5YU87CKk{%}(nGjTfy<<$Sw1}Lt4Wt|`d*icRfOZCpH^F;ipH>- z@${p-ky|VE%~Nor`of+LR_ZqGU5=g;7ue|Ozr|gDFZ*MhQ{b-9HvEHOFVtF$l-K<0w4!4+t@-DpVZ$ zhwlExjIeyj87>z5dZKeO#xB8*c>dOQcq07UEw(o{o!w?cLhtaxc@P${NWX#f!l~uX zXE-It{Cda@sxpA8Itl8{GgkiT{k&HH-kcT=r@83|B!rgRgll;$1RL z^zfx#*QK=X!U(AZ9gL=78OuuM!tuR`{E#dFn8;i(=(5(@CIA>}j}|zGJY$)Av(Il2 z$@# zTo(DaE-cP!ci#O&Cszc{!Oa~8Ie7&QmJW}-w(h{7^n--;1nBX=J5jnGv_YOd5RYuM z_VbRoEGp(YdkoqROxE2+?Yc6}pIj=kq+pfbO z*BwD#_|>y~;>U-rGOO>I*ZD23@ziGd9di-zm9W3qO|YNi!1yuok61Eq#WPc!ilhS^5~~ z2qfkRKR-w2b5xVW9-mHe;A&ZAWYZ0IA0Z@4!uNwHT8K9%8PGqieK?07)jN!@>#mD- z$bElPL|(g1ffk=@$Ag!Y@Igx9`TE@J+x--?aJUtVk9I%W061|=?%qm$ApjZYnqf|g zy(%~t9#I6bAx|we1jU=+nI{o&{XPJ@U-HW;kU_aj!EDlU< z?!`@Yylm}a_VAhMoeab;bDSwirDAtya_t=9kMrd)AI1x`I3==xVh?y#-Y(h19LJk8 zOUizn&qrtN$pEqQ=dpiqRMWE>Xot(YJVigCWClZbh#7Li3%lYrh-|9e$N__C^_h~5 zbNslmQ^tFVb*LtQgy*e|c)0=U7=i-eFujkQ68r{MG&vfUO`j_A(kGH;yU^JfB`7Cq z{^z#tqjrzT?PP#U~mh|j)9sW<07o8ub%kd-EF@^1DnjO%ZC zw98L=m!6JcM0yO`I%XH--6|}?B=Y(GDTdSb_*BT z{T?k;^%5+C?EHSZwyLP^%j1hJzKp=yRPGA~{b|c*{&R%(_37Oiri_8D#~c)Zejk*h zh)9fSKdjK3sY_3OLsWo_pt)&>N`;=Eu59KI3t>r1Zm9mIBk{i2tK~pl1>P)#G!tIt z88Wp3+$1bxUa8P@In~9qxo*7s`YzB|*0Rsfb$d+b2ffSc&66)+ke`ALyFIs4-}r~! z=^;SI-l6HR-}jUbrt;oTGK*>3t)ujn|Ll@X64`^&40>OZj`;E$J9>Cbr$(OR# za*RuTIYX)^KFVP307N)m!>n$ zKD|K^6isrjlnDMofq2v3N_9T=4d;vdZ&*>x=d#I~4vJc5|7Lp9LZ_I{pM&8X4BwW0 z(#P#^_`RP=HBmeSe(V|oakfp{3 z09HK*{ixvz5o@(~jS+N;4wAGDu2|AY^jDy9uud<&fAUvezFsv4mz02A=X!v<9>?I6ZSsAAR0R(1skZNX1C zhR2@|b>}V;OyuLLjek2X0W^!4suvdmazRfkB;UWh>4lA zzzZz37xM7y!Qo@{D=Xna=_Kxhm5`n>Tm7(7D&tD z_Oec@W%8L)o7r0s!mpfzSWe~s%za2}r|1=;r>2+YXb;=aWX3xg;JaaWS%F#i|eQfK=WLvQnUlaA~iv`i#f z$TChHosaW?`(=*R-kx`@s#Z6E=II{`S))B=3#QG?o9f%=6a!u#*B=f1G~P*yp}u#| zr+ZjfSFl1T6==K9OWG@^^9pfr<+8l_*9n65Pjjbe24u?j2Sl(h&2BAD8|vsNBN~9U z?co%HWx;RrWI{Xd1XA>|`I@k22Tl<_%V|#r^!{?$iBbIfhK;n7Hg2c{l1rz zRRt75X}!2b{YBS@{1S}v!gNnhn7;?r-RYZEVd90=;!$l<39beZ%hPEr4?+G!wyZ+hjOe>hZvR;L8sc`-N>jPjd zv_np9R1H~~_kp&5hUdu+6J*@K`m+NEnc9(~sX}}^4!c(^uj4VSjx>1X&TBo|^O39( zmQXURYr-wGv=iai*EO`(v_sp3@oho{lAcqbgY~>dI0SUa0pDcN4PsiZa#o^9=2^o%`!2(q)eiN+_iZB{(958a_1A z4(`12XWaG7I~J`kAdZT<03bUEu>2^Jlz**^*S-uVwf4l69H!vRyghKNA7wn(;{F>q z^#CF1q5QZ*3}m{qQqt85E>m9k%} zj^^hn&-G(2Z(bfG&)?~Amu;q?8IJqayF}kHR3NlGVsYO9`Q9_K0DVKH*PxP`M;dU< z@j~@vBpLhApJpi01BO0@@4~1f7oAwQtSKxx>fxgb$mgnJ~y4y6UZhocim=8|M=j3vZ+DQ@KP6~wA4*@fNhk@)<9sI7YUGsEs>s~;8( z2!X+5k@JUsbh`W64^iT~Y)K*$XM_9Ul*&AYOwa;1zU8FR+(tu=ctZU-0G47vQJ(BB zwZrcCc)L!NQ*4pGfPY3FJuAw)x3v8}nNA0VT5su+D6 zlVARnjacW?)g!M-9Ju6`U^T8$Puh&?)ums8+vyA@5FO%8OFeN zJ6yVwabyCnoRV?QT35K=`!l;gxaYwn<8qzvNWP+a(b-==-zO-vkqm3tn?;dW=3q>R z%E)dbfS3om9689IiMM6R08{Fioh+UWWL4d+y`t3)RgW~kpJXAABcrJPwOGN zB?M#_2)RV4BeR{vU0+Ob23*6(F9*q>YEP6q2hwCv;Yq#mwD7~8!zrO|r|;TQcG;;5EVc86 z{^$#dnf=ub(&=@r)bpK8ZLDIpm0|QPzZ});@C~7z8~K@5dPT40LweLgaua*ewFZa@D%u=9 zA;3=C;jc}ON0CZ8ZS~v)JoztAIUpKuX{0H7->v&TiH{uBtxUR)p4)^)wDIf4uD*cG zR}90A3Yfdq|K_WG*sI&)ezyX1X{@HYRLqB6sstatY9TwlFG z?JqgCOZFT1S`_(jm;|<2nZ&z`Ge~rZlZ~+P4 zUoA%cAQpel3Ne|$B#g&tobWLf?DT>~`VW+49u){jt!!LWsJt@qFQv5Zq92%$2NQ~V zS^ixX>?%Ty0<&uNp4UHGwXg)luqlY28Ib?DY?mSa0rb=Z!uPIfl&_e%!1^|?6?aZa zD^UX0K)ii-w;!?XHiAnpQW8mrYkt!C(`?<9*=Q^VRx`<%{bX1UnMBXer+n{Y9UdHx zBfxH`a*84=6Z_M4kA*1kEAREbL&c<3zF$&hg|@I7j{E*ongB!1kVQTr3oz-N~LnHJZLmTBYD08Qb`I5)lp3zXb{ zk%f0fRuGQ7@T5!Te{3MU`N!7-jsK^>62N@};4Us)b{~?5`jMK!w;i!hN2pLOGxd{M zLppwmIV7p>D@ijSX2iMQ7>$ zXdfuhiVqC-jE-P??U&snJqm5>KAC|JgezLAq)&x&JF?SBd(YRv`)$Tb4#D>x{7So0 zRqxaG2wr(78A{VT`ME*PKv*V9QE3#9ap zHLyv45x(tp9o`jxDo*J;qknYRml z!6b|dBlun>-q20QQ`2|(W8hZj`g9*rm!1!84cyd-eC9K9IcaW{0#Y0auq3DB7F-`I!pjNGMXMgo!nHq9eytRcycesUq0;?XJ3%KepihQaII$~rF&YR z$4>u&FM&FsClrgan~|H?<}^VZI}RJYKd<*hh1$7|B#&!658>}*L_QG?*>-NzlUAY_P?__ z&eHV%RC-MMk@EAOcZNm~PbQLSQ3BJuO;K}cN2yTbb?skry=L-3GMX8~;WylvPx<=A zZDsAt;l{fv;5=w<#^VLXM^7y{JYU*t(x@{3&^_)(hNV=>6wcv6%gZ-THI)4VDH3h> zO3jawEoU6iv2$g3JStgi`lb?cYRsQ4=LCnFsOr zdOyR4N0z*8RAh2?-t&n#u3jz>mHWwJb7QN!eVD~3PPnBe5QBebgTUL$UmRkJI436a z^yR^K6!n#VGDV@zP>MDs?F=;+4PMvDXE~S$_;N{oKHp6jXi_kyKQro`9**6&+;gn` z`RvGE>_OTtIxzzHlQi}$PiKUCo(Sd;l;ALF>h3$s8WU+~q%_UR+A=bj#=Ian7;uY& z@+i{+MW5ZHn8G;*3PZT&kb}VSF32wjHgZ1kQFypIshh1k^v3Hb+@Zv%V1P18L7pI` zi+c{$>ABgQg=nzr{9oA*gfF$)O|z4I!UIN+AX->c${ z#X&cL`i@sYqSJHMmP{G>J~+(3FfB5-0g@RaX3Cz1$e(}b)|?Y}p-i>^2&rBTpz&?udpCD9$^H{g?>#aAke8gY>yD7UxcSxaQefC5=ko$)gmg*$mifBj-BJ(?;ZbuOui~hu^IABk4}6jCn&<4vJI@p!MI7 z>eJhF%cwoA6&`BrWxDq&I(ZNAPar_A*l{ubreU>Ort8e*)w-Yg%OAXC-8bb+lI=$O zBFl)HjPuJA(R$F#rj*slj47Lns5RXTwqb~4NvC*Lv~VwhbJyOfh~fq9>meo3vu%2n z!)bJFwmDvG^Eek$2vrK_xnGFooDYUHdvcP>X;X`eElQZY<@NkR4YB%=mII2UoLEsA zZtUI?b3N%E;C#cR+FO=sOW&`O;h><`!j#&Ahz|21?jrtPt`^ri%sGm;d~1VzYu-Nd zi;S>Yty@R1K0xN}sb>Z`J?ERh2Dm6FC5aoXN41nMM`2zxGEx<0M3kK>3+>P>CGGoH zsIeY^z2r6?#V+Kl1bUj~D2>?XgPl8`H(UCCk#`qVzY^-JL!)Z=b;nlO`)wqu0^|C$ znwcakMN_Kw3`-PG2ivOb;~)aSr^YQXoj~KAN!(QLHI&Lrf(vSt;iH4w``{Khmc%0D zy^U7~wZw7JsISO7JJJswExTy;Lr7Ed$Z49b&IQY}Z?5J{lgaZGdO3_lk%9V=kJll*2pHqa zB$4EaalGSIf?%XZF2$ai(^EG1pP?& zYkBsb1@Dl#Br}dB(~!y2y?qG&2xv<;RWOPv9X_4WSkM9^zei9S+}H zm0xCBhzibV?knWLA(v?6qvFqgDn0o6uY3li-pNe5p#gLFOYDfK59;pcx_5pDh^F8J zj>#p}^3H+0z81_bobU6ju?=0p6sdngj>5u8j?{?G%GLn-VJGT`)+T1riFj6L~*<*TldZ=?(%9pr(eBatt!nY zx&2sFS*^Q(_>{nO9oQ;cL+K#f%B$UlzF z=n(y0y`}~(54VjYJ#zQWIB9{{0XeO}Gn+EoyL{nh1~rQlFN@5dI1KO^Njx-zAUogq8(W_Nj&gg zo3Hp;=#wjzp9-Z#E|RS^3K(lP#H(>|vf6OoFFWsc=VVVhH2jO4=9@qP3q)+_LSp?N z#kxOO52#1j@n=SQ6O&%Gi@s=!GM^P~-|`28Ybw;Sd>s=AYUSq>WI1F8+E$@d+7B6G zG}pgDh-v3-|1J#3U;L0KBLhhGF-`LhgXrq#Ur87qa%IEJDfNw!TdK$SI6oi7;b(Gu zln@jAr^_O46c`wb#<@(z)kePs5tL3)w4~rXSaQ2WNhB|n0sMzZOLg_$Ly%Q*Qv{0L z7s0n?0VAB9D*uXkhLe<8L`zq8uYBg4lu0A*>Mb@sWxZ4}BCDHdDC(iy`2 z6Exqu183UoBh#!vUd1V-MJpnMm_A0bf#QOR&^t3Hf`jxV&xl6-fQ)X>=r;0~zb$3Z+f3VYkRCp)=gVK6SGG_AG`L*VgU|Pw>(I~z1_;Dc4>FVQEb3kerc|mk z%J4bkGG5F=_nf(&iGyu;q&pfyi!piYBqPSmp$EV34r-It{9?6zok70^TRQJs!HO-J z`(X1Wck*(FaChvMYDCHypW#3^F1GGs@S z?DC||zJv?$UH#NUci0$k+AGjjX0C<^6tkY*^df*vnY@$Cmn;tib zduB>bx+?6C67>nlTy(_nKbcOEJU`Q$BLf5wC;SUC4-@IU8>&qo2vtX?GnKisv{@}= z_AT35?>8@aNZy-96`J^mw>tPi`0bKQbM~7Kbbh{(<+zm-lX>p(vUUOx=BB_rc4ss} zq<$R4XT`tj6jSa%(4A>l-j}6!vSM@K1ssk@)hTow_z#kSQW|NU4|ckdFY_PfBI25I z*UR(gU=Pq-llNmAmImcEWufcq7_7#Y_47(3+ty?#OZnRLazkNzUl<*0Ve+Xf`Jdnw zoE(yQJ>yBk1qim;GRn_mAKsXukPjEcBcqMY! z@MO+#*qjWLhSIHpm>^e{_{;Cv@Tu&4s)amvq}vd6{8a1d^*5g@RXT3{o(~~>mM18- z5-y>*r?lkeUrTu)OGpG90w*^{^fyHiK^`YvNr|hkzXeJjzJuo zw9(>de%Ar$*H|k1IOnrHQ2CZVoNlmwWzU18MQjly;Gb7?&hD?|wcUL%7M9O#=l zvWTS7eNI{7>5&rdx{e})Dyd1Y6PtaO;-Hbz%UJauTOvCD=o(hdCK{Ge_g4?@S#N6V z<3+c}FZ*Mc&sOdhb}Hiq<&&~IIpgx;(2U9H|DYlw<#Qzu4X$Z=iDFjSA5>S8<}Yzu z;xK;CEptM>T%CIeytHY~cjbH1X@TicU8@#C$f%P0!@PWJwrkN?CVVQS`KX^H)Q~9j z>Nk1m=ZvMC9zEX&i45j(;~YX*l)mq%$(f z&!ClBvbooi_f*Yw7MMr(HpBYrc?Jn6R1P8D1EkEGz1zzGLSIW$G=6s4`F(%>r%~3m zfT7Pvc|JK@C|Cwc=>IWyx&7$oHJ7f@gl=-m%<})rjIi zB5NQu^mJz%X-0nf#6}uFVjpJ+>ct}DTS=K%1tJ~R-yXTjs@^Dt+we@-_<;=@&qWyK zj^PN~P_oQSO(F*wgv|VI+n-7bL^4_K2FB9bX7j@zJgy<28%1HECyxJp3FT*&SMH=c z4r5Rum68;bYPKtJ#_<=x)7l{O|EDQcj0=8lG6UImCaWDzd_VdqXM#6rLgBCE?sdgY zb*>RsETR~qHm=C6wmV53q8yHN+oJ?1rY}?IcpP1`ZxtLFt&-Lx>R}^Vnxh{hQ`@ty zz8;i*o5jN_?@u|RvXpGmy6{HzbnH2d_fC4>i9e*)4*(*3R9&$qqwM4dpe#tx>(-co zeVNrI^g9WyT(_}M+_859c_6{u*^BBLdx(fngOHM-1DMOIjAaa{n~C=EQNMM%5e0PU z<2uVM>;?O^t_YsWG360Zf*$GGAY~9ywqu215k&V>5A9(n4nNMU!rNn+k`q73v$cPp zMDyDA;%Lhwo3Y`ek(TRQI8-f2P)Wo= z*2$lvG>!38b^FcocY2)#3Up^y=s_qBP>b((oJ15#QRUrj=E~eBmI*a`@d^eDUgvvx z$wer&VE8M0ms}_(3&NRnrZXLO`bq9!Vw4SnndiWpH1|5EvpA^E|I4=Oy@fOj+@EoeV4uv7H!TO841 zl+Bk;kP<+%i9awyJ}>1Sk9_U3aBubx;;K0#efo74)I=T~O#QrTZhfu5+5CC_RmLrXA1JOrmg5a9^D{rD2`0!`f}7Lnd0~ zd4?nse&&V0i*kvdq_Fxh3#jE;FrR^2qaSzkawDxqPpvwkY;WtC8~Wm{Zd4krhA;Ztu4I%vdd{URz|^jw^B|O*o1e>pDgH`uKWu3w_eEbB z?1Gp?U_C}sJ_KQ6tGOMD%;bAf@1HhzmoRW$&XtS2k8VhLu4UuoweFCiYpy=__d$4} zZGm_|6aRRVrOdSzArd4KVIM`yzLNJRJ&EdZ+S_;N>Q{h4`DZ7`2x1rXLQPdD@%O`ytVB{_~^W z&WV+O%Yt}f^>_6e>h*D&Gz<{L$XpGTWxu=AE$?DCmVE{KBzPctu?U=zDdN|D&yq_n z?v%V_f1+!d#mzrKQ6hcBe#3zZ^yA5As7|>HN|BW(WBzY+MRdl=pnYZ~}{s74uBG4gTm5gz_qYRNuIb zDSOJnYe>?3K87KqTq`#Esjjg%;%1UhiK;;DeVWi zFlzVth|9|Y=`)se2MGKdA5TkhR4os=0UnA3KC7wMwVT?NSjRt~+&u~SA9b+QycUqz zB}Ffwc>05{e2K?j`Z?|qnymw#Xv*spg*3+7|JcwJb~Y_9=>y>vDaM(9v1>pES$tD3 zYpR`j8ayK2)O1nd0D-|qZ{yTNMW2mSJTKSh4xnz|AZBpPANQFvDwu#OyVrlEO38h~ zK65?tvq{!3=+}CVo36Yc_4&l5$!W}K=P00l1k=%S_OK#k4U@t6`j|4p`(mag;5WG$g8FeTC+XSq8BP$IdUHBl>W{VCzA71RiWs89J{D`Xj8S;1i?5P zsM9P-P9c(8%=*SR2#5{+P>pRjdKmZb0{ukk+D~Ypy3=(GFE=p&c_lGE>4E7{)`bX! zDm0&lU+7G{GU!3VOzL!&5YKivR6|+{`%mJ?Z49*y zj6TU+$ij3fJ)GI*cvYSgvV0shNmqY|njwb?vqAFOL#2LoKM->-a$=;LFg?u<|Jr>^ zCjKDA44a_{!DBfa(w8sf_fbjBJiWbJcrsLSjgZA0`;-bwJEM-LLsAEjT6@vLqSQP$ zwxAXCpAO7>!GG5`>Mm=N(S5!-#wEz33=}higLKj!HVWqDptv#gfrHbQCxCTzxY8Cy zq%SXc(Ghn}L>u^52tY^qnLQ;aNayW5gpefOQr`QQefc~&rqyHr88Q&$Ku>GE z*E0&PR$ue(9fMF=UX>MI{J=~v#$Gve{bRTX@Dy|-Nxu1Y5AC2M82n}H9vuK_X4PcA zj4?m%z?g7sWVFfH@6RXbcb)QJPg!IR7>lWstdj`I=5uuM%jNP;>C#q~_FCGWVcl8@ zVO!?ti(+~?K!@ui-BvaL$MU@K10pvkxtHs+j-m++9 z_ciklZ?KAkkggBH84_h8K+x+d@=$IWH~6zQiHs?!^%Y&Y9iKkYoz*NM=7yGNO(;mi zvOqRLgp>X}3)YXs{u~w80I3kU+pKQu`0>_=N_Di)r?wm|6Fzcu7cp`a^~rzy3afhr zA-LkS8$hy;TC9=wPz4J)PJoUXePNJTp+5;PYR527Y%R-9$?g7Dr5g^R05x5rX#Gv@ zc6T_`32mCY>P_{{<+Duhriuc~MH``%?&cL_Ky~IX=On9)_y6E+7@; zr{y9+GGQ(Hv$^{=6OZOYt*AoLmR3N~XX~s$Md9w| z_P+eI)lBUD*$w8BzE8SvGkegDft4E1!{u>MLy$qrNFbvfKtFR$kEl*tXeNYgSkAow z_JLm>hw~W)jH&0~$1vFrnUoYD0e4dnO!|fX(|YWc33U;dE2cF>v=w5II^7O<`}YG?>(MhcMD> z4L)+oVGV%laL-?1fxlRucCUH8qJkvyr+wv|F88IF2I*|)2|a*~Zu4Uqes9NM-`3Gv zEQ4VGx(#AS3BNA8F5#^S4A2UH!4>7?0_WrQu2{h#*qBDYUUmbb$M1-7p#b(9X5ywe zo$KslP5#r^6s+Y(uZ3+gDo7W?lUczSSWz`z5TKCde;(syy+4jHEXt?*UEkm5_$2f= zz#s2|-yKkt9EYq`knpkM8I8j6b?#76!R@^=e}%{DKk1nOMwr~MKE8Y6Av0%Jp1nXv zVr8nRya_c@v^F3stCVLUGKp3dd{ zy9r{pzhq#7Lq+bry(K>j>V0#9K>RH?n9bCg>9`@M>OV*KaZK#$-kB)Su2acN;F$j* z>CCnj)v_S^OMrAf0@5Rhbix}TBGNZ1`1Ki_9HZ)1-a033VehrqikOj3eRZ_Hv)di1 z`TTB>Z-Fo@WY10mhRf2G6HiQTDZqo(0Xrw-RScN-i0b~1d{JtYmcckq5h8E12+(qN6{6O`;4ajD&o2v=&${Uf823YJuSwE5HZdzQ7CwIrY_geD9 z^krop)DS%Xm05sJS@yce2`K0H>M>N$(;F#wcwLxzfX#$;vb-s3lOjk6kCG4TZ$#9I7$-^)Kf33nWSI~uR`b_ompY3>4C#T+#Y&90QhN%x{QS0xXU z0{M!TW33K(y9)mKM?<2%r#oGM&P$=`uX_kFz8v_4@v%+&g=Lq0x#cQXWa2^|`I3csD(8h$s&Vn0#9=Q+uKarffcBNXH!mPAR{eu)ZD6@F=K9=uGK{{x-gn`_Y_=+w;Aus( zXo&QoHA7xXe_ zSv)MkcGy0>vf#Iog^0!*=%GiKM2es>44BDt!+F)d;w^RVGS?|Lxq!iu3hS7pTqVpC zwT2;-EDu!_s`cZjsn@J-k6dvM8RG}8q@F%vOF8=5%|DvX<#1oQgJsLEADO(%WezS~ zq<@X)oA8JcVEfuEXa8#QC;hdGq2+k}DbpXlT4Nr_^XkkwA}EQ7i$xLA9?;{?qsIOW z@$&<)EuB#9u_1oH`ynVlv2;t^;aS7IqZ|7>>z8OIqP7qG=@B?pJUs+R zyCEH%P!2cAnnkQsD*`a!a5<3G?H~|=Iz2DQGp*T|q*c8ekSvR459AC7%~G`adZw(H z3B0o|trHas`v)pST*yiYCtB*Qez@n?s!!N=VP=VrT0B>{+apVEKB<`@WmSm{#wx(uAZrtJ%lKCSa9q>MerjL9_kE7erWwL8cnzZk{j)v1)!6vV8=^`0lksR9JER0Vq;KFJ!g_Njyv@M(0sOfm&$y?v z^-GjrOk&Gd5P*?>QaAc~BIR}VQUfm~bWSbx_P8o%Ys5dEhBon&?2z}_`9MWNfC?Ve z{ZHc*$TvtY*ITh4P@lgsR*mtcE1 zG&xRU2T${ZhauM*7UO3-jnzk4-{a!#K7{K~Mu?Cg>k zTd?`gnb!Hf&qkvPZOUWk-E}7KKL^u=kwNlrS(-W*`#RktoG~He{Sy15%;go{LKi5*=d!psjeE}riW!MDY zG4%H{4`GC-E2AA}7vh*8@AmyiOMaig%H=okFky^RneMV0#(qP_RY6JO`pk>idopbj z7ch?b7I9Q-=fcqEq~AB(axR~)EGN%?p`W6OEAE!gj6TN~C|K+x?_L@iEAgA-EXD~JJ8i$tfrYljM6LhN4G{czPWg9Bm%utzMwDzVE_xL*9Vw~yp zykP~-9`)z6n5JavP^<+}rpv`?c$K4Kn_K8;mwIg3Td^VM6&g!%!jS{tYD!|nd+c9GEP6yw^;&)B3jUAOL>A4ly0>YEWI|zl zK6F0snOx`NO4wyS7cCefj}gBxcXzn-l(j4J;cU&zp`fd)&WZa==x&6$XKYu0Qvxeu zv-U0^8;MR|?+;Er8yYSmZygU)etsP^Y%lj!z2(PIeEA@h@4d}DKz{bosjpLhZ9dmL zL*CMF09=m2Ev1}QVeXC`7OkOS@A_;oXDzu;kxD5j!sv8%~qlBVL_VOgUp0HX{B*fJ!FP~M>=cI3Wq&Z5g1QR{ER(h*T;piiUSxTkKLs2biK>-yW zN%uoEezEUEB0MuEALKChJN2uqmZn1?$=)e=Aw5ms&(8+o=(qm0!&%op;-%PmcJpZL)T}Qd{?t?B6(!_k_I$m) z^ff*{Kj=&7RD1fx+V^3WVm1d%&nV8#%Wr|=w|Lx()4!Hw+85JtVEU(XOvdnW&eE3p zmbHV5JcAJSYOfzprBx{s4bQ^+xlC&VBy*GT9bBPe6)9L-Xzz;>Xk27z0k1ijZ)$s2ki(S)5N93;= zQr+m$*;qgBpjSW@ukDvCIH9{j?r$gUN#I>b&?PR#i;%ukDaeT~aF?j!>O;CFlsTyd zO9R!R;TCDSTZ zVpRYM-u{!=?Nu}OPToGFTbULB*tD`W=8NzS>bimv^!h z(NRSd&}@j_VR5gGg}&sPFOBP~Q=6}BAso+#gt)?9Y22wHzqQuzjJLe!>9cm# zznXiy;sqG1$wiyNUo-6|VK~=W1A5I0Jvi-=aqscx?3Q9OpjBOM4(Mwmw2hs40Ya7- zDfDkuQOpA;zE3Y13_Qw?2LBDh*!`3#yw?&DF>Lqepqtp7#Cd$S3kB-c~fn1?94 zW+!5P>>apT3YK~AN{GPf^0Lf$=kmC{IxsZ6uK4()d%oYic=+A5L*bpb3P-=9>D+rF z|Egr82%sVZ6gh#rqFSl<4C^1>y-8u6RDF%#bQh zo-k`*#T|H=Rz>e_RzMs*>+)c-=KV$H>0F2ofA3YK5E@8U#^ASJo-{puskx7JWITI4 zaw(z}eJ$ubnVZX9JXBTV03U&e@Ign4AFn)UV5~@F6h=5tfI#_HDrrU5oo>?J3n|%W zEl`@Ac$1}Whk!kwVZKn&Y#0F!-7O%ouQ2&i5?#WH%uvjHE$F{$TWdmv7Y%dGcpU3t!_KJyH=N zG5Du-kuoO{!RygSB{^R4NXPlfY~uHJ$^;;IBDV|>1p~q0GU^cXaQCjBkAZ|tlDNc_ z^Gm@D`t~$dC}kB?&(f^@K`#B0+IMQ)kJ)<8Xa9kkTFGuR7bA6bcJM@Fbt}y%*j^ z>6B=?ByN5GJ=2f#=oJM?-&9VODZ);w&9A=MZden&&$2h>6z^p0C(rQ|-J;JUqp>jR zTEV>!5Mv5x=7sHY*<3>Ek2fMWL;DuEKe6axS6b##f|6Wn#OHSX<~Y3{&8#!oJTPzC zGZ#IXi)|!;&;ZKsFYsv?qrxW$OO(YRMKrFea`t^RI!ik^b`FU48ETmQy_`%9x#Pc^ z1in+b9<9|tP<(sI~{P&`KSl12~jP0L(c0XZ=18-PzB72-Xx#M-H`BySh?xmbFy=oaW^Pvmw*vIM@a~d!fAHI zp8njmQ>`$7UDIB44iNtoe`j+s`2IQ*iilhy$ITOQ-Xt{ppC@b7nf_`i+`)L{@{3-R zAhn3FHS5>ZA|~l_j}GE|P8|nBZ>9j&dcWiM_2XE=Cl*)N!m4rCT+7b;!h^>haLOP} z*v4mN*csJIxmNpKG91ljyTuO0x2(?`FUI3^^CGxaBQH@IDRge3rKP`!xyF`856lmW z1v0nx1N(xMvUk5Xg?-hgagN1xb!$e%VYnRH?YmDd-t2y|+hdh}8g&yxlOakJR)50&fF`^NR%i>KhU zcOMHMK?jQ0W7ay0vP$0$5(N;tLtoKKBaaJ=71<@g5AnP5X{I{NFM$9cYon{apj2ME z#XyMZE5n@NrcxIZysvp4?`h2WF9RKoW>c=zEX(Jy5eBxl1LSqb!&|qJN=r|M7I^h( z4yLMF)b06A4`P=+-h*KmHvo&$1#ZAlFRi@@ZY6P9jx~1*s;t67aMz9QHxNJgc{;y= zHs^N_;l6v^&Yq-wAls;%m*vdSuHUQri2UpY(}T-ArXQZai&iM)w*^zaKHmTUtB>$M zdUa5U8R=!F`Rpm91Xsy#CxOg0G6?fSA3z15?D1_;(+n&Ne9@$?JQc!x} zTqqivL}&K-d$^~PT30x8bJju(jlo@R8@caE!U|rmh2zpU&rVVsH8)o-d{vbls@=K}cH{6#(P5k$G7!>sb(N15SY4oi&eWB^$r`r+*jXyq$>i}fh1pG;Uh&=E^# zVcs(8yNsZ$=`E%})Gn)LO6$BxUPaWZ#Hp`1VrzsN9V_~fovJc(kZoIMg^1GoVz@=F ziX1LtMfKpL#M9otVUGSBQo=>1zVbM=IQ5aMKK?goFmd-feqe}C9(c{hRvNaY@yLsh zgbIfsp;}>Kle~T>`rF=^D=fmZKJEC0MxDb;39__2yctN7 z)T;Sjp$@rTEPc_0Tk2ow^cQ4<`<@LX8>g`F=_NI8l>>3Ne!ryC$t}Z$qS)Z8I)1BV zCe`ofTruT;-{WZd_@l1tNh9Oah61kdm}Zzwj=zC(yP+j2wr745?g+2l9%yIG67xh_ z-vyl_CqBO6aTB%^+`aaoHvR#o>## z1Rd<_#pPHU{hec9LrNep=6elsYH<cYwJBez`T1lrO~v>|CW@S=ki>9 zX-|ZOH>7)FAitcPRu8AKTcttLx?>5WZF849n2c4+$hVe0KM$nUhG1JbzfABRu{+8) zW_Iu1rJ*a6WlVWOu63(ef&n!=UZ(Dk6S~bS<$Gj?&{s;1z2Hr=n-c!6!pFbbHGn)^AQh?ac20emrhwrw3Yk;FA(9YoN&`vyp zujU*Ampt0zKasWZx+U2o)sT#KQ-LKfQGYh?G&CYfJ->xFn&i$@i|gJqo|U#{->jlq zh+*M@WGddLR^s+Hj;|kG$ccOZ zju6LKot*=S|7OW#uJ`r{e}g~tXh{mj*B{J5MvIy>Fos4KwWc^gosnC%&zvB0PX<=J zY4Tpm-J(M*cNN*c>cFiRNN694fJd2Ys^k#Ov>}Mbov+zcud>Mu?c?_%Z-P+-HmmQG zr@~3RJw8MEN+LDidDSVVBD@BV+12Yu$S>cA4=0LyssL=g{X9VP*bA3ps$?E;Axd?V<_< z>`WZb`Qan&YMZ^if@6Cc$#e%pcSRIO`LJLttE4|WEI{$u+MnZ3Tl>kR-9Zhj8P?L6 zcLPg6uMmp@kDoat5SxN zYivpL`v+F}`*Ns^>VDW5b4@E{(+W(QH~IDO9C>uv?j18$jFSgJl9`_hoXH`$$&Rr` zJ>@0qXq*!|nqf5|Nga*!?6 z{*ijup@J586J=!wm5Xq;TEPylg4_8lKCegoe;io?h7G6R{@25MB*KS+KBYmS)??3& z3m4(D4}hGG;H)F%c#?gq)PsOvLb&(gjZRH>4u{~j_d)qpX~?PqVc7ES1G_t zyH;&TB;X#~Vw+0lzPo+Ny%~x|-Ls$CW9|y{nKtm5FVz0&)Oy|WnKj1m%vAPYyhrc) zq%Bk`+iik>#~24459uTM!WsHh{=zBWhT;m^MArQ&B?0lE-}NlLTn{v<1~E6V5LzNI zr=E}e>{gePrAXZ^oQ2CR&>7drf0zv82MxPO> z^N!A>>TbX9m354YJs=dk7mOF$A~}0|p~8J3C#YSm#O*4_$R)n*AC_!7i>ep?vw5(n;h)vk{OdfjriF4hFq8i6BMPAthh0E;6y(Uw{31pZxlOcIBHNjFqM4vJr9-N8MPe z$Gb%ODl&J07RulRnxFHtIJIjOnll;~Pi&VKMtsRhe1%nckyC`{EcW~L%ysEj=bw$m znDKmIBBY)Anh}TehO2$JW2t?=*Y%dQBr=4g?V~BKPo0dq+OAJvyx(^_tvYB5^i*%) zCS};!NnM4zSucW%5CV!W&v7WTY<;(PYIAQ(ML$EupPv;E;OzUS+ZQWui8U0KM7ydz zJ|_kGJ>W7+=6lN048Fbw)j)DXs3_^L+PF`W+tY^+Z_Lql*zu@CCia*G4^XUnSAd{z~KVO*5zI7^*y$HGmPk5lseBDX3~@9U20=#iVO%x@f1R5EA}O3QXH9;n;4RH16Vww z+Hr+Um7^b;HMeU0f+MzkJ_Z*Bsm&FS$~(vBD$dPmw4(hArkpC0#fX)~h3+44s;tU8 zlR?p0Xub6eZoNeACl}7oR*J8tTpSUBXrtF;Q|lw+s&javs^oCz8g;hyJGy=C?`{1~ z&1&6D1L`WnecxQQ%~1>5iV@n9yn(S2J7-~=jc4~AJ+7;hSHlI@|-(bg89tq6s@CXqSKKzMgyk>y<} zh>Jeiin8CQT$5}gt|o49p2-&{jYQa_ zA{S|SiOD|*!Sl{E&-7A!s}=!{htK_2m~r=Mxlt{3n^4f?#7h(T3DwB6S5lfR}Pm+_e@o7BT%Q zD}A_mpzA=)x@L|vVN7_V+O~>`2${65ifg$^tXtx-NpfL-LbSclghF5NA&pao`L~f%>;ciT(wvrhln&|i{|6sl+cfCp5<#w#AujLAx)ZcDR39hg0zvb|JkBV06) zNri5`5}77QOX4q@O6Ui&`^?A^e?-XA_42;98n&Z06;VoR8hT~eW!3RM^wWT!>YPk$pOUDJ6iVwQ83We+RA^5qi2XXB_;At*6ihhu|N6IY2wEnb z@I@QQ9A}JbxU0%p2ot!AOiML|?x>-4fCsCS$bRKy4F=Cw93baZ=a4V%^wvlNL@pqK z%KSdVK9{R(>-*OQZd8?ln3X$XoSjU)T&1svuY;O)OQneROZ?g!nOz}b^zBY%EXei+ z<%4diYW6GGBg)q8dAP|n!CmTP4l61JLc|Jwx4v>4P!@FZv(g%AoE)LF#%3A%=qng2 zu3$PZB)#}G{_PGxzP$nmr8RJN;bK+>qX?b7w*hHh@kK{3(Km9M-~M5GRj`4-mX@zu zz!nhaSqMY)@`%g^?9crg$Zn$f>%G7dD$24t$8$2-2#v|W;AsT8qFD1%CG2)`f3C|t z&!6AW2!kZRr-Rtfq?s#glDh> z5*$uv<%-DU9Js<-gu!wB!sdm~P??GIHXZz$(BZ#oPeI-^XDTVlG$H06M}H&9!lX}O zK&?JN-H$p8*M->2hsM|&z~1?_9P0X{%iAHLm=&4Lt)3eyN9jKSuD}kNtjp0GP$ex0 z1OdI@e#4-}&r7QNuh|z*cCdTTM9Hh2hPm|oq|&kN4*b~2_e#TT*4(J=Ve}^V=7jZ8 za>Vf3Dle4xQ^p2GB=a+uG?U$;gv;+R>9Nc}6)^_TYsu6!12J;WBD%4gIWUy5oI`Xe z^#_r;dkbzUOR09vtE5*JrumBhXz9c8EJ?Zb+^bTZ@Lf(k!osrO0;P_R0xCD}{jmAc z3Od*l=IxOV1}xB5)*Bb(jBT2%9|d13hhJkSxm{I9!$Dhka|A5K90by@)A1P? zx$#m-G8&C&jY^4prJKip^9{d(Dt8=@WTV&PJL$)FhzCz0@A(o`EXtvJ=pGjN^Nf{e|3WpZAFH8JbT&E`_>&3;cBNMbh(Ia zjjm6e_d<0>>O!dW7FNystHpr~1X6Qy+L>ipZ92811z*>z)zQWvwG;QU)H9(oghL|# zw9^h0Tn54xUv!xWQLv#Mki(<&&Z5?}jcoBRG3SN;Xp7;!ugOw=FA&AmB59!^O zKvFeKDc;k%dKe3WiM)R&BaqqMXg&}74b-jb@|@j2C8g)9Qs$kHr|@Ry$|t(@*ra)+ zZK!MKaHlpr`-2M@Jac3D;L*F0CjAbOm$8OieRHE1{9qSkuE_JohGaYW2&)JgTtL(+ zd+o>ECK0ds(r%G2Krk=pa+#Rpm#xIa^rL+g6d4_A9TAH>_3+_1(upMq36fNeqdm8? z1PgdWG37&1dU1wSqvu$5fUL;J@z=NwpUpWGHQ6ppajh>iRnTah9yif9G0mveK+{fS zPjA*zt?V~?XzEdeN;3kTJQ;Jaa&fg5`B_L78CXva9%8%}Jqx7a)_~3`eC<3ZaN&4O ze?u$#5jME07>J4?6lYoYjJQ1cK${l|Ahxxi~G@_&FjJPr@4_tdSvqnLV^Z$gmJTanvr1hcub!ED<^uOkG_t9oshg-Iz6Koj}? zwefIfv0;lT7YwAThZoY2e?r|Igj^4A=L1=cKmDLXR2L}M=JZ4({E^ky%m?E2+?{P2 z@_v*Gw+8vwy=ezN8g^Wl$NZTHo#)2fITPlZ<0hQHAN4x4%SReW_6#oWWh#m;n47e0 zPY^^8k!|jUOMSg^kp_S{n;RbhXHGOa#CqbYN5s4$AL$D^Pi=Z{l)B{WB^|8x&K*3H zeUN6&TAmgo8ssh(u1clny}4LocEIZL?>3zoaPEMa5yfur|3TDN+={wi68Zgd88W9! zS6eMvM1C)?8>d@Eeq-d4f{J>G-hq`MWYD!}c87C|KafhB%q$)z)yS*f>na*K`wzHQ zmb`t%56DF4Ea;kGcPDf^|N5x=bJKS?t1QXGT$w?gak#aWa|9%!kvsg;w&nUT9xa5) z-N)>Tvc+@~|Kl8D9Ca3HFJAz$J%!Qp_d!JWA8aV>fA`zD^VPz8n^?-~{rycm zsW_z8fH~A+8AS-SL&7J1Z9kbg^-H44WJtg1bsPA4cE=D5nx2&EPBwcv zg)!>0yMi1x@g?`(kfMp!2(6akC>r5=h7lNBNV;?TM8S-LOYA=0u_>I=klZ^vhgtk8 zzlq#GMXEf}FQAlN`XohXsM`jR3mhBdXk@S6;eBqKz0W_KHbibwrqNupY@Vj$&BM|S zeo;hf%TR;~Z=L%sEBs+#CSN+pjZ8@#Fb7XgvRJpEw6=AM*CY zKsRJ>-wX8y&JMzpBa~WMS6#dw;gsgV_N(L$(60f7btUJ-_{{miCw*(zzx=99#}0>8 z4dfy#mStFf5_LsWbVfW30%{kEA5$JqNz&&zkNB?0K(bK4jEk=q{V(m7CEeD+tCA>Y zI?PmcU0~|z*T2#^@t>EyI_4KJn%AD=A#^jkYtz5 zdAut}J<9iPUz)NI`MFY@Ab`qDZYyCrX8t7jvv?WKHM9^A;}wq-3g6hVDB7XOD5SPN+rMD4IIQ+6FPB(zjA|d=#TX(Ivla> zP0rFLu~F{}{|{lzz)5nJMN(D{{c7kX36tIv z-|e_y@nKLuLuF8dO_`kazpP;^0=o z!Avllu64d>31bScV5WU}5f_9_Ud}}8?JxC8o;Mrg$4`5%_71==e$Cr5NPlIId4+7t zl9u;R65n}Wct|x`&SV!qkNDO7vr}cQdh-^l;l5+c6n_|3C5T#DnPmOi>8xz8wl zqBP(3xeD=$&d8okEyO2iOwA+Xp650TR-C@RL*hbBXbpb9x^NF!H z`uj)y-oN#4?Dj)ZVom#+A?`0_-^ivHvloZXH%+70!~d!J@k4wu=2gs6J9H``HODrK zQbT|^IQ^b4fzaYcIy|!?%U^IfD0w67RZka$!wUA#yQD7q-kNZ1Qu|WJ{jxl`4EXb@ zdr{9d++i1`)1!hCOyYMt(7ni})lp!y_v>_uVKsc{@8I>|#XPHvNeUHwa|+qsuE{hG z1WV(zqF_TPr_j`WFXtbFJy}1RM3QL2M;@Yb6Q?)jDE>N!@2c{6DK4DA$R&Sp8Y<*- z|NQ8*iHm0IU$_dy4_bf(O>n=pYgSJ4)U)7oFAhIJ_V1DBOFn)17&>;<)4}ja$$&Ol zrEGuTXgW*IbS+^6L7W!UVo%mIMDCDkCyBj{s=D0t@j2Sy(A54pdX&p5JqKjte6e2& zmaMp656<}Xt)j=!G9cQJ;;G`%b2ZK~k*m=lYT<{m>0ed8)|I&7>2oJz|>rR){exbLaaDicpiV?p$zORG*=%x7+ z6S?bhfTBvd-=F;jj^gibvvsfzE7a6!bV%vTV?TRF$N`3KkG>v1Dqf%hu>s@X7-PS2 zOJRSw5c-lg0-5p4_s5NjX$>~wsh{dC1Qd9#iv1_jx6b6-3x+XbkM&%}{Zd}^%#up= zQFAIyS)kva-WS}O+k5YB*mNWGQT%%A{OiWskiX(#nznN40r>G`+E=~cQ$aSOaOoFo zzP2~kKgH_TfyUS(n1FdW2M4D^s*#-@$E-nf{dj?vaqmqdODSYO_`}qkp(|l67^vGB z(HV+Z@;%Qb-}gFwt40iRM@M2DL$L4t1}U4%u^Qrg5=GZPL1(9@3+GkFecg+HT#EpH z{Z@({U^{mm2ggrpMZpgtiYAe&5TD9 zSp((yY$7V6rNnF;D`g!|4ga5$d(3wiPA>`(R5&Cv-5o-8#)0tgcSdJeq5yxl-KKy0F z*Qb2mvx6NBF9EjQ88=mb{Cz_werJ1PVIa?W$v`2tPdY)g#?!#3$9(qJrB((cQ%YvS4+sF3v$ zc0YeP7=-t&r>*zZnI=%ir)~Ao50^6--1{X0Tjq+ow6D^BpMJE%?IU`iHA)3#-ZkE) z(2IW_Jd?&Mp~o+3Jb>N-6+`+CLbO^o@9rOJSz7P3m z;;G@4e*68WSGW7luQvWX)d{}Ft9<#oTY(7o&~HmLWA=Ofd+1?H7LxddH*Igcoj$5j z`Q#_HUM*`B9>ZR7+mAMR8rgj_$f^AMiz37=PKKP}Y+7i#0*J}fZ*SVmKr>l2ZVtv% z(wo#uTSk;}qyricx(#^3r>U4lGV~5I7u)N8T*UU zoLBW%(df{u`60N<(&Q@73`VQSihejgB^CJ?N#_6+*7aB>+Hb$(bXW5N{bh3GMbE!$ z&~y9C=MK$YI>X;DPZJE<^k9A%?E4B+?3d6ubGJCy7Y#nmXL>(lagS4TJibD);rUhg z86I;@v|eY5kLb6%DhW7hP|gEy8&4cgcn{Bo z_raI;TmO1KsbCz|7WW-JmHX5j{kv2&?Q#JoVHZ)WSYcBuw&H;6#BE z4*vJ}5%?&0`FtUh%P%0_p}GCBv=P>a=!Mo&C`5UK&HhL${qt2Ckv@vDMO)%g8uugu zMaPOR?w{&S`-FSTGiN#bG;1Tprxv;iWAn18{TlMG&Oyomo`7G_*4r2RU2e$Eb(H6P z6+gmZuy05M^Es*9Z^4wNE{2zbR3@I4PVg)1L<-?y9MFu}U;X;B62!M(&)JAXC}Lld zLmi>3PLRP_8k|pK=FOgXaDd6h-<9Jn8NLUSmL5iXj4IZt)#_C3MWONn&d|8XicvSR zWc6ay{~kR1dAZ~cND`AOQjG)2AbI=rfcWbii9%Hpw*eSGt$t3M5t*!2fo;PotGSKS zeEH)DTgg3lPRGd0AqM{h&lAbMoAbMu<+ZrT$KkjiMgUYgUh7w{bdLiv4K|sVReW1Y zBN2@7_4f*4e4jyg-;O^<9T3V_`Pw<}Jv&>J>FYh0y`Z2kB?Wi-@>CG^gj74w`1f`D zW5OqO`aq4nb?j+6+Q-`o&RVN_vBJLfZ(DEP%08ixYf_-kR$E#5wf3KAwVNJ|MSH!c zNd127^}4?(n)*oxstklDz;`)Pxi*}KTu|2=>AHjCqXE@Q( zWbofk5WZtvgyk!-wcyc=2%q}=&JFxnx{30jA0-qPgJ&bzK&fvk;B1$Nv)D{h=y%)8 zkrT0fKY4!P_u0w)%;^V|hUEE>SF&B&@ToWV_HOFd_GtsaZ_GCi^ry{0L;`&nYK?Dthp1?GeNF~U!d?tW$zk(?&0Xkq`} z`#Sny`|7gE%NGeeYH%?f+dq2d>fb#TWYcrylTnL9ka%ZjQ96C^Xl}xdtz%rlTUKZ;o19cxlLaF^#-1#buiR9#lWzdcLDtPhlb{kzi z&+}f;$=>;WNj|)L)Wd*+<{jYTIm}Ue~8*U+jl=5E9i=k1M%3btS!@>H`Uj z_(d9hptj`LGnbW3#&y8qJAU_hEu%1WkQZ_zo+U;=jT~wEy~SOw+{=oHiYu}_*rk{V z^Z84S!wpi@rnL5&Wx`tc-Y;P==kW~q1ODmz+=HdUv5&6GToD~JOS&6$vW`T{_rc98 zrGQ{c|2*Fot6smSk7UVZ^`eS1q0%Ej32&hC8J~5_`15!y>_=hG?`WHe8jnvMi69TC zalfy$2kD#*v?oCwj}O+jHiGaM$@F8#goXT)IGhCr=c2qV1?J2+! z*Vz3bw&wCGU*1=F(y`R$YD0~^wlTj z4&I(bqd4yJXzsBNJw4su*k}P{R+TOg$^!4o{Ls>_4!)QY#6eTZPTF@!0Sy=hMX1O> zzfMOxU+R~22aDT_;e#2_9e>K!ODmP{9~AM>eEeRo`|F)q0pA~<{Qj&9@oJ5q#a&a? zD_=1f(F*r^pa}oK3AJBgI%aYBAAla8a0x_i5ApyVy!#-$>^5)yh|)?ahVX=Of>(D$WDc%T8~y{gLKcVR+9g7wyxv^ zt2x|O<^aZzy=?j6(ti&J-tuVT?n(9j447PH(Y26Yojera7?P(8_`bH9pXU=9cV9G_ zrLCy*Tg*=x&BI5VJp3%;1euHWZ>jr(oHq_{z79t9l=U#BdTsw;TI&1=mfnt}lk}^T z#*{eT-sGzrpXJ;?2pKB>T)+DKJ>Lt9!x5QMZ|ESzkJI8x741$cPW8vPuG;=}A9IBd zSGrrq{>yw4ZAlm8X!oPQahThvc#5)ob5ZRC)fT`61eo^WC;_`Khxpq9GKf!JMzmsi zm^1czz@VpJ`0M~pnV}}}ytky3r>36B%6d#w@sFf4+fq~sqUbNl437)~q9P!J@CGsn z$|N#=eIKgV>U+D|QdA%_BO~JM!&GOJ14sQ?@rTYNgB0T1bD(a(yj&ml2`)Ndv{8W| zP??{@!(N#He?eA&OJ}_*qU2>JFiiEc+`Z5S!ET4k@Qh*(D2VqFouqJ^#@Ummpm`P_ zRERO@HBP`l2sLU4{35Ibc=7gSi<2TW7dqRfGswefz6`hPf?k+k z*73z%Lk>{2vsu5R4tyfo`y(B4%iuA2fCQtu#8pw!PrmPDShhOJXG6H8w4J0d%AL(m zphgt3tizGtCz|Z&{tC^ui~DDB1XZqSpp6}`AjTU$qADU``aAW`tHvc1;vRGTbGXXd zCOF1rtoLggJwGo$MDj(7(mvfnDPBT`XQ1*ke|rc4&;xZfQJwBIq)KeY{PKwyLR}2D zZhlrQbx8oKvx%8aiWAD;IFQC%j63&JlJD3jEFs#bq9-p+WnB_^Ic-dCy`_o4sw@I%lHiRz8~h=>0Is&w(KxF2(f%FYO8T<5X<1x%2H((jxo;%F zu|-YAal@HGnQyDck=;96VagX>Jn8JHT_s9V$tw(Gzdn{DmeKt3_=xek^A zo8#7%xy!M$l7slZfv-KR%f3Sh)8lNWG4=i_5by_`Ki>V%V4v&90DO1@zI^m)_GCM} zvsU&nnO3PNAR*q5m8qAx$&Ni;Zo`RxZTjbn1Cm9`-a$g9Kk9yux;*gQh^W3mEuTHF z1kwbLuAq#EZx%DIYWwnjG1HrKeW-`UkZPQ_P}H9XF{NS_9t{BRC7*S>KkiUIyq7>f z?u$7`Xz87W`UBZYwKOg>At)-m5n7Mw>Gb_vPdwol*ZFRpGlK8nG$sI-noZF@$0h;th3aANcOXgaz2WAM{?GYWmdokL($yGrBm-;zXS7 z^vkB(zFhE(CdUfe)az@C62M_Uv8x^M2zI1m`Ca|wLYx2$z{91kqdoRQGR`OTcC$>W ze~=KW!I@Lb6d{F-q}^ljr%7tEwB2tjnGkZ->|2RKKi)vIe7)d`jTh>!9}kuWoiaDW%!o z20MIp7xsQ zausga&j5xA+ENbT{g)Rbw1rY4+sC{@)K2^Zn!F$2WI%;^a9FBXAG) zH7T|Q$}QGO(1G|eFQz%czVi5-E@|>uR$8KFISZE7eYy*hs1&n8P$y7j*c{7zB^3Gq zI%obwT&HJez5jDffn8LFiB;Vt>FUD}mTP}sr(alE1N}5j_cZhBtX+cMx>bP3*<$zj z%OCaU>_I}4e0#5M0 z4E2L~99r&nbjgjxnLZ<>^kFEDKkPB$EMAsy37&E1Uvolh?Z^Clz(aeE_uVASew~v6 zb)(*Qi`X0ha4(cAmLC!HCbt$UxsQdQ`Yo_PAgA+wo{(t z7#$+0J-L(^V`-0UE{_N3gm}pXCh%R&LwdTMWkvxmd2Bzcb~qF+eZ=q872OE@k`6GL zPa0Sh9ODm*IuKb>+6kT(__>}n0(EpYY2llomSkyG1B>1fOqXgT(ugqBvAjO6#Bw;= z^G1E*v!HOsMeYOP6HqsCqta&C44<~)u-1`FgR9U)z@&)T!TW3;O`STrsF4irI-!szfeE-4&zing9yIkam!S#05 zps>Kf0TI)TciP?ZJH=Y=sTVIQO1aF2Fdl)bnfavgSTdT z;Ijo!D)?nF5ismIW@J62?;0g8_EVZ&P1AO$n^d>NOoduKwr|YW_W}^QHp2ala~yPu0)!)J93h z(QH%vH_jqf+Mq~};Omm6tGQ>N50WZ>SE(i2IMnFp)ngO5ncf)Z1iJ_#V@NS9%a?lz z4e#=O+%80!jaS`e{73rZ43IwX4Y-M6(M0RJ<^7WYvbnrQwvA^etSaOSJZ~xIAF*l8z#7MYI)yx*TqjTs!G&`@i}vKOdWLO1+%T+yx2N_R+8NbZZ^8-`rg z;T8|1P$pacRp554t`|`}-U`6GA3(!3ezm&Fdh0`4QnT|R2Bcg#JIE9hy64LvGdq7y zRlOe%53>6_c-k7%A+n&IeURjtAE6wNFkPU?Kj}vsAK1%drAq|ONLuW{_kM=!;Cvyu z*E3&_d&o0w?xz*CB3drB;5t#!%d7+-m#0?&gU>8k<6Ad%R=zKU1a?2qs3khAOA zyq!mL?Wl! z#nCQdb%5_@qf@oMxq3b_vl=mvS#a|H5o3T2=LW~bh5R!;!jDw@ZVRl>68G3Av_~sS zXuyev=k6dSP2BDgrUuXRZ@qRWY)PmMas6*NGXg}l0an0tKUlV`uKR2A{q8HtJ?kPd z+rj+#&{cmAJV7+P0K&oJHhqokA~FECu)rgW+a?_AOf-`Chj_}5 znRsPBD|A;+bfmI>{Hw#repy|PIDt3KPWxO}++9*Gb*#MKX7nhp==u7!8?K^cAF-dJ zXCKwR9u-)#4Ur6W^qRof(CFX9^Qr>S8(R=$2 zj@pkJ2qCA?VbxE843aziDha*3O?zeoic9m?-8R0mSzOD3lySHP1sT63o&(}sWG(^I z{JH~^b-)P7Sf?c+Bnz1A3Vnl1tGfEy=i~CH9;c-~M69v^ejj>>3Ap95r*Fg4TTAiO z-VG38o|C@;Offg?0AWRU}t|n<4@CvVPGNVwt0^?Av>Z z(BV!~t_$mTGifx;d!Ib<`R-da-qX+~+Z%y0oTI(LosafNEesCf?RPJo<~1D|DMoWQ zAx)|^M78V|`r#+XJ^GUB`TV%YPyGk^cA;|=2Ao#zYx3nfhR>^say$3#i>DzGaRDDw z$kjc)^+8Cd(%rdM_4dr#i6(Ad{G)H=ous3E_$b|Me(7h!eZa)a)>J&SN;(~bX*Qv~ zGR{1J)>Z!%$wq_X7B)Xzi(Q!n+^@TR-YWdx)`lRCkB=6Pt#MZ8Hthn#BIuK4$!a_G zS3;7D>=-@(KW9n%mo~81KIdcpK5ylXp`DJ_&yr{V@L}#_GHLtg+&?e=N29YascwbN1U!31&-%hD_BXo0K4HH%34dA_4LkS0iO5|}JP%$b zTIGoS){?*@d?bDCfQ2SNO%av*?f1Q(F3L3)Ewj0azB=B#wJ-K9SwJlcK`0J}l6t=9 z1!A)EvGg_v^Iz4xxn*cxy~{C!Mnl|k?5~>rRnS@u%VQkY5799Q1$Gs4f?s{}G>yq` zvXvq1C%+_JXs^B(3Bk5$NOAD|R_Cq^^xQx7sKj2v)#Lb8r1wC~+Wq=<9rC@;XL)-N zCu$w_T;(ybNf$-MepRyh4b-sPrqVS~y~}ugEt#Vx!!hEPjJ_tfDH4W#BFrxJpXSQT z-nn*&vs(&3`XwiD`KX_JPXX#b0)T;MUILs5j1Mh3bE+=#;x!k zdz^hA@IMmR@FdGX3QJyN>3$%7YkxIuqBj9A*qh^23KSDAr26pcf8JRijoTqBBd&HOaenTn8d^cF+)qd$4fY zrv!R>O{oxYBsamTG}sR$MPf&$d*F=*H;KZzR(UG1IQ$I*oN`T}d(-|3pZS9ZZq(sM z59VXR43(E(CcoSDyT7)m@1Y7$qjPiwVgh@HR#>N*_RVQHqP}>UDC@7<_q!* zc0>C|{)M;r7HQgN@sh26IzhB%C+6#+)XDGnmm1yED@%O$l?K>sv>dSe#(-$5?rC~Q zv}OHe^q(ItES{fBT&Ex49WwdxIh|gG_K}9U(vCJ;Z>JtDC9;TCcEt?(o9~b>ez>*G zgMB~Mm~}?YwE1PFmUoVgGCtZ+NVoiWc@f%ACxVU_M}?M6K4@N+^tkACm7}ryW+JFq zZt5jMvI8INHHJ-nr%fJp^GBOL;qsl{L2Kmi_d{lU^$QPieSJM8y8MGxZF6<_O*l=r$-Y2>f+X|YRF&=dVQ z^v$@z?>=tRD7*-=q|SYF)}jEqD2nMX{mX)Hv+2Ie*-d^q%fk1L%}rR7q{nU|4N!Nqe!lH^M}&WC5T5*zL3lCiP}E&XaLtX zh8y&7VURC5S{YAL@p%5Gb57+-le=D;r8=Ts)sU*a5U8HSm+>B~yLa}0^t`gtA|kid05 z8|43l1Cs0Nk7YUTG;<$I;wPp#(9c)gG^}&=4ErUSX9WnC2&Pa};(p-qTGi^bZ?`Un zcQ#>M?KEUqFk!>XS@#9pIV+6oc^&u`VI5gc1 zS$=cwV@aa$i~84_DMBEP%g04|H2V42W0pud$-4{TM{cenHz|m1a_K!x$~TN3f}^4#z71dTUYr@;PzrS^NSY379^`VrlS)QHx8Z0ylc zh5|$X4i3E!hW2cBhw1*7(2nyFbV<|1* z{HH8|bu=XikAm6r9BR;YAfH-P{Kkw5Mw{pz^X^ih73I*R9mgoo#B9ay)3_YnMRp?T z(znFiFndKqiUnHd?>&Dk|6IxY_lql$bk1<883x_ux6v%7>-kw(6d6sj(>=DxT z=e@ZdUht}2-5aYhA#vKcsr)=PD@VHrH|nJaM^`5-Nly;Zaqn zVOT`W&eAXWAi|fJ?9ZJA*hS5c*2(CAfY6wq&R+`JZFpR#<0X=$5Pvh z!uan2>n$AKd@lYiHit^PTKnlh^E|Clh;@Zia0og)GTtN4=7n(rbPw8Hx>8ueQO0{i z)!2)u<9_?U;k|G=i)iP(?LilzF*z}5hHvFRA`~c(PwEX@erRK9EK5=r#CsvDTmdj? z(Z@4)n$bUohi6Tm_Z?QcTF=wUfYgdo;V^og`r>)_yqR zr}W;vDn5tV0h!N+Q^~4-U7Pk(ZK#!c+zE_r(d|th@G#@Ena?YlCo@4U>uH`co2b1m zenlXcpiz~RMD{mheXd1iDCg~*#S;>p!@fGeUhR`#tEYbIW0WIr4qMgpeq-d<#)%HP zdx5gKt_(cYUIR++1onUy+eq@yJy}8i_nPWrIPl3`yRA7j&%W5Dw|2V$=+0j(ve{Q^ zu`nl6KvPvWEreDi=h(Zpk_?Q9_{+rL*X73z)=u1P0V_1NsV%`%yyz`rgqaoF9LnZZlu@+?$uabp#624XTnzkwu2VDy)b~%auHqG`AjxEo@1U+eGbg% z)1kWVryA)tGdj#al6zjQlMirakuX|PN#r5jcHWpLkz+mEUo_;Lf9!DYJ^%cC zzg+iwVocp+-w{#3xaC93Xt~$ulMQFj{zg zDowA2%zL#*Ea4S!=$3MK@3Vzvn1kug3pVDL!o1zocmI65EQWzp*Oz@3ia-Sa5qt~@ z|BV@b!x$?na|q6iYOeL3z*3sZ7eIRLcl7%0{0A#zBwy%srt zEZWCBqTsa;Y^Ydm@A-#zwAPzI*y;+QSrCOPM=sPOr zHw~t^Sq`q8^!BwMsi|4WNiD^K-gHQ1m!Wu~@Czv7AAr_nIuVRrp7UulV&XF=nL zaCd*(8<}WfBMj`5c(r3g^h%k2htKJ94U?+~_rMk-V2`KwsHX*hYQL|;^o2!=h!pzk z6X(zMWQIm=5<-*Awj~HTr0gb~Y!K3gU{?F+KsHzt}+5YF$A%eXN z6XzZMt14`F^r_(4Qm4JilX-qD&l~(BuJz}4dbseEqm)YC6FDfN#HZ)PVs=>fkHa7C zqhfu-=Y6<*FUs@%At)4cxB}I^;(Qh6-sw*4u=w7xB-8`uH2_DK5DVGU!=j^rHy zxu14xmACpEN9us;RN?8MrlYLrKek(-mcc5JWYUw}!&^r*z^U1LTR}?M{(5@aIA*jQ z#5Dm8d;Euh!3njopHpQkIPgj!V3BTqlsT41a`_kA8C6q_a-Zg&Tu{rSaDN(au6g+| z*kY>%hJf^iR#_ymSZjNtb%F$fv^Q zz4^~q=qI)qiSpPbLEaCJo-YgI3yi_$zCcFWN*QU93}gE&JOwE#ir!>=GR)HE;S>7spke-V_#G4~E*= z329HHUQ}#b-Y+km?oq-%kR?$SLF-IMdYT;b?X>&Qp6yrFYj{J|SAUN86pGFJ=8_K%=@$p(Okj6$cx8*RkE(sc znQPXxUk-!VGIG-x4OsT(x9RQ!7=jOSu{o6j;vvuE&ncMa$8HJcJS zGMpbbKARTWB--JOb03~q`}mYbHjH)`9-@u78@~ z0)##8Q#EWgSNe4`;ammM_NQhF49fMkxuSSj9JJYjUcSzIXy$P_5h}-P-Ba7vTFwH4 zkryF~k{k_38Rf^Ym{R$+cV7WBdy8IgQN=((>} z7jgKXGMDzX(Nay8IT^9}2Dv_syTceU?lB4ycl~PP8WDQ)%q%XZY;xbs;SpIN*{F%T z)Ofr?dXVF3M8fhexOYIhB$Qo z{RrKHmDRIm(|(N&9}pH+lqb<&7arLVwR$^-vFw*XYWL3<{}8M11MU?j9$sU_qWtW4+XHWQmQRUrF8HWw_Fz{eS&e8p?dpA< zUrQDM<^kG}ZxbA-2@|6NmS#%bRVC-nA4yTPgQX2K`fFuR4uu9^*f+)rIc%Lopt5i5*) zvO$!@W9r9*-^xsL1T~r=`)fb6u;l`btF97~&f?;7`{0mXm!U{Q{<)_X zg@F1ghmk^oV}M;$LISo5vh`BO2NB-2NT+}Jlz3j>`B8Gv;=!QspUHnB18Z4t%DY*( z*9w7&Gy6>j7pSp9C3(JIG9CSl2fiF4XmuW-laa7#JUpI~d=WMsj%i_bmOs{eq3$wL za^?94w4~!_s+`Zqrvhv@gxDc0<=@od6UJ}&zT%^=TePz2AhDU(sE2p@N^b=e)BN#= z?=tRDK$o!)+IT{#-M7L+X@ilEcb1dfFuaxzbgqE2YvGgE-G4^1L4cw5V~9km-exEfC&x0`83DwzQwkpP530Q zi_k_#-VTs-WA+t(e_GpA6xj;$x%^V{+@b}2p;m@OT~ec9rFok7sGdM6?3hpQ^IQKM zTgW2(U4#b7W;`vZal3S@@PI`6NJ^{gackU1{&Tlirat*>(s=e50PtMBhwPMtpj)BE zceKqS|I0vA0&EYcLuXlFq!%I?FGNsX=zTRX`e*GoJD2W$_km zpXTMsaDED35c@=c$v$ygG-5Y3ufULeNsE|(q_;Ag4HaZO!^cQC?$H5~THL;7hp2icia331Hxq>m$?PzIVU+!M?tY`R}3Jkq$I%adcwRd!L;!@4_P_ z-Bl1TXP4u(AJH%6dOj(ns5VNS+B1o{zA(0u<7OanCsuGfl7g%r)j&S*PHFtr|pHzq%>0!yZAYToD3}jM)a2f%GjsPVM0V% z_Wg!gAyU$6_8Mg#7fzBk$b~)uz3J>2^1@&80@BrexPIh1X{L3*`}gxrBU9R6wl5te z@rsNId{2&1$ykqMyeUTOKLEg)==NeBmWMS``tlWP4LO0>R167;m z6;w>2YRccGWmA&wK}}H!8Ksv5yadq^X$tL|QUOzimAH2!>5X6l1`A)V_W=* z6~zV*xfx>KobRa{e(Yb;K*P-E#D&IuwU@Xhkq!hR9$u3AJQUekb=UJR;-+Y0ra0%H z%sxOr3Bp%NfJg~fQq2TGo;*IKy)V6xd8noYaXMk{RDYizNzs&dI;3@q{P-DbKP9&aZa@!q(uD6C6@ZI~I9b|bWfD`XdV*{D$3BjS@)6X%3$9%9iNpfV z?Tz(n))qR4B9as2BaZfCU;Wu7%Jw8>L49o;h}qv3z#6g;%(MRE_Hc4!iXf8D9A)e8 zMBk0>k@dmjS;fjLjFjOt_rX6!koEBwxxrj3Jz#v4W`|80@k8@CW4%ikn@A-Mg^PPK z6=OI>ue>Oo33krM$rgg!b`@wLAHD_E+7K+jmxVtqcexs_L4s1GX++K^_L-Px`*(F< zEBK#iq1x_REp2{Srz;<5{*1b%;TR)}&I3~pX6P)X3fF%e!|$02vR7d0eFTszvb$4pNR9SB^(w)Ui{2$mp{sl zX5Fo1M9FpNy{lH2Xd)%Xy2&) z-EK$%7G^L^P7gOkBsyvegwkx!{hU+9^!Dcm4?O)|n}n|}vpvhk zdsr$Y6xItmWjq>)JrEV2K5Z}CoZL^WJO`<3q4j^Wp3kv>IRP7ixloRGtIUVtIQ6>r zJ%_O&sQHESD>r9D2S!9tl3@$5aZnNd@}Pyu;p;Q7fa>n6WpqTkCU3L;7moY8>fBgZ z`!{-Vx$wFL`}y{NrqvZ!<0-efU9w!xT~B04?Yl3|PU-jBJnpxkKLRkVfe3uu3V7?_Q>v$9+!l#^@|#aZ>AHo5K*B8>te@oYFjD$qy50U2 z(nO`1&x3Y@08r}2m{^%%PvE8$rj@aIwMt4$tmHV2rTXVvDT5UK;REgl&qeTmZajJQ zii9p^ICg97fk)dT|KLx-7sva^=NG=AijIOlLm~XraPQwW0zI?Zv}4wEw=dF>X1<$I z)+#JPyEMc#$h4RObhg2Ldp|Sptl1#bnrrQF>pOB&4O1J2dFEExBR^LPQVa!Gxd>niKvzFrdeh1Hi&X--Z>z?_gG zlg`ar9IWJ*`fxTp1avA&vX0K_Br?P zg|)ACcmO?d{lwn0efUmWe83}MsWbm;zRq==%sp#!KVKM;K2ki>-5E6V3vV+px1_`5 zF5%O`TkSvu(#sl8jOc!9YsF*AYZSgnL0J!hyf#6T%=z>?81vCh(B!m3(fy@)!=(Ur9=84~-oNy?4A2HeC+R#JfLJ z{8L>C4NjN3CnEni&PE#nd-u5ASDpQ8rdd?eT|iUk@jjv>bQ+GIw(C9p7A@Y^16Y@b zbH4f{EE3_C7W|?b8|0RxmMl0|vUV2Y=RPQaIXF`h3n;|{U`BBE@OElKFjxD^y^8zS z4nNhgyi+L9UCMpso_=nInM#V@Tn+1$7s4o|4*Ak++xAJ&jt4V9vmw||H=Yl|er38D zFMGowirep?*r)b%HtHdkKZ!@|<_v(%*FytTXUrqcQo$q+%o3Rd?G#z#c{XaF-lK_L zJV`=U?T!F(Eo<~>G_fq#g19Sfp2%wbzy4534Je|aBDT{4{NA3EbM`gW335~^kz16Q@u^C5T}Ig9VA%Q6A?a^-GIi+BBg zI_VxH=7Ig`-xQM2nuK8JJ=MeU@!DsV)5V)Ms+f@>#eq;pj>^)g0)t0iJ{~BfcoXt3 z(z(KiCguBOU)zCeB3x-7VAnzP%KUi#yN~qpbI{g)JsXY0We{X# zYlnj&X3Aq3d%RjIfFP$BH+N^+Wq-@(VF|J(NAtBLlmJIJxP64=jGCS^(kOH1c6Z*7 z?tFVqw3Nc4x0p@vb&U}Sy(C_gbRVRbcl7l3n=EMAS0b^R>rpusl08w-dBXg$xKe9>sAUd==dVU9k-R1()$VutI(Fpl{N9 z{?N|Jep`gUpB0_BOYN9n)%V6ME>(%g$4z1|Lr7Ep%$``j@uZqc1{db*kViPObgUt? zQ(%wHk(pXLAwUVkz}vidOF|sQ-LfAP`97>Mag;nUR023MrujV>>S8^xluK+XPf=y- z2Kf2TF*K_$-o*aWEBS~O{8%35{cZ7QU!bPL+E>W~!c!4RVyhSKd2n?A7P+E?DEFf1 z9+AXs^3d2r!GMFWsq1bmo)sNBi#vv^W($m;ofrCN+|*q??*r_%#=Kbh&Lw{Vn+ zXj>O4I(~}Ve)_`V{Gl)5%VD9OuIIelZUJoNcbx_3ZE1H_2g2 z;^AE-^7VE!bavfuyFg-oc5s69@kM077VuY+9pJn=I|Fggy3JM-(SZ}m26cXadnC~2 zr>4zHkW2@q=1(+HvyJle{bxR15RnvohwKUGM|}mW=AUqR@9^vcJxU6OC)e^NSPR+|Hq>c^x@7@XBwwq_~SD zBSRa*pU;&=rDK2icB=(qXj{Jy5QXDVyRoyX%-27JyNG*cM||vOFE#z*kw353fys9h z=KV%UEAJtD1>|No!M*$xPd0=XTycwey^|lfxQ~4_5%ar@Pbv9G&Bxu7qs!m%)Zl~r zKvD~?sB4Exsu3^}#{r@2s8sIT%~+C1aQE+NR=QK~N51RN^BK+x@k7>uIhU)iED=Pg zqI+I$*JwOh(*?{IBw(cWb!cnd3OFX*zY{vM%`#`b^VFQ4MR)-8rd_{~lhlmVe=pbr zvoKtRw7byi*I#pfLo3$$7LFd(y>OMKQkWZu>vL=^n%_R%wByfNRJ;hHtwt zMYl>?PZM*fg*}^u0~Kb3&ALNG$7;1H%8Iwl@9ue@Y%CAa!D02zR3W`@7kiu2RQ1zm z<}&3-+-J#2?$RKkETeD_+ikon;AWuK$<;O*ln-=)hY=O&y)D^}0-AFofc~J!>FchZ zE%xHEQB1cUz74=Yunqn2>MdpdK+xx+rB1)I2Hm3Z-3US)%Ts=YlL;MYbTw>COZIu& zan#EK4fqMRlW5vLZ#;y%V^yimQmmc)fD9LzResKqN#2N8AWg25D!2S9uN`SSE@j$! zq{uGtNt7a+oU+Hg@T{&lzC-cJ1S{%LHdh#9&^)pV$VSoxI$?y!IMyD-KkD+{6j`RK zg!x9r6&(!nz5DAwduA1-xL?BJ#;Aw`XQtb0V&m?Vyc!uS>r1}?Y@>9*glE}UO!fl) zr1w?)>sTfGj0Uhl%N5W=X1IF2W=tvT2EUZBy?3M}L?8wna{0X!P~JqkT^O+_8?R3n5G!%wH>?`I+DHC_$Cz zNuT+~sg;e!yz);s0FMc24IfZNl>?ls#Z%^l?qitP*(~0-6Ie-QoI5t7vPxvSnrSI> zPw21kEo$*mKhRxfbA)CTb#04zruK- zhG+@qa-Lw+>%2cv*XP^#jV}{ICOAMSoW5n{_2s^~%UcybHR1a2+Lb3uuUIHz-IZ$Mm}8Fs7NSSXu#a!e%Rlb{=sG1Jk0aQV4T!BO~`a07osc^TpDMd zoG-l>oZy{-=Muuo@!mFhoR!&^&#&_&AHQ z;R@aqft{5L%!Aub&tIhhn^F5iH{@TS+K**JT<@13I7l=?edFXIR4i|U&J-}e^q`s_1<@k4>Eg&&`;g9i65P|w-c zPWZph4Tf_M*4_!PvM-yvNS%)6#gQKN6LC7Cll76ILb)31J`@70lNJz3KaL^hsrP=B zh51PE3vL@*okxMt*arigmw)Cy@*h(dW~bgA9z{Ytbb-ZVIhwVy7uPZ19g~4R^hfrj z=ozZne`Wjf8`-xfy)UmbVpd5%^K=TV&9gk;qf~gGU00c;bwZjrOOU5mzXw+aTd{1< zYV!Og0;%bSdi_cqMEF;=A`tD~A{lx=-eA*;C*+q&|2}4mNN^IrokCLnFkub7JX6lK z-zaX4hnalsk`FZ|(!N!e%mJZv*e5n9JQVUn#_LCowclT zOTKyyg?&}o%$M&e_a}#W?6-9FR25ZFZ*e!b{8ON zyCI|JL3@Rtsf9W7^W1d7mz7(?*LRraH)TWbh20{W4n4@SKk)H>fR%SA5phi#V-;_$ z_yqL_sKa9n9Zm_Hrl5j=nlNVp4W|y{CFS99l{W_oq0OQ>w~s~nmV9M@5#ncZQupLO3Nn%$Q~oJXBF6Hi11z z`B{qffKG3!45uPkw)6WI}7^<7QtS&O3=W>S>s-eY{?o zb7$3;HD`ZU=p1j|TK`p>-B9H4>+D)*XqrtE<56+@7#KgIAy!OA2l{!ro#uyXjQsHp z7l#kuU-a33wLR+9=qs3QJ|YvY(n%R5-#e71n_65}vEpsc-EJ~r0tcZj_TQHAQa;Ym zk{cwitJ$jO{QTJtS_+7DcNqv;+F%5{I-=`>adU9HzS-k@>LevK#VQXhAIo*U%q9QV zeurNL97kLri6?f}RLVgA^$H(-{kT7(A4yWDp)@q?a{hT@d!0%-@W~ zJCaJmHsP-h-UyNyG*cdBme{x1k&vCJIU-s2H)+2MGc0@hDs(3C1B`*5!VMI2BDSU> zT*_6b$LQ&F(o5lESlj4+UWWyiPnY*4FDazv`;$(Skr_nel8Y--XTv22ro-O2d_YG_ zS?sf*<9~YBcKhJm0IyBiUv)nlFvyh7Y-X8HmYl}R50>=xRp)TJuVHtqGVF)=xsC<) zeS3BAwbXtEqS$JB8kw`vS3Py0IOWYWS&s^-WT9015}ZAzLF_d)md z+j##HdHvJ&eyZa7*PeejxvPOeu0p%>v<0Dlkqa4q8S|owadm!w7dNx|TIPEsaPejh zdMR;pF&78a8kmO}Xx4Z)TmqcESbAwRxrg;@+LI}qq}#YO5Pjp|hXeaOr^gdlM4qUW z0{e2>{{B0b(AX%`#VMJ&HC%;U9M!7q-$?3rK$#_p;cd9p6f8Dm_5<`4ZQFWP6FK4$ z=PzTr&lktHVL8!(o?j~aj(TCjlpxVf+TN}Le{z&!yF{kfj?#Yn7`vcTok95N>p4Mi zDz#j+dNbZs_4=*Fs!kzL4Gs0dg${S5Fmw3vy2 z*DuO8s-agvJ_cFRvsa$a`SCuV$xHObd(!u20gO5A-uv;<|I2oa=_wErZZ3dF+2Ps0 z=RGVNt0T<}bjd4VSSGJ*dh(08bCf=iMsgI(ukIv_S6C^F0 z{q;~xb|$D$W9tL!1Y=#qp8%D>iQ9)lZA#IF6gt=_ur73{Fdz+skBM3BiFbg-cH8St zwa+rsBC4gE!ojY;^-TFUelK5|dT(g1rz+`!UNULdTS>(?0zGFsFps4@7V&B*Xno8K zu6%u70@cOGiMoX6X4*etae+MI;4zo>y$vKC&dI0Nkj3|PW{5J*d=7*b9#<><^(<(9 zPj;*F?VwzwWgPnw$#Jj{u8X2xZfBIUjYcy;*-@|{O8s-cRYeGWFS)LamA7u#{77i@ zP0L?>nGbmaw-CdXOwPgvgwJClZ|jFZ3?wRPrp2WF$;BQcYJ_LXp!>H?JGb=i?jm}9a6 zT7jT_;sxd(NoTgDs1^j#UjmsQ1q75)Km^}FW>A?$zP^L%wff$!wjA*cc``G0AQp>A zr0%vED3YrD!n?9IEm&Go68j8}<2#Fr>O23+bK7z0?-|)yxX%lzavxWIa5+lsh{LTP-t&zPsmxpk3ujF<@Jf3<;lqy} zR$PEfviFZ($IE+?)*~P=k8ilIuS>R{?}{TW6qE=!0mY`Oy+f$`-+hw9&A^<0^9)_hr6 zkH)tPgXYMVJGr-~g`bd@uO50K?K}S%TnwuXOqerZp|JVF7WYBGKE#X@k_C)PBr0L7 zH^)J$et{&4%MbbI53=eB`sQ`e;f?i-Gu&@-`C3-mo(i&r@EGwcI9mwL^5@}MYuLa~ z=5tk}k3h_0f9=`OJx+L~+oo6F55--cC5bg&tTCIEZ>9eA&+A(O!}MhfU&&PfG*+L~ z$YeSH)g(=4SGeI#EdWhw+1UAJVGvMT&n4AsCk0q&6azie#6fHT1EF4>(L`7tM$7Z(lKV_zt`}`%RscTxmV}Zjjs4h+ttNY5NEm zL-peka+`$exAP`p1Ku=m9N<$X5TkDc*D zc2x-dk}gwsYmkyo*QA}k++dU5e$qx4(uIA`8WQg!H9iTj?sGKjN&8ru^Y2maRV=xp zC$$Ipx4gmOil2hgNcH}*Wb7}=X{>a4;#`ra9PHLV;onc1{uv@c`(s>Ou?5MFN;6mYR}4B9bG_9*Q{%TYi6qlXaXEDks3QG9+?-Z1#ZF&nh^dLZG+z^~W1$rv)g(L?+W ziu#w3d%06pG+Y2wu&$lVT8Q~yBK}q%WQ+)H2jC`79tj`WZ|3i7%u4L*5wvH|iQ;_i zhK(npfeY2@H7Sn#)D_7KTd(A>f@KFzjWQp%pBqza(Knj;XBT#w|06ux%)(R>M!E&eE@>t{bN5hIXJI5jW65xBV&q)2|9%pE|4Ay+Z)_f ze}6X)t^I!&=OfnTrJC9j7Eo)`3zFvG5o~&&-#)A|GdRG|HPUFSKD4McIs&CW4A^^% z$KQQG>w8V(-M44dN`Iq*o~QWK znr7U|YV>gy-$yB;9p(9q-?dTv!QJn-qxuW)Cz+g&#cQO&nPQiKaaEIV52|>HC``xzm6Jq_Pr#>RY0W_@dq&^vT2&iAQ`G8 zTXP?fH8|(Nb8n)wFE#1AH;VK_Wmxa%r~L#vxZs}}eNXB!zU^UY93-EQY-4VViOp+( zlEmd5_4pQ&jQKm zw$0ikQOv_?kcAes9Oo$JTp6QWpJu_F(UpfpQ8)oGL0bVzVee-C%0?`Qm|o(8p<+tL}#KGaypF)D2cPYplfbflRrV7D72=Z5*_1% zNmRFPAq;OI+fb0H)q|Ow3j=b)_`*~>T7KH2@S^4NIY-UMzYzjAk?2q;fqfm{kA0<_ zgS!T5)2SutOm?nr_n5GSe>F67(l?24C;>)yex&|f-tk?MS=GYY-zLyRNQj52c#-7s zOy=^{7^)wQU}j%&U`={oi-wY^Z1%-hb-quP|9uSDKjh79Y&bsvH5^S1X!`6RzP|U< z<)99EuTwwvq;;2bcLu|yjt6A}MiU;!x8#TAU&0x8{^fK3hTCXv_4JGm^P5VgRey=x zMDIH);fVdr7r3>9SwZk%h-L@~ zHLZBJ9@?toSdN!!yIN<2A^VPpbDG_7Je{@LKnuzvC`t|NP2T!+{{E7b^-e|Oyf|R+ ztz;#< zXYltu+PQH)UbCzpHGoU_sqVhyT!P))e{ZiMTXNZyb@3Ugr-3aZnS-xMbY89RC&bB! zWEGSa9{WO(!uSz3C(k4B+)VcQK3N2>y~=;nQ+ElO*O_*NGpD|(0l^emGfj*>`B^}W z#Mr2+R+!1Y zaqfsdxbQvrSa*i}SNckITjT5y1VXdG8|VE+?U{XF9tTF?<1ryAp6znf?r~$sUxQ^&v?OswzJf`Y+AW>b{PB_hr3GDMwOZAaDM*;R* z1oM`H9|G0e*KnSX!DAmTq~?g5k}mn4I;=pwIp6jO7o z%~z)c`?T*t%p};8)w}Q4EZFAp>3VTcEP1(gm&*47zPt6_@Y}cFl7b~T9)UkBi-7hL zU8?k{+OJW!=FYlEw(|jpy5Io)_9A!sMGrS7U?hf;Iv%sCGcljf@km_v_4!TjVbMue z3IYErSdt457YUN>y6zWei;{zkJqM13#X0HXYh*`m=g#5P<8R3K7_pn&4u^@8nBo6h zBG{;-32&hO2*%Rmc0-lyZMZ`7hQ|nr&Oq&lyDE-oK`v_0-+eiE>hj%Ph2X4-0NDyI zX<(d#-MIQaIHJQZzoo~^tNuWkkxJp-+b7P#k}4;i=XF?ns3UhtDBFzOmm9XWyneUZ zFAhVdZ2O+*K>D4Q3)&*;pxjrCOT8hzSX%bB0wT+tuIumC4X(B1VWr2#?^Us6ovrq@O$orkYPKk_Yq^1wLU?=0foU8!*yGCdQt+cB?`jgo8h>hV&*DIVOoi+s z37eJ(laX0>tR!OTx~?h@x%>>+O!>5Znz)!;i3F65;ndOL@_-WyQs87|J)GW_ilo{c zkGu)wxJqMsg4~2xr19UU_MX8$RpY4*31icT{(v*zahWv0h2kGM!L|3k4I^V1 zLm}q6wXx<~!!D5UO(v=(Spguk#PnX|LIG>E;ke}fX}0k%;Y+02ng*=rB|Gh}_DWSZaw(roQr(h|24fKv*~?lhxZMlc0O z!}=}f2cnXSie!3J7H>Yu4?_9dnj=z<$iuHZ*>RkWLFLbj6x~Q|LY~6;bsSekNRlY` z?-rBqF|iRmPDoDrTL0R=dQZ-}*K`PJSNpt>xb56S@d-=Se_tBm3CE?&(gSyKjsQ`7 z2w12?GinWC&W!GJz~kc?MiFk8a_>v18gpL!YJGw0#kTg#IQUXpl@4~b;+^HdH{hJEH@+o-`3 zE$WP-93oUP${)jv5ORP^Qt`$3%gX!i6Jo}s5Lq3)ATQmfkEih!yV&OwmfK!5?4hzJ zHXj*KHt-1z2CXvJ{0D_*<@7m+%JVW!!Hx7rE@G&w7nyG4#L6^S9KQrfPteZMd6JJb z(Z2h2)b}N|?(Rnwp9kXx3mczb<~Jzs%BTCrX!d(WEuMh}lbgLe=J7$D*`cN3$v5@ryo4UP5Cmr5OV#7qAhs85Q{Jie z`ov!jUe?c)r9Qc7saE-b1!ee0mI248u#OmpgkUem%uRQx-%Sb>pSW?4e8BE2#v^xr zd;DW{?gz_K>08cfJ1bv=baMZQzme|*SAVn#RCl6@hI$7UmiUc@BUCWcxCDx4ky^HY z{(&{K(6bryo`*m3DZ*oQ@+skEbhmw4J(6oW*70^?xoe&L$@8_7hhOX;3!UIq0B->J z@r=&=gnDB7#O%vt$NiZ8g#n3mH8$7mOt2=a)FvLg^`4j$K8zBUk8)LCkL8lu>01HK z^c?bFZb1y+2zlq$q>cJ=jpz9hqH%xbPwS5@!Vu5dR<*I(FG|d%`vsB9G@{i#WZa_} z@BM(=yo#x~25VF`>-+mSJs=#Gf1SQLfg!oZ~%@$_h(Rf44snVcHM;Bd${^Cj)nx|axgU+DT zgSG`YYu>yVDhJ0>$p`!CUg%n0KGqOni(t$pl+~6WXs$HrK+mm(<55crG_r#@#F68BcGN)Kb#Ek@CxMI+tghH;?4O?en2%C z3;n#*d3#zCY*_CFNVO~0;pe{7@8?vkps-2x2yL8+SGu0*ivx{00B_J?f`W5=b;>sc z-~};G875y2k7_UMN9;Ijxn_=uqixR}r{shnUD9_405Ky~zG>3v!4jW`p)z>u_Vv@9 zM$4qO!y`Y1{cp$pD$YY=qYAySH&Lz5fZt<%Q%p9#?Ey>}q-8vwoh$RU9^LaOuqs6|@SW^HeTNQydEQ5%T-}yowBQ$^^b(zV@rcKda%o@Om zKoN(J(o9k;FL|)xdcqJRVHA5P+dP6?8FwRf!J1DgYSsH{8e}h@zBCFbMEW7?ACL4V zxx#6l9>wz$U4vg-=nvw0xrz65mG+^N-$5t)bBija@@XI)WxyF?2bKntJ*K8w*b*p`6VdnY*GpeGDyH2u8tVHq~L0*NAb|G`S0LMmrm zayPsuOV-1)t1`~Vr^)<&lG?uAV=AdtH(RPw)VmWKzNEALppkPsb}!<99*01qpkU8og(Sq%L2PX)LSJV(X=zf?%kN zp8ih>HM&V#f8=lv7q0CfSwAtC4}XHgcn(9*hlK#sKL88%-N!JVbFyJ@a1u+U@YhEv zI6{2n9vkc;vupSm9!D8=#;7~lWdTa3tP%F$lfs(XZfTDeJpzTA4 z3-GcExM4MyG1z5ZNf@u!Lu=jOZ_mKW;yQv7XY?+uJmlx-;ao1tA~7)iXr5&YD37JP zW`%UlL+-?MzOotq;b%tzkFJ)WdP$B{sLz0P_?5F&8*G8$gChG2o>;8UOdtfDnqy{a z$51J<1CQeUDb|=?VwSx7n7L&FaQS)5UtcqFmZ@~IHnfDW0}|~HHd$|x%|`1@Quwmt zhDu$%zaq)RyiPSWZWYw))eac>!ci6>O?*0TsrEg0EEvkiqlwyZpFJPtcK7Lhdx5kF z>$`YL$MoC~9Xfp7wS5Ou*Iz$e^SZ&qrpdu>$93QI)4bj#;b|Mon&wUi7-W!GFk%n# z&3g_e1Mg5EcbQ=MBZ-tMi5}N4q|+!NP2B6oy$BfmXiwnYZrbF!9Y1kbQUrjz{YD`7ZpB4^b!ki|Hub zC0k}fqyql<|N9Rx)O=eHTi?NKJ0;rF)~-4BArE@L+R z`W{zU1Q%F2P;E|>RC!ZkT^GW`gBt#tSt)AY3uxx<@Jk!``|<2TshVX=cd(sK)L%>L zT^|`EZ_i1jTsZ^)%zjW3WanU~eABYp8{P|h5##qv-;e_zmDv;@{0l?v2XkbG+4QsO zz|O{iuhD~|N=w&U_Kfpb64f;r)3XW>Q!E5ZV;T>KJ0_3gQ`QPdJfN_a0)Jmqx?(Vk zMjB)B8V@|0tz>!Ueuz^mq~8u4WEQQK3!i`OAefuIIIRik=kWa)mXx2YJ?@{f)(yu* z8t6|((`+RBd6k^I8%Gy!;76bRoi3i9^-EG0O^J|8(!pXKCuV&-jK5~G8r_A`^}e{b zIfJsHBek@gEH1P1kwRkosoj`ED~MriCXoyS&5JDQ-$VKf{@Ts@7F8BxfE4rf)Zjvi zpA=<$l`GiT>hmOe=2q9hA|`rdzUrP3k@_}U;pg2VFUZwb^?O{<58?@|6H@4WD1EQZ z*K<`Ph}##*l0|!59*5vhHRqJx9#_YU?(jRKA&Yi~JP!sMMt=Xs!IO5H{+^>V-mGlWs>NoO3 zea;SMgHnlmNdftFAQzEC25`tfpW5^3k}S8m|3>L61rb$LMM^Yr&bUTKK4r^A?1b0# z3hTZ=N2&$V!_~Aq0-96q8vc@SVJ!6lUPn)u^BEt6iHkP4o)%-1rXGIsKRIUwc|R~M z5u8!h+BnW99Q>d`N9BNdt?KPJ_#nT?@QXAVxaXzp1*;o3yTg$--`wjBW#lPgPWS={_i}ADS`^cj6;1(*9#q?ILh*`G|?TT zOdbFc_UILL>3GDJkes!76Q(od73(+4sR3~6>F_*gEeV9-3oZV9v?!TKfmJA+T?S`Z z8_S-;BLj^r19T|(`?fv{AWy$CkCc#N98MUh(wwu=#rfe^28|`$ zQQ@#<%$=Jo--cu0#N%{}sQUurltIjUygQ|6mhW#-^P8e6FH%!6SVa0W!@(GgAe>kQ zk%0){RMso#B2q;f6!$Yua`_kI#R*~1(SEYJ+A0CTDa?Tl7btrgyNTjlFk!?|X~BEO zvr4+dOdr^X?g7(yN5(?D|9-$h!Fk6mAI6LYE{}@SzMV?na5(>()7@}~DmPY$MU~zHUx#=!+P+sO$cSLAIe_p>wp`DzIMh>-)0s zto!hXaBCyhVrv{pe~z{Rr}J^LY=44>!g#{VcGKhonSs{qOf{ufjS1~SYa`T-nB#`S zO^nc~6lrM7QJ&{0BhlEVaKiK&4-c3t%9FTlA%D z82ftRWZ@<+zkQ%aNrG-o-tA3Y#zW!aiCabYf`sVvqD!BXb7a{fCUy#`!a4XI<70U3 zm)DSN`63f#{Q8y8-)Tb5U|pyQ^8Avij>c1t`vLYJSNN zIwJ$BbcgRM>iIQ#B!gF(yR{a2YREs=UG0Z{{21PWU;Q45>ae>3P^scddz^mPk$#Qa zayEbu9r*2eQbz41n{0A=w~>BSjB4x_O`6r zd!v|-M71{L<9Ym1n?XUE^*?2=GE zq)3lo+Yi%JJEBk6i@IO<6b6WcevUwo$NduOT)=-FRQ$>SUp+E9bk$(!iTv-;IZJyy z_|U5sN{y>NKgk<*ZDkzMLKLN59E5kDx1i>F@43(BKIO{*&iMjWnNP{vd#ug@m!lNa z&J3dy#K_#q78;fQNLNVYS&LF# zThkv+0e7WWtptSt1YZm{&L1$0aQCA~>~$FCkUi?TV+LN{VyID~84!y_J_WarcMr20 zleIa*6*s>UZ1>t;$%4n`SgP^Y;l!LHeDvzI-mfP6{$?xk6ob^foLpTtE~K01@S$K%4GTJ>n(9Zh~cVG`!u}QJkpAnO)>x#*q{F#SRL(qG`=Y@KYt%1 z{e>OSS$HTzCcnd47Wj*mVK2iu6hc_E6jB>B%g6g#d9-Ad0ww~^fLR6 z7(t)Q+%%*E_LJmhKQfJeR2lYfBAM4-lhR8GdtI~6hF5L*^B zk!6Mo{n0H0?-jIOzW#t1N%ZUOH%?w^C zunm`}=O1%FJ686by|c_Y8dQCU(aZitZw86Zx6Op#Jiy!)MJCSjj`~(q;urke6x4D7 zE0os!z3lsP&n&cj1{9!K%VM8a2TvAvpT_KHwA0%Phvz;h_IJQB3aVv&o`|nIillET z7E*{!{*rCM!Tq@N-W1PXpzIovi9DdMaQJyfgTf$1slWGmAnl&WEcQ7m_cJ#!wzl58 zo8c2*T4=+?{`f5~3xxwU1zdTN#v)LwZCy@QYDOA+^Dv=9asXVcTq%`!OsWgkmm zFm_FOd8RK8pWzS!1RU{UlAdb8CbsIFs>7i^bm=W)@zi42)aWrsj(l_*T6j0D_)>3W ztogU-Vm%i9K=YbawpP;wcXt0;IuI7%yEh#6ZFrJ%!a>V;e3~2pA}a>WdjV< zaj?E*-&sW)Ja-X^@Ub%R-_DHyI(nPa&tuWqg}LS17eLLE$KGFxw7 zDh{tXmew`GVzVCy-J(i4J{052GyKZqS0&?&$e9O38Z7p-LLlmO(;Ap(cjG378xq&h zNajC$q2iMd=7i&JuK`UU@8Lo_L#GH;fpANS1@yu3k`xXoegOztsV>?r%J3F03rS?K!MXd?_g)&W(mI;ck0Nt_%aN=zR#_53OWoIksEAb|Wti=>&q>fk3-;+v>Gvl3@I2LQSc z^=(cLO^Dq+CYwkrD0+R}bC?80A$kOD+2-Bfp|>w(e=`3%AKnEz!Hd41gmZt4)o;A= zvZPIkuWI{L>wUq4A|SA+T=U{|)lN?pwpltjGr?euX#KoOZ+D5d?V?G~DxrgO38GW* zU8``P-qkAfCMD?2kyjA%gu7_B=mP@@&L8C^pM4oHfX$r5S zeiOIP|Ex)wa*oO3P?e_OK+xu}=@c!gHD-P%JQn7>*peYvH)krt{Q|fSL!{S_ypEnC zE!7dT2$T-I@kns4=>O-3J#Ol+k94g@gSx$*0QLbahljG{@3?S_frAOXoAw&no2q^< zY5(XB)#N-szqeW^;h-Ans5FD0#32Rsg)ufM;1Ixz3h(ZMV-7AUoUZzF)BCdH9#V?T=5fCw2TziUA1u^^=#+Jz zxmqvQS>Vb0f^z>pn{l6>LBUGwmRFbQk1cMacS+hx=Kd)%@%v4Yfmk@z?cC_y38`Sm znH+a_Ur=^bqnJtN5WGzug1L~dj@f>~YM_}>`W2=Uope8E9><*Ab+NhDf(`*j-FU3$ z4tgD5hv3BDEl>RhvGq*Xd@1y>yoiI8MLrOLRs<)O!X@9xR>HUzPwg---zSSbF!@e@ zU4`#NT|mQ9{}fG>Vkb=-w6B}~nQBt_tUEqa@yyXd;}uO#iP{V?tn;(EJG%awYHL^ss8^4@0SC8sNW52+-5LgGkeU;Qy!I`2op^Nf8 z0=LA}F`A;xzlDjrC6`yV4CW zK+6Y)NmH}C_y$f65b2${;Jvz5!}W?mLSVMEG`+76N4sYFFjn8~^_!IId>RS7`enAS zwl!_T4GcGr8#1ZbBm5(p9h*-k9xqvcI1B2SbnovJ9>@z3fZTE!jiVvb7Tk7C30@5( z#h|!W>p~slB&ghikc2JU|9GH=B!A_M_p5m*?I(V5vh6<#X;M8NE0nlV9`OV39b2zx zt`+GTt@d^^s!H_Z`}O;*=Y5?2Olv$%!7y}mblI1_e4mbI59@>*n+F)!y^xBX0e?@tI?#Y_jZKr3Uw9dqvtp2kZkuX~nNKD}1xbUMvjq!3M4SiW)DVU=VX zJ+(TSTo!#3?mMJx9;;upBpLU-B0>2QB;UigAfkZ-9F?c(KV#(D+A%dZ#yz5qjOprA z_S;7mA(2Ke4u?kp+rIsV`F6wqGfnlI!x0YYSM&Q3sB@}>&$jf^`|F8Z**iORI~G}C zx7Eg82Ly1kd{zF)MZDsP1hVHxzseeM#=T8ybZ9qOZUAryl|ZWmx#Bm457054^9ex*)NT3(X+wX zxJ^uUq5S>w**ZRfa(Tca9M)37vCesUyk&2x6bAR2{@p|Z6kuEV5HM9&uG;7?+N;-rv^CB(U}i;UJg1T{ zW3W)q>l0|E21w%wTOc%<``hp4%XGZ7AhT33G-Bhld3+Fk@#hM1Alp6$MXUIjBBDzd zbQ08m)*0V@3;A|5lFp*r9Pp3*`Gy~1?86m=H&bswWEP>JfBV~65a_m4M~e4V_@7CW zyM&keq@`JKBJfP26<_l+s`V(oBi#}~W(Vcz!aSs#aCP?NmdnUjI1w8Pr+#52IF^cY zyKukNO-X{rtNZHZ;}W3AezNEC3tz!Q)GFX9*T+qr(F-mir{)U88Twr$8i6|OsMaQRlu>AWZ0I=vdB-Ao4dkj7S! zp|r>0n1rHHT3F|#6-Ax`el(BZlI7oNCKGOL!cBr=5DR6jl}9onJ~>ki`?Uh<&m6H0 ze#Dp9Yq6TY-*2*%BY!#G>87MXvwtAV@xUM#bM5Pi$MFXrBo3Y$#UZ~ueVK*_tn%B} z88}?<*a#rCdTMx2nmp}OBku3cH`uJ&e8An|cg7tw4rj$rcSKW^E)(^>nLDo=-NG&R z-W*FZrIvk>c5dR*FTNFU_Q+$n@28eH8Hw;0zFPU|9NlXKydQ@gmSC_Bdb8FHSiLD& z$-_OeXNyWmB-tp?ZQhnqt<`j$dHG&LYwcx$0+G?EC_qTeKXl5&wFw@iujp_sugcfF z@>>qTrRvsGa=!MYu=}lc;6Dd6j7HMo49K<|BZ~0$?P}TAaF)}O%2Z6!L(`w}{5(w4 zh%cEf?H8j@F4f(H*(^+T!v~=MPM+55AaG;cP?cAo)5bLfGBD45|5~pX{!1pYN;BCp zV~a|9p)(KWp%n6(#*~xl9pJh9w`)x_D4e!Ea{+0Z6lwQpx3)!Zdp){8SE98$KoRj^>x_q@Cqa`877drG@+D)tqLpqvYZ2D$B<6ki_uYApIQt-23mC zcQL#nGweS}KBifKA&IX@bVre{JFAem88btXt0#=$H-6RGg3ZhFP3+%ej+IMEO6ih* zTLL7hAr|4WcO?=C~gN8~v+92o!in%-8y#{txMrkz&)>K?Gt_YZvqF=z z+SQ=2K)1fUO3YYL_wLX&Q+cTaBgpZ@ z`8#W+b)Yv2Dnu1)J(-N@fk{Q!=(zr$+TO_y9iB7aR_QUn&layWyu|dD-xhE81Hh{L zq7Md6Lz74@OFeP{X!{3;V9BodnJ3>>uh(fSy7prQsz)K3P$I7r3AU-CQ1VhQ1p@D| z2HNDuR581SQjr}LfM27Tgb;nBn2_c9 z75_@=e&nm`w2F-odY>jZ*cXr+CA_Nuq0lc-OZPf=x<=)u> z{n(?TawD;MDGzs#|B#lQqJsW>g6U$ty~9MmW)wU6k|JNvrLf)}FKUoE_S z^gl2h3PwC1&EP0{A&HwR{()}5uUI?|`C8uA2tGwRryCE_D0EuOPi5&XXBy3JuiGVu zu?SKvZdTqO_n{^CL(1hwKJ^30A=u|c>CV>5bopUmf&qg(DvaHTLv-1wUv@|?+#9(B zK{J=}l~L3LX6dxK>wug-OvJO# zwmw*nk-NmsD%&jZ?x$1X$$1} zK5D(Z#GCBm#W_{cUYI%#pzf(r5g%-^&?t`Kfm2aq7NF0#;g&X;xcvg&k%CcliT6I! zpv3{1+{+#}tK{>;qGHD{;oiC-5;;}mU}DNR>eb%ocf9h_ah|)wayYlNI0i7Er3ljG zhxz>5&m^DQJ?F;j)26rN$e#lG7>^lD>YJ^SAcq^Yy`y z&WIO$o**hua~(;f0>E{ zS7qczvhO}O)n37(jS-}!<+CmkKwuf=3pw>t(%*T6F&eIdawEQG@1gv+k1WypB>C%+ zTHc4cB~x&6-m@oM!^mX*bk*3HD9!qdGQ7IKl9Rr|7g&=ktNrTPW!CsoS&;Id;AGy8)fPID4QY zo^1n;DY^QM$3odIR@Z{e?T*n;dUgcj=0YS~B6O*OtXjV?#e)-a_>NpK>ctnSXF6$V zPrz}hw-hGAY%xwJ!X_{W&Mrug->BUsaHktRiH-E(1e8W)DaAAse;o z{ST4o=O9*@{E_X`BaalmY;KRtAV#I`6TaAjH+l@d--hSUVAB1`PK9wj39M;+R2z6( zJQqJP4}Q9OG2a~YT7A7byoxA1IuZc#DC;Ond{NDQ;Kz#}-&!{C(5t!V?E!KXKIw9( zJH|dwUUOcW4y4_b5T?}mdO&XT!?7*PtV`o^-BD$ybw%+!y^a#InoMG74 zeRN|CCFZ@g`)m%-efW>1>sn3}45P1v(l13oQL0kC1EeF;q&@u}GCPyqBnAQXFJC!D zIj|@K^QHy{)m>H1VcKZ;x+HHFW-(IZ3LsL2W ze}>R`e55`jTnI?+G6T-a08IUwQu{=JwvPiJ?on%d4y^};WH zn!j{AaNbG1HU$kUmG>Syl`!f{?Z(T<*ERq6DW2#aA+)w<>qe>)m($}2(GBAqcW8+% zrwer#AlKwOwsO2ivXZVeD#cv!h7S8O9I-eF?X7h*n60O4{W*U2#Ug)I@$?ZkRw0cj zfvSFk(gS=H`ho){razujb2#mvI;jeFvy*A@_6aPLJkFOk4{iB9zFuifR#2X^)had? zT1Cv*$GNVY>O+>YIx6(p8{Ppp$!(u^YLEZrotn76J@w~SDnK#svq*oe(_if=(#z;^ z>mXhQLgBbF(LJp?fjV92T)c{hjyj}zCPmb~BrN%ZuVPga;s`1l9X}aI3xW$QJK58N z$2Kd+WvniIX!KX}0^#7%X>X+2Sa9FCm;;U4bN$GxeeJH;D3ia??C~w;8($UP5XzC8V@q@Tz zts}y~b)P@besd_Lh!3%My%ImOU`DCa0ZkA6_PeNR2mL@<5vIY#eT*j+|F8ImFK*&^ z^0&6rtJcE)@x3cn(DUvA4bAbaJMiv{tL{~pp#zR6j`ygwg8#}s{do$loKPCo~^TQhA>P2gKWY`!X6@_LtlE%cKN38%VmaGjTG z$CS>4^Wnyy8|Ej7WMem3{FQ%?20*rJdbw}h;AQvIBZ+bi`uTV&zMu%QtyIu!WO(q? z6qpr6jvrYm^(buBgDcQTh8UNHZ-?BS12hK!n3|59Zd3c%>*(kN^gYBDj1dN1GgNol zZpZz~l-Dd`&@24R)Z zT1cn8Ke76^(jDyw}5REkepkiC6#v1ybjdq@(HZ;aX~lP=PitWg1StcJeNkA|X_-l7C){ zd<1`oTuCYvEypQ$-8z40#wIJW8NTUo0MGJR%gOmT!iMj}OsW+g&a3-py9yh~i@%NB z?=dxJ|9K7|q^x6wevr(*HlL#}6DyZr^4tC5erFojUHae+JuPwPVBnAvwYG#~w*9R? z^IuOse?EuruN5jk3{% zCwFrsCHpdRF_cs8Gp2gdC12})f&NO4(7SphG~az=2roc}GMGEHMMyK@qNL+`Tw45gx=44k23r9{yD6=20xx1}cn^uA$ zO||;nxHq{>QvSQ$(NlHDI5zVo9@9|5IhKCDk!85=sHJ~7-{4+%9EUy+-rVc%gbzDV zJGC;HTOpH3o!WBMf=MOyHe{W>bJc@Fvv@t$U0V=O~IT}6gxmYniP)1xX?jI^d z<84I1!FXf#owXcL>yjl;`aTr^onK_5P+W4hbedOy*Hs*a*b}}4p%uPG=dgzr&6R?9D&gJ&FA3ReTPY&%6P_ZaMuw`*@ju|elqPS-cH1eTCJ~6N*a$Wl7 z-v!<~TP)ai`vT#CKKbd*ubgs8tptT7QKdcca)IjgpVEQ_>{}ImQJ%_*Fkr+3L3$(> zjH*zs*Lz(Zw02*)_8BlF)AeipQZRCV;PpCU2%&4rpRLloLiY%|_US2gw&EefvK1k^ zS5Lo@jWxt9!mD6ESplPQ^GRu8U+CYr|*N0PP%`7H<$To-sIbD}2_ zf7$0PFo|-!D+|L$@CNK~pZCoW5PzVc1=^&0kSZ3Bd!WF}20xDvN`;H`Yc{V5S}_F^ z+~)MLb#ryK)nV#k7kG=IRCc6&;r_|iEnN3~9?vvQl5*wu%FlM#qi<2 zgI0O1C_2dZcl_2L_9}d#DGAhMuI)wPOVa1yM}Gb`J>jTu!Et|<UDolet23{0roWi+ zU4M>^`Sv+&CVx0zGLg*eG)2f_M96I-!M&z=tLeTtzKC%{;Vt~={k}-n)>D}x%3ig0 zYa%T8;gbgV(uo5B-dPXOaN#WS7+KTaagWO;8oJ*gi#z#U;^+Bpd7~#wp7w|p}t{8?3HtY8p|XA z@+}pKj61CEFlyt~ugv2g$K&=OihWZKP-I(JIT|luF{1B$Z*oxRXaPf#&DRq0abqSP z58=mqoiYjb*~81#7XCcNr%vwUNP&yilaS%_ahhO;WQPEza}P~Pp}N0973Fe}O!s0N z@0$TNnJQi(v&Vgl>2zzM2ISnA2u7~I7oY*M*xyv^dD+#?A?(WERk?1c@Adb}2TLKv z`<`AV$w9%!4zTkO!16P-_8uQhX3lm*GgR+5a(VH7-vc0R+XMx3^3n;HY6$Q4E<$b~ ztdLDiWr03_F3C@{jqz-o-Qx-wERckxt%RdAw3=UJo1Ea_avLC974!RQ6zAzrR)~G@ z&|bsNFSGQG)ep9UQv05o=z}+F*L`L->@&q}2~$v@dplP<{_iiFAX_a;qCc;ZJqICE zGoGLx`rsx;?>`-R|H#CX#GWGmP_yRoeL8!zi=bJ9r*ZHgSg`%`zpBH)7lp!kV9txe zT5l$3mLHNu(;Er_N#84@de&66DB6j-;_C2Pj7xoRQd|F}y+xm5xbop~XUO;Y?RsHw zaWrMoa6NN+Qp_Dt!{xR%3rqZd`-@2s$(6Tf5Iwb5qiv9XHcHfZZ`EE534(#7)8IJF z+sEL|@b|d(`|Tet``KHx<|itl-sR_Euy5*zB~3nGXsvpxKnUK#w;nxb`xsvwPiCY5 z3lyUjNlN3)YPGEUcM81Aub;|es{BTKRlc)geXIw7I%v%?COhMloCb?!yc9wGjiC*G zB0Xc%Z&Fqmm|8OS8yx_N9jte}i}l?u-3c0mTP&0PFeT%t<-j?8ttGa9kQ%&c)%F0{ zs2jP{@?0O~{FRY)Fe-@nE;}gAL|AWgz25EXcAORG-74|edhuhtJ*ah7s z9C`IXxK~-%d`#-3Z}50z&dQBgDXV}q0-ju`mRm*ywQm)^59lZtz_HuXU+-7**k`jM z^MEYj2a$@nPHt%0pDu7Tb6_b|3l{><6IeG6ulo=`rl#&H-FE!j**;r+uDj(aE;a(l zUL2;%ayFpHzG=vslysxxW0*gFAzjm-RWR>gbsGnI{c~{Z@2|YL9369+|8m*8AABj_ zDLyPp9k>)b!f;(=G?}}rnh>7f!??RU#@62oEHz#YRj~|FLQ(%#UMbTixkD1C zUnyGoEZ1Y*RpIe_3Am^n3cLBq^BwY;XT;FrjE`SN4@lD%aLm$a09^*05F+-C+#v(cT<2 z;Lhx(L5+X}1MzVe-rMI$p*pXim#)J|VPS3lm#UZFIA2Fe<*=0r7gi$BC6w+xOs_7H zpv}o-HplQ0su86!g`TP7SVxcXj};wB)c|zJUHHgtRqn}!>=8bMPXRbyC$i_s!}6xx zH!Z)ymT7AzB!dJZKCV)9r2@MqM7nTdYhU*o94j`Q9ZymV@uc0eTQrm&guPN|nS{nZ zZJ%V{mpmU2xJ|nOWvOJJ%;T&nf1cG#@$}#_zb`HoOLX%vKGmof|6)YTmJUUhfcX)9 z!%MJ?1qJL$@p1}Uq+u#2dymms0q#yB@DOn+=uL#@v0-2jf|Y0Xt{}y)-ElO(uYP6f zN3XsEi++Rt)%zG6d)RQ;Z)^6)?xJYj?Irg3Ri+GrS3jPcH>Mj`y9m%&K6SV5fT9H;U-Vw*amm(@}#lq6Xxp zh0XvdZRvhS7#WX}It>!l~Pci7uso?DVs(GDa6Dw3+a8@&tMk!+^;kU7 zPB5I3QCdV3g7w3ZhcuI1+S!AIJ=m#b^^W2q&o!QOcg4>kuxciR$t29ak|S|LNH2&7 zhvZ+OsF;eP$iLHBC`HdaMH`3ES8!^oOCUnEf0$QitK9hYq9HbVp0{;7f~m%Ja0DK- z)4dt&+#qJ2@voqALSmGz?iaxMzE;cak&Iz{loCY!1R~OpEI*Z0@hOF;*=YPQ`z>uh z444BY4W*VTakN1anX+$VY+xH=!i;~an^HfeX$>(KHhjU*@ukC{81c|dyj}34LMtYWA1+bA*|oL%JqaJ z`Y2qbx(r{MUcB1W949xKWIWo|+qbCRie}#dy=@*uYYaB{ou@K3al%6te;1EW1v`UaBqO>C)NoYO)O-78)AaKFz1S^KwGr_=V5erGb> zlUnW~*xazO{koj@B`SAcoWtF+*Vz^z3&iQ0G_74THf#M>OlwK!RS8*2o4310oIV~) z1-y%;PfpiGk;nGT3*-6(w&q(j3{A59UO?UBi>Z1%8byH}rVJGcOdFVo5t_uj*(#H~ zezo5KY=TX(<3yR@cxS>~d8!r>MzB}k9q$Fzd&A|V~CpW=xn4V`IdO+rbiG*Fmg-N?G0e%o3+?i4s9h4Jd#`T!o!E$xWD#N+*>|;ja5B%^tvy!f;tFK6N6q#^ z{AEI_Wy6M=j3v;Y;wuaNwR>*rS(p!++{0|%Ki_Emw$tif5Qp@J>UYjr&8E$R%Vmck zYfb%7(Vh?CNtIZ4EJd$5Z+!j|zFe2q^`?)35wZ?(7%eo_YQ3p1#Rm zxQBQ`D#UcoXny^GIju2(cV1pw-do=dZTldwadK4sEkDEx$|BQz3CuR!))Qe57SmII zY47Y6B$)`D}c>tEOYC;$kcuFc=1wc}3kHk8yDGR74_4Tz>$5p~-arULe^F0HjxLnbP}OoX~V9FQ2rBb~T`_Ov7-<6!@O7pG%>+M@7q(h9qWu7pU-mk z4eX{q_~Zw~^2oy76rS!_S5$Abe!xK`cdDtU*z6PK_*~gJb!xMkJAajxbFJqWU4OiZ zLZnGgl^@-o{DAm){6t28*NQSE-&o}BXL}!oA;~5d1hg=laT%4nZ;6n#PUnZrwA6Xpp^sL(-2 zwETQ(28pyDKU>g<9(cHgd#tpyQM&)K;NP*8(7U&@AIM)^U?95)nI}6 zMnK-$MD%D{F@Ste!uB<@&kD{9_j&?*1M~Tp#kXrSO*{lv&9wkL;STFN#!b^`gY^jx z)8hT$t7Sg)poZ2J$tUk)Qb%xU8P?zHnHh5A3y{NMFL1d~PG;$_=sSLnt)onrkV)JC z&nI2i*XH#r-|EOtnRDS2^G`?w?n#(EXRuoY#{U+73_zVW<#Jqq`&IS%2nmGCr69MF{45CVS$3r*f!(JQl^CvL7PH_wEZQ zkg6;4v-bTYFIq4pGUqk#I=A!vlPz8Xk`%s7bN1d9rufZH-W$oSGHMX{6<$eA zbeJfQ5RLjxRc{~kLxDlumviWgC4mtdvb0Znp(};Q7P@xVUURi-60qpZ0#X2Zz$#c|HjH8u1xj>wWauQJ?;l^3VGF_A8Y} z)oSUdaB(A=ca%GW%SE-+$DXj0Y2x~R2Gq2fT9RIGwq6+~1>MqpY0bP)(gNr76`^Da z0|cuX+Rz>g5dvFA-5K>vc>Mmt{fIn2lQ$T{`;DGdZ?FpL31{$XhRgO~D^(n!*Pcup zJPC+JG@H+U^;qo?+ULAn1lsFSSkW@US)vfC`TCTuCdlg%)-)k-cm!SWFG5H8qMU>} zAc!-uHIqd|-0gVF*&_(wW_z)1*%q@Gk#U)Z`z1@yR6P&vgo4*wV3%q%#zn|WD$gF4QZN#+3XqD|@FWZlE>){6!nJ)GT{3720tk*sG z!2`_wm?8ZYOIW4es#Y=NL*MyO$F{PSMsAbo>d*A9c=lJVWNY8kOk9g!A3BF#`M4r_ z1@wD@T`^_thB)vd*Rl_@G%eq@sz1Esi?(N;;#;zVCK~rsP?KS;zd9Z?;qt= z8{Sjr%a=74xBX(YQ=Q_k^ZZ`t?aGWBHr|t58^srAVz)-{<}`qk%9)#!JC*!;5Y?<)dsY2< zXQdHx(YP;2x!KoEMfS&?i*uYyR5_rVt-Q|n?r205ioXynNW1EZ?yo4ZweoCWnoEow z_i562RI0HGr8)73y_f_o{&%e19})$-3yyswSj3}Fk@Dcm7LR;+4!S>~Bjm;~82lba z-=R4tO_2M#MQkNp7( zWzhT-xWWsohFm+AylBJMXewzLqHW|t>iK45JDpdK_s)i(h)R$O>NC^7ik}_gW+fzD zc3z@$(T^}(dnRjS?6XdPB>vF>k*cT5i_+T=m}iadxCdKYIHPtYgkG_Wa6R=?_~hlR znSb>jU5xVdrOqJ)uPEqdE_Y{km<587`#oTTE*D#a+C%Kt(o#x!4Rn(bX?s#_mhoOS z(4%j&zYjNZd@QESPYj%Z5T`x`GrT*}7`5Gj9$>WLLg?%q=4z<7dz1=qqAsbeEot)$%nPx7X@wdF zGtl)ZVxPNWzZ@^u9({6FUUYdkebnRtzA5(|0kRV;`?eVYy`f1OBLB}CWX^Aw0k?{;E%|zmv(f!wI;6U|#JvT1AaHBTvygzH$HU;rdA#>}C4P-ZF-)S^8;)wDH#?CG=BaE;w z4vVk)B`#@_yI-f8@F)fe99dogT&yMt=eqdmbO*SVeJh~1fQfRbjl3SrCl_rgiYVRn zP@f^x@z`G82_K_y8Yd`G>`})4-rcADgMgp6NcgFLIHwMpRQ@YYzN_cko)+$b0y5i^ zrTLjseL>IpPWgrXoV9LVQ*qZ7^FzJEQP;2cX!XhQuI|6@bnzY#K6kI(J*81cc$KcSSO;?n-P^H~MA zUKq3mKECEq*6Sw<_5qGe-`-Ej@%|Q{zmp1MX*^HSXJ?qf+4-5b9EQE+Q-_3STEP+2`9)8oLiW8*Kt68_fs_}^aO;0qGcG=fjHfALt?d) z6w9VO-<}T_`pzbGnP2L($M3lEHcnj?TNtn>fD}U;ua-c zZgEt;Pvt)^xZEo2c&^{$Q8L&?F;79=^^>z2B?5MMZM~U&cb45abBO)ZSK$zdhQ?kT z!EfnnIKk{M(ZR80#?A&GWC@|T-|){r_BCQF`AA(k4t1YcR5>!%8CaY)$9E}t&Rrd! z!H5qcoo55hH@0p2^iQU}9}s{&9W{oy7;&JdLfC`12eh8{ZSkJ9dT1qWbw3L+=PQ#b5y_;&5bk}H&qP(j`*ENp3?gcS1` zXgn~&L9@FANP%<2Y~l(iG7OGR8_5rMc0!|GxIb_Tys#$!iQZHV9rXrT79K+$0o~n` z_zHe-jj#U1*lDS2E~h4%#vDc}BukJEdkI+bIV&@Q_8dcC(^{r4A~WG~p$O$>5D@0RnZZGF0Om%SadU^K z>b$}Vl+e@7f1wArkCFNH`|wkL_f0+n&{upTj9||3g09#4_cRpz z^E;^*{k;toT3}qb=#8HUaBkTUxkG{CF{lfG0>|f!Durb{>;u6*f76uXubP=cDppyK zQS`;5CY;KO_fxT{@Nz%`BeWYQb>tph9@z4tf9d7;`*bNo-g6~umlp8mlu){><(~2x znb!4KelFF)t7T&E!82wS`eP5VQ+I|mRn+vedOs1~_iMTdA7_7dR!a8$w1D<%&;DAL z&r8EntR#a57n-ENv~YujZh|nTd<@kZR{El$H67Yvc0YVC-2r&i3NdC|s!@vKh_{~U zq~NN^Tw%H_3Fo2Vc7BWd^!Q!Tmis7|Q}}~pN%I3)pDszNUt%({%Gj1x7zs@KI_d$4 zwM@qYDf#vm#lPG9h-5gcj04o<;?N+TmfCXquV;CV%cSi=n9=m!05LU7LAZw|@?|V~ z0vEEk-7H5w;un^VvzIEAd$CG}Y}o370;fsDq$51U{FEz*Y$6YZC#zqEBlW1KBgliw z`D=URehBSWFTLplF)*nUn%uX{?(zX@7nEIIfJL${kpns3QPN)a5yO99cEjV**3s*4 zcgpmh#eWVq2j}b`_(yfhg0$ZRApuF){n&&ykxoKtr{b(d*U`ySUw-txv{6TXZ~!=Y zr`C(y!UAaWmA^^Y?g|ssc%j}rberx#r}4CD;jBR-TLd>?F#Vo1EM_d{=_X|`g zaRX;(VbDfa>aQZc&V0s0f)G|3EFjwXY15bYemev(VX@QHm*@foD^ox$EuU@}S0|1h z#_HU-2Q|?Vg`=Sm*69kQa0cveTc01)1)_NHCaD$-_RY^!ld&gZ?QHe?;sTq4BXg_( zO>}!WVo(-O7nr;&;dr#fsZz>H>E|qdPC?U0M~Ki`82S5KM=gPzwAB%VxMaUq>Ws}q zNG<5n??pe1l8_+k?C3Z|bEymK1Tu|kRdVie_8`1c7^R6cb9Aq|v%&jEZn~iQ#m7A$ z)4l?)2FdrvS?-l?W~zNN!5%;$5xo)qLP{1wz@svb@$gXh8CtsR|$iKy$ne`|@%NZIf3}}G&40uYEljdp(zvW+B zV=-RGw-hiDABw&)tYYj>i>17=Dw$ReRY)CFWnR8T4FEKZ--GZ=0$6iaC2Qjk_m|mT zz?(`OpHKdP=E80Fd=ly*6Mo!s_!$Sg{_H_ljQ3uKiDig1;pa$7O`E=(I)=Zmp#Z>K zP?!T}Y5%B>p^-n*XvUr>+%6&=xA8BT9}d5F73HaB;~R?~8pNN(pMoq2ql*EcEgb(5 zTz0R0=>64t-fR+8(&}}|Jd!t`dMMRM`iF{T^gJJby{R^y@;g6ducc4R9`S2zkMh29 zgZ#(kx{AzSlY)G#$~z)|z|RpdY6@LG%>V+p?kfuVu;_1x0=XDLFL zUZOnD7vl*RziclfAJeYl~%K_B(IETI%)OReV z_gDx}+YvE#-B<2@PeDemAHgsc61!CB?C zod#IW+A^vhJp`4lItGe|dU; zchGnPEkch}tJ9hG$F7@-`wK_g|Inp^jU_SeBbw9H=X;P-`2 zH`nfdI1o&*WeE$P!qfgJzPc^%G_)mVw|!+#_Vs?G$;|pk{f9ysZ_|#@N-?^N&-b8t zcjIPWZJ{?|+T?l4{i7Jx}LXq`AxB-r2-M&2Xn36LV3YzOGL}v6yb- zFA#=RgLZOeEi>QLEsUPvsj=dYi?tHn>GkQ3maU@~i;vSj>PdUqu1kzm?xy@OVU2aH z)Rp?t?&t=P?Zr_QL@4l$H>*Nx9*?W_bG(~N=lA28)L^<6{r23bVG3a~k730@wGH4} zJoGby-YeO3Pm7eZ?sjJ`_MES}8qG6Elnk2VP>M#G8?opmR*a`0s+!sg-M&xw%@~{> zI=ngbCrK0u_j`LLM9?7^wWkNpW%+}p^42(*pd@v_(n4S8vS5qC`|`J;W$-;#;-ttG zt*D2UEjK_!z%+bQo!!i6b8x3 zb|DA5nLmb1m2&?P5t`}hxq4Iwb5783`Gc&ywSCq9M5VI5_n*L>w$9HsLgf|ZDES3elg1Jc+Pq5d8$I$`4``cYxj+~AOhAs5ObgspJ!p( zko;KF`4I;{i7xN6XBr9n)wX9_Z3yd+Sf0`2M}#n0cxnRlz!U9)_%cV2t!u-5r%{=@PAlTY9;9 z`MY~07C=uOj5Is(c?uv^drH~^@C^6J)Nx^JABKa>CtjZV-oUmyI7T3jZQcgmjhD<) zD|Dbrf4>gMTAwF`7PPky-yy)vCRCW{g7#)Nf?n!hX$=aofVX6f1jA+*XlEDd1)E!? zZ!{!sWPo!YK7125ww#kaE)9GQo+qF%aIgJJW~V45eOzu2u;3ga zi^%$Y;`TnGhq+g`NWg`0ILGrqvqFwfXNy`mGg(cq*|GAg(d&bGD4saf^&nbHp5G72 z>?3j8%GG6a-ZKVAtks$hbIuxoHUie^#k2&uM+5sydY6s#NDAtO?p541HFP1L>3uuA zpy&6kQEmU-*V2zZ*^N0;tt(4xKCrLpa2K%%S~+n?0E($ zGJ1F})$H{UpK-+k#q)lj{y2)<08AqF!!tKt*1x6Tl5-U|`Eb~4XZT`1ja+I>X#S4- z#QuR8B>#pR)wAGCw#Pk~mtQ8#Qhm3$PV~{=BdPvORE6_Od1uL#rts`LHx*)M)!i#| zK2IxPb~>YQxR5ZMf4c`P@e#GvxBF|_OUGKdhxytau-e|b^Rf(&6lUGB?elmU1%DEE zREv50okBLFtj+qwZqfwF?Nk$tUif~l!O{3ic#j!?qa%Y62s<(d1cqz5(faEO*a03& z%T8>?sf-%s1Kp|p)!}QOcSjb+2?WHqaMX!y6#oRtGbaB_fc1ku!%5;5PuXogT_%cz zNEF?n9m|UOr$3yvyfiS-Eg238ME2`lTZ#Cse(Jpo+Mv7RfJlKmPU8z$kbPcszn)h7 zuf50br3AljIG<(q2rhr4%(xx7@lq{!Tm?Ta-h=y~BSMYm(e18}gnyN7j+^=N79kJM zcwkyEK*8l(>r%5VQQOyxX;!{*k@UmcM-*IGYaSkm9$_qvAU4vmc#7r_Lg;exEm9g$>ylO zvnjdIpTo!hsMwfK)Ix_PY--Ej^S7@|m}~O>k~9m5+wp2B%<27gmx_LgNs^3ql2jPJ z6#HHjgRpU+0sXrB9m?fNia<;&H#ZS8^2S(8Fu!{LPO&O?A!9eU4w9C`8YI7FytoU| z;>C}NywqmE}B&qbU~ zFq|c!4hg1^e|0|}4c;{)Spd4-KS+g5yiE&h3(ws4)ko zqHXXE+02`^9oS&cFoVB{>h|%IYr^WYcWTLQE#?pP~iOw_wfSH?Hg7p4PQ zGQf@C&y*w7TLtEVSMsL@QzYVL)K=XBf~Eu-2{L0G!gI6rhn$?ou*slLf~Vo+^7nPC zkLtYwXLQmk51Q~{+uHtVZLh8(K{@#Hgi6gZa}9CrtSC|e0$T2)`r6)6-$n;+zrObN z&1ksECyD5Gc#0vH1Jt|w+f2zkv{*!s-nWhNFsP70?f{eDa?k40=LqDGU`rnRk+D{0 zZz9}2;PEs>Wy0MK&11cqQZ{?Ry6H`fj1jyZ{;{gA1kM&!nS4=TDj0LH>dYgaf-ZA( zgs@J0xCqGX4d!hXuY%{!{6xUw3GHBl`FfK=0|JWIzL(;BDBf77RhN#(?6gSXH-*nL z37?}?`diU(2p>i&zQsUz^^W=;E{W*K5u_vQv1DM@gum^?Ug1)Uv;3(!ci#epJfCve zzL6jmg~rr5kkrC~b;NK6p;M(HSI`TBa>eYE)H4`E6y5%%?Esm{T)4Am2wadB>Pm?piKJ)__`fsgDH zc61En5yXKN%+Y|{KcgJd zvY;NTG5(sa*mdz-{cvg1HrRuUD#%<*6o;VQZDR!vA*Th=*%&HeE@J4D5=#C7mDT0i z{78h8Q3+KQ`uVQ+ZTLi<9^M>-x!a*1CNwO|oz){`7zc&<9XuN$ph4eUE`SXAi>io- zxdGLkAjg%@FwMCI)^@vG#Rh?z$;tI1UOuIVY68}N;jn(kX?qG?{M^#T0YaE4;aChR ze%>pmw8(Xm={;0OWz|$_S0N|~M&2C0OCmd_s>~F~!81R)XZH_}P zr%D>hkY&lTc%S^1AuB6+CTKz*rDin&d^f)()h2)Pff$NH2wEz~DtU0FGxoX&5C56S zCTVQ%uXV&3%872ym$3~d>H|Jw^eV+UJOlmH35WdEC3gR8cSaS$5!pIoh$G+v=o;Ty z=$T`D2)0~iw}N>h`m9xMhe{qhC)Fx;Ql2a=|h7{>~L#B zNo_Ok4c+%MLiFKyOTRA>=R}S8aN!yIP|VYbu8!z@h{23q8jbkWnGO?5-**c)p{TO# zMAP>(u4#ZjhxOs@ui?GIoEV@4p~k*4s6|@-R62heA&=iSq%KU>da|_09j`L;oQ?Rrac6zoHdbW`tr_` z4~n6I%(Y(7z;hj$b?53wEw?kdF(t^G*vV5mOQcjxDgU{6VMU!^@Ad4&?)NeriaikF zb_}*$%JLol!42J|E6ItFy5A^$x0?_Q*mbTHP!oxDd#pVJr3 z^#I`8``NxZP)Ho77Dlbg_2X&mlDcQ-{mk}3FZqtSLUQ5Opa~g2D=~a#_xGTj%6-Nu zx8iZizR&Er(vCS#pLvUmHKX-8JG`rT?m-gX$0oiEQ7jGUM9;GevB z`G_~3IhSBb4TREZ(? zS1WX`G)(B1!pN?M`*}?1#t4LBBsOCI*AkoheKX)bsCzm}zGoCM{xMLINI^CQ|X^>9e;dVlN{MqF?DU>%q~kd zYm&32EngU2saP{$2yDTzsrOnw{Q%Me$<4>RPsTvy#Nb899ayJ4ipRvOt$h{vm>|AGx_LOGpi(+k!f)i@b_f3jUtQK&&h!R zrhZhKC)EFDk>cCwaB#rcs{p8vpTomLxx-(LsA~`&*g8TLEnGn$0{-qQSyLl_ZDW7m zz-8FqF8FD^siGCp3sP0*hT(P9kfT-NiT-}9JJCy6(`5U4cJ4=ZTA@u5(d4(ZVN8r@ z3}SmOwK^p}1KC8V@PVWQ94t~G`zXzangP6xze7wE=seKes{F7e2*w)x%!6-Q&^1>i zl$rDQ3n{hWL;5`+n53lKfhUi~*aBygL}75JId|2DV$&ds5f0_8a}jRHrqMm##$be@ zi)Ta8=DLp`yVWjA=JW(9WBmDf*iBO-eP|NTSgvpg@X9c1q1MH2wC^s7O>*q+kok|L zGuu)X38LsPF%OS`0)irgDDWoAq|7sZeIM%fTGiFJ98i(WjEp$34`V&K5Iud0@AK5p z6E0-tYU;zHe-C0@aya;!)GK+BZ_B?zjcOrykSEUeO^^hcuUbaVUAVgRcS;ZbmHCn| zJFL#6h|W>=Z-2htOFQkB!@CXXvfJD|k$F-6TpO<6W0&D~?s{?zdAZ_CAGLG!&BjO( z@2eUGP&wbY@d~_eXEa~nU-xUK6&{5>U}=9rq(^4}r>)&%U9Zk-J!|QE!W;+7*KY9U z;I0I*fa32&DdE$KU zE9LyiozfDVG+*kB-xhXXOLTcZwW#mmcUi&R{M|vO(k0Y7{l>>0+R49=2SjW_i6VQ!pefd0Zw`&6w!+5zEn;FeR!!xf2w2LbG3%SxqF8|e9e|Z zCib^t_7mr(iZ}aroDjM0-GVGxYtAJqt~|6Mo%d@zY{}F6f`2SkO;S&ik?)Y*Tffny z&8r&;(u0LBRJ3pX{j0oBTdic9tvO57g?^pj7=xu4vzj|R*vlya;FV`#=wyR!X{Co` zcqGZ^)}?Ht->w6gE^{%Ab8B$>OmryGvcrzDhQy4JMI0G~3tPHT8fee9SKXlLP9{e~{h?dS_~=N8ngI6MgRWSt|I) zku|!vfW$_TyuD$Np^6)K0G2x59DU#SQPF1|vmmK+{pc2G2__HCEsuXIJHMSn8*HSb ztJpNU?#p#QPZ4VLtqs}vy52yByZ>F&+3CT@$oX8J`=uOtL|oIp)ne1U&n2mNm(F7% zp)uao=94zQdR82<3d=`p4Wc{6^I=my@^kl$yN*HfRe?9j#SbR)OU#$-_gVNwc^P9Z zEQ5bb^&G@9u;b%Cv#b|MVhuVFPL?Ik&yBh1V8c=usEjf7$P4;n-)J=^t>aObAXdEI zzOmd;`bYQjh#aC+1y<-W9f6pOlArwU-7$2}Sv~kZw4k*ux zrhJ-v?;9-k_VN-tac6A?IrWyIFp48dxmxkGZE%O}d?=5^KEJL!JLp%7a%!G96XP7u zg}4V_du1^@bg($6`I&L|sHMUX_40dh?p+qd*&{FyE`})C)gHLcl-d25IeCj6-)37C9 z4|mQKJ|Ik(_j;j9g$_)%F-YWMkIsI31!kX#v>QUYBYimDK97W`q}dJ-=pMcY>j^`@ zMLVS{Q>zvEE*uMxpAADTsY(ptC4e#3%jay~zXkxoXCaxv7iGr%o#e~rh znb}W$1ibp7vtXLT&Rw8s<|nfl^s>5NQr-(F{yTtS%e26QIdMyOD#GUx*xZ#pJp>36 zh^ePIC3#;@!T3$5iVk36gz;SOq&}5vx(+3;I(qs|pw^NaQHGC{x`%^5=ON-fZB+!z zJ6-*qt}_r@L_vDLQMkVbWr^@dZ+~p~nfp34e}2Gy8IR4sB9)R%E5 z_R|lx^7UIk(~)sh6kkcFByoImUp|HH)0P7jLJ+QA=MY8T?_-#hw-?$#b-_>LcUf<~ zCYf>8;p&u~dv6CH>b<2NY%bhbDFDFP=(!!W^Qo^@Y8k+Y=Jl7Og1 z>2o3Uadd!O?!D z@9VH0Ug_Gx=jZuFsYkC4T4a}7?B9rWxIi8RtouGWO?(7PF1JOADqD4_NG#-H!Z zuj7x)li3Y~WbhtE)CB7+bCJfwMnFPRBWBn=$-$#cYkTuBeIhqQVTC<4t2D-FcwQVn zdP3IQrUxT5$Lthgej=;-J2)k^dFF>?$V)s5`GkMyScvwvwtUv#J$ z@E5Uduk5}R?5@D#Et8m>&n^Cp2kkXWSS9w=K-N-pEFnSZW6xeT9``$Is0Y3i;M@e4e7Lzt}JQm3P7~4i7TYZ#M|dN#XBNniu{do=FVrn3;yWv zKedg3rz8mQ1R^8>iXXL+{pJd~XD%sczy+1M%2n?4ED9tcQy?arAvZ373YO z(f;gJHnfScMNLj4oz>T@OxvGeT3bsswY>e@J{7IWw5{D!lLZ4!UNUW?XbrE&1U)Rv z>DN&=FWw2LOGlXK@AvsG@*(-<#6E*{BUPFyg2`A{6j2!7oZ6STeQSO}SAJ~yb!iLT z1?Ndh;8TA8^}o1GK6r>419#h{4wK{pJ+D_fC>}mI{Fli+_yQ8?VotnjMv}aDkm&>@ zKgcwQ&lf#s1ZW_?_#{kxb*P?paZ5#Y*dTFmc*bY*;nzY5dDvq@((idWjS&jT3*p|L zX%#0z#E28Xf22pf{0fD?IRDCfd=lj(dw4S6K7TD(tz{@585NeWZ539qk98rWz@u&& zNtk!n^ZtOV^7Wc!U`kzrUtpY0d=Ll23D4!e`?$Y8(s`>dVUEB9PyK2*Wvcl3bat12 z>3yZP@++s$QF;!GvlyifPjawK9>VNVUYKoB59ni?_dS5<9&gkp=DhFkF&tpUjVybd z&BoPV@yiS6^1ENx!83u^?im|uv?d(&u}tlCx*F|u{xUJsxR8THSCA|~!mt~mfrOROKi=UI6tcU2|3>?NU zGyb4_>MFPQPbJsrEV_`T8aUQV*yl&-H-p&nQ5~{avvsxQKzleYW9c1>m9}Y+7Ca{( z4KO5>F0mNmDJCai;Wd$@p)`;#h>RV1$*1A2Jha%{$&2;4YNuMw4O~*qTG0rA3fJP> zIR|RFKF;CCydd3&w;FNaQ@=&|MxTtV#ybtc#aUF)bBv%(s4x&aQfl$QG~I(!3np*H z(+*R&HIR|_KHGSsSvwkgSNE>>5WH>l3_;9Th^O-4#gaohce{If%m$KPdX>Q)Cb1N(UW$QSzNuhYke+I3Je`tT%#QCJvAL1vQWKqy65m`%Yk{ zr+uVg>9~$fK0&6vjr0X3aMMh=y?2Madh4HMeElJ5NcXodTFX?Q2`s)-R z@h<*;(mt>{z5Bw1u|ZAw7F|SW>|}COgsu9(OXVS=xRJF~^QaAOwMAQV>K80niozze zMWLg3c=~HutotrOJ+(&-hz;tq^uMdJ6V@SC8pzLTdk+Q$%@dmO^nHrmEy{)D1FGB% zBHq#I05@#_&MuKZc-Z%$y&7Hjt?a=>OW0-ggd7MM_Lzgx#g2!&l*W(e!Zx$-T*e3B z)sy9dI||vZoCY8=v@_>RA^bj*jq-Q2FvklmYIef>;%bGQ=D4ZV2}v|V$1O-5F9_xtuw;xSXD#4k;Q zxbWkPBkKZCf^%b4Iy-@+1w|I`qWdIVajoNN`1y#xj+WbaW9os?m>%|#4ByXqBkK8m z_m2u?+n?_-Ks8YQs=`r65{#zt}tAPbYJ>*t!lfW|0&6t-unN;#}NW(*(o|nWCH0pUE+$|I(p2c&PQk=G1>O zZ)_iB4?9a)cT@ebFL80X(LqS=*B?8Vn$#!56iXjqzzd`@Q}L!)Q?7t;0pKc#1t+>Cj9dM8O*PqN+ zXE@fozmIl%`*Vm~hu&I;C0R{^*IE6R!`udti?1&mT=3Twz$HWI3Zq30m_=k1X&!)y zd=M8-)Sp=s&Llb{#v3efUVDcpuxGRUG1}~!DQkF#SJP1%uIBim_HCx6NQuYXM%Bhrd3li;XTQ5Qx7pYVYW zMm!NXngKU_zvmW>LU}vYo$CdlWJSTc!TBVzP8)Bv1i42XNsxX~ip=7D8(gDCnxFhS z6_3q6hq5^qyR=3EQd@?*KKJNgr(Q7y4@+kf%;TD57=e!;h!Q4*X0^s(;K=ukt~hNZ z3H%%F#IowX`EcPHLZ>~kFk9wXEn%5Dz+=0V(MdCR_WEW^*4GhQHEJ5o=BMDw2MH2h z={HinwcP>`m_o5Z`#WE19&Zhar`&9xBkS--nBtt#JSK@r#-<X+Ye;HT1Q*VPCH!fE}46u@Nu0^pG5cbONJ(Vk;fgirihtdgtSLp~d-Cv4i5c)q*fqlI)wUdt(Xv$^EpN4T>qSWY(I$M0iTnE`QnvXyYSMCepf%@|E#Q61a8$_oDw@v+yBhHNcpMVsa#6GSVm|+>%%lrQ zAt!R@2+P#t3VV*wcJBARDO8P*_F0fG9Te6pR9Z-ITlV5XQhVJVdUc}#d(mTrc--8TIza1A^mh(|8;r*4r*9k62`rBq?P}SK% z48|YHD2pT(+P*)9RC3#<(f{gKWFic|8S495z-$QhteeXk2L1d=aNzWX0J0{$i@K!V za8;JOC$l)(MR+xIMk2Qi87TdnFNGg;{AXP00$k@mYu6K+$eFP`(ySVi^I})$rc;a* z{3SSjFd=pe7|J%lWG#h`1_u+8vOw$Bo zzHVc5s}RuFB5ln#qGh8`Z-iwS0?z9nPvdbq=nQ};_~PZwa*rlBUzEhXz+8Eq>VyyL zGhBHgITWwTjR?G~EXsW)q^LH12SpVR*L@XIZ>1Cp_i_1wU(;Hsc0Lx^TfI7a zirUEVZ}K5WKN7lC866I)Ce0&9@T9u)1mSjY7DJP&XiCtg$Ml1dq2ssHxsa(X2NDBw zs(gmAr++D)YOrgxRPa!OIe&T&8zlY>zMtW$4!TGJ0D*%2uNTVl2P+qtbXe-;;cN!V zUL9uu9DmqzV>8&hA0pbROwu*r+w1u2fU>VG`&S`Rw$4=TqM=7IIgh_WFb(#;8w^w$J&WifFMWMm$Ywi}1SFRJO8Yl@o<+zE!U@)144j<6?d`(HP3^ZZLl49{R(R*B8JYDSq$ah> z+#lc1^>5>Z*r%526Si%8HBr_cv`5fSkhZ-&T?U}%ehD>rUve@gHoNTJ;tPLjok=b| zra9dA#FMx zn%+a-pi`9%muAZzo%y0Juz@^g$MLrO*w^8=9eICG86?|RDxL@76aSS8amxXY13pM3 zv|x~}+l&1EFee`e@miT0ylD^A@#z>+`_p1Ti$A=Qmi$y&LNl<9Q6RdAMZH_Nb$!eQM@GH*S`t^CRD`YNu{9$!d~ zh0Wwv(`Y=y8M}lE*tqcYMQ_QOG=T*8qif@VOkYNrtz|Se;P(@6hLGBM{~X6{gOAT7 zciOXiB0sHndP249-cD_?N{ec z51_{`r#mKw_D8(?)-JHP;^;bwp(*pt<1MSW6q84xZArrqZ|zc>K$C;#q__R$$Qbnl z(*1jJfG^S7Mp0gZB?aL=kJGn9y}|>06b@k9U>#6D(2wD=RL{Tt%dv;W64FJDeLs%eoZCNy9%s?KW`ddk zo+PB}@0OrZYkuPd+@Lytqx{Z#1d=p` zX7J;=QSL*X_1lDM(q*jJ+hRLSC%!Kgzt9Bxh(6?1#F>=oeNH=_^5%T_G3ysT#Tn{) zrw=)c*6q)2?7n4$@+Yg5GdF`V5DOg7kuOF##kLyW%?RP0ffT&=()twLXr!jg&CROQ z84%m@I?&VY)*fj3-U4Jz!r{c_n|#lGgN=?~sSzgjz7Fyhm2?s^sN0=`Vk-+h@5AQQ zOm^7CFtx`Wg9BU4Of zb&0NzId6T%gL!+uuIcmCK>6u4u=Q<}o0hD}-9FA|E{WS$NHNbd!7xqr&0pMEMu+}b zDr*3f7xcE0;CR<@^+)lPOM|V#Q+2~kg`G}sTrkfXy|o@G6_pPnt!*WNy@ zur7X8=4p6c-ft~&7{sRXmvT6-6&jNNrT_(kpi{a_F*JCr9O1fA%`eEp7yCKH`vh*q z?NtX=3jd5DrOQm_K=p3>bAeP2okK|0@1LuS=kg|m-s7eE&JrpPqryt*A)W2;i+ulB7l^zegm}P_>i|>vrgyz@uEt82EKz5i zrxX)*+a~656v?vq=?h#gsmNyCW69xc=jF{oAfN^-jMXkQCt(Mad5?X?wX(HnZfvCV z+wTFI=U^V>^SeyNwLqsU9uPd{=$ZSzPzY!VlFnPCKq{+uu&%lhsXJCLhxP$WY#)VjWB87A>DHGoH>%`rI~ zg-^)`DW=Wfs~y}wqY0+V9yMAI$}#V$dbbl%}>$NGm!d6G)95H(<@|lqG{2=sJkGlzDB^+S_X9w^`m4Mco}4 zcx7U5gI7GlXCykLL0={B+4xnouc!NBsV?#5by?=k`HfF*++tI+^bG7rfnRTBp3MyS zDcM(wcpSuB3gJVN>XK(tnrX{6Fv}=oM48MCp z!yG>+D#iv@#v;UtRX;tc77Z@uU+9?a_U0BnlV!o@LK$NTfCZhNTCRSMg+ zv+3N<2d1zz0;D8q8NIh!KV3#*^eyC@16I@;(!J2sI`pwg&wJQh>K=rVrQ@k88owJ| zoR8D&0Ko3}`*(6Uor}fttl|O$tRV%4TvEyFY~8Qyn0eS#>q86qrOSBYB?s9~uQSj@ zjSHBJ=#6A`#Ec`V+k*ei_@kpWT%rnI^?-TVFL*pepn})+lhum!{<%ePH`ZZtPphIfIo) zx9I}S<@J`^nLp~&bQr8hqUC2#(mM4;IF^^q20}SwvV{>qtU>fq*?RBS?-$nM!(4v; zBEkG_5$<_haJ3OBKYke}Ej#aYa^M^9YrHNKEL+lG!ljD=XqutO$~iKf(ogyR5}?zAw9SfdBH*#_wp@*-^6e67c#@;=HJ*G|1h+opa%cJ6wlE zE7oU7ZX~LKa(7jRnk+j;{xQw*^OPBsaeY&nav~>9Piv$%pl&5*WzlCb?`P`u$$}RZ zeCUm3T4>j0fjz=LH#7?DW_tZMUrO!HoQTO^l;~+cRV6#4%AN&FBp)`WxMzsFfYieK zllOhMCVlWuQNfGT3&ErDDpIIbc*T$F^Ii`Ed>Wq8x6jUx2N`jQ?@|dsy`%LRHO@XM zNPh_ep3C8P`(@~Ju_0giJcPQpA6V~AJ%A!2kn9>R*3rc( z^(sAv68C2lp_aVAwMb>I`LQ_s6fjV6SSfl*=)b2Hb5EpA(%l}_^I~M5^624)Yb~q$ z{y-Z+%QvU(E6UDooI?X01A>k$Vs!nT@_=7rg`-9NVEoZRNkW2`9iBeEN9-GAOx=8& zBE85`)^R;?}l~Pd~p%t>F;>3cs> zLpHJ}l*64TZ;hoSY+l3ho$mffgPT%`->W%tazyY*ZI;te8sy{ROq!Y z?5ZoZV85rYriT61aOLmhL_Odgy*O?6gV5}2sch@=C$+BVoDuhf`2<#FImL7#KLu>W_ItaJ^0!OoueLiE|8+`L-LN3Lp_t+5NWl8zn{NL`~tL!Sg=YN5rMaHqsSx4$7sGKAkFXOq>ZNy)_PIUK(Gr6kdXhnX)ckw3mr?w{XD zAMDA1Vkz5K4|4qRhQCb7IHD0ZJU_Tjo_asI+85FcCTz@+Li{N#g3d$z*;7-4ZrN+! z`&o21#PD{GWJBhYJx;x)y?o%lO;%XE?WYr}(MATNYkHwx zCobNnd-JfhIK2OaiOarEVmtb6!JO^9&u9c#lXR04Gc4=(v+UGKh&)#jkA(K~ihX?? z=|3x%NI!J%1|CI01P%w4;T}G4KJ#;y%SSlB?@di=?C*Ex1hh@J>UPZ#$HuPsB9}{x zjgK-bD%9Vc|1Rk!4*i2&vJ(q7Bj8ce$GEL4Np@GWYHn)+L($+q)snG%%?Ax2aepQy zD_7_xufC7XQMF|xgu7>D?ZEXXmeHOtR7uGavxaPZkBqGizDU6rYLDsX3>ecZbtb)` zXG&&1Zfz^%+VS|lr=hrX(Wy{wU`e@U^>~`P23O_piQg9-06x;iKbNQTtK)`8{B7+0 zfcqS^UbR`TlNdYydxIpFdbpox7*pU`O&O!V0Qh3aIH^gXBC}~PN%1r9*}H#wO0Zw! zmyY2L$N;ocj6SnMM&l26lua4l3Gkn|-#p?ek@x%JrA;fSzr>b~Dyu(}>4XF&|9bPB zB#rx5-faVV+nli%-Tcyms?^@-=TkWCR&0rPi=N)%fNAH0&3}6QX2b}Uw0yJ_n>hI) zRwu&y`ls<%E8Hy+I@kuUdb?6z zx2bGnRL%wL0cvkN-z`ZwF$~xBK*HGzmz|pm zUfoQjE2%|-kMcx=sCHHwJR&LlNZnZ^6B-!&XJ6j_xY-@c2A;vkM7)O7F zDNScNgGYUBm!|RDikG4ATrcbKcZ6z>8q3Uug*Slu%2;13mO(bx#YC@ut&dD_mk%L( z9&y+|j3M6Y>>HSuxyXNdz2%AU?$jfvUF|;_I#S~n^3Hf9HJcIni|TcPulk+BEgaT^ z9FQElF+ON+Ls7^2JzPn9Y&`+%Xe@Gdj+yoK5H1{l=77-CqD4OsFWFZ^tGd991o#J) zUT$1Cm`QRxcITKkBdp&ERln)KDRwb0YUt3$F-WhvbFR)fWi4@xdZ%HUe93Q@g*mzE zy3W?L&nYxp!98L%k&ZOxgB3q&3vy7bbye7OFuzR^HkNa76PXqT^yj0h0bHhUWW!|DjDsrF@d4{IWc^w{Y2kJFInNAhXKjnbnv6W1~{eTT>8T zvCQj^bR*mQ-wa;v3kFOH;-?XgL0Mh=i~=^hUQa$gjw&^`cS572g7?YSUb2rYG02V< zybquB)XePXtj9J5d4k?WQ;v&{m@{t+;>eoGS?&W8ZhJ{z!}~daC&{ zrqZ8aifi?B>fq!qWSz8a|`P}QoL3h>s=uDzS`UtB^WbFg`6P^*)9{QJTtwYBu2lg+%(kN!*G=_bu zCQ?Ui%!K-)CeK#&(f`eN>V=wS)rbCbq(tMKq9H`yFO`bXxwG0o4yxmv1Wd8d&-1Wf zkKAsobP@^(C6+HR%YYYa!TQ=PWHf zCxNm--rkNfTRC^VoMcv0Z&q@*_ANcZA~C#{mfx8rP~kIsk@g6`*U>sxxWI}3#Sx7# zQ_hlU9S;%ro>6&65Pkz(bS=4Rz@4$+?cqu8 z(g6e8Q_@d8Hc)X|I@`bAPq5_hM({I<&9^Iq81SDFZB)id$SxzrvwG66>S7&BW0>4zP+RH`W@d*{qEq6rRaoJ9T+l; zwRIB(I!B|#;)Bd1)1m;6nO5?J2actmpML!3Q5U|CwD(5a@VL>_P^_>%W%rkaebF0< zTKw}AO$WQc{x#=+M6KtD9>lN16Ui{8NwocHVkNXu-FGWIs z$=N;ub($rld4^2<{(Pj&Z=da1+N%^$3u1ah%?mf&@aE76NH@0j-1aqV^ImLq=jPH_ z_5eo&d}Ql?v;CQdyy_T7p5LdIH;-aJ*DZm$3O&1{%#``-!a|C6N6YPb zf;~Cz_?0wd*_9?1<5g>d76iDY1&@qqKn&2)>#sb_-OA7tKhNi!BZyKnfi7S6GV(~qOCJIAre)y-|^s_y2}SVX}H<7aNXbt z8#98e*nD|*wADAC40dVU@8c4vFM>11u4o&2BWarjK_pHO=GN>ubXkhzLf>p36RWzx z3-s&aaAfs3IpT7l0R7~ex;{hNq3@UU5MaKenM7(gPz3g|NM|gDG<;vr;J(Ih;+qUY zZvSQt3Nd^)z|PG11?Aa$KzcwllHdEXe*|KGZ8Erj37ci&2G|vjcIWoB(+_ARu)0@} zT^A@{(+V^yZ>_$*0DHY?GuL)7Qsa?Y`**6IyL~r-buRsuKs9Jfs2f9qd9kQGpA zX2JM$TUT<;4n6#S^>9&7Og$eRENQ>cktb}Ze-%K;GprLiM zWs=_@oSN$$+?MpKK!OvF@Joo{UoY`e*zPqmS2&!b@+;<$FyPo)Tpe*#Ih~6dJ!qBv z{>BRNm*tXOr5}^)OdvLugFS_mR*&ch-=t*}G;#mzs~I}8bM34YGJxa0Qlwpb382Pf z&QEPq$?e#uBFS5UCL2FDhOa+)ER|F%1k#)>#i0!5n63pikk<-lUe)yj z`q>$rec2C_N#Wn-(w^Xs)4Hs+N^0Lc9^gZ3w-T~Qo1`z=wN5&3e3fn!OHtCcsChM( z{p$x3Cg$|gW#N66V7BEdn=^x`>Rm1iy)W$qnnf)3lM|%OPw(4u2`P+0SvMGarj}Fi z9%^A1@5%5Y=~)wQt@L&ZgXvHke-vl_rrt)KG-287!%pns0In2$tsip@?!kS3g?Abq zQD>l|+h8-7gGrxS`?_CP&&mPuI1z7R^zzoxfT;s7?=O=Wgs*c;&o~M}3;W35|2b?-T>ORB_yb=Q%{tVl z<4L1|hvyU)lT30IofeUU4ww{d(9;|F;$s7^kF6$!sKqcY0br4?j}e_|$03-myP1vJ zN&02mm1l58xaxF+G7A|SA(HkHVUcgQwf2Pt(fJ#lHIW3tz$3a5p3i{;T94z^e5%yL z*vGW7Uv3J%G2|tcvCu#PKV|#MA|KWp_~0JevrS3|$03R?`A$Mjdh8v=lrQk0@8jd| z{9|N!KH`8z^|idtPP!v1uk`an5{9SILDc`U3wLUeiGWj8_r2BknZx&RxARw}=pvLi!9i&ZLPS)j z%F?%(EU5|Uz*(Znz6!!n?W?D-zs4mw-)BOB@?N>;Ig+3_X3aX}ei2+nE2Y_1B&$D~ z0QWKtI%{9IlKzbG`%>?gA~L=f+lbeexuD%Yl(&(Yr3w={j%{9g(4|jzU-0eg)W>#j z;|Xvq{zX@!J%-mx8JZW}9=p6j&L&Hb+G(T@bJ^9O8Iy>d5s3yJJ3m%H06ts7QkeZj z;U2ZOszAvskyH=LG5J^vj9#gx3W-S^VIFe|uS)1>d^;SNW6eJ8>Uz{4nf54a3wx`V zeRzIob7s&d<0rRI@?;D_Ty!AK3EmfVWiT`7F}S0*!3w~L`V`XEQ%Tsys~ENRd*i`X zIKTHdW25-ns7%7C$CDeuJli6~6z$U1I@w5{Pdp<+)Sb$aLTc0I=sD-SPt3k-bNe-$ z2($jYp@aouBWy_T>cqkJObJ%pDUYJEN1HL)8?ySrTkme7)@}H_+OXZ{Mis7lyLK)p zznXHyl~9M;g?;xBJo?EU33dMPA(clTT!KM9H{Tcpn0>?ZCeh}C+>>4&B$zu)y+)vU zS0*wrMbG~Jk|0C8TeLHN$>;YcmvVXfof zO$dDeA%V_nTG*HEOL++FiSur)PtY;VX}g_}ytwaQa!9z>a@dy79$=^Y`-+*D*Wjwe zn^EA6`DvKkK#s+fQo{BcQF8lXf~f&8c5OFKxaOX8Z$WyJne0Bco{(sq*zls@Q)BIy zThhaCz^qy6a)GH|+^|g<80|-BUn<(}?2VNxgh6-a@bYrBF`o8M^2C{y?{C2SyCulx zHoDEQ$Bcp5x_#lHy|$iyKQ19Ia9M(t;Xau6c2(7eeG`fSKjtM7(J{Dl-KBhO{uG+3 zA9w&xu?$iAdgo0HIR|rYCyvTye&B(WvC15>Tjn~`57r1mSsCEg z*N9)lTS@iqH-~~=3~?9VG);Lqj41lot0JH_z7d&inODdicIKiSb8G(?M9WLMK{YON z9=^J(AhZ5Pq3@rON(%^BGD^!tw(a3;h*cMygd>V)XV_)o0MFOhfjh&r{`}!zNN-`W z>1dAPzIPq1qf%%{U&z{UCVyumR>={&aHfy(+G-?S3&Rz^a94J5eW_T;x)OZ>^z@-Z zghu9xzQ6fBmq#RsK-DS9*%hLD|9;9wC+_RRsHRtyy_V@dB~;4W$DZsf0G2Mf)pbP%DCau(yO)Sc zPdIXQph&prZ?$i=jo=7sZQ|u>p<|VZd}MsMUpHV1-QV^RI-ISt z7bgA5scjuXG`F>W*dV-9E#(mt1d!+RLr{7V!LMX6+VBKz?=C%=s(}|CUVFe*qB#e3 z-A#fTju^bfr<47pedKPANQgi1WvBtXt{&WW^5?%cVJZsiaxMWlO-Aplto-YC|7N^X<*KbPb4#C}OV40pQhAO}D`JmKn$0+gnsopN ziOGA_zMpRFc6w0+EHG~9A`Kwkq>z=+QN3`UT>5!Y}J8-TT^|R03{H1(#k#sc^s(3qrNds zh?|pr8`T}tBe=AD$MpN-2$?$L5h%6@hotxgMJPK)0hmF4Z3Yuyar4EK5vyvX<(rf=SZO62Ha9U{cr zTO;oi8B;!Z+j@uZC%Be{(%OG3-HNT#2kjdY+HWI&4}q?EAQOoN`;p{#P0z_W-Uk8s zQ6l!}^4Un|+bZ#$jBz9*FF#!)0Cd?0YJyfOnR%z$IDaZ@_4s`$x~!BUtEI0H@8Svg zX)0D}-gL--LC*JJ;=Ir}KJV6zgvoBWvMcx*ao`vAVz z2)m{AqlQ8?K{1WH)RV#w(aJU=>7Q@Zt>0>ty@{| zXuK`8*`B#xzOS5(HVVCY1r9e&^K>F=@<1$)eNVG5W!G8wV@Gd+@L|$){C;3!y02Qi z_9KasPix)YFT^#O3tVU2qV78`G-O|fzfUjPKJ{gxtQ75YCRQ-??Nbk@^|glmfqqp4 zg{4>CKJR-ec-Es7Zft)EiuOC6br21%dxSPu`${y38A?q9+%Ax7TMz|tQ$l^Gt!31^rqr2{n)h5=1Z%T!y6ZxSV4Zr`TLRVS%g zA>D{ecV5K~$|&^{i4?&9(XY`8GMy7q$&G7SAD`dL_ieM8%AD_bW`AMs5C^XJ2(U)r zd=LHHg;u~kn|+RajKqE^{${n}p3hJwG(N8Dqx##kB-ZV)H~*{Tpe%n5yF{-|sZrt? zYWditgdU|ZxJf>O%Du24!zlW62!f-s2P|Jx^5w}xZyvz~j6jB$e9w-;lVHEfIK;n= zqm#k0y&t#x$3QZgcnp9R94rag12l1`(*8{r%m)BXf`D`s0Jif&hIlsPYX|Z}5636> z-ecX&d**|&pIh4<?e3q8a6kXyGqtr4rUY&T zBo{+pPrZ}wL>erlrAs`td7GO_?D*u{yJj5)I42l^Uu8jFL2efe8~Ft&=C;X~Tw5-| z2i-#?8bM{KZq0UcScRY|I}RMv2&D2CN=pqxme%}1pKuUg1b{QM8gPft?+f{YB=yBz z4Ll(bo(8oKa&KQ60_T}gKUnO1(DEyQs`xa7Ogo}PER7AlM>AX9J$mw=sjK_dUJ7wSFl?O;2_b1lz>~4F|nNkrTG!qw- zANBTrI?Rb}Zg_-24+}Ak+^B>wzni{MRth>gy7JrdJ^*{yzhGdlpNcDlz)x^BYxEv@ z;*IN*V)|$YS_bn3AB;?On-u4Pm)JOtoU>OfcOdK<$4f;L2>AKgCPlj8H`qbaOH1)RS@cIJ8gRUb!pJ3=E zywu6=SX8^gynZArQit19iDmy6fkzd@aqxZ%)CGNO@~=*XzS=K~Qx{2m|A@wtAfdXZ zinB*jBi*pwtjn3LRM9DEqv;6AL)3FUo2~r}67MQm zYJC1q%uSNVPp7?hLOW1J$5-ESdq|EcK`kQc<~*FQw$+wXrO2AnO&B|a{PiwdD;V8F z2VD%N(!EvQeg~$MX`$a|JotJ7RD3N*gkHXYYFu;DP8MD?zcKyXA1-HV^$_ogM1DJd zdi&eJIKr-2P3YmM6q&{yt&lUrw%6Kk-tXC4F`HjvK{NOloIDoO zEty8iG&eT?!XXgsO8=L5`jN-B-8dr*z{e3746gaLe>zMc>fb-`|KxER;0-#()&*1k zzNor3(Yce&C>qS^2ZFdo{44fe_u>SjwEZ!+qZoIW(XL1O*7t!mooo0b2=@=y{=(pM zfRUI)oW2E=qUNYfv4TZhJ|-r0_htV9)%iV8!v?vWM?B8l%yjqk{Kl3=-A9>URnG`k z&lTmuCvfpAx-Xu$5}2<;YS?G&9f1VYsjz4P@Ht8j`~m$qM?^A)i`lnC!ie*D{G>?} z7;7NOFFjH>`w!vrd0$v&tGlc@OBq1c!;w31uM(T$3-{%sv7y3Iu*66Ae%B+x|2_m; zU4B%0o1XoDEM056YFZTjOYZ3-A(4{G?HeLQx!->MdFR^ac{*pWwGzS{bIdW`i<$D! zettfye!E)1CSJo;i$o43J=0CcHXh?hrC^^s1?fRouPxX)LM|$n@DQ+KWlSgga%oQ= zqc3tG3A`S(xnafRb&;gWa}0Au3iN}$byRK4G2}L!wZqO-yFP0w>!p@ZGA9#y`rfO+ zJvFC=a;g5n=^AfNR021F_yR6{7&49Iw8mFxwf0o^j{f8`W$ftZV`IEf$tQXH-1nKz z`eDSMyAr}6qz z7A7&evZ&59(Tj(IA^aWz=)u;Oif#(zA5MZ1h`a&V7@4(SZT>v^yz~b)ME4l(wds}8 z5gu2-9b!kPvlZR_#5_BaFpOuEO(W_?DhYi5sk1<)S*==bDX?lvud zU7A<<-Vl;vm=7tJ0y6nK;SP6{tsdC1Qh(1o?`+F5*7*P#MUo*F;sDGCMx18d&(Qcf z>#&tfakb>J^nN=y7Jj$gQW)tMtXoa>w*6u<6((rFUU`59_1%7}WJJ zC~ERVEBz3o@~@m*cn`w%`a zKg+qYT+8;>aGVpDCwbg~fnNVFg9{yRl*!J8ID)+g0gPNZYggHLXlXReKvV4Er&w<( zFPFSR%NosYt zQTxm-bqmoN2j9{BUBtW3fy|i4Z4elz7yQs4nUTNiYR(N+MyId7%#ZLuo*?1y89u*L zIO+$Fb-d(3@A4gA!=>O6hK2kpqX%q^pblGdj-Nm`;2M*dWXG4d(peQ|YxS`8a61#3 z!yPxK+Y0z8y&y~~CcCF4^r!EtO5F;FEin!G5?{quf6;k(J?Mw-6xysHoINkzmw&QR zThFzld7>slG5rWsN)S$;R)Hm&MERRPZs*WEvTh~7rBl3}cqj_GAa8s!>v7h_y@#!u z0DAvQR_G&}6n5Y-br&!v=8fLy9>ubrX}4#4KB>SwWk(23Lo1)eV3mYvNB2BPr#%d* zg`Saza_=~QtkTTTWFm7UsjlyYX7>vpz}MaGk$N@9X;&sxGnF;G&!c^|AFvS%>`mPE zCpUe%#ppJjiy)tP(!v;*2sW}Yb_Q|Ev0T&XAS58*t=HGec5*=~zfuf_H=DOK6+AEV zQ@7}i_Pg|{m+vqyQ^sbhioINbDG)LUDh4>(8l1|`td^z zpgoNp1ExoqwDL8{_;O!7AqtnBl*$roa7)vOZyyyiR@L(@GDZU>&S5<~!gg%;7q~Xo zf_s9_*Z^sjx3i)cnpr>4tZRLt;Xh0Ex}p?}+f~?;`!287^;a9QIFK-SeWhFSSH`-P z?pCn(5Bxc=(lTUqQaOUTBygj;YzX^--hORe9W9F4_>8sS1Lr4Eyd)k8> z9tf$5`pB!BnLObvTebJUHcI}AGbU`J?R{{BIPvFR1E(yK43b9ruWj?;cw{SRVr>wp zq=5;WGtRxG71+xuMJ>A&%3Y0P-j&N&k2c&-?RzWtZa-bH4uIT|6~DIU>G%;lE*%C6 zWDc?_s~*pvOT>6JXn}!q=zl=_B=>4qFZLbYed-D^SfDNT#288HWGD=9S4fm96dTTPxBA@@mEs-t)78^~F0gL1XE?Mv3zF62B9caVM)=kHB9hLmkj-dQQQ z2jpoRpkb%2r&bLICgt4a#`%e0!0wd`i?ubTOQY^Cmb|bDzb1w*v$;`CbQi;F{h6^5(WxywXT?3G;zl= zoKG%MdAr|7(tRDoaXoW|Cjh6sQ|lv-)B+R@S{HA@RZp;jIPKpKR%=&C5<#(kXIyrp zcG2UDvwQMJy7JX}1%dDP((qli@@7xP;|aw!7f$Oq5MFOkF#>g39qRD{)zLRiiOSbh zKW>?1=WDYJlm3);xh}tT^plk(mumh7f_kZc9`eDnL%5B$@Z+8)afcej&xJ@CKnZ_) z2V^~TJt0Sqgl;U(z`}pupvJ|})O~{~9it~oG(F;MMUSH|kXTpq42`2FOYLst@%-~?nZ;NIGNGB=V3N`*)r;$7#&g&OFFL59-4*Iq)@Q4vV!wfJ+J5eY&6TYkicAe zMlQ%D)NH;$Lz_SectSlN$K%S!aeW|`fzR;>f;+#h*WwGMIuxDxw}Iv7Rrg{e3F81 z4TBn#HTMR)b=;vk_9P?gZ^?T)uVGg}`WaUvedcE!;^bGdaB|Bzytfdt z1dqHf_;ZaQj%8-Mw{E*l2d_#W7j$PY7aGu0>bpEuy8_k76Q1clIMb7Ahv!Pa5B+@J zo;NWjS?XL!te=JX=GV%QHP^>UJY8?n+`LTrO;p3DMr8q0SiUor*)2W+AKgC(sEyZlPz(lt#lJQ7#ZN`DqMS*rCWE|CyL+$hKUer?uGg-1pm{&uo{yX^CrMcZUv;idiOVK9(&Bf;0pFCN~Iy7e)^ zW!GV8P)u?W!kDF8)ZR*LkGqby7b-G;xMk%Dj}DxNEUU>Wd=oKEIi=5W!AL)fe=jY_ zpI=i2nFvVvCDLq8uZKKI=;9cZ{iT{d>q4c;@1EgIzn@oT++gue&blND0?-kGt#jYX z7sK;dH~C!JKF@aa7@5CJ1+Qo+AcF5hlc=WME7p#hn>F_8!TJ)Zrw057v>WilNhPC& zYO`{;o>QEoH2j%JDV;|i{{uuxhuz`b1%oy6ac8)ywQY9v#;w5HqN3*yC(94-Z^WSd z2Hf!4I!!O#QO+TEO07Y$BZF&b3{zl9O=Fl=?Pj)V2CSC zh~CW-mbu2wd$rz!BIw_`#E01vX#MQscE{v~&bj~(>H3&ml_h($zn-dqa#p?cJ0`z-``(UtDb217l&_B!_(x-flTQrbyW+?MQYgHFnHzpH88Bn z=SGfV4GX$GC1)4rWBrMOtoWEOK}lrNAIy37&!_o1?U@xG<*#G30nhM0UMTmJjl5E6 ztP9NSO|&x$S5}MmZ?D|?QeSgOG;m@83VfKlK?*ymj{#dtYI<|EuJ1tVM7O~mm0Cpc zl>o71B?RnHm^aj{GoL&KE3`fF_a0^1)8z~>^7-%$Eiy_vbA%}rHtFF4_@|}ii`_mt zfh~Au%AMFB*5z$DFekt^B&FbwuxWf2>DK6+y7^1Nbawt+Sn1&Y^pG~@x)s$Ulo!uB zliZ`?6iX2lRwN%99hs|w5{fWvV zA263@BV8cW+3D}F<6|-czC*~vl#8s;ZnAkrvLK_bh^P@#XE>4>*|16EPD7hqcpmn_ z%WqFdIr%Jteycx|mk5+=YLUG>aHC}NmmJP_^P!yi@6ly#)S38O%fw24dPK#FR^z*R z%fbsN?cWc=Bq?MSr{`-r*&FP@#j9@vLS9=B*(5pH;;_aY7XyVf%Tt;2X?N#5ao)-2G8+pKZc{M3tJ24T#J^A49>}-!^c&pY^7M2T zd&)Y!r>nlnV#A91Fzin|4-EX~RJ}-^c7S0l950#<0!jQQeH3l@eN7bfV0BdX&i#g9 zNt_(e`h*MQ!`{PV#J<|XweO*eRkKHo%6I0FL8<6_UgP%F?^}V(`J%4(7OJm!8<{zW z&flw|fOz`c*%^(nL_LigG(p>`9YcJ0qRgHVj>)P&ob!#8IZ~G>U-19d=TlHNN;R$DS3Bvg> z%9Z-ZBO%ceSHQO#TZgEu#f9l9$Xg6Ktrz&!9D4iEDtvUJK9*lUjTFi`@m?m2UGRaX z!aYDi^tsIG$+i-HF89^#gVx388G3Egykq7yz;F#mP_Nq6?jea9i0Nz<^l)LBM_!T+ zg0@FhMlK7vDPitWJhN#!9!kh<4N*QBF|;zIi-cV0DzZRjnzuezoSqj+@u#7uZ4Aua@m6EkTcTYv z4tU5Lrp;^Z_r-TUeJ>YL^Q0-EhqKqnzAwK$ds4IN<-wzzABMaa zbnn@}E=BcTy$991Dah-}WrCaD&fk6~<5%u3+PyrNd;s`J4}J2lAe6Rp$x9QuxbT`H zWtV~4L_hkKel&&5)Xoyh*|0goLjcJ1aeU-+aQ{4B`VE}Mqf%yvt~jBK&ZDA@O`MH9 z(Ijr29_`>jvRY81Fwqq*%+>4H^g77*kB8ZusRLt73rP*s`EI^x7=&atB9(Sj>BaM$ zK$-LT)(b6cpN2)3P~CvYf!|ANpF3Vz%{wLzqeJ==5-)hn4U$e7P6eI!g(Ku1Po7Sob$dcl@QKuABqc2^4WA8=ofFM_%cMQB~+9JA#=j2ys8~lMG ztx)(QF;LdzM97@IIFP%wBrlB?PaUkqyGUiXotwc@*wk=MR4M6l7a`fP1&3jR zg6tiU@kT~{{G`;ub496Geo(36PPbq77zB~E2@VP<1@0>iuYFg4(0*ZQKp^CrVs~lDYpW)rHl-P{%i|g!j^;^pv7zXsGP+_v2=PeU_?PMX zOZM&Z=_%Net4g_JB-cdhu!@tfR(8aZr1K6PoB&ibmcapNyt8>${VVCArW@3*WQ}(5 zC_)+1pqIxXE!g0>C&K~uisKKM6y>~qA!c2SC&v*Sm^xk#xgx3?W$?ZD9E^hfTOV9M za1#R<{-VF66T`HhXu;G594I_S)DrVla%n3%DSxEi0wsqHQ;WWDhn4D?B^(ZW3tr&G zw>pJOGrge`%|fB0I-Nc~x8=^OPRjRrXVq^%5QXwE0Y+H$Jk*RQDEMMIsJWG*((HT5 zA%sk-Ea_q7e?K>9>r+yiqIs}K>!&`ck8z9#H<_g3XIpk}AHIr%lc^DpGa z@$p@pyjmKlE_zJbJtsGBuA<=a&6Uul7-&PPUlN-Crp&n!TfQy1d|eHn${~%WLcHu3 zwa0IsYi^`G2A6TY9dkiW#FK~kIj`gGm~bzHX4-T5$e{?w(~DWAXZ}vjuhOnFf$sT{ zhR}IvK#lzQnBJY%PaFktgdae&7PTR@#VJItcxIAm_q*a3yPTJ7hBUkWy&{Ucwttzs z1=UhYCDGYwrB~c6W*ver>+c4lA}9yH7ig3>j^qg1S$zfjk0A#MrMz*INnsJ3z-=O2 zA`KL$-yGjg^U5~#8#?0M6@QlB*C$m6PVxMROk}A(InC(Y8V^K)hp;4+~^PBrS6}y%7Nb4a&|F*okr_9HaZL*E5LM!mFJeB(=yEc$Fa; z4=8q%ul9YPvkx@!Yi{#q6{SNuP-`R7ifO>RqP*|1Ew!D*u(-_(El1lDsW%{U)&O`k zrGnT4x~o`u-n+B%LO1PA3!g-Pw8>vhgA0>z{QxJ?DzFCV%s?GAZQ9;I(6{3%qP5On zlMvE8#^<107ejp=RO6d3$n|77s8GocM-q!Gea#i>t2Y_Qu950|C5XLbHfS`-7uR3u8JGQ{UBNn_j7>GWkRXr6|oo7gCso)2;?7fmkY+CN0{otMECaVKz4DilLab8+# ze6_d>S5!NtXL|FXGd5l_lDv89riaOQznzakWm=GrsSA2aRV_P`3P5={oh3h~O!D>a zug998XP}oBpTIOvPed|(z?(gPTHbVdIWK$p!bZ>5IK?zz`dfMCaihsre`5dT> z2Mx42qqezwPEg5A;<9nE<%KHS%jpwnm!jToe+x1E)dsH*eK2=og51oy$6h>@ZP%a( zZzO05JK2#eEj!cunX6v)9z=?@C*z0nFZF7wW3CqtFwcyR<|MaR( z-d7cFq~b%u%-%yw1TY|!5{Ya0ACxiyy#*$>|sL7H?jf3=K)63h-I& z;Q;X^swTpYyOCzbvwhj##qrBNW^xS}n0kDyz>C*cA0WxS!n4Q}`9$_E^z}SICBpZ( zck*j}Pnu5p(4;=pIQJ8#pu>9M6tLO?AJy%uopVZ z+YLsQ>diHn{rlpBW@^Fb{vdDqeRFo-fU{N6ogDe-0qi9TF|>h1EwT=C2eKjTaqCtYc~ssDkAjIWG>~K z{m8V_-L>p*kx-KGRy04mw5xioim|@WE~U~poZvQ)>$0Ava*6ZTBL)>|h?cXfWTS9i zvDVN&=kj@lG-wwTYsLBostK_@_n+w6cQi1ZU^Fm4frW_ZxuZ_NIu(z5P@aV7*`ktj z-fOu}I}*4Z5tIwVZ!Nda+om6*EU*~w+@Cm8v!3A*rdU z^X8yq}5q|Fu$BI>aa>YEG&7;}fsdeN zqm-j8FOHt6M@(U${A96@{t zuwAs?08O5j*E5})?e^eI5?Km>G*7ojZG2S`1yj4QmBD9k=^F^m7yIR|p?A0yM*mCY zKviCMrqtisxZBmytgA2U0RidZ{UUW*?P=C`3%=*~^ICtCt3EG`ft77uFr5=MO%MSKaQl8%K#OJrA@|$5zXHG!#p2du7$|0fV%>HeZI6ORemStGlF%wDn|CK z_hm!u+K15N(P_u6f(@gMuP553R_+m&zaPc#+B0 zR|s{ZKwD($!^}%G zv`7E6OWJqGI)9BNkY5#6JjZUfi=AOuR(-!g32$+)ozarjSN8E|$>5-Jo}dn{ znE~&Xk0;;v+}50%H6oWlR*QGI(_EpFlQ&reKwu0k4eWTyP@{$*zimq2i6YGyQY$c- zu1T!N@5J!EUtU$>L9^~2i|%twc8~o$Sqy-gZpUk$>!SNTB|bTf|I}tJw0%w~Yg>7`_c$7Y^?QG9pvSD_6 z#@5<%d5%0qhT(0O9OD}lsjsw%-2~Ife-|NneLu``C0`&}*XTtGz&hQ$#*N~kqIZIg z6wOe7*a$eqwwE&u(RPOgUse`B$$0Vp6rY`=o%r7|#*8hS(Adqzi6d#aldnp5`_tel zxScXQ7AP>GHEBf<;ASu_bgJEjt2K!-I7(Zc8f}qFv)g=sfXiOLdIY_^Mk;x{8 ztgI^hZk`rCbT~fFN#{9*=bWazItFqX4{kYK?r@IW>+1MQUS~LiA);$LolInTc+tbf zvL*wt_F}l*902>D4tunnRZbB zxW;MT{TQ z1u#~9(^#xRsb7iq)yKJj#*HV~SnH8rJWwMXJ!o!qvuDf$JkFC}#Ygk~%8>6%+f}2) zgVwWr?yzBPOAr1S4RVJS_7eG)vNpjcJJ+1H0qW3tNQ-d&Gcq!YwH8IYHkxw%1c$KB zn+JssB5+Bs$ljet<_@!6-)-O9>B+?hZ{$)EVjMd2J$m`UYc7?&duI>7`vTYtPQ@tl z+zd9S+9m9b#vkws-5@7DTEqB0VR~ST5lBFvn9tf9MHWI^ssk=~R0IGUjFUr|@{!I+qG0~*JIaDn4G2wwX zxq!SnlX{Js&xxrX&vhQ$!B*F8<;W73!Lz!kPPD~k~{p+4@|d@rvpS# zYX>P;1?jY$tuHPtKE!FnN%EsCeBIMQyKVb(ueqckG~vH*&I^Cfs0e<=r~V!3hJD<= z#mM>j#r5)?t0$4dv+CIX7>+*F;W>{iFkEcv3rY=^Zvmqh43%yS%+!FyW@i4Ix~645 zCHtJ|XEw6Nc?WR7a+#_)`4+idnd{OaK>?WsXTWlt;^eSabFBRrGM3#q&19Y$JATu4 zFJ41u$$m|EI^-g|-a3-$;l%;fN@@l<+?JADlfc;|TL_;FHkkNHuW#AuGoQlDF*M;4 zd#A_G9zb8rxSosQ=QH*noq0$%8?d)zj~NT$cq^1|2oAyGcL&pQr9%S^=4Z&lI!&ll z1yZjc$!$@_3-`i4D%AXsEOAJ8EUln$l;8%wPG(e&B`kbc(NYmsE9o(E0vA&r%7Lyv$ z3C22wbdz+(zN)*~eMMwJ$y6g(X%xx*1ND#^Y z*%y0NBwN+tj@a2?#RIk$%oh9ecD+J-+TM8qTs=I`epq1U9IdR|i?8uP=ERYql)0kE z6x9P#HsD_V^X18J*Mxz^L>NM{;f-7N@bNucY=S-Q&a!{c(*f8f8g<0+_R8PK@0{GCRmRvT+`X59g`1VY9p=r+{1io216v%k8*Jx2j}k)_<+fTp3*TP(gS#Bj2QP&=D~ zCL{G|{8h~t6vF20WAbTJ{p5>ZkUMRG+d%;=Qerul^fbKFn{9i4Ko6F~Plcl2+x$#W z(09Q(toC48Lg7!9{eXr0Nc%MOMtidGzxV1`O~ zdWJG6PVL7USSb5RP`rkFd2hMNN?Wf%EmAMO+?PB^+m^|2$YMp3MEKwH)MZkJrS$hk zC9Fi1zm`0m%r(w|dt2uP)*A7>E_X3EK;CmYUzzW;z=a?tgAFC>1!YR4*JFTkOgB$K zD;-KfS01_9FRG@D(AW9J`(%%uLOZ+nr8V-4_ic27^)N*?rBT9Nvew)3^oO(Q)So() zGT5=(rIIwyg)7M=$HI5|D2Lfs-8!3Z&Viwl@=-G$x<+9DK-_=;z0D!O|dpPo6Or zl)ON{>+H>@nI}rEs&5C4husGj5c3n)7?t)n0tp_!%wtmks$IXG9yIh7y}i50YB#H5 zZ0*Ph2#4cITa^3;1;$~J_r`9>5YCHL|N0U^)XPu$*P3J$sL>{0)z69@hev~a4H9=W zR)^uHKpg|#zcA+11&3eyq)FOxn_aoR@4W*oUw3=IxtLF9G!gk^nEAy9JEJXsbIX3c z*gL+<%HqJ~LUHHH?bfgB(clgKPY5QVT)IhoSiQcFSrC10)T!YE5Bu4r4}$}(*V;dh z8oS{s)gbwNya}L8v^$UcOO8O{!=~_JA7MpKf8O3X8!2qr_m@#^_U|ahZqG1S!d4V( z0I0txe?}|vm-*iNT+gV$Z|Gyf-!gI=k@q4Kyl8t8V3k_<3ET0VO5SHtU(eOM2+h!}>}SBX2XZqONI!|PS19N!CHCdwY0kGTnAbf~pBGqw z_f6w5`FRg-G=LzWV3}vjWhXvIDb=b=x%X!Bh`E?*;4}1wp8%PgUOWW35)<0FK;Mt> zx7r)4>_eI?)}0hHq@2*6e4>Bz-04wcAu0I-c1`z@MwSbQdt71JSk~xs{&_H%^*V3c zohxggt@Z)%@_tvxc4!=u0p>m=clp}7-?YjKw*`m!!Av+xe#Z`ID1|Ajg*;CE!pFVr zwO{8M(*H;swi{-?#`KHu&!$)6zNzcP= z46o?d>^%SYh5?+DMg25+DsZA{4~c3TTCWxB0hduux%6fGuYP~huieo70%5)!23T^P z(>u+Qc=#v3K`ETK#d(TnNV}a$+$$l@wX1$*Z`)M!_MZppC*9n;>CS4bZ+E>K9=sEt z0?FnQaR6BaVP87sVc6EUKU{6P+_({FoFBCqS1mbkYQ#|~#hGpUMZAGvBx1Fqd`UX< zuy^tmO0HC{_WZZgBt3CAXh(wBrE&N512!nkVlx{KCL~|HsF%}M=-&G+F6F2Y;@`}0 z_t;FifP217p?REi;dVs{(8BZm zcm@I*ab(J;N#tYQ<4JYvN5D|anST1#Jf9*mlOUtqG)V(zB#4Y<@@${llbHH)2Zy7= zq-go?1CxP#e%|Bc&Yr~I77OIsieHj#%?AyLyPuD`L_@N@tG`{qA|mhHcUAtZbNXzJ z`(we@(G>lmp#w^ynJjC5Lxatzm+HZoO}EVpz5MH_~*L|lB8b~%Sa<8GYyzMS`5Agx^ci%Ze zn>FtF9tS?yTzY6uUp4)_B)?dW&nK6096kNn%v1stV%bBMLxznV#Y?S;@1*8mLc0@xfzt=> zg_~x&9#1_=llw$0SBHx@*anJGTttyEzBpc&AEN1Ymllr-CjABIby`B@4!*&Mac#gr zg0!?J>s|5yF!ga5oaO#e2J1~$E(Y|7yL)L-khXkzcFTTq_g<=tr!I@O<=0U(zhm|k zKIofU~J{pJTeN7Gbw4 z-YXD4uM=Y6DuK4K+@S?@w2B);F2FP8-^Z)eggKe)K4e;5i==qmUgGB^JUI^ETCO{F zT%U}d49lSrC#jY0N6tYgd_Zk`ovrJMjlH74b(Bboa#;D|CDlV9YW(2qa2K~<4Diql zdTBc&)BP(`xA(j@O?j9^cZ<-PlO@A)sM zyM<<9m7f!RS`rx+&E0tZ*0Z0v6Cgmtr=9%YETSI1li3%?HKln?xbh`!71 zjj}H1+?weM4-vk$?dvD8QRr=qURM@UM8c$HMhD|ULlo~x$Nl;E(P=4>i98Q)$;nlM zdvO+rA9cNygaak3>ya$i&ma8n6{zoii`~VBI|m~|Q<&DS)=srcBg3K+_EP?&JiF{q zHfFClkJH=Blkg7zGW&Aj(zL5LDLGp}(C10IuZao0iOK3I?h_#C*8!Ctl_pI^eW0RQrZ8e?|H(5d>`fH=Be zU@!RCIFCNOmS?c85OfeEg%{dTi31ps&L`BSbSeJ=$u{$)=sS-AT-epASM>ECrgYWq zE#T53s@*%L_YYe4d;iW3=*cv}nW(X8Jr7&<^T5{JAkyuGzu=lMuNQ3}-Sr4zi9;{l z(5d{YuZ5a(^(D{qG4a4bv zl3x)jD%w|h4HVkF62H^Um;0j1J&6_C&;Jl$DN+#pcG%#;2Fp2YZ%=e-_^>{fFG^Nb z)EpAjgmxi1^x8bn)uCl7N_ARD;{K?>E%$SI-rAuZi^}K&;hDdGaQE{A$o-Gw>A|vr zZ)5NWFln`qpoucfhn*ek+gL5|)?U}A zuSUyi`UfLisMYv2l?~FOGkBW>jyYArOXKCu4Nc3kLBpD)sb#01?hoq`nA6(=3_=#T z*J%1t=>0s(g`|KDOr7N95lBLly1)*&J{BD+;(&LJ7-wi?0$IsWGfT{DI}i3uvOZ)n*%ex=sg?NP{wbvw2^N*CGB90EI>&OTY26J zs}*@O;$%8oF0Y?Ml--vcg&krODKp(V)2^pJ^S!x>!pMF4=W!0r`~wcj{(EB&zpanUKpMGzW01bOsrMkO? z^>@5_v4GSo-|R9dG&k-Dl}OeP)cewn8}oG)>679ksS2+N-~u52-oW!&TStqly8Evw zj?J3}+u_25oL9ui<)J0Z*c|mR;*Ynt>jTzatBs8FLn0A6SA&*3Db$vtKuPfQos7DV zcIh`W)HB0!TDVKiG|v*wS?B_Xmh-|3# zCVpk`UuC$==-fH~{MY1t8`JgZv+P5Dp(`Y9Ffsdef{{qWe!OmQtQ7WW$(Oe2%{|&h zkJmMfK)h$-PX#{a8I%f=G4&`DjP#StwXL8opXz#WNwgJ$(ujZ!uedD>|21W`F4^^vfxH zrvCMJgHZ)OjysEVh_>wWUM89HoE0}Z84oKN0kGe0O@+PVN7mOaqBY)78-2mroMO^b zYjza}i(Koae?t)}1u1bc2D_?%)y*yRY1Z#T{_unFO@5?q#l~JENYulS_nl0`uXxE1 zsOIauvN}O{F1gRcp_Laqo3$k`wl_Ui&Y7D}fJj#&qUetabs&;sgE z&+r%*2lMj~sN|OwOp8*E-tY!lF7X z1Er0xzMoc`ayy=%V)Q5PzXbk`U!}eV_57A<$0Lu5urcmzB1nwAJ}-#`dyszcez}Q{Z9{Yb){ z(UonO*D1uuvTyyH)MwB2xdz)zMcEyMeZkq-Gab91H*++n1PqG)^_!+_JfraOb!Pvr zp6BJy!bm$wZN%qIV_d(Cso>1CEv8O9PamkNKO7OUG+H@VQZ0vAE1E+@gG3*m<2!$g zwqjyZ?O^@lnk3QR_GQ$&JR5fpPrMw_GliixyPb>aeT^6Q0KCReE$)l)RJNl4C@2r} z_cKQ>#s%=>+SrW+t0r}>RF%71hsS#-RLj~VKZ6f%T%GCTlMPQgQqnk~r1mF@A-$$kW+9+4%hrrQu`tsQW-Yy+4In30MDC<%b;55>X0c@zi8z4iAW2 z=ZnnmzwvRtN_;S@dzxM9Y!#9GHd)4F-F*7~wuV#a26}rD|L2EC8N*Akv%E{lfpzs( zjSj#wMuFyV_`AbMK6Ie|f>^6%OgTsI&Cm~r0MZ|y>UQbRG=TSwsQLlCj)OoADA71J zrmHwSBR>A1SNV%m*3Cl0oP>N#EUNXLt@p0>t2fl>huHwFe^=cGm?z2N1d@laKr{X~ zJ~8cNFBwGIyCu7a5lrs`ThWriY_1h(K{?46f!g&>21U!muS*Hvn~Z#5*2wB@PsOI7 zyJrxuhd|<>o>~X4c2NA;XPJEoi%3=f)*%Do)jx6gzUXei|DXI1fFFW|ll9Pz`HKnh z#;!Z>+dIDt%Y&s;Gp)jXLmQKtOftP=jpS@|9uhs*JifilHFFy)>WZ4JRn zKdFKbcZaWO0m9>HAy4Z1Lg`Tbod=nOs24QtF1y!OpOm6N-IVP49#>A4@?vo8H*wLX zRd_YS_?@73;i&N;{hDdgsPM&1LMc)idx+^yHtWkH1;nTjmSl3*oxhOwr3NqW-*P9n z;a(_U=W_M<>wR=&{D90L!=ARt0tIr}V6j+U6vbNC!=~;m9Z616gr_taNBa0}qB zJ-iH$CFRXmZzbaumrT==tUs?!Jc9K|YCU*`Zt{GfNfFXYMOMUD|6EX%;}Wh3G(=wc z0h)AL>ksD7{RrL*+QN@2hAbKU&SU+qj+0}t8QkjM9ei6Rb~Ed9s+Y@__0Vrr-ujsA zcVSK!u|;Y;8Wd@F32a;bqv=Y!Rnz0}SIW#w5{e8NqIa1iQ$l?D``BmQwaz{F?6xHS z!*6(ouM~#r<8_Fkung_qf*oB{rTQ?OO+$_R8QZ&6_esU zUA_09eA!;@7RwOI25Ad?lX2+^@1N+GC7r$c9<}@}VNmK=%hwP-!@=reVEdPw=SxGE z2K`$B0cSO~AP=Dv*m+r$P#i3@tvA%ySmBz9ujsrvIP0n()62O&h@XTcgBI-JMOTt* zR8^#Ln>5bgT>!uuB7)^5D97xW%w{(R%!w4^2G!u3juIO5QjO0?CkC<(h%J0Y6*PIn z`xbW3(QTu4kD^EYi|#mtEGS0Ve?b5ILbl80B!D<896J9KH<3 zAr)<*m{}g^bs;VQiN1E`(^uQf9=OB3_h|3Az(WeGj`vZ7dG6^llRQ+!dHbO^D)2?` z!<6W+Z4)6ka_I08YcDJKty?8CZP$@P8_JeO&2SGrupV_|bBki7?JNp#0Lwml2VA{e6 z-oC5Aq|YDl88$*vxwaR-n|Z4__Vk$Ly~$NovO#p3cQt>c__=(OjF4dElBKN(<8#vd zH6WhQM@k=23x4m#OBwkLNpvUyJ#G;Lla72b-XWyQ$gSb`S$e-|}I7FJcSO!`YdOmug^i@u59J#^>O))qAlh}#s4@bkR8w0N4q50;-NgH#XMRqE`Xio3+A+j zjte85`QA=bcWaK$zUL`WK^jiiwM9kXav1$R73sK(n0fKZBxAa&U@p2VN#ocR|Am2i zDwCAN5-njfk^mj|l0(uyd26RTO3;_+?22KDa)@t2<^H7}QfXUE%j~-n^L;U7_@ab0 z-5I5f$xC~ok9OtAanZmR3E6<+^4z*__nHxix1>vx z*F40iV?kQzUCo&TwrtZyh+8GVV4!*{T#ni8gykF(%b97^3IG{eVf6%VksGJve{2%|kKZ%aavVYwSswmH^-^#0y60L`l-alBOm5hq^g&G8qk)OufpzK3Le;F5xy2-wg^6{uH z6M0PTO69*gBVs`@3>JC1eI8I^Im@K{f!^vXFX2dwVEq7qjS2%aq22Q{cfR~#_6y(3 zAV{jnM?sNQx?J@mU=jdN7g}hokLHXnM&F-+(M<&82E)zR31~5 z><{vI{MBmpZaCWQKl3JpF^^v2!JNkP(a|_*Dp?>CLs`Pu7p&+&I9=>l#{8@zu zK@GCtYGT3}`#$ZpJ;B(ZJ|1i_hsHz6{d?Z zKK)h}+a6tc6aGPyCS50+YCmcl6~Ydk@7X9QHtL^`TNZhq3Rr6ei(KxsMt?dVa%07buXzlrv}?5!dp@;TPZ$Tk`9`^bAmD zs}fUr(A;JC%Dvi;cRebN;N8!!ml1@geXH9t8Z<2|tcoq`T@0Pd*$wyAgblGg^FiE>>>5?~4l{JxjE}bl9a*0ARZ4zJ3^pSBmAXGK_BwkhZ7UOLGC5#PZb!fUkXYa zuYnj<_Q4}L=^SysVMt{1oeR$bbaqu!KbG%;M-d1nX=^+Q5s9=SJ!Ki%S6}YydTT%& z?BsksXX#n|UMTLDaeGb00f{*0uWtg;MO$e`oQ%Fn9_S9Dvf)doz^j_S{>VwdaI~nD z>yTX0UtFHY_S*7}XVc^^O>sIuJ&w%nT}(*w+3LAUl6?I-!^*#@_EoHtQ9M-ZXHN`Z zVJjqzj-jhN1O(VrQK^;aESz9CR$PM7V|0hfM(L|%)%V%)IjJ)=4X z`>+!j-r>DiJ{nZFzI{JZ<(%C27xw#nQt1-Et}+~RbLztuBpF8`&Uz`Mg`r?tW?Ji> z^C<>KS0|E7Y@r3=-et#qJXwlGE~(FZab7)~4j9-{0)k2Js}jX0ts_Sa_9Z zsPwe(EP+WVtoB?tA<%bI-XW<4+A-q~e)`zZwQzZocz*SRb?iEO)`Ft1bN;AnZ8tj9 zP1iah)LuPI=Lc}EP@@>ueR)?KO&@64gKk%mCS2$XHphn2@saVqh#7MA@mVic_`K{7 zE$9_@v4AKyJ@Wba+-Mru|4x2SEX9i;D-ZKD1DOW_Z2_VVawBz!!n{f^7zUc52vOVn*@ zb7cJ!sYW`8o#&;bO5rtA(Jy5q_K>1=a47jyjqjuW=#@)yAK`@=4CDrq&Ed&B)1q^I zs6#-yWQ&4QaQLX>iScK%n%9Zv?zqL!xfsp6_Y8A#zH1NH685c=5=PW_iWRdSf`Xz+ z&Qt#d>N6`XY+j0h$1UwujbQt1FdO}a3!H(12UNyGA^&QHwkQC3-~h|QPCH^%SIq2? z=7Qk@bFf9x%eLV-c$OOoR`=M6Anjr5^KIA>5)vI!#v|_-NJ0}D_!YeRj!W$u+}#2u ze?2XdB}i4^%ULCAwkQIeAYW1>2v4N1iMwnF$t)~2v~(F=uFChGWQEtR_~<21af|DZ z!F~C9>P?V;^KEVI2ojXsUY(&2HFq?-3}Ubz&wO#&r3bsYC$y}%c2X!8-Cn%d)7jvo z^-{6FJ+j`=1q>xgad@7lK|B3Ew`h7?;S-)qZNho!orf3=UvDRUZVm@DgE{$aa@X-Y z7UE5A48)4klFTr#|5Sfb7G1pOF0;=Q_omnb%oHozD0A6xzk{;R?H;0#YP>J^)TyI} zRxs^5_%QR&QM=EvY;nj7Csk&4wk$ZG|H(Oid59CLA}sFo$lyi(_{w-5dQDSsmN<@i zfCQr4g}W6fuU>sE)zyDKr?au{ls*O4z5B-{PUq#*CI6flpx^_`f8X#~-e$kf!}lXZ zX9l=-NwsqxhMd&U+|udx-S-aK9ufOr0?VDvTMtBGA{^Y%q*4lJcae7Hjwh0PE z)4X=`Rb;~`PEz^$dn2Q!^5&yj($SoE@P>5K76b$Q;YH{6Qw<7H5A83O3uzNyw*H3C zPW75$lzjnX?27$Yx__$6`Di`u?yn<`uqsJRKNUEB;4cl!p!bIF$7^a7q*iIvaB}q| zQxbm^^R>;FV}3m5$d#sX`p&PD>^@j`*0780)8*vS2E>xAj-IBdpWo<}p_XH4-X>nT6Y){F&p5$_t(s z|Mw$fT%Zf}K5!YT=@Q|2!j2h=GYS;;oJD5~=+Ve5)gO$^vT_hWxEShHb?08`YLC&J zd-|Aycf;Q-q?W%({6UCMgEy-%R1rlqD3z@HzV5aAE{CW?(c90LQQud;MjvG#bwRgv zpy0f#@nG*!#?t)m@?Y5Kw4W}|sBI9_+pkoDw~RcyaVqrU2}CGRStCQ zUy1)s4(umPt)n3U{b!5OWPIkmASA3n(rVM1EAJ(u3wX#k`{X1_;h#ThegWtMO?gTj zObLDt&NrEHxs>-wc&2CROeM)T4Nvk)BE-L}QMfVlS7gmWW1ZllxT>H%3=9{L26--$3Cc2bau7%g0vAeEHonJyk1LoTC%HR4NY>hk9N`W*^f_t zymI2f3ub&xTy8}6zOW@ZZzh-OVH8D#|7d~u-DEH&6VX5&FrNSMWw|oR4gkKl^{g?2334=;V9yJ z0eEMQkz)407t7;lc(79plzG#4srhEc?<6A$CDqit@Kp<4@xse&FXsD}2&S|nhmo15 z^m(eE0Eh`rco~d4uAcpVubl2pJ=*QbNBDqVRX<%5h*o%-dr@r7+t)mNYw+O;lGsiW zxZIb@{F6-~Pp@~ROh?tqmt3Ca0#a4XeEQj3*bJdr9YgWn#g|g)lj#n4q{NsT z_bc~DI0h4&iBwrQ0b*$xePciA8~$X5Xe4+~7lL*8%=&meZ-R2!1CYX6Q~FSO16c+XabUk6$kH6icWOi`Ij(%#G?X6=c{*45H=da$Prr7Z1$*93(M+nV0UCaH z;-r1l&Xk)@PsTMn74`dAJ34uW)VAIEX3lYmH=c>NuRGdm-cOJqE{&MX=)=?6CV)k$ zefrgDzb_ZaN{vAbPDcv*8Wo>dm1m@ZaZxs;xyNTST$eiJfb1Z}Z;}6O;<1|UwVdYD zC%>jl=GEjudL%&Mf&Z|?S1Yy!30Evh-28jJv|RJV&SrQEcTgI2iGoZkpO)sl-%8Pf zZ7_c z7*{R3Hj}c)z_Rx{Q}z*eY2P~3PxyjHn+X8Hn2EnoPA(g{-cD(~M~RVpIi|<)vqqze za6TPBq0!x@$tUpE+wV`1){XD(2?P zj=43Ky|6D&pJLeaxuU+e*~|iQRKwQgjwyhohIzViXy2{}b+4#8$1=KfPaE7wTU5R; zQ*SMr#d|wnbe8_~HXqLSaV2$e^=O!3Ujl_*gF&K*ZJfa7fu3@dc7@Cgz{bAM`)pWZ z0JHQ+9=Q0MG##J1&$PJ!-oc6WSkUt1x6|)$+7{2~qMZ)Yn0{dw48prjs$Zc$#wW-C zDe=@Fxq9o1?)7;|?!VQ56 zyje_0-S1fxaU$_|27${_+k-CY{ZnNO1tlPtedd}r$<9m5#WF?SdGOwT{U=(zv^&sA zK!*0--^?6={!DOkkFlGpXL7x0nyc78yH6CRy)$^Y$}y_neve#|`s@a_ziHQfH* z$H2(RH+9@u01~YwXY__5^%8*ED|eJ}Fw@MvKK?M26qwSZciEQnZ>eu+OFkzQJkS7T zLotWG;|H1>fUv+yPhs=YRS#jA?ssI9$!`j8*wrm_7cz@&`6`m7-Y=wXZIhs{IB3!! z7H&K)xsM_+;1L3F2|hHz{A#n_>p>uUMgmoLrxz&3-kSs=jE&Ow4^6mtFO98T%GgTylY2E0QnlS$@D%Xhk*Z;c31E)qR<}j!OO4W zVyKroVPK??cM$n*ng&UKmm1fYEa^uqk1Plz&BgO9iYOiE%HtL&mI!ZfoDexO8c6ap z#J?G4QEpchx8CLL0XbP1F)8FxcAxweV#dwx+@&xvP?3S3?DrbpMnCP8Jr4<~TGkZc z911A*lPd$l*2(OkEyMGPC>Y1G;UdIPdOQ5hzT7cEUBm5u4;dhF`p`H1&>?@wRfFunbp&l9op_L0u3Wb(SnQLET5-L)J|`}p8P zZaGqQl{s(QrlUi@j?fxuw#N&-T7qexsJ@hB_}T8itL(?#;D>d0dhXQ+j}&r-Uq0Q% zEudKPJmn8aB>3loAwSgoiYJr8VgcLw&oO6ZLpZVC;dOs({4pge5;kc0(87m}8R2ryyEj z&0>Ls?@e|Q?nOP%3O#Fm!~jDTWiJwekW_rPLn|dGTY~M4!2Li6c|#BP%Hwx?737w~ zQ?!l>qV*5A$TrJ7zPtwDcxe8kcj3vB4C9W&iY}Uk?1QFX4=3E4Fg?#+x?#D5?@HN} zcNr4*HQRs0?He7aRo9v*qCZqk%yM8o`o~^`a);+A<`j{d(pfvO)7l7DLE{(w8@UG5 zQ6Y(ygNXOMXb@C{0pa_}qd(cYyKfdce@SV{$sbAsKMu%^W)0o!HXWGb#`NYFuR5Z> zQgqWZn*%`Z;mDNDo?|mvuUc_b~PX+XO~;u9F7O>smN4$-grT? zA1M#Dtp3v6Z+IJaWOeSKG?#!Xp+mI{UF?Id9Yg3M7e5Y;At(sas$<6`aNXGrqjcU4 z*Q{)_m1xIrDgLeHzrtB5z>OTe8_MD1W9lSU& zGsX0v71&tdmc8nvVdoEiGv!ynaMkM@uwMWJGY$=V-5Gw4lDSUDyrl;)e^9X0bD-fN z?aLFPR8s-i$se2uPJN}P`hYBiA`>321(8G-2XNdy;HJ29SN7|Ah7N|bEZi$LfCEYi zKxGIa**5cmHL8yFJYI`sU&&1BNn0;>Rt|;&LJQo!q-Rtmm!EGMG6X;5-iGjrV5456 zz{nZxi%}Ti0{5a=5I6HbFA#SK1M^aSL;FC|w{p@vAp3qtiyDX>uFWSBWJV!Zto*4-H0Fun#T~nB^c~ONg zk$I{ll5>M4YtXuAqFibC;IMENPRk8=_^KrtOa1e_lJaf$NRVzP#^lqlUbfB&5E?OK zy9_i4B$aFa8cmWv!|)Ny4w#w{SU6r4Cz8#Dk?E5vOcF143ev7Y20>Y{6HcY*BuA z56i}0t(_idMh&6XmD1xlx=4*t*>vbzbC&X(npe`IcF&Ugea`cw{ZW0Fd+e}$b%M+; z`QFRzqbV#9x)U1!6>JSC4xGc!HHUABLlx=pJ|Tn0>qBO_D&;BUPxlyKT76Do!bfnf z?)G#dPRZ!}F0k8y%4m89pURmZ!22&`+#rW>5kOO9yUzU8gP4B`iX%Q`TOsmBwUE`m z?HfD7YbAxPImFXr;*9uC5ksc99A$7;H1@Fr7X=O2J|X1l5(ZDn}^ zs?`rBp%3@^5hox-pVQ6%jHk`GgnW#Znnt|<4IPljU(GvZNI`%>9b{HT%9dc`k(?U;GJ{}^v*JG>>akb{|hX*BVphwCndodd%ManIs=-sfp1 z9K!r+Z&dOX#bnEq;H)P%=xGc#l$^#3%Fv3Oi8f13#=bA3yP(15&(G*V5@eD`t6Eq2+!uvh7^D=yb;1<>wm9?8^bxbUdWNbA9&UqRO^XR(T0sYO^*q_zlyPrL+!Fnde&-Dp5D0j8V3twx~ey>M@ zrj`Th=L((#6jdNcd%4<8_YPol^7}w=686_8qd16$S}MnvRDImLWBBL}*6~5g;O4Pp zti^zQhe?v%^k>B$Kmoey2vuNNI?u@$@j7OO42yF8``Wi7l>4g@#w}C$+9ke#9R-m# zBOjsYB~azI?-ec`UI}bQvFu(u@BqS~*RwxBg5)IJqx~f1i9dYTt4MJ-i+TvmOgcIL z=x5?!nmT}zr2jNucIp+6`A>7`etf2|@iocRe1;)TFio#l{Ja5zv%qK6{Py1(0m=xq z69*EcpVjmPn__DnGeSALPh+{_i;Qat!MOd-ZD1hFs}HhaaU9Nrp@sXEt^$)(#3RMl z;Vk@uTQ4P+SmS?XOVk+HXtLz-)#F~tF?>TaQ-xOGA>RJ9vS?-970TfL)qW0z4(S@U zHD4_s1KYb^k0rRgQ39V+9KzMz0D^Mu6ovWo)4fVS++$+0?y(};O4=BChpXWH@+ZT*MW74)xC3eGo(+y2vBaI9D<>j} z!AT6+UG775IqJ@F$BZk~UjIp{kq*?6fzF5Vc^JOG(fw^5<3j#uluBCT5ca#>qmsDi z(sG*V5J;R%Z@+o(FV-d>UG`WWEi&rNiOyHX8m2s-_UrPe11I1o(i`pck(6;)AD&rn zrS#Pa3x^s75mXCGn3{M?T6Vx`=FH7f3V~aFJ72z0eIMs!4X_B1EjB3Kl-Aq#gfRkz zvQlk|H~bO?l!d2(Fq3qg+vv!NhyGr$Z|?AsRRzKS9%pQeEI)*cvhQ?RxJ$W7wJ{Q0 z1T_jXUQTxxzL6eO{jbMs&-Zvo9wq#){U)KUq`Kh(^`Ggyy|xA#g!v@Dh@4|C(&X{B z(&%y6zU6WsVhs6Gn8Vhlt>06TN`INX_#sKv^8!A87K+j}owOT0s`jrddhHF1>m*H- zdEZ06j=@e2T+5@mE%b&dn0y=_0JhFh%WUHCz~g5%;5bVi8r&^qYu)>)bPTv^fT(=m zD!T1%O1mel3p0%u;#dF`fC@z4JldMMh&C1h>7d6Z|H)pT86VP9L?1>nbl;T@)rJ7GSCp!3r|%#b!UPU;p%g`KW%{MDexDY-+0=0 zQ`tSU<(>v4$4{JH5%#tkgxV{0TeX3-=De~?Xxc&P=RsngDry)^8n3YQp94snf4H?}54NN3TY7 zXb zdtf{BMkWCo#Q?eJ;rG)>3k`W{HK*HQpNBU~0>YGfJoIP}a}*#O3t9_FNUx+x5)I-WCL}xt)Cf0Ij*rNXPVabf0y7 zrdmH4b=i}+6H9RVpp~)I$n&PVqu#WK6Tr%P@`7~~0o^5!zOMExlW6$Kd|s@A=y92` zF=JOxePo><#$&$|K73aX@$ma>gfWd?pjx%7R8V|S>^)m}ala5nkDJuy2ya-_DDmZ` zeH{oW%2GH-9nSmU1zZh~AMX3c5(S1*b*Tks=C>t$r{l8R%g46L>Yall_523Mlz_mg za};M96(um%GVggsJa`ad=Etn;0{1*^-XR1AV%jYClbB=5JeAesJgb$#| zm#wz%5$)9s@~`So26iR;y{{if$0rYMEX$fLfV4QpMh2`fKLJr07~Z;P74f$L_S*Zg z*OoIroXm68<84YthC<`VcTvJU5y+crZS|D9ES0pY=lIgm1X)mGgG!c8Wz?LJ+vriS zDCP%?-y?AR2~MGV8(!6q3_TR}0Xy%0s;&-4Tm95Ut-*6qJlla=_m~FYzWuxufrXfO zaksHKZ@s~I3zSM>e|vy(y3-*uKdEis3CHV&`n@Z*+Tn(Ic`0 zdnABYdk?cGId3Yp9H*`pwr{U|%NtYvN_egB*9K2L>Q4()HH6<)m|2iXmlQTxuP0gD z7#o1Po1D<^(GU0GmKijoV!?#a_rAQb*4uoK*@3VR%SBR;?&Sg#F^zsI89bl$oKPeI zyout<>pu$aqNkrsf9q!opOyy)2Ft9)DfcrTr+%Js(&ylQf@=lz*c+tQ{`bD5ClAJN zQ*hm-E5R*;#>82`_)wV5hZV#TH8+aB1K(*xcdgrlESG~lz@WW}RQDYyfWo*|P|*Zu zX5#MJIcF2DzcBP|(j1t6L$XiGYz3`U@WOjhE;6NZnnRoshzt93KP=m0JQqo0k^ zwF8^Xr=VFVoVPzlcH)GnVFtH&K6#?mB>aoOZw{*9w);r?+5UI0cPU=g&?%NJE4g z;tMg?kNE<3{A^b5a$_U=k}wr`x%noE6l@zpJ+isOB{9xfRlhFLX@$K=4pA$`Th@5i zp2BSuUzK`Kw~20Q;fArP+}Wyn1)K>4Jc#=1)>7d;SvR{OGDuC`L|-vJyXcDa5q8r! zX>qv1d5G{onHbAsO@6G=1jUM&dp8iea0Gg8;y6o`?k4`R{>W ztk>aHQ-92B=mAO3U!{e$m$U5Pr+}%l%y)4lk;$xkd+4v=BcGu^aq^)O6v3M3W@Lld z4Zt}|^6#nA5mZ50a^%y8ev11?`|2hTAQjF&_R`nVNNwz_`tm`VsJbqsC8fd;^!A>F zduZ{%xMW)Kf|Tht3*o{484-4d$YH}*knAm~eUNysP+H+*97o#9aeiYqH%gr$bQ`?T z=9@FV1m=a33`iLK=0~Bdt~X29HNTjof4vSaXasvJIYxl8FIasC+X2lxJ$zo>epsdh z&pQdD%}P~A_ipl_NyCGmCGmk&?mmU=9)yPSwJ(oGkzvcQU7c+Ava84heEy;}%t{`%(3K(X`Tn#v z|5baq1Vq>90kf?aC*XZ=7m_CHuOK4UtE(oJ<|a_xevqPA71_hd^F=@)a3DdZhH)M{ zY9Dayib<^`dZ!Wo0Y6Klx#-D*#k^8*Rte(YC)olW;kGyhsfF9pzZMOah5ySL5%XW?tZ_{EY=Jy0!^{tit-tA98pK z>r9B7c(qyn(MilHYp$8&!&momMaFa7ceF*aJ6rJIXtga+mEUuYb<07rP!kink7{gx zC>uU$?tPB~h2GZ({&$&uxFQqam*8;5H*Z4nR6la3Ll9xPDA&*R_8o<}wpa&mdLYJ@ z4z)!cb-lG2@pgQjDecaq$nf67gaR9Gf8Gx|i{-d)`$Iro44a$3&s!1iiJUZrKEY%T zoNuVqVB1aJt_z=qO`6aZer|!;bWm*mcXK zeQapEKJnj^Q2WU=;Y#lGgkN8w&$Um1n*Z)MxlnyKl-X+g{ocuSUfYi5U?a5c>nOAc zo+?Ds!@=oX_-lw((K*NKNMahxUcUAv?2;2bPJa^bJ21n66v0;^j(f;;Og8OZKX35# zf(GuW^7m8#d+=I0kS3`)8o=L;{FOt}(1`<)m7e@*F9OyH`jh?Z4|RL!dkCEJbYi*n zfHC8i4{m0Zw0LNu#_bQ!5Pz{R8zaA!1Gi7yKMR52L`_;4R7KBwrp#YX8{gXT>#aVw%_YCT{n3D|U;V)|JRS7Lw%rTu zpZV$DUFo8J|LElas(8N6e(zD=#KG zpaTC8zr}UBFQp!&j;CxU#)=t?+4nJ2ly*Ubk)t1GDXAw_+@t*DOV2W%v&6hS&+Wr{ zaG%*T1^wv?-NAizjCYqrX)5H0hV}TM+U#Hy@B0AO8H(_Xyl4q?Ihuie@tvp-q#~JjKw9n8YkRrF%E{zS>rSa>jQPuf*+8fv!9LgP z)qUfA2wZi+%*+hKXdOqqlSn9~8+&E%a%p%8j#d~wgR}J$%Km#awvbk}pSjwA86Z7b zz{6LL1>t5=K6@i1hEgSlMUw}M;j$Iahrb3llFr|Y8g94q&p?$&%Frk?A}hXuiVZS=$|HJOa6sza?Id14Gc%-oI;$$N zjQLOsl&-Be_Ro+bn7UM9Es`7)iMB8(6q{!JQ+7b_0=zK#3VX3%M1xmmK4MES$Y{gl zRg|^M-y!w>k@<4I@pIE;oE>y&KM~7)@~F;l=(k9#ji{C9>5F%q!=8ft2E@>m9M0Zv zVdi$&`05_1sXnSeU~qx>CM`|;B`z7}G1kZ9<#}(7d~4>bK=%9OdtM$&try^MZ< z-Vtb8N@6+CQ5MwDuP;}Cn%K|qKvInu_6TuQ0WR-^M2PirvM#DSF#s3h)*D_L2VQcX z9Y4j6eVfQxK55U&nfkGT%uVt#QVUD5GHDlnhvlO6KAXo{0eIArP`aO`BqI1AZTVrj{L;if_MM`ToQ$f+@ zG=d9aJUP2CEijW-g*e+w?L;Z$ftG9UC&zhz=pVRl4UDr#4N~IS$%k-l=yT(z6nUvy zgl2B%vcL+}$;a-$K z*TTA1Mj2}I2qg>@bWI8(gpgZhyRk#{9->w^zB5H7EZA18c%U9sBOlJFa7THil|^~) zVdr!?2Y)N$pIe}|FEUIH$5T%#N%3h=Z&$>AtL)RWoeiNcs*nCWPp^+eLZUpbZB?%| zG2*v!tx5hlZe?*(+mxz10nbH=SIhG&ZELj~qX>fxEWM|;J``?eht(UL$DP;%N zGjsl)U{|&u!6h%jMXciakd-j*$2G@Z1WSXNvcJX?296KZh+fOVzMe$zIr(;0uJ4N| zR}E_#G=Cek4*DWexQvYR7VWzc3XtYL?6F^q3>^Y`Ai~H>zRn`;^H(|*I`amA)3(+a#a6S7@SH0GGGV5nF*e~=BTm%?s&)#)* zd3{08e26KudcAdXk7(%@UWMrJhUzs}HGyv>ji_u|YRp+Hw?cbAJj{K=xVXw~RON0R z9!xD79Uz+PD8zia$HM6z41Xt#2=~H!i$UGr`+His_wUy#yH}BNE#g}>kr@_pwD7z4 zo9C$J)CjWMj46s~`w5(Qa$o}Pm(Nb!LpZr78 z%>!&cOzLGd(G+awE^i&-FO|q-^K!WshVfwVRTOj7&tzk1cQaT%=lYhS0K>^m0~A{8 zpNAZ~9P|S4an1}I!wHxSpb=>iA{$o?UW0J2JCYpQ^-Me$zzsv0>QoD-71Zd)8apj| zIxADPoEUYz{C1;eO!_FxE*#c9aJd&4mtT%`Q=I7;YMUh!ebAB`KW&G5cln1#dhg|r zi@AqNd$~??$)O!z_=*1!N195`6!gvqvgH!_)e6FKI%>=ZX||CE!TEG4;^lG(&$IBd zPTutsZ3!-AT#x71txZj^BPhkXKrhLh%*=e=sjY$mG1159b;FZuR=MR21pR#2qgmj% zd6?^=`bV*g`pQ|$H{#>`#Y0w@1YSkn6DmvRV_EGh8h~$rAE(?MCb#xA01dLFvMMqM z2Gp`2f)~lXcejE+#vk0=dGLP_9HwS>FE)kvso#Td_k(u%GH)A9o0CRA&o0CXjOCWd zZ>Fwq7oDZES=&=Z-}>He2^SE zvwfbowF8?mh{Mmsnj3;i0Fw%8JvZh?_Uc{cg*YZe^Z7m-=itfOJ#6vbd3lmV!M2;z z-STtpK3Mga44mVIc$X7D-7Zq_-Y$E76N9nu_O>bBCU##fgy07=h~fu^=eK7Wk@n2MP|_DFF(z5x71(b<7RW0iAlMxON4d zs#*;IfZsRybI~8c{Pf|ug6VsJ+4iUCyJ3hWleydw4OWk9m5)TskTZ9AAHg}kLiavm z&X8)br<<0Y7K*Y(u=XzU$+BBtmc3f70ag{S+I$Da@^P0oMx(6{OB^rMYxu4T%K@l( zM!z_8{r%g$xe1^Ux#$z_a{CS?O2cDcok`A_jYnsnnL>VNP^`zH-}Jpt<6`c97DyPO zdV?!t3jE7PqKepC`yzHkqgbb**EmDL1V2w#8$}l`h2K>VO7f1Gl1`V`edtf(wMxP| zJ5>{Qm4VMgbCHY*A+`b^bzyfz(HMIYv)(`1hEIQI-mBPtM)ToVBN> zKzBUim4D6``882hWMwB&fhT}dwdcCmdMr>Hf%``(BNxebfZE$l(WU$G&hk4dGlGCcL@SD!&wIqsxd}4i#+?9t|y`U{kLV$<0!wE?s1DhgBd_%LK zZ?o~u%C2f2s9szwDhc@7AMAa|xXJu`3x7dZ@l`{y=_9=QXs5`1-s9>SG2``J>chpoW3GRmo<{+3GTTyMx1liUnK_q7$)D4si6KE zMnhFht$2 zcVTZMH5gh7&8d%{iRiRX4AXv_=SS6@-`RzSmZ`{QPIstRhr@v>yq{^P5IB314s7E~ z!B!$o0e656?k%iH-G2Q#+;>!m%)lT%s=bjNAHCfn>V`_V!pC}eUvtC(aVG8A(EB}U zFzqn6y5ksPsh*1VF{BM`1XvdQagEY!-zBHBnpJ!3=S(ad>lLPW=Zc#DwaO`okC<2! zWAU`XAXd-eV}*;AUR;`vKS`xFOg}|`gPHss3gVg=L$%c-T;LO?FNR{D3_6PniFBpg zn5D4IvGG{-6~Axw_f~~$XL*l*PW*;--FAlsZViLqeHNOF3X_rL46fqap-*5@rtRx2 z^b@_B{qSiIKB}b2b{|gYDGiGHdpOz&EXaN3WE$}$$CsF_V(noXS2&wNIPO897tVQT z1P{NxV-6K8xn!3&lG;LsCandic zB#MphBdL=7duS*G!b@&WTE#uOzvT0%3Fpg1u`m62cSZ!>0$J=q`sSUOYUsKqQB@Fd z6Ut=n6Kpgnj_L33`>kdn zT=TMbn;`UAoHn^#gg?6TkGkio01WoNs)vuOyT|)v7nT^L_?NxkLGGMeYx6NmB7!(! z-b_!Ojev^5hN;Y{?mUeG_wan2(T@1DWiXhvre5tNLQZ(q3o6XG_mRuK3+>$F3%N`* zXxlh(qIM^LT7RHa^d1NDJQCf^lh9CqOBhY?>Wt;c`BP~%+K)Oq2Zv{}%DdWbh$^#j zMZ|rd=v>uE_9lCk&+ls@>pWNv#X|5{@X*DFMQZvj^QiX?Q%_m}u)aO*IsjUA(O$>Y z|E$@u9PezAM>{bPt4F%|4g6V?&%qJTV5$o%hdv?nKMDeorF@pHhP)hD$t+1nEWg=t zp!R?ReqeRx4sGh%)h+L)MbY6eVqg2!ZO@N#kghj*eZT>WhIL?GYxJv(G@e!Jo&OfM zl*vI{v!1>g%S(+IW=7SP60^PEpBQI9CrA)Xe_t=+I)Ev4_N&sIkKM3r1W;vF2fc&K zA%<$jYt0dMe!n~>rqT=o5pGX#0vWD6K5N=1jy4)dU+ICmI9!8R5jN}lzxL$yX7{E% z>Z-p1WQ)q%(=J`zJ3cV+@|qZ#2%ITHJIlJxa$yI)maTqyZ05JZM9{pa#vl1UGe(T= zb)j=>;HUF_kh|kAPMynZ*Rk4TDvv-HKT~rS-bP5R4^%Yk_4nS$w|;^Ap}ZNWw-JO> z&fK>OX)mQH3J{{fhdk@PJ&PX;Zgs@`=STE)&A_V+(C6Ix;ZPEM6!lhb$ zSv)x#ALB!qES6|q2gZg^oJ9a{!hV|jpa~wh$IAR`A-e|uK|tmBE6n6kbR!A!jy>h( zJ?SHmN6QbuCbsCkHg6;beS)yvr(nP*tB~I5_(27j}it#QPmAE>2yBv zs(E(GABw^htn&5~i{Y!&_+YYac??(U@Mi4G6+W_`-s+?K9J~OnZ8!QIjh1yOJi#HN z^G7=cFXKjZ+TW_rR=b0;4Y21Of%T8Cy~W8IN1S#Q6; z{NXQyURg4F~ESv~lw}6%jf#pNdLgMk^si#$({1;qoIO?t4 zHR66!U^4gDXtTcuH%ou3yC-az+kCH|OJriW>(p}9fxcoj6&_vDbESFoeK95!_+|o) zEq-sg%e;|N{A8#c6%J#I%Om=^PXbYs#cr5aWBulY^3cAKTZ0K=V^vRyoEdJYsH58RJNlG`@=9}I4>nM?IFNbe|%oR6ipK894Ik^?KXhtC8T zHL>TOhl)Cv-{Tv)aJgaFXYywP7{jGEEbDjnaF0`~5R!jPPo7s*7pI`idmTvT$-EA} zdmiTp?CSlVgVk2!8!S;#&GF2f>FbcwSLP9ym$wicQ+!?t&(J5*7%9ev%iWO45pWB> zakXdt&FG^eVwxKtjkjDX(R|aVy@GJ;1@KI1$E@b`>s+4+aX58cC%QZ_nDUF(4B8++ zI((JSWoxl4L^JQFgO7|(K$kHl!z$bsO3{a)f+CK2ny0v5BKbq@e{OXTk$MT{>WRta z@O@Crg^aX4ITK5ir5Lab3@Vb|pZMn=3rA;lKAG=Lt9dZP^&;g7?b@=rFOWF>xjX~# z^Z`@%SakB4+74NAAu_w1zPIgwgEh0v|W{CtMeO% zt$_qTkqkRAo(0fsUO!dFeAe9uqj2;&<1UWeipe45E51FeW&P{PwYiRO%uqJ>pva9m z*#aTSQ)PY_V`dGa+bukTta*KeiwD!EW&&0)gj3QxQzc|7N}Jrs4;kHhQ##_sR2x=g zq0LPgHypq`AV03UmcHmb-ur5QIBf?w$@;dtX59Ybt4ES`*m(EL^Qw&{IUMqH{x#Vb zyT{U=gDOKh{!CtC!09N(RZx9e}y&4tk+z6}uw0Nhc}T-=Pr`lT=4H>fs=tcT$TlZ52* zXcoG}_6N()?^V440|aC7)(M^%RM9>|u2F!7QMwJZDr{q+p%dHs_EJvGqYn`A2_l{a zHc`P*RdQB+TUm{d=4g19`YKx^`g@y%Mu~98!}vq-o$_`zWel9x!7{9RP2tdceaC=yGf2$l$YBO<^GCT}E@+aK-i1xBP``n(sS)Hx6PEQ8#d@7uj zt?Ddg5=cZ};LE6w+Nky)TyMPAmA+a@Y;=S=d!MM#_$CES!!a35ERlWm1}IjrFXZy$ z?tN=Z(B?ntjXX{O+O$&h=#Hx+F%WE6XWMwtXiZj%2{{$FfB^@0;F*jWWMy2obwp9%t;nsq_NI>);ebz zeSa#$*nda57f3JkS>L04mk0f)`Ti;H8IV=nC3Mnd^w@!;%jia+6MV z^q}gpdvibKwcnHljVHxF%>3j4L0zquC(r(SPeWek=69q1252Ud*x_J`w6Ah297hYa zVGwE4yN8k@e?B#aO+WUtj_t;FzAg{MSheSZkXXJ>eNsL12fbfc=J%MR;7y;p+Z~5G zY3<~~+nb{Au=(!3FHv~x8Rg+tz&b&jDVQ2_sT-Xph#5jG4l}sCavZ(#;T$%fH^vdR zFbzb@xy~@Fd+$#XWqv6ZmeG{Qj=7!bRTWQmx+mjgj{Y%V0rz6&4EnnVFsJ(4lr}gI zgJ-AxK+~*$IR!M(BHPKpg0H-HrxnN%V7vZ&dE4zR&hLfl#v#%Q{9;)jN72ct{WO1# zTV?U_TXArXU-Y3Z!rPzOLfq6U@$fT z`5W$6o)7!#;un{nO2Ukm%y5@HEUJ>OjMz)bo=v&i+2#yOc0BZDE)=MWnQ=u%T~r?b zny+i|^mZYIatCCCOFz#?cItentR=XAC)a$XV%IM}HTA(5e2Y1Ccq4%enuh_Y+NJH_ zk`T7+@Kk*E^eM;fjEWgLmiswdA`@Vu_w&<> z5Y4m;9+d|G3cp>;f1HN6tKVlE+Q28ZmCYVdyiT$9Ayck#_WUH^uMwdJsr@(C>fdQo ziejFFx7?%z%^pSksQDhm*C~Wk7lN?i;9P#@t8hB`ax|7ZFN7q3;R~Uk8YmLv}P{qE?T9>DT_j8}`m+sz} z^vG^hNQ%r@TvcYWv8cBr`MkarS)7AH;ykMbOu^YNQpwggm~N$L39)|$2YBsL$}AOo zh?kh_H<<73cejQMMkpc-tP}&B0K@(Izxthf=dSJPF^pUBEe!VeoY{symrYkfu%wTo z<{SX>oDb5w|B`#m58P3j?>lk~&#QaLuOh-?*uuki<{RZ$H-)C*1F%t);#kSD>CPZY z@Wb&SR^d$kDK%2vQ{L*_+1lyinhSIR&?bGztmBd#p@lFWMUSp%y|IFM6+ZM{St?S3 zQjh)~XiLE}4w^;z1se7$p%`k9{SiKG%pSAsF}@+vJj7Eyw7)eT4Q%lB{gsG~b`j&O z*0w&}F;c$dUfZBE(r^klD{?!8D~w!j(QS2Q`M$5ZG8aJo`ZLWei{2cZ(O_3!Y}uz> zlL4SD;{Jn}oqN2md_eYB{{uhR{bP-DEWQd>P1-0AlKg%xCnrRgbQjqRhc)R<3`%l& zX&9)WRD)1F&@>Afz$IG}-FE!#FzY|QD>mX4a<#cId$&v(3EhL^R4Q=woMSH*)Z+K* z*RcA#F(`L0dp;8Sybc@VVANl)n=nfygbxBHQ?&>u0p+O|{D5_Vh};M)1!^`|sXm-p z;m|#7opdR%PQjpmc$Viq1?Rc^@|51t`Rv{IMW1k}l&4;Sq$B^Y@8t4HWs1V!$n+Hd zgds;LX5dLtP5J@m9N2z@KWt8`-&b7^ONxnDxWBNgGF583E47r`x^&};`tF=^UJ`mbX!Chqepufxo>LdXWZe?>Y5sr9%V;+UhDTwYp(S;;V#=Vp^j7c zQ`W>ytaLWl*RS{P7(L-^BPNqZ8{zSC0;NYuXnki zDu0b^;j75jv1M-M>xY#}AsOI8iNJ3#e!vi7@*O1~KbHD8<9@~u-=cS{2i>wg8yBi! z_5}dabIsaYE?v{iRxhP@-oUW78s%ozgFk&;o$g!&S=?1rsDL8b_N++@G17e(=8y4PTs$}vs+E};mN;eNU9<>N4X&t*Sz z38p5BvZvc-wD6EiwJ4Ce>XRmIn*)#gk1r7}Lw?Sf*2aq#elij=*fw8YMz4%X`AJIB zCS~4+9`E?d^Z56qq};@~Ben(}(vFA+svkbf&KPXc=?eK*5cKNosN%N0+<+cc?OEJBy>kzbe|4gk{;@&v8-SNt(+m)J!_*-lf z^Z30Cvm{U)K6Er`XovCRaboS7)zUDh2dUgO#HPY&!oKI%pZO)$ay9mNP2nMw(VT$( zWtZHEhtF(iElwL!Tqw^wW=)kVeGba4B7e{#f z+doksz!=!UxH$XU5x!UR6Qomea5=ad(a!}T>hoo)#90YO&wVI&&pl0KC$c|Tx?mJA z=lV1&$ps;WU>KGY+#;F!efA}RF%Qo@M0y>%#a_?=Jd42O`Px~xQ~3goe|O^87!5?@ zV69}+9-ihsX{{@m_6aHoSo)PJEV|~Gxu0)Hp~=54`LOT}91AGyLNau0C;xJJwjW1l zmTPjh_Yc91WiWVPFf^unQDP1>S*geBbxWJe<2En$xG7g5%MtIS53!gF)wwoHJTQB7 zRgd%#Z3Mr^CpU0B(R1J>Oo}#)-Hto&9@vLFtzLW&#zTf=s$?Cq{G=12-nibbq z?c)c=?S4)Z^U2w-5Sw`1n!4q>7rYaZ@{~hz&cu~}=&jA{dne(8aFB)WcD)a)n}>P- z)Gly^T~$yB$|FkPio0GfvE8S?`#pZSl-uk#40Am$!4WFM=Wtsk!Th}JN_Ch0REx4q zpPvP7d7pm8hsK`Z(`UqENHq6y@#pGe=7ykLDR~bDTL9O16a-(l#*)S>{lkYZTruK< zL7mX572#M55Xl|&>d5e)y2iHAstks%m#+QscU<`E`gr&n$$N*OU!>uBe(J`0;BRe(gsex4Uh`L%wbuR^DLrobFMP4bpQ;IvcQfT?Z^xe-?QasU@EENM zF!Q%$o_Ld)Px`HqyLLA~is6%!YWpmSqVr}k0@kKAg&?tJU5NeP2T|Ps?SQFIPWg9! zd*om5&V!N=SjuBxDg`xI`yb$+!g^Hq`cV=kho zsNDKv3}Yf07cha1y%gMzX;_A_8V-(sRo(iq>>`+~M zn6z(=7(hZ+!&Qiu`TZikX%#j&e{qe5DDH4SY_4grZlIsSqm*#ILg2Uj#vu@LnK{jT zY;N?FUBv6pIob^UQ!lV`{S=5tys1?&l(A=#IBx9i1A4-HOitoB=7Wgw@b}l*1Eygy zw_EYRCqf-s;XAjDD3#kx9;N->?r%m3Nx3Zsp(l-FP z?FMRUA9?C5VUWpE3q!R8DcWT3VZXlcW6(ZHaDBcG4rL!95LM8LY&acz^vCaxq11m{ z^?X0+uGYae$9IeSYtyVf=nzVUuMqnyz;-`Fs{QKxWqA0|)jrt~9%c1@f~UKx_InCG zOsR#AUlbO6CF9~*pRrNJJLEIrB z13GJH_}PK}xM?e-pxVRxzC8KE1P33wyj2-arl4Jyhz8UHBO?IK;IbAz@C=|BnkfEo zz3aZVSA86a+*cYF?N-SPr${#n)H&`%SeBPx`!0NV2FTXj;lvlozWVCJ?e~y#9op+t ziOza-I{{xD;WzZsP%&I~^)XeXBIrbqZSi3km!K*7NgPgik8}pLYpr87`@9V;@-Phh zrZ33r1M!gp%?rxd4aP|oO#;L`$=1Eq3=YZLUMPSJBh}z=q49^GY z;Ky~Is--CV0VA@(czqkkt1%zSX#(y_9r^I^ znB8~Ba8q#1_Mkv*-59jpH+7ux87s)E1+8y;t7NwelIZ~^S}*;YzH9DXAGP1vKf+-3 zM8|OmM+hQ7WQq_RAirla?TPV+D)us-&P=cf2+8snwO8G9$T3{_$*?hu*T(<_cFVE+ zT9TOvQ->1?gp(pcY|b;|ZMS$;*xug`-X%J>Ur_+{Z?ajX&f~J|kQLgr`0fn3<}q3) zIhF^OLfP&MfYwDi=dd=TU5;XD68#fRubN(5OB>RgP~!dI{VB!T+=+(jFCX#CU$vQA zCsCVkw+F~z13jOXPw+Z1YgPD%^;|Q^Jprqcl`q5NN-~_hxrQhvDFvbj+1oE%pT}DNu~bWET@J7t@>gKFW~+Y}x66 zTUHUd3xW%vvV&=DU+pUvn@(a=Iyyru?Ua5RG>3=V0tTW)Pno{Ju3%?pD#z&8@XqUk zupHzYr|}?11bU&3KPqJ6zc+Tv6-*e56Qb%iglB)8sn6l`9L|3dQ+Pn*Abyk>d&h5? zU2TZNy8_?;RSTC<`?@1C#_Ec>ibE=okCukAHNS zy&h0w!Px4z36_Kp1AU?HI}*(bnmBvBSg!u%H`$OpB}Ni#Z~3Xa2or%ba%@2#Wn?~$_yWV}PiPiyU5`HDta;#c!-D~4i0x;4-YM3?W1M1p zW-O7M1s#nHl+&dZ^5@4p@jXTrmHhTNE39N8Gs>r-U>>h1RlHZSiM}14Y#V^PsOTM* zS{Z5h+RjL9Crt4OISASP{+h|&z@~U6@ui)eFY$W;oZipd&gNw*PF9JXPwIKU63;ny zH37P;!e0wk{=KBCKWqm{*^Y5Jd1CjIv$eV%n#u$`1JaeY*st2je)p{AK3l_>ZYQee zkG+B3+|UlNd%sL2zwy6yPaI8`vsrdY?2HS6ZjL`qfj=L|{aKSfj!_oXe+Rw}VdnKA z`j}cs9d^#21`&Xw+o$@+VXSe`FT~1djK`4hNpfy0A<0&EE_wI|=6e$V{B!BV7Y|zW zHO1=wW_{*wz;o}tNLbnt^O1raP3iB;xlld$AZcVAE{3o`ETy7Wa>!YeP}_Ep(N|qh zB@T8qe9LU%4tO~ZhjvuX==vQG(NQ;5?7VL#Pl;f9bWJ3Y6`~-X6pj@JS#^-JTSeu*9`jSHj58v9h3DkZ9l4# zho`R+bj<5p7p;l-XlJ}I;dlpaOd;ON>-}Tk8E`qW9r9)iZ6oQx&Ui#~0cPG&JN@e( zh0cyC%u+W*329vVIeOZ`b;uw2;(k6u6`GgY2SdTwc}ug$Mn0*_`6Y%n+5Pwz4QF&- z%6up?w$qT;i~z@91a(lT!~T2N9vTUZ0KUiPbuUfvfzpv}iwIFL1WgsYyk3c124UyX ze#_eL&u%_X_Z5@bNa3R1vaV|da(Ibr;mQf5TiMC}-{`Q>d^~@6SPYURAG5iZ(o--^W ziQ!1buXnY_3i?4hp?ig|dJMhbo`H~)c_MOAwxNKDFdTIfrOeW2g(dpQdKLKuPta-$^sr6S)kO$v#I=$+()g9~=g8I2urygH;geBzP6sETCrfgeGHTf#3cra;W zQoX(qlEMETa3>wb*mAXfot;RNyhPRUgD8OQt9HJ8UGG9^*}%Oo=kU|qbhuJW+j%JF zTPRMhBQ|eMs#g8pSeN&`h2S#s>ufkp^z=K-Hr|lDq(=ps8UFDu%=CJfG4gH2w`2#G z2nSb?F&F3kmE7yZK*E&pDT9GBHuon95JnsU9bV<2WM+GSUE-dcr}mGAw<^S8D(^QR z-!(~ZesJgNR-+Ztr5WD6@+ABM-YL3QNt!g2BNgm%z^Wh`JDsg(7^tWP40<=jsw@%W zYM-E985 zw@j?_=gHfgVj(0K8r@v4Dv}x5Fs)?WaAD%_rZ#Urdr0(p(%#tD>7t0%FO`3W30DRE zacBFOyjLikg%3HBt*cmg%9rJf_-DM<7_@`N-S;QFJ!Z~UIEoAOaW4Zt_(+{Ic(*_3 z5Xf1LK4$tA*EHk~UBi~c>DWagR5r=Dulr#H)7+>cC&_bH&lHO>1<+~{sx#AENbx-G zA#7-#U)3cBr$SnyM}<(dxFAz@qgy~t)OC-Q#Sp_I(r_6iMcOb>iXZij58_#ncH-K5jMRo zx%ec0g#}4KQ2tr4 z*y}{>XJAYT-qLEQs{!8gl9Zz7JABJyZo3{Pq%Fc5n(O;dJ$ZNUgK7fXU*w6k-^)+? zYjmW%#7-s4er#6IEULMz%a<`cUhYL84BNrV3nE)bV+@}2mp&#(6|vp;NbX%;WDow` z)ohRr792G-{&x<>pLDxArkAbZY1q21i}-{-RNTAV>swCQ?h*I|-qJVGur3SZ1~Xmr z+nUn&5)v+gdVYUb!6{3ey9ETDX%%}2JgWzw5vZp-w1e6 zEfK1^XWd8nK{#qb3}P_oFZfkG9O~)A9nD3sE7(W;ck|MH}I3+D0{OMa1O zz4`!d{N_3Fm#Rv$+07RWbK}K&3foHQ&&Dj1<~=@*Qk*wgJYhEz(1qXkUJQ4m&sG~^ zn-`zymMNaSNAy2}=9f%zU87}Jcu$sia)=$(?nV(Nv4$yg)>f3d} zw2#JJSCz)FZKQot@1s1U9J?AlU*3PSjrcPV%W}CrH03ZJ_izDnf;a&~E*t>UNxgl^ zRT}d^*GM#!`1%^-LkZcOKIUH_g8gLzaf@j8GkkJQmMK4Q4Lu351?iv`)2r5v(IwRn zYMLEi8^d>P3Twm@-)-}mOVH^j>9xH3UA+c@e+)NO)THYrEK?4*wHKFp96UY63o{$r zB%VZxv$+#1o`}~A>Bekb9u592UCF6?)nc>)hxLs6pQIZbi1A;$|2)DDK1YJ10l6nW z<)VLNX^G0yLcXtxDU zeRaC*_vU=fcpZ~u%g4`ali33roeFX)n&0jlCd}Rs@H7NbN&t(L_IcT8-Z#Ua`q`a9 zDs0#SN2T=T1aaG`8TP>Sve!AiN&R*A7iiKplu*v5Ht$G$&<1_|9i0{p9>%IM9uFQe z24m&L4w3>kMkQGmB2GT}3?7@IG_~$B7&yeU%bW?)O?kCUhJ{U2V|@-^YTro%HnpTL zOeF0&DlheSqsN7Spu%zdH&NrdQ^bJYA2$Ysi+3$72JgJ*X8NwggINkg;H^7^Bs6QM{PSz9l9b+n!zG#Q_Ff!5|Fy%) zo_>{w8q)deuZwbWYUkI#yO@Vjz-PF7hlTnkYW2v|ZoS?1&V`U%irSOdoE;R+{hgn! z=ga$Ev&Hj7ojJ;lQ%t3f`gvUg3YCl6PD9Y{zf{6KUgS-Vvr8ll$*oQWhEN_Dcc%ld z#&xE&+@vS{Z@n)2(&rx^hdQvUN`6FdnPAmJG9FwQ&Cel8FV7`deKAs_%|`h`UlG%e zaW(Q?$RD;eXzigrsC}u*P-vxba92!h3zCL+H8vbqatk2;m_HTSa42*Ab2cG+MPOc zUstIkb7IPxsr`|9O^Jv~E3e)s|IO*fFkRsLvhY=iB9&qb%2(4~F(jQmZ9UIu_A(fX zy)R+Q!V{7hkseU>EnGor`j*9Up~XZL zoH-&T_!rPT#ga~AQ^J$ z8u^_Vsik_j7ka-pP54d(R`SD_cWMG@phY7{TMq8U;%r{Y2u{$m`c}>U92~Ig3Aj;} z)u%8MR2m1Zmm5~M5MeZ5W;fdvln>++Z}M3m7Hzx(0?0lv47a@UcKe%K%a#{v#&BFj z>$uoDph)7I#DNSA8PAn#(d_#iFn0;VyI72?c+J7oj`!8&=>1a5sx?r`O1o{Y=Wyco zoou}w9$P-RQ{`p`nUmUSxji9az5+k`^#W+_9A-WZ*-crS@SAHGgo194TkbIM!t33) zoygo55k(}W98SRodtFN>kTYhL$8BGi+Dn(m=J%HFZR@hYPiWt!PU`m-N`(s4YQA6h z%!7;WoR@k!1f@gdP+UG%^-7#v`Id-pY}eOnn>F>*9Qw~pHnV=e@C=H|`#K-M3a{_A z)_&&Q$RT2DOdfDtYb`kXY%<~vr zj9rQ#-mmfX(e%E0hVYjvjyIB)?4gu4=}7%XhYOn-<=N@48y+xU^x};=KPP}E?gAN!+w=vE zMg%YwwHW+GFwT?o@+Ybzbj5#+geL5hZ&`43iHf zt%ek9U1QTP-29lN2&J_9=k=bzBoJ&^x#IwgPE9*%}5qo_1AbX^*K`_bR}ZlsG# zvR6NrB;emc4l#2LA9IXO5Fa>IaM`6LHA#0cw)S0-G-H@HKYWLCKj`txtGJphk4N`< zdPG7s3C@T4_WC7m@T$7?4a>PbnBJa*CpXWa^*bG_Q6e0x>Drt&`vQyras6`b;mbOs z^EY$Lj+0Kk!$#%fp?(|`O*qBg9&k_{wWfnvFgGsxCY*WPP}pDc(|lplZ{Ql#RC&u; zM4|yAmd|Uf&n9OG6r^Z{cbol$1K5oBsnzS{VPD&jsZ{zNdpPn`R(lhq$>?8`Pw+Wj zZlg-9B1}vLLnaLBj%o0an+XQ8vD_YK0<4@#UgBB;2{)uz#d{D?kxU19VV_2kLqg(< zqKg{4C?7rX_}wGBF5B*1z%sXoeZBzC0{mAD-(ma)T|fKYJ0I`V7}jx*W>H>KfT6gq z6LrAu6o=I^?`x&eefyluRP^=sG!&SqVrt3^1V?-Swv^B5;Ldaso?RL@H)@JmanX)s z*q8p~Fbo=w20z}C1JW;$tdmEEK_?Yj)nqA^Z;)u_?el^Z?kqRCOEDrh;Wb~P9YC&F za2F%z**U|BcE8ZWx7opjM0C~WqJ9r2HtSK52;Q#B5 z38%B9Rp9Y0(iTQOQZA!=w{~-(?pDWV!^a8c&Osq`#{o^Tz3N2H$iAMu7+6hs0T^3~ zH&hiX4`HRSKJ|4$lG4$i3Xgs}wkD(*HvkBkEI1=5@J%t)m679hP2}zi6i;Bx?ye-? z$2C1IKaXoLly!&01G}ER34^~zs+Jo4B^0rW(|rpx`;sdAdX?@67T?Z!_d3EC`T?Rh zMl5E&UH7|5ziSHFc|LLYV@AnN-6ek{fOc?`gIy#+x)MWU5+ajW21=e9_^5-4M zuAJ@#AT0HQp_o@RDxRrU*Ppe!K`5AgKYz)4$TI3D<%#Qr;|rN`i8Ej!3c6Uhl~)>> zI|!$d!5)7-osIO8c!iX$2TckgjCfPYBoic>sNH+^x|Ko?`m*0X zF`00Js{oUB_(dd@?kSTE88mE|X5QN`jr-NU{S4&^10wHI6VV0weIozMRa{#%F6L78 zy${hT=C@zR$Jq9+Bg2h(GY7Lfv^QBO9sg^(%3f#w8-G9)6>Hxbo+9PYlA%?g!&)c@ zvfj_*4LA@3d9|WnUzgiBH|mhMveZ>3YBU#rwLJiSOW2=L`Pq?z^Ieynn71f^FAoXh zaj>|UhVRUdBg0F!wkRciRWb5e%=G$uJ#$)>1&?Kk7v>a5@fxj{;s}c;;)JzGFctX@ zG==E@?51?a&wDTD=|29`>i;*1;W0Io)hp%;NcEsY+@dh;9>3yWv{0LWr?ld{*SuGY zrS7{M{IqkK1;;KQ0lSb0__qG|)b_3CfkET{jP_UhkZb@6Y`_7*&*XY`*Y68~T)e-( z6aUg)4ra%EV_%)`FF+%MEZdP{VbcxOMcw#43ui+>J3k+&lxa%768Ba=7i}F!mZeKP<{}2SGms5 zOaFf0)@n~@C`A+>qb&e^y~XAyblP`HE~`$g@nLIT+QoEM8B2>|e!y2NbX2F3NW9UX zGk;Y;=iK^v{!0l3rgospyroaGJDNwp97j|uB8VJ7(SrOo6Y!ypI1RwcC7t`qsM}B5 zU*7`-S^5~$9+JRDkJ)C|w6}cnSMGM#uL-!w-J4G^ zIA5Ag0$>1+#mELQzS{QjTvnFj!aN##>9XXI*Y`>v!tN#{lip4F%Q1P0+7z2ej97V( zeo!&qJ6G8V4&guO3Fi(bm zczOHE0C&+nyXli=W9?@g4ld1D@x;8izN-g_rHkjiv%ngj{_al-ZhRGsO* z!AjlIzgWNzReb>^8U0eYQa6WsE5U!=(=&y4hGV_b#XM@DTwO>~2@c>2+%E7=tc;ms z=*o|)?U6d2Z8V!acq$0*cvVMPqqyo9*Vp_a9x3M9C+2bi$@=;seS6@Qx1Vx&f`ifl z!dg4ZP1=k|u4?PVfjP!sA`ofba1PrV3Fi=@wkqtScG|Mkl!?Vj9;m&KxyDxGx2ct2I~ zRovL;67q}vy!pfNM^Lxr!<-=1Uhc7)HTU!OW-)so-cP{P>c8P`2K&x(DeJHe-P0YY zSpF>sE+OVzXMYO#;Ig2e-@Lccg8Jzn>}|8E1Bw>#s>87KJ@jz@#McLaAukNbH~Bp5 zHJ76XcgboMJLvlEB4sgi&Y}5_v?C9OJjSdXM>s<5<3wP=B;#ZZ*0i|ZP$Mf&uu*W< zL^Xm3RfOO+Jr&uwVZ!4C+lZl^>HRvdD@5(r&sQ=ZQ0u7ob^5i!@p}AO4^6`FV-|H{ zwkUoFN3F>E@OJsZD+Q}s3g% z^8G6>@4MMmD?+^74O8(~qd13!X#|&td2BtI+Rt6#l>lw=F3MV5rk8H*%`hQ>{4RE_ z!?s|TOke${e@d>4Yu0+D*Z_rz54(Ja?d?l;!#wMg=-p@MdX_=kGMNRS({5)DH@ANc(3My0ft3!c;ZUMq4c`_`Ku_SYdU#1uY-~Le3 zmzUy~=M3gqDMC{KYlO!Z`Q0r_tDlsw%p(DY?-ypbyPbE`hvDAB^gKv+URy}w??U`I z`@K*>Ud~QLjXX+X%h|l<(xoX850|;JJ(64y;fhU&0DN9xkNKIzbcN>p=(jYpUmtAy z;PfV1dVjQG&H$;1TX^vA@hUsKyySUFcu|P@SFzKp6t(;5)A1E$(KIhIG$qH^9x0-c zHP^rP5pjl2$uNr2o;y^;#;@*I-k*n0;ng=Nc=sP1b=xV|`+y2#ih`kYKOUv>P;)gN zF03RipEZo{KWO>=C>gd0bI6JLsRpQ z<(-9kZW+BpPw`S9QORVpvkLBho4z5g%?|JqN*un-FrC=s6|>ZpB={Erk&NJkQ~%=z zLJAr&wj)~aF~}{&b#;fxQJhMFGEe8*;TAZT`(v}#@9$EITKP2hawL`;C`qNqcX26a z)An6JAO`tYfg9A*ci2E?4~SN+d(gMbCjHdF{rVEEg*IP5zSZ@qoRDHFO>Rlb^r!sT z4{+g+x9LpchNbswd%X%UHuba;D=Z*IpVv7nTK)Uy&L?Ms_-tP(B$76d8&y0C5> zyQS)WEF0-MT>_jt**6I$#%Qcbnh|hUsbU;9pmVBLFmibRd0Ft=o-%uUpI1VYJD9@2 zO*}LR@S;5Cxpb(?;3+D-a+I`;rHDrw43}@3XnU1+w|E2tSci*LllenL0SvbW(JbBI z%l4sv)aeP+kmT4k+;3l*OPFsQ?>|KJODH|IV;VmrW@JlJZFZ+0;WIx#%^zYaK}h`h zNlLUj#ap;b*Dg@aAMk#k-8lE#i6#1g`Vk<|IX}h4Pix*6uwsXUMYoSki>{L~0H=9T zI-*nh+r_OAbzZQE;N^g2&R=Z?na_l|+?7;w_?Yvfd;>Ahh=npOmosaQT)dQ(b^ zT*84kZqskiFooGHdj}tWdkLB#ZKJ;;1wCy9IMxDWo7yc$op# z-*qggcdg@l-ThP)D*%ds_8^~8x+u>_(Vm(a=W5fAwdl78=y zRX9^`zlB@eYnr%Rlw+6?9nQi2miwh;yG5ptJk=)m0ZwrS;51Q7+#ZYn!+bbww?FdV zP>PC4ZD%j)jN||eAf9QKwUez`u5fg}V#v#ZZopu!>j1B|qWjU!N*CHM zrJ_}=Gg|oC`tGk(t$)JT=S_a_it-%0S+YyomBV|%B&t0A#!;+(ppY7G5|JJRIgQb; z$Dbql1SGsF%H!V@og2ZScfEzuJ>P)#g|WQt5tuWgn4K%?ggL$Aw>)JX?B<1hAd+u% zDSfr$Wg|Mo>GRK1CVJiBL|B9wEfuSi=L4$Sy}d5FeIA>4M*%1Ae6J_v(Cbj%yfD{A z>gq%Pf=meD^Y2ve%h%GWm#nsxTf<}aZzZ?ekA5@fn>F&7bg2}@yqk~U=7$n-eFMbQ+QVpq&qHO-TL0j3PRPHu@DOP{nm5iv5WsVFo!3wrxs@6Fuu zN$EWtACx(n(k7}fB`__CptRuH*r)#yB?_-_6!FKWP!>2RT-{0X^*a_Big+0Te?U5(Ni>TBX zo|lqni)=<)IF`cKd5|3GCrl8+y$Cn{>4ni zN>ul2?^W6C)en%U39$-YU;ULCeG0x)7yp&Q1LAh7x#Odit|RUQG8LtyIyGO|2QYGF z(ns{OSb6%MnZ?6Sb!B?wh_H6hN9$3YkSQs3C&DdCL48e8EM9=b#hDoMRs>6mD;lFd zVItCaGyBEgudekA|0rp0j08W7=L#s3&zgl{tT~?cbulF2@*rSOD<1z|ROMj}h6I|g z%AY0{J!Xa$pB&fD+G3&Pe`choodq{-$z$(y|Itb_5BwiyStdTY zo1m!$)4s)c7<7reu3#=Q-|rS|%6awX zMd!2m{QV>Y9ZQLh5_f_%yV5%u3o{YkZYMIV z-zcOV0=Cg%0J%4!6n89dcOQ;zrxzFKKk=gR=b#}*590{>M`ybj4TNnv%SWlZ+(k^^ z%P{Y_J;8026HW)kXEf05Hv5y)Pry2aXtC5j-3)yXUm&nce!g^l_!H=DD9`&(5`3%m ze*U1?ziP<8S?ng?(DpO-vMGChES0TT6mZ1X0Tf9-W5Q&jDbvUK6|@3@1bGNv z0j_75Jt}qP>k*;DqvXA@8ZT~^tHRCEkEaoN49aD3~ z*-TgikRXqmIl52?>-1{NpGPqasfF>mnO@w zaG>LL()D>bFAV0zC`(mkWuE*F z|LG2>)*V2U#GtmfmWgMsN5*88ANw_woruu}{yn)v|BBuxi#~!;2QLYGcLi6G3}DUv znYG~mOMsOA!kBWpC-ZSMe@4e*P<=i;Q~2auNE z7xya#=A;V}+IQrqM2N-I{1v6m!#+Pq$vB1&ZzLe{tJ3!@8pHPul_G!7er*A9&gFt1 z)!&IoqI`v4DNiShC$qhIb{VZkuTjbtt}_btO!$4G27SNDraFA{`%VB-!*-#)o^;AR z!}z;&9ab|nq0xy#2?r>Xz?@8|?0)bs>v7XXVox3RH_hC}xyit1@r&;5Ne_F>d&k|^ z;rv9=Lj#4Edc|M&950;Y&}?E{PNO^v{kOn#D$n0Ne-eI8@^?L3d`gWug&u6Y#$E*x zhjg8}yBW-u&5zgZ4u1^151#|Bql-ua!hoAhMWLYT$dYBgJ zoQK?t7k|WwKK9qVze1IKF50Ri{ab9HZ~SAWBUz`Ob0_ZmxnA1aiQAW3l)Z0yg$0kj zsaATl3eL10kJ66IuiwisGAE+IEkZgX!RqMR(n^;+hk|PE{3ZY50In?q%ay0ds#7qt z!7F+2eyLal)i}E|-HwU(uY0?`oHXq~c*i`J#1D`Mz1o=e>)1B0GiA)g&mQ;i0-wts z;*HPJW1~Gdux|HU4m!z|j{=Y%-jQ>?WqVAYj@KlXW%ZRQlLrA`b(r`4+bLohRf7uu zud7AG0;U43ryThT?wvNBC-;3CgwUL|Zj>m)&%?eC0H@3x|1GAjEPJ%PgZhoVLH!}# z2dT}X@3)Uad@8_lBfl;>X71|E0ZSbUvU#)2e5#dNvm+T^iz*5*uVnift`Sb=kO5Pk z?Z8XfJk5&ptry!~dhPhV(*P+AE7na}`%jjutc`6Y~YY7b%&}CP4 z#A|;Tt1)>pd&q1a5Xf00@*sK@%kz7$;qU>qU#+-%LU6gh4jzdd?EGr~y4#%M?e#(G zcvE=3#lEbr&G=DuUya)M>JFNqNbw%D}VfRmku404rNw*~dvR_$o&4{(DC~Rq^Z?`&k%Y&@$Mc z)m;yC6S(zXpUIe(Xl+uMfDEzbFpJqHaF^l3WD`VB47uMmM<#1Z!$qNe63#gy!x@QF zo%NTJe)lJC`Ix~lU4mF3X#%A%v@pLcb6*b|{eiKMdS(_8C`{s&0=CjOj3>2lPg2W*R^`q({Pq20z0?7jGiv{>ko3UZBJS4yr|`A z?t@`}ig5Vh~rMGzd4zB4NZ)Cp_z;SNWY8^BPy0+J9?I`= zNPgC53E0jv+e+)-l;Av|p%TSTQv*Z!>O~vA6V5dEYmt~aQdekpWj>*=-Ww%1Gm1Vy z<52C>Mb!$czb3wE*xVLhQ5#b~7M(sGk7=GC&Fo)M`=P&r{y8y_dN-fk*tA!kJ)5lW zRpWMLU?o)P3pr!EFYCkmf}}OlyZfkkoORw{Er(*{DPK)Jjh2{m%AM8}L;L z+3Lde+`i#Q4vNal9P70hdyK~07Bu?@Q1K?fa^0c(k*ucx(j~oKhZ72#>_D(np1UgxG zKk84o8brxL{+*+X0xov`N{TmWKElv#gtlJzsapE7zy8I0pCZ(3OQY>63QxIwW(@$R zt<=`_mI8T_3Qt$`P;#!!=|f+qDY2~lp3}ZR<+*l=wEv)Ki@Vw1v_@prP?R4*BZMRQ zzi|*+y_TQf_6n!?T_a1IoAdBDW`qr|9ipA@e5YTkXkUKF5uM}p*Q@2#=mB~=Mx^%D(9oydVINk# ze*-P<_e>B}?y9ByAio9r>?F3LQ#j&&F2z=apq}7QPb)&#$FT)vCZ(=r`>-1^WEW^5r(Vb}eb9^)3S9Q1(dB4|gA%*&_(~$}GnYs%b1mcd0#a11-&6a+A zG;-9>VBXzIH%PUeQ~14k`%JmT;WKpbM#wb|EV(IxYslOqe|<-I%EWLNek%xA$aAWD z5j2CF^?P?<3Kh><0tcLbykJ0Lia`%b?BYz%;0Xy?Yagw<9*>#N(C@2 zl2xGQeKu@fkDZ+=J7bODQ2wo_S^@K@F7Gv;mR5v)xin1=bWZ;8Hkc4cPnrfHEPAta z2746Wr;d7~T4ekP12tl$R+rb7$!J9m9{kM3%B(<6VXhLrN3Nb1`@ z3LW9#F*hhA-{J8LHvfq?IaHu$k#sN2r$wx!7U&%)rFfir4&J)uqvXM;IhCgMI)Y}; zm-}oHUiQoO(5ppt7<9nT3LJYLeRmiXLPu^cIXP*WhKs#t-9Y_)|2}!{H)PwSN3G>XJzFsj4*1o6X-IFC`m3B-TTCU|or*-E* ze6$cwSku$-0T!}fjdQgqWP9fGN)}<;^@&@P6TI!F~IO&5?5Hn$`~B zMQa@o8D{IDh6D3^U`GzW2|*+n!EiX`=99?_UsROxXUw#qw%;HhO>NSpqIPcL!yu3% zT355zqUG|;-%sN0PCh7UY4-i6fo@SZMsl?`b8({6Q^-D!K{Gv3E5aQ(B6b#C(KM8C zy_+4caVU7+v=6SY{3hDV`4xJ6Ncbq9|~VKA^7eBJMn#N z>`{O?_XOFWD}jaP_8V&otOC;0b)N_<3%J8f^zUz&nnAT0-L83j-CjRcZ{v%&Lh%sp z-$43mO$P{THcd;;^eT4+i)KEab)Ga@&hrDM(Ov)9h6^>v?f$^a7lboOTv`6b+3h0b zPj|_K&3BB_;?i&zj}7NWB*p*4g;L;!?Y-&22Z*ivFuPo2eZOC` zOqhOZWTJidK34#sVRy4T#`U!gj>_7+##{0&uos3!5xz0s!VYb$x9R4eNpRbnq`2Yb zqbC$Uo(Yu#K7V()fH$vtZA-PiT;pqqKI&`~pk43G>n%Ir{m_+vX3hQCGwOk~`xcsC z|J5lGUOJ-tr2Sd4U4ZmI1b40zWX!FO7TJx?;K^;LDTf`u>_{5V74k>Y(qw*SvLJne zhRHapx{)7OaB-uAcrX6$3%m1652t@TbukF2X+Uvqecb%aof|Y4}|;o=Y7Z5;a9r{y;G;#fEZU z%Ae^Yon&~3sYVYG)gCUpnXS~~{P8&rv?w9dxY-728_=wMEoC%9D2EGQPy6cCyoCGJ zJOD+Ve8)a=<@lTp1E01h;m=*vwxrt!Y5`__qKGBUQPO8btx2Ex#OVO<+^_o_Cz>U( z1zhn~Eg!!)PGn^vM2V4({^1zGICl?y>ZxkUZV!=|V|Jfn2vY)G?+PydB;|YxbNUAB z^f;L>)VIY0USU3MkC820@sVB-Tgc}2MaF&`sMgE(pty@D?49+#EUzy=(S&P#i9=W7 zvZiod(Yqm#dC5sPFz^w5k-?)RXV?G_7K3ny(Qg|UzndNEEq@*hq~_4Hoj)COSS&-1 z3nOEk2P;P928XM2uQ%d~N|D+SXeAKtmcKUAxIKy6X~RAYTs=K`y+&{3%g6aRJWR#B zY*m=-C;ohCjj+I@b%vn#dcpUtAT3+N28U_g=H1_^H0Usyv0LL?xZdrLFRv>;9wj^h zNI>?Z4rbrS?Z5b|ANg^SzKJs?Nu<&C_#Ib8md8*R7+zobO5k`*d=M2yOZ7oB_xuxC zpn;B^vRuyWI2_Bk}>Z^2`|KEtE$W)(rr?kV}+IVYoZ8Ss_!y8na(T7Rt=o%_6T(KZFYeLg9U1w1f5+$$uU6Zl%zxvQ^y z4x{HBj@6^wEX-QGT6DhQ5FnqO_+GwiB;)!dhu)_vY`e+*d?1ulzYoVmo7KWPyeAmc zAawPjKgzf6EM;Cl4g)f`90Fw-JnTxFjPG|oy<-Fpd*D7Y$^N{}N|~i*ZY2^TPCTQq zv4nfsbMxJo-QNQ4Ej-fRgue=AcrKOHhf>fjs^75PeX_3`iBM&7(F6S6WX*Wd(gVjV zr1CZq=iIy|2~KvTT!_Wj;%PlvOwX$R*$UBfR@e1NRo z&=vCGZpKMD+6Q{&?DO|Ce?$0SIF}X)Rg2@y_v~0d$)zTcU~v3Z)f^p6uV0 zr&{->U-hJ4Z;$lJ#?diHC<=pAjH>5TMnsfM&d(oQ)-y7w>A#e*T{VVKKvIuy2HO^@oUi%6S*Hl9__CCR(@z!7r`vSg>}Lv{dn$7J>aTyN#4 zhG$ONRYW2z&JDS9dHtp)t#`_h7e5sWw)!)SUx*A5yv&FbaUbLzuZh?~u7!2qW8R1^ z_jDR%BRTH6Nowl&0Jfeq+2YqU!Iv?rUtM1|GoZm&yldamQd~Y22Sc^C;Qc6T^m0Mv z4Hht8T0!*Y1;`F6>=B!`4$ZiO=R|Ol-H^XP4;^u%DAarFx{7G;&!jn08q`$b0BlMc zN5Mm(PHcIfnIkn!4Au`+tVXb}mj*;l^JmAL0UdRJ^?Lbn(;qE1ex50n#2y6Q${q;b3!-f@NQ3b9lD2fV;V8+kWc@ zscBv7-Xa`S%S&7XgESuJn5{9GFRh0@qI6+fM9sRtBLV8qwr$5dep$Xa;6L)O^&LDWs;hTd{ir#1Q znu!?p;-f>ssETbs!QC$<$a^s?NJlZ0i`nzRcmiGM@QrFKDZdX=g9l!yjQ!7iogE6G zz>Y_s5K9lwpdl5D!qqv=uz#4&{g=EKF}k%GFJx1ZRD2%ioBqKXwXm68#Leb zOu~Z(u6vNC9NVYH%9mZ5xvvj!lk=kI`#VQ_ETYGB(g14WVroR)zh{h<9z>A==9G{r zN$#KUxOK1lHGlGnM~qK$_$nhZS``mlh|b5y9D)3XU|xsrmiKn>4gHS3dc@Jor=} ze+hE&m;PZ(vfDkpr+#BF1FFqlfLH+MCaPG4eaH2gI1lpSPJ46;g|V1=V!1Eso`|HQ z2we7fZJ>c^0H?vnZ%tnK=9*c%APV9ljFV1&urR9(Nxz+9BV zf)lPzzN8JeS%vS=v+y_ftg|Uh&*$_hpXL>@gj(_YPiy=3QSUbjk(B3{(mp!F`&Gv) zSE4S7r{#S;(e3B&rLVku@jls@*r(g`ez`j73n;*OB`X28wU}FVfla3_*fFN>yUE9-v ziOS<;eX$28B2K?FNeYRGTnSv<*0h}FMSjv(SMK8ov~8hkCo41(3`8}@YqHL4<>h{= zMbeYE`g+v@%KqpHoWfjK&s>X*kb(U;SQVM>69n4g8VG$j1Gp?y-}JvJ4aWA--EyuQ z-OiyPY7|lYrm;Vsf2eoR$Vi3xk zApJE`1~h^eqjaG?BF>#1(l29;INz>-S2taZZo+w<_eppZ0!UXX7NM*<-zH z9v2C{a4i8^uVI;&iO(P^JTy_>?1OlCsI^s`05hqgduVQ)*QGu1;2#YWmH2G0@(c8k zJK8RBuCN@k6Ewng1F3mwt1!?&?{`CPVzcf@luMs%4~KcYMx8!yPDQ=`cE=7ueW--( zskUP8t0wF252k1`Yu<@RJUMajwU0}ROpet`_?l@ZN z{T|UioaN=QZ%Nc_C$%8Ka=cSwDu0{{I~g}4sKXWBvIH7x{BexdW6b5S`chwoQ6K_P z@e3wgr(?YT7PafRbz`rf*M#jAPT%Mv{{g{%52Azg`AqLOTd;{X`PZ9>Nu%IzMDyj! zn|OYNr&tB8xi87pHLp)k%ii6ad4G$xOGG97o`$ELH3_jv-}%ST;R3jKai7Z}xjbAp zlCMZx-S)m&H~M1DqDo^<{>DB|O~6KVwo9#^O2W{-^za+^GyX7=$6h;3+p~b?M%B=? zAK~|%x#)z&YLotQ!GngsH4JF?xaq1~tsTK&&33pxkbs;|TXl{Kgxxpfdw6hgp_n0e=Xi z5FLN9;-o$#(%-&?1 zAYUF&EM6XtsgghLt|5&7icnil2PAvc^LB2{SWUR==~vWf`F?_W{G#J?@I&%)f-fcV z-LO`Ul9?kijAfO-=yFyU?Zc}oRmD`C`$ z!*IVRL7h}KU7#)oIX+&n_8gx2$2?z_OiqH?jm8hTf4;t<%c@K8o$3cfA3Zsgq{6<8 z8xkz&R)z5W?iPEnvB_GN{hsf>B(1!nG(0YQ7!o*%|_0NCSKHRz4IvtN+P$^!8; zHr3iC$XL!oFmy#%2Ir5uH5ec?Q6n;6_^EVBWuM<^8vG6}S$F}Tsz5mKp_Y@VDGomU zVOf9uhcvhgXLtF@gtw;^sD4(2BSq%=FYf34q!V_1CRnNHeVOT(MSuZdm)5E#xK*RK zdt~Sxo>MzAAqUSml?l-m`0SjRhHFg}J&E%k1C^=r0>w6)_jRv=we4!?xzZk4sA7Yc zA_$dOR=Y%BMalb`7zdm4(;)Ad{rId65dlOmXZw}FYryLee*|8z(TeePnlsu4PfOAh zzZ1X(RnWQ0QiQ+h?1bGBmQ0c;!(Ldclk1VOByl(nMEiIV!3WAP87u)5TXCA3TB653 zV67IUXqDZvY7o{8rzF>B8%3z!v4;NtkSSIuSdBJWf*@|b$wqH}vGlp8S} ze+1ci3PgCvm}pAw0Vyw6jCiX?h*9tQS2B8z^+>m^a>Pojj=%8_Dge8mOYKP6#v;jq z*O{YS6#mqSI7h6_sx(=LgMvh5bAFW|M%g;=eG8PMPNO65`@GS4Aih?UQn;9Mk4_`- zR`c%S0d=}Io9hn+3IbaKmCutmw^g;JBi$G;A>w9(dmX<)KvBJFk&oP_j;Uj@WD?Ww z33>CD5V8a!i z4ZS255?HD()CwH5fWk>9ht`>EmP1%yTBckW69TYteP@cCiw6?JX(AvG4L?{ch!b(O zXa%i>2|b@Y)F24xg%)b*PHJbA4YHI3%XU^?p+o~@oivWhT#BEdO zqylw{C8KmG_{`qrlfrP%V?MQ;FAM>hJ*sDS3T}6h#wCc(xm=%l$g&y^jsM0Wc@*J= zR92$Rv-?BsZr?I3-q)>yk)d?QHNk&fIz7>lm+@4rTTTG zXC3wGvws&X`y7!r2g7*fgz3LP^Nf$i0S4Gq(`nXhJ2k6j|61Hu@@*(Ti)p<|7*p_; zCU8KALNx{W;`EZ(yPUgH%`#(8vCpT(o)XDW7Ra!rkkMfqnEa0c$MHLyLRx@+{EoKV z&!?k&8-2<1ot;XMx)}y-TA9 zVodqew|%g!1lUOM1%6Yx^uQpO8H!F-a524Bd7iI14}eFU1)=O(;4d+L8AZLcW__>e)ma0qTn+;qcUPE*S&wNSWE-WOseUT5;Y2O8*S0&v@ z8#fN?sN8KvA5uahh$q5R-nKA?&meXg%)AegzKwh8hTJE`4`KE9bqnkp_6ag~7_R;t z(Z7beCSsX9J=`~>Rrn3*?3qJDx5i$u)x}#Ox=pwQb_XK=*rz)zAMJ5-p)m^vvOb<| z(aiU)NBy0WbRTd`^M^Fp~z zm-meF9!1|iEpo5qGpTFGh3hD;f{NZfQV)=556&4F<^D zNB@*%TK((aT_gA4;;Bpz49`~Of_+2N5-5aaZmQe8xH&hl*1Rk}U6%Z`PaSftGPyD- z?1%zoj2>c6Fo{60BL}*)+>U`_8q1kT(UL>GV3FKt;%CLjB)W9yGua2SzTd62l&xGu z3gZy2%6aYS3vUW1KnSzCX0+)TCp!OYFI#;7R)KL24Mw~jU`YzSz0MF`esD)M^6u;& zWje58Z01+e?+?^|M{gY;Utu=^vaGDU)Q}Cp3I&3dm*6GI(#a*or!s6?WGKYY9v+&m zF0#e>B;S$`jh8uaN7MVw5_<)O1Xb)w>T!?nD?Sa?^$KheB*kbp&kJ14q zbj{Z+k=nZNb&^vEOAZ^JsP?z!#^9lEPda8B(+jDC(2Ipqvv~C6XW$UunFY-3%u16= zHqh3T=luZA>xuaa@~X49KIv6b`qTBu(uQuX&HmKNGtE-Q%`)m=v+oS%{mi~zb%vDq zWH@X`h(qx8DXG|RaJExxi>n(F1ZCKdP>Yw~Chc+SoWX7VetJCK-$&N1Q;B!Kq`vsQ zsi}u(<7d495@V1AfoL1TQXay0su9p_`rJ~*65m`JfuNO*`n|pe$2XLEMMOSc=T>3i z_YK7=XZ|U#A2=|9Mr0{`gGjqok6UJI<1-|Vz+1e~r}qYq4-ybNcW<%XI(Nnx9axW9 zZx?~@;l>h>Bb1-ZPa7-%lu4`Pu>Y6e$d`z0e8oa@g|ULh$CcMqX_^?XTY+1yRwH{) z4cuIoX83|TO15#4vdJSWx9#R>{vHcK z+&$*Q3QovcdxuZ|*mtAITfpksG_L;1eS4H=e2uZ{6dk7E#N2@-1$Oo+dBbcEZ;r?{ z-C*$;@^ta&N}F&`692jpLBh@3Bs2Pga{inygP)S5He9~iJ$TsBe3ywm( zpU9BXA|PYx^ZjXG?=3-npLac~dc8;T(dK7#Up|So5Y)exg4Z&+!Z`NNKd{klUnOiK zY_1O{l3-DbV&Sd9@KhD5HQ=v}6#_b($IGiMcZ6pN{t6$X=rJ$rf^OgBE4%u>56-HP zqMRAnm~BbhuS{95@BnxAEe+6YvY)_|ThUX4?1sn*ID2#plZ)|RSWvx*j(=5uH45*@F{E3kVW zAa^a)Xjl8(ml?%h0xMz<2lp%{h+QrvOrrxonKN;gRDlzI$;GZlko*mY=zm$I%Z@0f zG5UWp8e3K^Svg+Z*C-1a-~Qe@`2nptb!;oqkyo5Wu=;OqLt__>dD$2rnh&T+k6y1g z3(H>k{BkyI8{eG4_`|D3^C@`<=NGfE{G)tD$0+zb^%tYKgpDB+YAIE-Qd(g%h&&^! z!Qkl(qmc_k&*U)?fxcp8?e%RKCceC%k7jN+x@^NOm?L5bS6+)Sc}YBiFwc0z!wgOU6X0^QB4y5GSSD? zJOa&%)k3~}+qD`TdtY7>l1ebnAJJQzhpK2Q=h`fRJjvmoAD$4O1re$;iq#JLs7Q7* zq;6l1Nz~#PfK?{7VAx(%7_k=i4;K7Cz^C90xwecqD{?1g5=5}QOdt(9QD{b zR+#G{9k*@d=J4S?m5eWwqwHg%SLL~%HTu@k2a9J_-NQr^8YY2DZm^b9ayy#jSBm8k zRx18`^&15usu4(-_x!N*u6cv`5+%bL5kHO4)5lLU(d=(gr^8V08Ip?>mC7W%*@eCf zx5KcZ8(p(*i?=ZND!k$J%ubFy$YYkrl?jKfLa@4Pp5igN)NxDUHyNT4acbM9lSZX`MZTlya*%-6T^}s`erw z>c3o!@bZJk^u&RzSRI7|mS=l7vzaoc6RW*#;B4&WbD#HfRu{qK6- zcd$a`?8}35yET^UhQ`4ZKG7w`3UZ^y8HRgy&m3Fr=syUd%M)-q6knKLtY4VGvp)33hKyYq@!~Tw-$Uz)itSn zULQ>L&Yq?50?SG5`jx}5mf=cjJ@NnjCnq2v*8}>$Gy7U7*N?O8S-|00 zi>?ooDi~R3y2Bg!8RryA|(!7DRweTyzPm8-`c8M!~bu#vmSS`o>j(B%+RCD!rNrqFNyCGqecQQC)` zk^9?hZYb;BPubhBMY0(*X@Y!BJU`Loa*Wn{fcHi8xx31bG*Ly8InNLmJkCGFpfIaU z$;m_MG<;CEBh&!qgwlna{2n~cxAfn#?$c?P4#u< z)NsY=cV{N~=bJ=l%NWcMa)sl=M9Eb}w97qL_gTZQWfOx1xX8eHIu}dd4xayzzicOd z-X(ouAoLLn`u!=&9(K$V-{fcvK=(X6Tbg*a@Nj#R@rOlIIwbb|%nRl_+ovoD zgx=@w3-0o=w+6}kLFwy-p~S?8ZgIL8qerGR{q*&&uoh4#{3T&&(%%aR;DlwF zVP5RRYQSpf#9ZO68is#;6U z61m@$(ykBf>3UhnHW$*HQH@%vZg08Y;EfQ5!HFQmGxz!m<992w(*lwXFZ()RgU&vF z;;iI;r0|8rdAiUX+rFTjf{pzOgr{g5GtwQMVTk47cfM9@!DOHfu-$kjMf5a0if1PA z%z3c3;y8$OJ1o{63ypeK#(k8Z2Z=RGEgB;oo-j;!{m0H*%dsbr7@V zeuvBGss3=3KvqG|-exPF6UbMy`Q7ydS%s``RC)1psEt3T6x&qoH7(Q~G{ z9W32Gr?UPeik0<}`lX=n@*Cfnt?<~Z!WT`)FHRwVB6_*R&lO!=y}7JYu*Btf+G=D6 zzM$hb8L=)GRF;t*{1n&uQZqtierLM)(O>rph%$a39RXYNzN2;Le#xW{)gYxv3lmI| z;Ck$QSxK9IeuvurETkmR+OHcH+llT*?~{H8`tKRN*Cf9y<&+m<0Qn)5*j!cx{CDT) zddP3;zWFXdc!K6_UvMR`)Uk7VDU)aL zEAT&T!zgU>+ua6C#blZ9n;*Kdj875wrdy~J2}2c?xNyCs1##HF|E80vjDrI>3Y0Q zrXa+d8c+K#+LMq;^&Ti|yywit-ReLd12hCM-gqouAjiG;sTHdy=&e5j6DTBNt8^A> zI^Pc;dB0QwJusSYw&n)f2&Pp?e+$M_E>{0>+ABeDS~%A$t^-&qba`}u=)KIIsKNlz zhv6EmbaMD}q!!Tq5?bTz(w-nu+o!T8mPNrPRTFuM#MhYb6?FxeAH}M$r1)Jb8zSy; zXGX3R30~B1_gFGzrMXugsH6U7t;nnsE2N0efVRA-% z@CepGpWBQ#G}A*=TKL)FhdqCEx_*T?KJKi5b>q-RY-k-<=!`K~Y3~8+gQdRHIX~ev zI(4M;@$=+WN{6NDE7#x4di~r+BnQ;1FIVeZi`++|L`7qp0k1l;0pK-IdsmP_3$OEW24;#~OA5+oJ3j&&k$*PG0kla&;L-ppIuaMhk`S*@2$ zF4?87Pg9DF9S%C~L4rtX)o4_}?(QjU$gFV<)lgAyDUvONNBz?IAryECA>G4g>dT# ztE2tPhb{p%5H4uciI$h{N0IZ}JCKL2(K$<#&SML((wA}*_@|!`VSw{8-yEcHD77;be_n~>aafulvdmK zgG)X``Q7>`x2z_U@4+T)1$0s~QyrQG* zKU%0=({A9n%C+%}FL}Dt@F}L4D>~AL#yy;-YuTpGZgzBf91mWi@W7lsVLQz}3?xvu zQGK3y5LTxf14|RtKd%=C*~qdQmFPV$yJlEE7$?$93vaCFeOE76fLz4K?0K^}bW>U3 zMMMH^6F=c#)HQiSMgb|FW=*O z{~W#`(LebV?bz%Y0EP1@WadgXXS51}5_8Eir7h!j=ICwdelh_#86E*LONiv{uLRm&&<)E9Ym~FOG~J6*+}J|j zcPOW=o$4W$FN;Lk`)&w51N;Bf=Kh+}N2i6wE0l@l&ae%QF0l)va?rkDenFcUIdL@& z63Ha|;N3c-V^=(m*NWUz(6jrqf%?2`&>g$r&yUp>9O5zx@A%nr zA{;-ZQ5W5Hx+UR;Ua`Dpeji#m{wZm<8JC}0f?c={O7OidU*sg-qV`a&U)TfQ{l3^x z#Y_xHn=kQcpYCJf#r?L$b?)@UG&1nR9Rz!~%)~wd|BO8y&oMAsS6^+UE-v^=sD3;t zl1;-hW6JZ6*p`d*+dS-{{+L9l0Tt{5^OH+5tHutEs`lBscC&StL`0j$bdtV9`Kbn< zbyP(|uKxQvCaV~$BMl~6_{z(&9*;y3Q&p!vru)nypjB%DohpdF7A_E@>{#p){v4dH zC=4I_1xK;?SrgT37U+Ooeu@}ei@Rdo-=3@PgUGKj#qWd?G}-lI%KVb&^OpJV!l98}yPP~)#5KcCp#nbf_y-k+yDVn2NI&^2E3QJ<#a z*N5bsy#6VTs??=YC@jDbN>*WTt}ARK&P2RV0g)-*OTpPBfU--V^TxUF?m{x`OPa;% zcKU$ZKwkZdX7M+^LhZy3}&`{+&*lZyOrTVd?yq3?$f zbF;9;jPC685<<9-7EY-)j0+gS+rwS6y(X$U)z;K^ODCKX8E9!uP+LZN=)02O6j)gV zOVh<6gX3STFuDfUJFMKur=JubILCbM`Z0fOrseO6?Dg~;dN5A|?*~B5A)Map7?y42 zJlwA{3~tVoYd`H_8r~cV7`_Y~sG4|#EnW%*?H;U6>3&8BFb~fsKd@s|;wv^wyL&H( z&dJ@E0hb-0zPdg2&Z<_Fxsmqm;C^mk8v$ZSeK7A(=S0hcP9r=O>YHMpYB*llyJnN6 zaO8qrn}hv5BzegBzrE%UEPImtjFMJ+-u!*~DMH4okeL3`dR!;-^beMYf6zqeR|M&D z`IAu*oI(ZUclz!F2`GyY=X5|5^XY8dpiGc`v`$0cX@IYDeZ|TTCx_}ocy27n?lcg*k`vyUd(dT!^ zV*GG=Y`XCN^{{x7YSv!h6FyY+@i!F1DY?^Qdt%99EY$Xtj~prL9e42dOP(e=`>`o% zd`&TMnV#$3Ck;>WP|xH$N1^zBOLwA)kNH|54EZJad02B?i`c&NAaA}CkcjGE06 zXw!jG38~8!R-_?PBbk1Kn9`h=zP=nGN)6@hBT`J>ztl@0U72;E?#nu7;P+l{hx6T% zX5m>g@wJXwou!s1_S(t?=`52{;IGZt-T^LSdnu`m9BzEWNxD7q*cU!-;}<@O7Og?r zD&6eqTw2zI_UZ&Y^p8yLd9|P8K(~?w$YP)6a(dp|NPlEK{hemxrS0Q)S_MS?Lw$R4 z)AO)Y$G?q4b%DR6+DS)8Z7Tv|qq(8op?DW*)8j+?BOUzY@sQkZ#Z5c!F>U%$W!g&k z2RdCAAk0w1^vwJHfuvm^?vFwLTzD+Ba`!VzS?*TQ`&k$AdHEvzrLeu_u&K@bQzObX zJ7>`hmfi~ip*eh_P1pC6n+1`J}oBamk5Pm?uJ(s-N zH*0Y_3&Zwom>MdW^lNO--!VF}ujiOLpmKgiQb(>^%KBr)K%-o=2`i1P{`gy7x6_y+ zhMWNhMek}ve4vonv#dY#+L0_R;*YqGB)(Yh898m%#Zwnu$ft15A`i=uBvxF&csWL5u>bY@+y zX;BpZO9a6q(IuLY2;z-sBGLEq>(5kYjJoGmr9p(f*IsL`Z+?Q9wD%;PMSqU-r)aYX zOn~MGmDz+xvxp2VT(zk?q%P!Pa5OR>dMdr&(40L;%}vfXFBm|=_50b zE=GOVF~9qK^Zn&9yBLU%%@uyPy#*8`Nj|#F*@emq%ryuC`+A<9K2(?FZIAZp<%mL; z(_mQ9FXwi9tb3>ckR{V4lgSeL9c1YJ+QH9a6+dW0erx|=%{};fGko07zZ7$E$-Hie z>J>%5bG}G1U+R^hkPSwtJ9XDK0p@}WTn~-0KQ#G*37TPpuO^p^l}n>e92-O9+%DI7 z_7*tLIserT>^%hFWSumOxpX#SEJ;NUW=BBGuk4f|q9ZO!HZNE9<$$?RuuB#4TJpY) z@5`QelRqbNQhH)SR-~XaUnI#+f zVzr!yZ$@BFpj(o377&N;yyWV1Sb5wo;(fo(v+(HDUN;R2M|YA~e=G2SW(#~?_p`7^ z%uL=zSY8mVZZbYMNaJdpf;RIGu%-28@7Eb#-q3C` zel@J7K7a4$bvg<`cXISgmJiquQ+x~tZ7=RNfJG8u2ZF)1Mjd|HE*=8pkD#1ODN?3iIGtL*VAp(D^gFIg4JV{#B; zt)3qDK^R+X7oDzNB#rnfG=yVvaExp(wry!IoWem0nbiAtW6~TCwT3` z2Be%;NE3T_XE>6|-LWm!czFisYC!u$SBwT;eDtr2n(3pe0A&qqUBwm7huzm;LHSa@ z`wWx}OB1K;n9~jyuaKm~6&Ep;b^7g>5B(JO|E%pL0HNE9tT3n0F@?PU-N<)MpePcI|x4k4c zH$vd@bLIX)YgF=Q?;I>+OAKt14yZ+C?O}%{^0RN&?IqAi?4Nx7nOnSBL650i!2ksEv=~C#ceS2BfZwkhQVd!* znyk=$d^C$w-dXN|r&Up^mC3SSO0>sKVMYx<5a&WBEaZnB*oVDBRr^Bhk|UV^0Zx6t zU#OpRj(_nptx81v0`vhkNcrIDrC|wVb6bsRYM36$uX&FAg$6a#3$T3GqBTONJ;{V4OIHnuf9N3XEjf?-sC~1E1@R2!Vc=SSNdOKUTtYF z^B!)3(Go(T`gE2&6~qH=je`{`cYZ=14y8$aBj@?Yicj$bl{ti&Pt;PeiN_q;@9Mmq z%zJclfj9VU+1QPAtxHoRzxKOZC8Jzr%k<)@14j!5oa@ub553zm9{_j#EARIz8Vjet%IQv%~D0xE7K));zaDc zgwFpJFv2ih?UO@8Z1Bc$CeK0*JpFyROmh9yp5%ErsC;tK5ovAXwx9KvaoxWgArZ*5 zy4~9-m8wf7A71qN?xF)~6TfP-o2G&HijHz-A0+`!>CR_RC~sMYsA{nt>Gi(5s5W04 zu7#MxzoMn<5}L!t_Y@Pf5%F4x?}J?AdY|rhOchFT&LyUBB|oUPvJfX ze=n&DFyKXbOeoTWhD^bX%ZRi;FQ2uo-^}wV&h_}6T@!ZG-{1#g(-l29bbb7>O#!P7 zuM7j?_V}9|2{mH;H^_5FVzzq9Wy-8DEH|=doR2+fR`|=v`$75 zHpaMm0IGt0+zQXJ)?aHp{;8d)-)(xZLv>sE6b@b8Xxz;@g&&?x`r*NnbzD12cng$= z%o)lRd4+8ee_5F7M5qcL#VFiuKi)F~4t!nvi9Q}~?T6WB;ijXFey(d>8Q`C2jJl(> zu5e-?%acx2Th!P4dMuUf`->&aYa&T}BrmxigR-oMPx@U?p9HNmUW?@C2fGOJ$bhfb0_U;7DG9!RNA=jLCE%oe zs3u1&gqCs`$fv9wTlul?fo?9VR|Z%|FDjW_HZore=&ZTwEq>POss0=paZ)FqTVv;4 zh;7iwB4N4LphJhCnS>Q7JoyS{4wSMT>2h~)B~<57Ab*0>{*r5sP>>r=iDIi#)*7^^>DbRB}v3Lfa{x4_6(rCbeuSR$IE*@kUog4 z`uC-2cW`Z}t*!N1m#5h-?eP-qdo0@N5I+r)vj9fg$3VI5cN8fc=!wj6KI8ZUo-C7j zpHB8g)S(et#6NN9eWu2Dt>Xh=r#i@p>17yY(>#+{g5zBNkeJ-U2qCV(g6YDPc7!xw==0dB1oR}8PAEen{jpt2HF032ddLET1H3K zjejHVcB@-7sV1)qAnQwCtF3E~E$HI5pMzmfH;J&^Mi3#?hv~1a?Fa@k%aQx6hWJOk zCZBIVFZfNmcsnyp4AG;Pl$Hx_vV0B6r1N28ADhO1%SP|=2?&3&9LBC<5i}w%GflbP2xmMn! z39+Ep{sdkB!;=6#)ws`MuInV1L_fQkRSuC2A3yftu5?<=@8177 zX(!w_p~V+07C2LT2>9Id%?eEc9l|PULp)MEi5AYj>S|voed+q)W@d+5KUuI5&aAJ|l!SX+)Wf<**qH32{=VHs^ca=*s;0m^M0Sn{yCX7O zinBYR!0Rls81&zL#mDB$Ql1kgOa0{SeT7XGXs(NZ0=76H9Ydn@IWDvhjC?qri2L!D zvgtlf@6BZ53G3Y*`6k9!%n14-e15^7|2b}u2@FaY(bHl`Q;)`@{ulg;GHii)qlp2+{)&p4uWZvu7%x|v3 zv4%W2(m!<$y?`I+)B#@eWP?6Y$@?Q!-uc`s?v1l7cP2f{<>f>N&J^m95uOI)jxw4j zfjz)oUtA+R-rw`1J3Srwv7`#a{cbY>0Qrf(grFp&v&7QpC038dh7=C;g|%Tx7E`y^ zkGeGjj`6L>Ep4ht2NpDiKU9AW8t%#!@7>lAkiMmSTwU-imu-da>r5+FU_Bl7Sk`Y- zp}2FB3~6caq57TZRp2X}POUDnLgJ(I7v*|OiXnZVKYQJ`=RfISTliM#$5A_T1i;?~ zFLhjj{v(ffwsk%O5nw+qs{y;8cTG77KnGG6F-c8)$aC<{T4LLExS-YeYA=NNM(kS% z>$wY8m7BWX0U7)D&bOid^@;lAk^B0RM(fU}7rJfu%l%@StC>hguy5L~_dOlT{PBqEF=*Jd8Pw$!|W; zL>e}=oo-(kyEP`-uig)laUQU-7{<$$c)`0h#vm?|5?tt(4<7`cTr&Am%-)p&Q08_=&R0SCnYv7Yd9X*FX&U;~c>C~ZO4OO3V8_@Z!i9$$bb!P@ z=@%!U^z>;D#r+(Vmx@MHzFP%Qsv7&@jriE&tj*d8Tv(6b=?({?!!oRrvfuj}`u2vJ z;CH|rKv&){DmTGGmpM8)xdo3!uZEjXg;D>)mjzHj({8JN`QG$D=P5zee~Kk}y?3~+ zl`Q|JcYaEmtCW2;+Lckp5DQuR3@PKhr8W3A`zi*xLvZ$;H@XN9^HLeh4J4^7Q2mB9 z)oFf>djc?pXNVV3u*%+#Qfv3&2fyi+!5P1tqry6?pFnhuT%Eh-)E3~~JXU{t%D>#U zQLZsV!Xl_5IrXzcoK2LriCJ&YDC_s58;CBcNwE2_?&mAJ4d*W@_DeR(Bs@ygUl;J{ zH3V@zfrXS>C(C|Q{@!G;mBl_w>WbZcZZ7|gbDg~iZ!pQs$II7;JfANsWt z%xUj^`oh#G*=L6P*NWR{Y<`~CWyyftb(jHRb*S%^;DuTkE*_-0cZGK8*B3seBSb8Q zgd{7hh=TIyNSnDY)SL+?Ln#j4LVd>2Ae3Res`n&U$J;Z zj$!TJnK(VQn*XS;tfQ%K9ONc_zBJOcE3Y>)$)2#8dSUPQA-Ie9i49B8qMvkfzqBNG zLgRNQ(m(PhgS3EfN6Qa?F=eXa3n5y+>J(qF=If1+#qlX0mnJL9@%E_g^XA`PI1>ki zE~R^?^y`xP>o6NSS!ebtvB~cQ7omNjaDH9N&8H~(n+YhzTwJ`$ z@{}hpg7l?w9^wm?Ty$tJ@Jso#L$TUQ=;H6D-}gJKILS>wJyH4aZNtjK?86ZzD%cm8R^ly0n75x(EJ^oWsiHdp6MX!uwLr~sB7tAE}*O14`aCIuj}vE$36ZJLaA)!u zqhPB(o*sHd1vnr^_w(i537HHhRC;Q!lKaCP^$7(v+^nn#&x z%2}?LsUStZ8e28XA1sSceIe>!C^BQ>`skePm%S+ed=uCKNz5a>R&<8aZFTQSuS%gA zD-?pdJ6S?Djn%k(IcSLnm9OT;`xttW-|3APFKR1+mOFza7uA=tn`UYgT=M-sL}&h4 z;Dvvrm*h@18F0-?ZVzf^wI-fmZ+FiiaSoM1*oU!t0gI%vFH(nQjUdG|R++l-E-^~|V)lOioDpd#S!$x&@B8z0 zsr%-q@{#Jua##K%vY+TCcwohB3q9E|XZ1V0uBWT*qX5yB&}{v_a~tWIC|id|HgH5u zxUGrqi*mxwqZ2{f&Q)7iR}rYKgp$;jMugnPN-bRXA6;_``Zgfh+mn!L!@S~Ciw9tx z&wx0*hO{`Z004)z`|71SG4t-XJD z<55ICYsBiv4tCLDYJVzMVEZM!;@sRk|278F;iO#2ZfxBe;X5f+bTzWr= zVdI7)shftP-8FOV!S{tP`EK6m#m32r(Bt+<<%S>N@rD<63dYGl{e?*mx6$Y8{_=T= z22uvdzS61QH`!~@%1^rMqeb}7#s2M72?d68d@HZ)UKqa%c>y{HaasgUkQJFaTESOF z?(FKr7_s}8c)-{yu8@iLYAIH83y&}JvSF;;BN~TqS=Q|)!e_~6*eNNdv^OI%juXaaJqe5m`8Z^b#s&U#HV5R$@#lSl}yZ%kO2@pV|aOJ zpsNZGnm}XD3#y4t@|XJD9|F+1G~aKg&e~a_+~0s36!g>gx06U$5+j(fh}k@I*L{8} z0$xsui;3`B4EOuuCG*|Ero>9g5_ew-YoVF-y_dWWa_V4YQkuPYULlhYanaUyFT%Kk zbPblkgBAaU+*obHJvo`+BV78o1x#Q@rsL8^1{fr0pr;fNuM00}6$k~^A*FcX~QIv=@o zOUSEYJ{AnNB7CYT_Tx5D)j|^Jy~^urMJq`ZUZ)XU@+y&q)RrcWg46M-5FGx@0L>7K z`}n)cd7(cH20}iBp@XKn@z9v^%|H=Cu?%n~^b+)!Mp+9}l7H8<7o2G;4`-mZ&c8MQ zA=!O&_Xzt=}5|OUI?p}#RhE9%sdlee`xp%kv8JXPI4V;#YMhY4w z2g#R?GJ5f8=qkxOaeMcGV?*w`d|U`FpPl!C_Ku@I6Xd&XcQ>Lr$X2qsMKt}O{LqN^ z@6ed+1-u^y9mbs#hcu_bA>m;}s*4UfTkH7dL7ALREp`6?2bBsi)|sRl-B6IP(6)BlNJsK>_Z^Rl&fr5tjh} zJxG_VIz3O-C%lkfn=heRqv3Qi?)ySGam#>p78266kAHS3SGKmFSjSa*wBOvtoqvcf z8n^b?0?y$&3*%AlTUvRuq>Zg15TC~}I&xgD z8q>oD7}e@pLa0_QNmTYSGwaAOe8=Bzd;0T2o!EV-fc5x`?ZxiQk?8Xn0mm3vBv};= zJ_^JaR*5H)YM~Z6t31}8iug$m9u=m<@5`Ah^80GHoXz^Zj;|m4x~&RZu*uQA{N~X= zpo$qHw7=BwvpzH;?fzox;Du)Ogf8fQdm<|wHAvgN!{?@5_S$}KTd}9A9 z2fuC7H!1(}$K)vI7E25PD1BYPj;*b1A#do_MXq1~?Vvf#Iv&ra?%O&NS3N!1-Q%a? zE%(~*<&R?^1xLR9m!iIpXVH2%y#Bhm4`0Uw`sMBE%K^gF_<>+2uP$cG(Z2}@92U^E z)^bKiNuDAZC+^`FU(nT7Jo0gs-%|9A^F3z1ui;!ubxuIlPn5llEYYnM#@Ak(W(`y; z5t*_>_!%31Yn0i@3V@+vdKPE$#-rWc?0hIgd{J}Gvf}RRp8X=qZ|F?geCI&RSLLU> zSEZIrfm@aPwe_h>_Be}GwZ9ODH9dbQz8l*`}yf`o@V~aY>;$W%a`m)T&ceJ8BvFbDQI){iLs`us;gP% z@a%~Q9s19=sg})X=xE3Z;Hm>qwPx`7@&s9;5eYA0&3m=bQrm zBVe|Q*MvNEtkr#0d5nX1xhyq)pL}U(B^ZmIRRM)?f>V5ZJr7~>F~1dBnk1<}dJ8Yl z81D@ZVRRsW6EV|o&;Nq&J50z3iK8x^XDRn3bNF6$(#~Cj44OR=E+_D1K9-L;;6GjT zxuLU=0u=k@UiLfj^Fr@LYp4^}AgW(S$+9frR5TGmntkLPK zllil@2l4kjgiC1c$flNtQ*J?G1Ty+8>=DN|$Ed2n>~cR>-wdQWzZ^w*n3(XRN0$>| z^QfGxEo+k|$FcABGM4xEXruFkv|uZnis7pyr1Dz6*!qgvvHL9F0$Yvo&g$N;1M|X2 z;-e7*Fwq(B7oOVrR5>)B8P=yA>LwV(>-`2qVcg&7Y|8IGeKebVO5?xiDS6&y2SoV) zTT7`AeVcp!hUGQb~Anl8=l}WJSU=( zIo8XxTzu8kF-$szju}WieM!7enPc^VCU`h#%@%j4VsyG&Y88cO6t75BnbbY5f|IJl zQmfQ{9}D^U{-LDU1X80Y-LKqTMkKcJ4T>bRz|Yi!a_ls`qRl7Se4lobK0sfB?0PeN zR7mru>dHk4j+Wcn4ddzCvhdc~=m-=)_7uq_a~=}}wogAY6IHP28Sj@#gH~<5nv&IKy6J0~Cq2-nmJBG{q3!lRB*U%0&3W%4(a%HMbfb z`H4162Nm=*FJA5IW+v;B`0C$)8Q-Zc9gKFnQJCJ}^m~Ndjt!d2yl#`y=O;$_K}L8Q zz%@h5#Tfq8Zu8-a_N@TXC5++hRwd|V_fAvN-|yOkKn0KB@zcGJSVolg{KIV^G9>)F zj;7;7JLBu)soJwXz)iTYZZ-}LkUMzM)Boz({fKZ^oNhiY5$@BLGO?f7fQ&Q{CChJbH&O=KR5D)uAuedij#GfspgQ)}gk*XDY#GBz_ zVc9T1DCZ!!H1Vx*ZERCaxO04XqqBF9A78j&ZbvDgt?pL_j~X%J9pQykNz~I=gig2pnGZp7+Kqk>2iaqAgO=3Z36i5$ph0 zPxUd(=Uj??m9eUqoc7yhh0sJ>q)9g4s8$=!9tUU7r}~#q3Bp_FzaIL0@J3L$SRX4` zi%{H&%N}l_U!JbI1g8t7Gs5v~T&G9f-ObCqv!Em6!vSbX)$MH`5A^0k98IGb&Q$RG zh&&I_>;?>SU2seSPgRdOsXzeSnAfxBG(oGvp8?7rgSVF3QM!nVRc?;feK<9^jBr}Y z{Hj{+kbS*@ilf4roaV*_yh#)5>`R9ajt=k%;YNM)ItU8*Ff{$YkjU%&OZS zQ)d;4VIf1&b`kiP{z;yxIG?|XZc2nNKVbD_?N>qcNZ>lSf28_C-$NULgbOL7en&Lr zpGZv3qB$HW>oB{Yq5n1CQaZd`uklX7)JiVN$v!l=P_uULL#SgC`D)AWbnVCI@`tlp z&g}=|M?Ua?bD3?XF5^Bgc}cnnKFtfRr5<>!q_aICx#pwUDXjKNB(NgRE=4$Z;t^Jj znCpOFT^RFP!Wa;kiI|r4m8zo)fGUYDDAW+#{1Q{n6!9G9T&1RX8KJhf-;}N(!yEIAvVAUEkY`t4=aS?(%4w29z-_kQ5)h*$ z3HXUi+#Z2L7T;{V_;h}BGa~0;@v_7Dl`nDeZjbR7x~cl~b$NvfXCJ{8 z6)RpH1IQjwi^KPE++&I1m&zLmk@%H8o4&a*>ZO1-l;ov=;#uRtILdNSwCpmm3-6-H2YEI2m=80O<&K&|a*F`?FY;RF|HIfIDJX&k$8gn^! zhrJrZY!2n>*vVI@4y`JDkEi@wI-&k*dT)=u(9ss(HkW}$wZ3QbYVKdMVa@9AWsZrZ z2(|r+#paT!B2voVA;Pwvm2@TWe-cfZuNLf4G+%|6uGOyof#2{72=osx*!}i*T{L<8 zo$N9Cp@a=a8?VFD^F>&B}X-oon%V#M&B8y@PeCcZ~Mq|KQNY?^FVV z5;019tJf*8$$K$Fa6nl|s81#JzU0jn=|57d6XnT;3N^*&YZZb6Rw=cp0fMx+&&84v!RZ@Ufn*OVYu_dQH+#Z5F|`QsrRn3&Fz>HpR#cLyx6e+ zF4Snq2kVKD+eS>L*ifHhN)_sOvYC*X=I7lyPYifr^1Dxp&B1DpU^9G?Krok;=UjI7Hrct zi30{9@po8d_W8YZ^xARq(fYRjs z18r2tTHAfC@&02Tn)>@0w<80+9C1FkQ8lXj^$lCI&X={ve${Zf1NQ6Om*8+b!GVhj zreMx|Y9zZ7QPGea-%9l41Cfr-n0YuIagPUFUY?JCo%#9KIT_sGr-XVY*p(_N%2=v> z+B5fE2?OVF?Opku;m%5kB{qSlg)1}q~{HnNaejfBKA?V z{)8Z0AqYr-F&aTXL?&KYquoy+A*RT0a9l$Y<@yJsc-dHe2YaK1_}_k`!>6`Jh%B;n!_CpmqI5~4rPvEgSYAtB@WT6AbQGDs=! zBf)8AthK#%uDJ74z7^7^E$cgX1|P&X&;E(Gt}kSC*JnwY_i`pBL0XAjat=j4hAKC(<4|{I=6l4M@CBhKt+eXiI;lO z`x7El@ppnU9{+bUEMc*M(NnHPdJ4G}e_ZZIVm~#Tm{8K|d9#ps%B^VrD1@AC$z!0m zleC7}U2ys@x%;Gx4}XU4w>$IMbJ7n}ces1p!+u?yr#kNiLeMlt(juQ$FwN( z2q5SK%03cqcxBxlo)2tQ4DT>H+4qMZCCe5yO4%+puMOLiw_AT98vT>kbh+QzgVUil zWV&d6c;x6tBjn_BUlbltoWCsLgg(^yfzu=!*Xt)#ej)7q&P^IC&M8cYqA~=nYvUBj zlc~aa8MfO0xSoe5+yqK1OfY z8X{!g^cmmsE*evE<5Z#N9gE$4J{!cG(HwU>%(8xliZ^xq6&5Yl&3OmvJ{%qitp2k8 z$m&ra8ym!8@&R_(M>4h;C#{IVdW|5w2f@po_8c`$S1T-3e^>N*F)-V8iY3;K?7dI< z-zTOEfmVzF@|z{-8TNkC^ML9)Oj=N0#rrX?DcJZQ9X*qOT{yK7J+D`$m8v5ME|_7& zc|zJyIXb8^{A>#OjpMERt)I=}1b}|_6Pp=Nntj46_iXBBjT^cl>06zmY=Lj(M5|w(%2E*TSM@!7L_9YIG=hxdlwX(5x0+{dB6gEg4f#{2l0aiN>uGRNT9lZHZ2Dt(9XaP&H z+^dJ-SIX6u?29a3m22-WneJQ$MP69_Xn;NUo+EY)d8R-DS+Qw6b{_Ya<5QFptizS@v4O{Xje@g8g)AMM1V2ZnrpsvAB05&38IG5O8UZ}Jiw z3Uzy6`u>2LJIp`bLt~r>loiSSW}F;qx<6|8gLc#&G<~7-;=!BygwJPBb9gs*wNWAc z(t`Wh@4Ewfv}5i5*)NfzK3C2@F}b)w;0J-l-Rs>U;5+QI$z z+yb|q$dir^gMpEZw`SSZ$?=@ep{1v4z~_i+|NC5j`B6=?7HP*Ii7#HyuE65lf(j`+ z>MB;@@JI4=JlwD_-0`ak6ALHX84sIDGzPcwlx3hE`*}+t&vfH@-uT7jOj^?{=H7c! zuhh`2%gYIRmHaz>pgYvJUU0bluCz{NZ}lM=5*HQ!nJqLpRPBCRZ*; z_TxhhXI zC9b>cS+3&9rh|b+`6?2m9^~8NhpxfxwqNCgH;7**kj+duO~%o;?NEBKBwS;DadP2N zf8M9JRabxaT49G&V9ts}!WyVSh>R;_8p*mbK=q zok}NrmRKndACsy<^@I3^R&LgJ`w&}YmOfX#4mb4-fh26F>L2dgYCnV0Dd0)v0DBl| zpSc6rMmqzBAw@C!<~gC==mdvIIB!|F1Em!ZsLbt4H(?{xy6g;FNbGGgn}`{EziyuE z;d0^nd-9;ljO9KforC>vl=qv7ff9bdP1V1l{`}1Io8UNdW0Z9%t+$puRXSXzL0Zej zK!dunU*v>he27JF_AAore{i}W&5C$mmL$Jz@YQ=*Xn+cy9O9eh*QL6hU;q>!G}<8$ zuDnI0xAAw8STd!#{e0(~ALzI;E77H~9=|^3M#30{D+XpJZye)2dFVNIXn0Ow?>}uF zWolFBtd_Fh!RwmyS<+#64PW-)IsE9O!KDSjx7}4`wML-R_>zcjN?%@E1=l(wA6BkE zE^7)4IW`>k45T-~lBTxb%w)l4MgM&a>sfwOj!(W=TFqRs9(VyJdc<0-ZAR<^kAI#0 zc8{49_hGT@h9aPOt}lm+03Q!sxOP8&`0*ec=;zIU6ZexZz_xFJR(~HT#Bd)K@46Ir z_n31drW|8iPc++1Tl$Vp+nC#yJ=)qwNDFAOG(Gd`(=&eXgsw3re$s8k`ghOb}w5t_}hi@Mvp?i0m;Cn{WVio6`LZ?rbDE-(NqLf&Qmz=tL) z-mH1(L0@Kd+Cp~tfXMvJp!jlcl+XwVT3W)QuAs%zoO_yr%oLpAD-9l$nmi66>Wy7= zK?--a_N>-55EiuiTyGha1@7myS3;2~B`=VZuLnYomg!|j(4tny^lJhPUfiF8<$$o2 zd~U0Dq~>^aPHd9=uA;)fD08^=aWlEodXb(B)!*D9)}Gk(tUqy&6()t>UHSag zu<#0e7p6drJu8}z%SU|v+!yuz9m$pk7oyqMe~)WBKK;+6p3N)XDsB;jHi#330|oR@ z?|{2n5u{Y5*7d!+J18j2&zvJXz^NoDMOhB*aZVl(mp&La(~g1l{wRu#{(50rn`*GI zO{zNFpCJJD0e___bn&3~xHDL`wN}`!34|8yMdTSk)I=qbb(_;_IsR*X< zH~r+_9`4ILEZ;Xew2gslc!p{)7DSzp~k+}k4F@yKl z_OEbb8=Ow@IDN|JmJ2gny0jq+B(dC0tUg{91k{aKegd;vXmcA2HW zL=}7$`P6bxaIGrv=ypGpiK0kP! zJ}WNqV1CXwpX*l5nF0o7se~X9hpU`j>C-%DX*wMvWtBbpFKzY=rsKf?*6QNINF{}q zDtQ3Xx+ion#Xdt1T2_vp;bO&KyXYZxWqIM>F?s#K!3RboG#0qa<$M3&29Gv=Xo?A6 zxR4(McU(vp z-i3ZPenx`oH*Y=n>sqvX{cSK>lBaC_VJVv_yP{z3(GkF)%29V76<*;|9M2xb_S@XP zSN7^EU+)$gdTvUMy?$)s)_?DCJxIH}Ivoo!$sl+5hOi5Nu$#SwDzxgoVGidEEyX|) zm3JAf7O&JslJwvnD3ii$A_AKltNZxlX+*)q_Ipo5jQZH@7Y46hz-~Z)hRe~UGQRS$ z`l~TLN0w)Q#a%gREHVr{akyEjOI}n%GxiWT=g6Pf*9E~qa^M1wklW_(B?j;%Y=2;rb-g*h4GJ`I`Ark_(7uq{LOdZvYz%fhy8YHUSY*)kW*R0E4dRgbA zyU%eRaXESE=hX)dr7a^HWKDReJv1An73L@v6uSFZ z&CtQC3QxZxHS*56;jqNV;R&iv(X`jTOn73SjYi;oZbGxl#ZtZhB!7B@>#Pp?&}@j0 zb&VC~OzC$iSE4eKi;^f~`t0nNtNu)DE!t-Iay-aK4y%jn7aDYHpM8G~30Ixp;JS2{ z#Y8Ii6BWach1!0Q`eay9gKJ2!o-`sbX7{msDmd#C3r0tsf(D5%Tg(orv#(moP~iZT zHrME~UMKLIP42iX9_&dG=anGcvxju>o!jHh^^kzRjnO&sUYJ*+fYJOl?lbyao&(OE z@;Lv(R%d+^%L*5<`|;bhqA^?~h61SNz$K?`k1n~7@45qQMA5E(yCrNU0Lj$pLrcgm z>pu<6VitCvGi&sGJLdg*b^95i z`ufyud%7kXyt4D}+CgmaC7I*;Mzs*znOwWSc+4^VCC2j$vgjR{XRSOB9Q?HhLIsGP zIEMR5^8ky^4V{#F;%;7t29ExQ_ebPDF`v<}N2>mrwoWa`8M0QKZs{l9BUtkrhTP}& z9Qp$Gbga(Uag#g%R27TC(8#(WGzIEkCIOuMWvXh`x}wYl#(26^(tP8W;lT?~8Z`0U zdLSk=<^7}-Bs0EFpP%{rl=<3;&jndG9HhQm@ES;0940W;o4I=~S)HWEuqRHJagx@> z$JENL(HPYSMrvv3pK={)EmF=-8CJEzHkdIQJFGxtSc<_tK8G3xN&tRVeQZd6+e-p2`kH zlvJPWyw9A^eo1T2rVsn+`P%l=4{urI@Ea*y8->+lv;Z|K@_qIs35b-ow+bchZcoXc6VBPzY1&1-y`_+kbd)C+k@Izl_lt9 zwe(WEuVfDP+e7WF;*?xIeribYTU;(HjJSI8%8Nk_FL2MocxB0_QTTj0x0Q?9CKZt6 zpwK*7w}PYnJCx>r?*~3oay{Ivj@OyZ=iThvzt1mYS2nz7qxtLK%rs!W?ZfdOP1m)g zDi%e52_-0xWJGe7H-ZQfL=Y6deinUes(S9&Eh@qZJFMVnPiFifp!uC&SjXj!a_uTB zX9~1$ots4EV>RNv{ZPLOT!Qgc6{l6(V|PBm-3@w(!I_@+$h>YvXzX=Zx+{*2C3nB( zkMK0WnYBylY&_gwllti7lN^iOq5iAJYiHgIUjFHHp03ilezt7I*idE>&_cFzeJhIF z{rqgO@}WtODv$nIWa#*%8XQ_Rmtb}nj!bH2lGCox#TXy3i02a}xWM`BXnyxtvc&ph zpF01Y%k)|uKpayYC`$FBjZ~I8)$tOprIttEus^@V_wmnCXWOG3N^?Qr8V{1bD|t%b zfdqRl1tYp7sqdCCZBkh7v2tn8)~RqU>cfB!g|O}2YbFHz#&;q7`tRjcMilrXuTMec zV8xxjt84y|BI5mH5Hjk<{NwNOayb3w198OokewL47oG}T+U-i_4UDTq_kRH6g^2My zFH2*o=s(~~{4-lRWPbQ6itIl+>uqA`IKYer5hpmIjjz^zcPALJzt9+FeClRoe_R^r zXx#T9QJBw^8q2Q+!##dP<_mK^G8L$(^}ZkJ6uR!ODb*RaFDvPB-*E^^9?PJdqA_?Z z;=>YcnFQk3##Q}75pmFKX9fXR_`=YMS_MVG4&4C-s<+{k>|;zEd{QkgRr@N?la*Uy z_A}1XwZDMW(u~4r^1@*AGg1BdpLAY%MEc5ID7uXt|EF01NClTHhqj)yAbXY18;ONe zW_PW9o`3O{rP=%;d+rO*2OhQeo_LgfIF;Ex(Gv76#`!Ou{R!w?<~CjKi(5GA9-KxUPB7~;xE(rwbjr)_ks5Dfeim?Afaj=OFaowF9-bB;#CFvj%#JVi?YF} z>id_r8;k}-D#Qx#6icE$mrV1s-zH@6_{*_gkA!irY0}rEmt!9$`)t3|a(TrqREK8@ zc5<=SbvmW2$6lTE+K$$Mxmy5jPhnb-(Ka4G!l--{F5{~M z4M)wmU>!1r)$Ms>h?ok4z_htRbF)uAihG&e7?jLxR)bpY9v@AIcik_m*nQ*l zpWa8D_d>r6{OKs0pK2UZKn-%}x)Uv99abfJsHYrW<70f_h)_+k$Ee4*Zg_T(VQ#G1 z38y^*`?KP~VB0g1ZX-Xm)2hT%QhhJV)4K8XjBa=KD_mal+v7NK-{!f?53~R<4^a}n-e~wDjoj_~c`d7(`i~*; zdGBbqiwo!X!C^n#$TP=MJj-DQI!8$!pPuA{& z(7SZeB-Xm*5de!pQOZUXmU${0&QB>}?<~Uy#GS?hzNQka()PU97L!67-eFh&3@k13 zvjUs#I`Ye&J{jzL5h|!(Bui7fPXzeM9ix)Be_L@c7-qXUI|-X#B*5;LN4|$CEHG}^ z?yi=3{>*L<#pe3E?THr*uc8PM!iTNX4xW*6p|=U<6kkTq#?E>vT!6fSa+LeBAWG8L ziP(jZ{v?Mdgu~b5sA^QH?SW#uCqE)Y%Auxckr{Mh^3si(ocjb+eS5KmxxRUZ`XHzt z2-%U7KDTUS8p==QVhtY%yuc?J)BLyn*@GyLgx z5e5Y&C~zt}Pc?-y3hDiL4?0CdQUjtgPSR-xTmRVk04RgqB0NQV)x-9k-~00JLeLuR zYvFeH4zsW6fC?idk#RQ&+rN3JiyLSRUxIeE!-!?*HM>6szYrz;YFyo|3-$%lxU{$9 z+9|u?qReOQV!Y-=JxWXi7qER??163Syw3i#GY26$>R}kkOYYJ8I1^B0dVg96vi8CG zF$M7LoI_n`S@r+7y)4Tjy=OupXf@D@T4_yp=5S8fiMo{r%}+fhfl0so<-Jt{r*14kuis`7`>PE138g{Y7$ zY#98#x-5j&9xfvEz@a+HPNTv2KBNHU{@psFcw_#~iA_A4{ZJ*)uy=MSh zRQ@D!FP%BE$_qvt4L*J%yTf#zdmu|jYB_YkMTDDVrN-{|^3GT7kyu_7~pb zt-t)p4qDbII#i+^@%dMVS~;6lbO-EOodg7Bux$NPkjwZ6Cy4%lFn;ay8G#lg=EQ|)o-pCva3G-O>w1=jRq;d9Ng`g*Ea!$k>ag)pnu!%d5y~}TNd%66E>2mV+1yT*acet)pZY&s!$1a^YNlBY~ z3*lh)a&Y}ng8f8}w(~f!y^I>uteHJ?J;VB`w6|sti#|M?+^YpGCgMVQ@C^>0ax~ku z;y}*ho1Fg&sFzz9IKd^C!mQkfj(mW5#=MhL%#$Nest(0==>F*^`jIsco!G9gc^Dg4 zu6bfR&d#1$!@*KK?X4*pfSK_fCJqZphdaqbULRop?wRVZqUh=MAUR)BiEM+WF2{f4%9c+_~iwpo95X4`Gbj-HdB+HLw4ETIU36ldatLejpKVs5ve zGyh`Z$)yfC(-_||0n}~njpvhO>*NlJ05FM0`d8=aS!RCb@j=Xu`P?s_JG#6C&RwpI z+PBZg%ELXC3#GXC$D5n%WxyOH4^S93>3Q6uNR;?u3MayS(}^kS-o z`iauKYv3*=mHY)lhrw8&)>t-2^SF?;qqb2l&EXJv!*r2o(3uaK=~r z-Nb`HIDHabu#M!{0(hh&1{9+Y`!wv~3?eyFc^Q&xaQH&lr)W{k`F#qtM^n$qb{vk;@{2B($0thJ@cfHzjtG<|Y~ET-FS>YGAbjElSP3 z-Bs|2I^%m);miRQRd-nqskXRt1iG#(^xh$Z&Me-nS-<#qc%ub`|G(3WJ~+O1fFhlC z2fZD)oR86PUEUmXP9Z*Q2?D&?(-nA(n8oJlK5oU&_yi%}vj*6U3|?@9w%tlx#+vj| zbpM(&zLm^sXb-^oBHP&m_1pIjV}F?N9Z@ZYGw>pi%O^Q=$24wh``O9RTR2!wz6g)g zNRJha!HgKK-1iahRkEIGV4W)u0(E`(j8}G-@nij&rOLd|Ay494TP(q21QARny5rVP zw)mxfc3_7=mDBSglq7P<-*P;YN7{Z$nl^uQ_n{>gbfEAV8dQKJhugP9(+HO)NnbJ? zMAUaG1ZO=QrJ}OAXwS%eQ#EQm8Q9}hSKuV0-|2nVV_%0Ax^;SELKRMZJ^@&=mZ$3N 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 z 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
_ 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