From ebf491bc1fa35b577105f7ca86fb438023ff8b1f Mon Sep 17 00:00:00 2001 From: aime-rolandi Date: Thu, 19 Jun 2025 09:27:15 -0300 Subject: [PATCH] reconocimiento elixir desde cero --- recognition_VAD/.formatter.exs | 5 + recognition_VAD/.gitignore | 37 + recognition_VAD/README.md | 18 + recognition_VAD/assets/css/app.css | 86 +++ recognition_VAD/assets/js/app.js | 45 ++ recognition_VAD/assets/js/stt_recorder.js | 119 +++ recognition_VAD/assets/tailwind.config.js | 74 ++ recognition_VAD/assets/vendor/topbar.js | 165 +++++ recognition_VAD/config/config.exs | 65 ++ recognition_VAD/config/dev.exs | 75 ++ recognition_VAD/config/prod.exs | 21 + recognition_VAD/config/runtime.exs | 102 +++ recognition_VAD/config/test.exs | 24 + recognition_VAD/lib/recognition_VAD.ex | 9 + .../lib/recognition_VAD/application.ex | 36 + .../lib/recognition_VAD/audio_processor.ex | 32 + recognition_VAD/lib/recognition_VAD/mailer.ex | 3 + .../lib/recognition_VAD/wav_writer.ex | 29 + recognition_VAD/lib/recognition_VAD_web.ex | 116 +++ .../channels/control_channel.ex | 17 + .../channels/data_channel.ex | 35 + .../channels/user_socket.ex | 9 + .../components/core_components.ex | 676 ++++++++++++++++++ .../recognition_VAD_web/components/layouts.ex | 14 + .../components/layouts/app.html.heex | 32 + .../components/layouts/root.html.heex | 17 + .../controllers/error_html.ex | 24 + .../controllers/error_json.ex | 21 + .../controllers/page_controller.ex | 9 + .../controllers/page_html.ex | 10 + .../controllers/page_html/home.html.heex | 222 ++++++ .../lib/recognition_VAD_web/endpoint.ex | 56 ++ .../lib/recognition_VAD_web/gettext.ex | 25 + .../live/stt/test_with_channel.ex | 120 ++++ .../lib/recognition_VAD_web/router.ex | 45 ++ .../lib/recognition_VAD_web/telemetry.ex | 70 ++ recognition_VAD/mix.exs | 80 +++ recognition_VAD/mix.lock | 35 + .../priv/gettext/en/LC_MESSAGES/errors.po | 11 + recognition_VAD/priv/gettext/errors.pot | 10 + recognition_VAD/priv/static/favicon.ico | Bin 0 -> 152 bytes recognition_VAD/priv/static/images/logo.svg | 6 + recognition_VAD/priv/static/robots.txt | 5 + recognition_VAD/recording_1750275490.wav | Bin 0 -> 204844 bytes .../controllers/error_html_test.exs | 14 + .../controllers/error_json_test.exs | 12 + .../controllers/page_controller_test.exs | 8 + recognition_VAD/test/support/conn_case.ex | 37 + recognition_VAD/test/test_helper.exs | 1 + 49 files changed, 2682 insertions(+) create mode 100644 recognition_VAD/.formatter.exs create mode 100644 recognition_VAD/.gitignore create mode 100644 recognition_VAD/README.md create mode 100644 recognition_VAD/assets/css/app.css create mode 100644 recognition_VAD/assets/js/app.js create mode 100644 recognition_VAD/assets/js/stt_recorder.js create mode 100644 recognition_VAD/assets/tailwind.config.js create mode 100644 recognition_VAD/assets/vendor/topbar.js create mode 100644 recognition_VAD/config/config.exs create mode 100644 recognition_VAD/config/dev.exs create mode 100644 recognition_VAD/config/prod.exs create mode 100644 recognition_VAD/config/runtime.exs create mode 100644 recognition_VAD/config/test.exs create mode 100644 recognition_VAD/lib/recognition_VAD.ex create mode 100644 recognition_VAD/lib/recognition_VAD/application.ex create mode 100644 recognition_VAD/lib/recognition_VAD/audio_processor.ex create mode 100644 recognition_VAD/lib/recognition_VAD/mailer.ex create mode 100644 recognition_VAD/lib/recognition_VAD/wav_writer.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/channels/control_channel.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/channels/data_channel.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/channels/user_socket.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/components/core_components.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/components/layouts.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/components/layouts/app.html.heex create mode 100644 recognition_VAD/lib/recognition_VAD_web/components/layouts/root.html.heex create mode 100644 recognition_VAD/lib/recognition_VAD_web/controllers/error_html.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/controllers/error_json.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/controllers/page_controller.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/controllers/page_html.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/controllers/page_html/home.html.heex create mode 100644 recognition_VAD/lib/recognition_VAD_web/endpoint.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/gettext.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/live/stt/test_with_channel.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/router.ex create mode 100644 recognition_VAD/lib/recognition_VAD_web/telemetry.ex create mode 100644 recognition_VAD/mix.exs create mode 100644 recognition_VAD/mix.lock create mode 100644 recognition_VAD/priv/gettext/en/LC_MESSAGES/errors.po create mode 100644 recognition_VAD/priv/gettext/errors.pot create mode 100644 recognition_VAD/priv/static/favicon.ico create mode 100644 recognition_VAD/priv/static/images/logo.svg create mode 100644 recognition_VAD/priv/static/robots.txt create mode 100644 recognition_VAD/recording_1750275490.wav create mode 100644 recognition_VAD/test/recognition_VAD_web/controllers/error_html_test.exs create mode 100644 recognition_VAD/test/recognition_VAD_web/controllers/error_json_test.exs create mode 100644 recognition_VAD/test/recognition_VAD_web/controllers/page_controller_test.exs create mode 100644 recognition_VAD/test/support/conn_case.ex create mode 100644 recognition_VAD/test/test_helper.exs diff --git a/recognition_VAD/.formatter.exs b/recognition_VAD/.formatter.exs new file mode 100644 index 00000000..e945e12b --- /dev/null +++ b/recognition_VAD/.formatter.exs @@ -0,0 +1,5 @@ +[ + import_deps: [:phoenix], + plugins: [Phoenix.LiveView.HTMLFormatter], + inputs: ["*.{heex,ex,exs}", "{config,lib,test}/**/*.{heex,ex,exs}"] +] diff --git a/recognition_VAD/.gitignore b/recognition_VAD/.gitignore new file mode 100644 index 00000000..f75e0e2e --- /dev/null +++ b/recognition_VAD/.gitignore @@ -0,0 +1,37 @@ +# The directory Mix will write compiled artifacts to. +/_build/ + +# If you run "mix test --cover", coverage assets end up here. +/cover/ + +# The directory Mix downloads your dependencies sources to. +/deps/ + +# Where 3rd-party dependencies like ExDoc output generated docs. +/doc/ + +# Ignore .fetch files in case you like to edit your project deps locally. +/.fetch + +# If the VM crashes, it generates a dump, let's ignore it too. +erl_crash.dump + +# Also ignore archive artifacts (built via "mix archive.build"). +*.ez + +# Temporary files, for example, from tests. +/tmp/ + +# Ignore package tarball (built via "mix hex.build"). +recognition_VAD-*.tar + +# Ignore assets that are produced by build tools. +/priv/static/assets/ + +# Ignore digested assets cache. +/priv/static/cache_manifest.json + +# In case you use Node.js/npm, you want to ignore these. +npm-debug.log +/assets/node_modules/ + diff --git a/recognition_VAD/README.md b/recognition_VAD/README.md new file mode 100644 index 00000000..2e3443b6 --- /dev/null +++ b/recognition_VAD/README.md @@ -0,0 +1,18 @@ +# Recognition_VAD + +To start your Phoenix server: + + * Run `mix setup` to install and setup dependencies + * Start Phoenix endpoint with `mix phx.server` or inside IEx with `iex -S mix phx.server` + +Now you can visit [`localhost:4000`](http://localhost:4000) from your browser. + +Ready to run in production? Please [check our deployment guides](https://hexdocs.pm/phoenix/deployment.html). + +## Learn more + + * Official website: https://www.phoenixframework.org/ + * Guides: https://hexdocs.pm/phoenix/overview.html + * Docs: https://hexdocs.pm/phoenix + * Forum: https://elixirforum.com/c/phoenix-forum + * Source: https://github.com/phoenixframework/phoenix diff --git a/recognition_VAD/assets/css/app.css b/recognition_VAD/assets/css/app.css new file mode 100644 index 00000000..d67ce14d --- /dev/null +++ b/recognition_VAD/assets/css/app.css @@ -0,0 +1,86 @@ +@import "tailwindcss/base"; +@import "tailwindcss/components"; +@import "tailwindcss/utilities"; + +/* This file is for your main application CSS */ + body { + background-color: #f4f4f9; + color: #333; + font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; + display: flex; + align-items: center; + justify-content: center; + height: 100vh; + margin: 0; + } + #container { + display: flex; + flex-direction: column; + align-items: center; + width: 100%; + max-width: 700px; + padding: 20px; + box-sizing: border-box; + gap: 20px; /* Add more vertical space between items */ + height: 90%; /* Fixed height to prevent layout shift */ + } + #status { + color: #0056b3; + font-size: 20px; + text-align: center; + } + #transcriptionContainer { + height: 90px; /* Fixed height for approximately 3 lines of text */ + overflow-y: auto; + width: 100%; + padding: 10px; + box-sizing: border-box; + background-color: #f9f9f9; + border: 1px solid #ddd; + border-radius: 5px; + } + #transcription { + font-size: 18px; + line-height: 1.6; + color: #333; + word-wrap: break-word; + } + #fullTextContainer { + height: 150px; /* Fixed height to prevent layout shift */ + overflow-y: auto; + width: 100%; + padding: 10px; + box-sizing: border-box; + background-color: #f9f9f9; + border: 1px solid #ddd; + border-radius: 5px; + } + #fullText { + color: #4CAF50; + font-size: 18px; + font-weight: 600; + word-wrap: break-word; + } + .last-word { + color: #007bff; + font-weight: 600; + } + button { + padding: 12px 24px; + font-size: 16px; + cursor: pointer; + border: none; + border-radius: 5px; + margin: 5px; + transition: background-color 0.3s ease; + color: #fff; + background-color: #0056b3; + box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1); + } + button:hover { + background-color: #007bff; + } + button:disabled { + background-color: #cccccc; + cursor: not-allowed; + } \ No newline at end of file diff --git a/recognition_VAD/assets/js/app.js b/recognition_VAD/assets/js/app.js new file mode 100644 index 00000000..ce20ef7b --- /dev/null +++ b/recognition_VAD/assets/js/app.js @@ -0,0 +1,45 @@ +// If you want to use Phoenix channels, run `mix help phx.gen.channel` +// to get started and then uncomment the line below. +// import "./user_socket.js" + +// You can include dependencies in two ways. +// +// The simplest option is to put them in assets/vendor and +// import them using relative paths: +// +// import "../vendor/some-package.js" +// +// Alternatively, you can `npm install some-package --prefix assets` and import +// them using a path starting with the package name: +// +// import "some-package" +// + +// Include phoenix_html to handle method=PUT/DELETE in forms and buttons. +import "phoenix_html" +// Establish Phoenix Socket and LiveView configuration. +import {Socket} from "phoenix" +import {LiveSocket} from "phoenix_live_view" +import topbar from "../vendor/topbar" +import SttRecorder from "./stt_recorder.js"; + +let liveSocket = new LiveSocket("/live", Socket, { + hooks: { SttRecorder }, + params: { _csrf_token: csrfToken } +}); + + +// Show progress bar on live navigation and form submits +topbar.config({barColors: {0: "#29d"}, shadowColor: "rgba(0, 0, 0, .3)"}) +window.addEventListener("phx:page-loading-start", _info => topbar.show(300)) +window.addEventListener("phx:page-loading-stop", _info => topbar.hide()) + +// connect if there are any LiveViews on the page +liveSocket.connect() + +// expose liveSocket on window for web console debug logs and latency simulation: +// >> liveSocket.enableDebug() +// >> liveSocket.enableLatencySim(1000) // enabled for duration of browser session +// >> liveSocket.disableLatencySim() +window.liveSocket = liveSocket + diff --git a/recognition_VAD/assets/js/stt_recorder.js b/recognition_VAD/assets/js/stt_recorder.js new file mode 100644 index 00000000..4f3a3ba5 --- /dev/null +++ b/recognition_VAD/assets/js/stt_recorder.js @@ -0,0 +1,119 @@ +// assets/js/stt_recorder.js + +let SttRecorder = { + mounted() { + const statusDiv = document.getElementById("status"); + const transcriptionDiv = document.getElementById("transcription"); + const fullTextDiv = document.getElementById("fullText"); + const startButton = document.getElementById("startButton"); + const stopButton = document.getElementById("stopButton"); + + const controlURL = "ws://127.0.0.1:8011"; + const dataURL = "ws://127.0.0.1:8012"; + let dataSocket; + let audioContext; + let mediaStream; + let mediaProcessor; + + // define startRecording and stopRecording here, or attach to this + window.startRecording = async function () { + try { + startButton.disabled = true; + stopButton.disabled = false; + statusDiv.textContent = "Recording..."; + transcriptionDiv.textContent = ""; + fullTextDiv.textContent = ""; + + audioContext = new AudioContext(); + mediaStream = await navigator.mediaDevices.getUserMedia({ audio: true }); + const input = audioContext.createMediaStreamSource(mediaStream); + + mediaProcessor = audioContext.createScriptProcessor(1024, 1, 1); + mediaProcessor.onaudioprocess = (event) => { + const audioData = event.inputBuffer.getChannelData(0); + sendAudioChunk(audioData, audioContext.sampleRate); + }; + + input.connect(mediaProcessor); + mediaProcessor.connect(audioContext.destination); + + connectToDataSocket(); + } catch (error) { + console.error("Error accessing microphone:", error); + statusDiv.textContent = "Error accessing microphone."; + stopRecording(); + } + }; + + window.stopRecording = function () { + if (mediaProcessor && audioContext) { + mediaProcessor.disconnect(); + audioContext.close(); + } + + if (mediaStream) { + mediaStream.getTracks().forEach((track) => track.stop()); + } + + if (dataSocket) { + dataSocket.close(); + } + + startButton.disabled = false; + stopButton.disabled = true; + statusDiv.textContent = "Stopped recording."; + }; + + function connectToDataSocket() { + dataSocket = new WebSocket(dataURL); + + dataSocket.onopen = () => { + statusDiv.textContent = "Connected to STT server."; + }; + + dataSocket.onmessage = (event) => { + try { + const message = JSON.parse(event.data); + if (message.type === "realtime") { + let words = message.text.split(" "); + let lastWord = words.pop(); + transcriptionDiv.innerHTML = `${words.join(" ")} ${lastWord}`; + } else if (message.type === "fullSentence") { + fullTextDiv.innerHTML += message.text + " "; + transcriptionDiv.innerHTML = message.text; + } + } catch (e) { + console.error("Error parsing message:", e); + } + }; + + dataSocket.onerror = (error) => { + console.error("WebSocket error:", error); + statusDiv.textContent = "Error connecting to the STT server."; + }; + } + + function sendAudioChunk(audioData, sampleRate) { + if (dataSocket && dataSocket.readyState === WebSocket.OPEN) { + const float32Array = new Float32Array(audioData); + const pcm16Data = new Int16Array(float32Array.length); + for (let i = 0; i < float32Array.length; i++) { + pcm16Data[i] = Math.max(-1, Math.min(1, float32Array[i])) * 0x7fff; + } + + const metadata = JSON.stringify({ sampleRate }); + const metadataLength = new Uint32Array([metadata.length]); + const metadataBuffer = new TextEncoder().encode(metadata); + + const message = new Uint8Array(metadataLength.byteLength + metadataBuffer.byteLength + pcm16Data.byteLength); + message.set(new Uint8Array(metadataLength.buffer), 0); + message.set(metadataBuffer, metadataLength.byteLength); + message.set(new Uint8Array(pcm16Data.buffer), metadataLength.byteLength + metadataBuffer.byteLength); + + dataSocket.send(message); + } + } + }, +}; + +export default SttRecorder; diff --git a/recognition_VAD/assets/tailwind.config.js b/recognition_VAD/assets/tailwind.config.js new file mode 100644 index 00000000..77a889a1 --- /dev/null +++ b/recognition_VAD/assets/tailwind.config.js @@ -0,0 +1,74 @@ +// See the Tailwind configuration guide for advanced usage +// https://tailwindcss.com/docs/configuration + +const plugin = require("tailwindcss/plugin") +const fs = require("fs") +const path = require("path") + +module.exports = { + content: [ + "./js/**/*.js", + "../lib/recognition_VAD_web.ex", + "../lib/recognition_VAD_web/**/*.*ex" + ], + theme: { + extend: { + colors: { + brand: "#FD4F00", + } + }, + }, + plugins: [ + require("@tailwindcss/forms"), + // Allows prefixing tailwind classes with LiveView classes to add rules + // only when LiveView classes are applied, for example: + // + //
+ // + plugin(({addVariant}) => addVariant("phx-click-loading", [".phx-click-loading&", ".phx-click-loading &"])), + plugin(({addVariant}) => addVariant("phx-submit-loading", [".phx-submit-loading&", ".phx-submit-loading &"])), + plugin(({addVariant}) => addVariant("phx-change-loading", [".phx-change-loading&", ".phx-change-loading &"])), + + // Embeds Heroicons (https://heroicons.com) into your app.css bundle + // See your `CoreComponents.icon/1` for more information. + // + plugin(function({matchComponents, theme}) { + let iconsDir = path.join(__dirname, "../deps/heroicons/optimized") + let values = {} + let icons = [ + ["", "/24/outline"], + ["-solid", "/24/solid"], + ["-mini", "/20/solid"], + ["-micro", "/16/solid"] + ] + icons.forEach(([suffix, dir]) => { + fs.readdirSync(path.join(iconsDir, dir)).forEach(file => { + let name = path.basename(file, ".svg") + suffix + values[name] = {name, fullPath: path.join(iconsDir, dir, file)} + }) + }) + matchComponents({ + "hero": ({name, fullPath}) => { + let content = fs.readFileSync(fullPath).toString().replace(/\r?\n|\r/g, "") + let size = theme("spacing.6") + if (name.endsWith("-mini")) { + size = theme("spacing.5") + } else if (name.endsWith("-micro")) { + size = theme("spacing.4") + } + return { + [`--hero-${name}`]: `url('data:image/svg+xml;utf8,${content}')`, + "-webkit-mask": `var(--hero-${name})`, + "mask": `var(--hero-${name})`, + "mask-repeat": "no-repeat", + "background-color": "currentColor", + "vertical-align": "middle", + "display": "inline-block", + "width": size, + "height": size + } + } + }, {values}) + }) + ] +} diff --git a/recognition_VAD/assets/vendor/topbar.js b/recognition_VAD/assets/vendor/topbar.js new file mode 100644 index 00000000..41957274 --- /dev/null +++ b/recognition_VAD/assets/vendor/topbar.js @@ -0,0 +1,165 @@ +/** + * @license MIT + * topbar 2.0.0, 2023-02-04 + * https://buunguyen.github.io/topbar + * Copyright (c) 2021 Buu Nguyen + */ +(function (window, document) { + "use strict"; + + // https://gist.github.com/paulirish/1579671 + (function () { + var lastTime = 0; + var vendors = ["ms", "moz", "webkit", "o"]; + for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { + window.requestAnimationFrame = + window[vendors[x] + "RequestAnimationFrame"]; + window.cancelAnimationFrame = + window[vendors[x] + "CancelAnimationFrame"] || + window[vendors[x] + "CancelRequestAnimationFrame"]; + } + if (!window.requestAnimationFrame) + window.requestAnimationFrame = function (callback, element) { + var currTime = new Date().getTime(); + var timeToCall = Math.max(0, 16 - (currTime - lastTime)); + var id = window.setTimeout(function () { + callback(currTime + timeToCall); + }, timeToCall); + lastTime = currTime + timeToCall; + return id; + }; + if (!window.cancelAnimationFrame) + window.cancelAnimationFrame = function (id) { + clearTimeout(id); + }; + })(); + + var canvas, + currentProgress, + showing, + progressTimerId = null, + fadeTimerId = null, + delayTimerId = null, + addEvent = function (elem, type, handler) { + if (elem.addEventListener) elem.addEventListener(type, handler, false); + else if (elem.attachEvent) elem.attachEvent("on" + type, handler); + else elem["on" + type] = handler; + }, + options = { + autoRun: true, + barThickness: 3, + barColors: { + 0: "rgba(26, 188, 156, .9)", + ".25": "rgba(52, 152, 219, .9)", + ".50": "rgba(241, 196, 15, .9)", + ".75": "rgba(230, 126, 34, .9)", + "1.0": "rgba(211, 84, 0, .9)", + }, + shadowBlur: 10, + shadowColor: "rgba(0, 0, 0, .6)", + className: null, + }, + repaint = function () { + canvas.width = window.innerWidth; + canvas.height = options.barThickness * 5; // need space for shadow + + var ctx = canvas.getContext("2d"); + ctx.shadowBlur = options.shadowBlur; + ctx.shadowColor = options.shadowColor; + + var lineGradient = ctx.createLinearGradient(0, 0, canvas.width, 0); + for (var stop in options.barColors) + lineGradient.addColorStop(stop, options.barColors[stop]); + ctx.lineWidth = options.barThickness; + ctx.beginPath(); + ctx.moveTo(0, options.barThickness / 2); + ctx.lineTo( + Math.ceil(currentProgress * canvas.width), + options.barThickness / 2 + ); + ctx.strokeStyle = lineGradient; + ctx.stroke(); + }, + createCanvas = function () { + canvas = document.createElement("canvas"); + var style = canvas.style; + style.position = "fixed"; + style.top = style.left = style.right = style.margin = style.padding = 0; + style.zIndex = 100001; + style.display = "none"; + if (options.className) canvas.classList.add(options.className); + document.body.appendChild(canvas); + addEvent(window, "resize", repaint); + }, + topbar = { + config: function (opts) { + for (var key in opts) + if (options.hasOwnProperty(key)) options[key] = opts[key]; + }, + show: function (delay) { + if (showing) return; + if (delay) { + if (delayTimerId) return; + delayTimerId = setTimeout(() => topbar.show(), delay); + } else { + showing = true; + if (fadeTimerId !== null) window.cancelAnimationFrame(fadeTimerId); + if (!canvas) createCanvas(); + canvas.style.opacity = 1; + canvas.style.display = "block"; + topbar.progress(0); + if (options.autoRun) { + (function loop() { + progressTimerId = window.requestAnimationFrame(loop); + topbar.progress( + "+" + 0.05 * Math.pow(1 - Math.sqrt(currentProgress), 2) + ); + })(); + } + } + }, + progress: function (to) { + if (typeof to === "undefined") return currentProgress; + if (typeof to === "string") { + to = + (to.indexOf("+") >= 0 || to.indexOf("-") >= 0 + ? currentProgress + : 0) + parseFloat(to); + } + currentProgress = to > 1 ? 1 : to; + repaint(); + return currentProgress; + }, + hide: function () { + clearTimeout(delayTimerId); + delayTimerId = null; + if (!showing) return; + showing = false; + if (progressTimerId != null) { + window.cancelAnimationFrame(progressTimerId); + progressTimerId = null; + } + (function loop() { + if (topbar.progress("+.1") >= 1) { + canvas.style.opacity -= 0.05; + if (canvas.style.opacity <= 0.05) { + canvas.style.display = "none"; + fadeTimerId = null; + return; + } + } + fadeTimerId = window.requestAnimationFrame(loop); + })(); + }, + }; + + if (typeof module === "object" && typeof module.exports === "object") { + module.exports = topbar; + } else if (typeof define === "function" && define.amd) { + define(function () { + return topbar; + }); + } else { + this.topbar = topbar; + } +}.call(this, window, document)); diff --git a/recognition_VAD/config/config.exs b/recognition_VAD/config/config.exs new file mode 100644 index 00000000..3eee2063 --- /dev/null +++ b/recognition_VAD/config/config.exs @@ -0,0 +1,65 @@ +# This file is responsible for configuring your application +# and its dependencies with the aid of the Config module. +# +# This configuration file is loaded before any dependency and +# is restricted to this project. + +# General application configuration +import Config + +config :recognition_VAD, + generators: [timestamp_type: :utc_datetime] + +# Configures the endpoint +config :recognition_VAD, Recognition_VADWeb.Endpoint, + url: [host: "localhost"], + adapter: Bandit.PhoenixAdapter, + render_errors: [ + formats: [html: Recognition_VADWeb.ErrorHTML, json: Recognition_VADWeb.ErrorJSON], + layout: false + ], + pubsub_server: Recognition_VAD.PubSub, + live_view: [signing_salt: "MLX284g+"] + +# Configures the mailer +# +# By default it uses the "Local" adapter which stores the emails +# locally. You can see the emails in your browser, at "/dev/mailbox". +# +# For production it's recommended to configure a different adapter +# at the `config/runtime.exs`. +config :recognition_VAD, Recognition_VAD.Mailer, adapter: Swoosh.Adapters.Local + +# Configure esbuild (the version is required) +config :esbuild, + version: "0.17.11", + recognition_VAD: [ + args: + ~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/fonts/* --external:/images/*), + cd: Path.expand("../assets", __DIR__), + env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)} + ] + +# Configure tailwind (the version is required) +config :tailwind, + version: "3.4.3", + recognition_VAD: [ + args: ~w( + --config=tailwind.config.js + --input=css/app.css + --output=../priv/static/assets/app.css + ), + cd: Path.expand("../assets", __DIR__) + ] + +# Configures Elixir's Logger +config :logger, :console, + format: "$time $metadata[$level] $message\n", + metadata: [:request_id] + +# Use Jason for JSON parsing in Phoenix +config :phoenix, :json_library, Jason + +# Import environment specific config. This must remain at the bottom +# of this file so it overrides the configuration defined above. +import_config "#{config_env()}.exs" diff --git a/recognition_VAD/config/dev.exs b/recognition_VAD/config/dev.exs new file mode 100644 index 00000000..4510846b --- /dev/null +++ b/recognition_VAD/config/dev.exs @@ -0,0 +1,75 @@ +import Config + +# For development, we disable any cache and enable +# debugging and code reloading. +# +# The watchers configuration can be used to run external +# watchers to your application. For example, we can use it +# to bundle .js and .css sources. +config :recognition_VAD, Recognition_VADWeb.Endpoint, + # Binding to loopback ipv4 address prevents access from other machines. + # Change to `ip: {0, 0, 0, 0}` to allow access from other machines. + http: [ip: {127, 0, 0, 1}, port: 4000], + check_origin: false, + code_reloader: true, + debug_errors: true, + secret_key_base: "Vr5UJCuEhKED1UfRZzpZUzgYNeaqg6D1FYHlWKW7k5xq+g14Lh3qXov2BXJzBloD", + watchers: [ + esbuild: {Esbuild, :install_and_run, [:recognition_VAD, ~w(--sourcemap=inline --watch)]}, + tailwind: {Tailwind, :install_and_run, [:recognition_VAD, ~w(--watch)]} + ] + +# ## SSL Support +# +# In order to use HTTPS in development, a self-signed +# certificate can be generated by running the following +# Mix task: +# +# mix phx.gen.cert +# +# Run `mix help phx.gen.cert` for more information. +# +# The `http:` config above can be replaced with: +# +# https: [ +# port: 4001, +# cipher_suite: :strong, +# keyfile: "priv/cert/selfsigned_key.pem", +# certfile: "priv/cert/selfsigned.pem" +# ], +# +# If desired, both `http:` and `https:` keys can be +# configured to run both http and https servers on +# different ports. + +# Watch static and templates for browser reloading. +config :recognition_VAD, Recognition_VADWeb.Endpoint, + live_reload: [ + patterns: [ + ~r"priv/static/(?!uploads/).*(js|css|png|jpeg|jpg|gif|svg)$", + ~r"priv/gettext/.*(po)$", + ~r"lib/recognition_VAD_web/(controllers|live|components)/.*(ex|heex)$" + ] + ] + +# Enable dev routes for dashboard and mailbox +config :recognition_VAD, dev_routes: true + +# Do not include metadata nor timestamps in development logs +config :logger, :console, format: "[$level] $message\n" + +# Set a higher stacktrace during development. Avoid configuring such +# in production as building large stacktraces may be expensive. +config :phoenix, :stacktrace_depth, 20 + +# Initialize plugs at runtime for faster development compilation +config :phoenix, :plug_init_mode, :runtime + +config :phoenix_live_view, + # Include HEEx debug annotations as HTML comments in rendered markup + debug_heex_annotations: true, + # Enable helpful, but potentially expensive runtime checks + enable_expensive_runtime_checks: true + +# Disable swoosh api client as it is only required for production adapters. +config :swoosh, :api_client, false diff --git a/recognition_VAD/config/prod.exs b/recognition_VAD/config/prod.exs new file mode 100644 index 00000000..e318b931 --- /dev/null +++ b/recognition_VAD/config/prod.exs @@ -0,0 +1,21 @@ +import Config + +# Note we also include the path to a cache manifest +# containing the digested version of static files. This +# manifest is generated by the `mix assets.deploy` task, +# which you should run after static files are built and +# before starting your production server. +config :recognition_VAD, Recognition_VADWeb.Endpoint, + cache_static_manifest: "priv/static/cache_manifest.json" + +# Configures Swoosh API Client +config :swoosh, api_client: Swoosh.ApiClient.Finch, finch_name: Recognition_VAD.Finch + +# Disable Swoosh Local Memory Storage +config :swoosh, local: false + +# Do not print debug messages in production +config :logger, level: :info + +# Runtime production configuration, including reading +# of environment variables, is done on config/runtime.exs. diff --git a/recognition_VAD/config/runtime.exs b/recognition_VAD/config/runtime.exs new file mode 100644 index 00000000..46b65cb1 --- /dev/null +++ b/recognition_VAD/config/runtime.exs @@ -0,0 +1,102 @@ +import Config + +# config/runtime.exs is executed for all environments, including +# during releases. It is executed after compilation and before the +# system starts, so it is typically used to load production configuration +# and secrets from environment variables or elsewhere. Do not define +# any compile-time configuration in here, as it won't be applied. +# The block below contains prod specific runtime configuration. + +# ## Using releases +# +# If you use `mix release`, you need to explicitly enable the server +# by passing the PHX_SERVER=true when you start it: +# +# PHX_SERVER=true bin/recognition_VAD start +# +# Alternatively, you can use `mix phx.gen.release` to generate a `bin/server` +# script that automatically sets the env var above. +if System.get_env("PHX_SERVER") do + config :recognition_VAD, Recognition_VADWeb.Endpoint, server: true +end + +if config_env() == :prod do + # The secret key base is used to sign/encrypt cookies and other secrets. + # A default value is used in config/dev.exs and config/test.exs but you + # want to use a different value for prod and you most likely don't want + # to check this value into version control, so we use an environment + # variable instead. + secret_key_base = + System.get_env("SECRET_KEY_BASE") || + raise """ + environment variable SECRET_KEY_BASE is missing. + You can generate one by calling: mix phx.gen.secret + """ + + host = System.get_env("PHX_HOST") || "example.com" + port = String.to_integer(System.get_env("PORT") || "4000") + + config :recognition_VAD, :dns_cluster_query, System.get_env("DNS_CLUSTER_QUERY") + + config :recognition_VAD, Recognition_VADWeb.Endpoint, + url: [host: host, port: 443, scheme: "https"], + http: [ + # Enable IPv6 and bind on all interfaces. + # Set it to {0, 0, 0, 0, 0, 0, 0, 1} for local network only access. + # See the documentation on https://hexdocs.pm/bandit/Bandit.html#t:options/0 + # for details about using IPv6 vs IPv4 and loopback vs public addresses. + ip: {0, 0, 0, 0, 0, 0, 0, 0}, + port: port + ], + secret_key_base: secret_key_base + + # ## SSL Support + # + # To get SSL working, you will need to add the `https` key + # to your endpoint configuration: + # + # config :recognition_VAD, Recognition_VADWeb.Endpoint, + # https: [ + # ..., + # port: 443, + # cipher_suite: :strong, + # keyfile: System.get_env("SOME_APP_SSL_KEY_PATH"), + # certfile: System.get_env("SOME_APP_SSL_CERT_PATH") + # ] + # + # The `cipher_suite` is set to `:strong` to support only the + # latest and more secure SSL ciphers. This means old browsers + # and clients may not be supported. You can set it to + # `:compatible` for wider support. + # + # `:keyfile` and `:certfile` expect an absolute path to the key + # and cert in disk or a relative path inside priv, for example + # "priv/ssl/server.key". For all supported SSL configuration + # options, see https://hexdocs.pm/plug/Plug.SSL.html#configure/1 + # + # We also recommend setting `force_ssl` in your config/prod.exs, + # ensuring no data is ever sent via http, always redirecting to https: + # + # config :recognition_VAD, Recognition_VADWeb.Endpoint, + # force_ssl: [hsts: true] + # + # Check `Plug.SSL` for all available options in `force_ssl`. + + # ## Configuring the mailer + # + # In production you need to configure the mailer to use a different adapter. + # Also, you may need to configure the Swoosh API client of your choice if you + # are not using SMTP. Here is an example of the configuration: + # + # config :recognition_VAD, Recognition_VAD.Mailer, + # adapter: Swoosh.Adapters.Mailgun, + # api_key: System.get_env("MAILGUN_API_KEY"), + # domain: System.get_env("MAILGUN_DOMAIN") + # + # For this example you need include a HTTP client required by Swoosh API client. + # Swoosh supports Hackney and Finch out of the box: + # + # config :swoosh, :api_client, Swoosh.ApiClient.Hackney + # + # See https://hexdocs.pm/swoosh/Swoosh.html#module-installation for details. +end diff --git a/recognition_VAD/config/test.exs b/recognition_VAD/config/test.exs new file mode 100644 index 00000000..2bb67337 --- /dev/null +++ b/recognition_VAD/config/test.exs @@ -0,0 +1,24 @@ +import Config + +# We don't run a server during test. If one is required, +# you can enable the server option below. +config :recognition_VAD, Recognition_VADWeb.Endpoint, + http: [ip: {127, 0, 0, 1}, port: 4002], + secret_key_base: "1f885tm3bNhDN7TED39kLx5WBNqvhjzjw6MD7vn8+taXmArC3gcbzaRM0mUli50v", + server: false + +# In test we don't send emails +config :recognition_VAD, Recognition_VAD.Mailer, adapter: Swoosh.Adapters.Test + +# Disable swoosh api client as it is only required for production adapters +config :swoosh, :api_client, false + +# Print only warnings and errors during test +config :logger, level: :warning + +# Initialize plugs at runtime for faster test compilation +config :phoenix, :plug_init_mode, :runtime + +# Enable helpful, but potentially expensive runtime checks +config :phoenix_live_view, + enable_expensive_runtime_checks: true diff --git a/recognition_VAD/lib/recognition_VAD.ex b/recognition_VAD/lib/recognition_VAD.ex new file mode 100644 index 00000000..0f513733 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD.ex @@ -0,0 +1,9 @@ +defmodule Recognition_VAD do + @moduledoc """ + Recognition_VAD keeps the contexts that define your domain + and business logic. + + Contexts are also responsible for managing your data, regardless + if it comes from the database, an external API or others. + """ +end diff --git a/recognition_VAD/lib/recognition_VAD/application.ex b/recognition_VAD/lib/recognition_VAD/application.ex new file mode 100644 index 00000000..7c802ea4 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD/application.ex @@ -0,0 +1,36 @@ +defmodule Recognition_VAD.Application do + # See https://hexdocs.pm/elixir/Application.html + # for more information on OTP Applications + @moduledoc false + + use Application + + @impl true + def start(_type, _args) do + children = [ + Recognition_VADWeb.Telemetry, + {DNSCluster, query: Application.get_env(:recognition_VAD, :dns_cluster_query) || :ignore}, + {Phoenix.PubSub, name: Recognition_VAD.PubSub}, + Recognition_VAD.AudioProcessor, + # Start the Finch HTTP client for sending emails + {Finch, name: Recognition_VAD.Finch}, + # Start a worker by calling: Recognition_VAD.Worker.start_link(arg) + # {Recognition_VAD.Worker, arg}, + # Start to serve requests, typically the last entry + Recognition_VADWeb.Endpoint + ] + + # See https://hexdocs.pm/elixir/Supervisor.html + # for other strategies and supported options + opts = [strategy: :one_for_one, name: Recognition_VAD.Supervisor] + Supervisor.start_link(children, opts) + end + + # Tell Phoenix to update the endpoint configuration + # whenever the application is updated. + @impl true + def config_change(changed, _new, removed) do + Recognition_VADWeb.Endpoint.config_change(changed, removed) + :ok + end +end diff --git a/recognition_VAD/lib/recognition_VAD/audio_processor.ex b/recognition_VAD/lib/recognition_VAD/audio_processor.ex new file mode 100644 index 00000000..ae4e42ca --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD/audio_processor.ex @@ -0,0 +1,32 @@ +defmodule Recognition_VAD.AudioProcessor do + use GenServer + require Logger + + def start_link(_opts) do + GenServer.start_link(__MODULE__, %{}, name: __MODULE__) + end + + def init(_) do + {:ok, %{buffer: [], sample_rate: 0}} + end + + def handle_cast({:chunk, binary_audio, sample_rate}, state) do + # 👇 Guardamos el chunk en el buffer + new_buffer = [binary_audio | state.buffer] |> Enum.take(100) # máximo 100 chunks + + Logger.info("🟡 Recibido chunk de #{byte_size(binary_audio)} bytes a #{sample_rate} Hz") + + {:noreply, %{state | buffer: new_buffer, sample_rate: sample_rate}} + end + + def handle_cast(:save_wav, state) do + timestamp = DateTime.utc_now() |> DateTime.to_unix() + filename = "recording_#{timestamp}.wav" + + Recognition_VAD.WavWriter.write_pcm_chunks_to_wav(state.buffer, state.sample_rate, filename) + Logger.info("💾 Guardado archivo: #{filename}") + {:noreply, state} + end + + +end diff --git a/recognition_VAD/lib/recognition_VAD/mailer.ex b/recognition_VAD/lib/recognition_VAD/mailer.ex new file mode 100644 index 00000000..b428d007 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD/mailer.ex @@ -0,0 +1,3 @@ +defmodule Recognition_VAD.Mailer do + use Swoosh.Mailer, otp_app: :recognition_VAD +end diff --git a/recognition_VAD/lib/recognition_VAD/wav_writer.ex b/recognition_VAD/lib/recognition_VAD/wav_writer.ex new file mode 100644 index 00000000..dd61a6bc --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD/wav_writer.ex @@ -0,0 +1,29 @@ +defmodule Recognition_VAD.WavWriter do + def write_pcm_chunks_to_wav(chunks, sample_rate, path) do + data = IO.iodata_to_binary(Enum.reverse(chunks)) + + num_channels = 1 + bits_per_sample = 16 + byte_rate = sample_rate * num_channels * div(bits_per_sample, 8) + block_align = div(bits_per_sample * num_channels, 8) + + header = + << + "RIFF", + 36 + byte_size(data)::little-size(32), + "WAVE", + "fmt ", + 16::little-size(32), + 1::little-size(16), + num_channels::little-size(16), + sample_rate::little-size(32), + byte_rate::little-size(32), + block_align::little-size(16), + bits_per_sample::little-size(16), + "data", + byte_size(data)::little-size(32) + >> + + File.write!(path, header <> data) + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web.ex b/recognition_VAD/lib/recognition_VAD_web.ex new file mode 100644 index 00000000..0e65231a --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web.ex @@ -0,0 +1,116 @@ +defmodule Recognition_VADWeb do + @moduledoc """ + The entrypoint for defining your web interface, such + as controllers, components, channels, and so on. + + This can be used in your application as: + + use Recognition_VADWeb, :controller + use Recognition_VADWeb, :html + + The definitions below will be executed for every controller, + component, etc, so keep them short and clean, focused + on imports, uses and aliases. + + Do NOT define functions inside the quoted expressions + below. Instead, define additional modules and import + those modules here. + """ + + def static_paths, do: ~w(assets fonts images favicon.ico robots.txt) + + def router do + quote do + use Phoenix.Router, helpers: false + + # Import common connection and controller functions to use in pipelines + import Plug.Conn + import Phoenix.Controller + import Phoenix.LiveView.Router + end + end + + def channel do + quote do + use Phoenix.Channel + end + end + + def controller do + quote do + use Phoenix.Controller, + formats: [:html, :json], + layouts: [html: Recognition_VADWeb.Layouts] + + use Gettext, backend: Recognition_VADWeb.Gettext + + import Plug.Conn + + unquote(verified_routes()) + end + end + + def live_view do + quote do + use Phoenix.LiveView, + layout: {Recognition_VADWeb.Layouts, :app} + + unquote(html_helpers()) + end + end + + def live_component do + quote do + use Phoenix.LiveComponent + + unquote(html_helpers()) + end + end + + def html do + quote do + use Phoenix.Component + + # Import convenience functions from controllers + import Phoenix.Controller, + only: [get_csrf_token: 0, view_module: 1, view_template: 1] + + # Include general helpers for rendering HTML + unquote(html_helpers()) + end + end + + defp html_helpers do + quote do + # Translation + use Gettext, backend: Recognition_VADWeb.Gettext + + # HTML escaping functionality + import Phoenix.HTML + # Core UI components + import Recognition_VADWeb.CoreComponents + + # Shortcut for generating JS commands + alias Phoenix.LiveView.JS + + # Routes generation with the ~p sigil + unquote(verified_routes()) + end + end + + def verified_routes do + quote do + use Phoenix.VerifiedRoutes, + endpoint: Recognition_VADWeb.Endpoint, + router: Recognition_VADWeb.Router, + statics: Recognition_VADWeb.static_paths() + end + end + + @doc """ + When used, dispatch to the appropriate controller/live_view/etc. + """ + defmacro __using__(which) when is_atom(which) do + apply(__MODULE__, which, []) + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/channels/control_channel.ex b/recognition_VAD/lib/recognition_VAD_web/channels/control_channel.ex new file mode 100644 index 00000000..7edaf9de --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/channels/control_channel.ex @@ -0,0 +1,17 @@ +defmodule Recognition_VADWeb.ControlChannel do + use Phoenix.Channel + + def join("control:lobby", _payload, socket) do + {:ok, socket} + end + + def handle_in("set_parameter", %{"parameter" => param, "value" => value}, socket) do + GenServer.cast(Recognition_VAD.Transcriber, {:set_param, param, value}) + {:reply, {:ok, %{message: "Parameter updated"}}, socket} + end + + def handle_in("call_method", %{"method" => method}, socket) do + GenServer.cast(Recognition_VAD.Transcriber, {:call_method, method}) + {:reply, {:ok, %{message: "Method called"}}, socket} + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/channels/data_channel.ex b/recognition_VAD/lib/recognition_VAD_web/channels/data_channel.ex new file mode 100644 index 00000000..ac87dfff --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/channels/data_channel.ex @@ -0,0 +1,35 @@ +defmodule Recognition_VADWeb.DataChannel do + use Phoenix.Channel + + def join("data:lobby", _params, socket) do + Phoenix.PubSub.subscribe(Recognition_VAD.PubSub, "audio_output") + {:ok, socket} + end + + def handle_info({:broadcast_audio, msg}, socket) do + push(socket, "transcription", Jason.decode!(msg)) + {:noreply, socket} + end + + # Recibe audio codificado en base64 (para transporte seguro) + def handle_in("audio_chunk", %{"data" => base64_chunk, "sample_rate" => sample_rate}, socket) do + case Base.decode64(base64_chunk) do + {:ok, binary_audio} -> + GenServer.cast(Recognition_VAD.AudioProcessor, {:chunk, binary_audio, sample_rate}) + {:noreply, socket} + + :error -> + IO.puts("⚠️ Error al decodificar base64") + {:reply, {:error, %{reason: "Invalid base64 audio"}}, socket} + end + end + + def handle_in("save_audio", _params, socket) do + GenServer.cast(Recognition_VAD.AudioProcessor, :save_wav) + {:noreply, socket} + end + + def handle_in(_unknown, _payload, socket) do + {:noreply, socket} + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/channels/user_socket.ex b/recognition_VAD/lib/recognition_VAD_web/channels/user_socket.ex new file mode 100644 index 00000000..f68d7e08 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/channels/user_socket.ex @@ -0,0 +1,9 @@ +defmodule Recognition_VADWeb.UserSocket do + use Phoenix.Socket + + channel "control:*", Recognition_VADWeb.ControlChanel + channel "data:*", Recognition_VADWeb.DataChannel + + def connect(_params, socket, _connect_info), do: {:ok, socket} + def id(_socket), do: nil +end diff --git a/recognition_VAD/lib/recognition_VAD_web/components/core_components.ex b/recognition_VAD/lib/recognition_VAD_web/components/core_components.ex new file mode 100644 index 00000000..466e7872 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/components/core_components.ex @@ -0,0 +1,676 @@ +defmodule Recognition_VADWeb.CoreComponents do + @moduledoc """ + Provides core UI components. + + At first glance, this module may seem daunting, but its goal is to provide + core building blocks for your application, such as modals, tables, and + forms. The components consist mostly of markup and are well-documented + with doc strings and declarative assigns. You may customize and style + them in any way you want, based on your application growth and needs. + + The default components use Tailwind CSS, a utility-first CSS framework. + See the [Tailwind CSS documentation](https://tailwindcss.com) to learn + how to customize them or feel free to swap in another framework altogether. + + Icons are provided by [heroicons](https://heroicons.com). See `icon/1` for usage. + """ + use Phoenix.Component + use Gettext, backend: Recognition_VADWeb.Gettext + + alias Phoenix.LiveView.JS + + @doc """ + Renders a modal. + + ## Examples + + <.modal id="confirm-modal"> + This is a modal. + + + JS commands may be passed to the `:on_cancel` to configure + the closing/cancel event, for example: + + <.modal id="confirm" on_cancel={JS.navigate(~p"/posts")}> + This is another modal. + + + """ + attr :id, :string, required: true + attr :show, :boolean, default: false + attr :on_cancel, JS, default: %JS{} + slot :inner_block, required: true + + def modal(assigns) do + ~H""" + + """ + end + + def input(%{type: "select"} = assigns) do + ~H""" +
+ <.label for={@id}>{@label} + + <.error :for={msg <- @errors}>{msg} +
+ """ + end + + def input(%{type: "textarea"} = assigns) do + ~H""" +
+ <.label for={@id}>{@label} + + <.error :for={msg <- @errors}>{msg} +
+ """ + end + + # All other inputs text, datetime-local, url, password, etc. are handled here... + def input(assigns) do + ~H""" +
+ <.label for={@id}>{@label} + + <.error :for={msg <- @errors}>{msg} +
+ """ + end + + @doc """ + Renders a label. + """ + attr :for, :string, default: nil + slot :inner_block, required: true + + def label(assigns) do + ~H""" + + """ + end + + @doc """ + Generates a generic error message. + """ + slot :inner_block, required: true + + def error(assigns) do + ~H""" +

+ <.icon name="hero-exclamation-circle-mini" class="mt-0.5 h-5 w-5 flex-none" /> + {render_slot(@inner_block)} +

+ """ + end + + @doc """ + Renders a header with title. + """ + attr :class, :string, default: nil + + slot :inner_block, required: true + slot :subtitle + slot :actions + + def header(assigns) do + ~H""" +
+
+

+ {render_slot(@inner_block)} +

+

+ {render_slot(@subtitle)} +

+
+
{render_slot(@actions)}
+
+ """ + end + + @doc ~S""" + Renders a table with generic styling. + + ## Examples + + <.table id="users" rows={@users}> + <:col :let={user} label="id">{user.id} + <:col :let={user} label="username">{user.username} + + """ + attr :id, :string, required: true + attr :rows, :list, required: true + attr :row_id, :any, default: nil, doc: "the function for generating the row id" + attr :row_click, :any, default: nil, doc: "the function for handling phx-click on each row" + + attr :row_item, :any, + default: &Function.identity/1, + doc: "the function for mapping each row before calling the :col and :action slots" + + slot :col, required: true do + attr :label, :string + end + + slot :action, doc: "the slot for showing user actions in the last table column" + + def table(assigns) do + assigns = + with %{rows: %Phoenix.LiveView.LiveStream{}} <- assigns do + assign(assigns, row_id: assigns.row_id || fn {id, _item} -> id end) + end + + ~H""" +
+ + + + + + + + + + + + + +
{col[:label]} + {gettext("Actions")} +
+
+ + + {render_slot(col, @row_item.(row))} + +
+
+
+ + + {render_slot(action, @row_item.(row))} + +
+
+
+ """ + end + + @doc """ + Renders a data list. + + ## Examples + + <.list> + <:item title="Title">{@post.title} + <:item title="Views">{@post.views} + + """ + slot :item, required: true do + attr :title, :string, required: true + end + + def list(assigns) do + ~H""" +
+
+
+
{item.title}
+
{render_slot(item)}
+
+
+
+ """ + end + + @doc """ + Renders a back navigation link. + + ## Examples + + <.back navigate={~p"/posts"}>Back to posts + """ + attr :navigate, :any, required: true + slot :inner_block, required: true + + def back(assigns) do + ~H""" +
+ <.link + navigate={@navigate} + class="text-sm font-semibold leading-6 text-zinc-900 hover:text-zinc-700" + > + <.icon name="hero-arrow-left-solid" class="h-3 w-3" /> + {render_slot(@inner_block)} + +
+ """ + end + + @doc """ + Renders a [Heroicon](https://heroicons.com). + + Heroicons come in three styles – outline, solid, and mini. + By default, the outline style is used, but solid and mini may + be applied by using the `-solid` and `-mini` suffix. + + You can customize the size and colors of the icons by setting + width, height, and background color classes. + + Icons are extracted from the `deps/heroicons` directory and bundled within + your compiled app.css by the plugin in your `assets/tailwind.config.js`. + + ## Examples + + <.icon name="hero-x-mark-solid" /> + <.icon name="hero-arrow-path" class="ml-1 w-3 h-3 animate-spin" /> + """ + attr :name, :string, required: true + attr :class, :string, default: nil + + def icon(%{name: "hero-" <> _} = assigns) do + ~H""" + + """ + end + + ## JS Commands + + def show(js \\ %JS{}, selector) do + JS.show(js, + to: selector, + time: 300, + transition: + {"transition-all transform ease-out duration-300", + "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95", + "opacity-100 translate-y-0 sm:scale-100"} + ) + end + + def hide(js \\ %JS{}, selector) do + JS.hide(js, + to: selector, + time: 200, + transition: + {"transition-all transform ease-in duration-200", + "opacity-100 translate-y-0 sm:scale-100", + "opacity-0 translate-y-4 sm:translate-y-0 sm:scale-95"} + ) + end + + def show_modal(js \\ %JS{}, id) when is_binary(id) do + js + |> JS.show(to: "##{id}") + |> JS.show( + to: "##{id}-bg", + time: 300, + transition: {"transition-all transform ease-out duration-300", "opacity-0", "opacity-100"} + ) + |> show("##{id}-container") + |> JS.add_class("overflow-hidden", to: "body") + |> JS.focus_first(to: "##{id}-content") + end + + def hide_modal(js \\ %JS{}, id) do + js + |> JS.hide( + to: "##{id}-bg", + transition: {"transition-all transform ease-in duration-200", "opacity-100", "opacity-0"} + ) + |> hide("##{id}-container") + |> JS.hide(to: "##{id}", transition: {"block", "block", "hidden"}) + |> JS.remove_class("overflow-hidden", to: "body") + |> JS.pop_focus() + end + + @doc """ + Translates an error message using gettext. + """ + def translate_error({msg, opts}) do + # When using gettext, we typically pass the strings we want + # to translate as a static argument: + # + # # Translate the number of files with plural rules + # dngettext("errors", "1 file", "%{count} files", count) + # + # However the error messages in our forms and APIs are generated + # dynamically, so we need to translate them by calling Gettext + # with our gettext backend as first argument. Translations are + # available in the errors.po file (as we use the "errors" domain). + if count = opts[:count] do + Gettext.dngettext(Recognition_VADWeb.Gettext, "errors", msg, msg, count, opts) + else + Gettext.dgettext(Recognition_VADWeb.Gettext, "errors", msg, opts) + end + end + + @doc """ + Translates the errors for a field from a keyword list of errors. + """ + def translate_errors(errors, field) when is_list(errors) do + for {^field, {msg, opts}} <- errors, do: translate_error({msg, opts}) + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/components/layouts.ex b/recognition_VAD/lib/recognition_VAD_web/components/layouts.ex new file mode 100644 index 00000000..5a20c1dd --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/components/layouts.ex @@ -0,0 +1,14 @@ +defmodule Recognition_VADWeb.Layouts do + @moduledoc """ + This module holds different layouts used by your application. + + See the `layouts` directory for all templates available. + The "root" layout is a skeleton rendered as part of the + application router. The "app" layout is set as the default + layout on both `use Recognition_VADWeb, :controller` and + `use Recognition_VADWeb, :live_view`. + """ + use Recognition_VADWeb, :html + + embed_templates "layouts/*" +end diff --git a/recognition_VAD/lib/recognition_VAD_web/components/layouts/app.html.heex b/recognition_VAD/lib/recognition_VAD_web/components/layouts/app.html.heex new file mode 100644 index 00000000..3b3b6074 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/components/layouts/app.html.heex @@ -0,0 +1,32 @@ +
+
+
+ + + +

+ v{Application.spec(:phoenix, :vsn)} +

+
+ +
+
+
+
+ <.flash_group flash={@flash} /> + {@inner_content} +
+
diff --git a/recognition_VAD/lib/recognition_VAD_web/components/layouts/root.html.heex b/recognition_VAD/lib/recognition_VAD_web/components/layouts/root.html.heex new file mode 100644 index 00000000..924e8543 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/components/layouts/root.html.heex @@ -0,0 +1,17 @@ + + + + + + + <.live_title default="Recognition_VAD" suffix=" · Phoenix Framework"> + {assigns[:page_title]} + + + + + + {@inner_content} + + diff --git a/recognition_VAD/lib/recognition_VAD_web/controllers/error_html.ex b/recognition_VAD/lib/recognition_VAD_web/controllers/error_html.ex new file mode 100644 index 00000000..d1c7cd92 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/controllers/error_html.ex @@ -0,0 +1,24 @@ +defmodule Recognition_VADWeb.ErrorHTML do + @moduledoc """ + This module is invoked by your endpoint in case of errors on HTML requests. + + See config/config.exs. + """ + use Recognition_VADWeb, :html + + # If you want to customize your error pages, + # uncomment the embed_templates/1 call below + # and add pages to the error directory: + # + # * lib/recognition_VAD_web/controllers/error_html/404.html.heex + # * lib/recognition_VAD_web/controllers/error_html/500.html.heex + # + # embed_templates "error_html/*" + + # The default is to render a plain text page based on + # the template name. For example, "404.html" becomes + # "Not Found". + def render(template, _assigns) do + Phoenix.Controller.status_message_from_template(template) + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/controllers/error_json.ex b/recognition_VAD/lib/recognition_VAD_web/controllers/error_json.ex new file mode 100644 index 00000000..ae457610 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/controllers/error_json.ex @@ -0,0 +1,21 @@ +defmodule Recognition_VADWeb.ErrorJSON do + @moduledoc """ + This module is invoked by your endpoint in case of errors on JSON requests. + + See config/config.exs. + """ + + # If you want to customize a particular status code, + # you may add your own clauses, such as: + # + # def render("500.json", _assigns) do + # %{errors: %{detail: "Internal Server Error"}} + # end + + # By default, Phoenix returns the status message from + # the template name. For example, "404.json" becomes + # "Not Found". + def render(template, _assigns) do + %{errors: %{detail: Phoenix.Controller.status_message_from_template(template)}} + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/controllers/page_controller.ex b/recognition_VAD/lib/recognition_VAD_web/controllers/page_controller.ex new file mode 100644 index 00000000..60aac57d --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/controllers/page_controller.ex @@ -0,0 +1,9 @@ +defmodule Recognition_VADWeb.PageController do + use Recognition_VADWeb, :controller + + def home(conn, _params) do + # The home page is often custom made, + # so skip the default app layout. + render(conn, :home, layout: false) + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/controllers/page_html.ex b/recognition_VAD/lib/recognition_VAD_web/controllers/page_html.ex new file mode 100644 index 00000000..250d48c9 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/controllers/page_html.ex @@ -0,0 +1,10 @@ +defmodule Recognition_VADWeb.PageHTML do + @moduledoc """ + This module contains pages rendered by PageController. + + See the `page_html` directory for all templates available. + """ + use Recognition_VADWeb, :html + + embed_templates "page_html/*" +end diff --git a/recognition_VAD/lib/recognition_VAD_web/controllers/page_html/home.html.heex b/recognition_VAD/lib/recognition_VAD_web/controllers/page_html/home.html.heex new file mode 100644 index 00000000..d72b03c2 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/controllers/page_html/home.html.heex @@ -0,0 +1,222 @@ +<.flash_group flash={@flash} /> + +
+
+ +

+ Phoenix Framework + + v{Application.spec(:phoenix, :vsn)} + +

+

+ Peace of mind from prototype to production. +

+

+ Build rich, interactive web applications quickly, with less code and fewer moving parts. Join our growing community of developers using Phoenix to craft APIs, HTML5 apps and more, for fun or at scale. +

+ +
+
diff --git a/recognition_VAD/lib/recognition_VAD_web/endpoint.ex b/recognition_VAD/lib/recognition_VAD_web/endpoint.ex new file mode 100644 index 00000000..4836eb43 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/endpoint.ex @@ -0,0 +1,56 @@ +defmodule Recognition_VADWeb.Endpoint do + use Phoenix.Endpoint, otp_app: :recognition_VAD + + # The session will be stored in the cookie and signed, + # this means its contents can be read but not tampered with. + # Set :encryption_salt if you would also like to encrypt it. + @session_options [ + store: :cookie, + key: "_recognition_VAD_key", + signing_salt: "4CbGb+fZ", + same_site: "Lax" + ] + + socket "/live", Phoenix.LiveView.Socket, + websocket: [connect_info: [session: @session_options]], + longpoll: [connect_info: [session: @session_options]] + + socket "/socket", Recognition_VADWeb.UserSocket, + websocket: true, + longpoll: false + + # Serve at "/" the static files from "priv/static" directory. + # + # You should set gzip to true if you are running phx.digest + # when deploying your static files in production. + plug Plug.Static, + at: "/", + from: :recognition_VAD, + gzip: false, + only: Recognition_VADWeb.static_paths() + + # Code reloading can be explicitly enabled under the + # :code_reloader configuration of your endpoint. + if code_reloading? do + socket "/phoenix/live_reload/socket", Phoenix.LiveReloader.Socket + plug Phoenix.LiveReloader + plug Phoenix.CodeReloader + end + + plug Phoenix.LiveDashboard.RequestLogger, + param_key: "request_logger", + cookie_key: "request_logger" + + plug Plug.RequestId + plug Plug.Telemetry, event_prefix: [:phoenix, :endpoint] + + plug Plug.Parsers, + parsers: [:urlencoded, :multipart, :json], + pass: ["*/*"], + json_decoder: Phoenix.json_library() + + plug Plug.MethodOverride + plug Plug.Head + plug Plug.Session, @session_options + plug Recognition_VADWeb.Router +end diff --git a/recognition_VAD/lib/recognition_VAD_web/gettext.ex b/recognition_VAD/lib/recognition_VAD_web/gettext.ex new file mode 100644 index 00000000..1f22aa79 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/gettext.ex @@ -0,0 +1,25 @@ +defmodule Recognition_VADWeb.Gettext do + @moduledoc """ + A module providing Internationalization with a gettext-based API. + + By using [Gettext](https://hexdocs.pm/gettext), your module compiles translations + that you can use in your application. To use this Gettext backend module, + call `use Gettext` and pass it as an option: + + use Gettext, backend: Recognition_VADWeb.Gettext + + # Simple translation + gettext("Here is the string to translate") + + # Plural translation + ngettext("Here is the string to translate", + "Here are the strings to translate", + 3) + + # Domain-based translation + dgettext("errors", "Here is the error message to translate") + + See the [Gettext Docs](https://hexdocs.pm/gettext) for detailed usage. + """ + use Gettext.Backend, otp_app: :recognition_VAD +end diff --git a/recognition_VAD/lib/recognition_VAD_web/live/stt/test_with_channel.ex b/recognition_VAD/lib/recognition_VAD_web/live/stt/test_with_channel.ex new file mode 100644 index 00000000..05e47615 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/live/stt/test_with_channel.ex @@ -0,0 +1,120 @@ +defmodule Recognition_VADWeb.Stt.TestWithChannel do + use Recognition_VADWeb, :live_view + + def mount(_params, _session, socket) do + {:ok, socket} + end + + def render(assigns) do + ~H""" +
+
Presioná "Start Recording"…
+ + + +
+
+
+ +
+
+
+ + + + +
+ """ + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/router.ex b/recognition_VAD/lib/recognition_VAD_web/router.ex new file mode 100644 index 00000000..dccfd77a --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/router.ex @@ -0,0 +1,45 @@ +defmodule Recognition_VADWeb.Router do + use Recognition_VADWeb, :router + + pipeline :browser do + plug :accepts, ["html"] + plug :fetch_session + plug :fetch_live_flash + plug :put_root_layout, html: {Recognition_VADWeb.Layouts, :root} + plug :protect_from_forgery + plug :put_secure_browser_headers + end + + pipeline :api do + plug :accepts, ["json"] + end + + scope "/", Recognition_VADWeb do + pipe_through :browser + + get "/", PageController, :home + live "/sttest", Stt.TestWithChannel + end + + # Other scopes may use custom stacks. + # scope "/api", Recognition_VADWeb do + # pipe_through :api + # end + + # Enable LiveDashboard and Swoosh mailbox preview in development + if Application.compile_env(:recognition_VAD, :dev_routes) do + # If you want to use the LiveDashboard in production, you should put + # it behind authentication and allow only admins to access it. + # If your application does not have an admins-only section yet, + # you can use Plug.BasicAuth to set up some basic authentication + # as long as you are also using SSL (which you should anyway). + import Phoenix.LiveDashboard.Router + + scope "/dev" do + pipe_through :browser + + live_dashboard "/dashboard", metrics: Recognition_VADWeb.Telemetry + forward "/mailbox", Plug.Swoosh.MailboxPreview + end + end +end diff --git a/recognition_VAD/lib/recognition_VAD_web/telemetry.ex b/recognition_VAD/lib/recognition_VAD_web/telemetry.ex new file mode 100644 index 00000000..e5b36482 --- /dev/null +++ b/recognition_VAD/lib/recognition_VAD_web/telemetry.ex @@ -0,0 +1,70 @@ +defmodule Recognition_VADWeb.Telemetry do + use Supervisor + import Telemetry.Metrics + + def start_link(arg) do + Supervisor.start_link(__MODULE__, arg, name: __MODULE__) + end + + @impl true + def init(_arg) do + children = [ + # Telemetry poller will execute the given period measurements + # every 10_000ms. Learn more here: https://hexdocs.pm/telemetry_metrics + {:telemetry_poller, measurements: periodic_measurements(), period: 10_000} + # Add reporters as children of your supervision tree. + # {Telemetry.Metrics.ConsoleReporter, metrics: metrics()} + ] + + Supervisor.init(children, strategy: :one_for_one) + end + + def metrics do + [ + # Phoenix Metrics + summary("phoenix.endpoint.start.system_time", + unit: {:native, :millisecond} + ), + summary("phoenix.endpoint.stop.duration", + unit: {:native, :millisecond} + ), + summary("phoenix.router_dispatch.start.system_time", + tags: [:route], + unit: {:native, :millisecond} + ), + summary("phoenix.router_dispatch.exception.duration", + tags: [:route], + unit: {:native, :millisecond} + ), + summary("phoenix.router_dispatch.stop.duration", + tags: [:route], + unit: {:native, :millisecond} + ), + summary("phoenix.socket_connected.duration", + unit: {:native, :millisecond} + ), + sum("phoenix.socket_drain.count"), + summary("phoenix.channel_joined.duration", + unit: {:native, :millisecond} + ), + summary("phoenix.channel_handled_in.duration", + tags: [:event], + unit: {:native, :millisecond} + ), + + # VM Metrics + summary("vm.memory.total", unit: {:byte, :kilobyte}), + summary("vm.total_run_queue_lengths.total"), + summary("vm.total_run_queue_lengths.cpu"), + summary("vm.total_run_queue_lengths.io") + ] + end + + defp periodic_measurements do + [ + # A module, function and arguments to be invoked periodically. + # This function must call :telemetry.execute/3 and a metric must be added above. + # {Recognition_VADWeb, :count_users, []} + ] + end +end diff --git a/recognition_VAD/mix.exs b/recognition_VAD/mix.exs new file mode 100644 index 00000000..55c01fe4 --- /dev/null +++ b/recognition_VAD/mix.exs @@ -0,0 +1,80 @@ +defmodule Recognition_VAD.MixProject do + use Mix.Project + + def project do + [ + app: :recognition_VAD, + version: "0.1.0", + elixir: "~> 1.14", + elixirc_paths: elixirc_paths(Mix.env()), + start_permanent: Mix.env() == :prod, + aliases: aliases(), + deps: deps() + ] + end + + # Configuration for the OTP application. + # + # Type `mix help compile.app` for more information. + def application do + [ + mod: {Recognition_VAD.Application, []}, + extra_applications: [:logger, :runtime_tools] + ] + end + + # Specifies which paths to compile per environment. + defp elixirc_paths(:test), do: ["lib", "test/support"] + defp elixirc_paths(_), do: ["lib"] + + # Specifies your project dependencies. + # + # Type `mix help deps` for examples and options. + defp deps do + [ + {:phoenix, "~> 1.7.21"}, + {:phoenix_html, "~> 4.1"}, + {:phoenix_live_reload, "~> 1.2", only: :dev}, + {:phoenix_live_view, "~> 1.0"}, + {:floki, ">= 0.30.0", only: :test}, + {:phoenix_live_dashboard, "~> 0.8.3"}, + {:esbuild, "~> 0.8", runtime: Mix.env() == :dev}, + {:tailwind, "~> 0.2.0", runtime: Mix.env() == :dev}, + {:heroicons, + github: "tailwindlabs/heroicons", + tag: "v2.1.1", + sparse: "optimized", + app: false, + compile: false, + depth: 1}, + {:swoosh, "~> 1.5"}, + {:finch, "~> 0.13"}, + {:telemetry_metrics, "~> 1.0"}, + {:telemetry_poller, "~> 1.0"}, + {:gettext, "~> 0.26"}, + {:jason, "~> 1.2"}, + {:dns_cluster, "~> 0.1.1"}, + {:bandit, "~> 1.5"} + + ] + end + + # Aliases are shortcuts or tasks specific to the current project. + # For example, to install project dependencies and perform other setup tasks, run: + # + # $ mix setup + # + # See the documentation for `Mix` for more info on aliases. + defp aliases do + [ + setup: ["deps.get", "assets.setup", "assets.build"], + "assets.setup": ["tailwind.install --if-missing", "esbuild.install --if-missing"], + "assets.build": ["tailwind recognition_VAD", "esbuild recognition_VAD"], + "assets.deploy": [ + "tailwind recognition_VAD --minify", + "esbuild recognition_VAD --minify", + "phx.digest" + ] + ] + end +end diff --git a/recognition_VAD/mix.lock b/recognition_VAD/mix.lock new file mode 100644 index 00000000..b6cdbbe3 --- /dev/null +++ b/recognition_VAD/mix.lock @@ -0,0 +1,35 @@ +%{ + "bandit": {:hex, :bandit, "1.7.0", "d1564f30553c97d3e25f9623144bb8df11f3787a26733f00b21699a128105c0c", [:mix], [{:hpax, "~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.18", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.0", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "3e2f7a98c7a11f48d9d8c037f7177cd39778e74d55c7af06fe6227c742a8168a"}, + "castore": {:hex, :castore, "1.0.14", "4582dd7d630b48cf5e1ca8d3d42494db51e406b7ba704e81fbd401866366896a", [:mix], [], "hexpm", "7bc1b65249d31701393edaaac18ec8398d8974d52c647b7904d01b964137b9f4"}, + "dns_cluster": {:hex, :dns_cluster, "0.1.3", "0bc20a2c88ed6cc494f2964075c359f8c2d00e1bf25518a6a6c7fd277c9b0c66", [:mix], [], "hexpm", "46cb7c4a1b3e52c7ad4cbe33ca5079fbde4840dedeafca2baf77996c2da1bc33"}, + "esbuild": {:hex, :esbuild, "0.10.0", "b0aa3388a1c23e727c5a3e7427c932d89ee791746b0081bbe56103e9ef3d291f", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "468489cda427b974a7cc9f03ace55368a83e1a7be12fba7e30969af78e5f8c70"}, + "expo": {:hex, :expo, "1.1.0", "f7b9ed7fb5745ebe1eeedf3d6f29226c5dd52897ac67c0f8af62a07e661e5c75", [:mix], [], "hexpm", "fbadf93f4700fb44c331362177bdca9eeb8097e8b0ef525c9cc501cb9917c960"}, + "file_system": {:hex, :file_system, "1.1.0", "08d232062284546c6c34426997dd7ef6ec9f8bbd090eb91780283c9016840e8f", [:mix], [], "hexpm", "bfcf81244f416871f2a2e15c1b515287faa5db9c6bcf290222206d120b3d43f6"}, + "finch": {:hex, :finch, "0.19.0", "c644641491ea854fc5c1bbaef36bfc764e3f08e7185e1f084e35e0672241b76d", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mint, "~> 1.6.2 or ~> 1.7", [hex: :mint, repo: "hexpm", optional: false]}, {:nimble_options, "~> 0.4 or ~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_pool, "~> 1.1", [hex: :nimble_pool, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "fc5324ce209125d1e2fa0fcd2634601c52a787aff1cd33ee833664a5af4ea2b6"}, + "floki": {:hex, :floki, "0.38.0", "62b642386fa3f2f90713f6e231da0fa3256e41ef1089f83b6ceac7a3fd3abf33", [:mix], [], "hexpm", "a5943ee91e93fb2d635b612caf5508e36d37548e84928463ef9dd986f0d1abd9"}, + "gettext": {:hex, :gettext, "0.26.2", "5978aa7b21fada6deabf1f6341ddba50bc69c999e812211903b169799208f2a8", [:mix], [{:expo, "~> 0.5.1 or ~> 1.0", [hex: :expo, repo: "hexpm", optional: false]}], "hexpm", "aa978504bcf76511efdc22d580ba08e2279caab1066b76bb9aa81c4a1e0a32a5"}, + "heroicons": {:git, "https://github.com/tailwindlabs/heroicons.git", "88ab3a0d790e6a47404cba02800a6b25d2afae50", [tag: "v2.1.1", sparse: "optimized", depth: 1]}, + "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, + "jason": {:hex, :jason, "1.4.4", "b9226785a9aa77b6857ca22832cffa5d5011a667207eb2a0ad56adb5db443b8a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "c5eb0cab91f094599f94d55bc63409236a8ec69a21a67814529e8d5f6cc90b3b"}, + "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"}, + "mint": {:hex, :mint, "1.7.1", "113fdb2b2f3b59e47c7955971854641c61f378549d73e829e1768de90fc1abf1", [:mix], [{:castore, "~> 0.1.0 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:hpax, "~> 0.1.1 or ~> 0.2.0 or ~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}], "hexpm", "fceba0a4d0f24301ddee3024ae116df1c3f4bb7a563a731f45fdfeb9d39a231b"}, + "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, + "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, + "phoenix": {:hex, :phoenix, "1.7.21", "14ca4f1071a5f65121217d6b57ac5712d1857e40a0833aff7a691b7870fc9a3b", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.7", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:websock_adapter, "~> 0.5.3", [hex: :websock_adapter, repo: "hexpm", optional: false]}], "hexpm", "336dce4f86cba56fed312a7d280bf2282c720abb6074bdb1b61ec8095bdd0bc9"}, + "phoenix_html": {:hex, :phoenix_html, "4.2.1", "35279e2a39140068fc03f8874408d58eef734e488fc142153f055c5454fd1c08", [:mix], [], "hexpm", "cff108100ae2715dd959ae8f2a8cef8e20b593f8dfd031c9cba92702cf23e053"}, + "phoenix_live_dashboard": {:hex, :phoenix_live_dashboard, "0.8.7", "405880012cb4b706f26dd1c6349125bfc903fb9e44d1ea668adaf4e04d4884b7", [:mix], [{:ecto, "~> 3.6.2 or ~> 3.7", [hex: :ecto, repo: "hexpm", optional: true]}, {:ecto_mysql_extras, "~> 0.5", [hex: :ecto_mysql_extras, repo: "hexpm", optional: true]}, {:ecto_psql_extras, "~> 0.7", [hex: :ecto_psql_extras, repo: "hexpm", optional: true]}, {:ecto_sqlite3_extras, "~> 1.1.7 or ~> 1.2.0", [hex: :ecto_sqlite3_extras, repo: "hexpm", optional: true]}, {:mime, "~> 1.6 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 0.19 or ~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: false]}, {:telemetry_metrics, "~> 0.6 or ~> 1.0", [hex: :telemetry_metrics, repo: "hexpm", optional: false]}], "hexpm", "3a8625cab39ec261d48a13b7468dc619c0ede099601b084e343968309bd4d7d7"}, + "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.6.0", "2791fac0e2776b640192308cc90c0dbcf67843ad51387ed4ecae2038263d708d", [:mix], [{:file_system, "~> 0.2.10 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "b3a1fa036d7eb2f956774eda7a7638cf5123f8f2175aca6d6420a7f95e598e1c"}, + "phoenix_live_view": {:hex, :phoenix_live_view, "1.0.17", "beeb16d83a7d3760f7ad463df94e83b087577665d2acc0bf2987cd7d9778068f", [:mix], [{:floki, "~> 0.36", [hex: :floki, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix, "~> 1.6.15 or ~> 1.7.0 or ~> 1.8.0-rc", [hex: :phoenix, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 3.3 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: false]}, {:phoenix_template, "~> 1.0", [hex: :phoenix_template, repo: "hexpm", optional: false]}, {:phoenix_view, "~> 2.0", [hex: :phoenix_view, repo: "hexpm", optional: true]}, {:plug, "~> 1.15", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "a4ca05c1eb6922c4d07a508a75bfa12c45e5f4d8f77ae83283465f02c53741e1"}, + "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.1.3", "3168d78ba41835aecad272d5e8cd51aa87a7ac9eb836eabc42f6e57538e3731d", [:mix], [], "hexpm", "bba06bc1dcfd8cb086759f0edc94a8ba2bc8896d5331a1e2c2902bf8e36ee502"}, + "phoenix_template": {:hex, :phoenix_template, "1.0.4", "e2092c132f3b5e5b2d49c96695342eb36d0ed514c5b252a77048d5969330d639", [:mix], [{:phoenix_html, "~> 2.14.2 or ~> 3.0 or ~> 4.0", [hex: :phoenix_html, repo: "hexpm", optional: true]}], "hexpm", "2c0c81f0e5c6753faf5cca2f229c9709919aba34fab866d3bc05060c9c444206"}, + "plug": {:hex, :plug, "1.18.0", "d78df36c41f7e798f2edf1f33e1727eae438e9dd5d809a9997c463a108244042", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "819f9e176d51e44dc38132e132fe0accaf6767eab7f0303431e404da8476cfa2"}, + "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, + "swoosh": {:hex, :swoosh, "1.19.2", "b2325aa7cd2bcd63ba023fa07a73dfc4f80660a592d40912975a879966ed9b7b", [:mix], [{:bandit, ">= 1.0.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:cowboy, "~> 1.1 or ~> 2.4", [hex: :cowboy, repo: "hexpm", optional: true]}, {:ex_aws, "~> 2.1", [hex: :ex_aws, repo: "hexpm", optional: true]}, {:finch, "~> 0.6", [hex: :finch, repo: "hexpm", optional: true]}, {:gen_smtp, "~> 0.13 or ~> 1.0", [hex: :gen_smtp, repo: "hexpm", optional: true]}, {:hackney, "~> 1.9", [hex: :hackney, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mail, "~> 0.2", [hex: :mail, repo: "hexpm", optional: true]}, {:mime, "~> 1.1 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:mua, "~> 0.2.3", [hex: :mua, repo: "hexpm", optional: true]}, {:multipart, "~> 0.4", [hex: :multipart, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:plug_cowboy, ">= 1.0.0", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:req, "~> 0.5.10 or ~> 0.6 or ~> 1.0", [hex: :req, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.2 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cab7ef7c2c94c68fe21d3da26f6b86db118fdf4e7024ccb5842a4972c1056837"}, + "tailwind": {:hex, :tailwind, "0.2.4", "5706ec47182d4e7045901302bf3a333e80f3d1af65c442ba9a9eed152fb26c2e", [:mix], [{:castore, ">= 0.0.0", [hex: :castore, repo: "hexpm", optional: false]}], "hexpm", "c6e4a82b8727bab593700c998a4d98cf3d8025678bfde059aed71d0000c3e463"}, + "telemetry": {:hex, :telemetry, "1.3.0", "fedebbae410d715cf8e7062c96a1ef32ec22e764197f70cda73d82778d61e7a2", [:rebar3], [], "hexpm", "7015fc8919dbe63764f4b4b87a95b7c0996bd539e0d499be6ec9d7f3875b79e6"}, + "telemetry_metrics": {:hex, :telemetry_metrics, "1.1.0", "5bd5f3b5637e0abea0426b947e3ce5dd304f8b3bc6617039e2b5a008adc02f8f", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e7b79e8ddfde70adb6db8a6623d1778ec66401f366e9a8f5dd0955c56bc8ce67"}, + "telemetry_poller": {:hex, :telemetry_poller, "1.2.0", "ba82e333215aed9dd2096f93bd1d13ae89d249f82760fcada0850ba33bac154b", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7216e21a6c326eb9aa44328028c34e9fd348fb53667ca837be59d0aa2a0156e8"}, + "thousand_island": {:hex, :thousand_island, "1.3.14", "ad45ebed2577b5437582bcc79c5eccd1e2a8c326abf6a3464ab6c06e2055a34a", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "d0d24a929d31cdd1d7903a4fe7f2409afeedff092d277be604966cd6aa4307ef"}, + "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, + "websock_adapter": {:hex, :websock_adapter, "0.5.8", "3b97dc94e407e2d1fc666b2fb9acf6be81a1798a2602294aac000260a7c4a47d", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "315b9a1865552212b5f35140ad194e67ce31af45bcee443d4ecb96b5fd3f3782"}, +} diff --git a/recognition_VAD/priv/gettext/en/LC_MESSAGES/errors.po b/recognition_VAD/priv/gettext/en/LC_MESSAGES/errors.po new file mode 100644 index 00000000..cdec3a11 --- /dev/null +++ b/recognition_VAD/priv/gettext/en/LC_MESSAGES/errors.po @@ -0,0 +1,11 @@ +## `msgid`s in this file come from POT (.pot) files. +## +## Do not add, change, or remove `msgid`s manually here as +## they're tied to the ones in the corresponding POT file +## (with the same domain). +## +## Use `mix gettext.extract --merge` or `mix gettext.merge` +## to merge POT files into PO files. +msgid "" +msgstr "" +"Language: en\n" diff --git a/recognition_VAD/priv/gettext/errors.pot b/recognition_VAD/priv/gettext/errors.pot new file mode 100644 index 00000000..d6f47fa8 --- /dev/null +++ b/recognition_VAD/priv/gettext/errors.pot @@ -0,0 +1,10 @@ +## This is a PO Template file. +## +## `msgid`s here are often extracted from source code. +## Add new translations manually only if they're dynamic +## translations that can't be statically extracted. +## +## Run `mix gettext.extract` to bring this file up to +## date. Leave `msgstr`s empty as changing them here has no +## effect: edit them in PO (`.po`) files instead. + diff --git a/recognition_VAD/priv/static/favicon.ico b/recognition_VAD/priv/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..7f372bfc21cdd8cb47585339d5fa4d9dd424402f GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=@t!V@Ar*{oFEH`~d50E!_s``s q?{G*w(7?#d#v@^nKnY_HKaYb01EZMZjMqTJ89ZJ6T-G@yGywoKK_h|y literal 0 HcmV?d00001 diff --git a/recognition_VAD/priv/static/images/logo.svg b/recognition_VAD/priv/static/images/logo.svg new file mode 100644 index 00000000..9f26baba --- /dev/null +++ b/recognition_VAD/priv/static/images/logo.svg @@ -0,0 +1,6 @@ + diff --git a/recognition_VAD/priv/static/robots.txt b/recognition_VAD/priv/static/robots.txt new file mode 100644 index 00000000..26e06b5f --- /dev/null +++ b/recognition_VAD/priv/static/robots.txt @@ -0,0 +1,5 @@ +# See https://www.robotstxt.org/robotstxt.html for documentation on how to use the robots.txt file +# +# To ban all spiders from the entire site uncomment the next two lines: +# User-agent: * +# Disallow: / diff --git a/recognition_VAD/recording_1750275490.wav b/recognition_VAD/recording_1750275490.wav new file mode 100644 index 0000000000000000000000000000000000000000..ae916b35e6ad7db9dca868cce99019db3095fd64 GIT binary patch literal 204844 zcmeFZgPR=L8#Y|7t~SP=U}A1Iwv&x*+s?+`*tTtLYi8CZ`7^Xu(4Cp%m{*@(B|KOh3P1QA!cOAz$pU}c+X2@ zH!>3$hs;7IBi)f^NDU+!5!8@sS2NX@>LvBKx<;L$j#ZnhmDL#4uKZHID%X{B%28#B zGG6JS)K=;#r4>b1WxIS=zASH-m&r@z8S*rFwA@i{EjN;rWLh@KnCzCaq$kp4>43Bx z+G1&fG(h@Gsw-8JVkJ!Sh(E+P;tlbrxI_F$93^%an~4?01W_x>k(|h*$eqa9$ePH) z$b!hk$e>7@NYzM%NQsCwLPQFL7s3oFC11=UelC@eTO8d_BGjUz$(mO}v3m z;#1+#$df$F1-NW3mt#3Um&JYJ-g0-jQ`~NDD|e9F$W7y>a|5_WTr;jNSC#vNi{da2 z<@{_e`tUStok+t`KdWOfMKo~_BIveB%KMOZE@hkt~hglgolNDhFgT&hns|}hW`jBhqYk~G$I@d<%K?m?uCwp_JoeY{8Z>d=wN7P zXj^DSXf@0?hIYU!>qEOj$3y!=2SP_ehhgb(XnSZ2JlhxA6j}?fZV0UlEe*{LEeib| znjD%Fnh+Wj8WI{B8W|c6&&K>-*Do|HG&(d9K5Yg3=U({a!|+YlLN`L0p{&q{kRgnO zjj(m4U>iG!M~3HzSBLk7&%qvLhJ`T2Ca_J|7Hmg$Fguss0>|JOdyDON&!s|1kfPOJ*~>QiOaij+kfBb|^w$P{D^ zvIjYiTt=QFS%?=2BLr$eW6+Xl6|^?`7upFOh)zPsqchPp=mvB%x(7XlUPbSsFVSD9 zALUR5HDk$Gd8`rE5$lhQ!{%W-u|3#6>@M~O`+gT%VlQ!?xJkSsJ`wMT&%_TRmk1CDiIOxK zPnLj*Aydg3WI3`7%$tzy$)02{atJvY+B|XrIh))_?jiS)m&lvsRq_>?O@1YRkUo;3 zq9_BEO8rTdg?TcSPF11WQlqG$R2Qlv)ro2Z>&H;Hsi)L+Y8$nPT1c&>PE-FDx$&ukELI(T8Bo zQTVnk^lExOJs!4i0?cR86X}6;3%U#4impRIyiPwa9l00j}D5ZoWJ)y z6OP5_-{!?+5<~CAGsoB&lYB1G<8cPkMdQsh}HdH%kP2f!b30FWY zWuYhvp#r3v^ujgroV-U~Aa{^+$Z6zYvISX>tVWh3MZ!)L5-*AC#BpLbv5A;KbR(J* zDTIkI6Jgws2k~q?AOD2k$6w;N@H6-Y{1CnluJbAQOnf#z79Wp~#=GL3@n(2+yarw# zuZS1JjkpEZ;VNdweqp(Ar#!~)VP~*IaNlglR$|kzQP^;-7uFK1g_XkMFfFFR7>q@8 z(YJ8tJwzX)_t6{ZQFK4L4V{gSg*FBqf_6h2p>@#eXa*XOGN=ZnQ9tqvkn}ck9XWw) zL^dP4U|In8d~2jBQVS^!c&mY?sA1Ki{-@qj�@^>FP9fl-diBwX|wgB_#{md*zgJ zK-r{BQwA$Nm5xdiz*e)OQ)JmI=gAM{OY(Vnzr00WEDx6l$zA2zauqpE*2+3rk(`oO z`Yv6UE=W71rP5rfuhdRzD>auIN|mKDQijAx1<>Dp7T<~=#DB$O;x2K9I6)jDwiN4& zDIzAS5qIQE3*&{cLRX=g z@F(=bB?Tj3t;z@aT)^2ofU(#3!~AA`JHL@%#4qM&@I&~ne0#nV-vRpZ=6ro%$?x&020pzES}8u<+^iyxGvmZTzxK?({VPAihB20Aah72*Rt+237(n=PY-zR(+lXz-R$>2usR}H&VB4}i*luhWXpPu< zY%{h2e0xV&*Msc^uQp-3vdv*_7g*Pw?FnrJJAoa|PG^_1O94Mmvq#wz>^1fw`o#soFTvo0Q72;5Ny1Y(4B|nq%<$#PTaY{+0E?oT+l^uYvmzCE_w!$fKY6ZAc z2C9?Pd4R8{)C=k(^{47mQ6v^Ak5osRAia@c$W&w*vK2XkoP&Gu4U&rp2!-lV8=8Qo zqh$bPd!tj(S?E%9E#T`R^fY=2eTIHR-KYk$V)0l>tQ=Mk>jLOH0b2;Y!$IsKb{>0# zeaG^!0EXbvcxk)>ULWs)55h;{bMZC!Mtl!`9)FJiz;kgY&f|I_m8e40C)yJIh#|x{ zVg|90*b05we&P~wg?J3;nn`?vc@_~N;z%o*PF5kylMTq`WFxXO*@x^;P9^^)r;sbj zHRM|I5P5_=3AlQf{6yMG2k9b1Btpee@l-TbiK-91YjdhIH3|CO$<#Dz9<`o2NF9cr z`4M%Gx=Vfe-D|rjH$?$bVzdtMF@yetu0~e{v}!@uqnpuvq1XSvs5JpFVG2D1rm28k z(_q>JSh0j&M=z&W0hX)*EIR~PvlW&$z?xNnZX4)5fLMnBbN0gW0(kcldNJVMGI|9) z6Ogb6-42kYJKc}&NH>M=s}A4W43MTSU5hS7r_#}|T~W{&z*HMe!ZvCEu~~|z{4iGl zuSGz59#B`HJg|%cHtFdUItlh99uQxIXBMac%E2c$q-y{YR{;zw1K-dZ_OC6p#&k>A z!xq1{qAP4gOS%zkK}|RU^`KRP$A+*qHQ>K8=!)<;8Gz(v>16nZB)~rgwugbO3jN+D z4vuFgl|{Xzp24ww5B13_s8>EwAK+-8qfSyMs7r9rQa#~Zwx{Y*6{w0-alp*tR1CBPN<(o_ zQ5BLu;VO7e-XX7$=g1S}E~va#lZ(i?P>0QhtELy(3a+Bc(3-&%2bG(aj1U6g>1X0S zRCpJNtHd#457c}!h-t(KqCL@_=tDFkY7y0mXaXg8{1+hWGyFP!89$8g##aHB_Qwa{ z9q<-_r*-fKcuhdl7~F=N@hChMPXSydaU4f+0pqajd>|2dov=3~P+lz$#%WfWxI=9u3Wi z5tsx0jJ`o10Tw@ib{EiiJ-PtyCN91kt5_zQDN&ZW20=-wdjLQ+pC%us#OZTPY(jjT9Gz+kI zDzJ$GQU|H5R9q@0rAUdAUJ`(7WC8ZR6|aex#Y^ILah14QoGXrpp0k743K&TSG^^-| z6hwYRJ^&J*iR_OoiA;)&j&zH3j5Lmvi=+YH4GM1I8*tw1z;{*y7S9(3L7&}Ns3?>c z(u9QHoR{OBd;y;W?IV8=@c0sclt0NI0z}@*ujUu>Q~4?UOqfRS1Np&xFK9jZ7JMtf zQ$_V0By_?qy}+VGx=@QxTj z@+e@-dYDvB0FL|%koh(Di2E0C`2u%<+Xk341+Zxdu;fl$9j-c80dU#MnE;z{PGMba zKKp;!@+bB+`yQtI>;v{HAl@lJyv^)7_8xl<@Ol}063}}!I|&sp#| zi=76`3*mp~v*Xx_@Y)i<+&%0**os^14fZ%u~3vnqhyjwgMQLf8Y+!} z>ut0&1sLph>9llD`XqgTsX($zyc8pslxxcE<^J*%d4arA-YM^qcLUyDgL?9voFj*1 zOraHnlA@GT{(y?Joze}e&+*DqWuI~!@b^Bj+;4!uMzy$FNv)%{Q~N^gx*qPL+n^AA zRNX4C(nuOo38{m$L;C(k;f2UTWF@iz?!+5#PyUDeKnjrn5<#p`Ggn3%qV3Va=me;! z*8!;d;EjRf_QxmT z3-J~BUi=dDS@-bw(6aF`G!fSj2H*{4i86r36^K$qMIwW!Of&}e+l=T847fSb5T11- zIsq5%P4po862pkWz&B<9FJ2DJV>z)3kb5~X6P{loz7h|KyYP4rc*z~&8Z3Pvz7rpT zGruOD!{c{&$5+60C*cEp&moGS*A)nqR0tgz4SjJ*vJzPn5WX2;{9tkHa&jwq zlspd1`6c<0d`EsKJ)}gElnKy15&Hg$R2`}%)e4x@7;55gbYBZtvI}tKHuVPZCz~n& zWLGE+V3ZB8v;7>5 zp}yD))y7i5kTK*aasb(bY)!Tydy`$sE@WSF5ILM2N{$1rzY?~1CsZWo$Ya0x{#o)G z`3Tx=@*;U2_GAZq#v*vvOwa}yyP`-_uDm8A~RR7#Sd3!0=pzmk2}s!~K5d zg`*ZE7}7vm$TVoh0ln(M7IX!bVH#lDYWT)GaD05E9*#>>*!o%20qQ0&QGtpEB<}|G z$}V8b|It3$q^YQBs~M|VsM)T$rg@>s(y$s;V_-@%RhddmZKeVf!w}4O&3VlNO>>O^ zYF&+30Fl0;G5Y{(-i>cjNlXz1=mprViF+e3qmF;ksV<_ zFM-mb0i7d>N~2PsB4a2K^pCsbDyZYilZAk|OQ8-l5O1JL9E#V%IqVtm&M|;;@t7O^ z3heSAT>pQg-GNIMM|CKQhLCLJ6LJmNfvf`>5L3Q zR>Ql#B3iT(+7Vp|pA)_n%Argt5IE_!j{GdS*=vqXJY*A~fE@iDUPC2NYRBkA_pmY^e z`@x-`sn&vfJ0EF+9z!W?EOsA5;hyXP74a&3Ilc&(czdW29Dw;9urRt0t&e^LbvYV2 zqjpwt^{g^XNmAa*YvmSlK)Na|kQzzpQV2NdGEjZfMG>%XS7b`0X@rVo38#fALI>a` zZ-7zG2X(d_Aj=Q#9(NMj|1jk?@I;=o0{*n%r$HZk3s`7zp(QYwL&9qTj}(v8jP#Do zjckitj64U{qC`w$NwJ>T6#CRoVn_JKe&Psmx;RH%A#MczvP#?lJ?*;R^Nr#rShE_o zYp%FdTqMpHmx#0AaRo5vf5hFOARYt7`iA&I{4Ux>QDmfIz;xOH)A?IkCG7+y@jmp$ zZ=`S1e^4LXkoH3VJX~ri*`yzU{_Q~9z8L8gkpRbQ3t9X`;J=%>+T16=rRwb4@Pu&5 zusd`TblDA|HK4wB3pET?4AlrV4|NKShjm9o=R*%c|NRznh4@f7B*5efxkK+l*Fgtf z4Z7{XP?eA-3?oESV1d>KSSRYUzj1^y9=3U>*w3f~Va z;f8>o_gO2~19b2(*N9)qzXVP>O1LTzkq(g)kzk}M9J%XaNNfY@|1F6FT&gXP0Cjbu zJOR)tQT`y!l%k}aqD~wg`3SngdQb(%abMUz?CWq3I1(E|Z9}$@81x2}V0@@?Xf|ls zzEHjJI^f+S*(|m*@Z8pbvBiZE!g(PR6ktt66wn@#Z~{9InEBao zgRlb>@FpQT^lxxnuw~E^d>gnJ*dCY-M`v1KcwkCkMqp-Obznw&w0 zw}GdD_kp6o&p<&y3Q)oF!Op?IgV%#%uytrR=;75ty$^=}f~qBvTgjRDNxYw53s>Td zh#HwDdc`qPj?_lJC6`j>DQ^|4+FLyVOqNFe00z4hxrF>gbf7OyM~|cL!K(Qas^pV^ zeRc4a_-DL4V3L>UMLr};1EX+JErEA^q>Y*?ntGb@ATgb!Ytv7uYSaqS0SLDbH{fHj zPiPbL2=p6o)uCz$l~sN!Zbee`Q1^}i9?hz)kYk7iSg{WsjeW-I0;3J%Rf#sxcQque z#5;TgUJ1X6wZQJ6rO_qGM>SntrKq4j<$!||fP0~W_y(%frcjyY!5w!VoS4(XS>dIS z568cLWO!s}ME5W@s72KUCpb3zm2$Ym+O3kG9(g^7vsGGk^dbu9BMpwZ{Y7h0d zM`^F_RT1!|{zICguh5p*bF3Bq2=4>v+8!-#`JWh0R5uAqmK0HD773e3ARgxxo2jrBC8M=;a2Ay+8|H3vBHH^maO_ z1@v;ur8~gKR4Gkv2l~Mjd9{29^n^R0D){AOrM@y%d8MSNW7KDA0x}kPfh3~~Q4E_5 zy5lN59(YGBsI+^7BQ~5yp}I|BjxtrXN41o0knXfDM;E29p#MuhRzFFu>Xu*z5gdJBC5ddxG}%CfMX zU$F+zCvGCzlj)#|Eu;U`9M^D~ddvuB4AY)TX5MMWYwW;K=2NH0{lqo=C3XS5jeJ)# z6H$47d#8J{8t$0Yc#=zu18ubnb&SfVl0X|A2fF7?+D)4^bu=?HyEXSTlBP7%f*H)LV(v34(@eWV zYtk*#sk-@kPCws38YdfZ(-u>#dAFIcbg@jew6TQEgUmZk`;4;;4fO%-ai){TM{OtT z5Lwt7v_2v$S%94yX`CoT4nwA4E9}J!kk7h61zcasmCndpm6hs3q(532j%pL&w;#d5 zy^C+co8aHDrr1{WG4en?t*n##Nr|FIxWzBw=CQNFQ$rhq=K^2+W`8%|Rd1^Im}k7F zji-rcg6D!q@O1R<^t!y=dh+UK4=6Oc;P+4{k{VJ8-^uewLu412TEchJ_3$HIbt<1n(n|hjo>10g)>$h_}^-J zH|WkIKoed_y(Yti5C0C=)+D5&nl0~;8i^l;3B1H^4R;L12J`)&eTlw>Ucs}=)6Ns^ z(R$)Me|koEZhNYFpLX1%M!R_DCFdAtV`oQa3ukNR9Oqi+e&<_fmNVjP z>Kf_V==$NZx;weoyKlG)-J~bQ)7Ue>v&eJZBY7How|N=gc;8E39sgm!E-*dd2+R(q zhu(&Eg(tE#Igz`;j}nT3_cB;40bbuBxtk&?DIbQ$`I&nrYonF$502(QH#_KP-7|RPi!YXk7z;apsqYZ zAJMF2Dr;r!HeH;4kiMe+iLREepSB|Nf^I_XB-~habci}ko-N)KaycnnCbS?>&0ovc z*1OTu%2U}>%G1a*&hyCA$(sm!vol}~oehuXN(x^h5e=sAW-Nad0*N5ywKxBUN;Rk68(H(;uLeP8WIzq;MaSKm9<-q@wsvTrDk>XDXf5mdFb9DfS9~Nqi>1Q@iQ<(2pHuifQL)Bibpte|1?p zQeRqMN^gf6v%9WPJ5(EHmNFExPE%F$9=r}8=>5$g{qU2#0gAnopJSj=vL^~=r+OUZ`V!MP0@AMRnSqoyYPCf_93&F zsmlnOkD8O34Vt-{>Y51s6TFu$pns&&2C;kYO`Zt&dO9iEWGJYJtiDOXxcLlfL zEx{8NK?B+i`$AGBz;PM{F2;0fCS*32!_s8P0Brc}bNoXshIQkqKJcFAR9A2`rh?OP z7~GLxP_3Ilq3T30g$zOgoucWWS+9Ah$=29FnW@i=WHvHqm`{wr7_@b?{j@{0vthrx zYNub4WB36BlIKl-0{)a18|)fo0;IN-!ENKniN^{Fp7X!YrI@QYN)t2_mb zWg{p`L&3?3q8xzQm*CjVBd3EZHjo?v>ey(|*am{GHUm_*t>E$f3+h$~5;Onv^qN98 zW)e6=Yp9FVSNJp+s9Y))1xXVtxKc7WU@~ZbZ>Y=EUg-a(K;EJrRhlYAX{jR6^0L7r z$^<1bpA3-vZ@sJ-yxs}U$Xw8V4uL!6h7`^J&V?3Q95`n>8U=st7xe(n(+X-dTsQIH zHeCbNZ6sL>RJ$Orbx)HQI(u zg0w~{ghK4+PH4N(ac4fBGMJcc7l_L3(d=k9s36KhF1<8vNa=dJnZIEzG z1^preo|lmSl*`MN;PH}JaK%KboxZ!dS2hrlZ%<*|^GTmp%X zYw~ySzRgNQrN6RJIS-0^wxUs!)j!l`kSgn?4g%e6AgE_;Kz*;SCa4w_QN2nIyzhdt z3$|~ZG6qz&zDjRp5cKd{LAk#QdL03ow6>tt?^RE$FI2yZLB(1D6vft%^y~q+&=Qtw z!J0(Gg1FSD>P^`1$!dEwQ7wXM^nfx}>7djC2TY@QpiVs_?~oV5RyP9QK2}C$7ie00 zA;;NIsvzOgM{%3jTZ|JwLDsHb#4hX->Vu{=lh^QjA$#El&BX}l`5cmgmBU{kci1VE z81e?M1s4Ygg7#7|XbsANkD$L?4_po$3>*!d3p@a&w(> zY!GZ3>=~R1YSduRwdMpT1m^{(g9fudco5nh&|>Zevx3>doS+mmhDwIIfEKnT^djU8 znZvci9mAu;8vr@3gmc3r__E7bX-*ixD=J(J9EEo^}7LOD3{PoRdM3CFrTG7Y(kRDi2YgKfbm zd>7sl9D;ddWzgZ5(%m#^OaXIWyHr;}|6bp~(Am(~kfX1p@1v`xeXeOuZzCV!uh7%# zSUFMr$**85gq;4X-p6j6YoUX*pDsL7a3=p}-sn7io+GzuUSZyY{M>?;MW5}9oqgTa zy_la1duMMreeS(Q62$4s;JU6|ffS9~Fopd1s2 z2+O#e;aZ_G!IpvZ{*C?@{@#J1!Hc0{>>KWaa9_-qMKuX)P7J1cYszR{y19loM&9(^ zJi_9(RI=)=uPq}ix6QcOXnJRusW$su!VZivf3F0%&(W zq!d(ob0DMk9L}!>Jo8fEpiP5p=yyzmH^Ns#UM`;a2T}l?!DAXkk@S0dzNRw6F~_v6 zfjf@YhxB6%`G$eUd&UZ;&8F8T)l}A8*Idn9&Ro`PGCNFfOeaj!O@EpSjC+i&jV{AM zLpy`cAnSAV&-6d_`M@=!40R064I>Tv4Id2g#xcf!jg+agX&3NJo4Jm8w0W6%o%yEu zoB6)^Kl3N^Ve?A!U~{zjk!g&{Y`SKgXiPWWH%v5CHU#wh^{w=T{()|$uCXpkSEPNf zy{SE<{YTqgo2YdF>hEEu0iXOI!na}C!Mp*qANZG1nHlucuz3%oEZG>TLSi4egt^8xZ2!K2cHPgaSn3ruJ{xdjm440Xd2@C8j!U#_4tfqPHZ zJk~@*4K$5;$^3+>s*iSyHmsej`=#rzSM_TRjf|LSx2d_=V?Jv+W!+>O88s$)TulGi zsd4k;$0iI;9Fw#*c~8oc)Lv<7+T`@h=~L66ra4pZrF2R@k$5D&N30OF)2cPsHT0aXf=x-RR%a-6X zBK@Tk$_L~zHlDCjZ|JVf-`ZxnC%WeP`*1zI($CZ9>gwsnYnwCQ=sMIiVh{ES2`Zx0 zRNNu3+ya&gZw__|RPDg;RaF=1%5h$GzH$C^{&H4!jdh)O)puWXCwjJe z0>G|jd3$)HymvjdJdfRN-6vfYTo0XHoSb8aqqak~f3fG;%R5Fmo;XH1%eiW~dwRNf z*ZVks^Wf9a-)wE(9Px=RIjH_Zci}1I3W}%8GFt5uZ9m-)*y`S(zqoYkbV<4?+J($Y z&1L#K}rPKr${S2}P zT?AbBIzECxz-z4nIig1NC%U`FshPw)VTwaFd==D(0lFi)82wRw4Z}0TIAdiKYA!VY zw4Alhvn`HV7~L~QjcE}3XRIc6Zp`xNW>KfC@67LwNA=CMhw012F?6poQ>@L)p>zH& zo*vFaMep)6a_?s?%>3sE`|Zfr$zRTVp8a{p=j1QM*Q9ULz8Cvx_(fzV=8n(5RH)b| zyNW#H{nX#rdMdkJ0?{40;ywiDi^1^u)^QY#&&TmyMfQb6H${I2)xZVEwI_8Ge9!sBbGWa|VpY)| zNCP!hNs}>&i-45|IheH^!Yzl)rk3TyYPc*rjJ?BFhIDC57*Dc87yw-JwfI8XEzeSx ztH+Rs=r>HlW64yiDqU3*&y>)X*Cpty8JZaXFts&LwrsUNwBoXDRxnGHQT@DbYlgboxV$qKyS(IB5rn3u)D9JyOU#6VIXgD zPRFeNnRkB7{J!N|i*IYcMSTx^Z}&5pc`<8$jwi25VShX7df*xAuO33VrGiyDs}vyL zu#d#wR5sm-nW^omqxGZotM#4qmvxM;x|Y@KrTb9?c?+M1`H>E)BtMe|i=1$d@5Ys9 zCxuUhjt4&lS_U5YoBCh*I{8@d3-4v`X76P0U~gsbQ_nO{eNU!)lsnn|+BMWw##Pak z=opwTQ+Gzc+_2HO)-=rA)6&)2 z$W}AT6#Y1QUCij%dU06%*ZAvDGxSetl$?;_O}UdgKdoJQrDD~J*Det*v8JRhqjg5- zjBv@CCF_(ZEH*B^AXQF&oH#uGR*W{Plckx_s=Gr^CWfG+l|y2HufrY<_VM@jws7}# zI_+nRJ{N8&+*bIpaB@*Q`#{GNXAgIgXS?t3z@*R_mK0LNRJe=!qrLGGhXE1NH zH+75k^$iaViN+GfOv5O{cj#Yg>&j?j7)&F9vT%%;hS$g9QBJ*}ES8r`OT_(=h|oY- z!c+W8j)$C6RrXDIPk0`T#;F;O0r&KBsBY+R&=#B(aQTP%3w$$t6@0kwwRekmrFWip zruV&ffbW&BkH1EsM6gk4UU(CGnInV=5kk5uPgd)p8L)K~Xftz4+fpwYR+}8=L~DYL zw|$D59sMF&i7pjWB}Nl-Cc1d^qA0(uvu&kypXFck6VpTEW5Z?rGTkEW0p^Ov0}T2E zq*`S1KIBLaKyt(Ydc{?$Kb@|*soB6R(N@=K^=Ss9F$&OWkmb776qOR)E@pUapSTh6 zjT4NCh9pnYjpUUnjZ^8g8)<#hb;Z^ci!T1C_|OsoI8Ww`9vQ5dX&{#%v4oBkXcWi!!IDO+tmHWx!TdnzOblu zQS+iTMT~vBeXZk}Gs?Zhqk5P4I|h4%>vD{c7r7xFQx+g9+5z8BWRWH50h)AX8RKPY zX?tkPYmYGzO;gQ5x`+ys5)s5Ru`Kj0vR9p>^pGn{4aC-w-oiHiUoOlJWw(Xj0}r|a ztcDNV3ycah3m5~p{N4SheS~k2cdy6oZs$Jc5}ZSvlyj%U{VXtX#YM*OAYcJ>E z91onAT`$}}Jp|~M9|OZf4EvJ1EW8w*vR(axKE%(E|IqQwMD0VJ)lkitVft?B2A*d- zP^n8=ewY`Tjpk9NbH*@6S%nxtnu4 z7tc>AXkPfBXqcm%i*=vyw(w^KmWATk9b7)|6ao=m{32}tzooU(0Mc&x@=W=sOZH2;v>%`Oa|hCXjfV61LXM2E-jwi6DY{h>Y6 zuE2EHzR%v%j@jQ7tuM+cj4GU0@H4-7{@T2P+}PYjIY~L!vlnLf&aR%_A^UK)K4)o8 zMy@%pQU3ITtA$PNe#a`;V9#9NyujMfYnJ1a#A-69Y)1xTsl*ykA2Cg#<{Z;XdrQEFKofQ2eYC=?O)PCD@>toASb1hSmVWs|)_K{{bRg8Ft zj#BSPs?dk~5}F(Ec>i#JcC0MwQ!qJiOAeQH^w;amQkg4$w*L9&&t*T8GOuM`|8*q` z%{iG{BR^blzG$jrkgJQQxep0k4vq|0;9m2PB!#Jx_CVJVq@bf#5Ii@5Vs)iMO=;e%kdQwt|atL%uj5Yv?=L)(z>J(Ni~yhCst0} zoNy)nYTVq|AJI`!4Xh>2tl@>O8ENKcLY!Qzj~W{qTCH!+nmwP z+m1tyfMbhugsX$Qwr7-A@U0J23%SEvxPC%+v4;Fh8GvM>ZSa-EW%3TSfYxjNh93Tg zW|<~lGlRB+(%6>#i)e^f#}ZK|T)~ZHjr2Y86x^)y+1><9;u^(717t5Ksdu(SmJKQV0F7zTeErh-7v!m z;{)i)-dmKf!E zGe{qyf#l;7P+%8>7An$yO(tW~b=9vkAf`U%^_F~Vg{XSbO=3F5){0AyHz!<6Xr6d2 z(VrNbWJ~fVzDqosI5n|DVzI=J340U%PN~{-6G{f#t#LAuZd4JH!7KxhERrc?ymUMQ=h)Tal~> zNy`8|Lvu!B1_eE$d8Qen`3U1MI#9>Rr^E()9kv$jg)~*ufT87z*)URQm2iqL!yn~J zadsGIHIE$wIqUyeh8qjny;3mth~wJ}M+H&n3}cD1A~x|)u`Jxpmm?!04xyf~A4Y$b z<_5Ey!jD1DKGd8dexPgHklkyv=;ayaDn(ys3w2uhDI=7)t6(=&XQx5%9Jd zsw!EZ*oyy&-vg#T2FBMOz}#3boF?uQyU26YXSz7E7OssthAqY{Q!&e5*3q^(QKO@4 z$M7*5WBswk;!4H&;m&Il`zxk(%>C#F(TAhTMqRTd+jdxMTR%g}$Op>S-`0?Ij;(Q2 zLUd8|=9u!a`LQ?SM#VpgM-%=`XqRA3SP}mw?nvzLnDWuHZJR6?ObZQW-6>5CY6^Y@ zsRF$11wWlF9{T0a^Co+axn?*!I40XI_J>6$ihM;a?04+<9lZ0U%j4efP4_Pf@WGDZ zoh-qR6ToE_&r6%-hRQ|7r&Lv&swyNp2PscLyL=?w5f4P332y=a9Y|m5=<9X&j2JM~O?{>LE?o{xV`*~J)PI(S{4tXAXUU@Egws~56Jnkdz za_*h31lI`XEk}LFBK!5CQbjWgKNd_bQ1X}Nx67}TUp2pP{*HXKU`Iip!YV~^_L7eN z&Py&F`jC8I?|?TrEgWQL@lOPcxIj7}Z&J3Y(~%Zv47L{wLOQKKJ{ZP$rr=kxCfGL^ z1Cj}2Jhp-s-b%Rv<1x-kHKcc-&8`ziLIz{5cnHQjR)aBTHD#xKQ0b>uM$%9feT5a` z0`ZVsPYtB2X*`-a456K>eX5PpHGo!2S4_ugKWO)ATLIqwWcD#*nMMpGAT%zG2&zgO z<`84j&eJl`r~j?5YWQjxX%vi;Ot(y*Ay>BE)YNpXScm%1L>w;GH_$PjiK8L2du zGKHyJ?eK@d1Yb{2Emuj$-$iuc(frkU&vTPS;lSk7`#coJl_ug_&_jFCb%;AD7Y-xJy)7uV-6`5sG`MI+(dweTMem9<_GJ55`-9(F?i9xXN5~QHtm4dY)^av< zBF;j`zm7SMMvg+LG1a0iMc)cb6rL`4o1c__F)uA|VeTKf9BkvLoW3~?bNc68&56lf zlRF^KlK(E>UGT2(Q&A#(S{YD=1y3p85kDJ<3oQ!2WZ!c|e4%hVa$KAWYWa1!g>n`! zuDQAp#>y{N&#PNuH0*ixpn6Ds0Hbs6!mm%bR26cGQ(*K!9NHDCP6m<#XR#O#1dQwMXzJk`QjuUI<(e>ob}4A{%vn7*-8+~v5s@dxAI#plNR<6p*4j%VZg#+{A5 z7jrCnNtD*s!*bq~XOMLX+6+w@swzdBKg1LdJfoJ|cev`i{ zWGH(3Kl&F043NLQ7djGd#1^oxxKsQ6&*9X6gfy<9!Y~&iqMII8* z!-go1_YLt@_dfL0^CWs4?rZLs z?l0~DC|+khg!is@GGsj*{$Sw0;P+4|wl}wc{~(kS+ezDHN{vH`q4Tjl_)KC3`4@Q3 zf73kOQ*%M{OT%kYnKVY#{D9ogc*vuA=_fGqd=88!><`(DgE0R63FPy;YIbTg%mRki zZqvr=cIz5JQYqDN!cYn{W68M0blrrT2bfowmzcMj51Lm&pS{yO3-sgu=H})^vjhXd z6;sfZXl`kqY<^<4S%z9%mQlbqUfb3~9ke)RZ|sP;G4aO}4khkLI+eUSrAaEAIxcNr z+TOI*X}?kjrLIX?l-xI|bmIH?QgLl#+5=LSG)smny2ng{ram>DsEL0^Mb#bqDf7~t{hcQBL_g^>V#h+9+3~J;+j#+4y{9%tDkL1HeP^4)gaSB({s~P(<|Uu zSK(Qnv70f^u)$E>kgva{U!b3&KcPRMpQ+!XzoP%8Z*I6{NHQ)q#+fdeikXL)H<|Oy zbu7&-Wi5YLDp^GHesi38tm%yLt>J_Ih3<*=95Y7q2d$82iQae-x*F-BT9lvCb#Y^4 zfY64Y#m!|$g;$351fK+o1^)3neC2$gvw7cmN_w8Vhq!;aR=aw-DA#T0LT3$Uz_H0u z$q@uMr-t2Rzg*O-=#QeWh5ZX9P~Ykle9Iq~-!#8rK9T=54?rd_Cr{2x%CDb4FaKM9 z&w~F7sudO$UMTw0{>Z+_(a?!Q{k+88)ln7?a8Ri zjQ$m)jWa`qWJ@fTG%oo{%Bxg;`s`wBiZ?8gSz>(2qLR@WWQHvxHN#%ATglla&J_Q* zSZaEu)V0YON&ORs#~qES7=6Ze-g3-T%y>di>P|9uHR+n8Fz(b2F7*p)28@L z#(G1MV4L8AKx=;u-(hd8x1(p8+wJ<~n(4}R?r=7B9(FK}ZT2?y??p*P8wAUjo-yxoZj;>j+z<@%`38W{8QvM9jPr~gOtNW=xuPY_>bLf_ z4YBRA-Lj?IYFam2By+B5oUw`l)eq2i(WFym!iZf{YshUyyHJ8pWzU7q1}6t}{)l&? zx2pHCXS=73SL++}tSo!t8@SbO_||yYpU1 z6sB-lFlz90*Z>UUQRpA|y_@5q#Bd+*g^z`M!AQSx>zMAg6(|2%(ff0{qVU&TM$@A8igU zK-9|DltD;3W+p0ATQsG0+YCOF)%w=9KAMg#j78%cCD4h_5cR~KJOFVbG@e%|=`xo3uFi=Jwp z&Uo_m@%hKhlTJ?@Pi)Wrc;52G>X!wthQ1-+K7aT9L)7QtUmf3xAzD&z=`NrGx76P<1dW_YYe}}I*(yi1i0%yFuzmm5?+nBsQd0=wQ~TY|m?d9kw8EyzVBk|$t{=1N?`)?gvD z0sOMcc61eF8QWr3NWWGf2uQMRqsG%iGy|DV+Ef_Xaa6y|KpFeOSdIgx52mnbg!#Jp zl=-4rHkY&b&BwrJeq)|$u4i6qRsmVtS!W#VtBJxifqU`$?F_*JIu=w(!g9m6DWhTDMuI}H+b zR>*e^gI_NCOl3f&vjoy$3*lFHJanR_jAkIzMNUmSCWo1=ZLe#lw;4Vf&KrlDzMATo zcbH3C4qMJzSj#x;F>8U9u~oONv+cKavsJOB*)CXHTa&ChYjJA@YeVY+t70u-+hD5^ z^*(BM^o*ERvF5l_apmLpfG$8JbV*o~a5jNTY?Rm}u~lNZL|bB+#I!^y!Iuz~*g0_# z+)q1_HYYDgIhxuoJyL9H2~)=NQWMJ*mQ5*Nxk65bFBMu>*jfHlxqW4Y(z8qbmGP#; znqtA!L&-xDZ^jix54A0{?_UbN#te?##U7`JW3G7yebW#lFv>I)*yi zx`w+|H{zM=nF~t522WqlSI-VluKNJ=v31t&YR98XF4c+2H?lNoim+;v!A1v z%ySux)TX8S$?pj<5#oe{IOQ9~YNyg{xcUM>My6}LX#dwnAa{aPJ?oxsj(V#jgxR2em3&Pa8ogp(WEo=G9{SqV;?uiyw5xkdeRVV zkdK+R;Agj)8k#H)r^Lj z^Ds59ocSbkUlxHg>5@72Gff5-h2ekT2VitpJ!KmA->7!kw>!A;Wu4IqVjhj^aJd$KR*^vhkBn~=LP zcMnt&FR|~ahgV0*eUt0X?UP5kr@7yD|b=r6hbY;B2giCeB1uB+3(c>Jj)3wd#6>mGyFl zxJ}6AY6PEQ>NMUL>GOJ1yp4U^&_hJ|u`Tw8gC)3%eE=PPoj~uvP0S~c2Mcm1KvCET zI>ndZykI1DHX8$lg7ZOvdd)e6SaF<$Nszjdn1zllnm$XHhhM)8{PyXZ9#BZX)4tIb z0R3zNSZ(Wctge%Okv>JAfZ1MWQx$VR%TnuDTSdFue$mm;x!C!{$+%pu60VxADAz~m z(uO$eI+JmOv_`M?*`8=Wg^A*E`)9j|+j5J;=-lA+IUBn!xGIHA3K`gUlN?-i?qYF&9yG=ADn#_%^>Fgj-GAg zO5&t?Nx3Ckv3u7+ZPs89Hoe90g zFa3H$3F8_}@Xnbm<~Xy-vcS^ATFI7Z+h||sDDOOi_pzJnw2KJo5OOJ`N@!we-LSo3 z>0$N5`-OK2Zyg>U{x|G<*u$_5VXMMUhg}JK6_yvK3vUuWBYb1{zMuKx^1Ji5iHeJ=7PTHv`Lf9J5%0qmhE5BKb1iq?brf<8v&Y$1 zShrhFo7b6!8{?r_xD8svOz6TKU+PJ^FjA2iP!o)FQboGC7c6UCQ7U$HW6ou7eMF|#m3S?IMaes1k}mXp<}%*|BzYP z3hJCzc_q)58_20rFX6}Q_k^F~G?;FGf=hxmq47NkiW(8P z&Q8a~>6?GCzq`M%{}BAq>D~nRsf&7j9v@ss4zCvb2ZOf|{O5LWh!;h?w}iK_x14u| z_m$V`Ywz0y>zn}c4Up)`_iOO@nA z_=X=UWpL8`g8Fs=ah~`HS94!7;XhSmf9eXQ!|eDxU6MJ>m_gyV3#HC@Fq~p^lXbsz zZS^1YJ>bVEXG}uBI@~nTG|V*ARM+&@ILcTUGvIhbb@(q1z~RAyHBnQy2bF6I&J-&g z!7bnd_JVp~r%!-kbe8-B+E63)G+w_-@?`0S7$r^>Uc!GK%Y6^7L(f$g-u~rmI2-4u z{8xP=d{$o~UWtRAULMXp2Aluuc~kRBK&RF`_kGUpoaH&4b86*G$~l{JJ?CjoUJiv5 zdR*=-R6XBuUi0uRjmcY_cR#OyyQh1OdxQIi+v_gm8S1(2Dd3HVL%p)^u+Qvo4K{2P z+Z}q4V{8I@2;Qy7Y&Kg7I+1_SGz|uE^-S({2PL;qe{8JQq8)+dIht! z9X5}xFeZnW?LPZIXii7kn?N`G&NkXs+7@cdwr;j+t-UQj&F#$NO{W;DhOFGg@Y5XSTxDdSdo~ zoD#Wf@vbN39dM8EaGq)2C|?HVZKwTab^*(>YXc#{Q6T-@;M(vP_y}Pxe1$v2pcn;4 zP@2?VJ|kz#<(0ikKD8^H1Rd0+AW>e#%>5X&|2~x_GQoXz5gox7*#vgacftT(PjUG3 zibDG_lxz!@V#&(jZT%#I;Okw22Du;n1l{3UoeU~SI#Ggb0+wx0P;9?qQV~rJ zrJhmc=mqd)Fw8(ONxV!bl&!IFzocub!a2fgpX%D_kLn4-0H{?<88;h^rl}?^s$#ok z36wxvt(9%(YzF&cyWJ7*2zTyrM!IgfdWY-`xr_T%A6g)k34Irm6XFUDgq#l<98x4C z18RkK=zotmyEr@J#{TT+gRbzVeIxYPHElbs6|Co=G%jOaX!?W7e1Ku1eu?fF+^t$o zLuNIdLk+?7t|mE^I18@tI^~7@OtMO6Kn-av#9rx> zJPHpmzvgK5)UzTp9vDK?;U=_^2mR9jy~-%#HTUv<%S$HH|r6r0}_0bd}Aa{?M-J*DW+oZ9$zp!EQ2jaEPhZH_FBJK3)|+}UfW9A7ues}t2=f(emG*B z_C21dWKcqzH-q0dpJS}WOm=L-tv}Gt6dKLZ7Pgi}{31`4j-4SO$Z?oFwTlZP6 zn`NlSOBgE}3g|2A`fKNEb~3kVnW{q#A$Q_a?nEcFLVkgnY%_6;aFTcMy}2pD3!rl@ zV$b=*p_H@whI<9iUd+GlxVO0bx*hJfd580+=QYcV%yZ{{%zc`BJ2w$E^C48rzjL4E zs<|Dooqn5VclUB1bIb02o+OU}9?l5gAzyxQM%@09Y=CVMhzH|r9B7;!xCeMfZ}D~D zTV}yVIVV;C|Kz1q4~)5DAYeSkp0){|%RKlyD-#2WwZvUKaZjMdGQ%TV55C!!WEXNG z_(6T}Tn;2hk^RVKWEIf03XpbEf?n$saR|@jB>Zj*VIsU>b)CZPI2T*DdFp6&JbWt4 z)E(+Jb%nYJKc5J1bOLBz2Jotz5*>&kI03#A#W2G@O_EeUDv8q2_28>|MmxX`+zf?f zDcpal&<1RR&aws=Oiy&GZjAl`dZk5%G($JzYhz8*Arp=BHPNiMRIx0wJhY@(%vKXN zBOfhK!Q+Utw8hWc@hrN{o6SDcJ-8oRneyO>>}QNL=3w(`H+0dzg46CH)H1U*S1@Ux zNk5=ogOpT{*sNwLrIeBKeXzTaiJt{hXwM(w(t^cpkS>=u zC^s!Uc`vhPrY`ez#(4^^AoX4>Q;dU1poigP9qbZL>~i{mH73eK|Wkr%}$Lob;Sg zxyiX9c~kQK<+X*LvaV;W=bERf_lmcWZ;9_Nx|)OjAY4e*P{X}p!$Emn01kQ))Og!K zje8T!3>M(JaecwcU5GQ`Hg^`gzbD)a?kkrDZk)mioSu*38J^{Ipzc9(k) z8-Q`sj<3u&=7;jb_)Z|;cSn!k4Q#-T{B6|x#f3h?MsSs`OuHf1QBV_8Zob+?*@Q)eGhkem$qcpK_IRR)~3RJs+scF9b2I2x@WRwip3z=JBn zAG;d+KbK*U;hMpZ3TmqHurbki9$yckRzGM=HvYqp?-_p^w;LN7OBl_@!-jg;s7Dxf z>F422|Ey~dCTTht;p^dz%wc5Q72W9N)D_GCb!0x`1pIHClyCB8IiK7RmFOCH%tUNG z>+$6bn4|J6U1eGap>27Fu%IYWJ z47VD3}(znq#eF0B9129kU#9j?E6eV;rW= zk8C5Xk1XFTEiD(#$@u>;TdtVfnjPk&rbOdagWfO#Dx$6+jPD1Vtfck(og25xarTnW4PKMx&a%ALN7%;v-DtP6!@+Z2}iFM0f+{6Tx5PhJm)Y zliL98Q9e|%O+d0-i>K!tcb@wQF7Lt!mW-eBs4GFgpkNDZPgsor>xE`ShMjHw5r zYE67CVzx8$nSIOycvD~DmgblMh;c17)j-0dG{52DsRXLNLDK;=z$kcozJm??m`Mdc zFu>Hod)QIaMB~zg!R5LDe%I;n!v4bi`#xxaS2Q#nzcWCSy$|;63s7=RVEm2KJ=GP0 zy6z=tcVULEm=bQnjBptgqh(F=OwUZk%_GcP;j1ZYxodI4zqQ-?&?;C*VRC*OT8J;$ zqK|Z3a9nkKhHtH}bExy2GsZR5wb^ydmE^kZ`s;FqI6`b8bjU62=@z*J)L$f~)ekTo z*@IvG(ox>A(q0i;`yTcSwuUwn?%!XQdX|djrf{$`rWoU7L%QCB&tZtJtG10MfcmdD z(}b=;jUqo1wTa1U4yH!S6%VFCI;jMDrT2V$u*9!}8$JX&u#`Yl;1k=FJ&As@lK-!- zh(Fi&(>nniuH~SY6++i&^u~f!HpJud-1q$Otim&Y!8-<3*Jn^Io_QL2b-oV11YeAQ zp+6V2FvKq? z2NF&~z@?5s?n7C1EizH!)qS`-*Wvq~S_R1t8;F_Uy+?tM^%^y_s>TvaK=JEOxQKMn zFz(>?ErJw?VuYmrQJ1Ub)v{`T+{6dfWc3!fT!qvx$|1ZCM%3kdpn$ofUW03Qf;tj} zE+^5Jm`8jfJj7ctZp-4f-$z=|X)cAgIRzTE7Dgnv(v_Sz}VAR z(CC7eJxR~$@^l6DFOX`m1M{*u+T|J>baI>M?RZMB!CBpdszo}8w(5Q*RuScfptzaj zuF`hl4!@G0&mDkYrekm?rgwAM5&k!D@0P~FoX46SGzDGG=5&WR1WbeJyhabngE$>t(jgOwZJ3ea+NiieEJ=Usg^0@9VSfK*#$c z+nf`~j>TS}LT*TIQtnW6Vu$kTxF=zDnck9p7L1d}e1K+_+ zw*@DFAb1XQmO}9P8gP4#MT*Q4emltL>EO)N#VPX-pNS-pTK0fQ5hvUM#q9}hQN8$6 z7z;M<5fEHfftzo~eB_eQ9l11>g=jGIJApX31}DokVWgk|hprLGuCs+7_kU6|d4ApMyuL4e$Irbjh!=abH9o24#5|eS*%T zCxI+_PE!(dxue=>oB*43DZ19!vT49M7z%ybFGCIJ* zc{WG=Q`l#08hbS`J$NKo7i{B9t}3{KCGbiUq68X>R+@+j)^a?f8<3$;UwsPB&q?A8 zD4C_nJERp{=>(|9c-*`c-J2dqkHM=*VCUEh`i;g+1Dx22%u(hB2<@jpe;xB5`(i2> zcpboe-Nn?!gr_}7p08;)?P7{DQA`${Nry9OxTQ~{BHjl^-evj=o#_3#8e*jF2 zcAzti);8CyVQ$g!R2sa*>&O5)jv~ZIB@;x0&Y=C(lL|>k!~x<%;S8UKw4^_vJzhrs z(OBdi-3k1})Oj&jjiZobbO;sh8l(Z8Lh4Xqwi`Pcxe3ld5zH^Ivai|hNJJ_NI$}7c zzoS6*Oy`>MpZO62C+raepc|WzU?EDwLEY}Jd{o+^N7;Z=bTp9+ub~gSnY-}iQs9@g zK`*RjhJwed;Or}>DGzUKn5G}LvL`D^+ZgV zf*KzP7KicvOhmFxElqVyWqaUvx70*~SfK`X$ zE!Wb}I>kEHy3+dF8em^k;y*Ao=$q0jhpr zPT(UOhABsRq&pqrO7Kt6^}a<;*GbIx143ib3}*UrX%S|H@1y~8jIs{gimvJ^^r)-; zQ-o%#ONms>nM$L-b&zKX4tt8axC3vKAIKBX2=pf@G73JWDPVcjMF$*BjsuCVFS?gz z;J#1CB>0oML_G>_^?9W#RHn5+x0nvH#!_V|&e@hqGw?HRgK)bTOr$BGB25DK`ioLr zZH!xa0Cdt@kl6AFl+1YI4sjb^`-+%;wIg?v9N7u=`xtr#XgbH~96AP0?%hl?TV$gVHbEgdfgH2SL}kSFhl9rR484a-UuyhJ?aV35*(0cpprDlnYUU# zC+&xhyOhv`&jtha4JzI*m{QFQ#IXzfwf#B1b$CzGuwPq(s;GiT=N{=!a9iAZcM*5T zyi>Vbatq|Hg|>ToZiC!Tm}}I}9hg%V{p`D(@91gU=57Y3>PJor?%2AyzpxkFl2_in z(p}j7F)yEcnY)1Jsi&6rytg#`g`d13sJA+Ryip2gzzeowphDm;8xwer$>cQfS)Xuz zt{(cS>UF3xUeJ9yv80@iZvAy~I}HFzk@_z$=|5UcrxQ ziR19k82s}vh$DkBl?xH=q9A<1JzW=dn3JL=;Tup9gi9cCkWYH?I=ABZBwCHGA5X)qbOw*8pncMqiFH7DTPEy}vshkgV0gQ>o) zcy?2~Io@OV1ibS(FyA`s8|$m$E8=_RTZ8lYls^Moq={e+fAfp}TexQlq{-~S`;`-D z8LSC@?GC_M0r*zgi<>n*0rtTRlwn z=TI(q!aIPda0NH;AIgHRwioW%t;}SmEOQK6$<@f5XbFz`OJt->V?5}0SJ0nu&z5Em zpogjg+UjobXZz7taL;C;@4bs^w<3KGf0_#w=qB{T3i_{sbVH;(Dd35H!IZfcdNB!G z%vp6m~VySeCACDO|^}xA;!oU7GP#FN#7Nl=u*00aQnZ+ z9`zb}!CkbGZbpYvPl@>;ghyg>7f0CDRC%m&PA-dlr>=4_&~|!C9mQGTS=SUg@ZmxX zG&q&8nW@CZ2M;4DZ)va#I;iVNUYH6Ojy}j>w^|&Xa5w%YH-meKDaLZ#xU0d)UMz%* zSB1+$73`^^Fw3}y^t)b|WZb|uP@{BG+9;{Yew=`c+6y^$m65Dd0n^5Bin0uKjVp~ijUS97O()^QTWz{z zN;5gkP4SMFw#=~Xv>dXmvWx(MuyUPG;ureYra@^TZ&q) znd8ly%ni(!@h4?rOV|Lau}0{d6n(6LGPKkCzyj-uyt6adASHrV2=)MI=*6g|xT8)& z3mmT|fq~vh3CH~TBP!! zl?zj@KG?Aq4b%@jVEbW%@QWRRG^+MUmx=>#x>aCMpd7rP3j#Gjw>uNui}Q9QHx|`$ z4iposcn@yfa)MF(15#!$ut}fd{jMcd#yQwft`8^Bds#ppM0YrYE-56=!G>xJY=yMM z6}12{7hUKu_<%oQvh0BuI1e{*G$|5)p@#Z}+x7;g#kWDDi6?pzEkUmDMpS|hwIe3U z#X)|53$D~$e8=EMod_mXTg-IIVYX8MgsNJ&XaC>!9dG%e~ zz6ywZ7cuqj1DfP+@(8}~kY3Os>rfNn(ppRHr{-g(7QiItHk}_&`!iJWvykYp7@OY5 zOgQLazd$q_i7bOQNMRU>+AkD5wDaJ--ot0+67K4P+UlszY3){2fw6cB-(sG&7N=2b zRQPMagK3QnoGAJgv=~9m+(#0-@wab=-Ow9w@pmdEm4b4Asg)#)t+Btaji=~{a1GT| zZOo&N!h_L0=tZuVz;0z*vy<4v>=10nN3nz0Yks$HpYIDa%S(M5eBu5y)J}y!x61QU z@H>|BvED{Fx9j*Q_#a7sQFtM>YM0I9H!o0yAcBpcwYf#e>U{PqHic7U^jpz$LHEf#Cr!$;kiD%yA-=MFLwL zq?|Uvd7p+{FcZI+Pv%J>3&d5GZ^JhawDOO@ZoiRlv+rym5F8mSkMray_b?cbPiekj z6v*|hkWn@$Seo0%mBxnn6}sIlp%L!ieF85$mhLH+kbpNIHI$WPi2F#@DW){Qt~G&IpyF^n=UGDV`!y@FHpnW>rSl(B;` zV0eLzlmfTyZqR?U#=nN8pe4?S6D1C3fKOl3upeabPli^wbye*MCW72WTqRW^K^+gb z?m(pfb$}*#AF9Mqb+>#DUA;|A=9l2^i{wXhjgYWblFJud85k0L9$3jHgY2H_m1M*pvyNf#!IJfSZ5cHv^2bt$`-oL8RgIgxa$ zixB>ZPb4=I`zA`8#ZaW&_7uYQn=@Ki)fZ)4;bwNhijt?Q#MP~XAdJ_Pfa_R>CSF=+FL zuua^D441mfN4Y3wo5z(d*!b4Rvl*sNP*TBe<-otx;K>W(nahLLJeSxAl4xJ51zcC- z=`y%=DsE$bn3Uh{* zm_`o4ncKs>0qUHF=6p~)x=oi&d8Q%e!62W7m<4o4l|d%SHrKW+wOj@hZJ&9ec?ZY@ zZ%r|9V_Y;(Ft5Ot(TLyu3r=+xZrNqn(o&68g=UXUx?MWk4K7hj1I2Z)UPTah+%eQcVlh_}|In#?w3(o44b5&5OyQAl$`B zhmq~D5ue`~;DhD^NqDiW$VWi!Z>zKb?d=|_?rqXvWImn2o%u>0kCdDWDz6?VMx*

9gxxX5_oHJ*tgWDz1xtw7vX^C=nf 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

  • Uvap;hR8G%HcjJEC z1!^g)dB?eUJ^LM!bBJ>#z2L)@w(4uup_V4&+X~jX)<`5{iKiPSm_F7G%upz4q~VqJ z7_Z?|pc9$gSGB;~)(9iTuk3KA#SHNr2y#2RA-~{^G|iL@Z@Ys@fx9Fhsf*Z2C}Jeh z>2wvmW{mRO5rmtch9}?5%;`+0D8u2Ek(mB6ePqVb%lltMm(NX+At=cA*|#F?Dez8$#_-OpnldXv0vPr)Xcaxjd6E9hkG!pSWH&&%$(9 zIlnuOapiV0v39Zjw*48J8qqO}Y~q!@71`HqN09S78pJ3x7Cx-#Us@-fm7=R+m zL&`0k!8d&&iimsSFfi|SLVIB(Ox+*)8RLwm%rlrO>=Zr-z3DXYq|anA{#5~Z!OW)5 zQ=tp@Enk1)I5klg$#$24Y~P|6umdja`I(dOLTtrE#$7Oh{prW^H2L6fbOhDZEORLS zMbk~?(UZs1FWO3q7f-@OoI}0w4d==O_{ZK9?!XuQ4-YGwsevWQ;%{Awzvp0jKhxY_ zyXW^4&EiWx!6u$%nVHOxJYbDf zO?rgGVI*?^yhJ;CoL@Y4EZzv0sq&}MlRN_~{T!H$KaNE4obRIG;Kk^PxuRWU^^MjR zYG+srJ@gNFlq@iOvi$wM#PW18mywpzX+DapUK(xG5qUdkZw$|Qg1Gxqv}JX^4kvm& z(Y^H$tq|Jzmx^{KyR(W2?ye!*0OGk8=y zB_foePs0bD?j&AcJ$wto!I!?l#zm27<`*NubB?lN)=RI6bOP8~f5{(wEt-C>n&{lF z3(e3qoHS-qze>g`JWrZ1Z)`f~Mh-H85qbuE!B=!q%xl4qDv=35<-{LoOH-wEdTgiS zBNi`*fgOF3o`F@IVY1^G5YGs9;@bLMcBxv_s6nvCAN4`ZLD)ji-wSatS(*ax{{`Q% zCm=jG(52soeSRe6lxm1wgzg|)kMN6muU=FapwuY`Tf1C~);8+|Kj2R=@ zGUnn8aS?5IaeH;tDi@vS6h)0=-cdLDjT7{XT+P4mSG#fT>Zz~MQgE=?tq!09DG0XL zlcR`|>1+Us#Iag(g=eCcwEZ0|)#=rBcVf-1a=PM&|Vl zzl?C47M7*oO|O-)3kTODnE^JNZ5v%Xdx>^lN;q>XHj!5q#rwH59u%YL#ypEdiHCX| z26aCky>a+R6>^A<+Ds*AO(#-8J@TwH8E;JJMO zMe7>XQ;p%?DnqC4ZQRiB%@gTK$+6>&u>!g>?s0psV-nPtc zcbH&OuBb<}>#$`%jBMmd%efnS2(d;D<0{vDs1~Nq0+TH5yhFzDoOw-iakk$KE_u?P zWbZ@2)DdSZP~u3nH~t{yaFiaeA7uKH#!U0dWLrsaF~ymG`^a8}$(>1=OEVi}S~H)5 zenn>#$Q+rOmbueFufLehbYuX(Gra#^%|iL*}bRm5`K6o`F14t z)lIb(k@qFMNvsm3{A4${sa8b+*^rqMi$J2cux~A*9_vj7la6b-kNia1&8{OzL#aSo z2?@p+Q0bvutr%92t6yL~*kv)+^$&d+6{wjkG7sw*hLH(EgUlP*c^}|-!6bUK*?g7U zCa38NodS2rg^%HG@&HHn26XVw!%yxS)8jmaw}x5RM8@y(K54_+9z-XSS?)TtY`9 zU0?r6!FW*fCh4R$H131VY)^u_U~iNhA2jj`Wkk4 zE>*yF@jm$cWM0`&@cI=@c3A^HcOUKNK5?VC1Eg&O)xubDG^)H?{C{7ufS3&SJRXnv zt@wVGF+S>HdVL%@BeV^;HwKY?jp69an%uR$G(m&!PFm_4Wo z${8r_Pkj-Y3wwbB1-cj#N3#2#CKK7b)q zwM(dmeaM8(=oa@IIpEwYfv3jvEDfaDS!d(~S0)Y4$E z!hL5tenybtSeOSe3snAusf;-u{X`&cU8!LFliW7Kxqbvmu!9esG2e%=$S)6&X5ghb z-ngI_*5~85v{@aBtJxN{7=1!{spM}MXM`K*CU(k;P2=h1k?7zm>(&PaV`q?vUT)Xv zo3Cm?6JU}|zrek$V9mLOZAO0MJgcmov4h%c1bfbHbSvr77J0d87 znyZ)}n`)TM@(A$-^ZGt&8`Vf>Q%56vW81*YRT)Rq%cK`fZg#iUGkdN_|V zo8XmwJdRblP_K2i4`fni5gui$vm*+bCF&YD%<^CiqXlpDja5O@!`a;;*K8!ue1C-I9EVu-B z^;1%$i;%bVpV32VOt`kbiv8ZB&=FaVF^jrxJ)e zpa%|qF~s{`)Hd(6dt^{k$YD#63Fl_d*Fc!BfD4^h57Q&Jh+`}2m0Id&qTmq}Moy6T zmzAHQB^?K! z*H&_M_$A`I{*;e6`cD?)oUssJjI-=kK}6NX>^%GU*+43`v*KrRZ@X9t)MKS|S<-Pk z+97+RIeKlXPvuk-)lGuM1GMQieESM`{Q69%I|~n3-E9lg;h*B2lxY5B%A`^|%X`iy z79`H@;rv(7R-@*O0>^oWYj~0~1?O*x`}wibUA;qvv7Z_zNw35H)Q?!!f!CQX_5j!X zER~XTq0e=LZ!ZKU@`OC(1|G%{(j=;%5%?G{q@QpiXC;Q}@0fI4ist7!ZbB+IA2o4`x&CRMy~Dz6ej>7fLOhW!#9r>EzpGjcB6< z^-DKV01GZo-14OAbh(q{HJ0_j_|wkdU)<`;C!Kh|zeFW>A6M1&1%MhOldXa&CgZGUJ$-*V)`T z945a5LwR3yi)h$dkIfzEFEdBtm$dr0%f#jYBKG=J~4@aoYR3}{+SJ>6w zvZAjmf0erGU}p72s1m;$p=nxM^o3oeTuk_Q>nV9?G9Qgf*e(X+Ue z%(`tVCJB34g_Wpe!_n9cW#v{iQgHdSv*v5#W-%N5wj|m9Jltsvp%;kAC#uMP#Mb+0 z$KRnbP9RQy<-VPZ1M*m@1KQPnAdDkGPUt{jpPWcO7sRX~8$7=+^ZX>?9TTilsQGgV zX1am9;^sV^ZvHXC4D#V{yejsPN4@|XixCdM^Bm&;*MJY4#k)=<;^$_f=X`R}$2j?v zrasS<@^ObO1^cQ;XMSIDxCbafPBMq17IUy{;3rAaOmd85-fahAG83MrQvt!RsK=C1 zRJgv*31F>0XmUo`D=?>Pj(q~$WkEg*j(TWqL)aC=ofe$^YbxhZQeMJIAPH{L#Iy$2 zT=7UfkeatUUeasHVr3x-N7Z*!7}a>Me|V?qWF{v-{AwDq5ld!XiFmq}D({}!f_k#K z@{x%>UUc1*U>d~~o;SkQ9XF>c964>GtzcG^a81N@&@rD5SGdoSm+qTDG;Z-qPr9I| zf?jwKsV{+~1QV^o@b>z|xqivBF6aLy8UDs+)Y9{b=b7A5by2xq1&Q`TgMJhhdUx<; zjo6<-hjofmMr%BrNbw2vTo3gKy*+)&1@bTx%SsH|0peRin8x&pBv`+S#K{nG04Uc- z>afEgGj?M==fRy}qLCVK-WcKJE;dt;Up`AT^vhLv=ud-hdL# zq#p6)?%M={Y=z$)!}Wdy+Ua_hKr;Uzu*|(6X3xpn?}LzDV1I88s+L`RgAYVy;T3gN z0nm@{)W!~V8Yoa}<$|-7^EI=PM73S8?^Vdz)9BMQuzq|6txsSPU?_r&~a6h>@-cTbm;S0sTOTTjkPrvex zU=R$4qlfb>oWXj5FOywl z0@2^K+Q+b;MF_v~60U@k)n#(FDR6}GQe*iryK*W!b|5ieJ1g`w{Q+;`d?M%*O2EhO zJTd1LGwO1flj(>2jrT%3a|yH4##6N z`DNxEOg>m{o^2k$^d1|PLvOPA%}jjwB(0Fj5O152M;{aVp(g%m+#x60#Tgz5{#TuQ z&j+-pHfybnQJiyL2Zv-|CIyN{J|mAI5J?PJzMOoYmsmXlTs;Oi`?BnNSDB+$o{2Fr zVjVO}X*g?6Ct4I`FAFv8r@l`G#mPWb^n-I0jf?zT({OgSAM~;GCU;2VJ*;I{AB<+N zgk+Y|$uATp0(wYQr5+&u%c-RvQwz3~2U9_vAx5Ulz97qWO`X7nh7*Zh5qSzW2ROiX z96|i0>$ew}HlYcQ#TT=Zxj8O^+tCJp$Jyk6mX4NCGOnY{N!Vst4>#Q3Qq7V^9<~tP z9}gp9`cgRO%Vgy{xUWy3K#Ji`{mU*CNEgjHZ2%dsAN-A|nd!hNOcgN-R3jRcc_{bx zFEEAqxa^c8LwUxPo{RhNAF&F2*9z|1cU1gU$tVhvY2-uerc$RL!EbsraWNCjVi?sG3-Rdt*{Bz^n&c6ue4J*j)Z~}PNeGXjIZrb)G)*OzoqPzA7SV6 zfqaa^&+Z1?P%$Qkh7%b~@L>yB!HKZjf$V1I$XvgPInfzaCmuH;XX+$1yqe}BS6Umm_GGHU5EEUJo$2Gyy({9b^IRB zuyzhR4kUB&Q>;#peG0GV9dW~9W9~Y+!d(=n?LaIoP}YXOv=B>tJ+YZ^f4icDEe+ znlCtgHRf=1gfW{zHV}aeS}OA;^V2ihTId2>S%cVJio59-ZdWY~H{&#~?g81(A@Z%O zO!|#Mu^pUCC|uugu6`JiIhb=@fh+4pALSWv`*mE~+GGSTsfw4w zHF|S>4>HB6r1HW!2d+Gu^9FZZLs*7HT;aCD{7$e>BrdPAZ^OSeH@xpbCfZD3u3#7P zt*-O}b=RK37F|bKb{RChBl)S$9Jop3q;tU)kAZFsg>%h|tH?bfVF%Wg8#&=oV*CkDL+4-W&YtPZ{@nn$9rEpJ%_{@eyXtT5{q z^f%|IoQ8oxKVTovX$du-qkDHCemOd?ud{H_Nad<8)IP%d*l_!*4Z3rXNljO?D&$IJ zfoV#A9K)O9L_ePF<}_0`?s5)qkbCSQpKrws!>_WH*@iW#;A+85dzk*oAIL`*Q6E;7 zE6O?KWb|fNspLayWG&PmPbjk2ktq9-J(AER)6@~G3cD;b2cJDhu7mQFrL{hU(6bg z8C5K`Ex9ZY!Tl!^vto#O8RR$p(7r5WUe;gs?z!xkg*a+()rPZ2e-i6ae_ccQwOTe4 zSMQsAc)YjfB9?lVZXl6cEL(|$ePOn9Sf0RZ=P=(P>Q*$}q3$gtCvrVU5Gy>v&n&Qg zh0ss+qHFuA+{7&F-sWEB22}S>bg@5S z5HI5g^q7vFVmRmz;eEU^=fkyk5gkZ{tUaysxXKUdrjNEBx6Vg%RhNG6WfqkQz~6Dz zd_Y%k3n`pvFjCk;c3Fk~fFLcAez?-q6^T@+YnWLZr{qHGI0MCFW6pK~7}onJL|%hX zFCl_dV8vWvc2h32*`b`ZQ0~1|;Dl?bBZGObuu37o|k-vIP zX1NZ;!L=Sfk@GesR>x4m7BV8x7s>ib_SEv)8`!}9aKkDb)@$VnzWRUQkV?ZXE`lAk zsa@Io%Y#Y9p&VI8oz?<{g$FgwDYWZFIm7)yi~i#rM@w=WC^XgzD2-7qFCvZ z#KExO5~{5@dK)g08!lxvF5vyGqK>@-=ld4+A~$imuQ-a|UPaydmZ<-Rcc6&bST9Ln zSczl;5oj5g@;gI$@QIz3jysIQJuT_u2K z`#5gU>r)=(&?VbO{PMflTH)!~(>8}Z!h*{08WS~EJ3N`7k>VVR+g&$w040eJk(x{d z98CP!rXQx>T1QOj4CnezJ3?kx5jG$S40QmiEl;Y8UrI8H9ubXlJ&>36pnN(LFm@7| z|A%)?li~&CqYtL*1SE%~#=gJF)A;sjH|~r|{?v z)rxqQS791p0~qVkOx8F>w6pOF>k`fTb3WpU`)<^l4Pe%X5b;9weN4JbCD+Ldx-h_) zPQ6cOERlFAI+Is|4_V(9n4BC^V^p6fnWJ%$J^vxR%O&>7k!UzRg6H|5eQP9qCeLNx z!y(*{tL#nZqZf_|y>NLP?Z^Sve}p=@qrE0`ni`{ss>GD)S?J!L!@LJMHaQ-Wl?5{W z{ExFC4Ef`%b-x~sMPW3<_tDz4rBc2~CRUtWcr%ESgRaG9AU_>&lj=joIF*{JA?gQ- ze!;EW-zCW2o={b(&fgOg-TO}Mt_c>c=ZS$F6*!I6zK^o^C-R19V9eF4udO#a`F6(2%8 z31f9k11s)NRaKES;{`YM1;ptTs>YqH`;}nKE7*Td5VP)sEt^67TjAocoL%}ItZ-hG zwDrM0`%|NJmHTo85OZ_jh8_iayMSt~DSJpN>pqH@zmT0_05M_~?B+ze#g?;bFM)IX z$lB?vOMOAdr-8Udf*Q*_P7|=uIpE;<&LI=j1o^{NzHTT#$|ygKXeAJHlp^<_ka!=91x^=I(M$+*?U~ z6GHCU6czG(R>EbvoMrBiSzriH_1y3wtI>yvAPt>`Dd2R^;l#^l-EnbLBISrpk??#y z$@w41`G^@usqj6RY8y;6xgv5* ztswFi4^WePu-40oZ-Kw)|@zEm1FYnEbB7sDsr{q)@D{;YZ?yT zD=bYcf6R->Dt4H1nHH0$jFOT#Ut5^yI2Pq*cN`=Zpqg=jdby@K)l$pAA$ak17+H6e z`a{i$3SxcMJEwFqKwKa>LGrk`%)Ix(dB=Fx+aBt&tFT0y9&TlC>dqWT|CR) zDjDdWi>v;qU00#!NTJ3WM9qDL$;=L>i1h&<_)mXGPeNW^TV*osq2Q4hUH&Ufn`uWy zzY(gFEYVwpYFs1wfUVVG=C=vlW*c`*1}si)(6R%dIQdMw@HW{7DllG*;`}xSAw5m6 z?ofOOvNH#-gYzX$n^wnbD%@H2VK^L5rp_J2RL<=<;-9z2+s%%=j`HYwIxq!lxMRKJ zg5wsdWT&GbF?RxZsp9OWoMIZ;Eb7X7Af>s9Oizh`i^0GP(xus67)y=Pmfb$LaEEtV z*|M%&_3cHXfF|FJ?2Plsl=+ns!v9c6gtzK;2*qmL6~5*_d0 zC_gy9z%)PNxQ&wkKCdU5pQJl-g7!{!?!Z&FmNJ&ips+ehJ*#?y44p-3SQ6wY1T9sV zK1Uy`H$|(PsGT6X7u4Rua}Fk(C;&$q!+jP-o##eJcON*Fd}NU?w7Sf?^Wutp!S{O# zcgGDn75<>{jNpFn2a9ozdM+Am#xKyIcojB?nx_`}j3v$yxUx+l-`Gtrt0&!)o9MXm zBR2g}YodO7Pp?iLIML-)-WSp}pPanp<<%5=Cm??$Tb%T7l8{P50spFTxQWnu>@T#UOR%M5? zDr)n`u+0l#ena4Y|Klv)bi|;8OXufzaF4y}*u^>Tfij?oBaQB@Z_FqW9Yv{bLJ5B%t4J*~x zO74IPc)7jT9)eap1_${|UqBK134K8KQo%4Tz*CF^)yu2BrYkBGpV&g|M!&#(KEQar z!LzKYItetxo6PVH+QU0~1@Z<@)I(Q6vD<^LorWFyM9fZOg}f3UfVORbrS1ui<{|zB z6?{s5^a|v)Dl@w$k$b-bw`xt@cusmRS?GkRgQ~JQm2yX>3-%^@`^&{(Yp>JwFpGHH zl$|>V&LlQs^cP&59HLb!NnY(o9#D)b#U%YAEBHdreHTRF6j}dfu(7$Ei(cgBb;06X zbGyfg>*0gr#oQofYp5|&sST@>FU*xUQLX>LvA93%>~sS6$u{%@b-7P|pd&s+rlF_X1Y5p_pJvCI%4qKcfVg z05u`m9;A0&^6RzbI)H9W& zqF_hOr5fb34>;>r;E0#96HFqb?ZDmM9$dH*h;Z(ubZKlSjkFU24l8`T)P_xO=FHqsJUN& zsy!x;T!*{v1{lSK)bS(n7?{R)8^GJbsTVG1`KRp_Hgg3>aL*Qmbv!`M+>t2#lR3rV z+^_Y>os-$S&r!SXCTl*aUDBS=`;`OTYac4h8%#}g>K?G{!(c3T6Z2oOujl1z6%fj0 z<+4|aE*_vp!>LO|v`O>v%q)0 z=GS*|z3-}B$dm;20a$0MGtT*v$k@@@0>tyDBg|2aKBhzVlJ*<6owiZ%%=a^oWrlNH z#6h}??JhmE0rm)c52F2V=0es{&eL&*Up&=lIZ)$0ysH>G6J^-ec=qmeD!kfYu%qA> z?}D})(5%D9x-dFgh&MjkTF9*75cai(?HY&z&dHD*$;vcF@dZ-2)jIMdq1*EnZkWhSg` zQ}U40Yo?Orv@XXTP|Ej;S_U`UiRm&iXfclh%WnCg4L_gR5T<6v>Bs^Dg&w z2uPC7K6H>O)XR8BJ~@b3RRR^0O24ZQ-<6~90N)dG;pX&dZieTT)YD2os!=Dr#3wqL z{qTZW2G*1V_nASc-+%CWy3?ng3{PK&s(mj!MGDH>S;kH>zrC>a73s6v2UDes;b=v> z%W3i=wEgd4B?mAgI>21OoCF)W4GeM(yV7{LxnR0WXHzXDvXi+<3yCas#KWkd?}0S; zHy*$-)I+&qVV2b+rKNJm8H8%(I-0-5)a&(_23_3|Nc8W6JA47^dr#2slT34H07t#m z@zyaOC6l+(id|v?xqor?Tn+D>7`+BeRxyw*cVgE$l%e;CeG2NUbFBLWkgbET(ix!7 ze$;UDQ2a$u>vRRdP9q)%QPJH%t<;W8;4b|(-O)yVqZ7ZMZsB|$;c8W(bD;uS(j0tO z2al0%aQVGa@mJ$&7J=t03)41&${-d_WgIAy06%entC@}HF^&rK8u(W}u@ic)L+t&z z*qxhEY3)E)brqFLNn9#Mz$>0*mU~@z83(tO%Ax`FJPg2sodJ48FAwCaFD7k z9A)nelu6_0f%S)TP6aPJLLI)2Xx5f}FBk9YDmvNm?Ejv0D4zhyU&ekh4IRsCCX(k7 z+p*VNClAQMI_^YI))|*$09V)(M7I&R?lyGG-(-U-elBtT2hJnA;YX+7Tau3oE}Pp} zdRZfJ{c7m$?fxIroMgA1*6h~7I2!*)ZJNlPFp5~KqC(%mE8Rf8;>u8#k%1f*JB!b_ zn~Ts_9D!%)Ls-&qH1S{2VT95jQyXWn5O&v0x&xcCw?3zLA&faz@u0PHnFJjJs`Ut^ zOEGOVYo{4{!=hB%O?hu`g@GWj0U#1bK{^_vXOcNLx!@C$rEl~npX3ZJLB;0co}bZW zR2=QrNTx-$B@cK3N=E8{@@yx^9fy)4o1Ua)a1;&5s!#o8`KggXS97!2BGr83)0{g#KgGl;9Qh;y%lM0Dqh z#iJYTCochuXh~)C#pGx149~xV8ovYUs|@Sw3JSQD#NG~BO0}+86?_}mY&$Xk00@q| zd>b8WEvn{O=*eH9eXGY#5l!`bf{1^D3Gpusi5#mIwb@)^&MDMO7l;{aV4=6N-)sdP zc1^3V1kZCzEXcn8P4ee{{L1vqreqtd=-Q2=Bg+iZFbNl%1hXI7|4o*Y+zs0;J#mxy z2{LgB_I-d!CqrDo(FT>=WBS7Sf#l6bDf0v!2M&2em%qfLmim9xStXf*QVM^ndF;4? zVuPjJ?c7fP$`#aX(}?gpsN;H5Ife3hm~)l$1idi-@MZ{R_NAueL30+z{?!e>`!<|g zQzGtM^1xK|K#fp890A>Y3Af!$=miSB8jp}D?)_wrf6VJkr$YXPa%>Zo_bO^Z9UeRb z{BIUD@o+rY+}L67lEodMGo~C_sla`D5FBD8e0po{*i`i$cj9)`O2N#uuK_OcKee)2 z2QIN4`F~G!ApKn@$ZQTWpZq&4jxT#ffA;)H;!--bXmPNF`CyNGnB zBqs`y-(YEj!19xg!8mtzpzpmAoI`F9lGfB7!{riO;k76R(^0cdrsHB18E!N1!qwm= z2S6iZ$-#b7-Si;8x=P3G3iNv;K~VZ=52>6wqE1bu|0PYaDPC$poMb)O15V-%UKD*) zAH3ZT5_PjXp4nsVZ>jea?QW>TmpCGDmuv(>8p*xjWYUqD$?)k+LHvZe)e3e{TbaP4 z{07@!OIL7ha=1H8BQFdq?dk;U%|~0kH6IOdcB)RVKrp!BDz3v*vL6#O;r+QsOOYXG zz_u;pPA$VUtXMkZw{q^*kmbAjHJ9*zyQu`%^8bt20|tUdwt&qo4@O-A<}N$4lZuh+ zbfIq9!E~6PT7KByA=Cv6Q5j!`@xKF~oxoWyL$nEHjVeZMx*?Zy)qj8jl|awXlr{qzlq@F7$KzU)7-pgY~@+4u)S7%QD;-;F|Z>B~*^OklrWg#X5CL8YUyDn0#WQBb}h3bzoxq74i{kMxQAc8PwJ+~^$& zyfz>=QLNGIxU|bc8r|IMSv4iOZ=awc+l_|d49L6!Lpm3Zv;bLf2y6QaXLK7(QK-Bh=I4c(iw zbd*SWfk<)&@8T)k`+g{!lDN|kbDmFgrsouwPs)5Q+=W%Xwb{y1MO~K^5gGu)y7L1UCSz)bUlmn^s+w${Z&i*to=y3Tzbi}VY z@6Y9rXtAz?wQoVY8^Z6j;4$ihz_;M9`cmC42H)O@lg0r)FXWiVV~hsx4deHhq5a(@ zpTN=Rmi$uwjmo;1sS5GBJGjj(BK~~(ccaKVzT?wc%v{UdlRmPp=0I~@b9FHB0%lLx zT0bhl8s`6j0+%!A=l=`x^X#~Fe#GDP7|OLqaN}>#PtWIF)qvIiL!^7ed0Pn^(Vl8I zr}Tt#HXLo>H!{o~>|MW!RP&gA*&FP!5X_M`byy;+}Flv zKwtU-tjf%8S{LMID3RKQvtH*;*u#Aj$&|ihd^{)bFF>8!4@5Z1_+xnRT+OJH#%HM% zW{{x;@%%kle}nnyY+}WB;$u80>Mwet-N?dolNDI0WHLeXNcN~f63qO#r-==1}$GsN~8heWh?kgGKGnj~Xe2wSMdruttfkG)&@Fc^}iApIC z&r=>mDklmJvuFdyd&OV8fjhmy<3*#Q_{`6AvNs!llaIPJpXkN!mS?x{MQv&j(b9PK z3?4Iu?=AdW5ng#tKKp~})MJgcWCiwSm+s2G62#Yb>@HpT+?l;1l;}T^8uT)|!Y$aN zTQIYa$eQt{qGIk&7GD7zx++?&oFG-MbMXs2U4yIoLFZaL73f+p$4Y{U+VelwU=LzR zRo17M;Zi%jVHKZ)VVp#q_Jd_ShEAem2mPXz6o2*jd;}4JUf#-Zd-^^1U;}g%229l76ZuJ7xc4f#yN^_qV zU#RkDsPt&JT!-Y}HZ^zkeDX7>UD!PNzBbSLcPr&$7seu(e zC#tC;^bXaAv2Vq7>J39Xh`yKAXqZnBn~EJox^ts1e4% z@`rE?rk)!LJKGixz=Rvr2{M|2#JO6$K7&=M^KMSCQnwK!+td9aXn#?8ErJEDp!(pK zwpm#P${wt=Q5vJLs|2sBFa_=>il!*Km-oZkP6hjE0HqLI{Sx$(xMZ)$6~U*qnxWajz@I2|K`X5A9Q?_62A&P z!tFsCM-dYz3yZ;YR)GwyB0?Pzj)NRVQ`aQ3?mf}8G$5B6&x)MSIz3Nx3a6g@f3@ZZ z@Lo5xH|2>gt>{9UOcuYEZk`KhL#}f?rfV?)MDIN=)*`Xp0hU~peYqj1?r7W$W`XT4 zC2yZfEa^?usY8cM4r-^0bT$>^qYRO}Ji1h;WalsK^g7<mpf3M^(ITLB~*l)tw6_SQMeZ?)0~pPH6n~d#y-yM zK=8<3#Q!qH0GFz-GI&j6e&#y2!?^b*bI1;^_8MYEnbCai)f)DVAEpCbHMmMfxFmZnsEbT#bbTdFjOlTpG4tv@$rf_J2K$h08ghEn5o zrWS7k1}>shx=-!25o|mVWp5FpKq~0XeWLLW^#C7Bm>a*C&r_M4*nm2^G~VW4;L%EmKS{F2bfr7L#D!c+s5y3q~_USxiYqg? zPrZGFtaTU14$jCXI@B-mvkRz!&y#gT!Upf>6@|kktpmf|LfkyS>x;_Dag)KGJc;}z z=)bE)4i!k84d82Au&J&fm7~Crw-M=YlI{LNhvH)8E5Pp8WAALoRcc72Z%w__l`ME9 z&M?b}UPp-UH$kVa@HvJxd5ZmaJt*`fcGhl26T0c!@mH;Qg#YmoV3Y?NFsPC>a`Nk- z1`CLp&3LCdLB|ZZxCGAM56)XiJ1+Gb#Ab>4UKehz(Ysj5YA5B|jQ0flg)C1vI4yf0-o^Lq5p`LPZ*x+0$p@FLa z+T9(s#Y}WT`^l}G^f>r)Ub?bhOa|SU3AetT-17#n+D^q?5Du>nRrh$Znd8Le4=}_M zQOLsHl%I82fVfnXwbmBThoG!_U@7r<3+w7Uy`|S!=}~0lS5Z?Fxl2MOfJuc-}^*iE3B$lVLDJLX3fS)9DOdREs&%`65s z0QRQ~%8mZi@S~{dmxAQ(%!>4viLCFkI)>B0w{^NIauK(RWue;5s4#m{Y0e@xZ6HFO zAW}urp&JX<`GS4=1C{(wI{Y;--XgLu(Y-ja!yi3ZDdtTCQae_~_pv&tsTn>wjp{#< zitRI6?SJGBF~s}x94FcBw@}Z|Af|PvV$K8l^9d9o9&90+S9g;tco}uXSa8lB;1Dhz z%a8p=;oYAn7Vl<{+Q4qLnAp4xM0y;|_y9PD&O`^-(S#kb5c^#zC8P6Wp=>& z?4JX<8Uy+LiR4MsIHnWf7ZT?;!hxNl+Ir7fSB32CXVt+^YEkn9aTYs+o{WbHb)h4R ziTX$3hEG!EyaGFMpuNgQ)Gx<}Cy~E!Ru)hk6rdJ5s21?D4XN>a;tkN9k3mG_VSH^v zByUEIUx}=zGQUv^Jij`h17I4<^0(DctydWpX8LT-Dbc-}(11Xm53#y|PQ*#M2_Ev1*WwH0F7`@mjioB?O_89m>Z*uJ=6h zj4(2Uz2qo&x!zC7@xF1@66texp*LT%uKzQx{~vmme{&C{O0N9R&hMmh{NT6VaXjX3 zIf=@BBRKd#I<&eNQM_e zwCl_2smWRrVg8<@8d^z)Jd|v$7t!9;qtO*K$E6@D1}iEWDm=7nUrD4x<{^0KS=Q?o zDwmynxRA1kU~{qL3GxHAQY!0N0kiXAXR1bh-+}CK2K(0{cDL=IpPSj^ z_OPp6BDcK6{`M3`^A!kdDoWIBpg^u%pc*l)6kJ3R*1k90A-RO?_%&FGauWMNPJUXF z-|{14t;D^UFAH1Ez?miitw9Wr7)zaWjmN$PbM%1SBsS|gT-DQQYJg3=n#t@mV>w(k z!Yp>)P(Fw9bpg5V8h&FVuXX{iJD9W5f?c;Q=cWZa@H8@*MdYST$=yz@+NFgd8E4{(4yzD;FeIqeuI2{VLh;2Ii{Uel@ zN2s9=(@nIKo(0zose$M-eA(}_5$7M%%^N}O9ZGC($NpYNt;CMr6pdV0_WHUgii@c3 znBl6-#Ym-Mk4K+-oofFAasL_-{}b`v1NBo5j-u!TJc;|o(99R)|4Q@o5}@tH)SBp_ z#-QcjOimF^e29e&j^?@J)TbQrY9d`l-_;Mq4HXY7UuyoEC`bmOCmBE{&;c~MJGn^% ztqCrOozRrJCdby|sLa2Pr%DWk=UIRPWf6UJfgG)1eCqT2jriK0|Mv&?ZOHF-2j3qB zim-^^o(fOUpJ(ysxdM31AoN@VP_K;SF@|%FM)O-+Vd5Ww4nz|D!(j%NQ;)79;-4c| zNT(*%iT6I_62)P8TT$bWCHo!9`5%TJd?26akQr}=rM!yU>$@z?o;NYyix^!QZri2K zE5T8UI;tX(zcmrPKT&Tm^;Ix;o9jMY%DSA!F&cKhHh4f0a=8Mi6auNP`g0cspoA#L z9l$8ataT=U0E11hE$T*U4m?>3^+gmxH5OL zgZE@pb`TVqcjU)ADh{4eg*ccj&SFHq+c*QtF#X5xhfd4OV`&4JgPtY(G2kBd1SN4h(PDb z(C-r`G-7iy*|9ef*awX1%wR$VMcq%MV8q&6%^ z6M7HZ5v~1T=nD|PYlw}gDqV4AG4XFcal0ofj#gPXet(erFn+$2s(lNwd>g8+LvT8G zh?)jFzX7-NjTrFdrMsMC8h_k|8~#X;pbD&2U8JFfZv_K_mki;_fr$@1BE^a z^Lv85`w6?gBITq?uTNCZEoZR*zo1TcIW&HvcgdZ4zc3CGUes+4BEeT;d@8ZxBe=kQ zG`@SO<(E>)^=0oLPTf0#2ou8d4d*9~iH|vn0AJ88$Ab?ZB8nbGCp4W%KMhu5ERIJ* z$XEIh6`FHys(|Jf!P_GiduW*Gf z@Y|96pG(Q8;Xzh~7}J0=-JbJXmNVZl>x>4#jO9+g*?eSI_Aee#e_wp904DoD9mJ%DcCe2`}GQ`XoN!o-fGNy2{#E zB(B5zDIBF%C=qx%@8&+Q`6W0_0eHhXsEF5bEgyj;*tuUyQ$aO=`DzT4@_;z~9S$K# z+ym=yTxiRkisFu$!&R>g3X#FjokW+btM653-TG3E%maa+ z1(GwCn75Ehq%qk*PrkZ3)w}br^Ld>4#OnJ*&lhk#ABbi?MBk!k8(+us3T6;LL-@W0 z?SKaoOr*AS2%(9?b6{r26H^dv6Dx9 ztE+k$Ue!F#&OTyx5cgsYc-UC-pIcO1X=FWDQQR_eL-*!iT-bUQ@~9M^*UL!Y->YWz zVHGw0^80)7UNlpiRnl{Dw51lB$#Y$xLSM>9Rr;Bp69Y?vhzfKX<^zkbPn23lrQVV1 z*yZe!O3iiwr9~7q+6KNmO*D_DS2u)X2ywWW+8Z7GSEg&Y;^;^sV>ay>Royr~Hd57H z19A1x@>8G9q~e`N)N|zs?X+?zXPOd$ccPZNN4@wShV}~aFo+nsk?MCMvG8eDC$X!m zy$F?DfbPQHU%_AR;@`&7p>&eJiQyf5BdX-2>dwx4EXe0ipzPoH>*LhbH#j2Tx%W^> zU!pp7YK4h5<>7&szys$ZDmk=l{LOPv;B@+zerX~+QV=NmNxGq~GPTWudhQ=Jqc=H` z7n-2kS=ab6_kM2f+&$=EYw>v8%+`$TH zOwRlke(Wq!yBp_YGWSI^HS%R5tpiWFWSpR@lSPR11{4E3C`jZD1o4^9${WPzEm^sw z!{|T_{1{g2F$~u~TzDd>lJe-RC$$Rw(uJ&OIiARTf%rZ2|46zIxSQ+u4d7=y&qG;7%1DK5 zN=6}Mg@!#d%1FtK5G67rt0GB5gJhGEWK|MBWbeHRkqFOO|Mz+RFRx0R=bZ2Pem|f4 zzOL)O?)yVQ?9ab4o>o`J&$J4Tp?$CLsxNTOHZo9t{r~rK*wn}Qx@B}wydyh}ln+YK zb)UtN-V({j%BuHZaLzrG4bH2g|Gx@cMh3iy9~V@2El&B)&E4>>sQM1JRoklz%7FDm z?f3BNgR0y))yR{5zUQ&x5#|L>kwq$Vw_geVgS$N#dXYY!i~lHvNBc#!@R~An3%;!v z!lCdVelF?PS}gZgGl!tAnTIs^mN5-&9DUy6--K^CwT}FX-mF%({&tJdXGM1<&_pAit+w)^mQyG>eZZ zqZRCeV%Sv`oi<<41zvU9QYVhn#&%0(+=rCXKn#m z&9=&3@IAA@An*F5&vENko^&nKpJuqvt5u$pN=Sch_>|C1S9RWuu}W4&9s0=`dG#x` z=ss$lUDZOz!4q#nGPPyRCa~d2noYLgUYW8Fm364@z-F$kpZ|M?ue!Dz+RI%#X9CXa zu4OFL@hfDMpaA6#UZxqH3>1U~C(GDX;kJA_sk*4PEK!+ntGbfg%D653KX`5A}NS$18U<*hf-swxg9pm zKOFtr6!UE=q^BcY&7xjMfh(&b_aRR5qK=q};{T`O<)zrYV(d&As;WxhOs?NDw3Rig z$<^%Ex3K+b?o2UH?wp*~f!)~tzo-|8q48E~X74k_a|GMhm z2wbO{>p2q57c0sgQyV+_MD@2Gc65L29FDl&46#pWfm^A1x62K$QA`_%!!5+4Jk;e# zyqQ|sX3=XOl%L5Oz6cxKLtiMOQ?oO?UsPRbj5^N+F(=}#ucDCOz=%Jjb@mgRPvGU> z%BV}lta>^7vkrz=E;zvRz5sZKF(-=PwX%uB#Z}nXxyM0y_h~hj z6Y(0bR23K}e_}V+#LajqzprdvRfH-kxUE`#Z4r~QiF6TrVr!rr{@5EAD6Jm5BSU|U!u2;~wGM%^KJ^TrS#|1Ib?dSx)}EY% zH9^l-b@%0jd;S*h@xkbPCzQ?54fdbAy(;pFiSo-MHPp55g^04Lx4a7%mT*TNfOUs^ zhMDC34->IOTl--l-*X?FW4V6EQL<8m`j>9*ZzT@CO?rNZs!}!;Wq!v|pXVl7?%Pyy z&&!H3T`}z{iPd)VZSf>dn{8z_fe%0BXIRb4kdOc1IX=2a?AGD@9kb!$G8q`*P3qRc zL`iq*d)LrY#C;r#YRB)CEqs{QxUhQV-MWD0i+j`cGnb;LHpE|M$g%BY-YFF3IvD7D zdATnRT33FXD&lWcRqKx7-=l{yw-`KKojev8=KZtaJ!k2v7ihba#O}%>cqlkZwyPr^ zG|<7-sdT%mL*;w3!(CT@B#W18R`+3fG&eX_?H?yS1v^yf|q z{={UkttnMfKhpWqlRr1Y8~vZTV1rUh`nx=Q&!f!^8)tULU#UgX+USLS#q7qTDJdy~ z!)rs!?DC&!-xUJ8t?s)5>s4oZ!+n22?HA#z*RAIJ-Q_JJ&!hHxD|mdU_1w)GelK3o zE1T+|&+dwoecwIhwCUJ+8;bLNp5PzQOAW5=Vm!OO^!|PUQM~TFg?i2aj6ooKxBw=E zw&A3GeAhD8-vvnYS$X#aW;aHqw4=2cuy+3TEX&7Bb84@ zK$g8T5K1!gC%s7jQ(q~A?-r-i^r2DAq{#I1&gZR+mFg5_Df|m)2N(Ee9}DcGp7y7q z{%ktp!`Sa;Qz=&m2T{ojn;P>n_rqC=$W?yH3Et&jx@ycP`)%1y!<_nn; zEUeRMm-}}*SkX6}PMa^Lo;$!fO`T|ZcbR-BS8*6^l}R2}1x&1P=yr^Qt7dS4HWU#Tib0l}=zi;Az?BJ;y(qvxMDNzQ{D+w$-|3_M z5BV1B96c{MUSW9G~gkp}6>c@zcHx8546n>Am0bG^6ePI%}U`9}BBt>}|HQxhre zn|;ed@=~|NKrB6{=k_YU(vPwG_#*zIFYJp~#wx#arE?&U8Bk_6%>FF1shV#?V4dNw zk!s?Z9syFJ@E(&v-f$M9fhXpQDKaYJ_RdR2m?MUw4%&XillLolAcI zSG*-;_OH`ZazR{k;MosN3+@M#y(Q+%!;lU^VLRz%>A`a1=sK0pLi{v?`JH$0#^&XL z*<;H44mG`(gFQ_Gc+?8nMv=H0`^xHUN&)Y#rc@MnAFqcnPoQ67M*NJ(T`sl`23yQ~ z*j2^j$7m;ATI=IO&08K4Y=cWasQ;(7sTn`R`2Sd49|jkjeAf`BJ}MIBke{BwE&mBU zz`GmQbGr&p*okGn5nKZC4osYs6=MASV^v^A*`aUJD%yw>&x)3(Z!9+F7XWiMakSCCoh+!TFU@0(l|B- zo-hsNQ0QLoy392094YxzPIEZ7GD*HN=h17y@3Dc#Smh76N?*@2r|!gNDLYbzIh(g| z+RfAr&aN1qS~B%xQ@qcGx9PeW>HB;ZzT3>n;ihL~(XYPHNkvDUK{ZhS(nI0K^40Gc zXWqapYprTxm-YJuq?Xn5uH#on*OpVY@Ny!T>cdfLV_Tky^mv%MI9ATy7bry+o+QUr zm7~k^XiYKeG9F%Sdgm5?@?q-ABVe;dkk}ZN_0jOyRN3Wic(Jc}BXLi$qRHj`;lq36 z=Chu9Hl4@$#le;M#{<-*d^-JK5;0EuwN*S@XTm|6vyES}@_&Vrk|#%<34AO&91Ug_ zz1}v>>JRt*V`yxl%yE@=-d7&INtrq!k6yPn^1JFLGV~b#JWB_-U9Wu7kGO~zVkniM z0H6LW$l)z2(|C%|DW6%2S11*GKCV;bYtO!o{;KZ$g>~pD=P4&SL;s_?FT%1L^EQma zh$><7E#b}~_;*%yhGtgZ-JwGeLI;lPU#J1yA(U;f>;&%cb*ep|+V5BC!oTth{^eYm z4W4t&(0;SfUgDbHp<=R{%jr{Y!)~spHUH8Oh%U^@@QyC(7gA<3K^-!^y&D(AT@cEL zp+Uj%rky_Jg>cX0zB5)v1b$=-&Mj%dF75J&6a*L0gI=ccptzaB}+s*S*?gscZaQpGQ76 zOQj+;psOf3559TDdd|av))9|B?+lh7to}YKg)KPCGILu!!3X#OQ~_t<8M6WnpuviE z(-u{+D>R|J!4JfwFRaf$%m}zUendulJpQXZIsp>7iX--dz@EkBo11ER#+<8TIPxJU zJH2f-*kvaIf52BW#Wo zkuguj%P01`)@L!(ry-qXeqwAA&122$`Q0B^zupshpR28*I`#>l+*|gY!>2sO`}M`z zbGnwdP3uTce+Ji^ANiIOuAG@(cT;bk!42lBrPlHZcj@bHYa-RVGU-R|M|N86NwtKv zGIk&Sr{kNUtPD z-N85b)-;3RytRYv|0{v!bk|KZq3`jKQoOU5;m_3IRQknBu;xzjX-B-Li8Rlu<>j%@ z*UGQ^y{2aHtTq2n1~NXQm+ECY&~K1l4Yilc8E1tSwh!;XpKIcMeZ<3LRBTF7EM~Ug z7RWr=O*~C39TCh-aXpA*IOW=e!#buhmUb>(!IY%F`eJxiXh3k1evsK6WvwY-_c39Kfc6Fon{#S+dgp*ZF852 zHfK42qQSn{*OrXxVjC!;UvMF`QU@Yzfkh1Td*|HX7b|rmj}N4)P_3}DAB2t;!#JN) zCOXsFcgG9UrkYs2yG;Xl5aaG(w$C^}ImORzmN%j_*xmH>TaeKAbcAFd-E+?z)>mU`y5 zJZ|p=(t_XN`cnc=nH+W{IGREk3w^G)xPZ>x-R|&QYUMrVDsJ+rnW(-mm|9U!Me;!r zx4pkR7w)2K`FV4j%jo&}BOD0-7Mv{F)JXhKWJ%7q*%M!!Xz!a$3~me^4bM+`)(Q7F zQcsxrv?Jv&{A9n`-4vjInqg-mAv@V%WWqMk_aU}ECnQvuk z<^0_FDX)dcgq8&71ga*|bT&4|0ltiPNHle~Ug1*e;QDG}yPbKZ&D;#$8z^c&wvX3} zeWWgxh&Jc5m`Kgo@4WO4fziPaL$h4h)2VsQC#h;m(QJx)-ta=~>O5t9eByU87UddK7??#DP|tadI`M)Wom1D=qiP06sOrPufhlHu zkK_}Iz_$OEyiH#GA2+@@>JW!v>v! z+aWz4cJ-L4!T-dz$H%Eu|Ku~D37k^_zCic;S+t)WyTpC;ta+b1qM2~;@v$=T%qmm+ zsMqZ*XakBEo=xegT5NGX;!oCKHdx-KX;6&P)pN5cn{! z|GQTuZh?N2`|0M_Re;O-?-nQP?NR4!Zc1Pi*{LbDdAh8>SH?L)BY%c#>1kElFQR*+ z1$3Y1pwXOB2c3am-+}9ImCwU`Jo)6~fd0sB@f6?b5qao7bQB&}i-A?bBLF@kj z&$?yzPvWC!6+9<@SST;yq$F`KR8EUgpXwsw=Cbe&#a1`2_i;q*Zi*#+}c8O;#Q2 zi0jkoSyO1$-DJjra$PUi|3hr5Z}dT;bD$IbWkc{uj+B2)#r;c{!0&XZ@oM&iVU^l; zXJvXxFW;)Gr}c%Ly258aATvD}@2_iT0VbU8o_x(EetWcKq^EO&ZaQ&dnEAak(yykE zFn{Tz=nL{$8aGm#3};(I_uxXJBNb_)=>D5bwpQ=)-}36$6qbul%?Lz~;oVg@mLH`B z^pxeo8FQ)1@`@jeu8s_M#&8wAN%PIz-h1nj^abe$)9=Ns3-G5+<0^kjkMGB^=I+Q} z5Ycz$jNB3b9U41h)ht&l-x4j%9X84Y&IL4}E^y=^4#7FH!6N5kETW!1Y<}qxXyj4Y zs|MV)AGUhOdyRw3cE|7V{0hjJtDveZGW)G~ZoKvsO=+lz^f)hGVHv$JEHp>_`w8AE zZvE8fAec_SZb&^JruMWWcrX3;NgC$4@crtFJ@CATL(658b85w1>3+Lt@1x;~{(RDR z;nwLC@wrYTs3_O2gy-+zMk*5eNoDmokM05ctedrUr#KYX9X?T?VlOJ&(ctV*Iq|%= z^S)M?5nRw2bTd+>&`T33Kc;+bR?(;7w?c)S;+fy9jiQNU=h~w%;dME8h`3q7N~vfK zE%Ys_CN{g1XCdnss0=Aoq`TuQVx8kXeDVOeWJaQ$@703N_hInu(A)Z2&xan9uUdz@ zF>k)3`gTUO_-}pH8_dovpni}GkN76>pc-Qz{?Bbz@XNd?r4loF*voKgluI0Qa@->@ z;lHsysveWv)ipBL2O{b^&%k_6vAZ!vxik)RdoZ1s`EmVBE1~_tG{Fa`pij{L+fs`v z&Q-f1{E;=H8|RU%(na&zKaP+xdh&+|eV6CMs+b zMeUx!yVNU7=_V>ud@nMahe=uZ$b^v}oQ6;$b$?2pl#1am zeZtehJ`|OE6URN3A6-)pHNKO<^`ZB|ty6NQMp6rz@3bV-ADKpFx@O{I*0kGG56Dw( z!|g-&Qb`JPHGC?Ym5|A1s(-eVYnH%*PwAAN6#N(mnnQ!g32m*VF4niIo5df~*;|RS zyj@*pLSlO02psr~>cAMdV{d49_*Cdm+QE-%wI9Mo_q%Ve!Y`kB&eMEGS6WVf`uc9y zIfouJgf8|0{P!Eh>M~!;$LbaDah?353N|p-L>!+gRt%yzgxL@L4WuB2ZqeD3l6puPw@dKXOI@MXLrMy2NF-pZM%XGdc_{@wpUbq z?xPr;#)5nBHrMmo|ChI@sa!AY5TK_z-td}yp=v`pmGt?jo;=*(@IKJC_D>C>Y< zb+Yv2(fKjaoCobI9Z7$=OE;Z3qF-Nb%Mn{>UP|UzyXe-)xahXnQy5EGs^$=w_amG! zGgWS^+GqjF*wn;95n&RYHQ6)k!0Z}hkL6OdRZx=TMw#azn#5;fb?GIpEjWR=hf zdR)Jx>@TGX-!6lv_}gTs&K{Bc3voNI)tPjZ4HRu+@d>=-M-q=)OOIg}>nJ1nR8{)I zNq<|*uhShDnmc@r`?(zjw>$x!g&K( zMY#84pG7Zm0^EsjANEbM#zw~P3)B=tYdfbZ5&kCSA2S=f;Zot0cHx7;ZxScWJ9;*n zDYEKT$y-ZqeUN@v`ujJV-~92`{TT67y2pvw5FVlBsu=rm#^j{Fp|tg%&2`Ef`87RX z`iNVJTbayFdr0Lu5-)qN%X9iSRI>ZI{RBXf^V9&8NXFBeWkgN z&pCB5Ut~gbqIWN0-)=R{aiThONX>pAjL;>jaKV4EXUoSD3}DkcRa7N@@ci@lL!)Cq8b@`h2Xd zuQ?7$q}^T3c|Tq}GnOgVAbKPcjXcfW_H6WdIOr}lqw{-x~%-z)G*EwyjcAYLZA(2jf-a zDtrY3XpQ-NBw{3SgZ=k$cYMg0IxZ+i>2raVkw=9J#rrep*%(Z?j z)4;U$sf|-Qhu;aA{pi|?C#KThl4p1IqfXSJmnVW9!!=Vbrkqc`)0y|HGEH#$-?wQI zGdBjOybDY7SZ#WB(;U( zZDjB%+F5gXdu(7Z{cJ)a3};oNk(Qz3TnbL4<(5!)E*m=OJL{#Q>s;Xa+e8^}p0Rf7 zsw0n=Mf+orsa*B#G0KH7|0Ol|Km50YjI`gqZo^yIII+O>-7Xqtp;Kj}X?5cDo#|H% zx$Fhc;br|sOM|!39%_g7%l>>v(?>f#81naXOG!Cagpee;&@OXcbgbOHcOq{cVop`@ZAb?odA3{YtZN&V>erbD4bG zCM5^O`7J1`Y08)3%;BG?TC;-xxVv3>KJQQ`oo5Zb?7MspTQ&+*f#!zN!PA4kh5ily zVtRL)b4I$D!&WMFeai3r6CJqgW&|e$iYJEgslF(qHl*Nnm03Q~J@Hk13g^c_$l?j# zz7aQFw!qj#h>s)0h5ZMw*x!7+hhuY8qN~`|yVN`yukTm<#c6iz$n9_=Xw02peI;MMRp(7-8{Ax@4nOPhGM~W zId&`PVA&?~7tmj_He*ujI2mAueVz|Sx}qLfLH)L#HSm?{Z9_bAI$m}t){LI~6Gd*I z+UP-?=r)|_PZh}fVC5Os&kBF?39rj+3fmUi<6(Y@UR1WsR@Ah3X&Ug?Uiq248rH9I zA!8C)a)QY;`)NOnI#t9uN3$KwN7t0HoQ*o(${eo7P)MpXYgXxg?5vNkpr}10^rO4J zU8Kr_x3@RZvNlI^H;#=T_{XlrmdBU5^9KVTaJwutDIpDB8%Hgfhc`XxyWXO0f9{*y zp}IONzA5nweet|nUrMNfnfV>VuTqo7sSj-mU7!eUz_ZrJACKMRbcapq^9Rg7-f^o* zdd|qFx}+YA_KNL~4}cm6V4i9sp7to!gA!K6sJQ7#991-GT9*VR26J%CX(%a5ONL@hsNc2iGmlOSYNz{AT22Ovk#%1oB2Y z9iIu^v};FWXLp$ny@|_pu{>H{h5r{3zP|GZc2TLOae7~%<`$CAjs-q6VK^@?Hz$;r zPvlV(5f+Dwn4OT8vOeR)@54*>=w)7uLHrfV)N!i9^i5Pg=ZbQre6xw-OJAyFva6;imq{0>uaLV?LH(#0 zhj>k1h0B;lQBm`9u!WlF%c5a~2e)i+1V&RF(`l>5bkp8?jxtq+(`t9qP1RoA1T` z(ZPD5W#L^Z6`di})0qyf)4Hauac3YJ}m;75|{Ch7kQkH$iugZzP*A$QMZ

    3gJ1bLK*W)E%k+s0NQP|0+4ReoV@LW^T4|wQu57_js4j=qgM3c?X!wHG{XiTlk{q zyU(>0fq&X3`5w*x1VlGRK0L+$vKg=KEaE3M)k$g{i_|@r26Kll$yUi(-19x7q1?nx zd9ck?hknMnZ%6pmvIT?s&>97|dBs*$ttK$-4H<14@5Fu#qP*UeFX&K5eM(>Fi1g%l zOFG`B!ZL-Shs{<|J8IjLbd|z9C3|7^s<7Qhyclm}sMg!9xt7%W^So$T62Iz_*c2Zn zPhOD6hgk&=st+G?b)xT7U;D^(DwS?R6WX8;x!*FK08b|@I?!uh> zErYx8vk4UR^VH&_^3^_fu#uWjclo#|MD#Ky-V%=eRK@WqCLZQV`qj0LqBK4vYxi`$ zKVv*eC)oAi*U(`BT~Nt+T#Hrn2hq)YQ6_dJ-U~cL&v^$@DXwGSLpb0X=iO#?qB$yP z9b^0HqPNF>!~`D01p;zZ3-`Vl#IlzUWNV-qR9wPcc?cG13OD^Lezi3dqf_hw%x$Q- zL}Q(de9643NwnkrJbvF;hn?W;UFsN3-TA}xgGRW{pJKrmeA1h#q1&mwqx8FW^}CuJ z)X&JOpO_Gl?5(MxVx1P-Vg6`$U9pADRxGSm{4{m?c`mM*(Zg6#Ro<%Ya8^-IWD?vt zN1j~4GZILQ(g4Uv;Ioexd%+&0)|RdsI_C(fliEV=j za>UQ;4c>#%_Rs;G*OZ6@*m*}BdlE)pPtQpvyx~sKt(K?#jh>G;RoE*9mzs46>(ICh z(+1{oj`fZ|F6tDw_RI0;X2TKwp^;poh29o;J#pR|Kci;6h-<5*6NKAR`4>dbM&?Db zIN4|bA9_94|FRX^$*$PwE>|2PB=E-^x7R`W+e5i-zg?(0RGmI!b@rc^ey@|)IiCk95mttpK=r_Avn+C@|rn9hopfZ*@Tqb;l z7W}3aJ3>EYHV&N_v|R!=US>XA@-)m+@N7z=gw_2R7Ms`o-3M>nAwE4Cx<%1_N>m#z ze*7-7uErHAtFnB>pR-m>->Ay@AD?q;D#b&fsN!$*jjkDMg%L{8H+G)XJvz=1b`VZI%pm3@)LUzsAFPi_(21F$mZDMV-C6 zOubcYG@Sa6)11bo)=S%zwkIujTJ6-!DJz|Md}sKJ;Br}EF(-Cz-2Csvi~#<~N0*r| z>wLJMxl%95sFR&Q)Z477w^J&lyem&`RNHUD$9tHwte$?TR5QpPH9`KZ)M8E#I+ON9 zrpcMErqxZI$2;^jAZAM>NbTRzHOEydNK#SV+G(5NzfwsA*Q;2y1I0 z2hn4=_ANEmpA%!_FT_4qi8>seCYF8>{UmlK{%4{MB(yfTA=I9;sTybVB~y;8hdv1Y z;OXQGEaJR>J>G#A{#BT|5VZfG=(kt>>rOcArcSi>{3)M7g>fp_NAmJADsDQAG@Qd_ zDJ7;V*0BX^E}79C_o7wQ#eQhcuU$Z7XGy&8$+Sqh5bht2 z>XN%m0qz)B%5l39-x?ufybhh$RH^$Kl3N5v|G_0)%Y^7YRKpyp8&!LWxb^xh*m7$$LeEZ{Q!?>l=MoM(oC!YjsmXf5QBa(;Iq1LdjhI4>Vgoah3O_1VsB>Y>?XUqm;;dMBMvL zs0cuw>Gb#;o^__+beZN+lg4WMiQD3BbRgxA^^PX!lkfB0{Djw5%+Tr{;qNIzu`8*! zcCDECgZk47Rg+Hos>UxLN%sN0f|G*BD)f_784XsDj`Un!5 zM<;9`CVj_Kdyx{pROVb@_m7dkEAm!v5pDBBNvqZR>gh^er&4euFjn-*NqZX14;Qxv z4$w;0B!Y>gLv6esn&f%0^(oW0QA2a$duJ0n0t30-&j-H>)ln&^#qU26vO3TCQ7up* z(H%G6&2f`}Azq-R&es3Z(^_sI2AAdMD5lEvFMhFIPs?1DxjyROck4Kc^BaZKOsd8T zaT#n+6v1s9hmMDr+WTu#a;MfyJ(jXPTr>2YvsDkp=f_G#ABk*DZ;(F6DG3X2Zom1} ztwHJQsj_cIH^xSDD^#i@$pNZ8| z6*{lGC(YcTX{ypI)G1%55xmR8vBvp&o6UxteyhW+!MB#)3i|y=oKoqLc5-+jzPSAA znSZ+f_05$i9-pj=J_Rb;Ly7O?yrT(`&$zlCkM4|C(b4p@963*&t0y{$O6tooE=@J-{vC@xGTD|x~UhA@ePW=^&9z%deX4UdetfuzZa=G+;0x} z^=SPJFLe{ob|Tl}+g9N~@%?X1qnKX_vkCqObKV>HT<=E_r&grm&6!}WEx!G&_)F?J zZ_5bXt^4OG1KmBPO5B_8nIo7)-5Z=Da$LvHkMetIv&JsT`+q}agRQxodghv8Z(m>+ z&vKCzp)RE8Ldl{!`vGT9Efb(->Q}vh5ATG=3)xN8gP*{?3plx=iFTsUyMb3JEhWte z$&siMA7ek>A-3hW7hblu_j4J(D{>W*k5a^^DO_Gx?a?-BowMZEifWrX)mvZ3Zo{%) zvbS)%{=4gNZcSCLG|1o*r(g0sv0SRw4b(UCCNBEkZPaD&r9hwKRLso9{VUW^7}p&L z>6M@{>U>Z;%t}Y?P63*!i!14Q{eyb^ly@5^o3>Tk9Vwe%6|Wu;1sADe-Dxj8DXTs$ z0v#4P|D+jyh-W4HOh3cO?xP1iFT*D1`CboHr2$;93-@8qSN!_P9a=9(zY1l{(L+6y z?{%EdzKw%3#S^++jdEhRR)&XpXzGutmz~DD+Ub1%ru?4rTFUWoD4aX=KD@L-*Wv+l z3mRcLP1QiI1om(%P2iT@8U8TkUmD@lW-!(!i;no6~q+PTk1g+|Vh#)tq^JH6?3mD!sW=cq47&2))3GB35>5S36uU$VD-A zWxO_5WwK{6MdrSwYP#C> z^`d?JM;Ct-C*P{ycqs0bM-{%F$T^Ve@o(b3z%lD5+3T|v&P&c&%w=V^<1QY+A+-n2 z`%{K|pRV#bP4=AkzGUs@;XZvrB_@RZmPpokIJBGcK8<$gQ^K=7o4@4rru2XTGUjGX z`HJ4eyzyxwd=ZX?$#l#$I83r%u`m{trW#R3-_bnU$)ADD_{-8jd0k9*nfA3n9{@oAa_m)m^L9_8vpqM$ZfxdBW=+h- zJuZlRcf{6XGr6Ploq;pbOy2W2%-wop^3x2f_?(}7@+_X|U7q}VuC0rFknE_)PrLn7 zujv4F`xPcI-cJ)A8!u%A?G$eUstrHbvGwWZpQ?cE<29}m>*374Z_I^0?F@;DP6sHc zDm*hffC5pSg7kZEW+(@Qc{E%AW=)k+?73j5DmCY1O|(UU8;QEAHH-(Zw|2ezCmqrJN}h zt&A)@h?m1VQl_Si(#buG<9?NiaE}I_jc*sDr^hNqvqe5|`rcpe%*gZ+98C9dc(1_t zc10)CrV2tB@AK3hhcfPreIJeK-fpXd=|vpBzQ36)TeOBxvQmSF=y3i!=!1!QZPT`R1RVB`&0~Gplq4hzTOjg|m zQB8>d=)3hdBdla}bfhXB{eRJw(82SR^VMq6Z{VRx1~Mkp*8GGSl!+PG)BrW3Wn!T7 zx~MQe$A-iov#zu8W$5P(J*qoDj!P{MPYD0(?6_4F;c|h}i8HRTZfqmwzR{hS%f-Jr z(kc3N>>YV5C8=cxhRP|&)m_J!{dm8K(m(J}B5QmpM_y)%cu9S5@5lP9U5}L2UyxaY zG_i#uczcmId9wKZ!Pnf$T8ZPFWA$T$J>%NZe+-1F@6*aqin7BlGu45oiiO?riy3s5 z_1sBUWVRc+D6%I8TYVL1MWs34$C_(4Fjg?$F!31uZm$Z~X&#Sw82_?#8{fifg7(aE)1pogmBq(R|($ zDSlK>m?0}Xh>=}4&Evn|2=gXRsfb_m5}FG|mNtE63as%8tX5fNt}T6HCMUy4 zldBig@Sjh4jKjCApU#<5A^e;=NZDX*yQhyF^p}2sZB|&7cop+@1DR$)svnaR6Q~1G^_PK>iONgOqtE3eo!s*L+GtS zpj_e|ndLhSY82+xSfwf*e|y-sW~dp`Tbu6~}>Y+jeLxF+Yjdf&SuXVLh#7;0;^(9vSu zT+cij>#N2wmuIs9m246`^9Hr_Gsq^Szi>6qxeE&^9$&80bvGS&FaOY<*l=Eq5fDrs zt7329ReStReOd_|skd)ENWCE|?fqTZ^TF6!@&D)OBYtkVxgY;pVRJdZzja@$>Y{E$ z^*NvxzZSMgP!#e8&RBiTAeG7P{qu0pwt#95epm=ssSD$*=1ISo|M4O7t5Yn;RVe9Dc`5U%opi3nF%&Pc`d_ivrKS^nmO&VXyg?KLg^V5An@F&>7i zNqM|CG+Q^uUQVgcXai^)uU3Y024i7w!Ji{!qlK8;GoI&U zUaj1*UeOCCR}_ehcIIDgKXJv`LN9R=-H0ZA!E5o6{9L1xxe8Z^%4fMn-{MT|=3K}N z&YBn#c_>m|$L$6EOM{%CI}TSKMm5Mr4cz4fy$&?Es`A4Polobe?wu)ypQ@$Sq1?8I zk?v5PJ!Hi) zR%S+rsMClGV;Qe*W3vJFi&)3$YBlis*`8W|d80YyW0*SrTeRaBIhPyB`@Quw)zINv zSzIV5Z&cyXs4Ti&FwH*{x?+8mkPZK)0{=jv$%5nm;CW}`2dHIMT30NhUEmQekb0cm z9duj9xfB=U9hX&P5++Aq;Y$D0DIcR~;A_loK1}VN9{bGo4z-Fla@Qs&K5g?|lU;a^ z@xU&^r6=1l1@PcqqEB0WUe`pQU2xn9Jfx=T-WwwR6;7DfOn}K5cskM9zP<&=)Q+uy z;J%91RTcTh9$g#j!e6rzIyx%zOcYCZK-|w_Ig9DNzrfQA#qIlG&f%2YtLoN$u+t7y z?|1!uarff}-ncU`nf3n^r;=_^`5^KKRD zVRF^)rYPKRcH>F;awm`VU~1)a;cKDaMDEPtIdaQic69a7OB8}V-eabx_llWET}|$N z!|A=%<*b&WgTZI~#0+yb0{je}r~++OPCuka43Sj_TP@AZlgg))XOa`&Qd7@n%#SFQ zGMeM_KCYnKX#-by{{GIGtI~~X)e^tkM{8(|Uwm)%B|C+m#F0MN8&lJDFLnioco9Fv zc7~}4U&X4DonbRo=xbxz6@!mc|9(~<&ldVm=V*KNq3iNbTHx(O4G|^jUhKpJ*woyS z11eJU<6m)VPQk|(Vn^G|wcO+mG}9S95PF+Vr%zZ#zlov6ctPHwg!ENSyHnQ7DneGK zla{hK9x&0PH3g)w{?C zI)QP%6B1jiJr|~Q4hjZ?ufiS?YG;@pa~t2y7wXW*F}YfJ;%4WgR&YYzvp$A>|WY+I2%*dT>!;cQc~; z^G7@{g!GjTl=+EKsviqfZ5oO43$2Cb!MVQiEV*EZ9P|q;v)1d6%TVtndeUI;r>OSS_-wSMj zeyZc~OYptfoG>rDqPjlsQ@j3d8E^)-R`Nue3D{niz>hfL9dw1&xWr`4CWn08L#7># zi&TV@|1cS9f1)e};8pK`j_UQNpX)E~%%{uNR0k1hZ$s>J+%Y|ISFmZQF}(9Khy29URjJ)m&!n_XS%g8F zZU)u%5f_8;lCkYP$e)@uJW4-EX;r5};^^)C2D40VtM0^&tKm%HLZOMlo7DKWiKXsM zO?C2L@Sd#hTxUw>y2Myc`7%1(|DXk}OZht`sw=)!%Io0{p-RExfozHMu^V`95sa=$ zBpjK>36vgL6m4RbN2mD0#PUFH{R!{Gb#+63TQ6TzO@<|!#2dzjMSqPnkCctXoSXcr zu9x1phph196~J)1fl;)CLE#Fm*hv|gu6rpV6pW$E?JkT?^Wfw|Y? zB-~9C?8(8u6nh^++pDLV+L|hRFD^0(2QL>%q*sjWiR8mi@?!8qXshGpm)brhd1m2p zJMCX6_%n*<6S|#qP=B{metXKFbE3myZ&HeTyRPGbF{0r#(NHgcaI1Z}6UNJIzQQT^ ztz7H`&iXmsz9_H3^;kb$BQtf`wctrvrUULO9q$X?x2Rt6-*AE<*2&YN!(_4em}uNe z4f7AH{WtZ+I|9!pZpQDWD~2JPzkR>tl*8sYPX#!k4KHh5YweQCV8HaAqgF)$D%Mz?4l?8xbUUwl1e z)}Jemr_f?f5pz%!{UNeM`5_OcnfvQ(}!h z6ZYL!K}a{!=sxyA;&i^O^&Ve7pGUPv@dEuU>F)eb2 z>eu>Nnx^c~)7UMv#%_2cc!}0{hkH_-bLKGj+g!EacjVk&W?u|Z`CA$enz~pz>2s$TebX88-|KW;Y%bM6vjVqbqYv|qB+s|0W$NTn!-^+ZvqSwm zE6>W~!5EA`fiq={HL#GcVJEyX!d{vRjs1YnA5YZBe+om0SzxCja_lSc{Q;TeEamhw znR11nf6d&hcloH_xAON>s|&mG8M;feh~^`alc=N_9<>t*r{`kzeUyc+pA8r^M@GDIbSxgx;f_eydt| znQ9)P=RHbApT=W!-MY-g{gZ>Pcg1>0RzAYP8`kzu_FNu&d$)}IGqw3sx^*T$(N~3c zIy7(|%8Nid{XM-?cKUeNGt7Io_UaF)<_mcVO4>zVbFt?R{OR96sq2qaWhg{F98FRF zln(!l8buvBcDiU&$UfaoA*yawuT)hUX)lfuE5D+GZ?FBmw@QmD8cnh2G-K4I~X5-1?s;R zyI1~tm_spn2Iy3Gu^;4-Ezr|F>&UY)iYmDebAMhX_97j+4L;tKLb69x{+)~KR6Hm* zPvrrAE`B364U1kGZ5=&830+Uq>!k*GjmPyZyrd=#tP~vb3tUo1TrMNh{-gQ% zjkhn3*BIwdPHX7y`qr785l~xRLEkt}QJw8~N2sc0;sl<49;Hd#6 z@EW}YjV)4z$tq7x3B0U2H`;#Q&8PAJRiqxz%sB5pQC*=vwZ5x4p@&W5`ZabYeqCqC zT%8tS-C;9C-{i?IJF)pxmDyuly!)cXOt`ujDZsJR0%mfOVf=7nQ=mgI7CahiN}c1d_MV>)*N>1ETqr2mJ_{}G)Ud!DY`1slv|eSA;ztt<=Qq54n` zstQIwcUEBXRKKiTQ8S}6)oZu%^@ObM8FpV!8rXSP^f)*6LE7E8$d>d+)61lnN-v*2 zH@zfJS+3}>x_sxTjb`RApXiyj<*s{FCxq$;#P^R`FK10m9ie*rSG0>~vxKU15-!c9 z8$6Zv_NV=}luBL4JzBuCRS(NtVw&a!@B4-)SB8evlV@rrrW%jufjJAPQsqs2&ppw{ z>L|+-SB6eF8^b@3FV&DCe!v_*P?LH^%_O20GK7A300KTC7F2>)H`o(5+>v&eNJCHf zmiosV-nF3kaLXiupXhi6Xu`MrI%-zowZ6TA>u2jkoqn5k|$TLz9>&k_EFm((0v zQb>LebjC7oP-|11PV+j{f6P3rcVwE0@<=bdsXO%DlaKK?>Q5OQ>%Q=f@I3R8a+{g- zTDT7tXi?xJyRS;3xqEV+`Vdi18mfY><6Iov&$Ia!UNKtF$95SqVjnMs64vWWPEI-B z?OyGoIk!{G=_Om84$QM!wyI|q33ZhlFImy=$#EvLc?N&E^8=}9!!x=z24UV6M4wg} zJG(1?(|l_3qbiBX6Uhd6T0gqOg?YyRi9bSdA4H!xEt>YtP`x&aK`*QKjqnru#gY4D zlQ7QkhwgzV#iRBjbzX{lE}5n z-VS5jiS;H=2s|P?Zo<;%&_F7w-=$#Pn`wy6)rcp#&+pRlE4uHeLaj~Q+H7jzZ%*r* z1#M)4j53E_#$o%*h}-1s)$-CzCoX&;H?|8^(%pO_{0S`dx5-tt!;5soT<|xhiJ53v zT@GzQ3p^C;q?>bsYSSY!=Np`L4NS4R-!$v;q4~keRPtB!QVw#j4#UbjvGM96E(56P38b;iCa+y02rBu}|&N14!pYvM>|s@os(QdjqXn!L9` zPOCr#Tq8CN5TQS#!6#>KUR90QPP@sDYxQ)WkKuU98hTc&uQq4!TAFu3t9BlIvJ_h0 zDle_~YoT`@2Gs=Nw&R@e3tiDHIdTnDc}Xs+1J&&Dt`#VlAG@>dg2i;BW#b;)4g1W8 zeELzkhkD+c9BjSEx4mxB^o-7^=~~ zlBY>rRRg?TJz|PGc-_w(l3n{*3xC_gA-ipx{jx+pd`Q--#AWr9XTC4^I4@N{Ybojf z&%%q-4qN`m^+u>6yKSZypROgnF)G-Z)e7%WUvEySX~D(1POeSm z`0s79#d64fwjP&pTs&j>%&%ZdYyIS-!6KeV8;;lc81NdEo-XPJ9Ng-kGE}zeB6~S3 z<{-r15kKi6qphMMo!0Mg*4)0_B3DGU_g?k3bndDi{`N1Owp%FQFZ=$3@tk5_lMTn8 z>mIa?chK=P9*_6{Z|qNrs-yzY)G9hlwYv=}>rYLnnCKT@NBM7Q26bVcp5d`-B4dAQ zK{=};fM1q`i(7cYBdnqiF|Gxg3$Hj-l_N1t z*T!&O+8NZ`vGm6)YRH8s_&YJ6J`ip(I65V`-^H1?Z-Y!z0)FQ!sBn{WLPcT`7txE62I+p5fMI23Z|>e`PVzT;oz%x9#+ft<6oyt*&^T=lNf~ zLIJ;Pn~`%HdHocA++4b<|Aj%yw!TYjx3Fi=R@JzMaEyW&cVaF3xR>i$*GuV0ZTU_cx;q19@nQDHM*OCfc>JdP z@jgvsR^X_-eg!|-MB)0}A+V6zd z$%ntysN=~cx24s=TD!!RWev=*) z@0-C-&6(P*TJE#>ZZCNzOPo-A8Eb}EE@8q=7xn@R9x3i7zW6gH>eEXK?%c@iCb!e8`&?-D-=qojr^WvbH7yUNg{lT;scL@9 z3miy%8}Fi;-cH_mnlIs3x%9U1cv?*}E{{)T)Gu(vx_J6|5qL55P)5Wrq~d!{hxb}D z%og~Bz0{UA9P$@1ic@$|2u9y-cZ^WAETY;TN-9^pwtu+FE0Dk@={$&2HaVNwm2@4N1gWw^(zY(axOmGmL~4KL&+Kla`Hv4mJ;$Jr zBlz5F7~>xJY_z=ik8gLE@7f9?oB7&P> zte^NwUdLoRi|-R;vSD<`=Wx*>_Cnl0Ippo^iRIYZ?Yt)kG3h-x?L|{C*UM(7d6{o= zc(uUZo5^z?Q1wQ(jDtlgh z|9Y$=4IxB7&jdH@cVB<<&HI^cbXYu|!)^1LTwcy|UuQM-vzi8Qt}cM8meODsadXVG zHiB}{FRrhQoVZl}{Yd^@=%k{jTt`J%qoegc#ry)y1E*$9^!MdkjtHV~lM9gf`r@ z4pHy9sSn}-OgfZU1+5M8JVTtK-+O&|id041_78p9l@psV=%ZW@KihHpA%Nw)6VG{8 z$2Tex>)){IhdFw#!Q|KdiqWIa`-HPPX+HN8v(*toVorCQ zAr&ZrcW@;iL_mdT0#?sqhq+{i|lYzT*NIol@_w-Lgk-Mc_Si$eE(YPktE8_#Z zX8%x{wB2*mS?oxyEP8YR_`{JQ-RclO!iFoRpD{ zQRjQnxeJ)Ew9wf-k9g0LCiLxuGM>`0+YC>52tO~O&-M-zBMx%>E^xk5PoJ5b=Q|jy z>57}IhaYaKdv(Fv4yX^b!l81}na;S9`gm{$@6-uD=`3rUgx8*z72<&heXHAWw$YS~ zQ@jhu-Hpj`%{JL;B{sGk$4kyK7^Aw^4D0%hYTHs=U+3yKz(R|}kppy)$q+?NmCWbW za(lQRL*&C#8Q0kY9&AP5Jz;`G1#`?w_=Z_SAMj!gp74d5EPE-F>jT zx1F2aSpZPb6yCN^)aifpCkfpBamsZem4J$}{V+Wik3k7NR5x1to5vxCQ9Ot*yUSI* zDyQDo#n@aOf7Ui*^76;(@sFq+?)9e|Rla|8m&;%WgZ)WX__75Q5z`H|Mi%{%fhKbh%C+G!IUxg?KLHGjUsYlp#5%T%fK--vk1cdO5c;?y%C&C`*AfF@j?PFH>ZXS}mt=}x3%*UM6MS1`ByYnx)@2lmR z2n<$Qw^A-%mIoo1Z4lsaSRgwUJ*iqu)tNciXXRE8|5W$P{r>4@Rn&kdM#4nZ={7In z`LE&l+qk-`QY|~kYx%vhF~#RgF<_Sd^ZugONv`grFx;rH+;?~4bdvb_1QW`p%h3UU-pFYHIuues*m%88@?^wj{ZDgkogPFdg-EWrF zlD_b7@YLH9>v5ENK7YGk$vMq~y=DimMtKN$wG~y{YW;-H9Z((r-aAfowg1y$P?<`f z#DTlr-{fh}JM8-dw1kmrHWzq#`pDf^)uPi)vw6#R48T~mtg?PQdXwSV9Koro8PnW> zq;7S=B&QbQ`^LloYke2y@dgC=HSM4%?7q|PStw2x;__{QiOr>_Wq}KlQ?Y+j8CnT% z?32|$7q?OqjpEP558-96VR5TP{CR5Pm*b6Sch9`#tKw5{N52%wk3-CxWx{8yy5qEi_7wbUoOtE%*%|I-Y3Sw)uQ(%fl%qe~mblD$(4F$$ zS52UvF5^MI<#tSLvh1^s20Pg5nvsF)io2^hDDY!={buR%tm&IZ7M^EhkD)`$3$UXmx*+lSxDWRrcfr9NS~JO7M5(bIF>jR%KKMHuTEhhwzE zNzNB}N|#W;f5MhF_Ir zhu^TL!6I98j;-5F6*w>cUFE3$ANH1w?%LE&pKoXOmNi=9af8hin55oSN)8%^hy70` zj#1AWo0i-~ROW=H1x8)X4?evBmRiNN{phFW`2YXmwC{-n4gKU)JwnOzZw^BSXJ!8G zDvp_g^L_qlTIYVz{|E6d7q(Ja)h;WIvMi35bhiCR2fRgH%~h%nLmBtuKkxOA*RK>S4~yf6MC98|Fk4MaJS8^o^mlt~xRSw};(jqa{yyLD z4y><8Fr=1!T%|NkUL7YF?Sl>Sgw9ehj&hr?lhrNGngY(LVW#rDA zBIO~kn&I1SfFWkcHB+$1E&eq5T+Z-?C*S83uU38N=74*aWTy{1C$f!N?w$U$xs2OW z-mM_xmQa7r&F}IJhCIP{ebr}w<)`oG>?-BX_gA;??3tDJ%%*x)#V8XmWMst2+)OE4 z1uOJT-j086_YO(t+-~nP5i;28$&7RV^3WCDfDGzoAcpgv?NK#?rhHJ3s(x>Qa=LMG zrO^YsTO~<`Uz6LeTxhOLm?OjU_W@O+w#@m6Drpw$eYRZH-kpEZnlA!LE~Xq0g@P8z z4UY#}augL4RSv2=Ur%(xu_s&WzX$63Ze3-UbKJRq%abidwe^(e-ge9c3Vn0=?Ji8O zv%T_}y--TlTq9%lw*Nj<(OqOWHso5YOJDd7H?8Js+Cvo|!sq|m+k4^#^of;{vk%CD zU&>t-?8i}jaQW0-=h^uI9B!&_gM1#j|wmU8{6zQIc0 zKBp+$70*6qT4E>9m5kc{VQjXEzNNFVSvcG#OtLVBHddW^lYhRaYJVZl zr&A2$oHYgXVHM)0>@3q2k|mSV{Gaoy0e{$kx__4Wby?qfWsae=_#WAJo_^v*w9b4D2ix*L^-;gcUykeBG8fBK}j?wk#NrWg&jjc<0!Yhq?C-)rv75ILt8 z?*6%aJ6wL5g8xm%^KRp=zDq?QJHEF-c0GdA?V;)>r=&NNrP}M}jdFySken-0z$0#`*KW5Ot{+?cL2}yg27BjiH?12PIXYJA4Agb@#frA)@#E`wLE! zywr(JDlz{@(^-I3v3}ux$Ls_)AtE7VfY{yL?ceS^9$OD~cXx~3nAmmfICe{iAfl2Y z&1U!g&A#_O^X!h9`R4mpyz5^}%?+QY=p~=DZgR^*Ae6>}j0B?J1GD zVk{Fc{NgNfCq)j(V?62ycGBk*?_Cy4c7{Frg`S?cxJl zYNFHzZoC8D$SAl@IXan192O7v}Gz9F@<05M1aciqt`q2Q7Y(6(QZ-q}PdMLv)hm~UaTG^k20h5dB5K13Z3HEF%lp@P)e8G(2BQ$g?>FJsG(rxRL;eOL<-dXqOlF)% zFpj$!+c#)(iS#6R<5Xmu6zLX@mcNR8e9BRb1Wnk@|4Kk&jf}}5Bx5;#xtQ~KCh5p% z{0}?e3?nQ4?>T($T)48;Io4!2AU>eg8Jz!3G*LV@LM=vkHoDo2r#%!uxflLXG)HLx zMNPv>$;bYvg)K4%|2YzUEJgp9aQ%uIg&2onK#5G!u1t~*EH|NU5a!uPv@4{$m35L-Oo#94&?;07> zov}Vgpa=3;0cSw$zJUY%!dITg|GXdzwFVyB3sC4;XgM+e$PugcCl>ErkXH?{oWU#kuKDHKqK`-$JXcn;`vs#wI{C! z+nKGW`Lvj5=?sv+ig3Kb3w*N;3J*p_ane4w<8sfbAGR}2u9$mixo|7 zBN?tEC#>lGOPq@q4}K8x<0Gh98S+BL>~<$weGEoy3pfO;(74HbItq=sjWhRU7T0H- zjPTGZQE&T*-Hv$6o=z}=>p6$+X#OIw!}c8Ebv_ld|I>*1J0W2_@PRuczse)oAEL7_ zfpcbpoX6p}k41Y|=ZO3`uexA;evEZPe3J%@^DO+dE%xlYe*C{c{MeZ|q{uv9jCVH| znJF@Vqu`sIK&NNnUzewTgxEcX?f_&;jzl-!CjV=NMTP!|M8{YxgYc-TT31n9;}Lp( zJXMqi!1StMP2siJ!!V!kPbBK-#XmHH4R#q#T?gIKf#_-%YVR#2YS)*z;AAw;d3p#n zLCU}5o9X6qXmk;tK*Uc7OU0-};$3-dut1jUPd(!^yNSv;?9VG#rr` z4bzwY1w)7%-z6p=i6=S?4HJ)-9b?%`M)AM+_?^(p<>7_5LI^#4KL7yFR8+WqZI=;{S%yDV%FcgFAyUgk_}x~J$< zPsZ{n(TJ_!2ia(-QEZiMqWu$tMz!LZ*XO%y@be4M6Ivf3UO$Tcg3A1KHbo7$XPKaUz~{ zlXdC@_A!UKAld`L_}2T0>NvCdy4n6ojST67B^d1g##AmUM zlCcibtP{vQ5+&FdGYpFleD@EqhwcPSW{H#UApbW{`cNCe-DB+GFUeiQ@zqA++m(Tz z_h-))$Vb@^uKE~zqba`m8}Q^lsL?!5%+)(*>HD}LVJ_~M=LjJKhk zq_XXt>Hp9=W2L!7kM|Qx9F7(6fxYO_kl!R*@V@S0#e{$xeCA(9;v4#bMgKy}?!*F$ zmdxdBKcYuN+4|!7J;D}RhOP<24xq<3d$&p|qrWbKSFS=EwE_DpPh|ZAdUG?8$LVCP zp2wqhlKzp1XtrGX7?1oJ{#_KWCt@Sa0RhRt2hT@?ULw2f0=Cj;^2sK1EICBg-eGU_ z%IMW-c!IY3W*3yxhk8$BbG5PV&=tb zJoJ;;OMUVD=i>{zQdzz_BiV%*ua!Mtqef9HBH5epi@PwA^?3Y`5vak4cfl*q;7m_q zA-rI`o-r;@nGeml?tRh73b^F1pw$i_>5sAXPBZU{$VAHlJs8W?8_As7!g%eoGdf0r zV>IQc*0J5jZd=C{Y>Cd!0tY&3$7s7V;&(WU(_kEfxc0ty$%$Bg3y8`L#zvY7>U<50 zWF5b|NgTX7kEQsw-r!Ev@i4V?Bx%nmcas{hPB*ZoB+?aFR#D_SoW)~z$11R(kH~Z) zTJ;{S_5v$rF<$R9##@YjM4{Jqp~1w;A_>SFXFOpSPysEUug5A5;Yf1PL@K1pde%9} zH#~(E{A&Q{%`(Xb@G64c;>=R$>F5 zLMkr7Pg3BUMiTjxGec%_`%EsLAgx1%{bxwcC-|OYkwFsTCHpuI(V8AX>~#e4a01@+ ze)Mz@Y{;tky1$8OZ^rt6%^rK9d)1(DBZ=4qORuAS?;zJZW0z!FhvF4Hr^3)#r0;Of zV=pLNII-%sNKgy7U?ntnoNYZ^;GNR{u$Ll00Jb9A4}x%~lZD|!h2zgy3vuizkK?Y6 zomH3Bpkmx=V-*w-lN-$ui1y4?ET1aKw-1cuOl;!~cIn7By@E=>l;+#EU~yS zo>YgxY7;BtFJWI(iFL-IUAN*9jzWv4SoUBc^aiI0WYvn5h9_W2#DkZyXE5JNzg8=Wr$G-}PX%jy8FUwg_?0)Fd`{W9Lz`q$3e_eik z#F9g1&|+e=-|<^Jp~JF?d3=J|bQir_la4s^@b`zo<#IyP77^_)LL<&a16(9BdlsxA zmScHFCyTqBTajgh-3RQ=JQjQPd0|Zk*naVz5#hw4ubx?1f%+az7Bw!lz=sO zlZeG^R=lVUhq10Iu(CU{ZnNk*P#qT3N>JrkI1C-xUpZFhZSdkw*o&Q+w@>U*o!QtJ z|L|WwuqYGB@AXBaewNgc=J8MMK$%^sIUPyGA~m+e5$0tDrYIKZ&m(&9J_Y3c;2Q$x)nhRRAeos8x5gdsJ$2kHWFa^zg9}MgaE9EG@ z+Aw5Kcci(Cu>H~iEUc5QNs7=VfqyU2CQ0L#p!H_}S< zj|NTQg>5i_YkQA>yoL^OC;K7YHi2vYfq6Kbv54ZDxp6grfgCL5U9s=pY`hyc$w?&3 zF>1ziVDv>y!N8RhF_EW?_A0J@Eo9tTBz`!vXcpIZCu33(EgsH(<}yo`!!nYCyJTZc z-T_O!hK&B3Q9r@eh-Ds)v7;?wF7+dD&%4amf3P@PBS&OdC0~e-e`fSY@x8wob5}+^ z2zJgoR^C18Ac&m0`sh^&mO%lr770;ZCD|9#@uwvCx{FzLxzuXif%ZJgxrHH}v(O94 zpsJU^SL4A)XR@BxlW*9S`I1ZA#m4Lmmh47DOy>7pkW*BI2Cax!O`LAzPO5&P~>MEqsWv*u@zf zt<~;f{{fM{#@c!WX1ty6x?|C%aUH+H?m7WKe_nzSAt%HN{E6O%kBkly>lqD1KaC-B)}8anN8a_oLurcdosK@JL8j$MFjBEz zVHXg|C3rszkwc;v6avy$jraQzmmNu*uOZn%zv+1Bgx7T(FDRE7-6y<(cOb6KK_Od# z6~@3g`e+K7VF3(gO%6u8 zE9(l8{juW!bDepiu?@oO z+=p*Bm?-a6>UJ!GrCk$`Z5=rD7JTa0T$zI~o9L_o%Kn9Tc{uua9Sr<0mIffpV?l*O zhz8sMDd+`5zlX)i@|J9^Ixx_V(J{0w^`o}Ip}uFXX3jDNnES!}4yV#s71Lak%6yyN z#GR?M6=SkcPi>YdnEE4~&5>kjrx{0^#+a_qrzyZV&)AF}hbN7j4AqPWOr1?-hSkQC zrc&cM!)C)k<7uO_@v)(Yahfs9P=%gY-p2n7?#5g6#u{hnN>8OAI!$b%*F=)xmSG3= zH3t|@8x~PhE!g|!(;1{u?hwdqiO%DC4!lx|wl)a|Yf6K*FQ^7T}{b|e${ zD42zs=*CUh)Z4KLmx7vDY}?TCyU1_;7fw?}G)!B(0zFl=rVw`}$3k{aev;nYwV}6H z60<+4`M-vG2^R!Eg@ww7Llu=36%`2zv*NhoH}{(q5@n+Dyt10Iwz9MGpwd;fP5D&e ztdy!2soYf4l%tiu>5cQ4stDtirOI2%uZqWtiOQeKzm#1SQxv5vbIlY_?lM9;&!^u}Rp`vjI`9fK?Y#QGTmP_P$^f+HZM)W*-4QK@qVF7u{ z4XBwsT-Z$|;(w?Yxq`}`z2tSNqpc83?g87W2GPz&ug2ueZnfxNYjy$y^y4zLF)oR{th8|PLkgeN?dI;mXpYeehITc&d{Co!eIa2n>bEdq~fK~yUc3s?^;$-kHdlf>@Xn(y=ZwP(x&?DYCQ+QgIl3%GDq$lVESQ;j@O|S#5b73N|$f#AphS z2eDS?u!b+girhjZWjFZhQl#$y{EO4PcZAnshRhR=uQjW^m(?5QNC`185BB&TCd)@K zKDG4?cwRim{FMk@ICTluVCOfY%0U|tya`}_V?q3;g5PzvbfuP`D{Ef@`WHzh+DK}^ zKPHbRgVmF07A%?Mc=*Hq*N~qPM24#?83r9K<>2W|#RnM)3V9sX=|v(?G3?KU@sfbj zRb%w}fC{hRh))ywi2@t;Ld!11VjYBB+yTy%fw!jufvt;1>;MBm?0j_<8?FjyyFlc_ zpD6lnu!6SOlZjMSSxui@El7_e9Z$3%0DYMWK6w7inI{Wnk+O^A%DsV;xRt7JMykd= z;+2d(N1tGq=fh?*(n0GZ8E+NILrWuTytcd#_48hmv#pa0yc13BppR5bdk;J9HT7*C zfD>hk1R{w4~aCanl^R1AU;BC~-z zu8u5fz;A|hHd%`%PSB2>?9c4UF@}OSVq^drN?6l&cTk@igh4H3VP#x3`XmW z#DZ&pMbMa6jj@b6FzUge2|-v0)$w&LRFcR=^L(<~RWaCbXV^slVkH=1Z!~dtG+z+@ zmopgYJ!YraH})}le=}CXXy)QbVyCT$E2a@WOaz_2jjY{9ws9EwCH0s+^~eXYnw7x9 zFUTKyO<&rn)Pk5`?o5r7O61elqFb?xxs*Cqai;Io>^Ny!M!%nlrlIs$?1y|8r~qO! z>dDkCFvie9F~<1Lc!!?5JB?F~v*^;d);QMK&e+oUKVutX3p7I=qdyv`64|#JW1%6L z&U~K@QHHmMvxco~+YRRo4-Gr1+C0KA-Z0%T&oJ3A#4v$ZO${v!Ee)*=gABd6Z(;~E z)G+im3^nvbBlR=%HFV+Kjy&tlV>|8#8%FV}t6{hy)Ue#J*09mA*Kpi$%n)w)&+yey zWUv^%8-5tHWEuA`cH{WEpzW3$mvX!ZjhE>hd51H};=DA}L@70Tm|9U4db}x={u8sP zWck1pNzbG2^h@+6*S8m)9VXIAV>4rzz*c5ok>Ij8xX>Pu5~K z75nngT19Y(zq4AcJWD}a>3L?6Im#8(@t2}Coa7E{YPlQrl$_9de!OyItykpH8x2&B z+*V&|W_r_W-vb&u1AKBb{8lj^sy_^(y7rqh zn$H(WA)>D7NC~m0?;WJ+Nu+{U=V$|-@mA2mzwsVM;O%w7_vwQl){tx72&B!Qt51(Y zZ0GWLL=rqR3tmtG-enfJ!V{uvU-7Y$v6bIp2aC8!B=@h875DHu-eV;{#3KL9ry^_b zHH^^@_Rntc**9$E``}w|`0h=-qj%iDWX?UpPx_bNz2uYU?Bgl#{o+?ov8&_QQrPz| z{wEQ+RER|_)@&`s;&+94Tn3_97yDkx(YN5}TX1IG@U$o5Ta5v~T*KoA@QL$yTvzay zBk(_C@S0=sE=%$7E%=9}WR{6NLjqx1_hl5@Gq?X{hOY!~UIN~Gk*v18_~Z}4a$ibQ znCbEO`5E?FT5@oHle7v_-wjq+XLx$Pu=U2kXdgtz*hH@Ibm9oxnf-f+BjD>J*087|f^DU_L*$8u(3narJ8SAd4{W!`yFt-BI4RmJ=aW($Ea z?a8~9*~-g(nB{6}!|14>F3xvHzO6!^{g$~f=W|&vd917??te2|-=h~FQgtm7op_y! zYhf_)w=pBP)2m?}>vIU(P$DPY(P%B0j}sU|Vi=z&``=l&sioMZ_oH zVly4aPufSVx54n08{6$2E7cY9h;rVi=k7JKY&KCra21_jyHH)f6@8HEn!U^#vx&|) zCR2jx2^FLwP1oq;bHj9qDpcF4IK9j?hn@nHs2wqYTMttwQ#(^rYBkoO!f{o$O88V2 zOwJ|`la_lglhPzJskzC~ctu7+gxr@<4YJH=G5+DX-k6IPG}CSVH#(!lXftX}24k^N z$**)KcmBhNDw6J|Kq_E0GS#!!g=}ML!#;bVQHPtln?`XwVxNOmbb(rd=eC9l-iOh- zH>j_5(sY|%KU9CF3qlIjB#Wujr9(G+Q@OY%zF=d{ysvpE+jw%6X3;@vpLs8RNiLi3 zn6ENMZ^>`^gcX@f-+|v|Gai`A;$ZP6-?H3Un6Z-sgwll&0M-J^oqSYhdgw4gC z98ZSnCb(nEi2iOM2D}aXAq)&50?ihIm3a%M+C$4LV!Us-rGQ$0$KEJnE5!mfQ`tlc z%gjbxTt*#nf&44++FJ4c1Z+|*_a=)1T-=f8PHbAT#;_Ur(|JAlZoKQ%?l z^V$twS!F)0fcIFQts>8Tu((~ZwLN(qz$XDP!n}#SSHkA44SHXfTRrX@+G}mJ1Sx6F zRtJl}H5O7kwyxYdvh~J7Zp*A3&apL$1ooElkv8n?EtsKY~k>6BA(U{WV9T7Psv)YjD=YntFtk7Xcsh2Z{jkekc{e^bRgykhl@e(!}UY;XZt}9!4xUm7q z^Q!m`b+Mb96IE-CUEN;V8UNvb@PbCL4dZbPR`yhM=o})6;%yD`elb#iHQN@n>rUkU zR&1OjJf0*5dXh+9I8op8++QVzD9XUQL>%uDm%NRJeue)j-itQ=D|E$2w)aG3#m5*P zKchS1ke=~yfa19SO5SM-(dG>9(}+3$Lf`*HzJBNVcb?@DL(U;5IfMIryoldCX7l*R z{?7lu7r&Fqmc>o1s`=iLd!M;F@JThq8Evx)!C z;MD}~#ce9_*D?4*6L=g4=KdFtqqvRd)kxS{<9Rid+bFK=P-3kExgQOJJ_wyOg8RO( z=6l<(dr#gSz^y;;jR(K)$2WR08wT(=ocF|6!`W9K`!g|1sVC3-aNmWk6Sr>6r0&cm zaXz)3$~Va{(BqdTMMGj4VZa#c&tO-SZ!uvRk#XO@#iX`9sTiVz2L3|;Mb|K z*F1=Ndoyz#h_TCgr#v?sk$4l9w;(OR_BJ!u|1jf!GT(FT+B6aCE*6h328-q@Yvduf z8?2ZMteFd}op2(OXV9|8(6xuz4zV33!g>I2a1UPMdRE##eC(~;!U>T){eDZ4@|Wlwq$Lzcnu;i zUTguxo+{Y&xf8rISI}932#`QTRf6?q!R?I8ii5IgR|8yCC>Kst-`5?2?@m5E}w;4@5c_>n= zGm*W%_^;iGM$|%@wI@5LF*!G$Aj(0+9lb!EUGZs^WVdLDTw96C<{}C6@RhQWj8Wvp zyeGc<9)8yi*t%k`!i(UwC&6j<+p(EVpfv07u$F_}%s^VtBWgJnx&0U0NHCvKU^M+e zX*%K`i#*vjROk}xlQuv{G)5~_2Xn8=7R*)|E#txFi53!XGWbxz=prS$OVlu)ykoNj zplL*e#R)y8v+Fel&mH(o!}lwqpUg0dB+zIaWP;}1_Dt-J*1a>lray$C*c@x_{17alhyo~OPVz4w(yUt@Sr)g3hBC3NEz zuJtQ0wpXBRpO^tZm=C#FmeE8w6mYYRRwpvTsxoIXi9GwUg)pCjnOQZ!=mTJHwYJyQ z8&8y_9aif^dpuzhb95oIG!z?l2J>_tvv&^BsWo6>Cz;z}+@B=IbP>NPl{Ih`f9e*# z(^tIoD41EXtP~Tx0tr5lj#U_}cr-i{;sS&E$VMHWi&R8`aPeI_%xp?aPVU5gi8Odd<3UE&Bl8nL)h{p}RQ#3Jm3_qrO_JnFE6exG znxPw`de+KQIglv@#J4eNv2_21o7E9^n4l!=nF>WfwVb{r>D}H;3_KFaF_$l zsJY=S^O0VFmGw~?B%3Ym$km^QeGo;Z3xzBk>ua^_fIM89Xe*J#gTj>I75|a0ksX(g zWR6V6g7Bh8lT79>w@QnNk6n}o%MZy~NViKSNZ;VezM+b5V@WGn6L~e+B4WKn+F`V< zC)f2F|8fKzLLpl%+avuh843z|5QV3Mq{jIqrIH5y3% zl2|+J4Y}r3=s}Vp-70S&tw8U_d-S&$Y3pVAW2+(bmS0D<&63q7alZ^6t-oZiG#jKv zC*6cDs|n(H7e0ZQk$ehXK#s`sl|1Jk;XK(I$a<+}D|TBJn%61nX(Oz|iv!ISRd-cU z@^ZG?#`8vJ$qxB3$wuQ_lU~@Q?j&_Gm08Y7=P%H~K`SRUAdW!EIzY!{gAr>*78 zt*j4)*{YWE6UZl}q*%IKW{{9yX}d1$Q}mH^Gb^mezwIexST>j^TVLXvT(kCuqtp#%K_pjQg*A~3LeNyw3zYILTy-yaLO)?0J6K&n zmUI#-NLUtG8{#v(z&eURCT;=UdVs8)iX3&8E|pBRdeML2wWYtcFNni&j^iRTEFRtT z-R1*tM2?qHpN<{Puq9?#KUqqxG04JHA}wRB6R zds$^k2af-sZNBBF>6)cAyq!P^M0NCcZ&)_ztgrsm8g!H#AUF4i$Os`Wew&^vA6Z!= z(A)FS*$=5J5^5U*-)BEMe*?&Fo~^gEkz}wfRnktjLo$o*zQxw=9HZ2>lK#xK$grX! z8~momAiQ#03$)!qJYrvKGs#bBxa25Ea4(qqNgVrPES@x?UyI3rHsB?nL?hq94_ps= zQkNclrPz0?@Uwg+?XkatU}RLYGuLB5PBycz=a!N9pz+o=XuhA;7U-;|%%)Im(bHI# zL>+9$$(V|Tt<{YP8Y4i|=qBTQ811U$pZxh&7kacDv871fA44u(rQir+~gjaum1WK8oGoVDqu69%0FUz>_b<>OO{-zmz#$ zh5AHd&6BNICt`-=6!d>Odnv<1e@$%+(Ps!}e!paWeTM6>jQxn!Om4BRW0*PJ@FQL# z(PYwU==2x(xLfhnOW{d<;gcfd$4LG;jB&nBUA7(|3`LAnn4|-FHP=C6MW1mrR)LO@ z&H^3qLR3M-`mncN4D>MlOpZN|wLe{(E8?nu1BFIZh2;30-1 zy?(<->WSs%3yNy z=4_tAGdT|<_W;pBne+#`@D8@!W~6^6jM-W+$B&~U-!V65;Xg^R1!gc}8hY_P16>c| zn`(UfQt*T&*kLuLKl$}pxNwKit9q{FSfrvES>Ff0tTwXuAmcEbZ`@~3O02S(tTQ+1 zBhDm)YaWYSu8iL()&mx+WQrL&rzC#ZZac89>Vn(&Fz!}KA1tg0ylI6rhHp!d{p}ff zFSLk1T0EM#gA7*hS4ktTO;;?tV6ILUa{Ln*^EDz?HSjBo@e0Sl6gJrw^T~G5f00et zl;bGJ$hW}0)H7d?aXu}O04luO9bDfaJ1XTRdCDk`<%+&wbYBoHh{sxSm9FOVom^$P z)EmZ5CAfscSdB)ivo>Wl+3-$F=~dQ``CkKz&I7A930XOf+je`@QupV!g$4)N@!PVrH-jFF1sZ-}5*I9eBZB zWXvkAQ4IN19%QDxfVqoCM60~TcX~{om{|KLf{q)J=+iamz*qP&H`%w8^ABS#ErHYZ z6yK^Q82$i8Xe;YXtkqBx-e6^Zk;*p<@qAvPktgF#wd9_f(fCYD(OYeZLkBS*1MsUv zBw!oAtc-R_!`It`=C97bv;Ymz*^ZzGLfA)d&f^8#L?@eAxk9Wz5{?Y-M7@Z6_<{Yg zNGgNHF2xIcg!U7wdHzkL;3{}P0huzbIHCaCV&2(=*FO|pu!Uzn_`+gmpcG3J@YPqK z1OJi9X0v_+M{N%S_+J=~Vi%ErKvShi>xvwe1$@DXAGsZmbOgTXcp~T$j@_3rUw{EFFLEJ?DRv^}30Xp3f&+_{Jz=A2qRb0+1D}?RyBra(Tj@zHw~_vdSAF zF$($pL%y+{*^|N5zrcT-!>8QOQ9U5TU>4lCR;-2V$kS11jnmBjSfVx$x%a_Gd&sPe z$4@K3qJE7G`39~uf*HR7O?RHzeG^3X1T(lRSkeU6xeGW?eLT`@9OFK&Qa`R)Q*>uV znDc4i+sk19&SsQXpm{Rk4~$0Jjo^CCBjb7!qy7o}dH{GudytYkWMux1x z^A+QSL7-73;7!@sV6$0~Gl@t|3wN@Kt}2 zv+2mQ0m#a|_?K(&N_&EQZo%`sNNuWQ;)Ppz_J+9a7d*z+#CZEt^Pvw>!Tv-9-xC3R zB6~`X&}cq0kZIyXq^&WP63Y?${YJj9SnUXQPNm|v92$`R$h1OMbd zx*B#Px2YfO6MtDMUaROAH$~2UL~lUj!D?yF3g3oaZp+pYG;a}-H5twA2dnf8v+FHm z6@e7_8yz>9*BfBKx-hpw;fU_DdZ2?u*6c7OO&EIRE~6XBnm>(pImflXi+1`+BsCa$ z-W8oGmu50&8ek6y=+TjQ{@)m<1nlHbd{eB~QD0gGiJyo6@dGr|mtXylTO+<1%PcEJ zgOo?Vx5EES0DCyZK2~#GPGL`NMNf_3ESjM&Tc90gaa|U2wdR0j>_V!GeN&Rrd4I4} zb70BDas}f!x?EnRF>|lk5zy11ojcLOk<4$ghEy~t#%0dq7uG^D?`BKfxVqV7kq2@< z^+0%s!pND3UUTEh=Wr(B=+9M1PO<-QCKB3&MpF^z@MEI}N2FKAv7)gu0I+X|99i!+%|#Lf={ z@fJ4yJ1}CKwKhE7F-Yef$m)0K;@|B3B^v%1<8p|RIgVX+oFkaW|2ZPJDv{&)ng9HW z#yADym~5Abj(B5MysRHShIg8%?#zLG%W0PrP<8uR0O0UId3oW0n)oHJHBAgZ7;% z)s$p9Z#r#yVR{AYN^K4>SLL_!`NxTL;ay8iH;P)#rDjj~TLEPA$}DO+=Kdij{+o`w z_sn5@cc{4?^`OU_hw<;@Vco8U*|ii;>>#(hM1y1DDrJ#BT!G{EfNj{CC~y;ahjr|{ zLxJ3)kK`Ahqvz69YF6)ucX*xW|MLHT>>Q_##E9qNrM)N4s{#?9if-6Stn(rG>;*eo zdkH`5CiCbp%=NX*d@A?N zkWh}&QY6$zB!k$G=myKWw{f&_K5Vokqnl|o zowYxkWb_(<%`V1zei+bj-qm|pM19b zwY;*h6X3{htnIHItsTLA8*M#pMQxcTRdY|XN;66m zr1_wpsn)1Zsk*At={sLl8L60~@KxLw#tOkg6qR}>%G<%ENheeIJY1}KZ2#D~X)9pq zOyQ_I!gdKJ<1`)3JrfP&f)?G5JrqI~!d2{;*4S)mSa#c)b^VAa^n^3w4)#|C=6ow6 z`ooY4e`Cq?=2c6im=942ccLQSxS9v3*>V_m>;`JCUM8!4JF@I5JQFS4*uPoj#a17@ z*xAesHF^c43oN}FTCo|}-7Gk-VqLBz7G^1id}#&rNeK4DNLXbX;qW}AGeiff z5y#P6xSg5gSEZ2 zOSIwIC)zjK*Vdoqt>T~Ls>aXe)b(H$4`jh&*IzfG2y;!}F`7~DDRvoNvp!Qams4`VC zswb)ws5stL^HIx3aw7d-zZ%05b0WwK(IqKP71SS>gUhvn56i+-{%p!3;S%AXm5 zB&=2gGhn2}K*ja$NY`A>W-lxCh-nucVNTKq{e>yd_hxQq5hSi3gvbtq+_18+vN?Mi-DGn`)D2y*i z$+zTH&1?Q=Ozy7V(K!J*!?I6i1!n!5**5cQ#*>WbjJyn8=EO{8*8Qv%*|TzX{*KRW zk#{G5aG|pJK}nc?zM;3No<(N+BDo|RAbe5`Ree;uX&XDVa;)d%qf5|@agKLx?Xt}! z+9ls5*X4&xl*=ube_YDDTyyT~oS~bhi*oAh^w`ngahbz=tx`K&6Rv)tGAM(UO%;R4 zPMAhaW0ho`?IhSgx@Bz7NY4n(lw_UG z`X{>ytz!#+C+9x?lbq*JP^GX_(S+i&C8eeAWpxY_jAu-F<{H+1^m08cy-jb-Pr?Jm zRb{wpw|bhUrZz)+z@fcklH&-cPfopbUvwePgPhknzjRJ>j&uIv{NDMQbAZNLh`aE;yk8&$nAzu_>iiwI^3KOgJ zuy90JFANg83H^nk$f}XT2w@uiI0p+egcWSdg>}MF;T(PBo(r#p_d>FeDr5-xLX2>U zu5z=54nhUtHC5_8KID>*XRH)Tx9trSbjKi_h` zjY`c;-T2)%?N-`^A0a;_zrOvtm3|`QXy%EmTiMTYe*UiiXKh|q{@g-S(Sj0RePr1o zV<;nPwUtUg%J(W}shVnjY4>J|1an3MlHuS4GVKgoa6|NQ<_HSc8Jko?94)e7qsEiC?3 zGG3oqw!+xZ{KIm}HbttD9~3$(ud6<*lQb8!(;WgFJ2_e%E<3n8IBTz{ZzwkjTV-C7 zZkA2P1NsBSuM58YNy*V?g`Zk{ zs`#n$ryifyebRqA^?BNt;gOS~Rz;`9gvGT=kR(-0p7HI+_oY9bGk#~8e;4F=7cD5g zW~g9!B=+drBcIV@rLpqP?bh%?>hu!U`whL~%r?sM0hZg;t zooN!+=yL<-`t9ltsvTDIM)lX#0)xj^Jyp3yrGEo_{Ga*`uUPE;%xk;noC<3^Hk3c+ zo?R}u+%UIGt|czrU1C_vH+8*qZ=BjY{cxP+nCGz6!PVgsTG*`FrRl2Ct9Ph-s{_=( zRd-aYRWnt~RLfNhR4Y{5RcBSnDpz%ox`%p``o8*)I#|T@tL$xAXG4NvyRnbSna*g17OT};;th9IDOU>R z6%CXfRL#`>8i_VVd(ok#;{iv1rwT`gy13??Bz)hAJ4fFf(jEA` zZ|9yPyBh4w+n&Fz!?xF3pKSHp7PGBn`;eXfyEpFby1&<`w z-q>hDLv#J6^?d5Qt2w3m*Wl(=&sI_fjPZ^1?(7*|{$9D8u8*BVbf+CVItgrlK`@6Jso#8g6+y?hID{Ph1HXC+ zwa?Z(Uwuur7C}Oln83IGzkI*@qmg@X-FC;{+C>_F^?l`j#VVnj ze4OkN*uxvJuz7g#Q4$xdd$D6j1^E|wn6O0AP?@Yet{SFx(VWl(X(P3R9j-b^9o-xy zjxuITPlrrwrhhdRHLmK{%8QEWf<}H)`p4#LU1kn99xOXlI=;AWVf*~{e`^13nLRf1 zM7sRf%pb+yZ>FC9b|K|Ua>e9LU(0{Jlr$`<4O{P|gGrLFOTLy*zLC5nW$?GQsUyE{ zOS|(U?PpN>=!~tIkFqXjU(WgRJ3M#JpJsUxd6n{yVFGaFqUdOEt*p`UFdD2AE+G*#-tMxG$iV`>>KkG&2Z1 zQv)_yiqBS&*J}La*&v#oz?&mrG*C~4PADDd>z*$pD-x8KREyQyHTSh?4pv8ZT?gmQ zF1K9wyB#Wb(><*GCXXo^nT-2br(GE1eA5W9m}HIQdJ7lXaHqVOdH^!=hdJiMbPUe6mv0zy3^4%S-L_ z?P>CauT_&W6Qbjdaed=%$2!F>jPZ>59{nQv5x1h~ficlB^JBZlb%>vt@HVl_SBI4H zsSVR+{!B@qlGXfo-@HzR^-9K;9W<3%LuK0(r_@Cb)tpDU%_v{R^P_jDZ>E3yN(-xu z2`X3ZZb(3lNj1Z2{Zl)r&g(jz>L%9hSZ{E>>Gh`8Ygw;OJ(qe{>JF`2T4#D4MV(o- z!)j&KY+7@2jc3)ZA%P)Ns%;A178FypLe<7qwp9LEsY#_bfvp1%2Q&zH=HJIZ(BJC! z-tVs8F~3EA`~5EaE%sZ=^D}=fm4D25`Hn3md@W7#g|Ks(Tz*d1yfv*BK1WXR79T4Y#z<-3l zr+=c~48Nbgi+uxqUsN1bF~euBkC)F0?>w(|USXa;Ds-uE$m3)AQg^L;RTjCgtHC*2 zm+2Jkc-mp2wywrS9jjceXeJoIM5#$*>uqgpaWTI!9x;TM9n?=MZCf%FJF#2g@Pf(t z|H}*gb3FIaZ~5;AIfJwBWtC-C%UqIiBt7-l_+NK^7XBFY<4&4;+UoDmQ`M35lH;dpovM+{HLW{QUSU@g?z-6V4|5PH3Gt zF!4m9cT&xyx=HhsHY9CKx|(z*=~mK@q(@0dlTIg1PimbMlJqfgR$`OH4+-NE)Cp7L zAIG(edlK6r_I^z5nB3^s(MO_>Mn8+z#T)RbdFg_6?fJ$$-5Fh+&eM6U^DgH{ z&N8wW@0a*KV%OUF*1Zaqa3lz%|r$v}+I7VAlc{gNvT;9CKOi zGR0+#OLdnF=QqxWod0$n>fFfLtSiu^=$`1#>*ni5>t?V`)XmlH(p}?SnR5l_|2gk- zj&ZK-veD(Oi<9dh*Zr;ut{S%{ZcE*6xV>StTCuJs@tp8>Qq&{>VfK@Dok}z^-}dyCBvnn#)p%^yuNK60+cq;b)@;lb#^DzY_#)M+<4KrnNF%r$m#!WcyBmBZe@Fe4^2UH z%I=hH$3m-BrYZZOf20q`a%-dy)>qRzk-Xzt=$q^FO3#(fFCA3sRT^D#u4GNgjFP`f zMwJXLX;tD^;$PCHWOB)zl5r(VN}iW!OB<9nE^S&mgT3iXtLTU5SL)B`zw159+LW#4 z_>#-2le?L02r#xch8k}gT}|uBei6*gK{LOaYl2yfvxLD~ZHzy^hm7WH@Lr764J^-A z)gHs_3=5{5%|x_Nj}A+L_43%BZ*dVUas_q!&Vm*fgBCl&*QgJ2{RFgHMLa5uIGPVE zMzK1nl#J%XWNcL+Gk&7{xcr^GNbVw37CH)Zz;@OOtLR3(MA#~95*7&yxQe@Zcc~C6 zOcX}pL;fv{5&q)YV4<(@KVhmclTWq@C-5Lmq{0}5a*Ae(af-#%6?m)osgNsulr5MQ z{gm_ZPA@4RE3YfxC=-W!f_0wPN68R9M=t1dIDId{v>w_!imWDLR*_u0SSqoG5{G#Yw$v29!WLpx(ID|5 zaIltxCvP=}m@`brOoPc0z6_2zgr2+K4Ck4Fiw!f#>1|?gH#i%d48>)y%WjrkExS^7 zu56KgE;TOGm3`Bn&@a|6(6`cOl-?^{S30mXxb$7gO6F1@W>HS@#p3nFD~pE|`xGmS z%|%&7$wg0#P8RJi+FZ1-Xj)P4qSoBH7KIdf7b%J`o(kg%pBFwV3@h|rf6W%@S=%D^NUs%g%us;cC{#m?M2c1 zqUfSuMVewwv7)$UaqHrN#Y>7;6dx$QSNy%$qoh{Ju#(lxZCR6EM51G^NVfr&Gz5Elz*q=?JfC!s!fE+cgSb5 zzeUuom@1zpAIxkGA?LCdYp{{L4v*esSPJ&uaLN2{DjC235uG~Ois{$oY`U6!ke*&hk*&MfQ>wrtdjOpvG%_Uu?815Z}LB~;k2Yt zBT1~L6vxQq6Gv4OiEw}$971e&5;5iLur0-o_SK0K4r1jTCXSrOnc8G>GMNL(0j2*Z<)KvbcqmVz(_x9+5B)I;IdoQdAS4P!f(|^mv7)V_ zxuTuoFU4dpChuA{A zyS6>ze;MY*c_P|7;lNBJ(kWKltpyWi3f{zAd#1=pm^`7xG0wq@c?DNVtSNL6mPI&B znRIvb&TyI&)<<5W|g|j+=(yyG5c!4FxZ1EeMH`GIvt~n z$cV2l@5*&w!K^>TRo=?@?_pd&%X8(WT*r9&I6s#EOZUppy!yp0MII@C!Z(hwTCU39 z^2rkAoh~&Rs%I`DpR#dl&|`I5h!$6C$gsAE~b3FJt>B2)P)bpp20F=HUn znI>!%Wf?@wBZ#U^B1YpY%|((N!&C1`1U{PUc#wEQXRfmg@!DA8f)~-a3$07oCc`ut zj_ooI-e)7?ZC&k^shV4x5UZ&HAH@q^Z63_mKk#^75uG`UL<=P!btn}pud5y56P%jQDQV0oyo-& zD?8|o;(JBZM*2ZEulUSDzHXv1#hAcWOb%}`wI71`ZHTD`|2ovP(sYFw-X~(RCX**I z*}Bxp=wqHu?T0gT928@$+sp^(0e_0lf49sLY`4r8cy*2p+#F)9QmVCtkiQ&646i%& zA^stnzMm>E3#r$#iONrViN%POqMuqGbGu8-{T>m>IARVT>1+^Btob8ZM0r$}k&#nW zk7!q0VqKHTH{He@e?U`V-O0kwhU^FO#|W9@5Z1nk6FFqy=>m*MaedJ^Rd zV%7&>`BdW?Ibu<|^H>EYQ$Kz;iuJe*2Hy_qjvgj;&C~qnyPa zF7f}rVLh7Q05t=-=uiA;7L3MguskB*(A*?O91b7o0eHnOm_T!2NVS6-=L2_02TMSO zU7TfSdH#S|B>~T9%DPNdD7A@E((QnGBkwrsqscss>bJtyZPx ztUFouZOOb}z&u|Z6a&vSPl=^W_0pQWK~-^^J&XHAQ_z3uJ6#MOUgr zO(2#qK=HR?s-lx31bOSMP%0`=lgdq@QrLuar0*NyvrsI^cx4iP^G+r)gamA~-`Ij$ zg<4TUT;ZDVf|x=ApGFE1*osGpJB$>X3H4aLjRb$8*lxkCpfB!Jc|SVVc13pAMsk;@ z0zq}2bwFeEm-k>r*XMO(DmZmRYt}*+xf64JggiP3gJ}V^r&`KPXs`$5+AM}!(*@3F zEp%KooU2WCrqxE+SbxLQ3MB4&3$EI7_#}UE#e%4hb{1|*bMnK)x=WEn$QP15?r4c4 z9=O50+`I?Az*$ykJD3kGSt+jcnC?$ynNhGIYMGTV9aN+nO3WVEi9zJ)KQ$dC0=JH= z_mgagOyRs5K_tDpsUg11XsXRjqrzD`R<#<`*=jTyC9LZL<16DS>X~)JL#R$=nMTH5 z#!kj+#$u|xWE*k~`36ra&-5`4Hcl|E#DsW1d(Q4If zm6_A^VW_mArb`nrG_g;)p7p3<#5AnDb;PcN@H8I4jmd+>S)O@*+uq%x0B)25CeccA zm`{=qb%~7Sk7RhfBX>9p?zD_-A%)Bty;74(TP@JHvt(!JWV;J4QW7;&g3;LZ(BxrA z_MgntGIo4)In-~FQ#{7BaSZv z+wm)Wiz{R?pCKl`}c3Yz0Itp15?Vm7jvH#`;wUwdksI$(bV zU`6;yi(#~jS+=JoYvGEC`RL2Yb!`S0*$R8=3LMPs_KKBlVCke`0USW{uR-EWMJ5hr zc2=W`fIqx|+HfU?QF*63SF9_Ko#8poIy(@l7Ji~N`j4y%mc>5g)N^^U+!uY{4=+^oM291< z#vncF@}7tA8~gnk*2GTi?rqqf>*;=dk4kV4u{r+myCK3{VI@A}H)hBq;fqj6r1LQ` z&I9Ipw>}saJ>0{=8j09F7UC&nEx`* zfVZ;`M$;#1heUJxZZ?=DWZix+UqMqJrNUw;jDU`;cVAdrp5{VRsY!2=nyZ+bz>Ao{ z=P%3xY^fe}FT6q?P-QAgbc0W~3f%oX7Uou%dK<}P=|P`Au_y5rs=RF=Z>A4fEdemA zv=$$W!jfh-n(LBJGXiNc8qNP4jqXg2ab5UqoB5xkc+%_1XFiY4oJ^i_9dd08umkQ` zj!=DLk-a9zSgN74qH^3qtb{K};9^U4tg2lwuHK+u{TR9RjMyS96s|#OpQ4 z@0Rwgfp5&}4_L>q?JVglJj(_>F;g|W6E^u;#`lOl+x1^ik<&>2P&n)Ewg@;fBUwL* zWG%O+%2figzPZ`Ytf$`OSE{T;nJ%0Dg}?R_JIQ1k1{ZDy-#9?eISidShr*W(VgUGDOoPjqw6#=Ct1C+#!#)mE+{ z*=JP0Y{#|orxIqmDUH3y!dbaxdS<#0$Lb?>y3U|i;;EOC%Pj?s5% z_=JyyC?Q4gQ2Y=3Wd(eqRf_$JE!4lPqR^v1{^dL6gco@E)2VRuggRmKV8AM6G1w3L zVeHMptKP;se?)bSOjxuMjx#=U>raHKP;UETohdw#$nkaqy(`Q72~zAyHPCc?hfp3 z?CwtNz(DLkMGyt-RumCXL^^hfZNC2DzeK&0CTLVWiDw+j@Ad})*YH2ABSLWxtivv{n?;86aV*E{@Qlxp zim#CDZ>T&C9&wH1UmroDn&9nOtR8^nsyp#VgTPcYp(t z$mL7awThyeRTlL}MQt=YbVDnfIL=+7?%8ziOI0eHc}jgU8e`AxLC4LPm4=y_i|v_e zW3X{$R15+)I>{@`b3lt7=#LRpqO$O-=5q(0GsgYNRWTzSE?}wO!ale`Z0{c`>WX~R zPCUDZXzr`%-=omOJCOwwhZS*GeE{0A#yBoTeTi98LZ*5`I4;4-QptVT8lGh=_76;vRQqnVZg z{XMDBP?x0=H4AdhuZj3O!aG*bb9OFBG2A?iibsAtE+D$=DiuRN!zVlN`ku)2t*`~6 zmVi5>sWM}w3bs)xMoeWifzpf{1#!crK%geX5YK_Dh=Dz}VN5Q<4o%14D}!vqYrfCb)rsm7xu?9s!lWd^~4#D11&?r_9CL@azObQ#>QU8P8&v7 zDq6)lV%QoH*Y1SPQ;9sq4pfyNiqtud7GgyvUr*%AA>MPA&k-!wQf5&XzB`psdx+@# zL5$+IU~N;hk-_9xtcAb50d6}mDg#w9+pCE+q2-|B0B%} zCF0nd_~mNk$JQnKur-~G+L4XgL3(VwIKc6F!!<04SeVr!gN?Bywn0T~gSzksrP;5{Q4NU$5Vg9-7-vXPy(ht# zIAej)j$hOV%sOg{z!R@Gl`;QkZbkLxso?ZZ?4lc>_6vB7WbAe`k<#vHrA>%6?L~&o zN-~#j!j0r(uX}SXM@ekhHYCm=V%;w>SFVCKVt$=wMjS`$`L~>4{}lHi7^_V5F8EGm zzCuK9X{=#^Nj~I6OeMm3I@;zsGBcKQx@0}>c zqq~FKRnYuZQZ+GKq<}ZGx*?Tas_{&D?m<)RfW>H8$B5{E&Tow4w;Ew3Ji(Cq|7R$@ zL6Hui$5`0L)z})xxEG;ZZ6kTo1IRo%g^r(s7Vn9i9}QaVW8U3DUO$%P_GfhZzsTqU zqJ@oQn0SGIW5_bPjbygqPihQ@I~6N_ANuzliPJj{8yEm5yvSw@&yB;5?_|>w8@?(_ z4W#ox&d-90oyohFz>ja1nDY>Lz)O6_UUd1jFpJy3=%X;}$N6NzuJ4B9yKnOYi%@}f zP>R)7u7fXB!UWoKqpL3Clg4r>`hm4rWxXBk>^9dzf>%+bC4hA_rK9z2t%sn!x1 zJd6M0APiL~l024tg(BjWsu5w+lB}x!*thFI{24WTxGxV#i5YAlLB%%NaP>Gwh#+aX(8Q(rr8}v5cmC*%nhiASJe-hn0i}`GuAh1s}f$cCa68Z!IvvmKsT-zEB}`1LMi$e+Aq579@_ub`rIU zC&QFBfHn0dKcxkj(E$6Qw7I<59WC97+?9&#d*E@DV^_IiUDc-3ZDn3zOO5QeSPO5- zbxAX6q}-Tn@?+wW(mB|075Jp~a8|zNK1h)PNS3*166>j?v;sLZ42!Kd{^bow@K9LS zB%;2}a6XRw>e1w~oMT))$KUXav7trkRbv#kWAO#|+QNDdgmc}GX8M*~?$6}wxwikMJJ*21`ys!oR={v0OR%(3Kr4DsAIRek9HxUHuy&j!w23LIqvRp9x zZRum^3`72hI~D`p2VymDBL2P~^*pO#u{oI(CbQ9otvvT7oT-akz= z+)i+LmT@Y6(TSjbD|o%~Mt7=p7Qz-5!}VJkb+CqVqXmq&2iYs~Y$YmvR^WBws5+Qm z3(nD-b2V5!c($RjJ)GbSc**0ifl(lSq0y0go84g(7Shk)6zu+OEZI!h{n}W>BdJ}n zf&cCznofbaJbcqkM$2iWNG$fXHPLj=;7dDL`N^=}E0`IlK$K7L-Y#7K9`LQA^4ngC zvlbrN_xK;*F%q5<1$h!#d4?Hw0WSOrvn>Iyqy^5<1N`|9{jEJqTd6W$FSJg9-y`7E zCV)&c&;p0Tv+cw_3nHI2oY@vwgeHfbGHJ-bH{`rZ@g}-2%H1uzE!eT2g z^M)1gLT+nU9=+fp)8Y5TJNA%oy9$qScMz}!J|IsR9ii*mNV@J-G>diU9qY)WS!K5wH`bo06IKoOR?OlNjA~&mF638DW^^w=Cky1)zCr5$Mc0y{X*EU8%_lGE zsB}j}{%Q(d26u99d%|XpL=#^Fo4X$!`U$L8K9MA@Nd5X;$6@e$yI^n6BHy18U-6PE z)j3#d9`N*?;PVH8{=M)VPeeahfUk84KHAaL#rMJDAA}EiCOE$y@AzWuwb`sQ@FE|? zbAAwy;$rE{G?>8IHp}p%A7$N*UU3#H?lZh_5nU+kSghoEbb0tpENu*YVHkYweYA)( zuzNS~K)$s}Lq8~u_2-QZ*hfAC?B5SFe2^HIQSb_m@?<{mJo?3KevvQu;03z4;yJ8D zjqj4w=1wP9Hi8=4N2vclm&)4R8AX|BMq9CQ+A>Z`k!P$SUpZFdNw47JIgPa2fv!3c zX;lR)!(5MVh~C`{JES{DL&**sfd@lm)$WJ4JBSs!6&7(8^K~5AV{>@VY&hc{ zyt)}o@L;6As55Yf@$|=H!}ru@4v&V(-y&tLoPu}B|Gbz>6PgT9;vhVX)lr0dJDGq9`;&< z=_!ojSGdV!Nk2$JlK&tx_A#uZs4Be|R&p6}b@Sjb*PC|X(F!qz!5b%;%#xkw2NSyh z8)YXx+&$)_Fc25W2z!M7@)2)sGW|z%@VYgqo-iK2!WMMPAiN3h`LB%@SH^BTY$qSs zs6oh^@z~S;$iaE&wkzOYx5I*n>VucjA|7Mo#Z!Mh89kx^>5~Uuq;e!?#~Vgn3?0C3 zU?~P+pNI&GM@ZIa=FM|Z`a7IV5fw?wF)kaEt?x(m(4K7jfb{)gFWVxMz0e&*P2fi4 z#7<=vE@lpj+G>BnAA?m@c&xV6SCE4=jo~pZRPOrA{rwKVxe0H^1oVlTQa8(Ve#?FQ z{(JcSQ{aocQ!%N0u^vf#84Y_3OllSGW(wGN9Q>bR?u@Qh7X8hQ3}$O{k*SEB=D(&q zSmKY|m3UbB2O#WPsVBuGGN*f+dcYF*G&LkMuQpmiM^JbwIJ^XIU=5F}$jjX-WjJp) zts}d-D_txcSPEc$EwICh`0g*0jeCGD4#CDt#z?q>yXX(W)CLdYI2=tPhBb&~yKxcA zGOBU!;n_#L>I)omp0Nbp%-*oYLHx#SlO3M?E{w_bcpfgmgJf*WQ|n+P$gz|8^@$moMun+D z7*$7^GyGc|T;Lfn-3$Mis3{bO7NAEDD2b&p0j}tSwKKAI5t3v!bG4RCCVK^IxEeH? z3;Vd7XpLK7w;E})3%T-@D)%0E4qMUfr#EpRYi!Qp*IP)`(M+Ve5li9=vgQ&pX#?`* zu}n^6R~4+jM3`nz`9Qfp*>cs0hAiTp)v1NC2aMYX_nD6^a31^kFifpI?5G2b=mg?K zI>3fbh98YZvpk6nEvFZo=sa*1ZFxGnb4O&kD-wPLa&;G)kqslZ2RiODbfVLI-ZreP z(QscW%!rN5omNQxHj>8Ooq4o{*%AnESOxvK6txf%k5%r>U%j>`x4}>ue}9&4!Coz)$5M^Ea91;3XPDzVHL)y*=3ToEV%+XcPSz7t`SKI#M}cJl?t))Gj)K z{&|sK^%hO!Hw-UdkB6>w~#e~VxS8sg`!!aNo=SU$rWgrH0AMqA#_b{V?m z9%Mw0RYkPP(AV1+-UO|C;43*UGk@pV)1f;7eU8_w&OVl_G;tB1g|sIk#~q`dn6 zNCP+7DLm^%aDWPWCmsQ3mQih{B=axasug^3p>;R3f|Ep0UPZ$=f+uPOW77qF?K>X) zv9N*7CBM8Qj7Ap_KZYu+3Z%;=bd!BVl*BRW?jj=&GXJ-s?R7=3u*F6=$9>MhBfN;Y zQ4Om!3EuKKl5jr!e?E8j0<)?K5hSmvbod)29RY%#C4RLE*1Quoyb-L8f*-5|KU|j# z?A36GA~Gro3G0A_?T(hv13hjO$Rejh?|W>^1$gdya|f&PDIKsXJ@C2Kgc0})%FE1o z=mN>6IJALquzV^$UU#C$_ENi{7M7yuG#TF0&%xE`iWOJ~D{vxcFdIhs zFtKL-#EP7Oaqejx0#aPXI=n{Dy*r?Z0Y*3y>$DYq$r0!qFJKPq}n*RCl9LS<)bl$ zO1M%1Te3E>z1NV17qKJ1QY|bNjx2#VDl5D&oxpj~6?QFLLsM#c2XWU&;<@<9H+sRy zOdz`JDfRQJp#%70`}adnJAjnk4>}cDIa((pyG3nb5e;+#*}DnbQ)g8P=B_F7Y!Q0w zAdqSVp8TDRl3(~M^o*m?pp>0#BIvRjZSx3G360^iR^ijMmUXfoO^4Ku#lgs1cgrWZ zfMht^Rp@Rbxib&(`Ffe+jTWOP=spGBCKnyRj%c|@c<}4N1k@qBAx!A;Iugr;#ptb4gg{an#X~q3_;93oF6Bn267&4BU&_>I2a~|6%c0 zVg`S)Dn=r7kgn(ouI3(QTz~B9YuMtCvB8~WS<jwqy>!zyC5 zQ(=@mts{`pihz$JYGC3Vx-I+#P4Nu5f5;C`BdV| z9OQT5mVY6)Q_(NVT0cR{tBKY(f;-!fS^Zts2Il#+&3C+mEvY7QpV%RlqMM?%;vt^G z_Hqq;bq-ABRBB}1z@KOh^X!8+*+ZG59Hq)reO1@8y{+y<^@g#k3Cfy^KQ@WTsBYE+ zthVAO`T zE(Rr*Qj<0xE$D;wbu5(zT#qI;he6W`=s(->Uwy%AF&`;;7<+MnsAWf{DVKS zm@P)Dp4Kn%BO}oZEoN^bTrXMb@Xgnm*JHSQud$O#!P|IJd9e+V ziOcb{E$5dG;wS;DDFlzqZJ3_~D_iWwUF2;ZhDET#s*}mI!~k6I2O^UfV==bk{=Ff4r8n{48?ok(%L9lie2>3Di%yUU zGP^PBPh$tzF~X+7ZQH{H*1*auZDR>7b-c;H8lpi^k!Rd z=%ytFy)cz=)rhKA#ZqL=8hm{+IzOIeJnUn{hM67twmX)}px|Aqq|89-u0`SoQ?qXm zw!t#waAmBisvxEjD=v~6Nso~3J3)XxSP~)%a~$F z#a4|ON!wZW5-AWxEwh8vbz6xoAy~h3mQHvKrsF&MVAF&wrenkaE+F^p9NOYjeEb&~ z1MR6;S(j*^X86tK@t-;Kc*as6RBDV5dyDl5q6HqV zwmE4%#%fY=M@tv;RT$snRGGPhm(^sPMph zluF#sJ9yvU1~21SINKoOIPgB(T#*^4fPr~x?IO#-mpRe;0NUt2t4qj%xs177-gzQIT&N3uc_amwTRXOe2C-ON9A1!z{yLJuWZ(7joe0>DsV8 zqbtc=rU?2W!~(lzPXn_=?e*KPr02H?LiV4s#ZJ;u5WpyQJZ)uMdS9>R^O z#!h@+V{qiDxjO!lZ&cBlf?ZS!xwQ&yFbJ!>7ctIpSW3N%3($G{!>1=BXAXm4Q(#7( z;yF2qufh$kYA<|fe;9(np#OR-Fs`yMeVJd#2Q?HooI{AW5Az#AFj0|dr6j#T;E)r)Gq91HLlp+@|I3lONMo6I<q7%$OBG|)460LEiI*q8;E6b=hf3(n##W66hCx#4AeNiL!B4p1<)D_K~7` zmQb^6GH5#<%}74L$5AoT`Bl zQpxHe7EcANDGPTd6@No@a%Jp@QY}kFu_KIPL)heK5MUnh!0m|h+De4i0!0nQXYz*n z;suVxhuo74s}}SM?h7wai+gnnEASYP^RWMdC9iTIc`I|^qJLsFEF;1z1pB~-`pGwu zW=_-}9864sh$b*v^~2xkOP|To#G8JxDb4rpk%!CsC~hlmQUj`wa+Pv}a-nhzy_wxq zvls&(RaMpN)%Vp4)IHT}sr;0u>Z`ISw`<4mI%~VmA2`O|Z+{1wEn#y!{SjW(qNTXW(B3;SpoS!lO;+=; zNRNV|zA`_o@IW-9Y}rioqWNS$m9jaCW&Mb_nh-p^@5q@*Aj;I1y5_5}8^ZXuso=sn zV#f94j&x#9?<8vcsj)iQc$?4^_Yw{7fDHM>ehAAny0zJ($u2P+gNIBswZ+4E3&yAd z+G>HN8xc;C)K)l&EPsV|&=`w(E6G{gO@>%+6=bfGzj{ zoMHCs5hL6S4#1xn;B)drF#kh2XTft2ig%%#&1=}>4(JLiV09j%r91?)`k*lk$3h5a zNwTU;=BzI{U?Qrh5j<5z7Eg4T^?0B}ZNDfq76(S~1nkZCG8-b6+mn;lT5(ljt(>XM zR!&fTRgF;RsE66kwXJBoR-LWttvaUsN)E*wc{=>l1M5vzw~OfrL;bFnrY^=4#Q1O3 zU)7D$-PD!VH_=bf>-0zIMtjNd(a-_}X+^HkQ`3LwVHZI2u4w44MD4C%bl4HIG#7iM z4UDC>xUQ7>TSd~tUs?CW-yXqec#G8fgb%|>_5{t`)A|bd97WVqJl=svbZ@>07x@<4 z(Hd@|9So+sZLa=~{*3;+-qzs7@iBS=wjjfxEYiLvKFJzbk^!)aC*UBDP~Y(-@v`5@ zCTd9zXK$)`gn}5=;UIpQhhW`=qyLyJ!|;;P?E==<4Qb$sc2-NOjp>ARXopqN7EP@r z=#Y<9zX?vt6U)#OcKtrSuet=bwhqK3UKH2i}gLo=WR;I;!XM}eLeC|zTk(pM^?-sk39%BIZa}f!>Bqp4_%V?3VJqvxirvP0*&69*i@muTjXeh2Dvuh5DR`t#Q)|%^ zDZU-gfIAlIA>z?W6{iyyl>w5p#Sa>YPEm#!h5<;Mm$1$Xc&J8vb3d+11FlIX2o;E* zw=Z!7b@1V-upc_3x3oh7jf3%3qJMNl@_ewafW6WTo=Ef{4#oo-O|(iFawrR=Xojsi z2gdOfNR>(D$|=|zV-!CXUdl#P_bXOplIgySEO#%(FZ9+AcpYcRJ`ioW3jb2S;^+8V zcEKO5HB}{szoh9kQ35VVT^rbgaj^DI_-urIUJJckRJIm5c>!!i%Xc{_UBMc#i>@-1$MGxp^^Rlw`; z4u(fWEzd@GYyopwlaW#z_R?-`XdcLT-hfA6bhEpI4tq=Tn%&~nqAzkd$D+FXG^*IQMV9_YZdYkEtLjp0Pj|Sc z$w=D6yegFU{ef{y#WR=9ULsk;@nl?FK$vla;GO5gmd%8l-YoTFJ;19& z;GXUH7?;>(Ow-CV{j1M;gn>3F9@()Wgv8U-$jdxr8 zG9E}DPx$DLFp2}Eh@&aslZZT;O;nLTaUg=*K8ln$h^`_k);~wr`GU5SLJV0Jp5uH_ z$B{AR%_8FGebA4G;qRJ>#<83c7{~~^k1hL~D7spV-~QMZ0p#AFmg3Hi zpYA9|gC8hsTdaW@I0wftih9F!;3swXL|>8VEFxpiGYYmdBKAulxlI zQ)D*a=PXB5ZyBUpEqwLW@$c3lFS!A%epAMJD@I=j^p5Uy5f}~|It_blKKjU77?uN! z!sB>Jt}`?4;uXKmHk8LOIMYykCpX|oZb>nk!T5M?GFDIHR}p=q*E5nA!AeYoM-h^> z7bCnmOhq%k%^OKthySWBIe%Vw2^Ps?=inNf=a}9`F)p|N2mFP zyLiV6vfNj*E@IY;|9C6j|HI6%v;0TF{AUsTkN4Py@d;1(->-l;;jFjV7g;Dbc$L_@ z#P%Vd{|a16Mqe|cvx*FarbwmEXnGT|b2q}{@55topLrRBmnj8lltbMD8MaP2P}mDw zpe;5*JG}m)%gA{A0Rha!jWGR3@X}t!ZV1O0{m$wKc10ezZX~nCo)PawOqb{Z*bMuw zJ+r_MKA;y2r9ZP`3NvyxzM#$M5nGV)r{MmsBljcmF2^!E(}{f6;kCBG8{hx~=LzOi zk@Bn?${K_HO^74)!7Jc{r>Q;sWmi_w=X@YD+6P1(z}koHP<&AXL8(FP_2yMQIoF5R zbz?^RV2QNklNx{`HIW9D@IJdS#}#znGvX~Xz(xKBX_8?u6G6u~=KX7a-&?Y5KEa_z zbM#!A`;YnM;rPw264Q1Lyw;*Olo#5v3wO{8tv(A`E4o5G1+A_iQBER>*AZhO;^t{7q&;7*_3L-XFrzE#4a}eeM-z%4wD}pqJ>3eGnu&h(;KI{v|q@2!xvj z(#_y^55?Ov61&(Bn^It55AJPS?yV2|E%5-g;iwH(b3^R7dPL9EBVwU0OBt*3?0LfE zQ~*oMb9G9xx-t$*aJB64--=$N3YcL7y)H!OQH%{9%{&_MA>^zS%_vjWxgq%{K_Gn402IhVobB+(h~3v%WY zWAY=6MJVG^#N|KWZr|c=-^L?(6P8WHU0jeNl1`#OAIBSim}M7_+Zn&x7{MzUJIl$; zTMrjIkG-jkwwa7jF+NAJj$wR?@hFzwjL;#B(QfF}U5T6$U4vW0HCIDNsV8-Nt%!fL zGI8djpM#RDsl2@ip5Ct+|8NY4t1zlZ7^ z`*`;raO(tkcY^nb*9S^_C#6q1$7i1AwTJlRKtAO#?+~9Y`p54k3s~UC25dQjMggEo z0N64EU)ek`RiNq=uy8tyI5U|jgxTy(=d5`2=N0~7*-VZW@xCP>(keb_1=zGo`s_`7 z{!VafJKwq=_V^&*e_Z;NXTiOTAm1f^>t%3DM8#YOlf>S2uFxI!AAw+xS;Dw#(HupS zSNxdR2Z52X(lt$zqI17{rT~+Kv&AGpg zK{{Uv?Rs(V2eR~IWQg%0_d(j2t(Md|W$dAdH~s9saNT?^z=At{~-ve=vx>E9?a$qe78X zw~tydQXH?NQTL$ zTsw6P(pZYn2!0dKsYN$8@~9!tuu$TLj88C8Q4PN-)x1dW{oX7pncb@mQKzQa5Q^1{^I7uTcutw*uB? zIo>TSPcOU|mB86XJl4X8S`*Z*DecwZs1f=~9nLhA(6}L}EY{|nZzw(22+N|ebmYyu zM7C~KqHt<+wg!(i_{?f-z4#u{ExrQ3syvIR?;ut;e!mmHT2up55esRex03?)Tj)$C z$p>9bCzC?Xnz(lPk~USy)!9EXo;kr- z3?#-c5F|Xzx{r~&39WJi%X<7)8(CKnb+m@FYZ&XxI1Z2=7lD;?LCaY@3j6S1w&HlS z)0yDraOTEHX3QWEv^QAlhi1?p4E2%bQdiD(0#7@Fo$Xi~Fy9)$i`FCBuLf9J3C*cI znCZ@HVaBTHZ!2&y8&oqghs9qW7->Qe(SV$J%xk0$$t(WhVhU&{?At7`PxNX_ zVw-|g_|2n`48J({S9<)-agro4guM8`r^JJe-`E$OHotM^9T7TWeTlqzfiCn^vJxXD z+zdw+J!XkSA_<#OXiN`~Qnz6x?r;(8>tWUdlEmAO z%-e$&CYDv8=_+i_`I47&1`%IV(Gh;)y=d)Qj{***lDB3OjQ7Qy$&fKM;~ zZ_P#XYlJ-~)<{-?XwM{6i{!P@y!s)_1L>25b#{|)z07YAyh#wtB{YK|F#ZS_9t2hj zP2nhrev0KZSSoafvuw}&A5X8acZFXnx*i7c8F%@_+kE;1>087%2{e5Ql0Id5$>S#w zRpcUm;wpZ$h@6*Lj$)$3+sSud9U z(rD_BCGpQ@n8X;Hj?FNYv9|gwgdtX_5b4A3tDgP`VXZ-5jKDk4D}NUs-3+x*H7lAf(Pq8*9K=pe_^y zrBzfi5==l52qf@H4%P{jhd=}O)F2muKVZB-K^2+dcA&bFvvwf68YGnQC~#3Ny;hw6 zcckP|hTb4-V>9{!4pj*OjS{96@k<28<$!J)_&`yGGZP%l0o8u8pU!{y1?0@)*Z&38 zKCyl#hbY$S2Uz!w z1(v3;P30(EVkJ}g=07arUGZE)5pf?YUEl9~llZpx9EP@G4eDM6VXuO!Hy8u|G`mZThih1#!oocxS-EEzHK&LJ zJb_*qh+cRG>^;Dvu!KdQ#zQ-`LJoXm{m!|sNQTesfBrx2zL8i5k!dJ;EeiB~!ulKp z4(IV1G9`??`ylQ^WXyH;?t`S)28LUaQQsFN>MniA>m#THvhcd%vO zM$#dy*%P+=zZJC&jl#fIrcu|l?4JZ6G#Szz05e!*Yqccp=K!op8xNn`!V zemc)3OaHO3K85$YQ2LyFK2OWBp5G9ZTDsch zK*uUv`>H&8f{&gs5LI~I8*QlqNLg9Zm^`^h|8eh{5U1T7mZG7Aqb)es5TxRf8Mx_|Dm(UdN zvp!^03&eaUv2Gth%~)o~cl1@Er)D#oa+z(p%(o&*{}nT_7;V^8Yzrr6ja^#;=@bk9?t6AP>9F zhO>zGj*{LbK6Nl_AC}&HUw2l)c6Z}9bmbSdf&cg6KWNV{Y{l9b@0_rx8}mOk;eQnW zZ8I$H20Yf~s5V!i5o>MEHN;l`kFB^iwRpCX^eA2_&I=2?E@#9$YD(68)&E=J)v)=6 z{Vgo;3S8~-*x!O1aA9%A26y3Du78T|9P%*<$B+GABis#63zXi@vYENE z5v<+-KCfn7j>mB!mhwzE=Gh>!Klbrt9!E3pL`8^REZxZV==py?PkoTMF&JEf2tp6$ zup_hB2@DpTl>$7LTiI|_jJ~Y=Kc8hyte6a6gAT6PEOE$sWP~0GA*|mtq=v{h{R8sG zgS+2B+;8aMu^fGrc>S;J3kFT-<*%`BUrWn-@c1oK=mpC&&OX87jbvMg zSiXW8oDTN-gS0bX3rE5%kCr?h!;rEgVG{dd1@{JVdmxDg?zScau>*M98gy+A@-{+p zH%EqhV+VU7(d)3*V$Tz~Us2*KMWwkapo0te;KbGmJ4#V(LRGdQnxp`f$pC}0C6p3~ zB(E_w}IasXb=0C?@iaLR&V7V9K3eJ8;}k7ql9 z{ZYgpjA9whGKT%3_<~2WHxZBUXz6$u=SIR{kNN+rhx3Z@JUf!-#XJ8!GnvnvC^6k5 zq-Q5`JXZRK;nF)Nzb|WS#aa~xDscjt8tWTAuN7jy*`XH|TZSF=GR=eOb#3Fcv zXYd@ar79Hfxx+uX^FmYlBk4$@Be)(7M1%H`g+@}yF%uFEL}+Nm#L%hH;2h9E92im7 zY)cWJRDm&94y{9I5=|JBO&O`}7`xqIZ$wN=FUGX+>5X8tPnN2(%w-w(v1IrrXjfW*Q~E33Go@3@DiInLDJua1}`LrkR}>QqNKyF6(Vm$5)OgL#5-amE`Rba!Q7@vPEtQ$)%8V6N0qab3`jC$68Xd^-H0pRKl0&j>Id4=d?UW zRnb?fuveM=T2e$>70y*a7CLg&TFRWPjaE||ou(d3Q?#1~@B-e*&lW6g;27Joc7$i_ zil);U22%KFegDrA2)|x$N$&b#4+$wOvg$=%#vr(Z5k$g`WEFPP2;#XXVplDL^_>7#kxbT({0&>{Sr+U-MFpENhLWaDil6d9=5eOk#ck2e=-Wna!vc$^)k2Gh zDZ(ftV`YQc-V|!+YRENoHBKgmb_@OGS{rr|aTr98x$VTbmm+5Qo2dcyZ0g{}D#IwK z$ZsiU?M`&f1G4&#ljoI7o@otokFKGoTp>eiG*(Q>Vk&2t9}>^{%6Q#yOn*~nt@AA! zTV56Hfi)gvn@b6sZ1%;y=!88tGC zGv;OV%J9$ZmsLLNbmsNU16i}O-)DQ~w95(1>78rNHRjdTyv|#s8K!NS|1;k)|FOna zyCA=;rg~O!)&b4nJVoY}^beV>vlFvT*$=ZyWyWWyvesqI${Lr|EYl<7MTT9rLzeyD zz(4mgblFiE9n+Ju@^XFiDr%bNw=FzhG)vb+-^%D_5&rJ2R(Z1f@+*WEEL9)3b+G^J z(A4p-<1wc-&VDW`*E_ELONN!K?sm~l>(<%*y}QQ!k^5EmHts{+5=$nPJX`XDYju}u z&exp2J8mvf%OS$9m+e{A9>r>#^VUC$UzkZeWn);ve;ynIFB@S+jAhx)0;Y?CW8dwy|<)fMX{ zvJN&L@^rZ$nR#Utf64FpYU61$R`wnZZn0G?QsN}JPJ4;$xkO&dE9xq>GfpzR(|6I& z*1ai;C`v7|(eN)Y~&I&*?Qkae>RCnTz5V zzF1IV{*5^`W^J5qni@9w%EZOvD~>%l%76IC!LRzg_p92~++l1hS>xGto>hBMewBNw z<4Uz&W^1w6FV8Q^d6)4dRsF|4acbPxFT*}me*536n$Pb9mLD$g3x0he^Km2av z*vmCezTE4zbN=q4J+=4M+<#~P%LB&`*&THcycBrgSjbV`QSZPFfx*Z2pUDVrb>r;a zr%wjFYoDmk?qZ-DxU;#^7w?Sre|j|>9z1Eq?B$ClE?=?IvU1u=kASI5Yc8lT>&;}J zF`h%a^>ysFr~R^K8|t<98dUCta}}G(1^FqbzioTD{o&X9n)|tTGw(FJGy3-IJ1_1= z-@AVQV(8=t+a7v^-Fdtr;!xy-XXm19V`e{p{37U8y*C%%1isC9_wvL3kEvhQ|H?`C z&-+mrqkE^XMP+**^PysUSrz#g#eCHX+bMK7qr<4|u;FiRiyVjCaXDwQcV}(O)Md`i zx|$W6m6=sFJ2bmm&XSz09RFNH?(w{Zn$6n2`3d>c3+@%nEzBw^r(dL>rS~EJ`KMvA zQEm8GRKD;~L3lxGp`TTHi3c9}l}t5m){{5+-C}d=vTYBy>)oMWr&^sW`kwE$xQC&~ zmL5I2HS6rxZf#R-?GB#JJn|iC$?I9Qvy?VR5*>fg*wrvn7gf|*=d6#^b<$;+tmT#L zU%S*PWnVU@l56#jwU2pUY5b?j;0D`krdH_fqOt#OKh$oTt)J~1^;va)`q3{@rKp_9 zDVeIeqdcdyD9fvgl}nY0iXVz*%2{NY1dw~wL|LDnT3tBas|+JoF-mzxIhPzIJ7p?y z$H|IX^s`s}ZPO7>h;F>HeuG+( zo-4}Eaa-;(x#Z?DHdPkY?%JeFyHef$^xHlne8Syn8|SDNtY5frfnoNNX{9DzAKhT6 zxo??nb2=znjcVjpC#|yF<-TQk`od4&LvI8pT<&~v{ zKJ)j?@Uvd$l;=-g*n9EGrQFM1gGXGozZQA@_>EgP>)-adv+J(g{ZgU59;7@h5!U?i z=J4SWBcI%iod2}?GkMh3s8`X0p0|Bb`{m`A;V&IuuY6;AbMEcLw*%gEeH;2N@?F+D z^P74vH@|4{s@<#duj0P$&)Q;0u?$fxckW(sT&?Eye|Y!sR(L1Wm)Fhn+E9M4id z^<}r0pIfmgU|m4ain7a_F1@(;{zA`r9y4vGIFI`^^3<@GgDUlR?9t_A+__E{aup9Hv9XoyIl0M`%&laAuzTg-1Yj@YOIpx1q>{Pj+@-okMRnn^zRJE>tx@P4%P7U5S z)wJ%`X-c;$y_XIcGPK{w6=O<`-!j2C!91bqgs^e4v6n`j8{T)wjsf0%ru4Ypd0*S0 zrrNr7sy!$(&9R~^v*2gCGASt5?}PvA)6Z{59gNh6hdti#cvg5pL{#MTsK?LGzLtMD z^<_ld>4Y}F$E3ukmdFUsnw#sWO)OZbn{Kc(*_fMC0XNq))U=0r;H%dcT`L??;GF+e zvnfxJyDHl)Ygb0y^!KUF|DOKio$UI%^RLrMU6Ndr8YS8N8ua^oa*LFMsVg$BXIItS zD5z&RSNu?Z!#2xtTFFKp8_S+8zqUfZ3gKmo-AlU|?4K&jTX)y#GOH)4zRr35Co=W% z-bc3|6h652u*<_PVe_JVW1OB1i}Z_}6B!rb6)`X3UW7hk#glJOE49)DK<>YtZm?d@`);>KEY8YDF9-=;-}Lp}+<0o^D0?d+rJcW&U} zAyLD+j8u(jKknoNugN8*mYwE0M2}sWxAN}F z*nlPhrB+N`)_iHq;;4mv79`FqJ@@tOVY80SI63|NwD$gkrp}nsVsh_Eb`yt>FEP%4 zOtVq#M_3OVJ=ksF{(d>VANcw8i0FEzOJARi4r%RfwefE?qeZu7E=@`|(t01SH?fYP z*5(?6yi%(4uWYKYshm@pyi(C_=UsE1dpO-KvC3hE{RR4Zf3gj<4YhT(J3+VTb`Et) zG;r+ZYou#8*JCcPou4^vaC9xPz&^p&N4-$FSN=d&VAZ;KrFn<( zpkA$8TzEP^OH(^6-|t=9w-eq}f3162+Y)aI=sJl@v(WRojq8CK_M-PiW z5PdBAeDt5_uh9k3D`GCk{EV6Y{MK{(7dKw~_wvEZEw9SIe)0PCn=Nns-ub;RdLQ~B z`s0F69-mV`&;0W9%b>4EzZQO-5*rws96S75$hWfJFMgNDEsLx8W77}2_~-HSe|jg# z6JI4hN(%pV`gc(B<39&dmi=9oIw7rRdKWa(qRcN@XS1j0)XTk-+dA)EUQ5j-jfZxe z_OZ5B{-XSde2;>;1qlT`3ojRzF4|w@tlOwF=*H`x>uVXN8crF~$xiM`4v^?)vz9!d zlVmM_FlHJ{(jDh2)vp?o)1GPWf!!HzsSl6wx!4OE;uaAmt;nByM-FpGvNHCPGjoS* ziBK{&CJ_-^f*i&9u$23-TwY*B{KmR1qz*+>^GouLo06Y4-k5BdVX!mo*30!3y z`x{1!HP(6K6^{3Wbeow>s6fn|-K5UWu|!1DvP2OmiJv z(!uSK+YI+qcmGmFrP_P!@QCxs^=Mdnap}#aZe!N|nZ4KMAYESiEa_a)o zdm`u*C|3kh^HEFBxp6kt$oHH@b;7?ycz3Z*hSSf6X=_+~h?)igW-?e!=c$*z2>YRi zewD7MXns*f;grJ6f(=}q(ENb>TKP$IGhf3PYOige_0+o2kMoD-yC$BVoG&$Z=(+h+ z^O(nbn(LYy9NpA>(&TFN8W(MI?F{XC?JsS){PFqE^2;-;;tRSJ-Y6_zw6#d7Tg|Lm zrPq^dpI{hDjesg-*cwe^$WN#PU-Q@E3zK03NBYC6I}zP3)GmA{t7J2ryxttLklV^< zQSIu1yg*(}F-&n5{jZF2Jaq}mt5&L>s9dN@@LFBUcC;>5KbKXEh)ch5^R1;SnzjvUc9Yh zV1sn@nFh zvgc%P%MQ+dlbxIGl+z-|KWA;u;hZ-)njHJwp1B)y!*jjz4&>QuwrR?0-)J}IH!UbC zcviR#8@480eh(S?Qu!x@YDsbCjh1R~PkrI%mr_mOwrre@icVDCif@X($~fghRg$W^ zI$T}acCl@o?SFO~>DJuL{(`;QVWPuZhgKy{lu$X2cf90ia%}D7?-baIgGD zDTgZiD*ef*pQfC^Z`r6^sT`nesB~7wDK=55?J?Qh7V`M5ZGxy4XDt(T13KYP(c(i3 z$AcDv*KRtoc&%aD;)&rO3)}q{KG>h^8E4BkvW`xWgVu|z#FpeFW>K-?BssHw@JheP zXkAVhH7`0V=9209+VF`QN;*2#mZyV4Lt_hL1D;bGe;Mu?HW~&RDjPEN5A@shBlT_R z1^l1B7Tad}mij*W1^V6k{rX+{Bl>&#hx!oxZGAA=)Is`FEFtznKC^m<()BX})6seR}j-9YE1Ypm<48={-1JFI)7Q&2Ucjee|tt$r`>+z!jNO5aKE zqF3v)bP>AUNcPUWud%Ks-LUKGYEjK&Am?W4rs#U|DIIk6bxN$xvvjBKQdGIfSoo;$ zK;f>!sfFzd+ZR?VEG$SXcvEnOj@F$DjQQdDoAUq5|ES%lZLH1K?9=quRM5Q3yO_5+ z&o8f0UfsOXc^SDGx$ko?=HAHNpSw7BY;N=1D!FBIE991t7Q0;UT%X*@xjSRIYX5Rk1H+g^aTr~YO^XOr$)pVoZu~|C}%iE_QreI)UWMR9a*F`OK2SKe3 z)FA0aM+=p4rt!D2FV*WhA{W~bM>ZTE&NQNV7Lpe;o4W5k$*z>s8SF9@{90ns-cl4O zYAc7)UHU%r%#1v2u4<#|q#B?at{SJB#3-MlnxhI(?NFUm-B3lSo~z!geycK6UsRE* zTdFm@u7)a!?$pzjm6b_~D~c_Og><4GMu+n~ibskfMN>xU4P_diJAi5rvsCl>#4f7Z zDjT|?Z&eOdHlY7?p5nP8MiHy{rN~#fD_bfjD-SCpmHEo5s(z}?sw;GiPf)4pw%$fP zMmO}@sufnK@-%GZQ`VL9>cIH~1QfK}tUBi^7hsIUZds|@~ZtQ66YHVxlZ0tg1 zFk5PaeKkCwYsdyefT6#ktU+#YFgP2s^fwu!clFoU1~YCG^d$_9=uG(6(2vY>7wVb! zA+xS7UL0?HRT*Saw`86zgBk7s>s*e`mCxXUALH!`#e-%8-@J&~m|<0)?4u)OCH}V7 zT4z(w=_yivB^gJ0JmQn#vESh7DqVbw{I+azM%$W`U|c;+@9Cb{*;q=dVRwRxMc1im zcLD8lAKdOs;u}@*Ww6u+Hy^4$Dx6aTI!ubM`N=UuYKx=|ZKCu>jD5Rvt} z1F7hys7-IpS&9vcy-3!biXDohiaT^Yw^~nn1oi!y+Yn|tZj@qwzG3TneF#XJ3m=&C(n>`3APr?Gb%UvVXJ;WDgi z$yU(kca+Ut8z*XM&fxuz=;`^9K6>F)+&UsZOBJLL&Lzm@R8QN?B721KfG9K+Lhc0|oHM{7(_LO=EgV3eN zlXdzLzd#4FL&ET0_Fz0Z6U7l@Wl!ut1XbAD(#zunb*Nv^S0bB=KEmTWENW^Z?yXHK<^Ix9H!NXUw4|rvv=}3XH`@4^u1Z z00&Sb%7(hor_2hxcZrtv#K5%1OVYslBAI|SsS0e>4<`H<71~~y zdQo+7A+;M^SXvlcf>^ca06N?_pMF2KRC_vWm}qb}9M^m5?}80!Xu0KzJ{B&=f@%T+ zI2BeXYy%#I6zU4Q6tzQ50iKgX{dX;Y4hvpdjC9}%M>x4uuli^?h#kK;r<=?1*oSMjY*;Ww4B zsJZ^v$akKDBvE3+?SwU|K#j+3SjQ73dE4H&nEJ~XsJz^g8r&zSr=%p)c_riYg}E%1 zuBPLE4!4v*b~_P^-XG8APBedGaZlnbsv}8yQ~zKJ{qAPUgXm$GNhj3d@=sLPe?l!V zN9*QR%Ze{q5~!=Ng-)~=k?#+=*QX344RsBr4QfM4^y6zV+N1T=^r5;5y8m>EMdOQp zf&RXQ83pqSQuFubkIgTU|5E!vdqew3Yo9+a|7-rjg34I`ql;?lzUanK$)gURXk%9_|Ls9dMbnMK~6WP z25K4Vk0mey@=Xf*pR}aj>RxiW8RJ{jQ`+@6$$~MX` ziXn<8)D+%BrH&P{??e+lbd|yA*aZG9)}s>Kz_oa?JTovUuBK5Lvh&0+V8R{4t3mf=#C_3V`pn;R_6uBSVxRwfPJ^( zQYP7MAuVVmk%THPrWJ7!3bYNV1fFn)hwA>T1mCd zvAJ!3$luAgX%0Rhw&NL{k6&NKdq0MW?{pX zElAfdKzD9Sx`M{>)OtBBm!O(y%9PxhsVkN~n|eI=AA~mak(J}Q+ey!LRe1?>f1GWE z&Bjb6f#xi6v~}imsjf8lX-|uoV=*6Ntg&@se~R53qkEQlYI%X2Rd#*j`p%WzmG0D?CHY-`bQO0s zcO7vF?y&2s>!Qo;uHbgKZ@Eso7P~sTa=H#VTY=yga`d*JR7xm6+d9c3rB`A(vAwVn zcV#=v8I;B|IV%S;LuE0C8mE|3+Gx|&JE7vC--6cz#RFUX1^vr>*+F;PdA*r`W`2|T z54&X-&`(=Na{BZ1aC-HOmeM-YohqR(aqX`+#^*IYma$3Z5D~(3e`!@>7gJ21*@aajGzfi~b1WEXS z7x)&SA~vQv=~D2i5F9Ar0yti#!Jn~_|o za2~yoD$9H1eC(N}cs3T;f}kuua_$<56@}yMAO$U*Q1(6L`@2oP${lu_du-3k%|!DM zli*xEtXH#-oArQTU@LT#WzA`POpABbQ{m$6UZr4n|pq0>;az@k( zZO4e(6va(V|7G7aUrX@%b>3~><=$T2hTf{)@4RKag}f!a)j<1)c&B;)^uG7D0I6;5 zJMa5~b8D{uF6hFwz_-CQ!3v>wp=IiK+Ig+3o}cE;?j*79VRBd>sfN<)JJhWnaL0L| zb%WS{wlNh>r$s0ZlvR+2u*tWFN$&?@@L2JHnC-GJ;MZTtcN}J~ZI3D$>^!fOi^@GE zsMNF1w(kK=z3nIpdYa;_MX<&WV>$CEB4ol6q44a;^vo07d&_B+`- z=Gc_uehy!b0$}ThbEIWonZ0`U%GolqrX^NOT$->n%fR@xaoOX>#~zMJ_B7*sDB^D5 zI^eA1-0Qe%e@-f;2AYsvZYDh;tLhD!Ee-VQSFJY4(_fs|waAYBLiL7ThVrTX)FGVzlhh}wg<-;}x%gE8nLUaYXQWz4 zJr?>iG#Y$%XfPpoD=;A7WAc3O+vscLy9drR!duGwB6COP(9HUoxifcUl*vd>Uzc7q zeQ#RjwCAa-Q>&%wDW6i#rfg05D`iv4hLqbWuTlajU#Ip;-IS`QHcvZ{_9g#(-i+ND z6*DhoPWFD`Ti}cHpY@Ljyb5#<<_et-jaTbvg6=>OMp|C@ZA4&F?PC3rG}ryyz`MbZ z{+6rQez%>nl~Yc0A0*kQ*#ET`bc}Eua-=$nIGZ_tan5wEcb;*ca&C04bdGe^bjCYR zIJ!HM9JlOC>?6T*O4=*fNAOGxwI8>~IEp#GaMX3Ic3gJsbIjz%-t9jgI9Irux!<_Qc)G_lj(rtdCvIz;E53Go`S^id4O9q>^*{4%_wDul=Ck-tc?DlnI1;BX zi?6CLzwZb*Ukk6`odafgK4Tyl;o@{LeQ{d0w8^RIDUDOMf6D)9`N#N=b3bJHaO(Z? z_r2dIzQ6nK!n@A~2ThfW_|pN3$Ed!8~QHIlk8t$DfxLaAol$Xw~IPBh4K z|Kq^T;L6ZMn3sl}Ux!H6ylD0#S*irO*M@jVE}%)QBjja=-6!>zEw*{KDEWjRam%q6o+Rve#83K}Bh6tttW0a; z;9{ycLiX*P8IwT%v%$s0IrlhsxJJ0|xVw42jyWHb8FPlO2C?H~wV2y6^<#I$eu%9Z zcPegVe1$CgvJ_6Zn=mEOpI9L4n5>18)+F6c%9m|cwrIBH*-PaZnqy~m5uoY}?RrCh?%uI0e1|VhI+47c?>2;Bu>1+I18mIORW47UD z-#ky#z+?TB-W4RHGv|3MNn5$tfEJ@gE=EFEV&s4S<-avy4@wH#!^gnjx|{jU9pE90 zjrV$WJ(r%M4TRTytUgfRsXLkf-ZM>>MQu4B?sKKz;7mX3ZG)k5Rc3|ExXfai`3ZfD z;mInO8Jl@7V@<|(@aX*+=Q7^IXwS<$k(tPe^1)loH_K=D5BDGP3xWQDLxI@f`QW6G z8XBuM)Cz#__cfA@U(Fiy8rNqNs>=O;n|rqoZimmw_RUC_CEuUcneSmO)gm#_`)j1-Avl2W#nyu%fwp?=_=?*=YY1tfMQnaj(; zW9`N^eKy=xdA+JWige5^d?z3DzxCzhy}r|na}S!vVzVkNQZEpeIXsp1@ne|mVRvwO z6lC+53=TO+D8f_Pirm=_a!?*@E3IU+pSM?XEOu-K8=PRj0w?zt)aAVN9=t9HzEMWX zCOu>8NfpYAZH4>R+QM}56PH`hfwROT-To`mh;8budDPgechwu}@6o`$)#`$^X4iA* zYxKsnNQwOY2|NL}$!_aMMq7^X2L8(DROp}B&?=&${tmSNIQ7n9NFX8IM(;k!YUH!+P@4*F*+i-2sZZ1_vfx%4df zV3Zc?r(yG_s_#O*I7^=d4+SR&n+2-`iwB*-7lF3{H>ScHfxCem!5@M}f?t5jeGCdA zd+3)?7Le`T>L+!O_C(V`vb*Vv&=1rFgQ>u-lLZv6Bx>e}Wg_{ueLyaA(wI>|YE7o- zX||k)QV*JuFT&Uz6TD#XH^{O~!|9XGPsq*ByEM=2I6QoDX!6t8TPlXbq>G+3V&GQ) z&@XBA(G4uu+QKuHBmwre7OM}}|7F*jY78J-wj#OD{c#QK!cAEiUuQGiqmQF2PiiimO9SS4KRnV+OHuapQ}mNmhE423 z^Ggp<$@Aom8bSqe3T>1(X$Tl0&6i$Ft^(WlaTR7cHZrkHIBYlEpsPtO5GF8-8P}ag6R)C+y>F($yWH znaN>W#22>mEG@>(QG#T`!ekQGW?Ej$^ZSHz;H;%1OiDS@TE_|b#YCo-WT}t*ooy6+ zRi^B=WwqtB)wHd$HC8UcW_<(ub;Wi}w#r%Lk30)I;b~`zFG))MhlxB2-o6Fg@p^<# zdm84t7#nmON_UG^Sltn79{MTRERZ+Q0j)yrQ`(Cd%-CND~#@7>6 zz~bNOyX(8}8x14=(myJ&IFKuNIhY51&YRFowU(9__N6ij<9W^R$dR8*GIURpKVPy1 z*X3^MfllasWECmjtMD(ntOmQoay*m|*&wP}$Km_ac*FKZ&ydl06|{E@NNZ=>ke-;k z%#LQrP>rf29xo!9d^Tyh7wFFoaH8(fKW{o`nOiq%KIYVTnA3AwoW4ZQNmB7#a;u$m z-ev_oG{S4~x=hEd(}A6-G-->YU=14MK$(o=qbTVIMR6-^62`&d+?6WIQ{{hT5%w(t zn|)XADgR4)>s?eP-_l6^LC8(U{1~wx-KLvKncoFUHU^!;*KiBngo|L?55NjsmZk7r z`$>I#Oh)A!8c(&gGu&&W={*t|#D`?MZhp zap!f%y0Y_LiO%Pa1&%0_NG$jOIRm9ibZ_JV zyW|Km<6qM=HI$_AI%HKZ)HU?c^=TCtXf`0La}Q7NYWgepk>c4roDT$UBN*aCJTWQJ z8Qi85t?khDZ$~GvLi&xHsGc-c8c0KXL@LD&+Zlvq4_WQ2=xlIp{^~sSsagdF{V1pD-+CEio>83rIFW2xBV386aU$P!GTZkM{6lH9u>43G zKqImXK3YmycUYUzQPh)LsDM+!K=B^ zudD^ZtcahwL^PGelwKruJ`8^!-bA}rl&5t!cBwI%P5W8B7+MS(R#Dxhmean{3&2;Z=KOb%=!TiLm`lr#v$Yk1jq37VIP{>rx^)v*$jda4bR0V%#KJqKegR>tOtDwag zBwdw?$kpNJ^0McJQFDBfj*2STlf|qRxCMvMuF?zTjY9JDa^ADNylIzk3^f9cc^+PG z7Bzn44(P}ycvJmFjZ^<&1E>>nqp&FpLN`c#sbdYvZlCJUlzn2!wmDWhyaShlLN~Z2DI0AigPdJaweKuP0uQAK)sV%R|wt zU$vD1fA4GG#+1Cl-kXhO7|Ilzau7zmiS4HRM#=@kT~)jw>_I=M2}Q*m;$vY2C*pHX z+(uyY<={5Iuyl;>;rveux2Ao&H~kfZVX^9Q@~q}A_zK3Q9QgKfJfSY0^o#tb4L?>6 zJWdP#yHPG#a^o;Q1dlLD?8uv6T0SIKLX*-AZPOcDJ!K%M+<36I(G*l^7vXOH5j5P`Lo6qvK4#=mxE`;P zkv|SU+9?>UTBKDhx8#6H?uA#`VLgl|>tB>C1^>&gDa!NYr*)@1xh75+l_}ye>9|~w z8LNV_1P1vsNJI$q@@FNVGK{nTN4XaaLLF{|PV6dI9Cqh5M?*(~qn$m!vX6UXojgan zAs!NN5c7%DjdTV>T|{HZ9<(ue%tgj#?uCs^e<$^SHMjN*mC2c)87Lln6Nm{6_kZa> z40i1B)$u*_ZS(&xa3FXybeSijFxl}VP!q(%hTbJLK13JY0j7$LdIk8;&E}l&xyV$! zwe?^QzhYu&B4h}I!~^7Iw-L*Vac~z+{!2u?0i%8jEx~;pwR`#Jhg%Yu^Gc!*`v*7i zS(@e&IG?;AaD&a+24{elM~kQq&7qZ|!=RY{2!+j7P1GIw9qk5v1~K}5CK@+hp`Pe& z%4n0AYu;!+zR%|R4Sh7dZCA{#;la!_RnRfy!|`_1VgpaF35NAGJa95;DTPQ{9?9){ zNt_90uz)6zSF#PQhSj!=Q_Rax`Kef4Ol5w2!c2C7{)OAL$dx5Swg@@o3;%PvH-S;E zPov!fp26bLH{>^5qW`Z-*uxAq!AwI>+ktcG0Zdoxun5<<2E=#}IU*KXUDlD%@j1_W zA6(~e@R?VwL*cU9h}S^~Crh+VWTAF8td_v!F47&1D!! zP;S(z9Z+5LK^vbAQ&=eUFjzh04;4kZG=*N9T-pgxp9N~7`eP_dXg*2xXV z+c;V`>VzNA#VMJ$=uTKlr*EA3wb|NS!gud6w-_~ykiHwW^VeuxuE2400ZZ-xatQ{f zpEK&xD_Dx2$$N00d%3kzVLnIWX-%OAu>&aHL~?`XTT8IpG@~26k#tY`37tuK1i!;L zA#N()+y6klxsQMdyQ8oDcV)lrhP+$q2X|DLoZ??-G-yZz;xjr{*3&k2kzAOwaDs2b zcg#V?|9FGmqmsQJN(mhd{SKa&E2N+ z`WGhe((FwW_)M3f68RFYP#52$hAaY8(*}*?dAS9e#k#hixF2NORdhYFJexUZj`S_P zv=ONx%Ct1OC4XO&KevBuk-n6sh@0q#O0YJAmq%RZ7}B+7-t}=OyAXeSjo!r*H*%MMZ zkJ|EkRH8pJ$YhX0UtND&EL{9vWuCo-W1HinV}bK~?t%O+hpV)!m+QK#h+B8Pb@g-4 zaL;hHab9+0bKGIt%4s`?a_1Wwi?)fw>5;l;ozGh}Iodq(MffzVRY$Xyv6lP1vp!3E zpf*!a!6;t|_6vR)l;M@5{)_&SDBkA=Bs4{V&~0@JpKo4n*_wJ@@TB2-JT8*DG)+A; zSB0O2w?xSHpcgosAfvj;ExR%;5 z>DAF_W(P&wqQByqJVPz@UTM7F^dmo;U)y#&2?Me0p$`RW$`4={bGty6-u{p(3LK+$K zH|fia5zx`8}_zPPP#`!4$?fDYXE zHSuTSvK<5G*fcmgm>&g_9_$y|7Wxv5%g)_fTfeForAP3ixtjYSo+L#t>dQNp)@ZyZ zqp0i(GdEs1j>aretcZHBuQ-+cy0rLOc)_go2lK)2xcOTM0d~y~o#0kas_nHk z+8wPP(`zCKZj8CYd}kH~g}4*`jt#zRBrhj+2d03_^zeCUeR>UpKLAXoko*Pi^)7Nr zc`aH;pZE|wpfd`R;cSnm{+rYq@XuAIb^a;;7T3{4m9bt0NgM}eIRY$h7Hz`oLCLG& zs_G55yoIi{&nlNk%pui4Ui*fB`>$1FP`DJzm)9^_9<*^)Y2H~IsYJ@nNy{zkV_}V0 zLE0vj;P&4k*Jn~KfD2&P*CnGu4CGoz3@q@M z@UQZ9@~!k;@V)jm_wV%I@V5`N4OWGNU8qjf2GB1#pFXKS_@f)!`Xs(S=rfG#MoF`J z_&`LlG_d|puu7VAM()N&H45$McoaiUy0gmAqj!&8Y8>aoPn*}tSm;v-bLwXLNYRK4Ah+;4`xl%95Wzua+>YT&4ZFAlfG} zeA3*(Eut_b_`~ZXZRtP@S;n#7+nH5*;mJ6Hwy3FXkL?;aXkT=~yO<7opnU(yUf2`Qo}dG7wM#biCKv}Lz_DF;AhCi0!eirdj8eh=z3 z3k3aJVX?KRMUKAZ34M%b_7|-JbH5&(80>|%Ab+5GK=n5Y_ygsG&4W+a5a)o%?O{7x zs@rh&mDQ8Ag1T4hgPwaK_gj5KF>8S>H;(>nNw(Gy>qu^z^%Uk0pZr?B$6oy>y0IQ| zHJ*ina;%&nH$=;~NuG}0be%j#4oWv9E6rNJOZ`!96%+ditE`J@OMOLq)tBM_@hL8( z>uw(!`0Y$07Ne=r!6<2b&B-|%?a6L7#vHD{3XYFX)8F8Y#_@EP;N~eMmVpcS zC{9JUS4TGGjkYW}A}%QvU|h;L+B<$m>+`E~73lmuXB#Gi(XREbwyxFAi;m~^eabl7 z5mdZwrT%ngjz<}-B+dRf%nb`YCWW`Xe7a2~RUW=2=h zzMG#t@HbSEx5bLI{oay_%X8(`yiI3N7+00+a>vGz6%vsKgJH%?yFoFx!O-+#9`n++ zRLFWAJkH1Y^%&L8R9au{i(jwSV{x?fN(tcO(pQs8`1Xcd&kJO{b2cq z`Jgk1+;gh~w&JbO3ZGOvW}CL4pFNmveka$Yl%&x=y^E%>%KXIl(2;!f-le zYg+fT|9Z2wz~y{y>&YkFM4OpO+D`^5=Xaw& zfTrfPZm~YF=3xU^M3dJ!ROOd=`^$)z+qSf-U3Z zZz^_zkC|kRkeAn<4Zab7tcL^X3mQ3&Ip!H!#*yT!UVvlG6*)qm-eTt2Z_EhV{F`7C z4~*x=P&zj=QR%lKLnj=a2@CheT7fqplTR%od?98NONqauA?w8(bR4B=H@S;#GD_l# z_6++$M?vRU9EinT3tai!P24qM3Y;Fr^THi+FLJL$=~u&f-Ck2^VH+!tA&ci%@YaER z#%VNBf5UhE3ujb>UF&YRpK0j%^d?$&^-8E~Xlt-=utTtNaB^S?Z_miUJOA83eDF2= z(Ai*8XjAAPwXyb%=4Nhv#T45OSM)SvCw%;Ew(-4TTF2=#EopskeJ9kB5^-VKahR^O z?Y6zJ9b|s#W^08Ct~{>S4k%{pqlbIKSvp8Afl|9VUPY_)FVDtJSbN?+lxP>(x~`CD zr*eY6rc2Rk9AU<9LitQd{RcWvbL$>GUCXKG;mN3{wFhqrGiApy+0KJ~Ex}z;9YpCN z2;nVrE`8}mKyB-B${NuDXwEyb0ZtG+%y+lMFF1v^Nr!m9s&a41>@F>B>ulHgxi4mO z9c!z{Ml+UOvBOad#ay%EEoUVKe>g9Bv+|MH*Zx=YIk4;x*ACFh_=Ep|yeF7B7hF zqz&>g`s*hs)lrl>&FEI^05XD{AqZ;VSqZmYR06h_OTeQ6Hw=P=8a?Llr`Q1~1?z z9D{;*HkzRFKGWO7yTM!4*Vy-`?{EK$z%25qEZQlsf}s98KmEOC8NBcr;cYa@jK*1V zhGf_hmKrodS~&UVNCo8g@+y?k`BB;B#4Xno9gfw0L3yY&R0iS^wcD!5%|G|5icL`o zbc3Jo4kvqq6Y6I^&;4YfttZ#8Mg+%z88k#ApFSF{a|mkWENTM$#`{nMI#+u!_1DG0 z`9d41r|Wr*wzQz1pqE`hu~Lr>JqJkW?eMQ?9hY+d=j1)xEcC@`a6wul`?&A(@?;LS zwYGgl(`Qjz6}SL5KmWlvplk5+--FL~SwgE}(-E;9ErdyI$etZn8r-+&vA0?Qg|3@}!pW=x{@eHu;8SHsOf zi+4wwftTN8?|X0AVXY=)gHd}R{Z3o;E8CBtX@iyNxE(Jmo0ZARKBWj+3l$czg46HZ z?P~81yPJ4=cvgDWQQ4H;-PqO4dDUJ-iM4$zN5os`+rPEa?G?=(DH)z*{%%}jmT#%= z0r!d1za=FtQM;`sgZLH=iNUskk^#ZLz+1=b@s`i@;J#jp2lT1;h3}yMc_2^dV`!gx zMjNEB)+?bbscbGY7lvaZpLq8NlKt11j@Y^2!G`5M41H&z5>G)^-mE6*^onp6+(nU@ z!TnXp)*n_VMv51^2`jC~U<)jkz38#u;3!!MtNWCO!II&}e1=gzwQ9y4y@&o7WqKY| zZt?10Fx6^sZ*XYP5!@KqA4m_pOz6xD2j| zV>rAQfsTfmQm9=48yo;PUO4#4%bFCc9X}bn9GAhuOQDoD+=7#*1kd~y*2y7t2wC%bZ?-VV45xMlY`S9{k%=X$cI3fNO@HRP|QP2y&u zh*hu*iVlr@6Ru3|T6g`8HdJ*qDK_TD zcT3%+xzclH)~S5|_vzTqNwUChwwTGFo2Owp>f2s3|BaADsixQnRZbpjXUlF9Qvb!B z*AtD>ZnF$(wQ;mpD^x}-0hz3gS1{X3wv%ER3M5?}9i6lJ4O=#16J!NgSO-()TLPk+N}{BF(&{}JgMZDkp0T_-Gr zS1ruWR|j8c8o%!=TL~pW+3{aSLrYQ`O4*8YDk(UMdf9>AoL`~fU+r$`Ns3t;voq$K znB|@zeuB!*PWETEx^h!-sP$cR778(oso@4|t-oYyT7<4*B`C@X5Z}#kz&%m%C2FPA zwP=^N2d4*IfkpmxzAs75*ynBOed|5wQ~dY+GlTzxcBwV=cg896O1Kr=^=iv+OsMU^ zcQS<}F-52%&fxC;Mf`yF>VsHU8Y%tB`?Nv6Du0hJrYCHGm+!i(y)N3IWOnOAykEE3 zp2~=Y1edixlYaT=A`ssq5r6nHuHxCW%l?l&xh>f=Gtk-e{x1Qb51zfd<_7qP0_H|k zP0fvWaDZOe%KXN5qk)-h9th8kd<(DQvwTEv_fA+TR+ZLCucUZTvEe+6he7wev^rNN zGoiC>F0M4l{F_EPc9)h zyUcyQ&Z7(2gfg>$u!iLA_4u8V(67G?`^^}$7b!Xl_j@*NA!!K3@DdyfonzZP8oI|+ z-v-9-A(&%Pt*`cn){VD+08j4_?u1d=EiIAO`=3#_tU()c&>R;2AtG=hFSPWvmS&He zB*sW5$)=pf*w_G-`FYwT_?wJ&lvdhYoZSeY0ti0sm!2 z??O%S`oDDAOY}1pLG=bUXX$S>aEhb|bMZKhmSlM=YPHfhL^RviN*iU9@&xA3W}jeR zY2Rtj?^xrwj|ymtGdE1YI9H}?1-JfJo`#;5o}WAsx6S>+i6G5BMtLr;lg5eh!WPT; zXj}47yPA{1%Hs6DNTWEYR#AUae^mFdFK-Op*ID~Qx>Wf~`ce>{cLNgL?oEaptX$*@+bXnQ3M7Tv-& zOP=VvaL({YIH={?3pEWyWKb|Q(2J>lxxbmenm;eQ{CS_sjegyC5%=&cUvb}Q61bjb zHqU&Wv4g~%)fu6TVVR}8jmfla5@-_K5_+xP(NgssX2?tpr$%-~2U}{QyPYVwU{&{k zg*+EiP+eXXSE2FA3ah&Y6lV-u^*XdJQ6_>fMF%SN{_IKP(SX#o+(H#IJEEgn@tS4L zSw=o%oW4TKuANs)sN2AEdgEeHLXAVyLR&*Q@S;@Yw)#=urDsJO@W#joH}t1@#>@+z z{($W{5?RbybOP<+32P@I8KmTqxCGtbHCVK4%0Xu3DfSokLXHaTPIVml9A~(NG-W91 z3j=KFXsvp{OWlX9ti>r%Ol~hP2YWwEj>t>7imemL42{q*b+HvebyH1FL#ewAG^UoY ziKd4B|EY1mV+#1(H}*A8Odb+#x}cewgF|%^$k9{g%HKJAuHgcU@P>b$wqKEiy`r|&ji6%8h z?aPLjqL$!2FR2efasL~;$1L``Y4m|F!--#q#Okk5e!k@?Sjv8vAQS>k%0_P8Wb`M~ zNsFio;?xX{XNLF+W+#P-f4{gw?2eCW18#xW;CNrb?X^ModylOD=4|4*`TCaIx&?bl zchJ4_bbeKV=WoWg(wZdit8i+?aSx!IWLG)MmRAa`!eir!@ej!X715JVKnHXxatbZw zkD$%jc`k2B$4CxYX)A?SJq2IdB~JN%V9PH-_dm%iVSI{%*cOrd^GuXO4fH*(@xSbC z9S&zP*Vp*aY@X3P0WUmlJuBTiT)my=>_OXiazioEnl0KqoM3EFUj}CezV!ROpE7G_ z7SBx1=*idXjDeYNGV6Jtd2jlr`>*+{1YQKb40?jOf(=1RhX*`?)&3vx-u>uz`1`>6 zxP#+^twYxuD=jl5lUSw(-4?`Cx-si2C z#n02n_wXFk#nWPCuu@GL1^Un##_T6{=Y2||eGuts`Rv*4hj3uGwe6Erq;$~+GV+*? z?N218Ytj5Q|0Sp935jqXe(rPFGFw@zfZjHPRcLRk!UVh&e{M_MM`Ik5`Ks$UY|n+7=O*V+ zJrISRa7=q8Q#vgl{txeI?O5X6z&(G$^C0H$*nx4^;)Hl_T-Ue(u_I!JdLFtCI*us0 zZAnruYuV_6@UKQU&8p4}77Fa~ck^!{H?flcH~h3q1M`Bff(`M|G*DZxDdocz>gC?N zPXg80P`=O+PKB(&M!|ew|Nda}(5O&5wI7-6&-4lA^RO>6#BvFx${O((&aYpY=+DY; z_&j8JGn%=3LQdgps~XJ-TUR_>-Q0t_sD*x=$*d8Iy|5~3$sn^&)WT%`d{V#Edf^g% zq8?xhnG^adbchs_%_Lgn51jPR^bcn8EQ@RXmOnchgkORkU>+B%zu;jwiE8;@GEIu( z3%H2eb{feI?cj+^@TqUd*)*O!mA0HQ!w%^Q*LWptYq31ii*Ex z!@K8s?fK-H<(cZP@3J{t*uS&=BrOttvs8#=F$MitXl@`6NvWeV=Vi3XD43zA_spo4 zsb*gAmhf*1915m{s^Omw>MwE7HsY&=dCbUW2>8I>vHi`{hH5q7%XX7`R$I@9zGIge z8|fU~VCgKB#HldCc1gKlZ{;ZL-0H0AJnmRYdZVFi1z9d2trO~7U6w1HfEQqB8=^I9 zjskgzwiEm{q)mk1xQ}Ki*_?+5O#lghLuS))lysXx=C&9GjPa;Fd-0^)A`@*7H+>0q z(xA4EpZ6C`8}5jkUWe_LE7m1Kytr4ajwWLfZ^#VEBkhNSmw0z8;^6p$9jp?1zBh2t zeei%iwB7*U+a~6Mb?#28S4%X$Pi*;6)MQhRg5j-|&*4m}E>6Kob(dC#&fMVp*yFun z9aq#Oa-?2Im!Vk?fJh%v_mf zF}7AMyg70(`T=!RLvfAtNp7VawO?{467#)ho~x^)fpSc?NJp&g zqq)PHo=009svh+EA2Z7(lWKW_Y}hrvlKyo6{}4! z>2OJXEjJ?#!$r-)hE2D_AiN3n2;E0dG%5HtSReOpeZ0i4wcSkRsm3qdhlSbU2ZS4O zSJua^Ji{pfJRMWqifDy_per!?==LrG%`E`wQ)0)yE1#@25~s&Vly_i?s6&$ zz27kFv8Y1kNvnm8Pu%unC}>f2{*r%T!YcF=4xH(Hi_!A92AXt=tQ0WpugB#4@~ zlJyRK8P`cEIZc|6jgw#_s+$V@d0Hedd-+OhKcTGXkbKfV@^G-XX38Fv;{}z+=mihR z1M#+v=LuYeGQXbijytIj2*7pJT+L9i?8N7G5f9>8)Lbd33wEF)X)QJsqntuI`~G~g z$BLm#F2Jwb$nBbiD*115lr$JWU_FvUGVE_1d!3713`rm;Op)?Nv3IYlsmQjUVq&{w}3Uc zogHdo@D|K%a_}EE{)1%Oc14p^gT#-Bc1GU=7I`ClKH`fO;QKDjIlot)Zfl@)vp2<= zc*3DLRmW0CoTIY6uF~CBR^BbP5t@(!(LVYk%JTjI)o4k1aAbd1>K>xXi=-FUiA=IZ4zp|!{$u(%6pO7(Gj@a+OQdq z0a+S|p70@_$(OKlh1tDhgr@9h6Y2YCPabS+^gbO#duXKfqVZ58E_`v>Q4oD@k3Wju zPOHi&KzlGP-it1W z#|@!0aKRG=gpQm>DtS-`K*f6DM2Uh!PL(XY@u%dzwshMP`aNWlJ+nIRJNuLWG0MH! zecqk!Ugmz`s_Po*?B@8{UPc)wKNDLD4K1+|t10QV)r{c7z-9j%-$-9c-y!cJ@`Uer zKY45Te7;Qo@qfzZloEuC9$Ft7|A#`r2FJoO}4^RM#_gXjQ#BD_f(f!Dm007;)8*y zfql64%LmUfL0k+K$G>wGbaoBN4QKUOT(qBHJpX|YtB6*!ts$ZCeoZQMDe}(lp)Xzv z4%&n~sb5)!SgyzTqrI_d-V%`$PR*G?P1-F%EljQ6!{xpUVU=~`4f$e zUPe23wwFc^G*tz0>g*-U`and2gUv@4(kJ}4S?Oi7fjms4L#HUJ^*eZl*2Dc5VhcZO z$%b})33+lOMH@_iP%0*e!H2`(*IgxxbPx@IQ=BVoBN?a|F4fY};be%+Mc2ENujKF) zd4?wofPoP-UGfH{;k~dHnz3~`ZDxbgUvV+thS?n?Q0IeV|O3EX^L^26tM01P@AAj z>yB1uCL2?Nb&pVpJJM_GU?1k#?cDA%!IX2medN&m=DgzAYA>z)PmYT9giOnVs1{yL z%41=}qi54rs^!$vp@F>P`M}h(tZu^U@!m3ZF2!t(?h1RAiG*M*v6N} z22}p>sN{5b!;$cYYa>0Q6>*w5g#=W?=kf0c~*%_;6N@I`BMI$QRrPFpZc(WRp451DH%Dxt1H#EngJ{FD~aHxajTDGORi=Tkvvejy!~fvMP#buVh~Y-q>5Y1BURcJW6UUPQxSL z*z$(?HfVZz!%pk5`T*^vS_hTD*3gB}ZuawTY99E6qWTzILWywN4)iSvJbO#gv&`me zAFTTwGYwb#Qr?oRXrazTnvnNb5`E}E>ldWGT@y=_kXHotUyuJBEnB6=l1*xevZk?h z4e6x0qJzomn+Th76({Ng{B-9@1WiU0{4eZTCDIJr(k(iX=EV-ygVq=v!43J@Ru(>@ zrryWTy#a2lCDuF4gNOMmpR9309-$hjR34D3SkRaKk|O_vEBF9;n1{i7KQUjvWU92n zNVH{3$Q!K-^PDrh5OjJginGCFeyhe1^IH^K+auqgBcOp=cr5G{$D(&zEDLBgM=&3D zlSj&}<*#K`dIEo!PY!X?x2DBqzRf{W-BQOD=VaFacXN+B=6KAmm_eQ%?l$giu7QqN zrKVg=+-(`jRR2jW9bDtL`}BTP$tjIfZRx!-e3^OumjXpYBeccF zcyn2}0{YS9Xje|VFVLXmggGxo9+E*;>vgu!`j+HqCwS!s*2Tg}aiwUAYvirAGbF!l zAwzFDNg0XCDtVHWCZt+gM)O6cnG5usT9W!js9kVq!0iu^EoOK#y~TY?eR;@d8WlVm zTA+5&=IGbi&X0!kqS@cXeftMEc%jIR@CuZU-*XO3VlOMgpNGR+>Gbuo!&hLs>cqq} z1U%+3p2w-uS?N07_aovJwDv#ZtjH2gjPwZaHIt1TMpyj=sWsX8%1T=EP;!t8qd(2m zI~tOC9vr$8UivsDF9Y{XvZXff_fYn`hn(lX@ush!yI>m`oEwak9V+lA*fr`xXU@zDEk=EWMY0M$c{hZEWSV41^a)THzi_#2N4x zJN-2A6x?PN`7O9!BRE4ZPi_)Q_OEbr&5}~ZC*mi`YTJfZw*=T@Q|B|+YIj!8L(gvV z!E413N94}!y6SkN%#sU=nk6Rc3J=#uh2HuTeHSzPWeiRGBPCzTqm=Jb^QF#C9ZExi zmeIl6)OXeYHuxgsRR7eD7>TfT~JFze_~L1DTC7yE6#Ety3#t7TrxsF(45 z#>d9NS&?@Z|6uaM!PJ!8D+EZ5YX~*GM)AG~l*Zr6G2Y)!$34+>uirO?aTE&Zc?B3s!BvV#sfK@Vnwn)fzh zja+!`{YG9?|2b%;=*s`+b`aJCP&o_T$c=E*^#Yq4$(COW=g=8TW6~kc2&KtVXo+eo zLv97HXD745ZZAx#Z4JJjDTS0qwkbH37K`PD64p_c`OzMcZsDb9bko3Fxom zd+d1UOm!u@<6}<5c8G7DniRrZFcE|e1A3sk2hjKebG$o;oV+RC=LIkFS1UerTR180}4Kq$cSYr7hKYqI2Lt+HUQO z3So=Yi{G^#vxb3ByBxdm7^$wc>WRGottn-o)qeVq~;}acqo}ARYAoPP;*B}!TW(GtE09RaMokwT{y1ii7SO3 z*1DF~(IJuXq*bjm@*7!5y=@BmqT!E@!#(Zd*2uy1&^Pp1t_n%k zbd*Hf!?VrDq{6$HJ3niP3*rno6gI=b$S;;v%tBkl9@2367B2mMoQz#SX*St9qF`SG zQg|4~sJA#lcwwC_fUu2c{S$j*vhAVL+cBD~ zt7YsD3!Op7j}C`@6)u1))=$w3;V#BUbuwK#Wqk89%VzvTi%iFi6&a&4r+C}=to|Ua zgUdpBwY7RV^WSjC=r~J5SlbP}r9((r@uNh|hjJ`4I)b;a1b*XXaATx=!UTAPzMP>` zg)-t&QZWakGw+6CHkY`F|5a=2Bufj_2XDiFoAbeWR%z8yZ4A|#X;-ymJq?U0KNEBg zJPCKBOD+Fc+QKB~WhT>cikudP;c48&iM z(w3;a1v_txw&W}<&3;)&p<7O@B6PJ5wzNX=WWq4b0GGO}<)=?2mW;pBdOc&3`Ahgg z6!cvO+_~DmQLK=8~6mil?REftS=%-VXIkMUl3XnnBZ^W zE9c#i8K0ReV@mq=^wJq(rkQ!)8}da0gVhpxL)0fCbKyN^gD0G!ed%moK_-lYy}m;D zgjqT~F#HU+&_FaSlgMG|jbi#_^p<74b%f9a_Gb;u6OF>t7jzK$XkUE_x4z@G$U(HKe$96J6q3+}3^J z2Md#MvYN)%%ecAEMzi6NYYCU!1W&{h@hER+A|A23z7wX7K&Q+=s%JD z;TGmc{Tv+&7t}dwLG>_dwVZhHp6El2k>=%a-)IcHWlKK8pSiV{;Y(W}C&~Au`%+7( zo%k;&O?5coRrq~MNi|>&N`QgXb*8y;dS=Jurbnk`mMU5D#ovov6qDfD>+G&Hm12df z(JN+IZB}5VcYenBv?3`}J|6rK`=R)U*pF8}Zu!(MwQl-dddkiPeha-+ujw<*LE&yN zg)#VW=E5O+d8Y@3FLUEm3cn#mJWqH|conGv-?FV{T5E~1=t0hd3)LjOFt@#=@`J6I z{FZw=hb5gIJW+oYS{MlW=6FkF?k7*PYDN~=9tXV*W4!dRhyZs}#{Y6}UENZmSY{fUj`vak<^ zdYkByva|7w=k)$a=Rsrf4_cSb(r};0@-i|nJcTTYzIq4pc;5flSR#PUKhvKXo6Wl6 zpCjRDHKwlT!e()Vv`M~fi@|-k1Aed`Zka9InU_FM;-t1>U-0=WC|)MAo3BJC-wx$u zA6Vpn&`-sZP2HTW`@NVOT>vu-0T{ig5|&Hi-ui`zm2A(PDLSWuwesIKpm zmT>|vu>yMbkF^wY+8XlBpRg%3mx@SzN!87;^o*8|6h@~vS3iRzb53wu;H7`Bezap=rldS&=$>N{z8(+vxbMVBsun4GLPouBy%MD!_Tx^)7a`fBC8j|qynWc=$IJuQ*gUi^Mz!dcj& zUXT~?ceo-=?-Qe^IRol2Pt<^Q?@puAbkMK-@Hd6T4xA=mT1rKylE2&-7VWtCk#zbU zWUR~4|JQUU@HSO%AHdJK=UlUrq&ZSjD9TKsQZyM#1OEn6iIgZ~BN<95DHW+uC}XBf zks?DyC>1hODD!mPd+s^!cWu3QefD^UyU*ThJ-_GqJ;N$ZcDx?%pS2-TF#99mZ+WmT!9M92UZ?9|6r4Y zI}crW^wncqkAIMJckb({-RVn2YITTj&-zfEs4D7k^&!o!$SN4WmEUNz9Ivisi@!X* zj_uV}?SY-?(Pa1cKCyr_t4t4S6aSul*)nrpI+xF@T3)r>DkqEQTxQ0rvyYEH_QbJ~ zJn>&0fAmEAoF1}h#^fzdW%9eppX$i_w1sw3)cEZzzhIJh)4`b~G}zv}>Q!k}PNn~sj_eqqS<@O@M`Wq^rVjzmp?Z# zalII&?kZo`D3C1BO@DZfCH$#T@V-7#ns?^AbRwOXIzT=@o!7_u4s$lOO-;*REz9{d zaiqifX2ia#26P&`u(jBcb6n3#H977uD|$iKUrQbMqVXr-(X6Z+lDo2x7Fb;H+`^@b z9w;_bbj*h0txj8Ayj8JRi#%1RWr2ptP4V)XDXGtLpU4s0a( zbYS9vhYs~PavBEX-kj;V`%-<}JX~2Cb5l0T z5wXlOWHDZ?=4MIWigH-hndxq7uDqa+6=xs(7JJ{U?n~6hdmLLf&8Xim=J~Wt#`7PS z`7G7~3pNgy-Xd`^YN$dD_YXvR{mt{!6rRip~3zST(H*9jKJU6`2R_?TWexgsJk_ht{1A5gzg ziz0(ru6t!R{9bH(vDrnRFWjc!5%oD*Wv$3OpFc3~irl?91y58wR$i6y^N*}LybL?? z+|d=s&Ob3R=hfUEskZ4(v8%G~S6!o#*?OwTp&gdpS%tF2vMEPo%@Mn`KoyWA< zj_vzY<^0?8%d2rwRTkJo`uX>%nLOz!zfMzMAoA{FI`X#I zfcQhWotvY`+Fd*)-B?~tWZK;=rg4>wj~m6MtWr&-GB)jRS;nJ9Clt(2rccu0KZ^~f zdG|{6Om>i4^rXz9;_4mW!hXE3NWT1{_Y2i1_+IuU$))l}24_m7*Wy1v#`|x93fGIk zo0odTd_AkvOEY<~hFJ|fxwXm9vnTUn?J78wpLCDhshS1GWcN=tqUD4tAtgzK)rqFr zRn2p_ui&M84O@y-E&8VVcN+`;TzE&JVg)bH-X)Ib%=p6eGpRxD^L;0p9qWB$#NlqL zhyQ!H*^#bCZ##ZT&b*T~@;0X?rtgpa7T=OJFR?wjTx3pdb;h17kX7I{tjv|kfodd! zITHGS*xQ!4sa7Jc&sS}2c5J<@uf`DLS()HdGJ92|tD655hWoC(Vf5E}CqFh9!t<&m zotblb&Y+wxPNrC@6IGY`JAFGeI#0C0qvBgHmrLC;tBopOUDO7=EOUCgy_pV6;ga@Z zsE_frUzEB%)t8Usa+L``5moeY>^iLHX0d5?)cWWRcSp19^D@;`!Q8Ae)Qf5XEmnzr zko>XNNS&*_+Lc$~KDFepA{TE|g)J~2^W>*q8Q+BUdNor<{h2roev<0;pYww5QUkAf z=6<%*E#@D(Ks40sM4x0E5zoIDI8uR8Rr0&muFaHa*Dsx4L{$|dZ=RMhZd81YH&8U6fQ5}hP@>KiDA^b%i z-j{jB^8hhgVpt#XWZOuj-K=IgT+)=ubo>u$?*KmRUFxKozGu7GK zBckFFbwmrsZpGbBqzCNtYt`GOKaIe{{1u;?IG0DHOMx8)Z!es~J6X&;qO%M4FZ6AJ zlgURD^W#f0U*&&G77orietgKW_m7S;Q|Gb6y^gFq((&k^W0#&to?MjMJheE#d*()Z z-_fjZWLK6>rf3RjF~C!KQ4eRTWnSUgsg*xV{8a&Qfe)JNWROg~Ay}CY{gU_H%K}Eq zV!v!RR4bk?kiRN#Z0=F{D|PrDx0~_m2h~10%lH2^XYt7&a``w@kLEw09>d3VvmD|{ z;zkN*y&hk|XV@Y$o>yW;>Y!?j%h{^sb3a!juT>ViNuT z2lHWN#cKMMf5|;8E=pog>N>i3MYF^%$b2C?et_C}z2x`ZE~fBGvl!h}C{gGhGZOX< zSw7i2$jy`LVtpU$p1Dn=K|gg=U*k>b&sYCurZ2zk{i2L3CeDTDXC@y^UM6d(AFuUJ zS@yNE2PNN!u$>aOBvz1D&+9uci9J0(`JT!`%~X)Nf{dP}?$!APzRKPrmZ?rwyZGPq z%a!!Ki&8D~hR9kQDYyQ8wbts2yzO9S$6k3qr1*5xKV^!FX?Ty__LNwGfqG&+$o@pK znV6ilVr|Q0JsN+)h;JU>(2+=tXq8eo>CDdKKg%a<%~ zDVLw4_unI5vlkEI3VD&uXgd?+@{CipsXu|piDsT^nyEJ8K{Pw=K;1OFYdWnJssT z>VDX~6SLR^V@TmiW)~ZqO3@7Zn-}E_UekH`P59{xr)%*CUF}Jgl}k}gwcO2Q<;|Ig zGo4}c5uTko=8^2|`!e}I-4}{S=;bh{bOZuaWvtwhVs5y5ef*!h1| zw`#^O_IK*>{N?sRmD#3h^k)S zFQfK`{7Pm?>ZbzV8p~v3`6n@Sf7$OW61ux6za_qE%xK6yyK~=Y*xoDrS#>NBJ7r^kvj(le=eHqcbv=5wsYe1^^;lgo;0Yo?#xkj z;5N|**T~>)C4yrNk48_|(Tq;_y82!Z#m*uT-&NCkhdiCQZ(S*e=_o1ERj$)>GTbKO zuEi?A;UQvIE~X1DP246?UV%7;Sn;>P6PW95Y~DX>{CgOismm{S~`d#7Z4FGK7TrUd{KVqRc*HIeeYj7!q6LK34Wk6XIv__ZPr(u2Bc_A+rm< zEW>AmS($Dta3>@@r@-545H(G{!ge}4>uUM@i_}Z|Rit^*bQf7l3wXUZs5v=Jirw?_ z-N(s>c~Z9iwdSpy;(w$d!=Gk**g*rF7<(r6m^)DqMx9OS>K+;4fn~ezJd8%U!XJPiI>RbdD;~(XvW+ek*v!|x+GLTuD1EVo<%WSMFF#T zC$QRi@p?wXi&?j-C-p0i;SqUWGqF~UakH24r>xCtl=x0vz>3NJi38%OCy<06s}mVd zR>DFoO1`ER;4z-OQD#A0CpP0|F`gMr;T2iukmm>4K0VbC>YCLYKUC4vzE4e*US=_D ziz}WiqxbIY3927%KBMBN4QB|<|sWcp1Cl6FIjb`dpudSrM%Qr z`Im}SDb7l&McSViFG}uyXAX&lG^&TNI_3T9dhx}cWkECYl@|3@*PVORy0FNDQY@@D zSqUTD{kKFQl+v@0yUXXLw~G8Oo&J+ma=9$<@~V5~$wVEOI+A*rhk1k7#zDV;UTO1$ z-X{mLE35Ez`6kz>99l-@kf~m+#9|LM#~Y<HDnSE!J;IQs%o5GzDP zd?GS*i)hwist;F5bj^BMbVBoJ7KMw{UEYRS8^X)6A!}pSsKg9&_`Qs$zcBmv>_bp+ zZ1O0+;%9ln`*=66GhbvYb)H^TCuso5b%993dLpf^W{o|eQq!2&6YA}Zh#yq7@jUSW z*ZHk~h!5ba7Q>QB=lk^aGD*98%F9W;HS$GHsvh2fr23an?QBo#8nG(Rcy@PWKEqNy zmcBCGj?G@f9Cor4%%sp+4(A7=V^^4a`W;mbt3kpi-JmCG}PC}*E zIe4M1`Jd!JLwB7-j=o@~*g3e;tt`r~Wk|osDts+d+!)K{-QFB;fbFVhBwa2B?U;Okf;(WB16_^r|_9;4}o@wbiDIG4oC=H<*zwio{t<9%8qD(6@8 zaXhKg>D?-uXUG2%RdA`k)18-at;mvUG~@|JcLQVb1S__c_~*OSL+*e#>6!joFVCdj zOf907Jg?qL2NrQ}+{Ykta!;xjJ87io>%}r*=7bsynfFB89wZ6Pp{QoWd+FBZ7 zPimjqso$t0auzGFzgCLAI>Ix2o$RPhk;~HjhkglW55=*WO&FU3sUgnlE&Xi1fO$Pu`P> zl#LCV%?3FgSKftOzeMZGE*kd;BO&NZ+g@LoWg9n;3k+6Swqiin)5 zTJY?=Z(&zPU6UmJqBc9Mw^*Jrsdb*fzp6tmP_yARVCOw)oF%o3Wql2oq45E9dzp6d7)G@p-S7kPfg41jHp_aIFLWoa zcy?k5D>;qbx?44<`sNNgEqNgwy=<~*@^3i^XE|PJEN#KVEHkUn9G=B%l2z0bsR`5W zGEYDyJjZ&mFhj(w4^MP~R{yAraD;EL3(t8BqnzXs+CXlv^7IC(q5q)yG~W{^_m(+H zTd64fGF+bwBhJpe#a3QUQ|L)j-3h~ovFX~=_1CxqH>)O5Ob^|lYS2&V68huc#@b9c z@tZp|!27zVUw}zJ zEAOgruL;g#Ap7erI{nW4H2GJL&E8vl=PGrSFQdWrWR?G!In(S5XT)yc+5HqIO`%IC z%~F4pp4^k}y`BszqxO4$84z#LzP_dztQG_Rg-E?$Ra%>%{%a3o<4$9vn|HhqnSPcr zH!`t6uGjKJ4cbC+Rf4`r<|f~S7~hMtd`iv8l`5mQQ<3|+>>IKhXWz)Css#U^5_S7< z_M7Sq@5tUO{;Upmqqr&`7ZsRHI|@_pR_DiRm~Y>uLnfzgvD4b9A&+llqQS(bOAxE!2dWC0lrE-rH)FRUz@- zA^CQ*vz}4;{2SKPIS{G|UEm6J67Enj|3dm*0n(;2&)mhHNhdnRuJrj3={prg?tnBa zwd3MEhS8)Sh`$T@zhM*BQ>nII{77uL**rV&z&B)PUJiSnBP&{vaXV-`hk4j)l2}XF zwX0}+S75Q4soilMTW0{|s_1y2e3(Z>#19mibwriA!m792FT&snzR|Z5WAyu{M0t)B zL*JVIchplJuSVKMSxa5ddn~A@STxr|o32J-6I@GI`8Kc6V_u_e%!Oqysjk%C+@pu- z?VpMXsmLRBh`Ba>wr6>+isMs^gon)P z+SW+f?s*h7S`M&^&o_G7=D+Mar{lCv%4dxGOwIIVwlRCB^J33q2`{(2;Ay|?J4Sl) zGxd)w@9St(PNb*QmQ&t|rFYzwmp9`;OYseTNbJwegSJeiieKcc9i)@5h6+E$eh@9c zT6ES7c?bM)aDK21<@GOkqrZyybDLzun`;BUx|HzlL z1{=}LQ^`)G;D1d0;+M$C?y%^%xiLP1`gdRp4zp!)W83}bW$IGw*DHQyjZW~N$3ns) z>K&}(Grl9Uk-V9};@A|~f!D(E0XTw3Sd?YqLTNR6|0m<)0#$nMaqcR9ku#mUh5S$A zgqP2W#TY!o10O-Na{(k%{_+voB$2XENcv-quOL;t>i0~*%%k6?0 zn$0t@3cHh?Oq&7vPmv9I_|?scPhrDhk?jM-LOv&FZIp5GlsJ_<@hz9YmCmX`tQIM| zjnDkJniFxk0YAz^cpu`_Ozz@2EGJI3R+iet@ssKqRKwmJQ&X>jnW`^R3GrDmV~wzd zcVgAbz=5{rOuIy%U51-}meq00TqtjoBwcA#m%GcwQh%y9`4d*)50#qdi4VA*UR4$b zcVN@E#0H${nZ#0K)yaL>98pzNE1d5BexttIpxjr?Ci|Xx@l)tm8PU-LBJWmZ$i7sj z^Y`?;RH_KwsjT`3chRwitADeeEIga!yA3;YLMCl@_Recq#=DI0v&i`=?Dzt_&-b`P z-QA=267$@pUhZmdN6ix#tEVew2%A1l)Xoj6h^>YKbyY+dqmJ;-?A5Z*PcKl=yap$- z52!A`F?$g!&jK{f8sz@vIHh*@(#|67r$ep7@?5LY zgg(iv=4b54W~glBFNjxHIes5cW#`1C#4a9~x){gX*v%bP;J-InJ6V~ol1Lt+%`6a! z@P&T6UO(QddRIa%&d0s0pL)nYn%Cn(Gg4k9qoq%FFVR(_Wh|~%k!A%e?oUX&U*yMb z&t-?FaYP;cCFV|gS5=jcW&_!uT&${I54E!YHBZo+ti6Buth>XK4P?`uq9+Q+e^d#l zqiXv3IL!I1v!}4kmtuRI&C;dIZ-@mC8~2)G4?{U92y z1)FIy-oAL^3OrR!@#^=`-G(@%;3}%Ty3QJ;l}SC*MYj`20<8zKwQWA~P8p^`+C-V8c!nb=pTyJ}LiuBdvVC z_8u8BkQU#J^p45gTStn_&-=<<`w|zuTz$=nWOH|!m(8`>WO#+VoAR#1BG)CyZ&tVO zH0KJN73YMSoH@A{=2cd)yJlW}?{1B&Y-~1%cBIaSKJ)(Wu2q zw%7E5>e!Z_A?2eGXl?9Rtcd!x_t7w)6MeIgPcz8qi~Y{>^!;XWNXBXZV?eKlKcZNC6hMc^dgvONk&X zY>vSFJVpuiMe^0SN{Yw&p0@fpf5SppQIvJyZy7A^Cv=(PH2=o<-gjvyKaknS^Uv24n(Ghaagzyg{>`yxQ_QWq$Luy&t8v@| z%di?7Uf3_LLyv1MC$c5Rtdl3vH~uQl;Ro?qdvJm!X^nO16>asv0a+tuP;Zn8zu&Wv zPT}qy5*NA27+Hl^nxpRWT2(LRvkqpl4W_||aq5Z9AScFTeE@R@vLLRdjTX*Y&t_}E zhn^i@O4GTKoIZw;c~M3}W&VvV^zjL1g?u>uDEqdhUvpWyES>BiHhTp*J=AQ7H}Vly z%-_d{F$dG|7+ySyb=}2|9Z3ftsy`3Od(Qps?M`=9k!*moL%cSOb}~zUe~Tvaj^#zK zwpYKgr+4%#0_a+||BhXWI`Y@l-EHY$ma!vA2b1!VO{XRLByco!1dpq{E zG|4@;}?ics&olu#4y9OWOG>bde@S#4-3ss@v1-O~h$n6sOXXT%u zNnGfB9Wm&w$oFBGnprsSO{~w;c)_Z(gPx?j_2c)Mp^obse)NCYz?I0dHaNL2)YePH zuGCKlK)~H% z_UmF>){A&60r%>Nt!=F$SabD3o2w6cw)mox?&4CFdWO*;dUyuSpk)nDr7{mtMY$(c zU~7F#ZBL{s`En)=@o&t+2=iUtNqanrefSfm7CBTYdd!pJF+ed_6n_*ZCw)gHgkYKOA5S(?_A8Q za01d@%|qIS#WhrKUBK$!Bh$JR-m)s6>dmZ>`}Bt{ye-4k(f@|$YA0{mWvq#NFdUQl z4-R2uD$t=Hg^k0E?wLmZZ)S(vDaLKH^#*N=lU0!!fIlz@kpsW4Qa(r>wS*MGn*ouu< z#3TBln2LLFW?AB3R=eJgtmf;)%GBd-S&-wfQ`d zgY?1YjOT0h^^4LeI>CBY->2m0SQt7)jK^q4qxIj#w6^VHABxk^>zE1P4xj4mvz_p4 zz3e?nQnjMVx0XG73$~yYpM7ih|0$UvpJ8*hs7q1Bvwp!d{|O^3(oEdfW4OqnEd43^ z%4%&bJ8ix7Z#+<2Vu$#zv(*-gp-{ zND{wEs@20~pGa@R){VvS4#a_X!5nqKl(zQ!Z@^j9rNid4o;RotFka23$3-kv7Duo_ z^!E%5$P+BbJ88$a;RtI$$>#Q2L|I7Bv1j#I<CCra@Jn_Hj2VJ-w zZs%TDd{d?&57gC=uDpI(G?U2W!jivT;d-p!N|N9QOyG+2A}BZyD>#8a;RAZe2*0Jj z9vdP{y6RtTNQ*o4wJ_dm!pPdBLlttMhTdG>(N&nH+V;bHZr39pfTs`9X4>hskNb2d z++qiP_X)kX8;-G;{@j}$`Ii6lZh8m|n1`SJ1_QHRt=oUuO2^nI@yr>bY%e6W>SA#2 zU`yT4d)h@@bwAqO5cch~%-8PB+RP?=&OvnsxlKi=6*V%i)W53Z7@LrT_p{HQz+iO} z`_YGl9HouHO{^5Tu?Th^iX9avbOf6f7e^q-hkbFb*)U6rlrCXiLUwpz9=`%!DQYQV zor;Bd9#0rI2XTD|NUu$@mVd)#F2=QdiPs#hpTEZzAIR7HlF`?Lw0p)iJj!=>H|f_R zc6;nLoZ5A)n5&G@(qwf3_RJwq{%22nA?|&OC;c(T;T>Lu@SF!(hbR6jF7Zw6eXo72 zFMLQR_}F`2_r9S#jBn{3Lw)L9ea`H2j>kqmh-vcU){9TyM|&vFRxJyUFQ-LZD>mtN z`Ti~8#v`ur8CUtREAC;W_H@?Kg6W$PB0k`9rH6Z$LJLqbhtv*V(V?=qB5m7`+Gi={rKQRy6b0a-CYz5O4Hqecx7| z#8C8KB*PX=>S`R;N_|EV2Bcw8Ur9%0%Go_1f}g@JUQk1=awUExf9ZGP-KSiKc*`Y(&* zgx*%v?<>mRS~BWy=aHaii9ds5HEG**?O$o`)NAMo7x*7%S_=8bd{JV@V>zy1ANFcDzV2^rZ)~%% zaO&!|xW>KeqHX3i{#DQ304aX;1b$%;F7_;b_DjCU7cNkB=WF+Vil;Ec6Zit#IFYY; zq-C7G|Bhe(rf8VA;QUZ`^9G%e%u-70<7V@4D2vDxQ5&%uPj~yvT7F5!XY^>ONVI{J6olG{BPHqBk|gX5Q-x z@1`-{qkrA=-}T;X{M=;LksAI_4c~F8?1ALDs!%e2*}~-y{28BmG{{UNblFv$kFNyt-qD zAGJIP`yUcF)116)0)KAiBfn8B!gZGV@Ze_B^cw!T$~-bvaV8hgSp<-61V-!Z@E zfNS|Xy_v4`2mNdn?tiZ8j|pIR{>MepdI`k+$$wpA{WH7yM|;0(>!bE( zdaHb}zum6`?&8t(aom3{jXL~-@LRI{i~_8|Jg=XD-Mt7xmU16T@-AKOsG?RmLj5Y9 za~(QBZ5lvrPyeRO4c0X*&Gdx&-cy$qc9Wh_9aDUp*xQEo@5NWP7H8R-SEM(OT`!iy z066kC6d6i`8L1x**Z)TF<&D-aM~ju6O^+J~VaDjKll9PHA|pT0Mna|WnE&zo7Bjr^ zHT+pb@Zs)7Gr`LB|##e0UggYMlUnA!pN>> zOja}c8ycYvjL-(``df|9+ewZlmb=K17M8nU|No5G7JP7zL$o%eO|Uw;k<^{7U%?{2 z9N}{x61$K6=dA~jR$;}y-fMub5&v&ziM!uO&zKJZ}W^WgN%8qD% z6B+$a)OJFSeRPeTUf*mTq;t^Yw`d#5?(McAerBV+?Y?2Z^-dbfUK+}A+kmP!=!>RCrQtV(TZ}to{Btu`+Pcu%Q@hCkNB3uwuc=3sG8(hsVu4<#bu>9$cZ*gwD*Vow#ah|K9|FX!HeCt~0xtgya-BeFAXn7Mo z%_*)mtY-)Q|MIps9ZBc$B{Q7Ca5>!P@Kk=KwwT)&F|$3y}2<*xJuJ>G;1kzQ2}-d&(ofTfk-U=?^=-Ds_9tX6V#wa-^^{z{{_J}j;lA@-Hd zRWhZJ)F!NMXMf4?;Zk)2a$^dY2(kp-T^GI9=1X6CVlGv7J<8^A<*fr=1fcAKuTMRSb|QG z?Wzj88nn6V3ZKiRC7g5x|3c#35!(ID^4kpg_E>`6un~{6-Fh{I{LMNb} zk^Q>bd)BgJ*Es)&wjOr=<$HGdhP{#Ia@6{uYd%8nIN<*s(sC`~_nz=e!tXd5-H8*{ zL3dH+#M#4ig+wN>IQia@#7-P>CfuWJ_deXynBNj?)Hoy#no%Zwx@T~9=3@8ZV$bbj z{2~To(!ldp5|7P~$LQaM0(Q!{G|f_p}el#m`8{&tPnrpLYf+JUNoUVV^oki9zCS~W7w~OFU!0i>78k4Kmr z!!8tKmlbFEoxxH&+ffPpLtr4za&(T!o!DxHXl^*rZ5XW)U^@n%t zcg-j4A7VG2^ji)@cpnh{c%)AReIUoX!|x6ECA=%NWBzA|5;_unPx!xoMY_NaI>FZe zbd@cTHrV)^t+#1gX$XHts2ntzbL>Hzbm%3sVDn6UX`=09 z>tNT0?KpjHoTG92+s9&!J{3Xx5!T@&2>o8P{m_}f`+VTs2lhusnEe48_&v+(tl_s| z@c`I7K!5HV_39V&^cVE?UPeLZNJD)rvWZ(k;rnT?cNtBMjiiQfvyt&t&3Fse@YO8Y znh>^}ZDpggJPa*QL%zZ&Ef0$;XyI(IYXi1klrHP6osxuB1{cj zN60)lp`~E!37UAGdGB(q!#0PldepfS*8A{C`>|F3(AoEq9(!PIkR`#A{mao`+OFu; zz-w;j0oaPC+hAD_b^oCC2fY1_9QsLHtSy7N^YLEuNUvFu(FE-1{B2ZLin10t@0oU1IM{e+zkM}hDCnr%9VHT#vl z`E1syY}fy9)7h>wS+nD{$*kbd*ulXfo?`hF%N@>-vi&UD`-FdEoY%)X^QpbD&X2P< z`oD7%e8*&;ox*w!ZL)8l;?HL zE9%*0)1(5Q5jcdPU6qJBwL;Bpqw7|!;PFmowyXdEV^wxfQ?&~zlpiRCH(MQuTKZ5Q7(Wgi2 zZ=v~oSiaOKS;b?r#uy5tC}^|WjIf>2INNR=Ea#y29yC((=)hqN=hKRl|1p?>dpaZH zInN;j0tZ?)(%3JIwt)>RV<}Io4=7)j^r%G2Tt&9jhViu`jIToy-NYWKZn?pk2DaC; z6asr3IOKbAV$JyXnurr^;l0<>32w)i-N`C%B|EMy`SzIh44b0|Y4;F)AjrYqmSDXM zvezp@`L`lT+28&EdvB1M!Q$ylh7OKoXTQk830C@R?Dl@Nf?)Ry!c)J`O8S804U%|7 zB#A$><1oTk+XAPNzgsM^xd=mvj@X}4Yq&4lF!+ApGQnW&|Ai9!S0&~ zW5#MpM~iI(V-f836;L-=-9NzI zV2_`Af7lD}Sm1j?3q1Yz(On9*^J2?)?qA@-r@BA$?9H{EWjoUyo8sE1TF7w-_Tg8yR;PErIdA)A}}NZZwK+ zgzpWs>x{5QM$k>h)~!Ah#@LNo7+p7bHE7#mT-Kn4*P#hiiS&UQM(tHvMS4Kc0K%xg zIKusNS=DDpBmYcNAb2x^|DzCFI$?>)(TQ81g!}msD;;FX{>%Y5zn5(Jo5a}&#WzOi zy_pR9g)CYX$)xYt97`bgQr5;?%WU}l6;5zAYvc>tNqEBX+DMXZEd2h21v4~4^LI(T zx1%(=wf-A1PvJ;?b+7t;dpDy10-z&GWP-2Q}B7- z2Dclrqpuf#(D=XT@A?qE0V}KlhO;(gug|ist<|)x6|tn@sIL7w)^(zH*YUne1%{zkV~Dt`Q`-*}5?+FZ{pjyjtDouJeg%TKJ}GY^%^G z%4rutnV?Y=*9vRdtjfZ0D8s4@cK#`TJRf2mp+N*@J}~m31w=c+THWVduxx|ndW_By zX0|>FD#pJM!;Xj!U3b<03G-ctUUx}bD|{!af8(ySgFEB)mg^bX>{we?VTO9 zGLa1(bo0QIRbo9?F-EU4ZfjctqkXMWTr0AttN*vXmLzBdMT1q{*!T}JAlTE*c%tr( zeNIXTX+4?L{*qJ=I2jNuV8LAYFgHSxZy`%Sqoon{EQ2-QM`#p| zzx7J6^G;#a0*LUn&jj2JXdEp3S@0y-ae+e)=rKE52aj<;{D9cu-QoSG7}}r-oI;|2 zLIG8R^*7no2DU!%yptk)30&`&&WG3jAGzlK_n#NKhEw`M&>X&V{oxk`vzw$g>?X7o(Xow#A zX5fKB-wdAM&U)?RY5@cuI%tVOUu*+6Tf@xT_4>weuYSZg)iy!`_SK|+);4;Aw>FHU ztN&w_uQt9a8DEv7F?NM@u$ZriwAo6wmpc=-!E=0xcb&4AFLCBFjCNqUF0sB4$9;}* zTRIxcC2d2DK(Lw5u+55@ObcR$Sb>v~jeLSc2z!BlJ{Z}_!M7XE9CPkigr^6+650XU z`d-T}_Hy9if=#@RP5i56B~)F;BL2~O5#2x7#Q{sdViQb?@N_KcHI5Yf6rz4?`w6RI z6d5;!%zKl!ZZO6$c!*!IeUZfMBW|=Oe_n4`+7qYP)%IzY$g`Hm$<_`eYDX4wyU0pz zL+S=*x+xiaD>S>Nl?$~yRGgSR$# zXT$4f*q(+LE^Ytx=%|!4!CM=Si`y24EdiARE@i`*Q{Lc!IeFSm?3IS9C88?{mRz`kz(*${Br`o;^gobrnZSJ?k1%r|-26w| zhlAc>yO$-sgI&EVvd}lNCWE~lto5zz%B^heuxz*9672^|ev|zz(dV}K?9Rv@-{t$l zx9x+`ha*G|%=00beH7mu*nu3DXh7(^XdC>!xv=`A>qEU6RPN0Rfe{e#Zz4cbFcnSs|kLF2K1F1 zJ>gSqNU&p@L*1qkBYiI&>mjvn+Oc4R?$v?j)j86~LNDqHf1hK^zM_BiiFCGsdfdzQ z20-Ki+8Z>zVftmrkbFPd3sFm>EaT~dli0YE^y_&M`YwXLAsR09|24Rw-;9e*5O@nd zX`j(@h)sLQ$T@06h4`E}y|p0rDn#^zaeBVxLi%ob?NXzNL^3yUhhs_XFJQ`8k~|<{V5+B){=vctcojUM zi=o8|2pDX%#hA>s?5$Oi%@+L5KRUCL6&5o6R^mkiXZ@??7e3+O&s--WZ3`y#Pn_y5 z?f<>Vd--esb+iYwyE|fX|B0C0LlHk5e8m4cdj!LKFj|N62XMG2@Vm!wx`EpbJa;Z{ zaGrIp{dhdE-WkW?J%KAe>NBB*{}ovCu-+YA$1V)-j>sFl2?PA6s|~)_^_D-P?M7D} zjy6R;?#*5g-tP6$uL>;u#)u={;k&l`#(#0s`}~sde}g|du+67@&*3-ZM86{VzW2G7 zecll`>cCouUw7CNnELS9V?K2>;<&@P!`>af?RfM{jz_PC-xbb>Po7$b{}cY>!RQ*o zFFo}u!@b=dwQ!9)@$9?&;=RrUKf+e)t$yQHzkQ2exkEd}e(#FTZ1oHO^!tD3f!OGG z{}FNC8>6G}RM&as5AAn-;TK1N2VbQHFL$u-Pg(mxUkW->(2Ew*Oa5O!3OZ5HJA&Rd zot`mG9}GH8u)BjFdot}}oNcJ_GMaAiVTAba!1JKn_0ju7{}0+>&?UQTUH=;$&ln+{ z?FXGRpm`_j5O>+$@}#AsqxRN8GwrB7#-46RXMN0gd)QtZEoie3!u?jX+g5Dl`;5cZ zbltmX0L_ipP-!XH*ul4SN2C=5y|^)(IK*Hz(Qcw6T(5=Lup0D&Q(8gLwFBk{KXdRl z2Zp>XyEw#Xm5We5XzHc4k|MRvio9OMY4U}%!jbnm4($`T@eJ8>6qfHJhr)WVwo}^$ z#s7>L?ttWL$*(n0R7Qc1_2KM literal 0 HcmV?d00001 diff --git a/recognition_VAD/test/recognition_VAD_web/controllers/error_html_test.exs b/recognition_VAD/test/recognition_VAD_web/controllers/error_html_test.exs new file mode 100644 index 00000000..28fec4f0 --- /dev/null +++ b/recognition_VAD/test/recognition_VAD_web/controllers/error_html_test.exs @@ -0,0 +1,14 @@ +defmodule Recognition_VADWeb.ErrorHTMLTest do + use Recognition_VADWeb.ConnCase, async: true + + # Bring render_to_string/4 for testing custom views + import Phoenix.Template + + test "renders 404.html" do + assert render_to_string(Recognition_VADWeb.ErrorHTML, "404", "html", []) == "Not Found" + end + + test "renders 500.html" do + assert render_to_string(Recognition_VADWeb.ErrorHTML, "500", "html", []) == "Internal Server Error" + end +end diff --git a/recognition_VAD/test/recognition_VAD_web/controllers/error_json_test.exs b/recognition_VAD/test/recognition_VAD_web/controllers/error_json_test.exs new file mode 100644 index 00000000..3e3a84cc --- /dev/null +++ b/recognition_VAD/test/recognition_VAD_web/controllers/error_json_test.exs @@ -0,0 +1,12 @@ +defmodule Recognition_VADWeb.ErrorJSONTest do + use Recognition_VADWeb.ConnCase, async: true + + test "renders 404" do + assert Recognition_VADWeb.ErrorJSON.render("404.json", %{}) == %{errors: %{detail: "Not Found"}} + end + + test "renders 500" do + assert Recognition_VADWeb.ErrorJSON.render("500.json", %{}) == + %{errors: %{detail: "Internal Server Error"}} + end +end diff --git a/recognition_VAD/test/recognition_VAD_web/controllers/page_controller_test.exs b/recognition_VAD/test/recognition_VAD_web/controllers/page_controller_test.exs new file mode 100644 index 00000000..18d2d2cd --- /dev/null +++ b/recognition_VAD/test/recognition_VAD_web/controllers/page_controller_test.exs @@ -0,0 +1,8 @@ +defmodule Recognition_VADWeb.PageControllerTest do + use Recognition_VADWeb.ConnCase + + test "GET /", %{conn: conn} do + conn = get(conn, ~p"/") + assert html_response(conn, 200) =~ "Peace of mind from prototype to production" + end +end diff --git a/recognition_VAD/test/support/conn_case.ex b/recognition_VAD/test/support/conn_case.ex new file mode 100644 index 00000000..dffd2ce7 --- /dev/null +++ b/recognition_VAD/test/support/conn_case.ex @@ -0,0 +1,37 @@ +defmodule Recognition_VADWeb.ConnCase do + @moduledoc """ + This module defines the test case to be used by + tests that require setting up a connection. + + Such tests rely on `Phoenix.ConnTest` and also + import other functionality to make it easier + to build common data structures and query the data layer. + + Finally, if the test case interacts with the database, + we enable the SQL sandbox, so changes done to the database + are reverted at the end of every test. If you are using + PostgreSQL, you can even run database tests asynchronously + by setting `use Recognition_VADWeb.ConnCase, async: true`, although + this option is not recommended for other databases. + """ + + use ExUnit.CaseTemplate + + using do + quote do + # The default endpoint for testing + @endpoint Recognition_VADWeb.Endpoint + + use Recognition_VADWeb, :verified_routes + + # Import conveniences for testing with connections + import Plug.Conn + import Phoenix.ConnTest + import Recognition_VADWeb.ConnCase + end + end + + setup _tags do + {:ok, conn: Phoenix.ConnTest.build_conn()} + end +end diff --git a/recognition_VAD/test/test_helper.exs b/recognition_VAD/test/test_helper.exs new file mode 100644 index 00000000..869559e7 --- /dev/null +++ b/recognition_VAD/test/test_helper.exs @@ -0,0 +1 @@ +ExUnit.start()