From 5f8e636a7ff508ff33a9144f927e82e008bada09 Mon Sep 17 00:00:00 2001 From: Sanotsu <1833186810@qq.com> Date: Sat, 30 Nov 2024 08:18:01 +0800 Subject: [PATCH] =?UTF-8?q?init:=E5=AE=8C=E5=85=A8=E4=BD=BF=E7=94=A8cursor?= =?UTF-8?q?=E9=97=AE=E7=AD=94=E5=BC=80=E5=8F=91=E7=9A=84chrome=20AI?= =?UTF-8?q?=E6=9E=81=E7=AE=80=E7=BD=91=E9=A1=B5=E7=BF=BB=E8=AF=91=E6=89=A9?= =?UTF-8?q?=E5=B1=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + README.md | 54 ++ background/background.js | 194 ++++ content/cache-manager.js | 169 ++++ content/content.css | 115 +++ content/content.js | 866 ++++++++++++++++++ content/languages.js | 222 +++++ content/panel.css | 233 +++++ content/panel.html | 46 + content/panel.js | 361 ++++++++ icons/icon.svg | 5 + manifest.json | 46 + options/options.css | 39 + options/options.html | 28 + options/options.js | 38 + panel.js | 29 + popup/popup.css | 43 + popup/popup.html | 25 + popup/popup.js | 13 + "screenshots/pdf\345\217\263\351\224\256.png" | Bin 0 -> 231054 bytes ...2\350\257\215\347\277\273\350\257\221.png" | Bin 0 -> 50828 bytes ...2\344\276\213\351\241\265\351\235\242.png" | Bin 0 -> 403271 bytes ...2\344\276\213\351\241\265\351\235\242.png" | Bin 0 -> 325145 bytes ...5\345\274\217\351\241\265\351\235\242.png" | Bin 0 -> 288778 bytes ...3\350\257\221\345\274\271\347\252\227.png" | Bin 0 -> 67132 bytes ...345\234\260\345\235\200\345\222\214ak.png" | Bin 0 -> 27489 bytes translate/translate.css | 266 ++++++ translate/translate.html | 42 + translate/translate.js | 197 ++++ 29 files changed, 3032 insertions(+) create mode 100644 .gitignore create mode 100644 README.md create mode 100644 background/background.js create mode 100644 content/cache-manager.js create mode 100644 content/content.css create mode 100644 content/content.js create mode 100644 content/languages.js create mode 100644 content/panel.css create mode 100644 content/panel.html create mode 100644 content/panel.js create mode 100644 icons/icon.svg create mode 100644 manifest.json create mode 100644 options/options.css create mode 100644 options/options.html create mode 100644 options/options.js create mode 100644 panel.js create mode 100644 popup/popup.css create mode 100644 popup/popup.html create mode 100644 popup/popup.js create mode 100755 "screenshots/pdf\345\217\263\351\224\256.png" create mode 100755 "screenshots/\345\210\222\350\257\215\347\277\273\350\257\221.png" create mode 100755 "screenshots/\345\257\271\346\257\224\347\277\273\350\257\221\347\244\272\344\276\213\351\241\265\351\235\242.png" create mode 100755 "screenshots/\346\233\277\346\215\242\347\277\273\350\257\221\347\244\272\344\276\213\351\241\265\351\235\242.png" create mode 100755 "screenshots/\347\202\271\345\207\273\346\217\222\344\273\266\346\214\211\351\222\256\345\207\272\347\216\260\347\232\204\345\265\214\345\205\245\345\274\217\351\241\265\351\235\242.png" create mode 100755 "screenshots/\347\213\254\347\253\213\347\277\273\350\257\221\345\274\271\347\252\227.png" create mode 100755 "screenshots/\350\207\252\345\256\232\344\271\211\345\244\247\346\250\241\345\236\213API\345\234\260\345\235\200\345\222\214ak.png" create mode 100644 translate/translate.css create mode 100644 translate/translate.html create mode 100644 translate/translate.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..9ad68d7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*bak** \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5b68ae7 --- /dev/null +++ b/README.md @@ -0,0 +1,54 @@ +# 30 分钟,使用 cursor 开发的一个极简低配版"沉浸式翻译"chrome 插件 + +## 说明 + +- 这个插件是使用 cursor 的 composer 功能开发的,我本人是完全不懂 chrome 插件开发的。 +- 翻译功能是基于调用在线服务大模型 API 实现的,所以需要使用者有可用的平台地址和 ak。 + - 因为是调用大模型API进行翻译,可能完全翻译完会比较慢。 + - 可以试用下我写在代码里的是硅基流动中免费的模型 `Qwen/Qwen2.5-7B-Instruct`。 + - 当然,如果对硅基流动平台感兴趣,还能用下我的邀请码注册,那就更好了: + - https://cloud.siliconflow.cn/i/tRIcST68 +- 整页翻译的内容会保存在缓存中,1小时内同一个网站不会重复调用API进行翻译。 + - 如果需要强制重新翻译,可以点击对应的清除缓存按钮后,重新翻译。 + +## 先看看效果 + +- 安装插件后,点击插件图标,右上角会显示出功能弹窗: + + + +- 点击“设置”按钮,配置大模型平台地址、模型名、和 AK,**记得首次使用要保存设置才生效**。 + + + +- 整页翻译:对比翻译的效果 + + + +- 整页翻译:替换翻译的效果 + + + +- 划词翻译:对只需要翻译网页中部分文本,在选中文本(划词)后,会出现一个小的“翻译”按钮,点击之后就会弹窗显示翻译结果,目标语言在右上角的配置面板中指定。 + + + +- 如果是阅读 pdf 文件,或者也是一般网页,右键选择“AI 翻译助手-翻译选中文本”,会弹出独立翻译窗口。 + + + +- 这个独立窗口可以当成个简单的翻译工具,复制需要翻译的内容,选择目标语言,然后随意翻译即可。 + + + +## 其他补充 + +- 翻译效果和大模型质量相关 +- 网页内容过大,可能翻译比较慢,只会翻译点击翻译时已经加载的内容 +- 嵌入式(对比翻译)效果不一定好看 + +## 安装使用 + +下载这个项目,解压后,打开 chrome 或 edge浏览器,进入 `chrome://extensions/` 或`edge://extensions/`页面,点击“加载已解压的扩展程序”,选择解压后的文件夹即可。 + +首次使用一定点击“设置”按钮或者插件图标右键选“选项”,去配置 API 地址、AK 和模型名称,点击“保存设置”。 \ No newline at end of file diff --git a/background/background.js b/background/background.js new file mode 100644 index 0000000..6d28cf4 --- /dev/null +++ b/background/background.js @@ -0,0 +1,194 @@ +// 获取特定标签页的设置 +const getTabSettings = async (tabId) => { + return new Promise((resolve) => { + chrome.storage.local.get( + { + [`targetLang_${tabId}`]: 'zh' // 获取特定标签页的目标语言 + }, + async (tabItems) => { + // 获取全局API设置 + const globalSettings = await chrome.storage.sync.get({ + apiEndpoint: '', // 移除默认值 + apiKey: '', + model: '' + }); + + resolve({ + ...globalSettings, + targetLang: tabItems[`targetLang_${tabId}`] + }); + } + ); + }); +}; + +// 调用API进行翻译 +const translateWithAPI = async (text, targetLang, apiKey, model, apiEndpoint) => { + // 检查必要的API设置 + if (!apiEndpoint || !apiKey || !model) { + throw new Error('请先在设置页面配置API信息'); + } + + const response = await fetch(apiEndpoint, { + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'Authorization': `Bearer ${apiKey}` + }, + body: JSON.stringify({ + model: model, + messages: [ + { + role: "system", + content: `你是一个翻译助手。请将用户输入的文本翻译成${targetLang},只返回翻译结果,不需要解释。` + }, + { + role: "user", + content: text + } + ], + temperature: 0.3 + }) + }); + + if (!response.ok) { + throw new Error('翻译请求失败'); + } + + const data = await response.json(); + return data.choices[0].message.content.trim(); +}; + +// 监听来自content script的消息 +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.action === 'translate') { + (async () => { + try { + let settings; + if (request.isPopupWindow) { + // 如果是独立窗口的请求,获取全局API设置 + settings = await chrome.storage.sync.get({ + apiEndpoint: '', + apiKey: '', + model: '' + }); + settings.targetLang = request.targetLang; + } else { + // 否则使用标签页的设置 + settings = await getTabSettings(request.tabId); + } + + const translation = await translateWithAPI( + request.text, + settings.targetLang, + settings.apiKey, + settings.model, + settings.apiEndpoint + ); + sendResponse({ translation }); + } catch (error) { + sendResponse({ error: error.message }); + } + })(); + return true; + } else if (request.action === 'getCurrentTabId') { + sendResponse({ tabId: sender.tab?.id }); + return false; + } +}); + +// 存储面板状态(使用对象而不是 Map) +let panelStates = {}; + +// 添加新的消息处理 +chrome.action.onClicked.addListener(async (tab) => { + const tabId = tab.id; + + try { + // 检查当前标签页是否已有面板 + const [result] = await chrome.scripting.executeScript({ + target: { tabId: tabId }, + func: togglePanel, + args: [tabId, !!panelStates[tabId]] // 转换为布尔值 + }); + + // 更新面板状态 + panelStates[tabId] = result.result; + } catch (error) { + console.error('面板切换失败:', error); + } +}); + +// 监听标签页关闭事件 +chrome.tabs.onRemoved.addListener((tabId) => { + delete panelStates[tabId]; +}); + +// 面板切换函数 +function togglePanel(tabId, isVisible) { + let panel = document.querySelector(`.translator-panel[data-tab-id="${tabId}"]`); + + if (panel) { + panel.style.display = panel.style.display === 'none' ? 'block' : 'none'; + return panel.style.display === 'block'; + } else { + const iframe = document.createElement('iframe'); + iframe.className = 'translator-panel'; + iframe.setAttribute('data-tab-id', tabId); + iframe.src = chrome.runtime.getURL('content/panel.html'); + iframe.style.display = 'block'; + document.body.appendChild(iframe); + return true; + } +} + +let translateWindow = null; + +// 创建右键菜单 +chrome.runtime.onInstalled.addListener(() => { + chrome.contextMenus.create({ + id: 'translateSelection', + title: 'AI翻译助手 - 翻译选中文本', + contexts: ['selection'] + }); +}); + +// 处理右键菜单点击 +chrome.contextMenus.onClicked.addListener(async (info, tab) => { + if (info.menuItemId === 'translateSelection') { + const selectedText = info.selectionText; + + if (!translateWindow) { + // 创建新窗口 + const window = await chrome.windows.create({ + url: chrome.runtime.getURL('translate/translate.html'), + type: 'popup', + width: 800, + height: 600 + }); + translateWindow = window.id; + + // 等待窗口加载完成 + setTimeout(() => { + chrome.runtime.sendMessage({ + action: 'updateText', + text: selectedText + }); + }, 1000); + } else { + // 更新已存在的窗口 + chrome.windows.update(translateWindow, { focused: true }); + chrome.runtime.sendMessage({ + action: 'updateText', + text: selectedText + }); + } + } +}); + +// 监听窗口关闭 +chrome.windows.onRemoved.addListener((windowId) => { + if (windowId === translateWindow) { + translateWindow = null; + } +}); \ No newline at end of file diff --git a/content/cache-manager.js b/content/cache-manager.js new file mode 100644 index 0000000..c5b6916 --- /dev/null +++ b/content/cache-manager.js @@ -0,0 +1,169 @@ +// 缓存管理器 +const CacheManager = { + // 缓存有效期(1小时) + CACHE_DURATION: 3600000, + + // 初始化缓存 + async init() { + const result = await chrome.storage.local.get('translationCache'); + if (!result.translationCache) { + await chrome.storage.local.set({ translationCache: {} }); + } else { + // 清理过期缓存 + await this.cleanExpiredCache(); + } + }, + + // 清理过期缓存 + async cleanExpiredCache() { + const result = await chrome.storage.local.get('translationCache'); + const translationCache = result.translationCache; + let hasExpired = false; + + if (translationCache) { + const now = Date.now(); + for (const key of Object.keys(translationCache)) { + if (now - translationCache[key].timestamp > this.CACHE_DURATION) { + delete translationCache[key]; + hasExpired = true; + } + } + + if (hasExpired) { + await chrome.storage.local.set({ translationCache }); + } + } + }, + + // 生成缓存键 - 简化缓存键的生成方式 + generateCacheKey(url, text, targetLang, type) { + // 使用文本内容的哈希作为缓存键的一部分 + const textHash = this.hashString(text); + return `${url}_${targetLang}_${type}_${textHash}`; + }, + + // 字符串哈希函数 + hashString(str) { + let hash = 0; + for (let i = 0; i < str.length; i++) { + const char = str.charCodeAt(i); + hash = ((hash << 5) - hash) + char; + hash = hash & hash; // Convert to 32-bit integer + } + return Math.abs(hash).toString(16); + }, + + // 获取缓存 + async getCache(url, text, targetLang, type) { + const cacheKey = this.generateCacheKey(url, text, targetLang, type); + const result = await chrome.storage.local.get('translationCache'); + const cache = result.translationCache[cacheKey]; + + if (!cache) { + console.log(`[缓存未命中] ${text.slice(0, 30)}...`); + return null; + } + + // 检查缓存是否过期 + if (Date.now() - cache.timestamp > this.CACHE_DURATION) { + console.log(`[缓存过期] ${text.slice(0, 30)}...`); + await this.removeCache(cacheKey); + return null; + } + + console.log(`[缓存命中] ${text.slice(0, 30)}...`); + return cache; + }, + + // 设置缓存 + async setCache(url, text, translation, targetLang, type) { + const cacheKey = this.generateCacheKey(url, text, targetLang, type); + const result = await chrome.storage.local.get('translationCache'); + const translationCache = result.translationCache || {}; + + translationCache[cacheKey] = { + url, + text, + translation, + targetLang, + type, + timestamp: Date.now() + }; + + await chrome.storage.local.set({ translationCache }); + console.log(`[缓存已保存] ${text.slice(0, 30)}...`); + }, + + // 移除缓存 + async removeCache(cacheKey) { + const result = await chrome.storage.local.get('translationCache'); + const translationCache = result.translationCache; + if (translationCache && translationCache[cacheKey]) { + delete translationCache[cacheKey]; + await chrome.storage.local.set({ translationCache }); + } + }, + + // 清除特定网页和目标语言的缓存 + async clearTypeCache(url, targetLang, type) { + const result = await chrome.storage.local.get('translationCache'); + const translationCache = result.translationCache; + let hasCache = false; + + if (translationCache) { + const prefix = `${url}_${targetLang}_${type}_`; + for (const key of Object.keys(translationCache)) { + if (key.startsWith(prefix)) { + delete translationCache[key]; + hasCache = true; + } + } + if (hasCache) { + await chrome.storage.local.set({ translationCache }); + console.log(`[缓存已清除] ${url} ${type}`); + } + } + + return { success: hasCache, empty: !hasCache }; + }, + + // 检查特定网页和目标语言是否有缓存 + async hasCache(url, targetLang, type) { + const result = await chrome.storage.local.get('translationCache'); + const translationCache = result.translationCache; + + if (!translationCache) return false; + + const prefix = `${url}_${targetLang}_${type}_`; + const now = Date.now(); + + return Object.keys(translationCache).some(key => + key.startsWith(prefix) && + now - translationCache[key].timestamp <= this.CACHE_DURATION + ); + }, + + // 获取页面的所有缓存翻译 + async getPageCache(url, targetLang, type) { + const result = await chrome.storage.local.get('translationCache'); + const translationCache = result.translationCache; + const pageCache = {}; + + if (translationCache) { + const prefix = `${url}_${targetLang}_${type}_`; + const now = Date.now(); + + for (const [key, cache] of Object.entries(translationCache)) { + if (key.startsWith(prefix) && + now - cache.timestamp <= this.CACHE_DURATION) { + pageCache[cache.text] = cache.translation; + } + } + } + + return pageCache; + } +}; + +// 初始化缓存管理器 +CacheManager.init(); \ No newline at end of file diff --git a/content/content.css b/content/content.css new file mode 100644 index 0000000..477419c --- /dev/null +++ b/content/content.css @@ -0,0 +1,115 @@ +.ai-translator-popup { + position: absolute; + z-index: 10000; + background: rgba(255, 255, 255, 0.95); + border: 1px solid rgba(0, 0, 0, 0.1); + border-radius: 8px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + padding: 12px; + max-width: 300px; + display: none; + backdrop-filter: blur(5px); + color: #333; +} + +/* 深色模式支持 */ +@media (prefers-color-scheme: dark) { + .ai-translator-popup { + background: rgba(40, 40, 40, 0.95); + border-color: rgba(255, 255, 255, 0.1); + color: #fff; + } +} + +.ai-translator-content { + font-size: 14px; + line-height: 1.5; +} + +.ai-translator-loading { + color: inherit; + opacity: 0.7; + font-style: italic; +} + +.ai-translation { + color: #666; + margin-left: 4px; +} + +.translate-button { + position: absolute; + z-index: 10000; + background: rgba(76, 175, 80, 0.9); + color: white; + border: none; + border-radius: 4px; + padding: 6px 12px; + cursor: pointer; + font-size: 13px; + backdrop-filter: blur(5px); + transition: background-color 0.2s; +} + +.translate-button:hover { + background: rgba(69, 160, 73, 0.95); +} + +.translator-panel { + position: fixed; + top: 20px; + right: 20px; + width: 256px; + min-height: 300px; + max-height: 80vh; + height: fit-content; + background: white; + border-radius: 8px; + box-shadow: 0 2px 10px rgba(0,0,0,0.1); + z-index: 10000; + display: none; +} + +.panel-container { + padding: 15px; + height: 100%; + display: flex; + flex-direction: column; + box-sizing: border-box; +} + +.ai-translation-container { + margin-top: 8px; + margin-bottom: 8px; + padding-left: 12px; + border-left: 2px solid var(--theme-color, #4CAF50); + opacity: 0.9; + color: inherit; +} + +.language-info { + display: flex; + align-items: center; + justify-content: space-between; + margin-bottom: 15px; +} + +.arrow { + color: #666; + margin: 0 8px; +} + +.ai-translation-inline { + color: inherit; + opacity: 0.8; + margin-left: 4px; + font-size: 0.95em; +} + +/* 只有当内容超过最大高度时才显示滚动条 */ +@media (max-height: 500px) { + .translator-panel { + overflow-y: auto; + } +} + \ No newline at end of file diff --git a/content/content.js b/content/content.js new file mode 100644 index 0000000..1085d10 --- /dev/null +++ b/content/content.js @@ -0,0 +1,866 @@ +let isTranslated = false; +let translatedNodes = new Map(); + +// 存储检测到的语言 +let detectedLanguage = null; + +// 检测文本语言 +const detectLanguage = async (text) => { + try { + const hasChineseChars = /[\u4e00-\u9fa5]/.test(text); + const hasJapaneseChars = /[\u3040-\u30ff]/.test(text); + const hasKoreanChars = /[\uac00-\ud7af]/.test(text); + + if (hasChineseChars) return 'zh'; + if (hasJapaneseChars) return 'ja'; + if (hasKoreanChars) return 'ko'; + return 'en'; + } catch (error) { + console.error('语言检测失败:', error); + return 'unknown'; + } +}; + +// 判断是否是文本内容节点 +const isTextContentNode = (node) => { + // 检查节点是否有父元素 + if (!node.parentElement) { + return false; + } + + const textTags = ['p', 'article', 'section', 'li', 'dd', 'div']; + const parent = node.parentElement; + + // 检查标签名 + if (textTags.includes(parent.tagName.toLowerCase())) { + // 检查是否是列表项 + if (parent.tagName.toLowerCase() === 'li') return true; + + // 检查是否是主要文本内容 + const text = parent.textContent.trim(); + return text.length > 20 || text.includes('。') || text.includes('.'); + } + + return false; +}; + +// 创建翻译容器 +const createTranslationContainer = (originalNode) => { + // 检查节点是否有父元素 + if (!originalNode.parentElement) { + return null; + } + + const container = document.createElement('div'); + container.className = 'ai-translation-container'; + + // 复制原始节点的样式 + const originalStyle = window.getComputedStyle(originalNode.parentElement); + container.style.fontFamily = originalStyle.fontFamily; + container.style.fontSize = originalStyle.fontSize; + container.style.lineHeight = originalStyle.lineHeight; + container.style.color = originalStyle.color; + + return container; +}; + +// 创建内联翻译元素 +const createInlineTranslation = (originalNode) => { + const span = document.createElement('span'); + span.className = 'ai-translation-inline'; + return span; +}; + +// 获取当前标签页ID +const getCurrentTabId = async () => { + try { + // 如果是在content script中运行 + if (chrome.runtime?.id) { + const response = await chrome.runtime.sendMessage({ action: 'getCurrentTabId' }); + return response.tabId; + } + // 如果是在独立窗口中运行 + const tabs = await chrome.tabs.query({ active: true, currentWindow: true }); + return tabs[0].id; + } catch (error) { + console.error('获取标签页ID失败:', error); + return null; + } +}; + +// 检测页面主要语言 +const detectPageLanguage = async () => { + const mainContent = document.body.innerText.slice(0, 1000); + detectedLanguage = await detectLanguage(mainContent); + + // 发送检测结果 + const tabId = await getCurrentTabId(); + if (tabId) { + chrome.runtime.sendMessage({ + action: 'updateSourceLanguage', + language: detectedLanguage, + tabId: tabId + }); + } +}; + +// 监听面板创建事件 +chrome.runtime.onMessage.addListener((request, sender, sendResponse) => { + if (request.action === 'panelCreated') { + // 如果已经检测到语言,立即发送 + if (detectedLanguage) { + chrome.runtime.sendMessage({ + action: 'updateSourceLanguage', + language: detectedLanguage, + tabId: request.tabId + }); + sendResponse({}); // 立即发送响应 + } else { + // 如果还没有检测结果,立即进行检测 + detectPageLanguage().then(() => { + sendResponse({}); // 检测完成后发送响应 + }); + return true; // 表示将异步发送响应 + } + } else if (request.action === 'translatePage') { + translatePage().then(() => { + sendResponse({}); // 翻译完成后发送响应 + }); + return true; // 表示将异步发送响应 + } else if (request.action === 'replaceTranslate') { + replaceTranslate().then(() => { + sendResponse({}); // 替换翻译完成后发送响应 + }); + return true; // 表示将异步发送响应 + } else if (request.action === 'restoreOriginal') { + restoreOriginal(); + sendResponse({}); // 立即发送响应 + } else if (request.action === 'detectChineseVariant') { + const isTraditional = detectChineseVariant(document.body.innerText); + sendResponse({ isTraditional }); + } +}); + +// 在页面加载完成后立即开始检测 +document.addEventListener('DOMContentLoaded', () => { + detectPageLanguage(); +}); + +// 在页面内容变化时重新检测 +const observer = new MutationObserver(() => { + if (document.body) { + detectPageLanguage(); + observer.disconnect(); + } +}); + +observer.observe(document.documentElement, { + childList: true, + subtree: true +}); + +// 创建翻译按钮 +const createTranslateButton = () => { + const button = document.createElement('button'); + button.className = 'translate-button'; + button.textContent = '翻译'; + return button; +}; + +// 创建翻译弹窗 +const createTranslationPopup = () => { + const popup = document.createElement('div'); + popup.className = 'ai-translator-popup'; + popup.innerHTML = ` +
提示:
+W_7)c1 z`&BZs;{(EOB3Q3-p{%v!IE*m~vDRh5ota7ViIZxK=ciVDL7I)c->uAUyS*{3Er}@WIU^bk59fH!*RuE}a{Y)>RR^OK zV`amzaUx0=1DtgibhO@=HPsA7%@g1o2tIM&nJxO@E|Y !;+_`sK z=9F7Nd85jP&uI5@eftt&4I8=83D>NCQcu+y+Bt3+gfQI}#<6R1Q=Wub?%A6+NVabX zcx>U0^^m_Nd_hgcN>k|Nh1NIClOJAEv|>Y?-KuEDLKLc64de0R#l94*y-D}o)le<& zdvE{Ainr0ue4;+4!nU 8bwqgn?cu=K1rOn7n1pYI=Gl9~3MDf)|%J FUu$Sbu)4b)q JK_G%|E zFmP)m8+V9zzh2Qf;f4n<1zKiw=pT}UoUq{(nTIBsDPWmfvR}}!FF-|wb9se>P3I=- zQ9Yt5Amq6o-lN*9F?o8hPMM6EH#L}|$zyiK+_;iu<-!>_nwcgi-&dIb;)CESul2OQ zb1P)K)nfhTr-CSRiF@B=yYtO%-@c?&n5E9`I?S}QXd+FdzlXHiApdAKk1n|1$;+Y{ zUp~6jeXNW--{-cRv3aY_78SKk9qlsrPD;sHx6Vu5SFZ3}e$=a{zlEufFF^>Q>dDhP zAQxX|(Hc*f-|AgQ8VRQ? Aux^Dx6o~k}<^U0Mn;W zM;}hEIYBPNG4eAbHm%dx9q%E8@jvb$MRX67DrOp$8tMk*DEqqlcsD^0h;k z!EGhSLIeG-Zq+3BbEmN2tip|ABL7ny9C>3=4o8m{8fxc jTg)8h_7-a^y1s?80#SRuL&{|h-=8iu_p|GY4|-cf8!Bn^^n>DDX(p zKIFDR-`d+2j}RYj%Xpj@DWojZUAQsytC!oBPx~o9$M{}8p2@w@!|Uet-xt`x8=iZ3 ze~A<7q@<$qGy)nB5Sv{fHZZRZJ*P;kA#3>d1nua^TFIgkvbweP*1kUt<*l{Zd !(IGP3HQHqowg=(6N+-kYsezv}MkA!axIuD!I>8jz5A zI6XT%OH`Vhylc%>oMawO$Y#9Q^rg18Hi_4H-EOC{`=j=`a`cb9u4>i&fOMZgp1IdQ zP(*zF=K9PtlW?xEvE>~md&InMXij-Bw)TEaYsUz}1+<23n&+JZxa$fVjwbiWrIt-R z5qkuJRB2@&uSz>~Y%q>#(scCv6XnUhU7eOu=MrOh&9Xa)`Oen#5Z}X9LU&$MeM3`x ziK*+z5`&ZIrK^1Xd35TlY_+e~93n7~{@hdl{0GB%;U|JK>Rn3D8dV#?v;bkLa0Gk@ zV&UVAWwzDGbJcLZ=a>@a-Z4HGUKfz>eQ8#^@yk}0Px|DO!&Wmj@$K)_8AA87pw(}K z^3Evk$jiSkeyVY|`-k!*)QqeQeZgwSjYy+8oGt39WtYq1Yq-lu-LE%m)%SxW-JVJx zMZ;kxavsiW`-0g7D+@o*g}fhQJD&Gk!!7OL_EeZVt&Py%6h_Nkq=ej~%;WFT%O(Zp z4Avl!?v)u5r)&jt rQ!x4f#~ z_6bxlu~G8y&3I^h8{%bj(#ztclbXap@fBt+r ~qZBw{QPCPL$LE4{w_w2q!1JlT-t8Uf0R6|HzM zL`rQzPXIZLGBVvOjwE-`FWgX?$uPv%=kM*P($Ff4=7~`IhAQC)N>9wkGG<;@yB8$p zSe(nnvmHYp;CINv^$-ea+skK#u{UC`x0orZ6msc9BBAH|J*zqng^;y+Eg6W?0YcN> zNtZLSU?w`|fra +A+5M77b{!KNJ_xf1K_hNE7}u5WAzUhkIo zjgjsQXG-BS>r^!E&NsM&z$t#7F`EpF?z=cmX=$mGA6_sm*k+83y{)aS){5E~XI`!z z)e;uEBr)t)YeBf84#$pMX9X}X)4rFwcgb!Iz8T4GK03Ao0aMxozek EfaDf%L#NlA@`hR$y7^*v3<4lmA5tx)(tLmPQ@^?1y!GFcn~QN>Y=rfj_) z u?s zUgC`!1vIIXrtDX9jW>zyi}lb+`E()t{lv@S;0GO{L{U$v@p%gAoW{*Ub?oRoq7kNg z7+zki!>=l pYhRGsbtwgD|y#$wRx}MT(L=F%RJqrm5M1V6pfnAx39U-(mM({ zWctg#o2NV*>k8#nTr~jxnS;Yf?de70%*D+W4K;Rz{_eDTq#NTyoP)_|x(#EiE0~YA zNsna@{C SC^;41&MzxA9qN0ghxYjGZ3Y@UKxL3s_*&V?5&Cb7Or8mcy-K2;sf zmGBEC0mb~Rq+d))Mo{J~d_}A?si?dY<_)h%oU`eppi~)|kn+qstDfgR8?S@ qBKyxCex17vCBYpVL@n6S_-FhjbZscXuBh9OQUb+aKF;sCWYu9v&Xf$;tWolOW(Z z(fd?6EvQr9)Oew0b@$ql@xUarPQ5ATVWTUn6Vn@x>O@U~$8z-+g_aTbZ$T_V#nL zvns_p{N|&tW(uWA^ZSGJZx7cZ?!j(MuB$5VW}ybNV!E)Igut8*u_*@ffjIA3lkR#) zSzjrJ@M0GusAKR*@7%AK9Od?P%Bvsq%hwZs@S1fNg_RuF++BYvaHNsh%sr@w4(Y%j z2su{DvHgs &otb-^rnB7aN`Zve$hzI^AzXn zm4h!0Da^cQbAzrHx^^lf>e(2yPoM0DS4MoWN+?K%v!9hrbZx0u@zQm-S YLpxsYaJU%SWz zz51nkcVL70!kBoKkglEbL4htI7x(Sk<${IWXVbb323A<{a(kQ8MXJ2aQ{D&*Vrk{G zqS~FP)dA*YZ|B_malKNXL^5lS6*5O7+hj!{{oPa5WKW5nKP4Jd&T=zDG`B_GrYCui zO*4AG2gtPR8rXh}_ga^If9`=GK$c0Yn-XTew3S)Eo^5XLDa`CQyknPqXV!CdA|fJl zHMT1tcNJ;|HS15}jg5-J1%5GOSK(OGmj`UDto@1HitZ!LKB&RpzFnQ}OoYr$@pxQ( zI+lTLj3+XG ZwRbaYZa9zqGKvc-tW|VjKd3z~+9iDI{6u^mv0$G0?uF)WecSyMM2Bfj zG!33Pz_pAE3-ywO=~n6;i*JH+Cqz>9u={&JR7x%}f9f$%QW7}h{q+U{fiwyTD9J4z zY#qME3LL@PJN=R52UqG7))??gg3tGsj(zt$au69zZ`c+z5XUZh`fMYw?c1+KUhh?X zDg_9`=5%dE9hpyVSFO(WkmG2uCspfLVFO;*v6m<&bJ*AtLgYl8j(uXdLc!hwE>nvc zS>-Zt_f!k~^89VjXMusgnR~;JhAs9p1B-? s030@Mk-xx#?wNZwwy9WETD<6a@pTK9Dw7Gs;tWtaIAsTMb#{TiD#&)HEL zFEE=3Vr5gMRf1gMMy!W_*a?3k)|bS|@;ggNE?e%st?1e7Gi4{qEET*t`Mvtt )flQwYr06OukI`kJwXy_Y-nwiqhNHJSgu&B>Oo?KP6bnxZ8zV*=;`)A+ zmz8byD||W^L(ANOu-mQv1~F8jF3fAZK>hIW&@xr0_-?@awj3mrKoTm9kS)vA-ICjb ztkW eP1?mqJU?7->|wC(>ch2FflRhO_gsLg!3D7B%JRr6c3s5@$ZLq5J~r= zP95XIpb&YzMk+^9b2^DuK9OhhmAIr+&^7Tv3Ny2ylJh_vy`?9o&HGiPQ72e9TgN?t z84x9CJRF|U=%Yh&)^(y>Ts#KjppZ6vHF(Vz@wD)Es{ubY7J=9)#6=0)xjRf#9%;;& zsFRdZ@D_hF*t)B8M}U}0$j|bWF2?x2PC8fr;_a> 2tOo-(0OGEot`j%#i*k-Xhzf-dr`~ GAViHmRVmB;-#Q0+K4^qI{}% zX)LpMF>}j*@6=ug>KO7behBXyk5M#<`S$)0Lv3H;cC%z2I$@*R*vD05^L;X>Tk(?r zN-f%V)w2V0vfT1I?T#%>_7M)T{n74AV%#8~uMHJJ0gZyM1CP&H*3E1Nwu;z*-mawx zB-1{6920dmtsFB%EzTJ2Y^ydRksaoCX?e)eSJU`jzff{z1{z*&)|w%$#c83~u4oY} zkaS?UoBVnvc0cuSjz3y8T$@vY9Xq0aAm`Ry#Y*?~dFaksDqp3$Y|%p0@ro~v!(VZ@ zyAYuD-zLtvJ7koveBvZPwQ06>K2=!BASgTAm0)#Bo)!C TN>?WFY=}192WeM_ p?V<7HpOPD zF-1T7Bxa^U<@#c#eQSSLX |%$9zoGH6m!3LomrsSP7R-Kk^RP)4 zlP-}ql`|r}TF=N@2|n~PypC;=Kx%Qn`?o_f%jz>ORI~ HssMt8=w^yylr%!??69ryEA;s=oPxf~p= z^)N6n;Ns$5pYE6>6yZh;xpovW|K=()>zO8bE8&xN4XZSqZiTQLPTyo)k~6y*h09@| zhlh)vY@bXoPhIX*_1$iuyp{0uY~jKBjuVmMSxJQU&h5;Itb9t=iHB!TVO?xlfjp zRA6HQ))j_&RqYAl?e&kwvi7I5Z>1eJ(z8v9r)E^X;dzy9$IO`z4Bi$O>RxD6Io zz#$=tN7cAe6PDb(9tf5JFSM${*%GIoswvbbCqg0{o!R_+8PJyzIWrYl3(CwlM~I2) ze2KKc&FR gO%NH0&l%s8YM0+6WNPbojYSdAnO+M-}OiQoq`#O$@uVywpqQVsY9$ zp~I#2bByM-c q|TcYV>dw@q~Kda3@%14K6GJqeM^=YTq*~Vt? zX! ;s$Gf+TLTrzf~i>sZ|$y?B(!MQ-Q}~h6xr7+VdXij5*;haeUfY zE+xrCwi8{lL}v4o#|^w#$0WN9B|z0?PLouJJIq{%lIq@^ rV>t1xebk=A3a5E{R#z%bh==X1MF+-$rIv#l#Xg_MJj}m* bul|{fz>ta_h{Nu|dmHiv=LOAo5M9f;L|59RKvuTl z>l61?vTI(dMNV@jPkwwy19GMLOsNNCoD-(Gxw+`A6_7e>BX%MzQl67J=Y{9^__z_- z*(O3lpyYsCUr#dNZJC%V9N+|>uGFly2Bizh4 3% BoNg=FDuj;P~A*~3>KFUK|98pePh{u%a- zxyt$qKC#j&hOp{gNPhmr4`Rqd(715E?{j^3+}4ze`?6tt5QQ6JXJ*jhzt7*%Unf}0 zlW#FmbY3*de*eqI(HwcF;G#-jP*eo%>KRAa=gv3N(jgO@(yWIK#Xg`?18ilLQ?2O6 z*R48% %jJvT#bq-t06=AOBr`=ZZAENeiw7iuo1lLaCcRjwugOP^O|ErMT<0 zq=)n0?i{9vntmU!nN>JE?Vn7=CJ9U7++VgQv#x*AH^)AsPZ`?J=(I9c8q7vC$FGvK z@-(3Kd}TFW+o<{O%<6JY {@-{a$)M)yP8#LLas12stie>V=_ <|Z$+u|T%X6%iwj9<5+`LBsl{ zGN4 Ew ztxsENWp<3~b@Uq%Pc4Kg3~Z=RM1w^)J|-p(tUPid5eV;Dv8&Odq6+rw#p^KC3waR? zUzsKTrWeTN+eZ5LAzDv_A?UR&6zP+pFLBt-^#3prTGfX!|6W8oS05R16zZ7oAn22h zscLjC`8VKqz}Sj!_ir4>>qV0jx@)$wWQ--8iuN?*{~>OG(6JonaSa)jj(uMjpe=C3 zy$(?^;ow-}aQyew9Kn0xD@z>~-8}Y{lm<3E1peqRf`<&>Xa?&2L@9g>GVgzy (W6D&7!^ESL43X{dXPzjcV~*e4X9D;RDrrXt?{Y15(i=LO>t+(>^l@{jZz9m;M_y zQVrE@XgzTu>3{!4np`>Y$gu%+!~fbD3&THN0aDX*N`wDa@{`E#$-f*0BqS|tR;T}N zRrL+|Zvg*4xb;x;&$K_oidt?G`i5mb%3T|qWm}mRrB6e+=rE|BJ;6W`wh+6Av}nij zPb!67Jv|n;iBpB7$Usyr1b?OW6#Me}lK=L?V9(n6v_Q9Tg!Jw*wyf+Z%VGO %|1lW1 R5&E_DW_2nDTDSqEd zPH`$!K2Cdhzo$h?BX2xC$w_k%o5aTc&E;OwWQRYz4C2Kv+E8k@F{GFx$WW(AaM)Y- zAe%`S8lPml-H9b8GCRL~J~^8NGuG;BbUO7|-cY=9!@-tsV@o)@i+5R_NKcX7rn4Ir zW(x`n`xX{v-He&IXjcPKQghf5>K1_tKENR({eEByKWa(S9495Fr)RYrY bN(@#ww@R-H&0_PEWy9 zRRXUVxsNVQ5q|8RCFF1Ed7qsT#QhR{v-1_<+!ay0KY#N~yZ;5bP34Eu(HTt_*AcYi z@Nz#CM|o;$XZbYBohXizKB-1}^L dV?hyN zyyBF_%JY~;avH^yT3zo(JzI^IlM#O1q~Y5GU*8W`CeF7P+n Sh}|D-5-;byN1NpUVeFmo)`%d&9ack$tCE;!sr8^mz~Cx|{EiMf z?mz1-OUh< I1Y21ma~RZIF6|fG8JC9cZVpz~ zUuzaVzjeR(eOBCPO-^z%%eE3fPm0v^0N&g+85H=cK ;InR?fzS-?5krZUoD1k}^Yb_}j#* zrJjA}9O2|-sGCCUj6{`evA`GPY}_a&O~DM8aJ8Bf^25mCk%fI;tIg@Cq V`VNrQ?t50^HPd*-q?b>ax!$m8ptDHFcYK0r0uK7Wl2GA z@3hrW2HCa(zE6fLgZbo^jJMa3sb&l+$<|UUF!a`^*a3>^gCA%#DjcRx;>xoJ5*tjn zSR-;eV)RsN1$Z1xVP2>7va$m)`Q!Ec2F95h4KB^~zGCE;E4$n?=Dbc`+6o#xXEp{z zhoYb^9f@kWR=a~LsBxoAH00fL|Gbcx?-S(r#0=UU)cW@D>oH81>7|})Y;zAzozr0! zZ~*FV_S^FtU(@i&Kezj+7akGrdgoBEf#xH$d9z)c9~O&~H0WKovgS(}k>HGrog1an zz<2tqFPmWBH-bO&>X z3gTt;f}X> v 8$t59 zL%U}Y)!|rBpVWea4)IzRb_L3`ue)e|yX$$pBdBP&vW7dJ?k^y&=UX!(N^Sy&e4@a) zXo~R-bCI;YT?|6$wdB;g^}1Zfx^t(04ZmrAYk`F)a=NuLVs}{kgk!0S36}yaru~FN zU;6{g{Y<>m#Ktn4qwZq9g_+8`gCPWOEV|ij_h)Zz9UUF=LS5?EE|o& f1AO|l z+N75z?L3xodpa}N3Q>RKK^56mzvrHTgv7M^UfWehy!!a4DLdBdNYt`lmb_0rUIp*; z%4Gl4R!Q^sUMoF+rQRWDt#cJ&cNzM#%?fHCpW=aF8Irza9)73a6cVZtS2u6?`Z0i? zB)J;+USNYW+3Z~lQwYh8x#bk6U?THND%Q=@P)&HzkbqkGUgMc_XJ0-oJ4Fq@{A28( z8=foq!# K zKWCy3ouJisYa5yb{`0QRDl3|n&jQMqJv}|AQ5O)B%f>p%aN!9ec812ZwB=Y_Sm^c4 zNV-^
z;>BE3uaqXxmgmPfC*h{%PM z)V@n;UyFWwb=}lKE|Y15uS94*t3~^)EQRwv6hbeq`(4@ecOTPel+DLqJeR$>BPKGm z_(Y?%>N4x-M0RCpCmD}0YWbJ6?W*A|BSGp{IT6g~hswHK5h1?7iPQ=#+4y;{rEOn^ zb2a6qj}G?TRU#)D# tlhMhs)6yrM+- zk;^Kdd7dUUdO^HAjq9hgS4SgOXCAxuhR}LO;d_2Bzz-7FRhPJuY?$YXy1lpYNu^%L zMy>4A?bX}-@nZE#!zGV~#tz4^LG?poPMfLo6mlLBu|oAqAx1php RE@I Y>lk} zaLh*7Sd9mgbUjUeC#`Ml@E&x%>`&&^RiBEcCAfz~=7KfZZI2vV4tZ?Q!Qi{ygNo0L z;0Xv6(5>QdxV7+1CR?Co*iuV7v3V@; !GKFp? zGGi6qnB-iIXfejx7e_uAV)^FM-|!`A6@uhwXjr4~Djf7S%hXqNlAr53UAC}_>+9+7?jCCyD-6U0 z^AE(l^+mNhiIBbblHS ==8pf2{eyItwN)qLNhQk)wLM+{H?|q5kYFw8*dO> lwo{LcV8aAx|ySQzQ^ga6;h#s6Cj?_uPs4g&pyUmEP* z)(8fh>9Wc-s(Yp^{(6&lEYcPMfASUw6CF#R{x}o1Tuz!7La8NhsqUMi@i=VC-F1_Z zE&m99`0G7EhuyU|dTZ96Z^fVZfAMzZX+n-Y7YS29&ypQiA`$M=rN?`C2r2n2(sujA zMD=Zqh;`bZp0@=41m#n`YT$&3K`9G*>&Kse`u~b4S=k|BitSlB;?lwlH{l)Z->`+- z7 ;@}eVMcv)Wh%B{eNRD>D W@uLCLd z1G(DPKGkZ?w0+TazjQHtj~q_}0>EvFRRWfIVP31A6lGglGq5kx%V)%5?0TKQEot zb+-Osa#svKMhZ2G-QHb*rPy!SOvnl%*#A-jNDOxuiMUkS^axOO`Tpo;6QYf!t@JXa z<9!F_Afx3S(^S?@!2?vxNm@7()1w92Kljuy3JB!iV~>aHrVOQvO~6>+F)WV`Ph 5F^~f4N_&%~2JhY>Y38WpM@2@~ zIq%OGY4gr>UtV6?)y@J^ktGK>i;-1Vr$H6r>*sfQeO>+m9O?i?e_7yvM6~PY78FEx z8J^#L__rKQh%X@x$U*JP(b3T$W9@YfulBq?>+9 1E%o3ZhWfY!&DnEgFH zXiuKh*{yw(%mfDxqD0eOueP!QDUgtuIA4h#(B-2g*M3J(%O>%}{P+Qq{co9>nK1(t zm6W0ZA%TR15hn;RSqS_Id7Uf)UtaV2zqH}I^5%jIJemk`4-XGMe*V^$mLi>o_{79s z%n%b} ;&m7aGnAvxr(x~vXWAXJ2EONacBp4 ziBv38sn3Cjz}<3tFyJD32 zNqs)D0Sz53Ef2t91k8%ly}5+faoqMVunRRRyPb;fJwV9-ukBmcX>jAeyE(R`{P(m9 z<=>P0 wze9DKlBLv^+wGdU0rLZEW?6=O4S(ATQ?o* z7*vZMqN2LHyQ?ZISAv2D&=iWNn+`m|?Nm`+yP~K6sl_QsBh#l3{Y*~QQBcrlCz=5) zYGviMwYBF&MDZypx;i>V6Faq9Mba-6bCm$iEwalHCkT=~!hb$%zqPfcTC8(=asmz- zjha{9-rfS%8wJI?;t8;5AhnpQ)V=fxEcPVw66|uFI9F+VeI4)VQ#mcI0+sx!=PSGp zn@@3Z)0ODM$pz=3&Nj}@=OG~>!T8Kq*Vo4`^<`yc0Am9D{j1Jw|7FKN`-Ag(O8TW2 z?fANeHjK;+49ACubc~EAV7tsgtIMH%ea7WohD1CLIjx1`nd=4UC=UQV{EdMqsbgAN zT1N<>fhV`i!AC0AIB9it^ qMBS=rbed9>Bk2m)Gx^#kl2AOO+y2n61L%YSSBy%hQ| zxIHo@#e1bA6tD-6T=>4c`=yXuUtgc>ww*hU2|~U 6SiRN$N);OkpqP4lnI;P!UqXK+I1Z<{sw|J ~4 zriu{HA0rAC#li|NDPd{Q(FF>su1<#& rIuLlLL;|J;2tkwaZLP``Wr>%1)H4 zlsB>kCZ3o7ry*``0G}9S!vM<|tXX#U%ka*XLzkhUA!}>vb4rB?Wak zTn;7XT(zsMuI3Ey?D_qB6P)bJl!^tfqm1pT)PN&`Ah}A(phVx ; zJahOTg#4j2*Vk+1k2!4(w;QrL0$j_;$S5iK9+;t!+x*dVqKNdr3dLtsBGxmaKkTVu zT|p|=guXveA>ejm3XS}MNA#z4-|`vv5 fm#j`I9`J!vs$ z$_}s!+@VKckqXA5#yIYf 0{`hJ&BQ2*3#PD-!GPXRistB42RF9 z3ZvF)>F|=J%Bg8 rs+dDW9Dmi+zAMOfB$&t7aVNip`psTN sl2*Wx4)|3(Sy FUOH=VaPa2FBSL(2 zZ;uHl2q-BnP7oA&4Gy;=-~S@_3aH+0=(&f$f_^E$P=CD)1+(ijxXpZh*P0!n|Ip5< ze(B`G!rg4GJ!EwSFr^7XM5$X@0ElZ8jsum<9w}Wwc5!iGK{sG05}}gsA+!EBqfeNG z?ih4*bVf!-_rFjG2;8psB~V4=WMlw!e&Q!oKE;R^{NTX@z}yNHr;jnO)W}uRP*E8N zu0WDZwnFZt$TW~%sHg!ze 5eqe>sTY+2b?d^TmWd&|b;&Ch!RZvoL zSnGaXKJ~|3ZXAPc1%>inLpXsDaDwU^8VLR6bCpOi1N44^2bGnvW-5Rs1bHtYAFwl~ zD=kb|2nwi=fiDGE3{m1VoYu3z`N+x3d-4cmPwVUX{Pn1)sKB;W$$w2xZw{2)(vq>` zze1-5Hoy*&{%_TpD)~WR!N%uDfnAI0QqtD$v##uq+n=p1pOfQ&3XniMczOAB+}}a9 z!SUkh%5o?3iS*`=05-rp0c^ni0`K3yPv8%LLkMKoNCY@_^2h3GYr(Xq@I*yKN<&Ll z4*1>A3RWKdQ>4HCoj)+2-@bhVvto+fSzlj=!~2##ft?O5;|XZh3&^U~V$#GRBP&wL z2L#c{sr@H@%YaRc;zP;ESn%stlYXg-tLxhOI@m~gN_n3@BiV$}tQ!6gE`ZJc=%`Yu zTJM_Ol ?2$-=1Z zOod#4MW499{4@%y0QiE{r2pe1l&t};fsrw!b*ZGfvD#uHtaXV19fg^>I4zATR8$xO z)H!{q#9{@g5%Bv^k&!ExgZ_g900t0I(W6U`9SvJxn82f}9xU#D;=I1#-1+SaV6osi zkMo`-Yg~wE`rC8kfP$$d2M#@BXOpNKK-%X8Nkjtxdv>*n4fu0s^GCmaQ8-C(?|2?D z?reI#d-qwV82{13-9* w-JOAdqZkB1!h%t$T4YpI zjAUl>$H4ILyW;^tem*{W1_l5gYK%;;Ut29S@&lgPr=_n$rVaogk1v6F01n=(XJGWY zx(naFJ&~1_ZO}=HilUC{nha=NTU`ZU!I99=&;T^^`4bVa!((Gr!Cr85d<$*y0ATX* z<1Z@~Fv&V6I1zR!!z5v-Xp#&*Az>Gjr!(TpQBY9ujM56|78(}T27s^42BFkfjEw9= zq2Se^ ~=!rsDgKZBH6ptE?u2O}r9A>EkRa^NGA zrFeRAd0F~aSQymdO*s-osD{2%3R|L0p|-fXyU(aF0a{&f`+whsfTV%X>g4VrAjrVb zqhAWnL`h~2*VNQ3cwK);l> ##-XAsTU+Y#@=H5AJxib3^lf!?$go8qkkyS1koX7{ z1uOk$bM7^C8AeKG0!xgTGGx8Hx|*+Z1i=DOXb{z@s;HEm&jdr#z%WwfOj!tkoWYtO zeCGVCeVaA`&JA8zU~64f(dLvtvZJw&lYeFGar24!1*}{UfSE+-@ktk@cBiQ zM4<{XI!aU*4Nj20fkClOgE?y)z|XSsa^Uu< tI5AVN+K-z%EM(BTd zda6txqmawa%q$Bem8k&Wy-2Ea<9G_S9qr-$GfXFcy%RTn-Xai9Ljhz(M?d@WPEKAP z8wW>0US5wi&R2*M`Xd<%bvHB1owCGy{J7Tb)LdE`9a^KEpZw2V{|sXXvz{!v>MtWj zH&N7@i3}if3oHbY%{vI#T42sEqWpY)2a_Bp3Li`WJG<+-vb*=h@2lR=rlxlRt e z5d96A);nxP0$*|8ZlI?JSSY;UcHq`vBqU+}8Z!qH-d 5C*3>);?5rf(Ny}-qlfpuynFiWS)1`Kq)nhc zsdWjsZ&l1xWonGTsdVhsHp$-6Bt%E4)aY9|1Wq@+b;+DL+2q=kvp4h~VdxVwa2*1} z!m6a)rYH{qcyK(JFlATT!Te-G$CQA=hHlXJqtBR)_g-=Xd9rr+9M85jRNn(=nTAHZ zBZrr*?Hf&X;5#YNJ2984?XIn5PV6w;r8HcJMdjy_A$cvhAJ5lsHCQLX`KK%?C?97i zQi%w?x-W?R{NZ!RB^} %;C zTJE&l7#Xru44;bDI?s7bzt*X2XnOiyLi^i+Im+VboSVFxVD(jzFuJF69lG%v@o&3H zQ5q1k5=yx;O(fnhF=_tj`)@~+kLJ6>3$ur ZplT8<3jmfUCGrDcr@4T<>@IaE9*R7f2u;c;KPU6 znVCsHt9TS3L zZB%F+mHnzvF1g+2_srd6FPm}&2IY8Ecz8H;mlF{HCc@1M+Y)EB<2~iMBQ!!uek0yv zx1=X9{L9B59yuX2G4Y$)g^%Ei!yn945np4aZZcfvi<6rTgGAz89>5|tyt?r(@AoEM z5pplvcx;Em65OM;9tV_8UYE-ZSH0(02VYRg2sbsz97ake>P*fo5_nPyQ%tO_vubv) z+S!u-BZX-61)u$3dSUBFp6*P!(&j8jh;gc1P1ny$Kml@FUtdSZzs1iW)!~h1i_}>e z#G|^}U@rxGvNyJK*xlFyGXTFSQRlpnn7-lnuV0__Icg&OlrqQ0tPEM;?XIwey%=9| zb#PFl4ipdyCd<}TvRtq5Q<@Dtu_;@RD|p@gmHxfg9^w%K8;7*xTSkZEW10;wWG;4< zh {}>8Qf~)5fAR4 zvF3kE`j{*ZdELY^{`;ft{zP poTb~rFSi!@`}^%>BgOi*0_))%HH^E;a #?_xGzkb$ z)HK|5x3d%e_@6!TA)ZlS!%#>s6@`0%I{wCC=$14K8{4;%z~z?@EZD5_@U~o~b`jYk z=;Qi5ym;N%v^rNu$0jBlQz3N8n}a|6i8`7B%oW3W@u vU35~wgvmaO^7Te+S`z7Kv7DXBY%nW}C8)U*A*)-`Ul)#S&&7G;P zuJ)SiH!U=-7+#=IWm2B^IkuWEUKc%$HbSE#a70HZCtaZgU&-C&WjAQCz)fgTi*J4e zgbgU?c*IX45$L#%Ol3u`eI`c6soup(1}lL$SPKC&cWy2e9H5nRa&nppE3g^JUN#j7 znX4i#(j9Ofvqfa}OiWBD>+A3EGxoCIO2qZ>Fy>FX-OTCP+zrkonI=WI-Vw(gr=9e! zF-_9T!)xWZyScp}`K9IxLy&xN*5|*sYR&NM$K^?R{X*mJOl2 AI2GF~rrNj_+b)!t2jb73?7Aqbpp#Rq7`gQJUMi{TMmM#CM z4nVm&eyK%8$HSx4tWXO9MNu0C?Mf)2$FU6F-00}2tX`hc8O#6-DF77*=0;&xjHV%! zQii``v86ssR^iQOm6STjfiNqFgfw6YCpkE-va~vu#XNt`5v_%e4{dxsFlWn=TTp l%?AS5*ZeJ82X9)=jvqEDeZ783741UHFh31TIyDq9}$bxkb<@+R_c14Ix zCIhOGNx4#fJ3uG_m@`CpGdK1a14Fu3ziCEBhVQBRcAKN&&Csbyeo%7QD^AchmVCq! zXXoakuml*LfULb5^54nR7euscIXF9`(8o<8x`hhdr|RCmr8RM4*DS8C<`n(`%>ILc z7X;RcIBgB++zi*QUcH3WaBy%~)YXn>iO_)F&WC_0CY eM3Dl`gCC=!0RK8Jupi0*Gk_pQbK1Au@^9$7$k~O118G9*={`1cZ{0zer zbzjC1(L}iDFcrcu;cHxrLc=ImROAA^G2Ec_zrG^h$9G5dQW6pF|Cx3F@aAF|tu+J; zEiIMLojV?_btDwPagY7=Jp81>{TiPoA#}X0sgiYu?Vy|dM-d%yHlVkxFc;#q-(UX# zH@42ZHUB#N3^ymIP97d!^@4XrdAYHPiR+I~YAmggt1T*$47+;&{{8Y0b2YU`SOTyD zpy!r|M`b_5&--R8s@p>!M7)7lU~HV*V-LH3km|tFR4r+ Ip_$~ieCM&~VJ_|#M`gx{F zoj4qz0|=KR_~CVk0l@@C1Ex%ERFk`fp<&P0ui7Fky^dv|5iy4UorfP>*Z{ic65myG zb1wM88|303lygf-_98P9g$f4e;NU%|Cg)N*Y|cT6cb0<&a96_TUoSb$1S<4d(94*Z zm`i*Qg%d!Sa+Ku^y9!`cPft&TMHIU5%nUTH6<= Ag!>P)0Sv-F^IRp-6t0Qa`c+rYZN5z(= !N-!w%hr8e!s3@FEPFd72e&?2x-JBPNR+Dh<-w zZJIp3Mny$=U}hcwTgX~3u8znfo_yNq;HGJaREN8tu3Hr#1+G6@l>_TusgVwm^cZRS z gwu>un3^f@x%@c3_#-nWCN4oiHS<) zR6Yc}t4cL9B_6Ed1zgFBZ!IVWaoTV34z(?##0Lw5rI!o(rs@|58Sh(RDuC o(`s!lqm54IW5)6=`BaxQ(dIhQR0vK>19fy`KC z7?mR)MI@0DP$_Ae-QC?-;+!;eZ||BFF{n4@;%uROB_{gNv`;D(p~8`(qN3k2qu9UT zO2pB}(eZcBE&C>832#J>Vt)evUgfZH_Au$+S3r}_hAfWl9U9_{YK5A4=FE}sX24)6 zSBzLRks1maxem} z@O2<)frwG!A<65rv`$S;UE)K=Vu4k_5*%DzD+ZnOuRHqs-Yn>Y!jRQHFgO@N_gds= zroL h9uSsv>ze(ZuJ2Wyjewv(nf_Cyjm5u2^la7!f z`L0xn A$G@#*lS3A?JM_D5F*km0bB z=J{}(Bqd)Y^7nvcFY73m<}S*^_W8e)a`I1@_~0b7X!0YnYii6f12A^l%g(O&{zXUU z 5l&?0Q2N6CxrYEmV_dGv!ChQqB41FBCkHa9JU(M&P*m zvyx3tosYul(%KtKj+8uNGtb{CQFFTYU;e1tX-!myZxB^l3YmVH9=~FP?W>#KrKpU4 zA3F8yt*x1>)ccfkK8;(Xm#^9+&1q>Kx~E6%A5x8mQ4~KTi;jmYQKef06W}u>bOQ|p zcmiSqB=t>sRam+$w}X9U^{%nBmN 9*n)5(f!}Q zKhKvr=vX@@x((#r{0p_Mr?xIN1x9lR8_ovK7F=5#6yeh#j;`sG64*0mr5cILxpqr+ z )rBL(%7r#NVU|Xj*%VGPmVv_&jZA-%hC!!r_eY}8zmnDqcE*nSo7@+ z{bZeYfN0>}1U3kG{m@1}tb07_H$e2wWD0Ng^6~=Z`NI0biZ9FnD0Io7b8th$>(?~a zjxd<#I;7@ajKR;XM`i=1_Thu55(B6JWoAc0U&*^?i{mOMx%a-&7<37v;|cOg>$?+D z%r>Sx*9I9ur&H?Yiq=ZTJt1w8m0}ZSH^pm4p(6ri`9HE|FY85h@<_= 5?{5Sg zo{HgUQgp1tu+_ojN~?w(jILt#Dt{ID_utL8wT>fb%U#Do;BX&b-`LnVfHB}TSXf%} zk>{=ywlFt0m*xQG3WZkUwK9CEApne@`Wqy!Bp!7n^p-RS=zf&>LEzNvQ_BaPA6>e{ zq8XVDtrEt3zE_?1p5FfJufJ&308YX1bNS+d4~=HC`?CEhn8N8E%->O(h+RIa{_JX+ zvi{%Rp)$8W2Q~h!TeweT9dyfheT68)-jQ+cjZoH+1+(IxPkemBG!M7Ob@Og#x%RmP zE<6q0fBGupR-sk6ORdib?^$#h(m~A0(Qyi?K6`F1|KwwC-<3Q{usrGvg860D>`nn& zr^8pgu3$h#;M#0K)*@O|JHmCV*@w-#dW(V|ye30S^Cg7#01Y@etWbAL#OXsHlE(n_ zyt(>y(v9}98uu5VVoE+*VR(6X^ijt_v5Q9;vaGQ9M`lBBgu{qJ%YOyE1CT;Is&vre zH^}btR45#nV?F@6j%Bd^f$s7&&{ZxKT(K>;q&rg2)AK$?D!_)M(#Ot#mTxzR vX0~5rb3K7n{}7>S zR=+Krc)3)_luh%k(J6kLBtQM@`6)TaKDI7|)Dqrw%3BEQ=~XD#{CtFq+>q*_?sW%m zZu>~q@3|`W9*sZby1zYnV_;{pc18FXE wGcHH^N{5{&%xkd7i?ogn>Uiv^9y7u zm`rcqesh2vwOGKqkdmB?mA(R~_lf#o94KQTnGkWw7>lY0TdPEn9xNMzgFux9m>kI} zCg(Cz3GFNq%s^&kj;)cbyuq83xq4~FMHYko{pIlOfVP0X`*^c>D#1Wyu*!o3LionQ zFqj`2JZAtT6-k(v&x0xoQy2VQ{`yr?R!IH5&Q###00l0N)lu;Vs_;9NT`nIC-w#i) zjjncNB%fz}b+fGPm-v0N<&1`p^wDQt2wg6(^Icjmb*lR-sn34BJoJNu$td+(%&$1f z46~KwJUJovT9=xM3Mo}jK8wo;{u@0_mouyDl7x`z+VlSV3!OXfO^&(v?~$w uqlkJ8OW>5_IP)Rn%|yM*NPE=4Q_F4SYX^1CnO z19NM3{}by4%Rn+FbDX24hWIGiwZUz%Nj13MRWIaTpQ~i1BBhD9zIgxfv|;V({JAP~ z$yWz2v5I|c%b)Ml>Lgb#wSzO-ILE8sdX;cGLrFbip*z^e<%wpqBSTj_ntg2b$A>pL zBAo~tdE*y4r{2AJ^9TE_?hRit*g2N5W_9zXHj=iRoGk)WXj-SSsc8h$vVWaYH{sqi z3f(_2z&rh $ U=kPqYb&Q9BEWe8xNTp78~$tpw75<4V$Q2%?1;5>0JYJ z&(|<2EB6kRZ}eFg29TEwc30O=`{-S?$@g;^om*O;kVfBlun=2s?C(~ds5~dU 6B-q6gK!)c=_~> z?*2xsp56F}4Q|g(n{vTwX ft`j%zwHZ!#z=X|qUSgZO%1GS=aX_s8Zw70T?w?3nuzo-Xil6hmnL?eVO z9Nh96=Xa8S_19Q@{EyO=1Y+9Zuvb^wF%3IIgt?76KK7B7u0z%iaK5 R!vR%B?*oM(tIg?1XvtSB=B+22A%SR6VTCG_<@0Nr_v*#m+-Q< z5~%Os#X_NBf=bN=?;Jqe!)hFyoK3Aip$wf%VbO&3bcT8OQ!8FfYzW%r_y?J!-!vmE zQ|)!X{#Y?ETrM(OoNaSo6h3FSZ`zN#$LNuwb$K1c%_c~p|L++AcI?~38!^!9bnf7C zD9S 4 zZtIU#=V9Cuu-+d(&l!wY%WxH)_}u8CH96^
%I{>QeD(t0Hx#$~fty*melJ_4>6Z zk~>`M k; {e^@@2X2qvRgaOjxA5#YY0QCk@V_cw>Mu|&Tl99>NaiL zWnQ(nBWfgn9~ipWaRzZlojUGXL(eSwcd%Xre{YZ6tCy^A-+J$CkqpL^s70do=5$}$ zX+fHZj*g~tZ7CdW`(it6a4H#RE0=a86yR1KWkuA#_Lj=9|NSdHHO`6(FRx9xble`a z+zhqf7w`^y0V=oc#W-#7&zD?1e4yUSAJN8+SnpAvWL@!z7b#w^NbcAk%riWBCcoRH zsC#4)|K=w)R;gA%Krl?3?57&CH13mi_q1UydCRq{VdaUW8nZ%H&~lb)s>fVqR7vZe z%6@%FXZ{qJ%i2D+D?1H*zKqpqe_7`}{qxVi-h9tv8lf!xfmVC=Itt^vHf}H~+oK_H zv38{xBT-9UP%&iox2h#gnoIgka8KWiA*xWxSti(J3pet2#jFtG-r>XcHggS&wHw3T z< R&VP8|35o@tih2t!V}R{PApY&ECVJSraGBS9fXvF$Cc zKM@S6`5HhrI>P@}g+wQ{RKS|GGx2IXKAVHI@4nvPT5!kEaoANdeWf(<2;AfU+!*&K zBw*Pp^S{T8TPqQY46@G|RZ0}}w=I28(Cl0KV^iudGc`rG(0B>F;J+bu+kxtokd-yw z)5DJj4H&Q^H}*^<5PyJ<=GI|ENU|**R02y*yNz4?_}uywafLBlFj2?$+{sWrq gQd{>0w}C;9z*_(XC98Z3uxoV?vci?ZW8Z*VsHom_d6DcG^sG z$10`{>8l-OKPHUqb>|w}qseQ}pPE~u_FObR&L8%p7o+4!!MTQz7hYwf27;E+oBdpE zVrrNcLPU_e^cxutj|bm+$4IXGy>(giIk9%rsy(G^#_a8dehUkA*`Y{*h2;Hdsqs{M zbp*eLS=aWWb#T>uscSuJ9P4dLny!j H1TFS&f6NvY`(bBkcQb;Cg8F&L+C)VCqa8jVWPEK*HJBRZ z(XjuMo?@MTnLn(9-O4MDOeF1`i{Hr#{1n%)Z1Gn_jfz!|pg 6eB`maN!o-RF4vEDnANq-eb(Qd2(Eun z_7G{5;YG+`uRIg>qI|K LecMnRgX3?s2q{$V8qOoxQwAC3Rvq@}{sE*Wgp4c}P(EF)K9vQF6evLtLG% zx~2V1hQuN2xyh91*pS_!hK2E*Fv<&B^`k~c3yMDEuSw>HF8i&f#&uFxOyXBwg|;Pq zIhpmn!HYUk|Fzm-Y-i+Qf@f!jjNy8Jo|5|1*!2C|vZwvNW51nH^zk9QPZzD4h>xIS zn|8 n$NRnx_O7cO?mHnba>&-wHk`lzWcD9?)bj% zmR(k%RcZcxk&I(wthbj-=`c0@#omMa{qK?IIvQqmGfDenQvAgMgLK2K9%;|&cqLq! znbm0nx>)IhSk$$NX>zBthQ6QXe=<%T+qDi^x &e=F{XmM z4%|~PI+lo=1LHnCtc&*q^BIuhN<5&1+~xq^Ovy*B90w;SvVR@e`W(wPC={RqLC-b3 zjym3WZA5}i7kKyIT)h#?6I;_v61X_Q4=0oW>eqrdXuKBODskFBoaMj}V`k>hjhjAT z1*MOw p!k=-fZ~Ux=yfAXAEykN*cd> dA!@t1=>#z&mq zNX!+S*SB*izeId6jP~4ow%Y>L_5<3d*6YWj%VmO1ba=`2u00*%JZ9t(@*A!9N2`q< zs;koePFmV-ZRm^R=HysAm4@9%`3&mSgC^GLln(0v6skP Qd0<&aH>PS6T(O-8_7BL^DX0 zb3d--v#22zGV~2!j;t>q99Vf p&*p5IvO4# z`LV!dvCPW@vpYuF_v-t}m9%La_7?mZezJ*b2#4;P>5}X`o>9RwQ{}Nq8zZyZzCl`Q z&;H4(_=WSMT4#86?XTxam`H8SB}g?;SH9_;YW)0psY`SwlgJdjo}1mdG&akndQTPa za+YSo{)_cbkR~$W;X5pvdKn6=70O(koF57c6KzvSe(86yeM6u+(mq0=ExsyqGlI`z zBB~=rMwpTc@(1V!*wkB>5yu!A%Rhexu{ARLTnfXYT%O2LJv^{~d3oWtInp|xB8~E| zzq$JCHb+j+S8|{%XY1jgza5`yh+=VbBcl?pIpdwqP!LG+O2JJD4qndaURmJhAse$& zFi`>CaG)~z?GNCq{@LE^H*e+r^Dykid@2Qh*#)PV8xq)OC-I83OCI+>9o7 Uvd{i4Hq;tyt9 zh1t948)#GhC*F~Wh>W@ZbzDN!Mso9lX=y!GyKKr}**M)(SdJ&S@A1IcvX+sW_Kjfd z>ZuTUpYI)hy~_E;56z~MnblE=8DVcSz58t6h3x%Z^L{xiWOE~J@%-77{7v#sJ+_NM zm`>rQBl^Zy$41O~Zf@R{XpQv@tY5|3F71%pNyZy1N8@wA5rv*N9^cG(7&9qx>diDX z{HR0xgCd}X0;3Ir^->*$2Uh|jd7{qY$FN7CAGDPFgC(|H7hGTg@q%4eP&qvI2?Ub^ z?!epIQ8raCO|I}}@f~oqKx$&V+Dk0+b_^2i911aRr}#CHVU4$5*g|w8nY49NT+0xS z#ha@l$0NY0mCz0rZ}}L|GY@D@76dIK^pjcPZ#PwVvs(OH6dG)|z-bs4u#zUvb4G(3 z;@U6xH&A-BvrX x_HClD;$pIDWKz9PQBC0Tix; Ywx!4%fw<70cwH^$4%VLyc_X)J22(wZw*U`n#*cPY3C{ zWa8oYdGC>v4V(=Y#^ZjheRZ{NeAli$JRjB7$Ad4v(p*bk6$wKc^@{P-l4sZgojvh6 z;{m=BJ}s E$t{$)j*%-a zuv@<$O;$EBysJ7UMjbws;a 0S~`+}_2Zu0?yNwz&% z;nwW8I?qD$xj{7@M+EVSMKd)QJ}yn>Zo#W8hxu8eTJ`(64%*X~$(s#< vx>7;?8HUL0)gtPmO*6lNN#7U@nd6!JQDtWVc9gR>DDEy$ zorJ$9u?KvgJSCRo%JWs^+0}dzbjM7QmI7w4r-H|9`-``J+~2rh-?6vw+^K&iUhbN! z_|7FTj_jG^Hy0G8WOxb1^Bv}{DXZOCMQD-8AEiHY(PF&s&s=5lDPPly85vq=acxEW z2oT -G*Vc0Hx$gBtl2`2V?QiG5h*-dpnR`yOCZ zh2l5knQChabGtMLSe50u p&J}W$_+;0@?uh%X;jeYY4#X|M>A^AQ*v$eESw)zKj&x@bj zX${%iNY#v8&^}{ij}v2Z@gsgw2`$_i%3%`s iJedO@ZBjDX mmsMz2&Cf=~V+~v5q(c`Sth|SU_Wj+kp^D>k>?~(`Hzqyq^G?@_Uh~}&+~0OM z;n9KpFdMS`^YNTy^==^mG@X0zgUCqrXRqn)^zRyDe#!S zhWa$mTZr{7;!P3}Q!dUMglK#jNQ}s B&2jW%J<|E@b=d&IsM&7Ll+t&%pcYPXkb<=v}D0IjRk`yEA zTAK5S;$szc#pP3Pvc@Ps=D4WWs2`G d89#V5M`M80E@nf%ON=bRq^R|Uz+)g8mp&ir^TD+^-quS{#@mF?=W zmc49`XRjrQB+1&XMeEVC0U=)sRVZEK EWq@8?S6!KYM$O=-icFEtkCV@mi!1G&4y3RZ3|9W_F+*HKM zUypC!y7e$y1kkRu^u&WIw^eTJq< H&|3_7<(_{3uIAljmhY;B1! zZy#9wIJ@gWxAx7bH7m?KXRA~GX0(wfFqx~A_|CdZrM2Scm9_TEy3FdZ!&G_ac4g~s z^o7w?&F4oR3NnLpi`J0kuo{v!n3#u)4P>O5pywB+^L82QpNtjrufTkG(`cvi!8GJz z<(G{_F}ZTeF)V8#en2{CW9=x88N=U39R`6)S))p9ZdO!jyE(&694nx5lHEQdhM&1& zNAU(pwb(@cS<&v12Ev|TecXu#R^fq&XyNleYF!rkH!?4wP8<0L+#Y?tMY>_mlz8EU z>b@!AGt~!yh|A=%at)b2w_6!*`*g_Mo3g?5*9q;VeCJf7rIQp7F5Z*B=rt~Cl-~1+ z(+%O{`8}ZRk9K9856?Zxot$s4;8S+~=Wl1~?)LhM?@msv%Iy67=ivq4YKR40)HH I BF`k);s>&3ll{N%m#`(?dD#Z z`Cj!C6QqFWHJ5<-u9JW5n4T%UKR6qFl0OVl{&CgbiUf7M-Rlma$Dear-1(Kq&qIK_ zXRXT0bph*qtC{%VM+l!o@b{bc{Q79G)Jx I9g(>>y7*Jg{G^y2C@mm zqrJVMNN}O$;Zv^Uf=?$kml>#Y)4~JuYUvsnP=7PAU=}hi`1{QZ{k#*JXA^Y{Sz4u^ z>*o~|6}4&p&l?(Z)TwjcpKzYLq@k)FGncC?T-leOc?_exZc+N0FHD Cc%})iWMpXQ!@wMvNVIa^h=}sU3WkY9 zDqNr5xdkgWhz~S#3^ffq?#T=_h*%~O+Y^NCn8;g!n~%hCD0KCxiy9IHJ}Zn#K_6IH z m9r-Q?Sj)w=(*xO&wsRPYGxp8(@a#PPC)2S(~pz6pkgfw}umP6@VPtR+Ol zhgDte4^E-qEV-s(@66`|dzyYu50n{yC7#q=Fgl~q5T=FjNXf^6Ir#9JC%;rtz-oU* z$V=grrXkR o0w!l~!qIHPLb ze|`7Zfc G$s z7DIrPDt^ZK{{2K0gem*Jf4}tjcRYz(*y#R7QndLh1NWbIS6Nc@DSR|EcAOybgC@<7 zE&(id;byc}PK3r(l=DK;4MRgiQ&V(2DyGOGwJXEb8a7G<&4ZEZ@yH=JfeaKnhJXlt zUs(7~B+}M&1b1v9YiH@fshfs?;M%Sa{GTJu3=F^Do*v_ZEdm+(!fMFITUV28H4W`k zLCOQz{t6HcyIedNxHB^|;nc!WD87kQ&%X}-+B`hi4An(4^yxz(62qbiXGtrEnIDBv zKZsGNzcYdxC>{lTkh{CD8WIXQm=GZB%FReu^dPI >j-o|8}H(0j#~|$uWdVFnRq9#_{1+VfO}j z_ro^2KV$VK8Xj`}_xdNU9wcb;^UqLb8uf;3Ou@%-S8hsw259h_cVLB9eWoEG4(7Wk z%5=F=H#m&gq9DGc6TP{+cZrV=5sD)orTr6TWKcdiqjO73WfIyUJ2N{w3;8m_$$8G` zdr&!G!^ZkH09;5Awh-Jg15OpgD;Ey0_(DQxYd08ToZ2XO!$2Ay3H?#+ aBypKvVr5mWMAMl6T(h%499GumWG5Rwy#9)4@9rSTrXSXRAhBDxe}otiiQ+cDevk;E4(F7^h#9Nz;{*km$@*ygwwXbot?J zj)J~# zPL!D{!>DF0@XgqYZHsa-digs)x01Go@Pd{AWpRfJ2 &c_h$6mzI+ zgHhSJ9Eyp>iLOaEH*N^)|MIT+ZECC(ugw+#=Q1)3ET3InT`+@?1Hnb6#KU{?q _y81XE+!LOEuR^4sXcEK*Y3?$i))*f39SDuph!%*a=p} zmB@?5MAc1(F2j bvd!f+3Hz9!A1E?+cW=Pnm<7KV#i+b!io;Kbf zvTA~Px!nd#h`C1j8Uk;O3z*esJcsOMVPLo-lw(`~Ze#@o1(8S{)Nvr}f;I+U{C`0i z$O#!jWd0!M0HhG?h_?77k)cm`4>HAX+th=E9}uguHLdMR=R;^3>g&9o^HeC+{Ra-f z4bdBN-LM`cL-`{(&?q10SG^2b{4(u0gyOWh)1{M9NBCcMw%H}j(y`?En48tr{wL zq<&sA6PUWy5tly=qArffKefVKrslO|X~3Pgu&@BTbZ$ul XIROAYR1eM4hg*>)zg`|;D1$?mwzS&rg~uYt?*Wm zQX3zK^ySow@9Rdce_u KfaEBL{m$UJ=xLdf``hNWM32^s3 zJDsnZqRJ1Oa}Khc+{FaTc+^>jgyiHr M_5K zYw!jS!XjN);iKb2)N)&52Eb0BL^rlXkzshuRSsDhop&FN#nh0{P+(w4MCDghKqx!4 z^Ik?Y!w_t&{ht>=pS14JtPW8HDJdp?mRPJwp;_O^$nz8PvU(H>1&q+J0|Y^v-SeIg z0f874nvsEFBGcpF%S)rr{uQn-7|5|#f_Qy;YxofHsL8_{P}{$4IN&lNAH19dZ|!W| zc*%Xz)Jo+6l?c@Fd#3-+wH@Mr{67$s5Ru7#@2Q}Nq{Wr|PTkaujtvf`=;y&@IuX$V zVYzG( 533S!G#S@JPVy*LjbNoBMkH^~zE+i0?H| zf_%e`1ry9~APGe-Ejs&g<1JTLDLp)BsIq#c;=|+P7~_Jp)Ku_l!n(PGlI_lIS7ruo z`wOmP9n#Nx?7@2}mnLyM0(`#FT98>6i3GPSLNm6 z_P`uG)m|j>IPIg{nTQj@>bk!-48nyw2#KmbM76{7?0FqsA!@YYF3Z`uuwr}=HU#q~ ze^?1|>XXemQ<$HkAHl0?vuJ?IO38;63pd59PX7{y#tFd1Z-mELGFdE5m0i;?i8$}% z&K=$$^mQY=Ie!z}rXylsOJMjq6ZuVV`oEJYZ^ ktMw<9;BsKz;%o z(%srVRTlDGS-V!R8yXtky*tbg;e9!Id2M8vR?f+jC(lSo9D@g)y8XB%y{zPV5J0w+ z=LTVP=|EE(d92J91)vLBG_ Z~w*j_#wCdwapANw8N$J08NS z>N#oEB*;)aa7Vm>DIgx@?gDuk|GKfiiC+ZcV8cY`y#ZTOInL-fZ2;C2vWn^=2i&Z@ zP~-m%H&+h9a3*8d)xrcgz@q|odqrP_G~y%DR#TIDhW>?n)K`Mwmo1IOUdii*s6ms* zOewhVA@_)m2mJ&77mN(=-aSE~xeLfju5xK`w~o48;EaBBiN@#JWdzhOke+qkK^h!7 z>1l{+9qd)f$T%S2d)=|?aFIdwgsCYq+qmFZcr$=YSxYOcn7NMs-!1Yx#&x5>7?64> z@GZs#=M!}xsSIsqVD3!hDs|VfOo1(`YIG559R4%ZdA*)B{~(An!jW>R7D6A#l|WC= z& Lf;qyNW9R7AOv%_Yq3>q>^FLYTi~F;^TLd&mGe7Yp`M4| z+T8;l3cSIxoX}GB^JLOGQD|5;1ZHAsSR~ST?bizDI;?Fu%ODsjpoZke0-)4Jg$}$> z%; ?7Bt)gb)DC|i zSi`(L>_OxLmRu+*DlT{jppF+0FO-NwEZE&bAp;0taa?&t1z-T~J|-xk`J0tbYnvy3 z&CE28>p<23#$otXfnxf@vGCTugrMBr);&Ukr|Y5vv}pU&tuGR@=jyB8w`-l+YWe$x z!kFLAc(dMxK(A`@&z-c^^}vlLyi`zSmCV;U@;9Nby1iVd+{#kDYc2g3c!LzZyDnhT z9JdUp!bUu%R7?X#U8dfB_hNrKMQFiqzZ+A=y7Marr$11s?zFcRdn`$}A;5uH$!o&2 ze@OB3uQv8fi$=-HySEp9;CL36uHWmXhU^XxE9PG`khFS9o)?Z{-(vI`Ix-ZZx>)&n zbs{5ti>#2?P`&zfC}cON^`Y#TO0OJo+qGkZXD8JNs~FqBoUz?G*Cofh*xT6Gtz7z4 zVJU4uZ!4CXaA<-9h>&llb{UBh8!^bH9;qUAAA!Oy#(MpY8;oA=zk@j*l*sI7c_V}& zUl`*CD> 0h%^7I5NP0DR4-+pa4|XVu3dtEOOi3*5 z>}?72?2LMa_%FCx7Z?kMA;))`q!t&qR%{3K%hHz%g48zq8uqudwAhqOHgSv1WBjL= z+X<>QOrt(4UZk5Ia#4l4!DRetQbzqV%Om0;JB#5sUDuPscT`uI=3o5$`k`SAv_JB~ zW5JCaYQ}LNrM1K-6t5c{mYy5G>~`F1+wXqb59a1B=H2U_yS_Io+U&Hy_0MDQA%ZR? z%1IKb(=>n=Wt14=(|@eAjxHpS&AYyOb5U8<%(ruJx_M^>_sBMO*SXk#g*c$U1)fH_ z-^oUiv #%nQ>GN1hC-K56Y zo}r;{WF?mukS5^b;%c6h?k00%Ax3SQbQr*M Zh|IEy9sXyjg*E7ECMD%3(`Bw3U>ZgNiKJ2}a zH0v6$m|=Z|V|U&&=)DSSh}GqY51Wmb_jo6;BfWslf*pp&{jICa0z|D(Jlt1-beEBt zS>$jgi4$+SOD`CC$JX{V<5%}-ZmEdwqKnv!pO93}76HS)%{hPy*&+~TOVk1WQ0Lt@ z00imT{=lei{^9Z?Mi&pQKuzXgLJ&@@3?NMNU7W$05PbhUuv6{!Sen$Yjcz1KGV5LE z4?8!SRku2{nxWkIx!z_rR1EXV>b(|%KR )qQ4+fAyf z4Vz7&yZJYI6&AYk*fB-*GczF{cV )6C(l%)Bx1E-%uM0MK^}wKZ zb9>H?jTp1n`{7Hx-Pq92JW pQRm#!P@)(xMB9!g1%Q4Pw1cc$;X z+0$k3OF^oql-us_DNUsXZC#g&81JAi^rs{ntj7~FxJIkiqRWD^k2?la-!Vy6&WCdD zM(nZ3jEY$WPVN>Ss?A?Z$6?HW{CXX8@1b?oomu{nN|9=hnSh%6r6ltU`@6hZGwc$3 z{y8HJ+pVOrA#Of$p4CcU^$Ohs2GvjQZRxEGmMgRH+=^3gaU@G>-{C}m*$p4Z5qyqf za(!`b_~nR=SZjat`nRYT kJfA!a|%xIf# z7--B|lD9u-_i3{CrzJKs&e@-urOVRg8Qj?GJ(b^dGPzqsAqf{t74{if(q?q=UmrZ} zL`B&V-dWc)^=xk#udj*avh(bJICbDG>(l}V5?~^3EaVdb kc|eBYxzZ~y$*vB)Fp^GCB^Ut$nFYK#oCEbr_ZNvT>-ALsS) zd9|QBdRTQy)puc}ia4Su)1gGUNV@ol=I)gwTRnWa^WYSD3v3+wd%J)ck2Nnpt$|ep zbJZ$t6JMO=fYt^d$Af>==pcO#49ocbo(W6qCBBKyRLRIYLJ3Cz;#}1p@apm#uMes_ z1wE8QONmD~3=lZ{6wvBA?~%*qAlq|Zj~q`9<@-?%Bg &WVNF`< z$-zGS 1WgZbbNm3WNfgXR`b#6Z>kw?JJAKWm`t}z zBRA`pBNX??@A}k}w{J9`z7s4z*GoSTqg)<5lUID`uWxg_`*WkEY&&-cuaVY1?^BmQ zN2#QhPi;;b*7S8sVL}#?=y^{`J1vCj1{@7TmfJ46cBhmtuAWv^E=SMBW4Z#wGUUne zS?l+QPMH02ZybsA;1(r4X0X~FS`%Ed;Np-IsU_x{MjvC=_8;Vh<<8TT(Y>6f$ Ec|bikNl>)1H6(7LyAnl_WJ*<^NE-7c=HPcDk&h=%UB 1Hn2fdr!avR)6A2C6j^$i_+ow}|aN^(}qna9n>15?X?M$}ks zcDQx=@a!aXwPlvvnG-yhz3?n3U~DpUtKHgQsb&4wFM@4c`B?P^Hny|Uo+y=^@egu* zNQ^giBdXi(qf)T%cgGsjj3E5ypf2;`4;3LHLoHNCgMfKe)zPF^Zwq5bHZtO<3)e_I z9_>+Hby_jAx_j$C1iN{-gYCAKFXr*z319q^Ip9QagDN+pM;B0O; B~_sspSl>`up=BwVllW$-KRJi;rU{9~X zZ+lI3cjNt@3^kS`= |co6H@Y)r*0S@a zi!#rS%-PKcZok {T2?jQ^Pm1Ir$3Q&R`|J8u>DGWY+-2( zvOaLB`KUy8aET3ix9`x@bcs*WG~=t_Km%&Vu-W)VFG=;e{;Yc=Q^QvGloMq^e%Y-d zaJ4sqZHqo>c}U8U>(7=B^9u%bKBI3a;u#l$-p76#^1&!>ydBre@|st~D>&b}ELB9^ z#YyqF4P@(GV-ow|zxLU>w$O63yEQi5N(dRWC4n`lY)!< Ih0a0lbR zss{f*+TJ`I%K!f#RVfmYh!82VlO=1&mMug{VhADGmqFHKD{D!VwFn_(U&j<7O^C@l zj1XfV`!<&IoIaoL@BIEa*ZE!Nk28OCc@OWI`@Ub>b9pR2xA=-RBe_bdM(fV~zWit} zw7>8bw?B?BTyv}>U}5K0=i|%%8?Q=~ua**}DckhfxoTzdlAXKG9z8&=BE?Mkly{a- zpr^%7twx*Xacw&$J2g+6JVDUGgl&$buND?c#sGVC&ab={TV3KGkO{ueErj}FMt{u7 z1(9Z?>a#9_W9{ekbci?RUkn)fG;FpX_sj^I>DWvX_2283A^fb1Jx0n5Xg*zD!fqn` zoeHturC~zPcKUo6gOI6Vy4BUx4(ZnW) >8baRpHwF;214Lqq0l zft`cRi~FEOUbVZD!1>|PS2Vu-Izr*`-EuLxj1D&QCC7Ve-~I&1fkwUSJqH=ihSABA zlDAh>c*7V &%9UnSHZ{0x1D6U5WHNG zFlZoRVQ22Pn-{J0k<+8^`4M%wzQxM9t19a M4G#Itu^bY8y$28<1w^*>uawtl&aL-CsX{EYm|d) zDm2s-mY)X7II7~D_t&?95qjV$syrz4Jufyx$#yq0czvhv!+C30LSnG;{nQd?T#1`n zs+oUeUcc9(--|dUi?E92KHhWc^F`9p;WELsr5Wz3)XdqFq5f4@hO nrmKFSr!}5@peCYLH1(#qcO8yMFaG%{T{C>wPB>W*Nk>` A z!D#8zrey`b^Xn`dru+ST$pMdOEh@HB8{5(@t3R^GIbU4#??fFqC0vqbv5@#v!E&72 z3DZB?*K !a>3R6@WS5E|hua*a!v$jp~{n~5WPq@((xHSy1dij9-Rwe_Wn)n!I)cGr=UW+OvX zUB2rn&6m2gJ%C&6wI9vC?|z-#^xa0+;Qn;RSs{&(?Y^S^>Pji=RIb_ug^PtAx^w~y zBSHs3OAD~`Ubx^rt A9{rO*gW;DldigpYZ;*k8<_t2!s(jnR0dJ1 p#f%3q-4qk2SOx$MjP&zDwi$WJo5vbkTVz|WL;irw{hz7!Uf zP_u44=Afunap`f&hRo=la~5HD@E6k?InM<)1W81_kjB@E3_1M$)U;F!(Tx1Y5A?yR zQ|f8ek3*X;r1O*(|D=WgdPB~We`y-jELB-5d#wcLx?*|aodf??5o7+| Yq`jH $)&V{WLK|_3`)=wm*->Jd|V(IGx zB)iBqlStYT6Rp(l(!BIBIp?&4)$LW2-YOZ2A}rteHQB|1Q|nwm-=ZF1zPm?KC5~xw zWo-TJAe|AW=Lj5s|A>TJ6jtq??mp6PuY1Ns2H)t`CwgxuH2637#mV%6F9RV|bbm9& z%u<{hL{m-neNea`QR$Dr4mnG5UtOK~VZdf-=Ga^II)D05_^qSJ&)d>NjVAf!{n?@M zCjRI(ft*BpBx;PO$XH0ZqpG~FdekB^EokE#l& SQ0C&qBuoJKsu| zwwY{ZZerQ@OMRU+P#ME(gJ$uTKKopwx2_+o&A*RQ<~;GaWHi_(UHi@cdSUR@gQ3UB zpFgMMWzLvA^znSZY5FRD+;zkoXSQ;jkYPA9+m-Rly?R*L_6v(odf<=O@r{*!w LzSxD{q8^J?)~_dyAlGvngSrEg&Al-~l`SMng`u)reCJQf zF4w4xHmvo`s%XXuoq8s3xBI>+)$`0<&9uv+17EA23hM@7Ob$o|sy@d{lkj`xw>r1> zp6XW>v `3W7(Txid=3D>9}g2UD-vOGs@y>95TehvlO8M0Zx{H04W1 ze0yKb-HRREPMYjeUbz_(nHfZ+8tT(@A$4lalgb779Ca7dmXkF`=LVy4=*_+NhD8)e zRV-gls(d5YtLqbg+4QI#WUQADXa?`M7?NIVsFhkY$ER-G_L!&Z>e@z+F+NX2uKtuf zQnK%HlZWA1d|KVZt;|IQG=ZKzU1~o*)92D^-~N>9%*-pk@9jI&`Gj;P$HG8fzJvAN z+Wy$xvE}?Wx;bX7s^ayu$G9H6NyAp>sJ^S@^EZ4aGxq1&$8hxgytc=+^#z6IVpAH+HKrMNG+S<@D59`k$z|Fn;a_nrs8R z{GqwZN~DCXxn!;(NsifrSLm0P7T)S}XBRpf?k`lC@^804Ze~G9T;RMx`*zE1Wvf23 zasA^pfk=^x5$9T3UV-DfQQ++FY(~f5!7zMB?`sx=Ebdsh-t25B%%p zA9wZyC69WptL!{wFAlO(6Oy@{Rzlbh8v1=Wd30%>Mc)h#gR2+c&lAcs>RguEf>}q! zKCN^3V0S{}&+$iHu;!Uonhvo!IX5dke~&P{rC-i_;Nu}QiM2}IeXO$Tnk`oyM@&fa zD)PbmzGhfKAMBOv^ e)VZ624MNY^SY)TRJk1*$w4F<{?gkG&J% zyXuxd(g8l;Y(eu+U*Wgb@b2dV4kY(T@ya_7LPc9hv9iAET~+ZTY=u*E#+FVJd#H$$ zqkQ b8%InNV%*(8=U8R2r&j@ds{eKi}(4?K-8h_kSrm*k7$o{iJoUN0sbd z)fKEs=OkdZ++siXb9^siJ>L7abN*?uy9& Qf5y=N=sd z`JpY1%@5kC(6|y54_jf1|JRQv&?!4(BpIp9{)M&{#OkJJ9xAvqO|y%CW;S=elC5O9 z**@{SN o0vbgb&GG^by>ls7U_M~pyo3){r2fMq(JYt$@Hidj%`m;UFy-70r z*Z=%#QQ`IU_3FyS&+Ksyrn`#q&VGOMG>5AmdfLu61?!RABj>^x7?rksy3%A0kL?uy zc8fh#Of<~Ov-Dh;$L_n$KC_LakG5;Px8F^l!}7Cnk|}KNSK#h68Vw(RpZ+3!dH_jn zf-#$qqtaDj `7+p?VdxwrEg-BGAC-E`ulm 7@#g!sqn<)NmUu!h zt(}=g{l@o~Z3sCMs-!P)=Ldp?Q+_svq%1D)`(tk-KQsQUKYqazZ@J#xkZQp0zY!xO z)-WH!+`;z3Vxw(>UUv7XLdLtxL6WBctC-u_>&3(Y9;ol(jLsP$|m z6V%Q&3kGl6@Tj96jkDiA*RQ;vu1n25T -SO=Sd2^SP?M+uk!x)dl_;LEBwBx?v1i zCu^sBUNLs4xjIe`vzYK*8rh0mw&>pa^+rfE{fp9@gL}-U87IWhwykd`;_ClwqUCZ* zv?wU*4#n6I^(#U&GXq)$+PDfDC2U(8hKgP2VBo&!^R=Ef4CysCuKjSACrs;zXv*HA zxI9!`xjL`T?HK&;nNh6S@t548{x5SZ18rTltBUd@P}RR*^x#n-;t@z9qD!`Pu+2Ej z;M&fjqB@VY7mn;KlY%1kTZOJ1J!;(Q3R498g{E>Uih=9T2I^x&ZowJOGg)4;Rwn!C z1Gq7LvC#Q{$vMjKYmQ3B?}vX*`UXk5{H4wMDCkTQ0FnO}uGsvduI~xIv-}nK!Y;+t z%x|1HcIH91gWH$$yMo7H6F`mE$F6sE$xi%!ZlY9kVWd}tyzU2VD<;IY95UzG%NI#E zUCXYby!vd2{thSJKU|v*`CHB#UC2%_@cCb1b#GNB4TtY9H}{c9jI?wdqQtUvMK^D- zyOSlex#vYu>@$SD&455U{^%T&eV*Z$6Mgvfpuz#V_9@FB1Q%|5JEsO{~uM`ooKj zXFfCRJA;arc~JB> m%;{!M`nJUSGAnJvb2QGF~P` zO!XTM6y*!MDIov1!qFm4ayC5Mo&gd{svFy+6K10Oy?PTQi{|4m$Fn;F?=K?w)N#QD z Q zCoa!9Wv4zDyBuL+lil0ajOdah8Qspnoo-ldEev~cutyADD3SK~tEKu~ Q2v@{8(vNo6ASCgn$c9sI0BSZ`FBjeaYmD^mb^7Bw6co7m z@7a9c%PwHbfW0WJ+tc?`-s7L+=Pzc;qAr!wI~>0|*{nZwEr|!plWwmJYLj+7){h>T zZX{>7E$R+TCA;oy?qpqTi+||s$y-XCzPK^6n0tg`9y9^SlkL7MgW_I_qkZN^ VGy%u(dqL zZT(+p<8<7=0t5L2{`aHz|I7LM|NqBoBSt8mDB{7nu)gj%`BEu9v-~eC+&hK;=L-mm znHUgDU%?c+G;tEgH0^zmz(XLvHaxzQYbxZIm!@(n2RUY_i1) cJ1w-uyZB+t2 ZIkihq+ zhks;F{P9uK{r6;d2d+f-%5nep{|@iF$6bSfC@76TC(%eXe^bWM?_%ow&VN4eOZ-sZ zHPo_LD=T4G_w%bh`F6O-UDm(#U;RTA#?p)gsh|2dDxjN0>4r{`uYcE<`P)pIOzSLN z{Ml8;d3^Q=!T|>LUEy*oQ{6RoH`SUsKX?DJlzP#Jn&g3By4YfNKkalUqJJ{Xt;yCf zL0u*3?}#NE3pqymlcrESAz!>8Z$a=iWP-X+X)Ax@n2-lcpveVm*QPQjLnd`YVe{!6 zF3R^~NAJhn8meGYnJABOSFM?ljd3?kN?FJ=j%}w)8AbB}793m0PZO0Dp?VLn*!)aW zX+lv=a-e=*dbeTl5 2CIp7LkvlGA(NQ-Q z1~$nByv&s7ENA>P)brWdNBzjquTPwDNw$Mk9daNoTbpKRfmZ-C29MfnWSPIcAWKnu z_3W1bEogHGmMdTz)KzPoafwEzNl>M<`B~;f&U#jwJamp~7=oLJ;A=)Q{sCan4r~N- zEI2kzReqBy`tgGXJqr9wRc>cYQbCvU0TjJ8E?DUZ*bHBe0cDBU>r}MUqm?Xhq;AOS zwHEtpueZ7(uu|V<;YLIZbwa +o0+fk*Sc^ln9Z65P&1FW>#KU+>kZ z&z9}+9fS4zaqtULEPt_1G)Ibw28kq3zq%_r4ze75$Ppw$JE1}Uk;Ufhf4{P>?ou+w zz0(P&%`=WfYWE{~w5x 55bwu;fnF1;-{S$C3f zmGw7(HKf>zz{iME#W*mgHp#ZO*bKmlm`QcR3t=Cy0+}FEyzD`2Y0(H@u!^Z1YReF} z_@#@sqSV+I4NVq#`C-Fic=yf+2jzoZeb^UEZr@!QInj@3m9>dka=SU#6am}iyo!{b z?u `pfd=$pTDV{u;Q@cd(|!_iRU?97ogL^7_hvGt^+a*O*2t7X1So?QS*00og*O> zIpA7A+6!@#cEly+I)KPWnJ~_q_98)El)0gJD@dCW#3lgOdalhKk)+eB38rslPru%m zPd`KX6^Upo4OGfJPo0v>`)WN#96eex=b&L|Q~FTw^=xk;i>eRB6VweQbJvf@yHGdN zYkty2HX(4*ken#$-aV1iBk-KYLi#sJCR1(1R7K&!#-)NnM*yqu^XVBHUP$c_pV|r7 z7cmo5dw)}wqc}hRH4lL4NP9sVhP2H$jjtqQ)@QJqfObrksV_FWchAVotWEA>SYlF= z3*P)I`1sf)+2&v!T%Y*|2BHdfsK+eCzBx%37CZtc?R!~setLRz+)@nGe?6{Cr> Rx*^3ruw_EQ9+8sxJJGr4faUO$T)x@Cx!(sRTsbR*wR$d(CTi7O>2`Z4I_ z&y|5cMHF4Nr aD`CzTCeev< zs-N2QaUidu4K3*TzSeo3D51hYy}r{*9Da8W`f31`s&dv$_+~CjSlw3RE-Drkz$CyH z 2>tUBbPuwEU&m|?7U#Co10rrF6?i|_)=E?4z zK (@4+?Rd ze1GRM#TWehUbl45WGU}>;*VDHa%-36juAIxkhM>g_A %(I{1WoyxbllR4ka?1-r6uBgG?2eprV0N=_$d#pi)h^O%FM>^vi98-KSWy~6J zE!KDdz4XdVw9KZRHcb-mP=F9W##5iV!zao Gu z3=<_cm_r;^QF#Y6 Mi(BB%!zM}itKUn&9 zhE0t7qMj+)au&z^XO*ug@e6C7MTxJD)~orQlgF0emVrJNp6`Guqkdl|Tr0Xt)8yHS zNM>f{ZD{ZVfmN&PDV|_*oEU7i!n?mZ(TXZvOk1^c*iI5yc9Uf~8A)SuK8%+2^7(^L z{bm-%%&yhl51T8Nz?Vn4KDB?aF 9;o`l@u(rrKrJ74n)Vpz z8G{CUJP#oa9x6bOw7$J+_iHuRPEdXCCTQHndNJ&B>+b#&XR`zzpyNCbLn=;elALh* zc|AFbe(D$KUd_S2Bk{IE7?VmP`u2u=oQQTpu0!#horEb?it%|Ch^4#E%4T*E>wrU; zz@w9J8!Q57!n3*`HhNf)Qc$m!=IAKy6L0!b_07>69Jj|m^d|O6*dY2LczA+3w8=Q1 z7zM$@Q9$rA78A9m tI+E2`Ptu~witNrg(V>7{Q9*SL^hxmHF3@Br8roGX4loVUiL^dLXQ&ZA~t6S z?90!VP^SBga )KX05YA7fsLr-PeT_$Mz6V0gSbhWSZ0-2 zfGe%AJH8Qs_U)7-SVX0t{#P?oc;?w!bKcjoM0H|QY<;}3)woL13l7_`0zp7p-@bh} zNkjG&uXYlzHb|&cIp5M@)&K@lKT_o#Y;&sII{8-MZWN|E<|RKFi|Cp@EBMPz_5!8{ zq-lX{%TE(GA<=sH5ZWOnkp`>+tXJ(?-xlmphIn+Uy?48CO3cZ?!9m->;kbja@aSEs zjMs@w)jNKg*)Q#E`p??nM-H{QH>@DHU&9d#0R1n0a=v=lm1C_(U?;iARqbCLf1JDF z{1baxasdA2qyufgwpD*+`fEG5{xlwKV85^KZ)92O ^iU;>Z=j`;mXqMklg1?)1##sJKl} z!>3yGyK4Yv`@5az*Zc22eyqvOZABtf7??FWCq1IF9+b;zGfph4OQ-7P-NJLY0-1s7 zsA1yakSE1?sM=vCTyaT>4@dP!{;#a%&N$>*0vy-q(aa9Jb8Se3X3}d;MV-~t<&moQ z_&+fBy`T@58qfLazggyN#>A`gF6GP`{!}2pRq#H@ytmnOA5#WIpnji`xd)4~adUNe$|?xBk>+CGSi4LD?PDIV&(buzwz;#~ zL}h)m7BA7XE>{q%E6&3@pq0S{ 5lHQTbq5quOb~kXGOe-kt$Z)x zGmd?hsYxTX#NwS)tPY?zmbf>nS9uh9lb`Za{w6nv*{Q=z7VJ+(xm?h=#>i|VsPp{Hs zMh{z2SNDN@y2-~)=wbM%t*>%okt5ODa(pr3uC~pWo5yadM5Ri!0%PNW=^dt=f`TaV zVh0stW0+=#L+&Gy#{5hm3Hn+G;&! >Wldx+wluBo5x zIRTM{x~*`RJ?oB9LD$OtVef1ILikN BK39Lq9|emXr0yVtePugnru?d%AF^WzY-YSb zRVym%k8E5)0Y1?+DEPc3Ry0`>(63Ayy%qOC c{HB-`jLhS*kNOog*ql5M{& zIhhM@9&6PC(Cmh9IAUCm`