From 94b6fc22ea0e4aac1c2429208d8c62fb129dd862 Mon Sep 17 00:00:00 2001
From: DINMAY KUMAR BRAHMA <131891590+dino65-dev@users.noreply.github.com>
Date: Wed, 1 Jan 2025 21:11:23 +0530
Subject: [PATCH 1/3] Update audio.py
---
api/src/services/audio.py | 47 +++++++++++++--------------------------
1 file changed, 16 insertions(+), 31 deletions(-)
diff --git a/api/src/services/audio.py b/api/src/services/audio.py
index 0aa852d..670f69a 100644
--- a/api/src/services/audio.py
+++ b/api/src/services/audio.py
@@ -4,7 +4,6 @@ from io import BytesIO
import numpy as np
import soundfile as sf
-import scipy.io.wavfile as wavfile
from loguru import logger
@@ -20,7 +19,7 @@ class AudioService:
Args:
audio_data: Numpy array of audio samples
sample_rate: Sample rate of the audio
- output_format: Target format (wav, mp3, etc.)
+ output_format: Target format (wav, mp3, opus, flac, pcm)
Returns:
Bytes of the converted audio
@@ -30,46 +29,32 @@ class AudioService:
try:
if output_format == "wav":
logger.info("Writing to WAV format...")
- wavfile.write(buffer, sample_rate, audio_data)
- return buffer.getvalue()
-
+ # Ensure audio_data is in int16 format for WAV
+ audio_data_wav = audio_data.astype(np.int16)
+ sf.write(buffer, audio_data_wav, sample_rate, format="WAV")
elif output_format == "mp3":
- # For MP3, we need to convert to WAV first
logger.info("Converting to MP3 format...")
- wav_buffer = BytesIO()
- wavfile.write(wav_buffer, sample_rate, audio_data)
- wav_buffer.seek(0)
-
- # Convert WAV to MP3 using soundfile
- buffer = BytesIO()
- sf.write(buffer, audio_data, sample_rate, format="mp3")
- return buffer.getvalue()
-
+ # soundfile can write MP3 if ffmpeg or libsox is installed
+ sf.write(buffer, audio_data, sample_rate, format="MP3")
elif output_format == "opus":
logger.info("Converting to Opus format...")
- sf.write(buffer, audio_data, sample_rate, format="ogg", subtype="opus")
- return buffer.getvalue()
-
+ sf.write(buffer, audio_data, sample_rate, format="OGG", subtype="OPUS")
elif output_format == "flac":
logger.info("Converting to FLAC format...")
- sf.write(buffer, audio_data, sample_rate, format="flac")
- return buffer.getvalue()
-
- elif output_format == "aac":
- raise ValueError(
- "AAC format is not currently supported. Please use wav, mp3, opus, or flac."
- )
-
+ sf.write(buffer, audio_data, sample_rate, format="FLAC")
elif output_format == "pcm":
- raise ValueError(
- "PCM format is not currently supported. Please use wav, mp3, opus, or flac."
- )
-
+ logger.info("Extracting PCM data...")
+ # Ensure audio_data is in int16 format for PCM
+ audio_data_pcm = audio_data.astype(np.int16)
+ buffer.write(audio_data_pcm.tobytes())
else:
raise ValueError(
- f"Format {output_format} not supported. Supported formats are: wav, mp3, opus, flac."
+ f"Format {output_format} not supported. Supported formats are: wav, mp3, opus, flac, pcm."
)
+ buffer.seek(0)
+ return buffer.getvalue()
+
except Exception as e:
logger.error(f"Error converting audio to {output_format}: {str(e)}")
raise ValueError(f"Failed to convert audio to {output_format}: {str(e)}")
From 8ccca1fcadf9995c75425a4fd0b57424d55bf23b Mon Sep 17 00:00:00 2001
From: DINMAY KUMAR BRAHMA <131891590+dino65-dev@users.noreply.github.com>
Date: Fri, 3 Jan 2025 00:28:59 +0530
Subject: [PATCH 2/3] Update audio.py
---
api/src/services/audio.py | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/api/src/services/audio.py b/api/src/services/audio.py
index 670f69a..ce2bccd 100644
--- a/api/src/services/audio.py
+++ b/api/src/services/audio.py
@@ -30,7 +30,7 @@ class AudioService:
if output_format == "wav":
logger.info("Writing to WAV format...")
# Ensure audio_data is in int16 format for WAV
- audio_data_wav = audio_data.astype(np.int16)
+ audio_data_wav = (audio_data / np.abs(audio_data).max() * np.iinfo(np.int16).max).astype(np.int16) # Normalize
sf.write(buffer, audio_data_wav, sample_rate, format="WAV")
elif output_format == "mp3":
logger.info("Converting to MP3 format...")
@@ -45,7 +45,7 @@ class AudioService:
elif output_format == "pcm":
logger.info("Extracting PCM data...")
# Ensure audio_data is in int16 format for PCM
- audio_data_pcm = audio_data.astype(np.int16)
+ audio_data_pcm = (audio_data / np.abs(audio_data).max() * np.iinfo(np.int16).max).astype(np.int16) # Normalize
buffer.write(audio_data_pcm.tobytes())
else:
raise ValueError(
From 40894449dafcce46d9955c9c4b37d068a4676264 Mon Sep 17 00:00:00 2001
From: remsky
Date: Thu, 2 Jan 2025 15:36:53 -0700
Subject: [PATCH 3/3] added output audio tests, validation
---
.gitignore | 2 +
CHANGELOG.md | 6 +-
README.md | 74 +++---
api/src/services/audio.py | 8 +-
api/tests/test_audio_service.py | 62 ++++-
api/tests/test_tts_service.py | 74 +++++-
examples/benchmarks/format_comparison.png | Bin 0 -> 782158 bytes
examples/test_audio_formats.py | 284 ++++++++++++++++++++++
8 files changed, 472 insertions(+), 38 deletions(-)
create mode 100644 examples/benchmarks/format_comparison.png
create mode 100644 examples/test_audio_formats.py
diff --git a/.gitignore b/.gitignore
index 98b9187..aebbfa7 100644
--- a/.gitignore
+++ b/.gitignore
@@ -14,3 +14,5 @@ env/
.Python
+.coverage
+
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 44c98bf..4194878 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -2,8 +2,12 @@
Notable changes to this project will be documented in this file.
-## 2024-01-09
+## 2025-01-02
+- Audio Format Support:
+ - Added comprehensive audio format conversion support (mp3, wav, opus, flac)
+
+## 2025-01-01
### Added
- Gradio Web Interface:
- Added simple web UI utility for audio generation from input or txt file
diff --git a/README.md b/README.md
index 639c13d..ff794f6 100644
--- a/README.md
+++ b/README.md
@@ -3,8 +3,8 @@
# Kokoro TTS API
-[]()
-[]()
+[]()
+[]()
[](https://huggingface.co/hexgrad/Kokoro-82M/tree/c3b0d86e2a980e027ef71c28819ea02e351c2667)
Dockerized FastAPI wrapper for [Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M) text-to-speech model
@@ -14,8 +14,7 @@ Dockerized FastAPI wrapper for [Kokoro-82M](https://huggingface.co/hexgrad/Kokor
- automatic chunking/stitching for long texts
- simple audio generation web ui utility
-
-Quick Start
+## Quick Start
The service can be accessed through either the API endpoints or the Gradio web interface.
@@ -48,9 +47,10 @@ The service can be accessed through either the API endpoints or the Gradio web i
-
+
+## Features
-OpenAI-Compatible Speech Endpoint
+OpenAI-Compatible Speech Endpoint
```python
# Using OpenAI's Python library
@@ -98,7 +98,10 @@ python examples/test_all_voices.py # Test all available voices
-Voice Combination
+Voice Combination
+
+- Averages model weights of any existing voicepacks
+- Saves generated voicepacks for future use
Combine voices and generate audio:
```python
@@ -129,7 +132,23 @@ response = requests.post(
-Gradio Web Utility
+Multiple Output Audio Formats
+
+- mp3
+- wav
+- opus
+- flac
+- aac
+- pcm
+
+
+
+
+
+
+
+
+Gradio Web Utility
Access the interactive web UI at http://localhost:7860 after starting the service. Features include:
- Voice/format/speed selection
@@ -141,9 +160,9 @@ If you only want the API, just comment out everything in the docker-compose.yml
Currently, voices created via the API are accessible here, but voice combination/creation has not yet been added
-
+## Processing Details
-Performance Benchmarks
+Performance Benchmarks
Benchmarking was performed on generation via the local API using text lengths up to feature-length books (~1.5 hours output), measuring processing time and realtime factor. Tests were run on:
- Windows 11 Home w/ WSL2
@@ -163,7 +182,7 @@ Key Performance Metrics:
- Average Processing Rate: 137.67 tokens/second (cl100k_base)
-GPU Vs. CPU
+GPU Vs. CPU
```bash
# GPU: Requires NVIDIA GPU with CUDA 12.1 support
@@ -172,35 +191,29 @@ docker compose up --build
# CPU: ~10x slower than GPU inference
docker compose -f docker-compose.cpu.yml up --build
```
-
-
-Features
-
-- OpenAI-compatible API endpoints (with optional Gradio Web UI)
-- GPU-accelerated inference (if desired)
-- Multiple audio formats: mp3, wav, opus, flac, (aac & pcm not implemented)
-- Natural Boundary Detection:
- - Automatically splits and stitches at sentence boundaries to reduce artifacts and maintain performacne
-- Voice Combination:
- - Averages model weights of any existing voicepacks
- - Saves generated voicepacks for future use
-
-
*Note: CPU Inference is currently a very basic implementation, and not heavily tested*
+
+
+Natural Boundary Detection
+
+- Automatically splits and stitches at sentence boundaries
+- Helps to reduce artifacts and allow long form processing as the base model is only currently configured for approximately 30s output
+
+
+## Model and License
+
-Model
+Model
This API uses the [Kokoro-82M](https://huggingface.co/hexgrad/Kokoro-82M) model from HuggingFace.
Visit the model page for more details about training, architecture, and capabilities. I have no affiliation with any of their work, and produced this wrapper for ease of use and personal projects.
-
-License
-
+License
This project is licensed under the Apache License 2.0 - see below for details:
- The Kokoro model weights are licensed under Apache 2.0 (see [model page](https://huggingface.co/hexgrad/Kokoro-82M))
@@ -209,3 +222,6 @@ This project is licensed under the Apache License 2.0 - see below for details:
The full Apache 2.0 license text can be found at: https://www.apache.org/licenses/LICENSE-2.0
+
+
+
diff --git a/api/src/services/audio.py b/api/src/services/audio.py
index ce2bccd..b8cc708 100644
--- a/api/src/services/audio.py
+++ b/api/src/services/audio.py
@@ -30,7 +30,9 @@ class AudioService:
if output_format == "wav":
logger.info("Writing to WAV format...")
# Ensure audio_data is in int16 format for WAV
- audio_data_wav = (audio_data / np.abs(audio_data).max() * np.iinfo(np.int16).max).astype(np.int16) # Normalize
+ audio_data_wav = (
+ audio_data / np.abs(audio_data).max() * np.iinfo(np.int16).max
+ ).astype(np.int16) # Normalize
sf.write(buffer, audio_data_wav, sample_rate, format="WAV")
elif output_format == "mp3":
logger.info("Converting to MP3 format...")
@@ -45,7 +47,9 @@ class AudioService:
elif output_format == "pcm":
logger.info("Extracting PCM data...")
# Ensure audio_data is in int16 format for PCM
- audio_data_pcm = (audio_data / np.abs(audio_data).max() * np.iinfo(np.int16).max).astype(np.int16) # Normalize
+ audio_data_pcm = (
+ audio_data / np.abs(audio_data).max() * np.iinfo(np.int16).max
+ ).astype(np.int16) # Normalize
buffer.write(audio_data_pcm.tobytes())
else:
raise ValueError(
diff --git a/api/tests/test_audio_service.py b/api/tests/test_audio_service.py
index ac0780e..32f4300 100644
--- a/api/tests/test_audio_service.py
+++ b/api/tests/test_audio_service.py
@@ -51,15 +51,19 @@ def test_convert_to_flac(sample_audio):
def test_convert_to_aac_raises_error(sample_audio):
"""Test that converting to AAC raises an error"""
audio_data, sample_rate = sample_audio
- with pytest.raises(ValueError, match="AAC format is not currently supported"):
+ with pytest.raises(
+ ValueError,
+ match="Format aac not supported. Supported formats are: wav, mp3, opus, flac, pcm.",
+ ):
AudioService.convert_audio(audio_data, sample_rate, "aac")
-def test_convert_to_pcm_raises_error(sample_audio):
- """Test that converting to PCM raises an error"""
+def test_convert_to_pcm(sample_audio):
+ """Test converting to PCM format"""
audio_data, sample_rate = sample_audio
- with pytest.raises(ValueError, match="PCM format is not currently supported"):
- AudioService.convert_audio(audio_data, sample_rate, "pcm")
+ result = AudioService.convert_audio(audio_data, sample_rate, "pcm")
+ assert isinstance(result, bytes)
+ assert len(result) > 0
def test_convert_to_invalid_format_raises_error(sample_audio):
@@ -67,3 +71,51 @@ def test_convert_to_invalid_format_raises_error(sample_audio):
audio_data, sample_rate = sample_audio
with pytest.raises(ValueError, match="Format invalid not supported"):
AudioService.convert_audio(audio_data, sample_rate, "invalid")
+
+
+def test_normalization_wav(sample_audio):
+ """Test that WAV output is properly normalized to int16 range"""
+ audio_data, sample_rate = sample_audio
+ # Create audio data outside int16 range
+ large_audio = audio_data * 1e5
+ result = AudioService.convert_audio(large_audio, sample_rate, "wav")
+ assert isinstance(result, bytes)
+ assert len(result) > 0
+
+
+def test_normalization_pcm(sample_audio):
+ """Test that PCM output is properly normalized to int16 range"""
+ audio_data, sample_rate = sample_audio
+ # Create audio data outside int16 range
+ large_audio = audio_data * 1e5
+ result = AudioService.convert_audio(large_audio, sample_rate, "pcm")
+ assert isinstance(result, bytes)
+ assert len(result) > 0
+
+
+def test_invalid_audio_data():
+ """Test handling of invalid audio data"""
+ invalid_audio = np.array([]) # Empty array
+ sample_rate = 24000
+ with pytest.raises(ValueError):
+ AudioService.convert_audio(invalid_audio, sample_rate, "wav")
+
+
+def test_different_sample_rates(sample_audio):
+ """Test converting audio with different sample rates"""
+ audio_data, _ = sample_audio
+ sample_rates = [8000, 16000, 44100, 48000]
+
+ for rate in sample_rates:
+ result = AudioService.convert_audio(audio_data, rate, "wav")
+ assert isinstance(result, bytes)
+ assert len(result) > 0
+
+
+def test_buffer_position_after_conversion(sample_audio):
+ """Test that buffer position is reset after writing"""
+ audio_data, sample_rate = sample_audio
+ result = AudioService.convert_audio(audio_data, sample_rate, "wav")
+ # Convert again to ensure buffer was properly reset
+ result2 = AudioService.convert_audio(audio_data, sample_rate, "wav")
+ assert len(result) == len(result2)
diff --git a/api/tests/test_tts_service.py b/api/tests/test_tts_service.py
index 8616c5f..d2a138b 100644
--- a/api/tests/test_tts_service.py
+++ b/api/tests/test_tts_service.py
@@ -4,6 +4,7 @@ import os
from unittest.mock import MagicMock, call, patch
import numpy as np
+import torch
import pytest
from api.src.services.tts import TTSModel, TTSService
@@ -119,6 +120,78 @@ def test_generate_audio_no_chunks(
tts_service._generate_audio("Test text", "af", 1.0)
+@patch("torch.load")
+@patch("torch.save")
+@patch("torch.stack")
+@patch("torch.mean")
+@patch("os.path.exists")
+def test_combine_voices(
+ mock_exists, mock_mean, mock_stack, mock_save, mock_load, tts_service
+):
+ """Test combining multiple voices"""
+ # Setup mocks
+ mock_exists.return_value = True
+ mock_load.return_value = torch.tensor([1.0, 2.0])
+ mock_stack.return_value = torch.tensor([[1.0, 2.0], [3.0, 4.0]])
+ mock_mean.return_value = torch.tensor([2.0, 3.0])
+
+ # Test combining two voices
+ result = tts_service.combine_voices(["voice1", "voice2"])
+
+ assert result == "voice1_voice2"
+ mock_stack.assert_called_once()
+ mock_mean.assert_called_once()
+ mock_save.assert_called_once()
+
+
+def test_combine_voices_invalid_input(tts_service):
+ """Test combining voices with invalid input"""
+ # Test with empty list
+ with pytest.raises(ValueError, match="At least 2 voices are required"):
+ tts_service.combine_voices([])
+
+ # Test with single voice
+ with pytest.raises(ValueError, match="At least 2 voices are required"):
+ tts_service.combine_voices(["voice1"])
+
+
+@patch("os.makedirs")
+@patch("os.path.exists")
+@patch("os.listdir")
+@patch("torch.load")
+@patch("torch.save")
+@patch("os.path.join")
+def test_ensure_voices(
+ mock_join,
+ mock_save,
+ mock_load,
+ mock_listdir,
+ mock_exists,
+ mock_makedirs,
+ tts_service,
+):
+ """Test voice directory initialization"""
+ # Setup mocks
+ mock_exists.side_effect = [
+ True,
+ False,
+ False,
+ ] # base_dir exists, voice files don't exist
+ mock_listdir.return_value = ["voice1.pt", "voice2.pt"]
+ mock_load.return_value = MagicMock()
+ mock_join.return_value = "/fake/path"
+
+ # Test voice directory initialization
+ tts_service._ensure_voices()
+
+ # Verify directory was created
+ mock_makedirs.assert_called_once()
+
+ # Verify voices were loaded and saved
+ assert mock_load.call_count == len(mock_listdir.return_value)
+ assert mock_save.call_count == len(mock_listdir.return_value)
+
+
@patch("api.src.services.tts.TTSModel.get_instance")
@patch("os.path.exists")
@patch("api.src.services.tts.normalize_text")
@@ -236,7 +309,6 @@ def test_generate_audio_without_stitching(
"Test text", "af", 1.0, stitch_long_output=False
)
assert isinstance(audio, np.ndarray)
- assert isinstance(processing_time, float)
assert len(audio) > 0
mock_generate.assert_called_once()
diff --git a/examples/benchmarks/format_comparison.png b/examples/benchmarks/format_comparison.png
new file mode 100644
index 0000000000000000000000000000000000000000..95ac515c6672029fa0786c530bda36888fa7480b
GIT binary patch
literal 782158
zcmeFacT`hp^e&9!sAFXi1q1;rsC4OFM-Y*wQl$$b9i*2e1a(w8Dhkq-DqVUf7K%uT
z)X>och!8>u0TKw1?>(r<{N|gxzVENQ?z(0zhm@0(bN0LUv!DI!ea-}5(N^2Li*pwf
z6VqPxODflxm=1C#yM#42
z^TmH{zGa=#oaFRGOZGGu>#&x0@kI%%t%7}8f~}ua3XiD%#ribA^UKPYw=edP6wvbG
zpHq|3UVeFX9*kYi0ZaD?)!}kpobICFaQ^iO)I1|I!v3$fp*QCEMIi(I>v4$h*ZYuB
ze%axhYy7gqFFSm*z%M)evcqNz{PKs**7${!zx?5sKWw(ZFMrrza^J44hJW3bKw{3hm5O=}y
zz{V?Iv@E&a+iht)In2I`PnFPX(?pls_>^fjX>+5ZCQ~!f|2&*N$dETKb?~bx`0dfa
zAzM8a)rO#&UZvIfC%&_9l{3tJu)##EHE(>hLmPssxL+f>=FxJl1gErcgg}0UAg83m
zQ{T3s%H3FUQx4~>!N!k~bbd?Sc;O}CIr&Lve7NA=^S_m$Ars0G>z
zsDRZ*4oL^o5xlC(%Irf-y_(Y5ljIeCB{x-t`A^AHo_xHTF=mU>WTLBuS53hd5=;^1
z9jd%W&abBk803bCSqo=(#VRwFd{T?tt*}djF7ezJw0Fuqldb$o&$)-IywoMCT}SIU
zL@hOI$c^z{auk9EXO9$=3K-^p6cAk=aE!-AC9e?d2Ftv#lFESEvl9d!G5uq1V=D&6bU5q&V#D92gm5ytdCux=5TA>xE
zmXt^=T({SZeWGxRi>1(iVc@yE&-s5Gu+~p!c@dGF&6XY~B2r)?DwMq76*)Srp+KANQ&
z8Zp|?;?|%wVWZjEo^NO4G~=ZvD~Mv&jk$W1wm8Y~oviKcgxnKx(ynay1dof^lI6ov
z)puOB{xII`+NRdp6*UjM@FhuQ|M{RAv>b3~5DzikgsJ`aHLA<1s%Gv;Df#kgak3+p
z=M_dUfy_^{vr9;rLYT%{kuXDA-1$+p(nvv;E`P6IWTh7SRMZ&q|&25To!Ll%rz2rGAko{{&vRy|P#dPA
z^7L70h)4UOD9k{~opy1wg5<}K+8+qH19}EY$qoTu-q~6&&FSxT-{?99GXHkx>W>2n
zl#{#t`CMxPKnOff~PJnWZtM
zV7y_TF)I|GnClP0B4%k52-XFM#BVj-*}7vtTH3|*FuS>oQbDo1JtkjkibSx-z4~#S
zOf^w&PW^asPVrT?@goPNQA^`G!meGr=0d6^osBuS?pV}NKzS3Fjml@9b>nB>8W?#0
z<@xoK5_x5+#}W6Qcg?dkmU5|Pc`Bn1g+y*0**Ah(1d+3w?F92pc6Ror505WgOYSPN
z3H^#GFr4yYVOd>Xh+q?n%QTmE=>Bv{P*79B!py8(##>!I>bVSgNRH@M;eqC6u5z{nOIk_g?{PZ-dZnADXzzNfM&T6pyI(|1Sd
z>xErHTi03qkPYzkV%R@M`jF$K=d)4ApUkR@hNwvwY-h$J3`0!MjBg9$^N6t)Zag
zWlNOv0xpuO&LxBxd(3Y|nGjm=-|@q|fy|tn9K`?i?Jwemw&;<1%KHaKbE$6RpU;;zq5Og+CV!aR
zDvmyxBqAgfe)PijG`ZCLJ7wUB3a+tXum7!qE8Hq7684=ZdR9hio2~24xq#EsUa)nb
z&Az>AWb}M0tfUZKl`kSJ9CG9R_LE7YMK+FtW>pHr(vjW_ErJZCRhMFplsI_sJuWRu
zF4Mf+x`{x3vo$iqSogZD*n+IusDPQ1*I*e@%(ngbg16ESbG_N2-$AbX@rvmUT~)v5
z9fz#D9d;=sghdRwhCM*>+FkMttisC+J5ELfvazu>2C-b&PeM5lF8Z!5#mv>3tJHWk
z?c*L$d$^C7ilCQWH8$ovc~UDSElvFZJ9|TtBFq{%QK3!CVqb~9$I24g(Yh_p%Wd}a
zTe(E~dHrkG_SgD*MQSH%hbk4J0!hqEWMx_o~AQyZ@i`D25hbqOR
z1^vX_9u;3N&Jgpx%`htY+OI-!ZBW|LJ02nir@c6J=1d5JzIZZ@SI*NCK-q~A
zrPf$QMKgBpneqdB+r7vi{VydSv6lT+6FoAHn;MkjM
zpWrhR>(+ZcvmtN`A{Fd9RW)?NwaErkF#0DTG2?~qm>wvVmvSE1k5(*~NP@eY5BcG13+=lm^k5L0S~n%J;1hjrL0m-6XXekgceNk@c(h;$L#B0H(Zz!U9m?PYmAf(R8!F~4Txu?++0U8c4
z)MX6~>kp6C3N7D?2e%7~=&+CFXJ1|v=4k^Vy&vr|P$FCAGRy;fP^W^r&2QU9-T)dI
z@>KBgiWvYKs}%xjO>p7*LoSK0V_&;6ZL=lCZ?ytmwc!&rs+;gINzYIuZ0nAFD(BCi
zPg$CqyAe#~0bjHO=4y|P700XCjMpcKLy^jky5xOJRkiAz$&=fYwn`N8bI}`4d$^=t
z_kK3LmY#l6%%S@=V1GuYZVl;$4n1)dUmkGb8o6AOa;liw~25SXZ25KD4QLz;YMC8rO)qM)DeemaJ1dF)Up1xu)XtU5Z1Z2`b>i)EhgH
zK`OqcFgHMC6!;@2aCo&uA>hlMoli~)$R7n%i7hkPoV-N
z2Yw`qR#!gcZVR8(Fhs460`Mi5Bk6|ZCA5Ws^^vlQ3K`=PJD%ZcpYUK-ba+m|n!9Fl
zfZEC+Y86(qXgu@DE{ZQ4q<>}3Wctua$?XSQJ{qfDzn%jvW19T_n(4atsT?Gn3*hGR48{*SCkSMiHuE-;Y=4^2(h0*;=CW
zKt4Cd}b%5E=XJ)Bt?KMj!!rwd)Dt$J~%*Ze^AiWlxk@^oc5l*F)K47yS&0q
ztICV8e{^k8pZw`Uc>}0wy6ZlRN)LOgVf%}USgoe}#IKFaT++?ti!3Dek^P6fFo>+h
zg4_g-NM$AQI&!!O{vbP|JVQ$ZGUxtCC4V(jfBU)H!!R>9x2y0eT_mf%KD99t33m?T
zQ9NdAS|SCl3X=8^70RDnBVR|YbycA+Iupocli{3_f-@*aH0>R`5~91p?!r`Ox^8R2
zQZ+3Gxnvyf))5ENM-#si`3tDG4vF1rJ*}3=B{Mr#flrzwhr7Zn8!Ntc?BVz%ouR|f
zUzyKj?1u;orj|E-uT#d(o0!D_A~16Rh=E?eh+_iP%v7^tfbMO5Jlw
zN9}A$z+2>TkJcH6@?=^&6nHi5AwhQCudbSUUM;#rJz72*;4^~XSd&@p%~{}-bDHz~
z*PATpxw)YmrBLjHQotB30%Bo#fsi=cdLww^*s;awey-i@N>RRRMqfv29fy2zA~@aT
z<@kC>9@uoV@$tNe8mv3=)FD@0p`f)CkQg&+1K>)mZPC%ujUczI(w5LDE^fIJG&Mx6
z2T(m)yU&`BDRMOuFxCgV8+mp^oUgywHO#S~_Kg0Ev%x7TDKuJ>NW??lI>j>rghl#E
z3tVI3LFv&I!qgbIeQchRQ34>+M+$j1m+Hs}$tjo}Kwc);qD
zhB(Kw&I4%xe|S~F;Za78698}@1{LOIh0!u+!q=W0SW5rZRQHE@7QQ#GgQR7ZYk?BO
zn|4ZPxsIA&1%BG$q*9M@qwKA`neOF{u<>`m@VmFgGTJXnA
ziYmHsZd@c2P#3>|DUW@!<4+%VWa&QCb9AYdH2eMFk4OkiW#!o5Td&mYx2BffzrZ*v
zEr`chz}@_uM(d7)Lay7dASlSZwn}xdtocGHT8R#a@(y{W@S2|90gO3JA3kl}wZDy5
z!B^C!ZmGSVp6oMny#ug*cmX?PDoW3SsNRt`x&fTcO(tHz?V4moDEo`kQya1a7myBbic6W24U$7a6>ul
z$rHY&>DKoPq)~pC8gh)+zH&C;>nH}DYW3mK7FVQqyR2>f0*3M0{I_!GC>Sefi+qaG
zbtxYgBB|-inKKSZl>fq%IiXI|-mrS!(W?>YI&ThJ6n)E5IpN~KtO6pkO<
zQZWE1SUoV+1ft;M$KYVwbq_I`)y(q%rj3kusSGdr%Dnj)3UG=!H3^&NO>>O9HtNqO30tOUu>&yVP;J3!4Tdu=b=
zm7#T65{kLnRg(R0sVpq)76~)C7jCsaPo!yu`U+e@OvGlUDP>kvoD#0EG+ieF+K3HY
zW>VW+s7D$Um~#;@u9p->fzt7{uMp85d*V*ng&Sq;=0IpzCx1y$p*0#X({=xY&IOnjRWqZUPf%w^Ui0un-?;s8ScF$hE)
z_yj9C)B-LNC+TQh0AoLJpuWctS!qsfeNytW?ZiHR*bZa6H?`ym=J^Mpfwaen(Ck~VwZ4V;Bk
z-`_2DQfAQD9N9y&qN|bkuFGxt8lDiCXncfN_{hx-Qzc4o1x{4It$Zg_bDEm_~sD
zr?8+Ph(rJoMax>4D3pBDx#nIGJJSWM2FtjE@yyaU-u3CdMOTvoMECJ1&?3;c+Tx;o
z5fG!AeMg2iu)YWdIG-j57ocoey=mc3l$O6nt@C2X4a+>N^7&(9QrF81bXpU#Mqxn_kQGi~>%E{@J}Krq+uxBl_<=)e
zI)OIEkNQ*Gb|l6h<%*}`|Vv@EOHIsOKa8%;AW6{QIR`%d<6?e
zLm}pOj~6cPRWFj&+1a_hzdV1PV|sQGp=wUfrQ%DYQPJ3a|3MfixuIg0oMW--vodYV
zV1dLQ2>Tb5cvtOgYKKodX6Fz{s}4Y~$#ZS~g69S)U;=HC;8CX*>CyqxT53RTnI*Nl
zhi$CgW}rkpYr=6kK+faV+#5S3Tb{E(3dmX$1p2L@zF-w7>o}x^%|6LE&u@s%fddD*
zNxL`JtY$QAZ^^S5Ud6@hARqcuXC8a3R^Lm}*WbNA(GO!L*>v1-cU-S`z%bUGOD3f8skTOac#c1aB18#L#f6Zzff!=m#qrmue8PTg3AY|6sSXD0OJn8s533H
zyjt-Yp_khe{4C((0+@P2
z0g4=fwg7^w!t5JsNIhsEA(1eUuNZ7l7A&!i5l+OqG8PN454c=%$%I6CW<_kVt`7IX
z@{wiUVA5*32;#U)9&*XLUot=6M<*dA^6QpiWV~{LBGwU7JVCg1R$xOkQY&Qq
zOiMx0h$~KBy}1JX;W8pQw;u=_rhen4Zq#9B9&%|UJnd}2?7f`S7cY*GR$Z%|y-g7d
zRI8R~XA-T(7VSbFWvo*4I>ta5i>C8jH`Ff`g}@mL>aH(p;WzpGG#vaqw|c;?Il
z42^zjGPbf^CtEAN7phzNk}OaG*5S6b^PM5S5~154Afw&_5`*4=nZ-7k>(nbmG#HE2XZP>hdTSp
zoMG6dD4iK@A(OIKWXGl72a*E()u)Fl1@LjE^od
zY6lp6xyvG=ODFlj>T)96aCKzZ%L`47CH655K6MnF?_9H=+vhiT{1ttgA~2~%bDgOd
zk7nwi6kTfEE{@O{6VhF{-4?XWlSxO;QH+JMe@YvZK0{eNPW*Pa1K!
zT7*r=UkV=wEhO;eJhEfuT{rc1^mzQ}O2813kqT<1HY$oi(W6{=u;-Elb;v^lH<=l8
zVx+w2tlzxzR5u_%u7GByKA7AWtFW|kN=Qh(2LJI{4)&u!ftCWJTbF{9Mpd3B!vV>{
z&36gxNAn7RGA5jiLtiePSflfXlLDv=zBmN!OA}6hbjdAyb+E)9$hb){4q8fp$-m_g
zpGcv7G^{%a%1_IhmANV3)dgut8X!ZRoUF`=b(yMyhSdS(pD72BadOIwQELmNMh%g?
z53(LDLOv6vR1dUJxN87~E^7;^Z9K@DGvuU(hK6tSBgzXjyNnz?X}2p!o(x#^fIJYM
zt`UR66|06OLF&YqsZR+4ybFoY?UjqS0TT-9$#IO>j^T42^O$Ir^+V+G>1Ix_b3o@|
z4YbZ+JQrx3sYf+pO-f&
zGQ}k1T6#C0{oug{poB-#YJfTjNzn<8%;j!4M@WfcMN9t;w5!Gl?gIWK643du{gYj;
zItubY#|@rXo}WAfh&Vdr$<;6WhA0=3fAqYafV2UahZ2dd6X`G^G;#;8@|Jdh0P4g(8lN}zy<
z1CT(iHlfyYat@$$e`&jr`3ih`IDUqDQ>7lTTeFnWm`H^=m28B(w^Q=6Flon*eTRd#
z?S8VOC^RI*s{7RqHMlttShsGUZ>#hMx@IKJi8`ZL=<7D~ngaDM(#Af#n0s~gLMl+y
zsrQ+6&1z4Pr@w$&fd?qymlaTe9>|W40Xy{4BJgs6@w^4BqrcqM0?2QOtlkrT7~z`R
za8P;kk9Yu?mOK_kxi-9kZGks`zqnBZbG`xX&1-FuJc`&L^ySNO^)Jq^dgR9|Bi#;z
zR9Zk0I1>>T7jaltLO)P!^qdJ|u*%B>+rN+d$-}L#sMVytN)OwVejY{b%LfqgKxV^I
z7=Zc~-fF8#5N~LZ+_4sMi_lAi1Wmpq<(tD*d$W%D0%?D`pMA2GG-P&cVD~O*V|u7*J%iC7FNZfphN73^th`
zub6^`jOU%EM{4=wB`I*Q2r#y>$pfD7QtY-R>T3rs?JLktNa)D;JMtFg70I@Gl!PXljn0($Us
znF#~X31Ab3^Wj^^nwzbiAmGjuU!_ySK`|OkUFk|r@^2y)OCS<`W4>
zR{fn`>l=Nq&u2~80j_Fa9a^2iB*B(NW
zy&|9x!M4&aa3TMBnbYJI>qx~zbSg*?#_qe2f{rT(Gv%4E0WNN9FW*L~@h
zmPojU!}9b854IkfA1FV9Dsp?pd66|!+{yZSX)sjhnhbMRt|m`#M9_2D;ziPNKq1*d
zRO0uO{5n)|IM6#j4~c6%X3&`$uxN{6M@YaIQl9N)WUQWD6JmBc#X?(hgp0aHM+JRmvwgzk)jQ&>@j9T&;$stEvDE
z9-h7Q-g%@(lI#R}p7X>(aZ>S=2_$BMo_Mw-Xe@w!@&ZA+aiEl-n>RU%(gDrcxev!9
zn?626=2H<-{*<=FtduNJrRbD0uno9i7M9eJObuow&TM5>=i&1=CP
zAQ4Z_#MFa55D;hy;CIg)0`To-SraiLNLjMe6J?Eu0;lYrI;^eU#N?ZSR-niUs1=A%
z8!85bnX+U(Ll^CtJ^ym`$mQA$(}OGLT?pbR@4EB|S6
zx)|LANF%{>?aS3J(2r6Ba_CN%<>>pnlY;?1@FztEae!7Dm^cZe&1Whno!M@fJhyYl
z2%N$lY@4ZF`=SxOd-rbZ&NOl`HCAbLQN<(Ar2KLXzOXmnY!HXIU!Le|Rjo$>&2zRL
z%sj318sMI3amwWSWkzKj$QHGv*v1EY3o_zHK^n?l3g@!WkkoPa@=$^?eWv))HX>GcfNOUP9*V4I@n1#%p0r}AsI?;
z?{*4#v}4#V#e?CIJlp6P#>tPppYD`_7Ir=F+U*OTQ{6{9?1JT{@9dQ-De>_GrQMY02$yS3tV3NLlDixT
z{17d}D0YEh^;F(rf3Lx{u2Q^5p*ekZEr3RUJSLPSbR=$URZhVH45kDfj+#UlG}Fko
zm}OyJmxZa)LeTaO#>a?Q97HQp!Q2l(crp9ViuLe=@>FvaS{Yk>S~nsrVq&h(TBk8X
zD_%Em!x~5a;W0&Cghe3Gs$!Rb(0K?rL~xML1Leq!GNvI&NoWx%XqVMBSDFSc_2G>j
z7_EY&xey?1WXR!at=>N{#64C^x+F0OG*zH9OdnU$VYQA2Zc-0*N`q}9OZl|o4wD3G
z@_-zpN2&HE=6Csl@VYEH3MwwSM5+tv{v!)BfVl=q6(
z5(}mb^1Rj_K?>8|ZO!kKq4^9DC%M~s?x(x6_#barnZr2B#=94pB^^y8Pg}?g(o$_;uB1@q
zO-%45LL?$VmN`>ygU$rbZzh6Qp8W9@h|&*GI0jE!k&S>gV89FR0e(xfUqRw3vG0=W
z;68rL9P|ci)|R<~Z$Tvsa=|c)m4vwDweSuiYFtr#2!-u?z0+0=)WNKIiHh{KdgXE!7T21`!cVE^7bfB-1CoHE
zX^=^IvgXhGM9SAF-mKcYhY$dt9is#!dS1grd9uAS?F%tGTNNxQ7|(+8RTxhqy|$IQ
z@?I-x1&jy?YuDz#JP0(=5_|S;C8K*lj{(Cg?{+t-oqubBT&MxbOV8039dN{(=uc{V
zy%9MhBAd%8gG?$JDzb)2HLi!fwu)xv?@#Vv{1M$+X>I$G=77vQar(kv{3>0SRa*mB*o?<`Q(wy$*
zVa?fqvhUMNU%Rs|q%46mUN@c`P;LbumBE*?eHVJPI>0_t+aZ@rNqMJ2PghhvhMn(f
z(Iu{;87l>1pg7O!EpZt>(*v(_shV7@Seet<-v((|jO7B8l-%jRp-C6kyz6x<vN+(t=+u|0oCNwlOQh_)N)qE5=(pVHMGtQ!V@mWp#od-`AVOLcf
zUPGlvEiwMYr{Pa`rq|m;4YObFUCWb={$41BfI?QQ)Mc~|;Rbc#PR77bkmEjnq=2gG
z$UupGqHi0ZSGZvQY~A6#Kj0&9<-p;8=zZzov4|;MUV!5{Iqc&r{srd4)}X<mP9L~z$n~{m$}BJeCB>O
z*4QOT&-#0(wMRQ>%pL8`y&hwSiZM540efhc6$hd;R6}6p^Gz$yKm!)orJx`%Cz~Fp
z%rjSuV_1{w-jAJWg^^LZKDIgjs)2w1`Ny3Hma(uAVXu+{e+~e;c@KL@_m-@+
z#&-EEFO06vWC8e6^e(lUwW`)BSE?m$r0Ag5Y43A;g
zvbEP@Kf7M-%w#6&n6~oj)9haE!-vB>(6z58{6R}Lm_~HXK`Lp>j*oq~c~+7)^WYGi
z;w+hm{CJul2BkAYmBq*7
z^JcEqdbC%*n28gv`dSp%%UHoP6eiHgCRFl8ap!?jxF^r?l=hQHtw;=DPN9ImiIf)yEiU$S>0G_LnyusiT8DPLr1TVz@!67>C~=4rUe
zR&kvy$7;}COWAHXcb9_ZMIknXk=Mt!q;8xfF4t7JX|MFq(CgJ6&PQc7EzuR^M#*4q
z#$;x4mj7^BnN`o1r@YIbs&RR)2s5oxiI1}Ql~*t6uod!X!+4B^K6Me~=9~&r-Hse{
znh3ujh>$Z99Rdy!ONp`V=&kQ^dCh@
z=i*y!i5(b2#HEFHQ1XdOt}6ET8ieWUC{`YAO8P?tF-ex(=IOdH`#!Q)0h1#pA#s4+
zbhhgO>F0#*$2s+l7fhmuOnrv6+&a~p!u^!Fq+LP=U8-{?i21dPjWUaU$D80QrH;wr
z)uc5qtwDvAS!>{SJo*KUe4kob;B26Fw20J-_udmd=vbf#bu=zPXC>LwaY=gUHQ!7n
zzRsxVX2FAL(vSyo|NHmvtp}Pw+l~n2&$aBS1$
zg27;dCS@lUN0Ii25%XW%hTPP858B0~xx#UyIDkBb8P1?@THZ7Q6A1%tQdhuVd4|6b
zxVh7PNw85i@NY2n%Bk)Wk}HCc&{yO4BE#7-We+nmSn}LpVC(VcRIm4Y9UazSE_QaO
zKprbIs+@Z*#*18-igz?-j73F8j*KK_V|Y0^LoV!-l}+-`UcN$1w0Ct4HE~(8@$~XC
zC=JN!=E+R*cTYfg6Swq%Uc=SH0krdyuI1u}=6+i5>wcP8Pi<2~{a!Is70+3e4BG0F
zfH^$rBfD07iH<8@A~EXtB9zxg+L{s~KuFU-sI9ey;^PXo^|x*|P^!u3c6QA**2A
zdetHShC+fz`!@2V4zlDtJzMe5nT9orvPe*Q&3LIK0_k39TC=v0*+j5F`mfCR=rj<^
zN1iL!aY{2%_W#$;a?eW-j8oO=>L?5os$;gemNJtbyR@!`ND
zMEA*#y?M}04%UGmm2#eP{7`3E1Li8i_x9`5QgW_t=`Z~~0r0Dn=5tR{9S0bZ$dzJa
zje+#tA~hu$fgQ&qWMlvUaz!dF55`4Mri%$U)EWVWd#Y=0>=>L1#k#5gqzG5hrqhqn
zs@g!Wz-CKJOVQrkO6yj7mb6_S3Z?8)yO1x&i;4~`%bTgCu7NqE0uD-{KqWvm^5CeF
zm~1t~B@KIF3UI8+w7=djVzQHbvCXtMJCqLHyLT_RXSU6C
z4R#?Qz_JFkBlE;WMaxE?-MRA?z@!PtAE3P${PN{XF>X{r0bsie?b#UQLXL&GuJ8Pt
zHwKd?qRFwxV2zixHyy($8yr_KqQt5mfQty}N8O{SxA?cHY8;+>7q}Bb)!Hd|`PPKyJA8z#7!C
z*NR`B8d)1~Z1P@_baaUXXE-&mI8zPgK$rEbFNo~ez8z;qTDAkyjw@%?s4MSh0HEAaD1NKnpg659C3B_A$t?=+Lw4N(BwJGt;25N8nvv~
zuE$>j>A?abLb6~QbHq)t-2&N4jx$E`;n6#`5URcO@^3{A?G
zy2K!PW4=g9q5@V&nn-gxePZd)48ra(#X($8c03gV@CRr$4b&
zy0?}Hln3lG!8OZ&RlHp$J!6$I7sC*da_Td3yspm$GMI*NWle^&`RY`Rns7|ck`a`d
zd3-;=j4K~BIR4k=4N!fhqcpj34G|Mx6d}J_ELwQDy4|^nXVwq=RwKx_*?!euzI=J`
zd)P%4Fk7w)F4bxy-(jv1Zo^J#}E0zH_-Zv5MAP-X08C_n`dmPxtNFa}mUO_M*6`
zsF6pTJOwZlFmY$ftHz7))f!AhEN>wUuLW!3YdSjK1<;9dt!i&sgi9m618Xphb=bli>Iv
znbmp2dPfU-whZm_xYzx8RTU_TuuaNq_HYsm-;^4;R`#~%UA=L&x7m;f8c}$&*<8{U
zHi}?w6i4TBcaf7px~pKUJ+$gbQFIttk4n%beC06wo>}=6$eaOMbkyv-M3{v=;bQ}6y~lDvc!ibzBxV!Bq+m7N80i$+CiH*ea;RN9-qn_%e2
zT)XOzA5g)>mkH{jhMoL}xuF~jL?P^RC4_@!Y$umV*`9{w1uopnhdjXm+NASq=HkGl
zhCYC+WY1=ym$kKu5i;1%Ms;v|aP7$nHo@oYpqCpmGm~%U=oqTWXN7C5>#K0HcItb5
zI?3;rGZ-UzPbOF>{|S){FiBhhnxlS#lTwYtCHA_w=hpio0j1@nPZt}u#!E{B!H@?~
ztW#{EViF}Mm+5q%yxZamn|LC@5XmW*YGQuH;sDqE=?#Zs5`FpmPrYvA{Fs=|h1f(1
zZ+iXn>E`0`=etZym&7(j>81}JS^f62-MQ)gBMtxc%R7JOm`&RU9@qqGo8D(S&G!?y
zH@|;P^Czj>{C?W=pVjZ?_kW$hcWayr`LzPyO!3QwzPrS)ApUNMUnun55KO;d^t&Z~
zC9)qb@hcO5x5O_h@!b%=sKk%h_(dhYTjCd$_-=?_RN_Z${9i~VmeQcBTKWu>7%MGL
zfn4*qz|Wc-GD{%0O)ah|l6_rxjk~Cn90{)Y9%f+y1G(jDm8RMi$9`Dx
z+h5=Fd{Mz$nN8VPSddg7#;Kd&S{ggf^%DHWz9qOYxE4=pj+T{~1k_=nod&-%m5Q}6
zU6L=}6IdetUr)gA-#P&m*~axxPb(I}mx^R&->h0K&DntGoqf*be)74}$hA8=^$Zii
zxm1it4<0{;1wyMFkR4g`|2RXKo(@Wlkn(>*cCF|FkT4
zb>v3>`nvt=1E#5U_1L&|qHQafzUC&^k`mboy^1lOvj5uljZ6!_8F=>!>h0UNP;VC(
zZ88%CNy}jB?f6UuZieIV;gFypT%_`u49!XPip&4ng{1;ip$9%)9>CNc1ox*fOhq9*
zI@ABP9n;SJkPv)&p?XyDndi=beSVJh10QrK|9)Ii{x3D>o96~faPkN@fhp^9*q;9{
zHU_`Yc1qlJ#J%9k7N!@ft5b$C^>?>X%1xvoztJyt?01sVmYeJg3Ig*gIaa>DGG9Xe
zc~qab%{&D2m~r}2nQ?QoQ5jw
zt8I3(wT7yOF6R34`e)}}_df$fN1vJ8iq*wx5d5I|$Lr@Iny08*GD11!9OajFb$U9XFKPbx@>RuQIE4r_|Dwk>CcK%I
znFjErc?r4iM^Yp~)tmIX9tX=-S>Mf%-QoJX<|n(bUIp^bV{Vd|0122*9!+6#($AkW
zG3g9Ati0~7UW^TN1B7`h)zt@i-555I{VXXnud$dPLf3U{W14ydTuRS@*H64ST1V@5
zyQf_|ur&tCh}X?fr>OLil8J49S>%=@T1EYupuv3+1~UQeT>x!a6fDN3UF^3DTvmeo;VE!
zDjCdWd`bye$kDKRdv|G2C|;TIW~b~TI8UqP`7AKk(sm06jjn*;pn)#;zoR8iX~Ffs
zV#SXhW87eMbl3gAdgz~YZQ43@ZEe*Kd-t6OZOlJeSfIvlIG41lia#vGt`>j#FCF>R
z%#WR&U5fYLA3KI6Uhrw^8OM89C6~sAd%t6Ss%g%f#CTx(xE>6`a#E@jtwy^e-Ke0JFswi#1f=>l-+4
zLRwxXyW@TQWW#qq_&6_7C9zPF;}K?(o|WnFj}Y&Dl>`H9T~lK_C&X4IByj>!JXgnwkn@)t2%9U%61cG_y*j>B!7l
zQORP7zJQ{RiDXr#lN1+!qNkIJ3b>7uzWyjPpcbMdP{5ztt#Q_}glFW+QLVD={Z6Gs
zt~X4q;~l4))Ku!Zq;i7=9`^E??zOl6ugv%(Y4(pz1Q-FRy#9YqQ{Wr8GhIrBk}P9w
z2gp;8p1OB#dvy69Tp*_L`XaG?6&L)ajf_W7`OJ1PX&nhK-osR8v&kqR62jI2^c**U
zejK>!39tjpCw(G=hmwg#hb^XHNAgGKhW1&YPh4T0{3p?{kGG-Q$m7P|%?JGfa;l2T
z@~uPDttFaAlTPn`9oXC`xb+CJ6$EO#APBe@hkjVNud=v0y6NM}Q<@v~JfM62Hw;#6
z@pFIY+?^kgA7rVv9gGqNUtnT-ey%bslJFaoaaZ-Acc=->un{)ktx@&k66zy2zO`Ro
zG`D?VD~GKxCu-oHzw7=x`;I4}Z44KZ^d1|Rbo`0%`lSxf&tX-!1R5+%cAB%Wkh4Y^
zyx+0mdCj+pq;3+pUh?5{aobxB1?VJ2$A>oH#+b+%&t&L2M{F>E(qRv0rZ@Gc0l`W8
z;L=}~rty6TKmORsK)m9Sl}5B+2pD?9lz>rZ`pi7x{$Do)Prgliyq;4f=6t&{>Q2R|
zu57`Pie@f&8%3+X*w=~PWU39D{qqUn2anggJFhONshu{+S8y65XY1#Hn=xqtuB*vL
zAFp~Me24AErnUVKatQI2?UMV1Jl3~U`E>gm5t{NDdt9Jd^*hsxolpPWF}tMq
zgRNMm+XL@>a{|kHWSVFksO2q%zQ0UTnW3T%La1uaA7Q7?3aGqpm
z86}wVG#$(UAuQxn)K=sdTPA~oHF&q2ZGQUOxqF&rpvWNnXRWhQ;xJ8J5srcUMLlLq
z$*UN)jNR-uLt16m%hd7}C-*biy>6CjVX{;F1|sJXN*#5gyB-Ilsi3`kT6FS%Rx_ZH
zD*o|1#eQ8Yl}WVx>*lej?@V0t8296FYB`CAWN-1O_}TkuEgLo9i-t>QptBC-)77qG
zvOE7yW&NW|#xC(5J%0F~mzmg!e&gw%Zho{59-$Mo0BGV)?B2AABY*t>sR=
zB9h`QJ9&0}Q{(m;O_Re<2|NpqQDO#^y$zLaRyT|jjGjk(p8j#tOeNnvQB=LAMpW_G
zv0FDocN+et{yeNacRf#?u=XN7R*(6lS9P{>Q(Cax|DyyIRSM`w*i9!AFIDZil;{r7
zblpOBuUn;f{~E&u*=;WnYL6g!&hRE4g&zo9KDgTQ<8H})55BeZ?XGILCz5+25Fj_k
zy|XLt@w(;S5#@$kkA!o_iD$kF9{)q=*fAw@V-Eg<8BMSOA1G5^n+i>@#oamGbkgj{
z9zUskL*H||1#A+2b2_Mdc8P|MSj95WbwvrM+vHA~9r9V^iSj%Io&THPPpQdH?&rH7
z!=ABQF6XKaUor^sv~Gr7e9T7GeJ<+pH~fF}8?WoAxcT*jL!(mz%9GcwosRm3z2{QS
zw(r*ta`m1rZ}A$@OW=apXs}+{xHf`GQ&?#ZTE8h#P?PTEl5(MPFg13yY8Jkv$2%40
zMt=?LUDIYNiTH_7F%#Dp;eB@gQ_hmEcJW-$KMKYy*7G#Z#U+Cy`IJytewaqt%R}jY
z(Ob^_4FGcaJAgsBofqZT(ly
z{q=XaRPVH=n6^MG7{j7x9Oi18$dsr%!epr;hO_u_%UIFav2Os;`AY9hL&(9Fi#(&C
z>g>Q^Vk}je$6PAM0*kDOg@xh?j
zC-Q97WYZO2GBN?gHcXx9)gbG(^tp?C)9>{R0%XqKf#EHh+CP7`UC=tm|Gnz*YGNem{C$IfX1>pCue&5e9cDWqF2DY;KJslq=+(gKhFE~WGiAg3
z^KZ`ik+phZ<8u46j_3XUE$k(d%RXE*96J-R%8f!QW9#3Q1fR(|nqj+(oc*r#l!05;
zV&VNPw_9%B@B)ve-}S(kM5~62oFR{c9_O}xr*jU`ESO8X1!AJ|*Wc&RX?K&39QH`B
zfPECZnvH!jv8{h`=c`v@0YhF_;He&{=W#-MwQcWA?Z?n0yLfPs%&l-W`}MCv|M>x|
z=i1KB)biPUJJvU22K$l)yIa}ta^98g1^y91!yI?k@1zi&11FTK$LgzL}s?!Q;+GqHYBA>E)LNOyxscXy*AT@DS>ok};TlynUsIRerhL&yIN>gV@;
z-@BHqVX?gT+!N2UpS|}vV;kH)@H$09R%P4S+Hql$X`ln+ZtAQ0n1C~3;inmdntR9^PVMmn{B|^LgQN+18a9P83cIWl2*hUD
z&;NvuFVduDQ-TppGQ{qm>?PfmkB!U~KdB_(n%dM-ttur=(oEuY?CGfg#YnO%embt;
zh;_C)e+J1k1EYEH5*>&qu|kh5EOJ>(J7v2`ah5j#xL(QwMGU_qXor|sW7g)$mtkSr
z-k@=-S}OEz=gt-v=FkDe3@IM!W$D(%t-()?75~h-(bE4`!qRxk#AQXuv_DKBqE}wB
z-aoh6wwiqw-t0-Fm!Q_F7Hgw<-OXBW9jC*=B)+q|JN(^#>gqs-jE{}kc~%YN`l|Mc
zXO1*CiaxXS2iv+ZhJR=F8CGA)YeNW1biACo*9pLiSBax}Ru7U%6(M6QbFDUvU$4^&
zFo_Qi+IA&*q{qx8`L}j7vnZ{@slf3uY`*}lOs~{Y=kV-gc)qs8^g2~aJL)btgjFUbF}1;+HwcB-`10rZ
z^tOJ|Tz=tUxUA(djXz6Hwzf2KhsZ>|oKPZyu7j)rQJP0W7aYOB_SFxXV0{~wGmhi1
z(8+|3*YwH$*T^k>8*hP^)m7Vzn8mceJ8&f98YC71Hc&AXR}Gst?`
zPZ7D^YSYisj{zFHjv3KfysJ002Hm{n;j>)Axh4oZQAZGw;JK)yC*Sq6Ce}_M0NZEHlWRs0)Mx9ANqYVAe{hjX
zd#oX7oI>FLkPzaIZ0*P5%i!q9XTCGBsSi^ftfedC
zI4pnH!47}C6l)9X?SKE${oDHFQU~}K(b%$|i=zMhY`K0u5~ZSOa(VZpz`k|Rv5c&m
zqgc+~m)@<>0f%rS7uW4>$e>kmV9&l`O|{sQ>_%Nng<2f?(f9)ipU(r2NS!o61i
z%WJ;3>+!;QDGtEsl_Q99&MnvSUN-$&NSB-8)bvk)x?PuC2y6U?y4XPZr2Dtohw>?B
z?UQ>7pVU6ZI?b~fyuRMz?9KVPxT`cohnc%T*?ORZP#PN}1fDIDF+LLdk
zSp8UdODI3r+UqGxU+G3(CDs4HmO@18HP(Ogi9-~1-ZHdeVRpwo^O%?&fKKiQZG82*1}y9Jg&P
zq6)%0^svu)>kA`x;<3?Lrkmc>J09|J!Wu+z*a$fJf-5zauH%4Dc<>Lx_6sKalXRZ!
zx)PstlOt{OgS=8Dsk4Qy{gso|F$?$XptGI8i;d-jf}sFJpMq{>&O
z4|m=&McTFQa}CaNyL$EwJ6Y)X=`MfX9}o=!PGjSEYAkZSL7lLMmNb&%+VJNGs1_
zDiFX$UJ7aC?{+sAfjbu{PA++Tu|gxAIQtOMWa!?^-~6TT9^vDfIwt4WxlEVYJi>g_
zh21=kxPLNHVf3{C12{SvYHVOz{@9t!g?L%FG0gd9kEfKCQ;x1T=rHVIYjPjxKGk*E
zI8C*S%|~IQWOb=LPsefK;5b8oDjw{8JQM_qgM=;vSn(3zj8;9@MSo&nF#RA}@qd&>
z%GH5MTrsgWZZ2V{9hFGZpXt&eX7Tya)6}MSFnaU
z34ydbEQ4rNH_9k($PCYg^f4x8B)V-xPe7_%Ex{XdYc#wRGqA2Hj)~l!{ej4@hGAA@
zfZU~RZa69X`A8eeoVR#hx&G_;tPi6-=Y2n7c=8XD%Yy1Qv8WE5sl}FBCx2uTZ`&u;
zAoh0Ncv482Tg3T4>w)0HZ~-~)ev)%}Gl60Cjgz522I!e4^(T%1!DuQSx==)X7LmdB
zO0J5mB+SPC#q;+fjuVHr!|f9h$0OBuhPFy1!GAZS>$9V-VhzAh$|_$x**dQ2zqlqK
z6GZxU2>v89zp_8VCIqt6s8)B!MY9x~vLHtfw)X=_^Lg>pXGh8{rzxrbRs5=!9{h8d+ku6)kPZQszKS&5fz63x+
zg=%$&e`=zqo8^CLIgy3?r3RTgBaUL{j?3k4FZDZIdh$#j?n1v;9;fAeuot&?X`~cp
z%0PKb>6LDMRNK7#BO%^;YR)q7w+B}KUtfQE8M2~&z#ofwB>B)m_sVwe6M95S)jv*nl
z85uJ2u!5jo50p8mw^KOA%s*%%(eAKuoBl~^LcFtScr2knGYOC7m;ac;{UQwv>tBGb*r3vFCna>J*t
zmhQ>jHBG5Yu(x9RrVwl-QOXeo|QF3#kf3+@LrIwwh9uSv~xt|&d=SA
zij+ZhKfLkk=O>wGdxzm+pteYev1%xtKWfPDivanPN
zrXu$l>0iPV0{g*#CBkW96hh(K42m1fU9Z8FfE52;-!eld-`*^hECfxYs*Bag@XA|vYi
zN`-XxFi=J)$PK=6o&A~iZwvsxfP7hq+iUg@9w-GeECWP+xfIc%6njnfuS#iFmFSb8
zU7glV3=3&|he(D;Yr0WpF`0=S(_VC2(cXICl#ChW7wGhX1?N_?k?pA9mG@4rHi(9M*k(X)zJHJMi4q~Vf
zP62gx(w7>h`twTkMy^fQGmRCW!}fr*N-J(XL>b$ij&$7e_}U5>h}E
z-pfQ^GML#{QwYJ!c$z2b^nkAg6X%u~1$i^PN}&J5`{#;AQn5l3{$*PrW^$V!!`VYCqM6_G8S9D@V=`0Q
zQY%+{;34B@S~8xTFWXzn?!n)k7=FDQ_#sg;UU3LbP(qw8IyC-s3mFOiR;2S{Mz%D8
zI$)W~1jcdjFoXbVRk3sM@$hP}ysEWd0mSCpxFM2>+A3FL0ipBnURGntm&h_VNml*$
zJiOsBGW2e0m@S$>oD;7IPP2{{7R%JqE%taLegL;cimi8#zNII|VuysvOf`@pL3r={
z#!B~ZD02>T!>JDq;u_cjRATs-M7NrR;Q_6DcI%l)(TR$=Vq=xH*D8TrV4SLqVb!
zQNntJYvpG3%-+KW^pI^EAI5%SFY=7;YW35La7p2HAxd)c2%oJAxo%>y3)(^pJ(`m1N=f1JngunFfZ`6*VQQorURe+}nyZ7^=x;AJEyU;2y$vQK9^
z_DCn?g`p&)i2$D;$5bWW74k9E&Ry|e_`u~*JnRP7xTSdHm!+bnP-!16U1>>
zV8U9?j?bOU@(94!sl8rdBC(qE6r=Phk-$O`04b(Dq9FHDzF~Z82IO9aNZlq|)a)q@
z(+QA4cY)$csG(@xJmoGTpiUCvYFkfHMvy;S{kbSQi5VzBz8grhp7fY5F`=RKi`XcR
zWp}N>@jtdWBm$k>mAhVhZ-)7sS(#jVs%dmPvbkuK!}vWT3p~#j9*)e%e!xd7zE7|a
zHeY=Fz7et@CCAbm!V-fke@aNk7JbPNk-_Cgkl(*SS53{-(fseJnYO{e4wtV^UbW1;c7_2z$Sh=skZ2E2B+3(_Kv~W
zHQeLj66OS=81hOtcgMRHCz8a5xrdRpt3SgVZ5F05Ccj-Ui;tK4ji2!=TPeI8d}11l
z+g?+D7@3&(!s(^WIAPfP?5pOPMBf!10$WQ!f2rKRZ?iN>XkLDhD30w-fuz_uq$)mG
z4!M11?w6{+{q#n^=8O7`4Y-jlV}JN9$C+K4_LJG=0Q*Bg)79E`m+g*KpGd}IfuoSY
zAS>y65XGkv^f;tQ#*5xrKooj_^6^NXm-*7wJk6f(X35I&dF5Y0!Y?=WPe}qv=iP{3
z2hZyGhE(clF(`G#4aDxkwm3gb>>{(pxHpE_Gj<>Nw`5Osaj~{@XZ5kBNI>hYgy>B3
zHkQrvO#~scy?Nq`#vC5uQv+$x25|BSP4|JM&qy|0_i5j2#RSa#3P2tr;{z*Q7{bee
znq2OOd?=^(Sf}#hH}RO;8*TkQrdPR!T|d%D_eB*T0e(_=oh?8JAkz;4pTH!m=z#RsiJXn?lwA5Y|)1z!gYM6=@{gdJCYpcNju^6Hm3PHfXM&y2eyddv!>xo~k$|}}5;3wAV^fM=H$_Z`b
zT}Z(sO73p8pNd1n_BoF|q1#QKyL5A_^^IR={!!hDSvPw;^b5PpIC(MDk$4w2SV2+q
zvA3tPy$1yx$W81SDcy&iF+4D5baFzpJ-DfNKm=BLr=aUh!cAu2u2}ua-A~&eA#YR9
z-7L7Hp?j9V2qMeawetkTk?6%n6p`xUYB~=p|H~i;mMD-)4e#|QvNXy
zGeLY|2vh6-p9+GQVU@ZYYuDYq5NoXPuBkQHNj%>D6^%9lH`)P<5FqUq$@;JdM}UY9
zCOVofy#;XGWjzB!X@z_>#cSnH*uIm^PszzIOB>|{%4MIfy6ZB`_cIY1yD=$|a
zHr9@#uUfm5{8m|sK5YZ*e5^~RQ$??@01<8IQ!V(q#=eh7t^I0X*1NMy7JfqND@`Dq
z#Gk*H8sV;}BqOpUzfrbgk7_$ZEG@D|n+_U3JtSr?V%>##}LaktMo
zXRDHf9*A02jS<(DukB0t*e9+jYniv)GG~3A%8o)6BiA(?Dv^e-$9J3^==e{<1oHmB
zjn_~8auFkLmC(>%?=2)DOTm3R<7`KzQLphUi{-f8!%XuX#i{O3*!hjll>
z00(Mcg@I;koTj9_p*iOZ4?gza=7~8xEVDWL^SZpPcpCOhUqIdNo=mx_E9kn`c`H(d
zzcGYD@;U`Tc0}WG##vBTjz`l7?gf{}MY7Lti0ngFGmy(3ap~|N@X+jDO
zE%S4Jo8xNQZ{K?UrkAzVC-5m9kNvNp2JMKUnbsM;tzXVQf#i}Nww21(CT-iS0*i+-
z%`vyLKBTVZJ&Z9SkdUH{3FGi=mgtZrAk&5F6bYjW73`mGG5nu>+t0)Fl=wR40Tu+4
zQu+OeLu547&F3{=!&a4d+dX{T>U}=xEV%O2SDnx{vGWaVv!d`(35;w%qR+%yZVN&s
zCbm#aVBg9%lCn_y)4OYZSJ`807iD*R0&k=TI46~T(vQur(lw{5`YxrCZj@eqd$HhE
z-GHf9SXAf7r?1|Xdy^;B-*h7J)poL(HQg7MDjpkO=qVynbVu2A?BAw2)2SVV_3!lv
z;x_ULXg@5joqfDXTk)sd0WJ4C6?^yJiEY0cdXl-;>kcc6^&j>oFb6rGJpOo4y5a?2
znpp`$;h;Hp@(T8W>SRT>;~JyMckg+7PH?|0GuqJrYN8%E$G_-{iv3;Tjr
z?ggvz&89-nQt*eUx~lkwc0awTOB~cwB18~*S`6*~G~irc-(A#t({T_8yL<7h>Y1%l
ztE<@3D%#SdWF^&O|ZnVZF2QC-&$wzMzM??Bf2Pj;D!m!Uc;&{Xy$4JYY*_u|x@^i^3-%ybK*$Z@d-Z_?-HS^nZi?i)Cc{`USv`FxDSffhd`5wQfgs9OWVi
zZ~E%m(&*3tqm_JxQ1a~ih|%>dM@mVS`vZg08~CTr4k;%1h=!RvDd0IDv~XNMRizrr
zkEX^MBKCF|Nhz*n9gYwe_CoB90xc^!<_EavqTYm$bd=E=vUj5cV%dvZ!`8;TocZiI
z$jpU^O<>N)4>wj%6%DE;dw=|7jUdQ(MSKbWjKR4o`w_jR)i02o*_O4Dicfu@I`8xm
z+B>VNSlG0{G9vxiEr+%XC4&OKlG@b8a$%eh*68K^kE@}2;>!p7efiDN8X0J6BOkYk
zDR{i`G`)@00evjHT&bze#}z#{9}^Gy$DqiQ&r
z3XG84@nGaPfj8qAXMw|-^TQ*G)x&tKo=PEDc4P;xn(q>4TM1dBdVjFX+P$vPQ#FId
zpI>YveJ*vpB=0O=@AELbodd%eGxT1|GYmzvbX9fBj;rf!S@NpchV}09qe4g$wuT=}
zfIn7&d)iW}#i%ZgWA!)}&lDbs^LGY>3(t?A*<*#%Y2MRziCL0I)8`|;Veko_!?n_#
z%j6TN7?VEzvcpT@HQ#na%0O&Osz!$C)W|^*jE@-GVkplbG}ewX+O@Pn`8zvhIA#2Q
zF?OOszt9;b~6j=m#18|`s$EBikCZ3TUn~#Q1?{i4+Sgt}vb%56SgVGQo
zv3qPdN0WBRCLbZFI5FFGYGuv=_!66+wKbU{98e`*?)HS4*S8o4MqtPev5P7n1pg$T
z5HJ=E*EXhdHtiWYmGVl2XFv?+#W!i1?sPot_SB2rU@g}nHgVe6kBqiFSo>jhVd|8+
ze$tJ0{}`5GOQmL(n7C8i$i<$?A|Ai0eSv{XbkwMjN4dHlylB|9y(N7_
zPp?czk-dNB;*N`_zywxf6lD{wfT-@N8a3j%0+R$898+;d
z0u3KleX|%|_q<%xtn*=5`t&5WKuC5vidH|0wUr@0m&@WK&iH0);5qu8`;?(Y?x3gA
zOJS!tmwMo9*ST*+TBhRnootY(#)tV{*Mj&<04mk$;@a>pQEE=)lqd$JB#ZiC3Tmco5a1hJ-)B}Ma
zLLKoT>0_hAb-gh$tc)$K`GwKnNA`VOE!^Vd&<2K=&kk2cyc>$}9z%}b4-c)t1qA?BGhi_;{Zx~X3;Np8xRHbeq)HA
zmb&zExo|d@nfrqj6UG{>dchf8H?cG^Z+&?f&C
zWAvPh9xgNkqaAl8Amf%{s|9ae{%_lNLk5w;&)rS*SS45dM{tF|8%6fyh~f9Mb1!?|
z`9$M4sVeOp27%Ph>0AfX`76dbP>D~5}f&hxHQX~#ZLLmPT_bk+UC$Ay4QOw=Ui0qlXv_(
zr)b8L6u8I9R@juze(W}vO>-?xw9J1d(ezZD@fq^JOCmkD>8XGy5){baBkALplZx|6
z)yaaR3T3by!u8r$8pln<4wlRU!EAY%Y}xK4=}-dKzpbW{dm6*+aUQFtH1(p-gHn)n
z&TUnOI`4y0wEpVhQWnC=LxBN9M^Uae|BDGlHVxZ*0D_TE%r{i~irq?tZSj$k>LF#{
zEx)IUy&tPu!wS1v4O7{1Mo$$+{1+yfiB)evET$w6Ia);XgXBB#*6W<>t$b3$LsM#u
zpS)cea>;yzLiL;Ri4Ts?{Tic8N~}LM1$Y20n(bfd7y_Y`yuvjf?^cjv5G_cOXC+{l
zX%Q8<71FI@fra*|#y?3gEZ4`2r(VQ1$Yq7t=P%|s+eL6#Q(|M^dmkFBP`Ot~pSwjX}
zn1((^1-9z^@vv-QL{|IgF&qyUf?=Oz&DgK4l>r^I)u>FAYPWJ|_lMb8f2&U&7s-*cDYZhaYUs-90#uO4W+-kouQLr3_v
z%`Gj{zK@OK)TmK9kEGsRX|a)evH+xk10Bz#X82W<#L%5q3B%CGY-^sR&x~nTTrEsQ
zBESLUIb9^uDaL2cIxf`Ai_@Svf39B<|AHAAZm9X@B#xmk+-bymZF3Xx3`}gP1sCRI
z+YYa=AKD|~^8^X?87DWSMvXg0%{#ngnF-h#FN#iRQ{bLy&C^$Yw)Squ0hnXfeG;qc
zw<2)_`)CYwk>wtU(*%SampbrT7SX8NIYYF5li%x5Aqwj}@h6>$u*Hc(4#BC^Tv41Y
zH)?uixKuH%fWa-4ad)=7;Ksq!(iBm7OFd#IFDD1L`Z$dTOl4Sg}M|g45u_5Ix)I^t|o`9rsDzl*$QK
za{1yd#9Kabh)Bu8-*`p-FP+^T;fRr;F2B6%*ERp@okii1=RE4h=+qv?
zap~F2Oo(fI4(lB|IwKukP_3o8&B}|=>AVjyLq%p`a6Nw<)Bj(6up>j!oP=nAdFYN+
zYIgc-g%VuBzi*yud1-#gDzw!LWf^H=>O3YEZ}n7k3y?#RAD5x{v`;K~1EM0`d>5n%
z2*g5p5WBUPiy}4FS#|_hmVM*h0u@?Mg}Yj7pus~#N}E(mtJ!@(%J>9ARQenkcn?o*
zdlp{8Diy~$Y>_iFUtU*D!1O1W>0UvUKa)_U9T#Vso<}wDj}_RSIeF`C%;+l+n5z}F
zhJ8=*J{`wyZSNZOPZWkm&J|B6RDLi*~`5W%i(M#+&%0+ihjx1V^sG}iIe-_-@
z)3ypf@VPMX6jxmEWo&-MavzVIdAjWKU3=j~6JE|<#WR8^`N3!mWH_dk9sInLmsm$!
z5>qr2w#M|a?oMY>d&4f8s+5;x9=3@6TE=VJRD8m-#vcOE^ZuvhmK4Oo#p>K4Dk^M<-ha#Zf26`v0oWl
zyw4@5hU=%_7+tu$eN|EkJ=Hge?Z02Mdae-|=)@lyru^;{B=d95h=G$q(EQkKO0>;74)lU?Kyp+G
zo13dx)l!h!J63`Q#1)l|389~vJA^~aHGRf$#6$(SWwuvUtsoV27{$my`j
zuq5O4gTRl4q3?gpZ;<Wobk
zbW9-Ns8(Oj;h*m9yw+WIWxc)=?Cp+ONN=!3(0bnCPtWYK=Tsc{ap*7wE0n!g8f!
zrwSK>G+u_;t=o_MzVcH{=c18pUOAQ|*jNim6&>ki2;~UUVUMaMGIYlDrz@hmMCwZs6WRJ-%O&6&UBsRiY^QOkb}jott7il=e-M=bA(2w0BPr7svCCD^|PLQ-DH6a-3j!&a<-oR&PU)#x&2QVL5e78GQOIBIdki}fqWqdo!&PzT*!
zW1EkVDicx@(a19SzMjVXZixpNTF?C>YZjN
zKZ3>Z?9i%Qqv%Be%1ag9#IPPUz3+YURs6h5&8Sth)BppNj`L^jgL3fiI4hXC75)7z
z^1)dAiZpu(H{UhdoQE~N($pRjZUgG`_yuWalWbkMbm_3MZ1M$q0j257Who`Kh4JXk
z)wRlb583R#&tD2n3ia1p=6js2@<+E7u5T~$fr%xmIF#V>e8uU72OtYf2=xI-C(H{U
z6KrPZgTqCDyG$Xclm;|Cngcp`I{I-!6HcrfI8d7u9%W-OTgtB;0qS+V1Wvn6>w7#M
zO62Te!JRH=)iHbf#Msl_KYpJG)mjoH{B+zbI5qGpxD*^N<;;kg<@DGdxAH$nyXHwi
zQxv%WgJ9{IY?XZIjj;5Cvq33h%Vk@g{kT_wJ}EkRZs95n$#)3&WPbP0kzi012tiNC
zUkMTFW#R>zu1)_WAK%V<;_`A?FSscKm!QObar);AL16)1VJRe~@N|b@`3Lf)IRetD
z!>riJPemP?z_R6?#Yy>0x>O*_M#;psU>tvuv2qhYN9v*tptOoK)mEE_j%gKScIuf>
z(LV_nuBW!wRmCWDNxzg)Ba*h
zJ2)0_+sdFSBP4WD^h&%O^@`!rkTq;gHI*N^q8=|4l)tuzA{+KwnULw*HM9r&fEbmC
z@Ae3=7p~M6&P9{N;XWyQkmu=Z^>!>U$w@rB2|DL)!iIJ)7rz=rdOFptzS#Fk=jm~>
z+*aOP)jzjcEtK*SJ*|SfVc-^E4%7oAD@3IGOVp^{{NTd8T9P7GtMa?l+Eg$O8vJYJ
zB*B>(^1$*s%p^lxo1qT%v_f&(eiPAL#iVGjyMFhmW66j~~zz
z8!P9Zma#t+S3*4uD@B*v8=OQ(xV)b=!$K7-JK_{7Kxl^i3jTu1#6^>~QPCHMeB8^(
zmZ4Tha|OOrnR}GzEh-i4KP1>MjAik-*0SnMI!YwWTM>q;#xyugMD4gmns^=Y`J?w$
znQ6baqxDTWS?{YkCk!<%w1rV@=cW*)l1X}a8%02~wu`;l%U&eE=&OI)&o7PaOmO)P
z?-*SN4?i|kbo906GZ)hfG>Bb1h#cq6FGp}Cl}rb4442Edw&Dr$m`NL!fi>XWa?Q-CA
z5D2vhU={$qv0qoL)%BiPiZPzjo4ZU26nr0D8{-2_SIru#=69cT>!rOQ_VuY!wA@Oo
zkyw_5B54d)vE^0Oz{>)FkMTIILn$5%aqB
z7JLHVDxN?!tRGgXa6kGg`Wba#_+nM)!q6-Yp792&`H^1cOsjYO7vD&DM(wGjLpYab
z%m%xT!S_9nk(Keq(Z)leDEz|t>B2097jmXbimkNX*6IznMoi!18h3v;?NMrY8^QsolIwwbTDYBb
z{Ru*E^yZDi(JWyvUipouX2WRkMzVxY%jFl(v_l@pzo}Gn8#0@#bJ?Vf5i@qyv~Llm
z?V>8EsyD5b;75PG?n+zwsp}=i8Gu9>A0N9EOV6W^3`MQcba6tnL6v3E^R}o6SG@}M
z9sko=xsJUdrRFw}I~*y)KNzt=x}X0W39EBKd$E912DdyS&gp1MO=$B+jf@HLY=eCl
zKK9{KJq&?T3AS6j@KFohD^r6|XT_^q_1rVsW$t$J8c72k@n(Q7M2T<(tDP&LaDQWd
ze>X=pQJ$A8AjttMED1V%=|8fwx4F$wY^1sXX)GU;T4m3A5I1$SdBB@AZ#UalH7m6W
zFrg%h)jP${(9no+^CclyF>m%Fx5o+ku%(LX;H_!!ss1_#E(^?!=kfYjqKrkijSaD6IUl2J63xRl&Y$;&*MC
z(b|rB<{sf|g2Hd!Mv5ZP%+r}4?9m1Nw%qMsirCUDikg^6cOvn+`jCO*_DEpXLnpnS
zGA+X#dalTyW~P`6NZn_kEYI9I-(lb7)XeImPl{GN`?-o|Zhtsap%m(CPh+EMz=&uM
zfsRUGU=(E!{{sHfd$P4NX~Fqo(rl6X(S?dt*=5XRdUPv0%tV}lXf+65XncF~e%0E+
z&PF5LwkioRwDRJmaW~XS)1tyBws%GyQvlp&7C$9VlQStD6=55pnL@erdQu_h_ed2b
zyvnG_g43Fq-DB(AbHt>j^?9u7e)rko+!lR5S|Cn+OZSm=hJT*GS%6;khoma@D#^T;
zd+>c6wyCg{ngYbB#0W0NANdBnG^`>Dj(mCKm2aD9e|2-z?wz3Xu(3Z1hmgp^E63Y^
zC}K0({-kf$L1a6)f4r!{w!nfYFThmQ8OVg#d_H7lm238H<^hrhEf$lw7OAWS>x}G~
zaO!c(KC}7hagusfUjh$@jWcz5@>QuiKJTqBtASmk(Cp+ujMb&N_nPn~dI9Y#l0*v0
z$$0!>(z|I2c{s{>27FzqxxyGiIYK!_B#v41Rqq?Nsnje~X>*X=z{dM=bxP_tY!^TSYCiBs%
zHsFuyu9CF0KB<_n7<<3kT-Kt;r&Y5rXX!Ix+@ETsi~Jwn_6rFippf0%YkGoy)yGABgvIvmgLj`NwX8<>7_GM9472GB
z^OIkK{mA{PA{Ptwq$gjjjT)X-*Z$%Oj1H9=&I4Rx(YMZntV;=wzDfpstzUg?t@Z9a
zo*KPhI)nylGNBY#J>%F698r=*j#rDSA&
z`-3P2KT$a&h&rJLb8IThu}BE+CG&
zvRBRwwIqR51uQ=s#ddYS`+Dn?g$mQmd=d9EZmPHZ*excIPVcdaYE@s63Q3G40BM9l
zDAJZjO$zE0r6b6-0oaI@xH(bxyoujIMLkllpb=%-&OXJ`c@mRO2X8Ga8RQKnaVfI5
zdhK3DM~yim!}K#du)7Rgw=w^kE@(vsz?W=nCU;ym&xcr!&de+ria{RfG?HM;fYMWq
zzQETeg+e#^%=<;0hm_4-R2WUDiIkZ_l^y!8X2#>!xTyv40j8^nnVQwr-YEE-N}JZ6@HV^+CS3Uat-oh$p_gCRxi#U
zuS!oQ^$0*P4brtH2|=kdVkucx0@D#%DJB>l@!`oa*5;SIW8#j4J8C))i{0ih=aLOv
zTpQl@2`@<={q_fCRk)3YMmtBbye{2Vp^34Q**uV=I9`$??5Qy8nz^MQL-h
zsw&i3@L3H5$?}&M>nw2I{1^s0kcp2@!oN_W#j{3g!G6zG-IQ8TpHY-fg`WeBpqnHCP@)NoY#Y1lxr#b@7XH_KtvD*66dFkTr~Dq;U}<@@UBT
z8S(=_Qz3lk@90@($Kx8bBF2Do0jR9i{DBP@=-;@*V^-3&+!B;pWXgqQf*iRU?ex70
zssptS4p#(PL<@qxpnCI{DUpUV0m@TE`biw+sxbMchjOJTX#^82V(`^Xys2L@55Yrj
z_c4%HAjVd7KoNou>oVzyucZu%)0PB@K3MVh7?36OXvP7tq26w2!O>pq``*J;We~Il
zX(buxE=r+rsU8=be7tnd-!Y*%@6zy6PmXc_8G(wFQXFt@n0w~8Z!35qZhF?MjsE1+
zsWN68<*irW7ovq@#bP}dA4VoM)BPbQqM(r7?X}-OKE)^4dq1rgaqJBe!qdxqxFC%~
z=&hCiwU*)iUb1(^-I<=DZrE=wZAiuZDw{hA{Vfm
z9JrZ)3@rk!EC@)0doby15d1(rAr^mXbn{XGeU=A6_`H{s=jg4j%bj@A&`Bivfc{GA
z#U$hGT6XVuWkAubj@u&%a7?6jyg~$+1yZgS|IkU9@f@d=D%5rC%Rgl|M@o_WG0@Q$
z_fULBF%qE2nx+rLnD|^-XiRJvuTHw9v2=h^IS?0LqAG(FC<*OfHSfLnSJAIM_pYA*
zD-u0=Vm?{^^`4c>&T!l3iCc(JLpp^gbbZpI!$_JQ7D9aZSZ|p$w!qQwp?5f03Vs2;
z8T%T=(2Dv(&%sHvU_Hakf_Ys<_!k4%(})u_1LOAP-M2q)O3qToqI~yW8;G`)CTK~J
z(}^I*H;I!Nxk%y-&hE+?i@vMhaFgJh3`J(1Bx?x$-dUYyAP$1}Cda!IHLLI2O^yA#
zfHxkAzmyFsJQ31lhL^e!!%LxEUpjvM4`?h
zclY~O1TKW?UQ1FOFK^YrsZz?OwrL5bWGISBDb-drGYYUHIzK*EauFSv&qE@T^D;pg
z6yeJGSr-0ybZlBG
z0JG11s%I**P0m^S4k?KOEFvjgupLp=&>8y|NG3uitGeGY;inzb_7}fUFKwqB@HKa@
z%(T{*60vEb(8?9Ur|+HMEDmKkYxEx_2T1>15{)of>M3daxy*6)?<5Tv<6mkWpr-t=
zZ25NFbwD!u1m1*|$hYG~dJBR2c%W>b#(kZ`P|Gx@5L0c2)iOKd=C4@Sm&=v_z#uZH
zTSV#1Hhor)JE@{wn3{Q!>uy5%VCJ_}i|Fnh)1cs&olVd;zfV35G-U2OIgW5u5n{?O
zfSDy?NOx54T@`zf{mG#+`CIK>AKPMJG!q!Lm`sgxeJ9vHvZtWiC;nsmQFl27Ea|90
zQ(WVU#OAXBhn=CKp+7`hpQ_wq!=lb2#d{N|V_udo=)5_q2LsI%=qTMq2WyExq_m<~
zm*o((?^E4#Uh-jyNq}j-$fDY`x~>>xYlm{XBAXY
z5g#t1r~noTp!1ZsfzbttSx)
z$K)toHF4W;q#$7-v`-9meqk1}Wz8#Y`f@1(&9U^e7YoA^C|_?ri?vx}8a
z&UdixL~hZ74)H=WEPG>2wiNtTXYg|ZYnsC?s|
z$Z{nmdo)9sU3cb?;F5lyVrl7lYgRFFIFyFgqV+{9zEo>SScuHG9v
zb?ZNyfAK&(6#sR9ZM%S_Lv-w$%5QRHfVm%)hgu%IU3pig9~Zd`t9WXymE&^05|H&2
z^a}EV0UhOUK**TVHz88?|9)x&$R
z69o!f;Fl{T)VO2c6a~Mt+YZfkG)TGAnPTmam|MBo$C-8d!mFUvVloq0GMB8Pa(+}OfxmE3we;vwBZN`-i1fcdki_}RGmq^BM`H`BzelsCx
zIy54e!8~g;yGJ>>vel+!QXr5W`*ZY*2XFW7xp*)Rwf-FD08Z2J|Et77AoTQoMY)`t
zAS`J5j!RLXLA}2*0CV1u75lvF69@{=>4Vj~o=wPfa9w|TB~k*uJaZ(>e2x;^*G0?T
zS@VJJCym9^3n2UI#%PoR2cx`&(DUy&fei*@q5B@2fR;jPn8MPfLv&feF9$+;`{=j7
zA7foqm^WyJM|BQ?K}eq+HP9uiT8njjUM$_y>rZ2RNATN&J?ZY@ZRk4S%8de0;nnrB
zYSF;!hA`i{+*@PZOZ!+?|9MdZn5=g5#op|l#*&=rScZp2Q~=QPLigC-AzbcD-Wqq-
z@=GkT<>jN;H26M7k_AzPg>%Zd#dLnDax1&D^N5cM@a^h1@i)fQ4`Yoa_VpaARePPvV6xlf>RCyw+sfeFHT1bPK
z1{o+SoE_W(ka9|YTo%$P(DH56FADXd$-IKuaAK6fK3+6aJ&^SRpFs)chGSz0Q|r06PHWBIG{9mcAJ>etVhZy?X9QMf<8
zX$Q=fxxfEgCodl6;jYow57yMGCX@gbp<<38-(ox~~kU#kai
zMi<=Vt+G@1fZQ{SwK~`jqn71#NNc?@szUorHL7Y5^COK(0>wZRQ|q7-d&Zeo#OO&G
zb6VC-l%n~L<&
zWhMJyu*zc4x9JP!hRI}(n5l!?Ut-#?{?SH~<=@`tWLaT3=BjtRQk^_bQIkPhH}t5-
zRjHpwx=pY?rIH@_lD7i1JfSDr>2koCE}>U??~&E0z`dDCub9i}%4c7??uB5MR7eDp
zhB84Zo2dB4mtVbO*)rQvk;&S?=)g6r#~%Z(s?gNV(C_RA9cB_^UzYgHAU1bP
zW(ADurm%>-xWordERzMW+eev-i5|^@vRwqtdMUsqbdGI4Zny25xTL`39z{3Iy
zb;`>bs+-wkP=tNe@1`pvLFyC|a|U-Uj<4vWR{l<)@*yN577hG+-U&-;?mH0CKhDOGakbLim#24gM?Hh$Tk70v
z;6_jF-%mVLnVE%enkSBa8L}8=QC>f&YQA@l-p-DjNE*5%V5_#?ZQT?*{8@P&(F3f(
zOQ};ds$;(5OY}^u(icab*g6l)-o%!~h^OUjWcDMhUhxSxYd{aCzR?^Ic@}D+YTMdd
zNziE`xoM=2xWBkuO;hrv(OUi7t#)Kk^b0u1`1xW}_J|Z;p}pry32U!aSm45MBuAEz
zN)l-hKAK(R>!(@J^)Ppfb3qr%QFn&Vub#J%=xv$1BT8ektf-C*X+wN=27D%lX_l)s^@Zl4xykz0{B~7a@<%7ca=3hCKe!wQ+V~zM
zNeOcI97#uRrN74JcHc|Fi5sNEl@b61|urrsv$fa^{~T6e+wL+Dq%<
z>v7iG*2h1U@e01=I*wt+_bNXA{x2e_ivBg1cMpz?6fu<6a;@7!{PKqRVxEiNvWbn
z?^WUp?m1~U*q2UdB42(7ud&v?BT9!UFSN_-+GeFo_iY(+J!p-PLdH#GtFu<
zq%8FX_QRUM*2$E)XTs1aae!mPE#hvKp%VeLl$kmnK}F&6amgBK-i2edwKMwsIxU-1
z^iDbkW6)oJMSirygi+B{b4-qROA}b9-Bpa7N03;<@jy3`Grn6{f3vfhZpfyWkty!D
z9_+!P5zgaET`WFs$@_8-yrHJMi~N~Ps&Md&?0Jt&uDxq5SeI%ZkvSkxqGN)7rOj1QkU;)3hyJ$_wv
z8@YPnVC=`i#=ZSNJkYerJgfyP?ej`*i<6E;orsJ+`k1qa(T>Nq)uzV2p3)R1-Tf*u
zT8H^dd{9Nn7{$f-MXRa@Jih~jg>au@Y8sxp*@p-{(pmyGebrUQrs1V@YU9zB#y68Y
z81j#R;>ZeXuqOz%#;G*(%E^uTCP3^gu#YQ4cP<|Hs@jATtKbomy=>Ykws<~Ar)>id
zv6oFc&q4hg;_E>f74Y9Bi_;nmPUV|OE(-FLfCcW~b_lW|Z`7D`gS|3Sf-l))Q~GQzI(HPw9AzDw(kZ#95(JB6QJj0U
zXDP#)mzCy`CJ6v%Nag4)e5;_{!IpO5>HgOo=_E3(94i%x6|IolaO)V^{?ciE-|fq!
z^OCu92gplumtF?rYZL2p`QPlrwSM5{@S>@cXV7pLGYd?%P`mcdz4Bq-F}|Li-7eJ?
zCM%2ve?G?ke-6gy$$$4&;8Nz~0N>m>#Z5-DB9h)S{ujM94HBfbHD7#9fC+h|Y+5p}
zHyGxX1AX>)=QlH8@2L8@_L?Mi8U-ACQJlg4H$#lIa^9J~odjFg7ad<SGe(;S9Ur9iCc~1n`W7%{pBCkdz{1G9`
z+pNBc598Cd;;T0tN@;?3_|DN8O@`LH~AX1FPbc0LYITK
z;=mItNFTlj9H@1
z&C_Z{$C&E%&6OVE*v}Cq#d7u(e#Gei%~&cv472|=8BE&l>g6blC<(&vM$M{ck7_bN
zCqmd7Cm+u~jDv@$Mv7vWvCHqEUsjFPO1KkixT~KbS$=*J^iZH@K80dT5`<
z6Py4=pFtijC!L7W3$DJ7kS~
zzApb{?mSj2_0G+LvWVq7I@F)kkM+9GEod8fMsv#ynSU?
zMN0?kn@E9WCmNp9C)2{j5uFFM;jer+t4-ar<~>ak>tjY=t-sT}H5vXIZa+nw*xDe`
zWeG*AU-XkhbUHERJwPA6TV?p){x-+BA>cnJ(2IEEC7<~dSC7Ewez~l)F)HloT^pUZ
zsei8Kw@g6u(aP)bTO^X=dX9Pma~W(|C#8>n8NANC-KdZ7WKwm_xEtPi`*JKk5jinb
zQElw6OG0Xb2q2q_z*=(Ime+t29E6%57rEr9v{p18{`3dJUPPhG)9ygNz+UbEdxOWRr&m2eW}4tvhDjrgj+erjg}
zU(kp8h60`G1XS#BR$e=2>wOPJSq803yCXum6%F${VGVv8;(b8a8soMZLG?}<@yEL*
z5^N0T0|oP7Y4QPrB1iC6oa4v}WTXTIgiy3KP5nc>el%$(cpdVAY@bC!wIrjb^m(;J
z{bcZ0?{7V_Wi<%Nwc|yEMNXoxi8S)pV_1wha^HQgPNE(W;KY~g?uOjY>W!fD7S2+z
zx=*pDT@qDkSWjNs)tF!}EBdSxMR0w`Mz67zMXCs6UApS9E@iztJL#Vli6>sD`YHm4Af9@}
zrvaJqucxZgdcmwC4D)edRc()5q5$~@il^1Dsy?AH7>xb1=RDJOhQ|pBJJKpAB
zmed8n>P_k>eVM+C4IRX1O7q1+hT!1A&`E^T;jV*!^m)U1Oz_{}FfOsu0wY4G&dHrq
zgFVS=ZcnN+u3!=bK@!fbGv|={oc)XzA6IImTj_gy?J}Q5MT2z99m4$4Dn8c8-(z{5
z1s{i6tu(D^>B&2y(i}e^N~4d2b1Mx~W~x}5M{jq&qgM@}{;48*UI7_a{20Lmw>uit
z7E=}J3E(AAHsOkRxyO5?d};7U0X3}el4!lr+H-LFyCh&Nopb&Oqz4RBSOZzdK)(QO
z$TO=~i8xIE%(Ff@e^zH>d(f#K3nX~-X^x!>?t{O?yMt!6U#du6~gmC?vr^#kNvO~BR_BnJ;=JEZn7U_n$NQe?F^
zh+&_ny!YZIv=Ak3s?s(=JtG{P3VYx2%Zwz@6<8>gt{qp!tvMUhgPWB!yS6jR)zK+*
z%abAf`(M52$6LlYt_A)8B6odPvGy+in-LGR*SVFHVmpaWb%I;>M#E82et^qlp)X)$&IW@JKK#WoB=~N+?EzTOS*#}2
z_fDrr>?=Sxwg9a1PAWq&&}fyd#^ih36FvC2biM?S39ld>v3pHs*+T3^&&=4L#U(?+
zfFA$);YgR@PPvzC(am8-#S}N2xd(VmS
zxyq`M5zU5Z`86lo;F&zz&!e9Xf=iv1pEI~jexADqkNcJ2^!6LBpG034OTv*3&q$1i
z&D&|AeHGcRq)Ok2)}#8|Y?hD6Srbv0Z4rK%Hgu}1^_|g@CYdbEc;d^Qdj>wJh4ELE
zNUeWwpPa;Bo`dM_82ZSGuYQMA^-4Cb!eXAZbI#wk6w=K0HC1yKbJHGc=#4#1=Z5UJ
zJ{69Ce#o@ds!h*&ALoZW#hc4Qq!v5qqDjru#D!!=q2}A;9bz6uq*aR{*MlYMSH6dr
z&X+zXW!`53BHAzy>&649=ZDt#kcV2LuhplA-MYRFn~$0Z$_V*#huia{`Ctp_tVD@(
z@q(%`GBBQ^z=h3Y0i9oMAMCMU_^}_npeK$2kwrm(B{#e#7z(`D*l6KlqUz2GZZ3
zBEDE`SG|s0BE4)rc}_tD+e@u@A4p0d?4x0m$;hEsJa;c|44$YZa`|;}>rr(msdTHG
zU_8^(_bhpFJob*G@RucpsT_$&j`Bg)!H{*1#X5mXC~K){a8SEWkiMGGzqVfB?hcvG
z`Ui52@j=ck@S|odm&gOMES9gVM+H6AVtkG!88hYkA6g$kHa}EfvDfqghb!jD`J=SS
z5RA_aLYH3)`?2neCHGnHU&bKj5mmN`{gzM(SzI|*w(QNCA=G39`0c45-QvioLz@iZ90__VKev(^)WxzZiEo
zjvH_a9i6%zRh0Ibd}B(Iuf`VDG^d43-6y8x#SkLYO5LGTJ<}9FZ*Su$e30n~^ikTN
z)z#k?(Yi;Xar3XoKHgH?B@;ui!@d3G*+J&1Qh21`;kK@_#AO9e@qI+W1;P-s9
z`a^XVSrupt9;BH&+euT`bksf-TX7PtGU&oJme~-hbU3kRQV=mBn0f>oG0C4O-v@WN
zJSA&!$Pi_W?62cJMcl|xcS)lhxbVp*pnXWqN2jVPTfwQEjiC^fOF?i<17}4ZK{Ox+1rPxims!
zuwm;f%Z5osZ_FwBd03&`_TH(4h~~*sl*D$PeU$u4C}FRG%er&UAtWGZozYk|ZK%v1
zfN!Cb22nDbA=*~9U0Aac$E?y{4Yo~CRqwo+nXYZ!SCAwc6I-%fz7s7u)v-@Yd9+Y7
zZ1UF8#3*$3aZ*C`4}ie?d;BkUgMpD3swVK!lDz|KGz)uXx|*z@Y=P7!UVj5PiNJ<>vS1$B{@C268~0K?e2NQvBD%ir
zjU(wSU8S&8LQ$uLPg&g2XB-y?o96FAj`x2T41UgiRvb{VRtQspeGH6r>P#+gd4|Vi%XlnFj?o
zlU_dNJNKg)N->ffqhHWDGlaF$z(p7uYLT64$>+(DHa`0cHAZByLcL~!zfzVJL
z_PtA{xWSPed8ag;{3A_#K})ri1V7ZP`P&)dO?oyEBEdO(U|OkJILLwMYA2A}$n8Cikfi7TSKbGy
zP8sok?pq9%4yoi2Bxn^ii(-(Xb$BOq5Vy)y*(#YTh;{IEuU(Rl)SM?!lFQ&$16LgL
zp=jxy4XQ&d>y&&s!8hwG4g?mQ?kNES
z#4jQK$X9}W$=pY7b#62a+c%k50uB`5d4~hrUMdCGsE9e_M|Tqmjx`Ou8)~q!Qv=t8
z_k__#j|b)xr;bBx#gVGS`?hs+dzWnwlJv0Xo;rEjxR)e6W?Uc&pMY8YI98%tXdkc(
ziQZ2o+_`f~BKYrFynW|?MUFBBtJ@0L_uE8npjIUO=hBqhx+N`BaejC(t5{0!ZT1i6
z^)i_)2zY-EQ`PAFv?#s8SkPWV&+fFQ`(7?(_Z*d$#rQ5l@7uAfa8V5wgu6%bw}Q!+
zQ_>(lVN-}^;?up=&Lc-J;Zn&$lcTCjuf)P^2>q}OnM(0b~N
z8Goai^=xop7&rexKp$P*F+WdL&cZ=)mI#X7zfp)IyCwW~%9vI%XMkQyi2w@)Ds>X&
zm0y^Fw${L+H+-d3q%X<441ecH?2G-7k}CW%_e}bQj<1LR-Z6bh-5B?}eQe8VLtg(`
z{N_jwm0CH~*HM$QLrI2ZUEVoPwQSmz@I|X!acdbTh-1y$#;zeiDNybJiZnhggotW!)2CJ=k3J
z?CUP@6O+86K<6!0*P}z1#{4ph+hf^J#S13-bC2#oYRWIo2d`Q#{mY;y
zb7=$YAWuBof9mkLhnNad!|a?f%WhKt6hU(u5yjUHmM!L2*TETRT?yMGa5fS-E;#ej
zQ>K6b>hwhZNzmww}3x?Hd%ozEE88`Th5;&?%J;wIIZ@Z&nC2(me(C*lz#>mP~
zD8U40ZI4|SC6e}hbw%<;!}s=uH{-E}(h>4(4n8v~!!RY5CVK}NW=J$Z`JWa=;Ump3b?n2TWzf;oXo)V{>4DrkXm`3a@e%4uV_t%TEfcrz54K
zKQm#w=Eir-YC_rEpK@-x#ewV)(zrznohL5e%mqD?&hZjBaNECe^_!*GIAkyD3?OTV
z93)8_mK1`QK=Vm@S@yArgdd1aXkZdwa83Mjiaxwv2s(^zE6YO+b>D_(#>`vhxE2Uz
z{;7~v!uHrKS5pz7_stIRD!OL!iuzw4Lc_Lr@)3~v=l>A-EWew5#v8~`JA&T_KWE{
zKr$TBg)MD;E&8$)7xK+=*vcxZ3`a9kT6sgj=hbm8@L&8(MJmqNe@qV9R1-bt&Zl0s)_1W1ErDwS`?c^+sA>Eoh-uf(i!^x(
z_<=-+9WKU0uK%YAeA<8cZ|MB>t$Er$?V*q}pPv&Oeox*QyVdv(1wdd#3D#TY84eC`
z;irYDxid&OH*}CB{HS3ukvusKmvenWAPlo|9W*Za=!PQ>beOq{a8=lUeRAlE+#Cui
ze`DEnAldXKGtB7hAb3aDyJ^nO6Rr)O;$gaCf*)x@jn4(NK!@m1WW&xajymc{QDXL
zu$2#L?@YqHu2cnuC
z0H<_Hp$FG?_LV?c2Gp@gaLNjLVRTQJhrj1X`6bi#O(`r;-Aj3CE~F$g)n!c>eo!%!>3})x$5z~ap7&_SGsOx>L${%d
z36Dmift=hiEY{0TeP(V@i3se8rtu})kNrrzPivF#)dy4lb9GV*xQ@Wk1|4knJ#dLp
zDS|QYjmif#{jA5zd6Xb_T$^eqMD+(YLRReLD5Cx3Z}L6GYCo;aKw3$QZuqEEj=N<>=4P`X$zD)_o&*y3%pk-L?n;Tu_w$$Q6H=Q{qZ
z)e+)diBH*-mK%)}ZY7|rHyy3Dn%RRE&;Y~=J;?lLJF8pJJ>&-8&m!BVcql=gq*1Wz
z>hZ~?<*?+-1I)9SWlt7V=x+gZ&622|9g0~AQ|m5ux5#MiSpAa;vktOGt@@sfbjtdZ
zfC<12>tF9zwlZsI(zV7sG@>6@s;obK0!;ADqMZu@AdBPJNZQuc?cG_8NZK)m3?^?a
zS1GJE>_{_`?!OnluW0Js;hSY9m7`(vb@bZFnZ3_Bn{2*eh=(jKkn6pk*)Jyfe-=dW
zI1&HPriSq+%@eaQFq-3~+ycg*Fpoh&!xTM=WM=5(6W9?Gd5x__Iah12vhX*?GKyX=
z81I-^%@;pIdcSNBj=rLsA(61OaFd$A;ybRq^roL>k?x4GZ@qCZUU?)^`%wJGCQ2-J
zm^`eRkIm#>E6$YxgS>Br=2|>^#0*ZRV8Wu^U@q_^2T}5bXBQO%v>egAhOX~zJQ>H7
zzb^>Nac-EUqIX^-R2GLW9F4`noi>OSP&&6){-V}{!rJJfZj4;U_|}@s1!NO)T}9^$K6$C
z+UCZf;bv}Ar{`syK_*BytobqL!+PHFT_OTIZkT#h_Oo{nN4zU=QiptDihV%LkECQAZy!EgwI4z&3)E}}8f8*3k?-$vJtatG=dqO3G
zpd}mRw2{1J3t43PPN9@zXdnoYgzDK?TJ~W)Fw`F};y(QwsqlIu6e|O<1eeZSJ}!{f
zE-ttkV%3%4Nq80iBDYO}+o}4Es^zBv(`b$6-9oTua9>?1%eu4g_G+ehf+dLx$C%>*
z(S(wGSU6;W4l)sT~QoBz&QwDySPim9FRXK62}#^vPmu4;>ECLo;H~FwOVETLp78
zPAMc+Iod(a8jaZjF6~%gWO3sT+v~{rGjl@?f!}d(BBr@*P*aG<+Bf2h_=2c=g7lWR
z?s)j-%}MM6}gfqkz^(i+U(Bzl2$)oa$Z8=r+qJQj)<7GxRMYN*ucrGk;a93R&k~
z^jw%${kV}J;uM^zZPD~nKni4I*LP$R=*f2~1`yBZ9wn)1mH>7k!7$Po{pfu7#cgNt
zpBRcEAA^IoQDc-9lq#wus8K_5p7fo
zim4!D?pZ3fLL7{T8iY2Ppqel`M_J2^gAXaV0-AfLQ!E|@#8CF6U&7sH!=d7hy6Y5a
zs^~qmQIevduNOh7%}
z+5C6m#n?$kUkq^M)ctAL$GR;?-S{EwLqgZrFWZ%JxgTO5L5Wh#?PnlJ}Q8
z_o_F(1uw2zjP6Bu=_!%vkcqU;tj$lvTZz$;XFsN_5uQrUlZvpY{1L2TNr|aZ$JX=~
zEOqqceJ|4HW0jgN%en>Zt;v3qo6quIx$pv{7BGt?y^1%>Q$H>0PPUO71Kg!<#RU5%
z3y8>>0}MX9BJnzk^$Ikj*Lx&9pzPp-r&Wrq(Za1)q+cW$z$8N)Cttfn}tdNy&D>sZ83&XbslA5)1o8e<)CWzBHp=rVS8j{(j
zf92^9etCWWf*l_|M4=|xFoylUVe8CPWHRDplE%><`*HY_jTc~M=1~s4jVJ^Bq`Y*T
z!|@XNn*;8;1P;tc*I+)Bp0;fwjC-ARtlltb5+627yeP%Q9R^x3>u9jAgysB~Mc%O(
z4UzOibWLb%KFRHfL=??Ltn8ZGn_1w6-=dSFZ
z^bGN_5qzJS{EvA3JnHYNX+o0#x=dYX%)3Pj!CW$aDDCYs3mK`%=VomVv*WCty&bqe
zmL&r^r?gOEiJ};;!SEmYBdZUeZ`yAc9!`w!7)I$aqI$M_2STB-r2s#YAFzC83`@HA
zh{&{fabiq=L_jUUZ8qUaG5%Qg6jOuEF)yEBfy=3PhfZtbo$L^|#P<{SmSQuc$+pv)
zu73Z8U7~-HJ^y>xqxJ3BS7c*j3*C&G-hy1gj&xl&8!Fl)%|b~={=zCUi+m}dQX(vv
z(syr;jxTM1|G%n1=BQu%1#TwnK@vla>>CD{xka3@7^AAQ7Kt&jrpqZlae)hYG2kTq
z9!Dnkg!>sGE(Mr!a~B=D?uU3?`BQ)FaFyzrrb&;8a+Ka#s$!vomGCAqaKA&}8iA0j
z2iwkr_1L;xc?AaXEq
z<0{^U5p|oaU|k^AWr`)wt;pH>+&TGeq)mw9
zDq;oh6xD(G2AJI!&D|CugF>bzUPAi`LWygvuL{R@bY4}@wd|m+%zuw*tp@bh91W$c
z3K*bx#q$)4<|>PP{w(T#wsu)}zU|?3(0e`D-~Vmy8F>A!UY5#wr5=Mw?*}~HhskL?
zN7K5c`w9Cr?hp8o-N-2cZ#&A@PQF-N#!v36J4Ax;6`;rQIcSSs0;ML9WJKc4N7&SR
z$lB=q=k?-0-fB`IktS+vKg~)3T&=s3)hnZjQ|}fJy=iN?Ugl`+uQG<=L^wMqG9!8J_JpgUB_O*_ay*?
zvQZsHnJ-@a$DfrinzS@Wx7wa|KQya1R!Rp=PtevW)(CtH|C
z@*`P6JL)iUDZXHb^M=&TpnVG2rxQ&!*`~&!eFPH{IKS!23VtsUW_1K`NQ*y0_!)_f
z?o#h>%^=J>=nH&QT&u41EW-h_vtzs@z@XXcPBC6A4bPh@PVX$7U1vVY{9a
z2O5|Z1kZuMiUDYZG;5$ET5ucgtw*flupz`es5*EugsmlKbXO|54@n>e8tPWbS()co
zMW0DoYO$pe^IJ1`JX}_&&6BW4b5aF8?lB%GH7dD)-Q$6biuTmJ0KEb~nT9cr0Nem#
zO*`lycxZX&1d~`UPqrMbEz@*Kk_C^BnOe%7WOrsF8Oya7`4RKb6U`6y~WOeL0IRj>(bxg&$M!1k#mS%W0P7Uh=q8w?H#Y?;fJbzx
zu6p^2*UPHkJ8XYGOR7q1-S7xF&+der$-o+c7l|O0xFF|-^wMh+vzDE$n;wVn{g$G=
z9k}x>T+F{u!Agxw{r^YGs9i(ApjkkwzGZ?LV!4?o5tVb6VwsI-!_OUA05+RNP3j~D*Pm@!|DCx
zi^L8VWVqE2yXLZ4K1F)s&LQ4nT2ZY6lP#+Wg~5yRWGvzuRh(@V^vef*DC2FZgD)RQ
ztKR<qc1k=+90ct$S~izhdFfF^LUG;zSxP=^
z{JtnM2-djd)fXE_I%#6or!+