From 9f22442f5400d529f1a0887e39b635d05039f419 Mon Sep 17 00:00:00 2001 From: zhenorzz Date: Fri, 14 May 2021 20:35:22 +0800 Subject: [PATCH] A vue3 + ts refactor --- web+/.env.development | 13 + web+/.env.production | 3 + web+/.eslintrc.json | 15 + web+/.gitignore | 7 + web+/.prettierrc.json | 6 + web+/README.md | 27 + web+/index.html | 13 + web+/package.json | 50 + web+/public/favicon.ico | Bin 0 -> 4286 bytes web+/src/App.vue | 10 + web+/src/api/axios.ts | 76 + web+/src/api/crontab.ts | 95 + web+/src/api/deploy.ts | 161 ++ web+/src/api/monitor.ts | 64 + web+/src/api/namespace.ts | 79 + web+/src/api/project.ts | 231 ++ web+/src/api/server.ts | 77 + web+/src/api/types.ts | 19 + web+/src/api/user.ts | 91 + web+/src/assets/404_images/404.png | Bin 0 -> 98071 bytes web+/src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes web+/src/assets/images/avatar.jpg | Bin 0 -> 6117 bytes web+/src/assets/images/avatar.png | Bin 0 -> 3376 bytes web+/src/assets/images/background.jpg | Bin 0 -> 279883 bytes web+/src/assets/images/logo.png | Bin 0 -> 10409 bytes web+/src/components/Breadcrumb/index.vue | 94 + web+/src/components/Hamburger/index.vue | 48 + web+/src/components/SvgIcon/index.vue | 67 + web+/src/global.ts | 7 + web+/src/icons/svg/commit.svg | 1 + web+/src/icons/svg/converter.svg | 1 + web+/src/icons/svg/crontab.svg | 1 + web+/src/icons/svg/dashboard.svg | 1 + web+/src/icons/svg/deploy.svg | 1 + web+/src/icons/svg/example.svg | 1 + web+/src/icons/svg/eye-open.svg | 1 + web+/src/icons/svg/eye.svg | 1 + web+/src/icons/svg/form.svg | 1 + web+/src/icons/svg/group.svg | 1 + web+/src/icons/svg/json.svg | 1 + web+/src/icons/svg/language.svg | 1 + web+/src/icons/svg/link.svg | 1 + web+/src/icons/svg/list.svg | 1 + web+/src/icons/svg/monitor.svg | 1 + web+/src/icons/svg/namespace.svg | 1 + web+/src/icons/svg/nested.svg | 1 + web+/src/icons/svg/password.svg | 1 + web+/src/icons/svg/permission.svg | 1 + web+/src/icons/svg/phrase.svg | 1 + web+/src/icons/svg/project.svg | 1 + web+/src/icons/svg/server.svg | 1 + web+/src/icons/svg/setting.svg | 1 + web+/src/icons/svg/table.svg | 1 + web+/src/icons/svg/template.svg | 1 + web+/src/icons/svg/toolbox.svg | 1 + web+/src/icons/svg/tree.svg | 1 + web+/src/icons/svg/user.svg | 1 + web+/src/lang/en.json | 212 ++ web+/src/lang/index.ts | 41 + web+/src/lang/zh-cn.json | 209 ++ web+/src/layout/components/AppMain.vue | 51 + web+/src/layout/components/Navbar.vue | 403 ++++ .../RightMenu/composables/useDateTransform.ts | 68 + .../RightMenu/composables/useRGBTransform.ts | 45 + .../RightMenu/composables/useRandomPWD.ts | 39 + .../RightMenu/composables/useUnicode.ts | 14 + .../src/layout/components/RightMenu/index.vue | 443 ++++ .../layout/components/Sidebar/FixiOSBug.js | 27 + web+/src/layout/components/Sidebar/Link.vue | 24 + .../layout/components/Sidebar/SidebarItem.vue | 117 + web+/src/layout/components/Sidebar/index.vue | 50 + .../layout/components/TagsView/ScrollPane.vue | 105 + web+/src/layout/components/TagsView/index.vue | 320 +++ web+/src/layout/components/index.ts | 5 + web+/src/layout/index.vue | 93 + web+/src/layout/mixin/ResizeHandler.ts | 45 + web+/src/main.ts | 27 + web+/src/mixin/tableHeight.js | 16 + web+/src/permission.ts | 69 + web+/src/router/index.ts | 261 +++ web+/src/router/shims-vue-router.d.ts | 9 + web+/src/shims-env.d.ts | 3 + web+/src/shims-vue.d.ts | 14 + web+/src/store/index.ts | 13 + web+/src/store/modules/app/index.ts | 64 + web+/src/store/modules/app/types.ts | 10 + web+/src/store/modules/permission/index.ts | 82 + web+/src/store/modules/permission/types.ts | 4 + web+/src/store/modules/setting/index.ts | 14 + web+/src/store/modules/setting/types.ts | 3 + web+/src/store/modules/tagsView/index.ts | 167 ++ web+/src/store/modules/tagsView/types.ts | 5 + web+/src/store/modules/user/index.ts | 96 + web+/src/store/modules/user/types.ts | 6 + web+/src/store/modules/websocket/index.ts | 136 ++ web+/src/store/modules/websocket/types.ts | 5 + web+/src/store/shims-vuex.d.ts | 8 + web+/src/store/types.ts | 15 + web+/src/styles/element-ui.scss | 48 + web+/src/styles/index.scss | 74 + web+/src/styles/mixin.scss | 28 + web+/src/styles/sidebar.scss | 208 ++ web+/src/styles/transition.scss | 29 + web+/src/styles/variables.scss | 23 + web+/src/utils/auth.ts | 13 + web+/src/utils/index.ts | 260 +++ web+/src/utils/md5.ts | 171 ++ web+/src/utils/namespace.ts | 33 + web+/src/utils/validate.ts | 34 + web+/src/views/404.vue | 253 +++ web+/src/views/deploy/index.vue | 1886 +++++++++++++++++ web+/src/views/login/index.vue | 292 +++ web+/src/views/member/index.vue | 303 +++ web+/src/views/monitor/index.vue | 469 ++++ web+/src/views/namespace/index.vue | 404 ++++ web+/src/views/project/index.vue | 1608 ++++++++++++++ web+/src/views/redirect/index.vue | 13 + web+/src/views/server/crontab.vue | 712 +++++++ web+/src/views/server/index.vue | 466 ++++ web+/src/views/toolbox/json/icons.svg | 1 + web+/src/views/toolbox/json/index.vue | 135 ++ web+/src/views/toolbox/json/jsonTree.css | 113 + web+/src/views/toolbox/json/jsonTree.js | 796 +++++++ web+/src/views/user/profile.vue | 153 ++ web+/tsconfig.json | 21 + web+/vite.config.ts | 40 + 126 files changed, 13205 insertions(+) create mode 100644 web+/.env.development create mode 100644 web+/.env.production create mode 100644 web+/.eslintrc.json create mode 100644 web+/.gitignore create mode 100644 web+/.prettierrc.json create mode 100644 web+/README.md create mode 100644 web+/index.html create mode 100644 web+/package.json create mode 100644 web+/public/favicon.ico create mode 100644 web+/src/App.vue create mode 100644 web+/src/api/axios.ts create mode 100644 web+/src/api/crontab.ts create mode 100644 web+/src/api/deploy.ts create mode 100644 web+/src/api/monitor.ts create mode 100644 web+/src/api/namespace.ts create mode 100644 web+/src/api/project.ts create mode 100644 web+/src/api/server.ts create mode 100644 web+/src/api/types.ts create mode 100644 web+/src/api/user.ts create mode 100644 web+/src/assets/404_images/404.png create mode 100644 web+/src/assets/404_images/404_cloud.png create mode 100644 web+/src/assets/images/avatar.jpg create mode 100644 web+/src/assets/images/avatar.png create mode 100644 web+/src/assets/images/background.jpg create mode 100644 web+/src/assets/images/logo.png create mode 100644 web+/src/components/Breadcrumb/index.vue create mode 100644 web+/src/components/Hamburger/index.vue create mode 100644 web+/src/components/SvgIcon/index.vue create mode 100644 web+/src/global.ts create mode 100644 web+/src/icons/svg/commit.svg create mode 100644 web+/src/icons/svg/converter.svg create mode 100644 web+/src/icons/svg/crontab.svg create mode 100644 web+/src/icons/svg/dashboard.svg create mode 100644 web+/src/icons/svg/deploy.svg create mode 100644 web+/src/icons/svg/example.svg create mode 100644 web+/src/icons/svg/eye-open.svg create mode 100644 web+/src/icons/svg/eye.svg create mode 100644 web+/src/icons/svg/form.svg create mode 100644 web+/src/icons/svg/group.svg create mode 100644 web+/src/icons/svg/json.svg create mode 100644 web+/src/icons/svg/language.svg create mode 100644 web+/src/icons/svg/link.svg create mode 100644 web+/src/icons/svg/list.svg create mode 100644 web+/src/icons/svg/monitor.svg create mode 100644 web+/src/icons/svg/namespace.svg create mode 100644 web+/src/icons/svg/nested.svg create mode 100644 web+/src/icons/svg/password.svg create mode 100644 web+/src/icons/svg/permission.svg create mode 100644 web+/src/icons/svg/phrase.svg create mode 100644 web+/src/icons/svg/project.svg create mode 100644 web+/src/icons/svg/server.svg create mode 100644 web+/src/icons/svg/setting.svg create mode 100644 web+/src/icons/svg/table.svg create mode 100644 web+/src/icons/svg/template.svg create mode 100644 web+/src/icons/svg/toolbox.svg create mode 100644 web+/src/icons/svg/tree.svg create mode 100644 web+/src/icons/svg/user.svg create mode 100644 web+/src/lang/en.json create mode 100644 web+/src/lang/index.ts create mode 100644 web+/src/lang/zh-cn.json create mode 100644 web+/src/layout/components/AppMain.vue create mode 100644 web+/src/layout/components/Navbar.vue create mode 100644 web+/src/layout/components/RightMenu/composables/useDateTransform.ts create mode 100644 web+/src/layout/components/RightMenu/composables/useRGBTransform.ts create mode 100644 web+/src/layout/components/RightMenu/composables/useRandomPWD.ts create mode 100644 web+/src/layout/components/RightMenu/composables/useUnicode.ts create mode 100644 web+/src/layout/components/RightMenu/index.vue create mode 100644 web+/src/layout/components/Sidebar/FixiOSBug.js create mode 100644 web+/src/layout/components/Sidebar/Link.vue create mode 100644 web+/src/layout/components/Sidebar/SidebarItem.vue create mode 100644 web+/src/layout/components/Sidebar/index.vue create mode 100644 web+/src/layout/components/TagsView/ScrollPane.vue create mode 100644 web+/src/layout/components/TagsView/index.vue create mode 100644 web+/src/layout/components/index.ts create mode 100644 web+/src/layout/index.vue create mode 100644 web+/src/layout/mixin/ResizeHandler.ts create mode 100644 web+/src/main.ts create mode 100644 web+/src/mixin/tableHeight.js create mode 100644 web+/src/permission.ts create mode 100644 web+/src/router/index.ts create mode 100644 web+/src/router/shims-vue-router.d.ts create mode 100644 web+/src/shims-env.d.ts create mode 100644 web+/src/shims-vue.d.ts create mode 100644 web+/src/store/index.ts create mode 100644 web+/src/store/modules/app/index.ts create mode 100644 web+/src/store/modules/app/types.ts create mode 100644 web+/src/store/modules/permission/index.ts create mode 100644 web+/src/store/modules/permission/types.ts create mode 100644 web+/src/store/modules/setting/index.ts create mode 100644 web+/src/store/modules/setting/types.ts create mode 100644 web+/src/store/modules/tagsView/index.ts create mode 100644 web+/src/store/modules/tagsView/types.ts create mode 100644 web+/src/store/modules/user/index.ts create mode 100644 web+/src/store/modules/user/types.ts create mode 100644 web+/src/store/modules/websocket/index.ts create mode 100644 web+/src/store/modules/websocket/types.ts create mode 100644 web+/src/store/shims-vuex.d.ts create mode 100644 web+/src/store/types.ts create mode 100644 web+/src/styles/element-ui.scss create mode 100644 web+/src/styles/index.scss create mode 100644 web+/src/styles/mixin.scss create mode 100644 web+/src/styles/sidebar.scss create mode 100644 web+/src/styles/transition.scss create mode 100644 web+/src/styles/variables.scss create mode 100644 web+/src/utils/auth.ts create mode 100644 web+/src/utils/index.ts create mode 100644 web+/src/utils/md5.ts create mode 100644 web+/src/utils/namespace.ts create mode 100644 web+/src/utils/validate.ts create mode 100644 web+/src/views/404.vue create mode 100644 web+/src/views/deploy/index.vue create mode 100644 web+/src/views/login/index.vue create mode 100644 web+/src/views/member/index.vue create mode 100644 web+/src/views/monitor/index.vue create mode 100644 web+/src/views/namespace/index.vue create mode 100644 web+/src/views/project/index.vue create mode 100644 web+/src/views/redirect/index.vue create mode 100644 web+/src/views/server/crontab.vue create mode 100644 web+/src/views/server/index.vue create mode 100644 web+/src/views/toolbox/json/icons.svg create mode 100644 web+/src/views/toolbox/json/index.vue create mode 100644 web+/src/views/toolbox/json/jsonTree.css create mode 100644 web+/src/views/toolbox/json/jsonTree.js create mode 100644 web+/src/views/user/profile.vue create mode 100644 web+/tsconfig.json create mode 100644 web+/vite.config.ts diff --git a/web+/.env.development b/web+/.env.development new file mode 100644 index 0000000..2517808 --- /dev/null +++ b/web+/.env.development @@ -0,0 +1,13 @@ +# base api +VITE_APP_BASE_API = '/api' + +# devServer.proxy.target +VITE_APP_PROXY_TARGET = 'http://localhost:8098' +# vue-cli uses the VITE_CLI_BABEL_TRANSPILE_MODULES environment variable, +# to control whether the babel-plugin-dynamic-import-node plugin is enabled. +# It only does one thing by converting all import() to require(). +# This configuration can significantly increase the speed of hot updates, +# when you have a large number of pages. +# Detail: https://github.com/vuejs/vue-cli/blob/dev/packages/@vue/babel-preset-app/index.js + +VITE_CLI_BABEL_TRANSPILE_MODULES = true diff --git a/web+/.env.production b/web+/.env.production new file mode 100644 index 0000000..b9ee10b --- /dev/null +++ b/web+/.env.production @@ -0,0 +1,3 @@ +# base api +VITE_APP_BASE_API = '' + diff --git a/web+/.eslintrc.json b/web+/.eslintrc.json new file mode 100644 index 0000000..c9d3c18 --- /dev/null +++ b/web+/.eslintrc.json @@ -0,0 +1,15 @@ +{ + "parser": "vue-eslint-parser", + "parserOptions": { + "parser": "@typescript-eslint/parser", + "ecmaVersion": 2020, + "sourceType": "module" + }, + "extends": [ + "plugin:vue/vue3-recommended", + "eslint:recommended", + "plugin:@typescript-eslint/recommended", + "plugin:prettier/recommended" + ], + "rules": {} +} diff --git a/web+/.gitignore b/web+/.gitignore new file mode 100644 index 0000000..b6d3661 --- /dev/null +++ b/web+/.gitignore @@ -0,0 +1,7 @@ +node_modules +.DS_Store +dist +dist-ssr +*.local +.idea +.vscode \ No newline at end of file diff --git a/web+/.prettierrc.json b/web+/.prettierrc.json new file mode 100644 index 0000000..6914ef3 --- /dev/null +++ b/web+/.prettierrc.json @@ -0,0 +1,6 @@ +{ + "semi": false, + "singleQuote": true, + "endOfLine": "auto", + "@typescript-eslint/no-explicit-any": ["off"] +} diff --git a/web+/README.md b/web+/README.md new file mode 100644 index 0000000..a797a27 --- /dev/null +++ b/web+/README.md @@ -0,0 +1,27 @@ +# Vue 3 + Typescript + Vite + +This template should help get you started developing with Vue 3 and Typescript in Vite. + +## Recommended IDE Setup + +[VSCode](https://code.visualstudio.com/) + [Vetur](https://marketplace.visualstudio.com/items?itemName=octref.vetur). Make sure to enable `vetur.experimental.templateInterpolationService` in settings! + +### If Using ` + + diff --git a/web+/package.json b/web+/package.json new file mode 100644 index 0000000..1ad9176 --- /dev/null +++ b/web+/package.json @@ -0,0 +1,50 @@ +{ + "name": "my-vue-app", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "serve": "vite preview" + }, + "dependencies": { + "@chenfengyuan/vue-qrcode": "^2.0.0-beta", + "axios": "^0.21.1", + "cronstrue": "^1.113.0", + "element-plus": "^1.0.2-beta.41", + "js-cookie": "^2.2.1", + "normalize.css": "^8.0.1", + "nprogress": "^0.2.0", + "path-browserify": "^1.0.1", + "path-to-regexp": "^6.2.0", + "qrcode": "^1.4.4", + "vue": "^3.0.5", + "vue-i18n": "^9.1.6", + "vue-router": "^4.0.6", + "vue3-ace-editor": "^2.0.2", + "vuex": "^4.0.0", + "xterm": "^4.12.0", + "xterm-addon-attach": "^0.6.0", + "xterm-addon-fit": "^0.5.0" + }, + "devDependencies": { + "@intlify/vite-plugin-vue-i18n": "^2.1.2", + "@types/codemirror": "^5.60.0", + "@types/js-cookie": "^2.2.6", + "@types/node": "^15.0.2", + "@types/nprogress": "^0.2.0", + "@typescript-eslint/eslint-plugin": "^4.22.1", + "@typescript-eslint/parser": "^4.22.1", + "@vitejs/plugin-vue": "^1.2.2", + "@vue/compiler-sfc": "^3.0.5", + "eslint": "^7.25.0", + "eslint-config-prettier": "^8.3.0", + "eslint-plugin-prettier": "^3.4.0", + "eslint-plugin-vue": "^7.9.0", + "prettier": "^2.2.1", + "sass": "^1.32.12", + "typescript": "^4.2.4", + "vite": "^2.2.3", + "vite-plugin-svg-icons": "^0.5.0", + "vue-tsc": "^0.0.24" + } +} diff --git a/web+/public/favicon.ico b/web+/public/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..4f45b344032c8fdc3645d8d631cf28eae953ef81 GIT binary patch literal 4286 zcmdUyZ%AEr7{^a0H`xn4zk`U$BDtg8Q4($pam%(5V~mJiERhI_F{Je(N@$EUs0=EG z#4sbZl*`pm_bZRtgE z(>MmU?UAV(?T_@LTx{=F2i!-&ykeVbHEyYH+cLVCuQDHi_S~)iO!nZEgJZ_QW!w+1 zVIKMUoTd@SF55INGhZWyPoT<7e)5%*Zv@{j;rkyjZRlyn8vLoaW!S6@f>(R%EiaD4 z$VZ?>WUoPyeDMN(Y&G&c0@f%Pi{yBkaS8G$ybo-bb)QUQjd>4x<#9_dhPR+|lQ^CT z{N=;(yA#_!_!|5IzN!Ly#xqIW06)R0)h~e_@f80~4)S3`OsYIs%fyMh6umR#x&j}< zM;*le8jZ{w#E!MOjQEx@5%1PD{2V2g`Tz&~W5|}VeGfmSfjpg~(?h-vyczo<^y|PH zO5l09Wy80-^&&84!Q6mn?Sg z*u)RchFT_$4#Dt!8y5q-bRNRj(Up6)dB!Y%Z^?fcT)F$p6J7Uj+~}$b>8KgjD*gP! zw(4ds`1tGq_Y|}RzU+(IPmVfuS^4&rXWVypUvb~r{hizYa-)k3Qq(|A!Ix8G&kaAQ zM>;J-0-pMCQrE|oMGcd#!oUXhRb_$B!NF0 z#te@;YJL)Yd9Pa7k0xv*3EL*IWsS3){rripeE2ww{dF$~Q+el~{IlW9do1_Qg%3gD zcOWNxxkF%o%~=bbZR5JcbSM1RAG$VA4Y&FD!Tp1q>b%(Inm_n*|L6U^^ZhU%Pv8%P zYo0QWjt$;+|GgY?+ke>`FUBqLjYZZQ-+%0@2sJp-wqx@gwnaysw&+;PhX+3+ZsS?< zT?xmI&z$c6o$!D3LuY$*v=eOJ3!|2^GMLm$*}DSb`+f(#{gk)P@_P-* zacgYZzr69Kzi6VClj%N@^LwQBBG<`xmRiqn-*^)hy@%o7l~C@;M$q&60PM1yf7ONl zJpNiC*~=2{z-frH$lGqI=fRQwqM7k#A7C2t<~AXV5SQ00q3=L1`1)Soa*B01(`Ti2 zTYapTU?cCp;EgjsDte5|$k4ZF+auv7fX$9zkCbY-6}i4L}+w;#J9e9;>lXPFzamd{7rd$1e8kMu*G z_|okjL;8zmj%X@ScjNPooWk(m&p&M-y6&&9 zx^Ddg?s{vPySPv`;^-yLv|bVu`nyt#tqZkAV$Q;Sj-zYIwdw8kvFXV1*z~ + + + + diff --git a/web+/src/api/axios.ts b/web+/src/api/axios.ts new file mode 100644 index 0000000..f8ef79f --- /dev/null +++ b/web+/src/api/axios.ts @@ -0,0 +1,76 @@ +import axios, { AxiosResponse, AxiosRequestConfig, AxiosError } from 'axios' +import { ElMessageBox, ElMessage } from 'element-plus' +import store from '@/store' + +// create an axios instance +const service = axios.create({ + baseURL: import.meta.env.VITE_APP_BASE_API, // url = base url + request url + withCredentials: true, // send cookies when cross-domain requests + timeout: 5000, // request timeout +}) + +// request interceptor +service.interceptors.request.use( + (config: AxiosRequestConfig) => { + // do something before request is sent + return config + }, + (error: AxiosError) => { + // do something with request error + console.log(error) // for debug + return Promise.reject(error) + } +) + +// response interceptor +service.interceptors.response.use( + /** + * If you want to get http information such as headers or status + * Please return response => response + */ + + /** + * Determine the request status by custom code + * Here is just an example + * You can also judge the status by HTTP Status Code + */ + (response: AxiosResponse) => { + const res = response.data + if (res.code !== 0) { + ElMessage({ + message: res.message, + type: 'error', + duration: 5 * 1000, + }) + + // 10000:账户停用; 10001:非法Token; 10086:Token 过期了; + if ([10000, 10001, 10086].includes(res.code)) { + ElMessageBox.confirm(res.message, '确定登出', { + confirmButtonText: '重新登录', + cancelButtonText: '取消', + type: 'warning', + }).then(() => { + store.dispatch('user/logout').then(() => { + location.reload() + }) + }) + return Promise.reject('error') + } else { + return Promise.reject('error') + } + } else { + return res + } + }, + (error: AxiosError) => { + console.log('err' + error) // for debug + ElMessage({ + message: error.message, + type: 'error', + duration: 5 * 1000, + }) + return Promise.reject(error) + } +) + +export default service diff --git a/web+/src/api/crontab.ts b/web+/src/api/crontab.ts new file mode 100644 index 0000000..65f3c29 --- /dev/null +++ b/web+/src/api/crontab.ts @@ -0,0 +1,95 @@ +import Axios from './axios' + +/** + * @return {Promise} + */ +export function getList({ page, rows }, command) { + return Axios.request({ + url: '/crontab/getList', + method: 'get', + params: { page, rows, command }, + }) +} + +/** + * @return {Promise} + */ +export function getTotal(command) { + return Axios.request({ + url: '/crontab/getTotal', + method: 'get', + params: { command }, + }) +} + +/** + * @return {Promise} + */ +export function getRemoteServerList(serverId) { + return Axios.request({ + url: '/crontab/getRemoteServerList', + method: 'get', + params: { serverId }, + timeout: 0, + }) +} + +/** + * @param {id} id + * @return {Promise} + */ +export function getBindServerList(id) { + return Axios.request({ + url: '/crontab/getBindServerList', + method: 'get', + params: { id }, + }) +} + +export function add(data) { + return Axios.request({ + url: '/crontab/add', + method: 'post', + data, + }) +} + +export function edit(data) { + return Axios.request({ + url: '/crontab/edit', + method: 'put', + data, + }) +} + +export function importCrontab(data) { + return Axios.request({ + url: '/crontab/import', + method: 'post', + data, + }) +} + +export function remove(data) { + return Axios.request({ + url: '/crontab/remove', + method: 'delete', + data, + }) +} + +export function addServer(data) { + return Axios.request({ + url: '/crontab/addServer', + method: 'post', + data, + }) +} + +export function removeCrontabServer(data) { + return Axios.request({ + url: '/crontab/removeCrontabServer', + method: 'delete', + data, + }) +} diff --git a/web+/src/api/deploy.ts b/web+/src/api/deploy.ts new file mode 100644 index 0000000..d71dba1 --- /dev/null +++ b/web+/src/api/deploy.ts @@ -0,0 +1,161 @@ +import Axios from './axios' +/** + * @param {string} projectName + * @return {Promise} + */ +export function getList(projectName) { + return Axios.request({ + url: '/deploy/getList', + method: 'get', + params: { projectName }, + }) +} + +/** + * @param {string} lastPublishToken + * @return {Promise} + */ +export function getPublishTrace(lastPublishToken) { + return Axios.request({ + url: '/deploy/getPublishTrace', + method: 'get', + params: { + lastPublishToken, + }, + }) +} + +/** + * @param {Number} publish_trace_id + * @return {Promise} + */ +export function getPublishTraceDetail(publish_trace_id) { + return Axios.request({ + url: '/deploy/getPublishTraceDetail', + method: 'get', + params: { + publish_trace_id, + }, + timeout: 0, + }) +} + +/** + * @param {object} pagination + * @param {object} params + * @return {Promise} + */ +export function getPreview({ page, rows }, params) { + return Axios.request({ + url: '/deploy/getPreview', + method: 'get', + params: { + page, + rows, + ...params, + }, + }) +} + +/** + * @param {int} id + * @return {Promise} + */ +export function getCommitList(id, branch) { + return Axios.request({ + url: '/deploy/getCommitList', + method: 'get', + params: { id, branch }, + timeout: 0, + }) +} + +/** + * @param {int} id + * @return {Promise} + */ +export function getBranchList(id) { + return Axios.request({ + url: '/deploy/getBranchList', + method: 'get', + params: { id }, + timeout: 0, + }) +} + +/** + * @param {int} id + * @return {Promise} + */ +export function getTagList(id) { + return Axios.request({ + url: '/deploy/getTagList', + method: 'get', + params: { id }, + timeout: 0, + }) +} + +/** + * @param {int} projectId + * @return {Promise} + */ +export function resetState(projectId) { + return Axios.request({ + url: '/deploy/resetState', + method: 'put', + data: { projectId }, + }) +} + +/** + * @param {int} projectId + * @param {string} commit + * @return {Promise} + */ +export function publish(projectId, branch, commit) { + return Axios.request({ + url: '/deploy/publish', + method: 'post', + data: { projectId, branch, commit }, + }) +} + +/** + * @param {string} token + * @return {Promise} + */ +export function rebuild(projectId, token) { + return Axios.request({ + url: '/deploy/rebuild', + method: 'post', + data: { projectId, token }, + }) +} + +/** + * @param {int} projectId + * @param {string} commit + * @param {Array} serverIds + * @return {Promise} + */ +export function greyPublish(projectId, commit, serverIds) { + return Axios.request({ + url: '/deploy/greyPublish', + method: 'post', + data: { projectId, commit, serverIds }, + }) +} + +/** + * @param {int} projectReviewId + * @param {int} state + * @return {Promise} + */ +export function review(projectReviewId, state) { + return Axios.request({ + url: '/deploy/review', + method: 'put', + data: { projectReviewId, state }, + }) +} diff --git a/web+/src/api/monitor.ts b/web+/src/api/monitor.ts new file mode 100644 index 0000000..a12ae90 --- /dev/null +++ b/web+/src/api/monitor.ts @@ -0,0 +1,64 @@ +import Axios from './axios' + +/** + * @return {Promise} + */ +export function getList({ page, rows }) { + return Axios.request({ + url: '/monitor/getList', + method: 'get', + params: { page, rows }, + }) +} + +/** + * @return {Promise} + */ +export function getTotal() { + return Axios.request({ + url: '/monitor/getTotal', + method: 'get', + params: {}, + }) +} + +export function add(data) { + return Axios.request({ + url: '/monitor/add', + method: 'post', + data, + }) +} + +export function edit(data) { + return Axios.request({ + url: '/monitor/edit', + method: 'put', + data, + }) +} + +export function check(data) { + return Axios.request({ + timeout: 100000, + url: '/monitor/check', + method: 'post', + data, + }) +} + +export function toggle(id) { + return Axios.request({ + url: '/monitor/toggle', + method: 'put', + data: { id }, + }) +} + +export function remove(id) { + return Axios.request({ + url: '/monitor/remove', + method: 'delete', + data: { id }, + }) +} diff --git a/web+/src/api/namespace.ts b/web+/src/api/namespace.ts new file mode 100644 index 0000000..27f8ef9 --- /dev/null +++ b/web+/src/api/namespace.ts @@ -0,0 +1,79 @@ +import Axios from './axios' + +/** + * @return {Promise} + */ +export function getList({ page, rows }) { + return Axios.request({ + url: '/namespace/getList', + method: 'get', + params: { page, rows }, + }) +} + +/** + * @return {Promise} + */ +export function getTotal() { + return Axios.request({ + url: '/namespace/getTotal', + method: 'get', + params: {}, + }) +} + +/** + * @return {Promise} + */ +export function getUserOption() { + return Axios.request({ + url: '/namespace/getUserOption', + method: 'get', + }) +} + +/** + * @param {id} id + * @return {Promise} + */ +export function getBindUserList(id) { + return Axios.request({ + url: '/namespace/getBindUserList', + method: 'get', + params: { id }, + }) +} + +export function add(data) { + return Axios.request({ + url: '/namespace/add', + method: 'post', + data, + }) +} + +export function edit(data) { + return Axios.request({ + url: '/namespace/edit', + method: 'put', + data, + }) +} + +export function addUser(data) { + return Axios.request({ + url: '/namespace/addUser', + method: 'post', + data, + }) +} + +export function removeUser(namespaceUserId) { + return Axios.request({ + url: '/namespace/removeUser', + method: 'delete', + data: { + namespaceUserId, + }, + }) +} diff --git a/web+/src/api/project.ts b/web+/src/api/project.ts new file mode 100644 index 0000000..1505f83 --- /dev/null +++ b/web+/src/api/project.ts @@ -0,0 +1,231 @@ +import Axios from './axios' + +/** + * @return {Promise} + */ +export function getList({ page, rows }, projectName) { + return Axios.request({ + url: '/project/getList', + method: 'get', + params: { page, rows, projectName }, + }) +} + +/** + * @return {Promise} + */ +export function getTotal(projectName) { + return Axios.request({ + url: '/project/getTotal', + method: 'get', + params: { projectName }, + }) +} + +/** + * @return {Promise} + */ +export function getRemoteBranchList(url) { + return Axios.request({ + url: '/project/getRemoteBranchList', + method: 'get', + timeout: 0, + params: { url }, + }) +} + +/** + * @param {id} id + * @return {Promise} + */ +export function getBindServerList(id) { + return Axios.request({ + url: '/project/getBindServerList', + method: 'get', + params: { id }, + }) +} + +/** + * @param {id} id + * @return {Promise} + */ +export function getBindUserList(id) { + return Axios.request({ + url: '/project/getBindUserList', + method: 'get', + params: { id }, + }) +} + +/** + * @param {id} id + * @return {Promise} + */ +export function getProjectFileList(id) { + return Axios.request({ + url: '/project/getProjectFileList', + method: 'get', + params: { id }, + }) +} + +/** + * @param {id} id + * @return {Promise} + */ +export function getProjectFileContent(id) { + return Axios.request({ + url: '/project/getProjectFileContent', + method: 'get', + params: { id }, + }) +} + +/** + * @param {string} project + * @param {string} owner + * @param {string} repository + * @param {string} serverIds + * @param {string} userIds + * @return {Promise} + */ +export function add(data) { + return Axios.request({ + url: '/project/add', + method: 'post', + data, + }) +} + +/** + * @param {string} project + * @param {string} owner + * @param {string} repository + * @return {Promise} + */ +export function edit(data) { + return Axios.request({ + url: '/project/edit', + method: 'put', + data, + }) +} + +export function setAutoDeploy(data) { + return Axios.request({ + url: '/project/setAutoDeploy', + method: 'put', + data, + }) +} + +export function remove(id) { + return Axios.request({ + url: '/project/remove', + method: 'delete', + data: { id }, + }) +} + +export function addUser(data) { + return Axios.request({ + url: '/project/addUser', + method: 'post', + data, + }) +} + +export function removeUser(projectUserId) { + return Axios.request({ + url: '/project/removeUser', + method: 'delete', + data: { + projectUserId, + }, + }) +} + +export function addServer(data) { + return Axios.request({ + url: '/project/addServer', + method: 'post', + data, + }) +} + +export function removeServer(projectServerId) { + return Axios.request({ + url: '/project/removeServer', + method: 'delete', + data: { + projectServerId, + }, + }) +} + +export function addFile(data) { + return Axios.request({ + url: '/project/addFile', + method: 'post', + data, + }) +} + +export function editFile(data) { + return Axios.request({ + url: '/project/editFile', + method: 'put', + data, + }) +} + +export function removeFile(projectFileId) { + return Axios.request({ + url: '/project/removeFile', + method: 'delete', + data: { + projectFileId, + }, + }) +} + +export function addTask(data) { + return Axios.request({ + url: '/project/addTask', + method: 'post', + data, + }) +} + +export function removeTask(id) { + return Axios.request({ + url: '/project/removeTask', + method: 'delete', + data: { id }, + }) +} + +/** + * @param {id} id + * @return {Promise} + */ +export function getTaskList({ page, rows }, id) { + return Axios.request({ + url: '/project/getTaskList', + method: 'get', + params: { page, rows, id }, + }) +} + +/** + * @param {id} id + * @return {Promise} + */ +export function getReviewList({ page, rows }, id) { + return Axios.request({ + url: '/project/getReviewList', + method: 'get', + params: { page, rows, id }, + }) +} diff --git a/web+/src/api/server.ts b/web+/src/api/server.ts new file mode 100644 index 0000000..146a0b6 --- /dev/null +++ b/web+/src/api/server.ts @@ -0,0 +1,77 @@ +import Axios from './axios' + +/** + * @return {Promise} + */ +export function getList({ page, rows }) { + return Axios.request({ + url: '/server/getList', + method: 'get', + params: { page, rows }, + }) +} + +/** + * @return {Promise} + */ +export function getTotal() { + return Axios.request({ + url: '/server/getTotal', + method: 'get', + params: {}, + }) +} + +/** + * @return {Promise} + */ +export function getPublicKey(path) { + return Axios.request({ + url: '/server/getPublicKey', + method: 'get', + params: { path }, + }) +} + +/** + * @return {Promise} + */ +export function getOption() { + return Axios.request({ + url: '/server/getOption', + method: 'get', + }) +} + +export function add(data) { + return Axios.request({ + url: '/server/add', + method: 'post', + data, + }) +} + +export function edit(data) { + return Axios.request({ + url: '/server/edit', + method: 'put', + data, + }) +} + +export function check(data) { + return Axios.request({ + timeout: 100000, + url: '/server/check', + method: 'post', + data, + }) +} + +export function remove(id) { + return Axios.request({ + url: '/server/remove', + method: 'delete', + data: { id }, + }) +} diff --git a/web+/src/api/types.ts b/web+/src/api/types.ts new file mode 100644 index 0000000..2b45a38 --- /dev/null +++ b/web+/src/api/types.ts @@ -0,0 +1,19 @@ +// 接口响应通过格式 +export type HttpResponse = { + code: number + message: string + data: T +} + +export type Pagination = { + page: number + rows: number +} + +export type Total = { + total: number +} + +export type ID = { + id: number +} diff --git a/web+/src/api/user.ts b/web+/src/api/user.ts new file mode 100644 index 0000000..9e3f148 --- /dev/null +++ b/web+/src/api/user.ts @@ -0,0 +1,91 @@ +import Axios from './axios' +import { HttpResponse, Pagination, Total, ID } from './types' + +type LoginParams = { + account: string + password: string +} + +type LoginResp = { + namespaceList: Array<{ id: number; name: string }> +} + +export function login(data: LoginParams): Promise> { + return Axios.request({ + url: '/user/login', + method: 'post', + data, + }) +} + +export function getInfo(): Promise { + return Axios.request({ + url: '/user/info', + method: 'get', + }) +} + +type listFilterParams = Record +export function getList({ + page, + rows, +}: Pagination | listFilterParams): Promise { + return Axios.request({ + url: '/user/getList', + method: 'get', + params: { page, rows }, + }) +} + +export function getTotal(): Promise> { + return Axios.request({ + url: '/user/getTotal', + method: 'get', + params: {}, + }) +} + +export function getOption(): Promise { + return Axios.request({ + url: '/user/getOption', + method: 'get', + }) +} + +export function add(data): Promise> { + return Axios.request({ + url: '/user/add', + method: 'post', + data, + }) +} + +export function edit(data): Promise> { + return Axios.request({ + url: '/user/edit', + method: 'put', + data, + }) +} + +export function remove(id: number): Promise> { + return Axios.request({ + url: '/user/remove', + method: 'delete', + data: { id }, + }) +} + +export function changePassword( + oldPwd: string, + newPwd: string +): Promise> { + return Axios.request({ + url: '/user/changePassword', + method: 'put', + data: { + oldPwd, + newPwd, + }, + }) +} diff --git a/web+/src/assets/404_images/404.png b/web+/src/assets/404_images/404.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e2305cc973ad2121403aee4bf08728f76c461 GIT binary patch literal 98071 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 literal 0 HcmV?d00001 diff --git a/web+/src/assets/404_images/404_cloud.png b/web+/src/assets/404_images/404_cloud.png new file mode 100644 index 0000000000000000000000000000000000000000..c6281d09013e0a2c5f8e699a0a6038d9480291e5 GIT binary patch literal 4766 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 literal 0 HcmV?d00001 diff --git a/web+/src/assets/images/avatar.jpg b/web+/src/assets/images/avatar.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac74b1ea09f14d809558cca06ed2a0737e6bb2d8 GIT binary patch literal 6117 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 PF!_JYWn}E9>-ql$&^CH5 literal 0 HcmV?d00001 diff --git a/web+/src/assets/images/avatar.png b/web+/src/assets/images/avatar.png new file mode 100644 index 0000000000000000000000000000000000000000..26aa814d69fb37ba29aea4784b29378d83ae54c2 GIT binary patch literal 3376 zcmV-04bSq4P)Px>>PbXFRCodHo%xSdMHa`aSw#e8kxj@n&C(49kWE9YtO5xMDgz>hXiy-Ti2)MF z`71;xfy9}ph|3Sg1k~vgtXqB_)Gz-n?0^ZrG^%F1l~yi}bM8izBxSdr;e zHE-U0Uawxg4rOg8Gk`z-_~V~7U6&|6l(jRrvc9JDImOw1`}X}JOS?_dRu*6_q{l6~ zapT7FyA3?XOrPmHV_+<4aY)61S}59IxNreEQkk~lJFMQu)~#Dl)&g@TX}=N!sD+}t z-rRrn*7_%H>`pGP>Aa^&lO_|jz#K`^&qPyLi$%G>+t}E^12D$K*cf9H0Aq7tj`IMo zN0J8awzA^H!{WrsxSSY^1Ce>TY1^p5<7LAjjFmCRdHIn5ieL*C3|Kr4!NyRAvF64c zxjIJzC_QhXKxr(iZIbs}nHzg(olqHwk}P&!9!kMc=BZPs%+EjnY>pp4Zcd&&X=G0u zSvO26)2dY~8#{ICWV&?eVtV%MX&!p$*68h$hf~9p?ScSeo?X3qb(;oIw4R2d1fB)TbDc}dyr7R#m{`lj8bh9SvMLiqj#c2Q_ z{yeQfd(>cQ)<*sHj~qE-mM>p!jvhVgPqqL(`skxZZ`jC#94Xu6E;H(*k(b+S*|Nm| zs6UjIm6@qir`ng`Pj_&CQ089$`u@ZQ0Lr+2LvrtJ2My*)NF10?KmF8PyLK&~CU=r~ z>Zzy9h!G>qgAYEKPfv2g0t4-}YuDNZ$g8V;5i@7b9HYT{Nlvbkhi_;D>mPn%bpX`V zZK*e0qXN!6$y&+HM<0D;;2bY>@7~?am@&gV{P4qGQsyh7Vdct|`F5DnfJj>o!%e`VuAP}bf4%|SG(ppNw3uN%b@NkL;JuQD7TMR*pQcjxg~SRd(2-w0P6#gFA#F$uj9Y>suXI|%SS8Nv15n#nCPl? zqAi$F$pWZ^v56@73LiXp(DxL4E1?^h;R--MH+l^r-=g$D#6a5MVU`)d>C>l2+MtDu z{YM^o#4aA4J9kbz4gg}|Ar`WM3#HQ-I_PuH1)8_9`r-jt!VxpoIH836iX4lAuMn&7 z`|rPR5Y9mXg%%a&R)=@reYcK<;*7a!3^w}!WBV{BuxubW3X3IZgG?rJK*v8{`>E(id3jA zEdYhG5~T~o@@D)=RI5N?PpK`CZLo>odFLG~*h@=G4c=vhzqf)iaGVWT3Rn$Xv0_MP z1;?@>QXWSHZZ6N&#mmFp1;??dMX4u<97i7Q3Umu607i8hU;!g+Y83+Cbvgjb!|Z}= zc@uG9@+B~!X;;%CfVA_ZI4?U+qhN;&bm9kR+JyzCA@29v9oUe1`st@#b)yYa*a?7u zgZ+toLrp->YTv%SdEkKu>X>SJYgWGf_S zY~Q}!+Ny9TT$?5^Bbcr@aap;8!q%-@&EUa@b|SWu`)RQhRTV6CEa0GZNkmb2o)L8veUWFodP zu@G0-g1JA~vur#Op@GcAWCU1Q0#=@}K*4S3mgtI60a?3j*)q%F8K-rv2Vhj2k@?6l zEDpGZ1p&o2DgX|vB03qT45B>5a1)M)G|mUFFKn-V{`u#5Z#MEVL#S=0xA?0#WIzTY zh9eqFmoCkBDlRR!2%j9Ws;bIPyXbfqCusaS1 zRx3V}mI(FOe<)`PJw%}mS$Pk&{I7EqIuK6H3_0v$7SlPe*_S?X1hm00U zH306b-)NF&rYci5C_MS(lU9Aeu4Q|Z9kVzAx%tgE-G zZQHicHW43%e3fzfsWR0}VLlm+S-xShFfR-z4-oWto>5}s0_e3uzt9PZEELE-wj(*o zz&;CfJ?`c>97p5Wqd9l(oJS(``q*QSh2}?Pf*szNt-8@AollS{#z2Cs2+pv0LK+n$ zOF*$^libxtIWl&@fb^n2huK!^NYxwOE&vCn9U%JDx^?RsREKNmBwWf0eJ2H!XExZ= z1_8K3=VS(1EmIF`(h{N`$11!HB0n9t22KA?0}oqx!h{L_t|q?sFmnPR@(6i%w}i^d z%DiYv+vhp}$_cPq3F&s3b3GU{W{mR#Lum&WR*#p>DTyortiTK!mIFC7C>gjc3sF>z zmtJ})a05LHU6*w=a4YwsES{(~!OA;mX#u2yr@i(2#zsKG&;JqeexZOUXKbH1%;Bj2kyDP1QPe#KkpWjK`)nKPZx1S7EWh~)t!K^aSRIqGF*xlWrl&6;3YXt=05WXKTn z^2;x~lFj^h1sLT+9RNA|s{#x2xfyQI^Z{|olqs${pSU-pM~^lyzW8FOQ#A=uumK}~ z9czjB6FB$g`ZEViy3aoQtidM<{&rp7a~k%A7hW)>+Td~+;(g{ogF5cZ&zDp=Y}{@V zapVFoOOV~{qAe^8l;nvMC&u>N#BEo!<9%r35tR8=lux~If307?-ume9ptuMe5y9Jo z`z)h-s!(^5ed-03Vt;Iioy^f-oShtWjB>cv9~rhcQ?y^des;x=vlmjIMx1BKy>uTN zLR^m0Tk^Rp-e^7nK;ln&P=D-*kD`So`&R76KNE-MNxva)FW)K-0 zV`Qvxz@toT04c1qCe?a7m1?NbO=rf$*cc;YjT<5tksv}c&F=m9SPqy}08*FLS$g8a zyIsW*=PlOe{hPW*E*L?~lo~*f7|OOly!Qi)9w14tdV60;@Uq44)cKIK9|_A>Y0r8P zeNR}gLGjES=%<+T;w(~HsXzS=x<4rM@6P)XT0cPe6J^8xRnz)!O7G^+yN&mFlHb;D z+&{hDG*^9b%7Ok)i5u_z5Vs$YwD;n~dp`xA7QFiPnBF=&eea(U)CVT*v%Ea^-(jeJ zg*cUO_R4kT(=$H)@uF_){5y2t&h=f`A~PNT&i4Qqs~TAR;Bw0!nvC zBht*=1s3~k_x{eg_kQO)_qoIK$TQ5Ucm3n{k9WOGDEyA1%!${YYL@bd?` z1f0I&1hsSn&;U&EYZCxKPGInwJ388l@$%Zhd2X86-ZJHZ+FJ9v-n8T84b!50@Y6i2BU|OxNV`6}rNHFONs$EpGlQT7kDcx}}y?*Da7W9rKRMdn?N|NES ztC*{`owcdsO$JwMD;v0&s|3^W$;H6WM_=a<`WVVxG2WY&+zSs3A~zv$!#&sD+=GP z1^y+$^zEixTwHiuF7enpnDO$7ii+}HxTB`&&+-29#BeP) zJ5ydwQ@E{@1Jo4Uo%!fsJ25#2)0>XA4qCRhR^O#~&D_?}7H)29#~>$nBsEb6HeHyF ziLDEq{rDI)H8EuyxZ_P5sHyT52`2C?JTRDvnB1j{vX}TT$;w|;5ai>N7Zp_ykr9y- z5tJ9WB+M_vC-VK+E4EN4Yf~G?@5h?_JXY>6k3BL6Ydi4DS4IDncK}TrxdIR! z8!TY*3UnbfO!^(0~45{P_8HI64{{xE1{OW5YlD0r?6zjf*LQ8SggUxqVhE(Gw6B&;EJ$~|VS>|GasFcFVOV@oJ(jip5nrqgHJ?Jk6h#xEypx@1?QMD+=*v!zx3Pw!Y=Et8~bK5bj#VG4R59u z&0;A7l=RHO!J~m!#>B=uML>vyfsO;9p`XUUJcGr^C&P3WTjQoZKPlPTz3`O6?jq*m zdRfhgo=b2o#}YyEiCYe@uSc>7usY$a`#hVJgQoVHL}{NF@@<&9@r6Ah3?{X)qAWd|rXK%oFdLKF#6Bt(%AMM4w_Q6xl> z5Jf^12~i|Okq|{f6bVrzM3E3hLKF#6Bt(%AMM4w_Q6xl>5Jf^12~i|Okq|{f6bVrz zM3E3hLKF#6Bt(%AMM4w_Q6xl>5Jf^12~i|Okq|{f6bVrzM3E3hLKF#6Bt(%AMM4w_ zQ6xl>5Jf^12~i|Okq|{f6bVrzM3E3hLKF#6Bt(%AMM4w_Q6xl>5Jf^12~i|Okq|{f z6bVrzM3E3hLKF#6Bt(%AMM4w_Q6xl>5Jf^12~i|Okq|{f6bVrzM3E3hLKF#6Bt(%A zMM4w_Q6xl>@V}XaSY>aUC6xw0)p9?rmlay2iO(VxJa-@K&HvtINijvx31yJL^t!b6 z5BJ4F!wjEfH%@wn{u~|fX23oA#ioRb?&Jhp%t%Mm`f;gqknvZLDQU5%cLmm@@0?J* z8+3?S?t?|I0rlywFh_=SDXLoI^$XI+XZoM}h3@x?yyU5o0ijcJ))&VUH;fZ2nhS#m zQ?p-}y%XoE^@UB&ak5iM>BkMBO^Q-+VtjDn>q|)?OJSIomXO65{4N<>V#4qckMPny z4?~y0)8($iBT6aHHyI?7|NcfVS|b6%7SEae-l$q7zxF3@@&11QzuH=iGxr-3kVibv z@~C(FDdDoQPF5r!gGfuEV|~N&Rfo9f=)IjIH@|F4z4w#Abd1$H^F3yv-J1IxfCN&I zfKDIhlc1M9d%g_c6pxFJLEgD$js&_7*W1{4-|#4Cz6txW?S~M47|LIb^ZO9~Zydq( z@^BDsVFd|f;ore6pr(lWc_YDYI|51bQhlYS^dgs7Z~YwBsmosD;hs;n2eM-MDM)X# z{g4R;HgSV35^y-2&+-VTJMZ8l`?o_pMdQ`rKws&(Il~*l2*3Sb?f!EBfBeK{=;_e8 zY5Zw8{c&TTcIMZ#Gx#8H-5E@(AN)`~D>f`3=uyU~}8+NOQWu1ShPe>E!{n z`X;@H#al_c+bVBIU#`Xhz@>FC^W)6Z_7u<=wR(K8a0OH&IDE zTzAJIww0u^SXAck@9$sS{jWqs*?&LYwRLeB3FJ7ug|NtKDX9E(27=RwyHX3rpYS6| zcS?+}nf!3BP{y>ahThQwe=K%8EB}fNlb<(;LB74F@6~m8J@9&J7IAn~@=w>oIMcAE zRQKEd;``d)+phi5dj1_w_Qz{9#;(Py_ae5)Rogwg>CT^Ez$w)!Reg1Y`f8A7W!Ns2 z#ZR>|Tr6xVvqK#DoJR{Js1Ni0ce(yPgrEsKY}?Lc_XsD5zx308e{H1ScaQz&cKfT1Bh$PR<9Wo+7k(!vMhE_%S4De7F(GW6c6TW^DehiW;rCIJP!=K1!uGsIU$?sD zhD5U8`e}Wvh?oc@ki0)dnt$_&#m@_&1%w`)q3@O4`@%mfJAHyO!2b*~Pbt^o7aw+S zzql`H-X{BlY!^4^eN^|1$MiBTw|E3K{!|PJrO4Q;l*3D_MeHCZnNPSCr4SPEpO$hs zoOx@^B0KwT=EOn2!UrY!+?KOk-;CtO3>a&kd^%wkf3&Q>4-9W!^!M;?dU=5U&&>TZ zyfp@_<s0p_N%KzyoMa&yns4v{K4^9O zOi$p94kz3R?Vjz9v)uNDQAlQTNTkGnackJMLu&`2D^f2jRi_^;2%P}*-|Offw*El& z@nA@Q#^wOx375Lc+D)xmC91$5K7&m==J(NaVZTeWl3(n%6SjDBS_&h6v#z#KW&9tF zRB!d0#&&%Le;UO!mu!!+Cbd6XLi_C+^ob;sD>a2eD5b{m$R)C-VXC z`X&U{QBVv2tum~V>g`Y07#Q-T4?k?)J^~%x`TBoGU$Nix1^M{mXLS5Quz$u}vB{;@ zM7)jzjR}u}#R;DoKj7Kk79I^e4zVX3gA$IQg6?Oo%Baiy;~n?B1@CyTk@E?0c*4nG zhC{PMDwT0}Oa6$9e-OsMNlm~X0DOua37jfC?A=a2aty(rf~FMZeU)*@yIPnP%1?ii zf8c*kerb(O>bL!+KvOUk>G&z^W4HO08pyHwiXT|oFu)U}Ew6M(C<_3S3k@KDxzujD>a94V43%*acBl<v+_1hlKBcUpM1x7eoi! zJ;&6dKg$v}N$dwqP)6PU3ifU>KG%1Aatu zWWxoY>t&+P!e42XM(|DJ-!l-1REbI@<7DZUzq(Y|TvhEJYALK4oiWL&lFZS{9Ay)t zpwwj!X%-x(#!x8@=o zrdWw%lOyR5jKhzRCSygLh?HX-qAgS!=a6Hud_axgoffB+%&~hb@M$Y^s1vMa*%YSI zYfqMbjm#vxMOa}A6qPD1En3%CYn$nP)l6P%{&+&Aw1+RBjEoG^=h)aFN5*zyNPa*G zkM*#e;bqo0-az#I2*)2z8UokrnXAk-PlrrWcVCy$GzaCRJo9x>Ehh(+PWjxUQ2y$4 zcym?B=vGn54=0$WNp)v27hnw`0_I^l5uCE#8w=y0m;`JanJh)x&2f#d zu^{feh-RK+kfoozybMF2Pezb71sZ7b3?<$&*vY=n8G>;crMU^>T}b*n@$4A@)|)I( zf7ts}Lcc)eiX}C>u84n$R+m;Bnx@tnHPc*$64?1@b_EW4E{*Gz zEcPpT!Zo>h>;^VWCE4h?5u(`hqpj40cu-$&F>39!z^>%WRj!ni1MO!)Tdz_$vi0OJ zd70}99FM#MfY~quX$IeGGVhORLA~VI^+=D|vG5_D>jx9_yGEQ_!D%Zw+3X9N182@E z)OT1?Lyny>LC%1~oI?%B;=sFHWNso3jS;2AQZfm)$B_Bvi^MT(3&Rm2+qyQ}-z{ER zJAz-PO1N+wG!eyS0@tD@YV&}uD03Bc3)=7a1C1ivsX>6?a1%_F1a z68S{rGwJ!5B0^#!B|a9^Q*!eh=8DRXccCFqTdB@{>UAF+>^Vlna~6IDCD86KW60`_ zPZ)g*0Y;Zk*;~#&1o36WOg*8YaZQOSIUUW8WSq7Kmw`m)Im4%8Iv7xpuP_L?DzgBX zxh#>%0FG9KW)KDKY+-sQT(4WD@{QoL44qfiYeL>CfUa{!`5366JwN(|HvdyW@v2F}zn`sPXxKcg zN}|DC(P=Mc!0uevJ|{bz>2lCO8>!ZcGOc@#+Nvez*F>X`1n~F91+8qH$Uhp! zRKiBglZY)+`uPeN%Jaj)Q2zWm%js)c-GR@>8DEK}k%!?jyeDz`8X}K@|8aungrRA5 zhl9kA`vdVKrH?Wot~e^94>KWP21LaSk?#7IW5~?}a=5UBNc3f#^hrgA5t@%+{=;Qw zha>kjI>xGF&>HMMgZgm{C^c1RX=$Coea>OtsBvul1WK4B7Pw+QxLrP^=v{x-B!_uR zHjijKR5fw7@L4qcfu+0}mU1!~tIUNMwNn9B4$aKoS*ODD8O%8qB4C-=|CiN~|Dy8L@R>h~R-*Yp=_?;xrW5ta#|ijD z0F4umWgbB5V~P4@(w+R*3FMzLBOPU0Uq@S$VC?&a^{?puCQ&;o)n6Tz>fAq5wQB^j zvmhy{^!C;=_LJq9+$OOpFduv5wCh80D(-pSShM=eMD^%P|&ZAaN zSJ4Oz_;X}GY9ai86WIA|68nul991Zn`;N*vy}0ApPH~=Q@;3jU3xQ}-llT9b#na8{ z;cgf+K^*O2JhjsBa#52}iIa18|5I{}*(;S)zbK<}mH+uVirlZg`hlg{{faQ)%!`Pt z$Hn<|1$hno&Oa7VU;+YK8kGS5nGZAH+EpYR-!hQeZ#Ab;_0P%xwEyJe6tW~nv;YV^ zgLj-m5?7Q5H-;vXU)Id?$hGv7X8PL8z~i`j+Wos8eba9MJ2RFR?<_r{b;6Ix0Wngalk3=jfn z(p-=J`$Xq!-lXUr4yEqrtJMsK${BE;eV8f@XvO6w9ZkhG4;i*hZr2kG!*nIji#B)`PoEeHoh8=B=9gU~MrlWK#=IMvj zNNeY9%7NuPPPJD(CDPjA%_Kv#R>5iSOM@-Z1kg*&(MxcNiOb5v8&`cODthugeuD=C z=xHU9(xiQXO!H{Tg2{q;fM7BJpnC%X02WZhZ5<~UZ;JuxA%HLj9d#@G-;-$d1^&|d zfVCFJ2P+|zsrIC-;f41DeN{>@RPJM$__M=C0!4)eZ0&C@T=7Z!$> z#Dz7LddHy|2%s5Y;sgv0)iieg7#S9pGVHuJ!=HsFZ9v|?%-CLjUxY;F^hFYdW3!XF z0)bO+#nj}vt8okfvvJhN0z;b!YoHpT)c|cymDy66`q&{DICh@JJZ+f*rL_t*R{8Ug z{CynBQl-g~!A2a3L}RD_1yELwR`6hOM3`|vMy>`0K!}zHN(ht_+E;7iCa`o4o2|#S zWAI`6ogr8TQz+RdBR7y~DsG^p^jM1(I09YowWxh%Nx??k#U>X;Qu~U)GcAKX3jW`e zNKdNSTS@C+ohMvakPb7j!H#~0o*N?4^x;Fxpqdg?PDbpTk5=KHo1AMn3)+{MkZ6;S zPnyqH7xg}JQEC7*e$YL!y@6zMztU3)$=NqEXPXy7!GmaHh! z##^c_SuPmp#NSId_s(Gs;VTp32Z2V})pgb9tGV;|;8awuz1gPL?g$RCPfpHa_-gIr zN7fF?2)G975mX`@b~)WCo>Cu0d8&v4@iuB>owsYf6~TShSP}&6!q-VFXea~=V3vae zB|Uj|M6i_S&jqpXbNv>|E5}y+yOV{HO&2v}1(O;7hZRrhHBb1kUF2IO(&#H-kYez8H+`NpC&>StLJ61#h zEg9~op7xbabB(l7D+;a0`qccY&s$0+RzcRmLBAjA^I6s3SeeQT2q1u60*(yi7iei+ z013HYO|_Dp4>(nH`YameaeyMt!D{{{tS=`TSIax-Wpgl+1G ztEFkdgdAOj9A|Q`NwTG9I*3dU8QA`hK)TJY3pw37aPr` z+2u~(&?~V4k?QHRAyZ=#1vbMx%jH}%Bdx`m#%8b%PKef2qh!ZI=B_|l~W zjHn4$Gm4!WpXt~SJ;Oo@V-HN%3d(A%wl?sn!kdizp9Cgd2eZOuA!>#W9eb_ zOT8!6{W@)4mgUanzi)64YX(!N-k-{V7>w_^?sT}^UCm1vNn)n3Dy$srOkl_3yyUBy zy*FPnHKQn3e{ib2<)+>CF7ZQSI)=KMMreM)&B)16MyoKRPP0?xBsCG(H6ekzKBodsecA zA}yjP6uaP~c%7A@uiHAj8h0-MNZ=*K8yeTjEvExRv3HWXkKeeaahDdpktc`phTZEC z(ixPrt?)g)veMmH?^rXwveG)*M&rC#x*{<=WFt}4Q)gLH9(2g~DY|KS$TwY(?Mu~& zfrC=|pzz(!>TUSNOE0z)K5(^#^tGRTSGuG)k(XLPAYWvS=2U+FSIW%uR>Mo@+DoP=QJ1Un; z+4|T#tgQL4FF5f zd9VP$9Ka=D8a&Q2anNz?0>3BfDld%OshCyI9mkJB+Fn`Q=M28GB-D^mL%c>l;g1K! zlg(51>w?>{8iTEzsUga#e!iu!Q{`uD;}ik~Gd0Vd4^FiY@Q;r9(z&^SlUwOJk+wl` zsy?=l1TPiaI}a<*-Bwi)EY%kiRw;?a%@`w(#dMfE@Y<0O8l7WV>8W;4a1RrUe}H4N zB$F|Tb2TRy39L7J#3D4jXv_|8wt@P>s4@+&_YIxH2os>V zhHgHrM3(%i(Cg!XhnT(YdYM;0F%n>KQIB}*)p!GZa$0+g7I9i-a(nJds1wJW{nFwn z7%i@{R7&B~k40!7UnzER)rlTqiUi19RtT1MR@d_H)qU|n!A;zj5HVgVt51OltKar_S~cT@%h+uNH4&P*DC~`Z6N`rH=!)JJi2 zM>R;yWx49EANmK)Z{EncX2esFn(uVCnBV#in}@)69OEUEj^ z&A;WF^wze_kH#>0?b9JUkLRd?<8t9B;rx^RgAdmj3<(4Xjbc}(kypr39?evL%Q>sI z_!VL#j*Es8(Tw|Gm5zO%jb*Kc;aercV`6oaDfwGghY}r1bSSI)-*;HsUpOqQjN?(F zM-3LPUB{K{akcX`(>t06c<2p2gL70(`~0dtypQwiJn!DRJhymw^ZCJEcj`Tz=!|ig z0Rubr87oALgj>@gwjA(A4yv@c>|33zX51YSsH| zgT{vh?0a5$CG(@FrNG^5u-}Fa_Gr}Ojyeypvr0!*G&|(6NB84j6glLACSCu-RnA|u zYHm&s_QIIk3?S|Cw9>;PJxz3_BZd`Dnc95EZT~+vZNMt-UzA??eelVR@E;}hbFj_{ z{$sU|NloIt_El`hJ-5=dA3Zm)XY;-1_RY}Hk1|OA<5rTYUjK`;(qDDDw(ssndt-<3 zr~&cjr~#qfm=*^_-}2|-T*E!?`X4=A+e%&rK5AKhFCT`LPttVsGznOHvFoV)y3tGg z9}?T&_yt95pFe7nZ#Y?k39iz^$Iku>5XC8Juzv|E6SdVRHY3_ zCZTie*VW{06S-Lol|I`{Nw2D6C66C}J{XZbrA{!bqAhcWgk-7T0dj%yb&;E8P+KE+ zLZSHY)}_POUo*b6Y{3*9HRqRxP*Vz9$dio{VP4uA+9<1w{%E1Rz9^rm*SkNMPgXz_ z89h?|C|+SVz-B3@d`3ZMy29yvI^CrLNwLjVZ4Rf(Y|+3pvE)BIX8udD9zThW@mCMT zV_=W14F{|k*NB3PFd!dKJVbwrCbR*pEURia`#2*RKP#MAdU(;n>)z4omek`VSSJ<~ zFkIwI@~+>r9ZS>P1(zCtt8j?p>sIA#30JYEoP{;E^LT5S*Ez*o2xfwd2ZzP>L{r=+ zJRC|3ZhjiT!FbN#t=o$Pirk9}>t;+0?${a*@v~A~Szt}cY!s~D(WbxfYN8qm;2I5b z8C2xhxb@%aGsw14&ZoWGao!CaXy>Z{5_N1r>d>{!CxISO(+1p5hj~cAoHJ$u;Y)L< z3@+d-M$Ff`CM|&LFLSw*_OlK!Ty9{iBi?^jpLP(8Kn&EC$hX-cfvugoPrn&&xesr5 zo;~D70$&0`kw7}J_k{wC^NESN?V$xbEk#J+GtSl{Byjrc{F2k#DkU+075-{+n2Fv%cIwJn^ zga)6nTdv!r9bTgZG;0Cu^;E&tZ}~ryLGRjIn|bjvx0@8{o98btJDe2@ryN`uHDM_V zBhGaR?K_-p@NXX_a4B+eryEY3vgL(XR}3dGv&-n0;u_jJ+}G7texApfXBg`JvF4IV zOX6Hf$4GGP%I8y}AA07pPe-a4rOmKsM5VtCeCg&y+*7*ixStFzNXF?v0^9eFF!*HaA0g&~}}Sl@T4DU+Ta+Uok%X*yz%>8n5`JNouw88AW@@dj?$Mr$}J+Y;aM# z-T~+9>2YC^cg;%~%D|&R;M- zZL|BKs5=^J(prh9A#v$`-dmmsH8Fvw)UXX$s_*KoL_)Rr?ensIp)Ssac-f_Tt!jc= zz1r$=uzY_j8YJLs>qEHk8n(FC+V*h&!ey0yufa?&`pZaQlM)GhQUk?*&P8fnYO@>( z^v6me;t=>=XFA(kMZp!v3p3!>DEBWr+k3QLUu3+@o_0cBfQlSL0(ubJ!y&{eVVMRc zBrqtczw3FJ4QdfKvg7f&u4@VjWYZ%gR=g&?j!lcF9I-NnW4P&hkNWfh(~J?Z#vx=~ zPimRBwjj~=+qrAHAcay#r#5glANN1cFER<$r=e~V5OC*$%IOWp#R)!p^dP$R?Nv?d z)~Y(IB`B@}2cNP$4^B-G;%41~;zo>E`owJm=(rqI>ap#f#z9&iF9G#`^`|1+PDOu^ z@!3>qB)|qyO~yzc9!&=qnwLL$V!UIc*s91l#uCFrCN&8zQe%H=YTx|(Uo39?v7G8( zTKe;kJEQs9@7PFf>yE~yJD5nCpIqdE{aa5H90^41Z(8Vr{p6Et$*}9lb};EP4)=~1 z_gI}+0aZ|TAjP^Ly2_)u%S0h`V#}|GYq?xU-0C^C-*&ttJ|64a5BD)Vbb~LlFIaeyVef2pNJg{ z8&)TA;aZsE#) z=vYF=St`#t+la{yir+q=8Tt#C+euSjuWjaWv2WIUGGO161{GFko~)S-88B&g59tn$ zzo0){N^xP|LeqHSybXD{`9EhsX!nASmlPf{9WA`>Jh9s8FBe`@3e)?8p67IT`s+%# zsGlqU?nU)9dG#O;!If|UCr^fkR?z5)hO+2mzuuY+q7NuD)d z{5Ct6iZ}ahzg$(XKl^ZXZ2p}YVhlPFUby4?4#A|jP8{kXzH?`k5#|;?MRiWyEn=o? zW+iWoEblWHw7B%qSr&DF1&vO4(n}>;fa{~;Cl@$$<$ZN&e1?;6tZC4-9TZE?fm#$wAk%~kD zH8@}9#*?;rpCEzXcyA2tUqE1ZA}-NPUR>Ho0tY;OTjhvLa&P&)wjWQvgiEv*I3!`s z6;JJWgjjsS<@0D9I9nfF60@Oa{U+94!7N5ZRlo9`%_PTcU^uj75(${P*Up8O>J`^2 zAk=mY9=Y(9WQww7ERfH~=RC7Xi1Z-jZf35FcP3ogj}vFxJqd`?d_CxL6S`?ZGV-5>_VH|1I&BcpKBJ; z#dX$W%Ve+GHMLg5l(R)S;ZbKTQ>t_Vpk=0QQr68K30kIi8mohO*hL#vq8HN5J;-iL zy=uETDYaT-<>}>i#fycvYanTJ8VT&<9r$}V576apbh7Q@40YlY-d}rw@hTu)gLIO&cTN|8P#dV`rP7vV1BAk~qXpQ@jDWXw)dAu-K-+ z4K0V4T5gMA_uP-!q!j1fav!CI?7LHsQLyJ+Ei68Fqt`t1z>I$U$tK5cFAefR0AN6I5hTa0y3hH#%?RiD$)40aT@HsSm74idaNb2dM0WyA zx7rU1zRV=Adfk3X?vhmAyc68f38o^im!)7{E5X)t7j~-Oz#&4CM!XFNA9G3e zf_kM`25(Cs+M)ygu{rMW)f>G}0_Z-DL*BH$^^3_<_!I}f8gbP+o5OzYhSrq!Ci-sc z=+W|5heYGnN)L|)f`*E)ss3$>9mC;w+m$;TXWz^YL7cHlxL&x^osH|SZ0sN+etxc9 zBEQabuuOj`cDrV-$JAnEXHcVPJV{^oI{a!4eqhx4Kmg;*mFjoGIW#=&^WD`BZ}LTN zT(``ge^w%RRjseTmczcWc|+3c!K{aE@MnxhUh7KvGOIz==83m55(zu*daFjP4F#j~ z(}CtAFZlBEu1-#rg>JPDiC4xK&e+8BW*AmK6gP;Tv(Dm-uupU3$Vj3tZ}X$Gcv)C3 zxqfr?arNyl^YGGGf-0kEdy#5;&7A&0SU%|ugKUlI0|+ABUJAizFEyW)vrEucnbdhn zD#t-mMM8Y$V1Qt+lYZt>PX6Vk6GaII2Iu9nikH#vcuvKQzTR+6l!MT4>1-&|Jg|c+ zSq>87GFnXx`3+a=A%oK-rbVeLNGcII=wlkH9a>d3g; zHl{5T`YlBydUmyZmoD!3h9yz%2edOMQ}9yQ_4vIg9<+uG`hBU`_Nw0I=lvK$_&~M~ z(M04XJOG2sRy>Qyk51n)*%7-SH&wh!@0tgNj>g>G?O2hr7CZ%U&NJv=uGB8g$*t1T zCDZ4KHR`O?a*4HX>-=opB9~W;HgH4CK_O1`7-X&gUq=5$XbEon>>ot@c+%`b~=IHAG$o5K9^rI3-YA#2a1M zw|Tf6z2r&;t-jli5wSAcYjZ}|dCBQyLIrF zSDIYrjo0PbqYE^MelrYZ>nm3gJf9@jo8#m5(j^H_lc?6jwNgoLut@);RetahbJNa> z(B%-i9*AMpLc~YBe8%trp$?m-3U4g;fRy#&>gpnc!J^f{rs7lals9AF@!(bz^Utqw@GV54iUI z#DaV3ecOf&;|j#a*Vp`<*mA^_KMn7%)_}uJc$W_*y+-P))^k6DgivKV=IGwv(u#{o76>ASZI%{gaby-V` zgtob4em0DD038>T1dJi5u7zf{k`!R*)R3inX@Jh(w8&O!BJh zJM?nufllgy%$Jj-BvMoACxnI_etXPS@<5~gh4*{q@apGqXdt+V#|u)!>e&&>BJ7&et+AKlJC|hC}UYAd=FoO*9r$MBS=X;Ed9Z z9J8*n=W@QA-PBp$fZhAP4>G;mVcQY8v8i1p&#Eh@Tu*FEAmLwEqwkR+Wqid2`{o8r zY;+aJP)wA*LBCwe>G~(q!?xX;3|EL(r0I>)6?NU!htE>Qy8gLF51}Vl|7#2+5dH0W z=HGw56yX#Bd|#aT(?*h;L!yt^Z(n}CP~~@sCtb+lz;;a5|A8f=eeOJ*_HzwA^FGi+ zZ6YJJPjE(3C3>@NskHabJ4ANt4wK#CVfNs977`#STx+R(Yzr3K%_J@lcJvd@Nl0uV zfhRZbBLPJ8YyslNKsPg2!5$Kz*sGfBp_k!}e_Gg%;PYBZnpE0c^SmnAac+qxwNmPf z|G@6u(6ongqe**~b_Kk0HJc9n2(pE>hKY8uyH_R!){#IMA3~C|p=RvMjk&{{;hVh@ z?qCl|eH@`^Hb3cMWJ$S~WUB(!{oL+mApyoxWD2#IeRn&S>N3)eLBC+Bdu7(TEH(dp z013?YZG`X9)(IxrgZ&Ljar_N+?-8%<8egfb*1o%!_9YLgM(IBp*5QlX*g*nPAM5hC z4^Fj!Sqnp6=4)QvX4?S8FTW)tR5lRph{Km)>jYs|Z}nxhV05csw+wtsn!kq)S^W4`bY{~i zk=MFITs{)0@Vx!yP%av5g4o~P_`H?0nBX-Qy~Dh_3brZ`Lhz)vrsu13Pr%NV#x2Bw zi*UzCUA}{ts|)L^rzwq|7loY_C#Vo+lXWywS;jnzl{SxuIz!Fs*4|8sj~z_G5M{+{ zO3SK#;uk?nB$A4zpD7PaI#hW_yfd9s+5o^1z6414#uY9}5V!Ttt88qp2AT#;&uI_cRx#1Nm zx1_#Gde*aJ=R_)u`}L3jfmrr5(aW!I?hv4T6nV2EFG`G;iA#WnU0DW z_6#Vdb9Wo7xXvm|kFRY@u5){iuuJXw3#QCF7ad@w=dxisMKCzb-PC5WdfcjF{q6AW ziQCt&sVQhK3XHImjxlz4H> z*_iV)f@5`<3<=Oeu%oy0MkFL>-(Bw>Xz9)NOxq4DS-NTbdT2joZ+j$ZV(vhDtb!9E z;z|ZvRej;qHBk&K49G#pQ@?P&G_IH18S-*e2T$o0khHGrIbPp-pg&%&Hym7|FP^C? z5j^wKdRswHN11yXYM`1s*#Bwbz4v7$0_fSwp~Hk6T{8=6W(V$rnOYU)!|=TLF`Jbe z4K=qZGUhnpfx9^g!v+h%5@S}Avci|nmX4PofrmKeGSpIuHbf~HiUK~w4>(^sXtw9N z78rX_1_00c30WHuH+JBn`<9_$-P2T8B`ok3TM*1h!0n~mCg)@ zb=X0H_-V=5AJQBQ2 zMJVoWPIFk;t+MDNxi659@h=nvOlme!UvP9x4v7o>UUxE?U` zeU-mgFaqn)sR}VQg9Or|z?}kiD7~m`R~{U?uQab6YaL_V_a0HDVZn-m;hwVkCtX*s zdjab)hu^W32u!AOxM|edr?>Wi7iKm{poc(gm=p)c6o=r+`hg^ z@5j~Wh{bEUUJYD(P(d0Rs{U+l&RJxjDX-gcePVb)uziJH%A)V8tcUv-%w0uGYd51$ zbd=uX2IB-^=a>Umj6|l(hk`%;YR;1Zfw;TP}|-&$EuhlcOaW=vp9 zPMQS|h*av$Z^`z!h*5|L2vFOwCOfVTZ?*TF4%w$_=D=fh9urOfQhqkiST;gCk5gV} zr#fEpOVMz`ezCab>xv;~o&mK=<=y_cbmpG%L9IMNp@^{cTA_E$7pkf%oE1gGB!&}p zZt9#Gb)S%3C& z)M9y}6~T_RqBUJzpfonToFDvlF>@u#xN`iwMbP381^rSDKU5>QQ}Bx6P<~sMAgP6`Q+iN9>V+nko_~Olkqs1iL}-^2?!b73cX6#_zsikaXRd9o&$*Ct2|5vD_9@ z^j*#hqIfe`sjU11wu$Pg1MsO$L~;4rC1%7L;fUE<{O(wYF)`g1YisCq0q@dG4`TgL z=E<6LXYH8#kW@aOCskstn2${@es9B6D2|lSyJShpQu>ek=}))!d^sn|#OJo#!A=eR z_S{`#aq-{18AL*x!u4xU->JQ{mbyg~X*6f=(Z0AB%DEjtF~%znLsT{$?i%|n5Aik@ z7&qBitrpo&BUD`Gf}CwXT{a#IncW>K|I(qpN;Ft;sYIl+vE6|luf~{6Wa3ce^R8vZ zirHuDsl8|04QGQ^y*>wL?hSU$RC`D`q1zs<7(9ZM41kUR_y=qFIk`B1bwT>ggU zROyGRi1HYnZ6Uix^I0vvurhWC8+PfU^sBK9>zbzrNxC=gpCgw@5FHAM?u!hHk9I59 zsyx&+j<%`E5R%GW>X__kt&1m!c)!=B>7$X!@_Y%|v7< z`QlJ2{Y%Di?v`f9UCd{SDm?K9{ZXuSSGr-7X45x5Sg#g$FT&=_R$#%7murXw(%CZu z>N+1*KPiXmuhMm_${A-(HfeNB_mFonq^(mfCUe5YDT$`z3qeovBO4abdkBkE|$1DlA@syvb7&PNYm#1&a~bCR*$&L zo0SOLooE6MxywB%m}i*7hon9&_pa%UF)1oTDhDu+ zQX0zG&$azc8=o!?NDlT)ItzaJFxNmZZSI6Cu544%|7hskU`@Eq`|MQqMlshxMStx9 zDD})v+6=CW>Y!ReGhXaYQevaN=`!Z&NX{$*2W8O2PVr?y$=(mlQz6St3lk?t-C>(b0{J_c9!dr zNyTgXp!Zk0yKeEWEb&lF#qrN5`zI#Ts-1>zYwp>XhR5FWqzMa}S}~kjeRfXwu6<(l zhY$J}_i1!5*xXniJ@?sk=!QFPWpQEqIQ#=a4%pOYygTzG=Cx{8B6A?6?JX%M9u~_X zLOSK-?AO~aHsaS?UbQs07TfTs|CS|4nmzPrW;*X~F(=((S;0`_@H+oG?{J(C+|RnQ zT%NKWUJ#&i;~eHLJV5VH-KW3HEr0HOlw~#{zGj&L?MHKM-;cB0sPk6e(;Z8_e)N{3 zlfAD0_NiUr$K)P*#dZUA^_dSFcJG}tZ=od)nR>P`(ZAx+yEjrV<=jUkJEvQxGq|^0 zSis7wwLtJ#Z0)GxH4AE=dZE9fPIL>#Meh}DwH2B;I8}O?F~r>cyovhnrXEHLy(x=V zb9iws*bS{;@FQ~&TI$h?vPdE#wM~kA_<5Lc%J!p6UQ_>~@Gad9t>hUzSQJbpi>2?f z&7&qq8r6NySr@JX?)(p8RfDb>=uc(%D&I5rS5|-6UZ2T0xPa&RQE=^PlaS3hE5V78 za_4iD%Btg5Z8y$${kc2%UC!ThffFl{n=yxGgtJ?NuLY^3ygJP&FRT(EnoDM%ynwK< zcql5yW71*o(4XHPu5?MZYDT8AmL$=ex>0qyGXpjC$#M8d zU|fUp?G4!31cn@8*?f0{kq!po-i^&&jq@WE{HAP8VrhHHqUqK3G%$l54NziX=@fKM zpZseIXyPoyyyB`-A3aK)WfW=G;d!2F0&OL<6L%B&t;mpFQ3!^M#kUr4YQ#;}74seBQh*JhLT9b#9|w3hXxx ztBqnz#8}ZM@hcsqhnz(Md(gPLT|?t5W?;AK1~~hyJG^V=W_(#(F3|%*Q%inu#WvG# zLu1RH!ZQ7T(e~a^O>J%WD9471f`Wp8$WfZ~BSJ#QasUAV=^a!$fzW#Z4+=;>bm`JW zYNREE08uHSNG~A?p@m*T?@7Gd^L_7o-+O=Gy<^-v#_yjDMzY7)YqQsS*7M9cpSdWu zrNIa+o%Da^?a7;6NoiYO4QAnOgFy+`I~XUvnVw&m!dmZ9bZHpA6^9^ye|r8`YQn%! z`w@Lua!YMeKlLX=t2lbUx*n5gbWkx&&jRFFb`A8i$_DOxuYWR70C4ZHhq@Zl{JV14 z5rH%rH4_M6VVyUp%QRaPC&AjtFnTF^t0-bKahH~TGCckDM}DF>$$1NYJRP6ULOKxa z0&@24;e$=uQy^#G+r&%(Stfw%*^-0(tzcYqf3hQ!fA_N;=SdDNg{6IFlQviXfnTzz zewEFBN^6kcH-<-^HgSb@FoAuT?QGOKm>=CrZh9I>FYczzb{zJ`A^scB0|`rZgxPdT zIE8j&^Skt>{Y_neGK_w}V1!Uperq((l+(8Q>Kp6*O4~1ufj%%3ZRPu(5sNbL5ZL#H|LLe=S* z`a?$!32)Q!-F}HBISS;~IAZbjk`m=^B}A<_nc=Kal#l32ptB&6xVbY&9qaZ zWseNXCB&YG19itmX2`Zs=^3D&Gy%{#qoAfdpjM=)j0N(x$VnXR5W}jrTRC|ZcZTR! zUSn1m+kwiH7Yi?O-8?ZroS(1}bnH3A46&<-^dG+vkoyF{=+pvQQ5rQr@?DV3a`_*; z)C~Ku9OUt~ZzKG8=WwPv^yQP94cZLq<4=a1Fy=Mdw?31dF^U#FDRCZ^ujTZyQ+F(d z3TIq~W_LY0#C`|5qqxHj78g-BZGg)09tp#eaa_s79X5b)|N4sV>(QBUQn4+1`WPVU zh4S!l(=cfQkRD;F!)hEhJEZ9y*ZhIk5ct;Nb1+q@@S}5V{ypvzb<)S#mao zvom|mn}zi{4~nSOWFUHhfN6j1bmn7E*pB_ccdcD=K^uIn1ODyl?wRvZH)kjFFgR-_ zn-r*}fljIwJA|IyL1hLMeSI_K{$Y|^6Jh5^l#OY`*^COdXk4j|Gpu3eBpW_k9SS+? z0D;#B1apVwJ|_{7RDmP3%^j6(zV+J+S@5Qx421{oJszzwsu3A9$yT~n{$7o8`dpJ| zC`jqn6_vv#5)A226Hhx<9mwEYLklgt>UO(@+}1v+76Z1SpA1v#iu>e7y+((?MV9bv38tj}oqH|ID#}pc7_q$1b@9vt!1&ZBsA- zZ!hUtfCKwK=&^Fz0?Sq1kg+8|J~a&aavYFSm_bDu!FR1u4i8s5#eFk6Gds!dJmg7% zAk$k%)g2YPNHZOcah9(s%T9f}Vb?HKx4pMdF$?0MShP*sLP)W8{nfF0_crW=puFK~yS3_cQo$g=bmfP(L|4)YBw%pM_t8=NNp_YlH-fDs72A|?L%S%p(MX$nAn zwlHz|?TSn7Hft(e^yR5g#Q!kD_9QE=bua|mM9q1ahCF@teHfyu%1LNwxQ;sACM9YPp)BHs2dIJgi2xK z?Cqw273<^|lgXKlQXLcxcQQ|A9@7XJeyJ!_LjJrg$EO5^&ldw1vm z;%EQ=17!P;TmA}c|GN4AAdx?t;nix;T^XoodYkE}rSb~deIAUYX5zL8->#VK;Cq`E zhy6h8e_Y^oe&^yc``8-kNB~vFmr)eLdvmd=m7VO;a-f;wrdl0%zR=7}ze3QIKP-gg zhK967G`!#J59AuvH}DK`s!z6*gR`)LrhI#^iuTa2tUekM&bm>ZCNRv>{qb_&VVI-k zm&1X%4VbFRn&9!#q5n^YIP`WhOpP~V$_r*A*x%P-F>Lq z@^YDz1?Qe|*C+obQUM0r*ECoY5Jw9YwP;Rd{L{CI7n-WeM&24$>AC%d+&tzU%U$wL zXR2dj4fo^euXh~Rt^7O|P~C8UHBBc6^|THk#!P~9+Q{~<9LEaW8ae&s*Nvzcxhr-X zEE7wN7v#Ra(TR-AWhcd5nf$Eq;hP8!#Fi4mH{oQ3&UW{Z4F z6N`7KHEud)YcgB!|g|cspk?kvl~%I(r7;panHiE+X2Tg z!CR*Z185g4w#Ak&!qOnFF~Bllt4ek_t>D_ctc9ih0h{>y@6YYt^5drJSX_7csubee6K)K_6<^=L4>eAjPf z)*=GuMe6kzRlh)39d34NR$^4G-$WoGhc!hGwAh0imPLLdl5pcjqgKsk=Wj)@irD|x z#UQtHQS?Q43(wv2LGoJqe|7^@>T3u2a0Q8cGVoe_O`fQ|8L5u0Huu?MbReP$w6MDO$%4OYN4=&WxBcEqfv@Dm-=Eoekt zWI+otb1qzpJXElQs*+GXTV{sGVv>{x?y%)huWMsG?{EfAn6jf`YvYypDj6NU7XSh#mSFc2k3kHRK7CnR(1@*m4GE=j0>Gg7453PZi(m zux)8b({={f6quB8Zf}Fe)?_|?)|4{ZG8W(7=G5vUe12^14Fsd`hWTsk@1C=A%8 z2H6Uv*UASh>sOW)jj~-fA^TJPf>%d=!(dIYKX9~jkNc>}(e*94g8J_)DppFHSL0S* z+kJHZTrl`nr$xR0@0^0gB)?G!1Cz@)VXna-1+^Ic$kbBZE-FlyQ>)^j<)Ew+-(QpE@2U=qbzJu28?NzaQ;l<@$q<8)?{B{e2??3}ut0Kqj@%K> zvyGJPjTJR0D63*LKQEP2oNQ;&z~t7rdxrhem2h-Ief68XPr1J8ap8z#R(X^6+fwg zDRpe{wf&dh*}WBbPDnz?Eo2+ zl=8(KlTeHr8DK(Y?I$b3s0BxLWh1kQmnI88lx!mbsX*4EBwZgjROp3So3vRy%@?CU zmX@3zDT`jFJ~#?zG-wOF#j7m1ERl$!qgAJ3LaUZ=83m+cR;f^~cnos@ zQ^;+}*uK{$yD1hDE~42@r@Oki^!&ibDo5D!gtNnXhi=HVja2?!)xkc&X~}fj1h%;%s4_y_?@smMeJNqv*O)QhO8EF4G)B-q-J2v0WDxZoF z{za-t$4pXx--kKOV)qrZ66TuBr!b#)LT@o2hwM7j8?m%wBJPY|0Z^X74w9p6*~So)u6dQ478XAlB3j|m%`keYA6jQw-WI5!#!Omo<%9)u3~bnp zr-xqR3G{UQ)rRp~JL(g(EtdN1tD_esUG!o=y7hh1ZPs1^(scH32vEGOpN7w_g0y$m zc+{CCX%}=~>{&iPN~_LvlzNg_uiIF05s$J@lc5nWKe2?>bq2gnbt`Q#B__DpCf*i} z)&nhwTiXTQZmf0_FeE-puzT3t`jg?qc4c$3!`<|l-UndzIl=uec5dqu;#W-Y)#`o+ z?>F9Uf5Ey#pI%C@5~y}0RXsq^GI;HJzDHW@fxQTrq)%VG^()2AV#p%ka_@@Oq4F|c zksajKT|QWQfBL<>E@IR6cEjhsCwj${>6BTnl4noL_l@K=l|oUm`Hb6q(Pa0XTa8dL zud5uAU(oknxdl5*BSvIu>(!QSImT~5zP<`({>XT(@drAPhMSTgldV&|#P@x%k)OMT zC2j|P%C>Ymu@dq7kO89XuOn)`D$8uG)?~F3GCLYu6?rdY>ArqKXJ^W;-r<1LIJ9%4u{$iha2nBbe8^`Thkkx% znw17A@52L(*1P$Z_Se}e(J(_syq$O;MMTNQHrdt_byUcl)bCcc`#i~75%jM0^E>FrAMi;8h~v#_!Id&XSY-zo#_ zoD=NJX{#G2@p$zeE>g4%I&l9CrZ~OA#mKwv1=3&?Wsi9S>wlSfw{hn_pbPX^KNCrqCx*H1ULfED~& zR+3iVCC>Si;UNig6{w!C9)&66F~3D0kNz<8>49mgOfXyhWN>%I)vIJ}gr(Zj0r%48 zhv2a8T8v_J6^7121UO^f_n0YH5qu|2K(hM_J$a=FD3c3kkB$9@%!O{P{$z-s3@hp) z{PvS!XOwro{0jU8v@{FQJ%h798F1{F^DI9uN^oLk`~~*skHGU_F(s?Z%MbJSrX*)- z>D-Rs2$L`NbZ$2K9=?aryEPj0Ko)aVdJ$YYwrpM#Vl}cgLL~@};`-fg(l6ka48ZJt zDrTYLCxB?I-34}xmMHTJl3Sf&T`^yx5xffLhw4NvzO>}~qsoJz~V+5!=? zVhQh&fFVNM?Pyn{kHz6d(XB=cnf+hFPCJ)u2y{u>CHa*)ps6h$vxTJV%Zb-ws?hmw zYdeowVKC(%H^o0eq#Dj4I1{~B46#>uVjsEG^&2kD|+W_)KhKavC7-Ttqn0V zv_j~u@7lp-FGgA#H;zWuYbEhWzqI1gTTOx7&ujJ*6T@u2Op~;Dak$d*LzNCd*u|mp zerLaP&NsrXj)Q`C$qT#$}$eFbLSHMJ6%l^-T- z<`VrLc)+KE+@5;Y39Fnj&xXlvSu-o2RiWB?VAj@EVx|EBjkx<*{NZ+BNWJnhf#yZQ zk@Ze3@;&Sb-mQGW3gR2Ph+G`)H`%?F2cLpAiLKMXJ47`aUD_c*yM426sY8X)xU5bS6+LI1kg%)gl@)Lf;T6Gg*uIjS!Vi78ZJo>QTetUO9ng0o3Sk!rWMz zq{A!~kVm7T<6&MZos9p!BD88V?5oyB!Qs>WHgs6L`iA47Aa5JqHlHUuk0bhSe#*jP z95~|uG5lfj$Q*ypTN9hk zA^pZ#GXm#+#EA#jP;AZ6UekrsCD|02{>1sS~+cI%(X`4p~4zj^M2m{oBYO07}M&N~3?#fo6 zGr@iv8?_+sepBI@ued93+ zEx_$*2r1#~tj5@U586~v{sZR$T@gE`!T(;5!!BG(p@W~?-cqr z$1cJO6(FI>zHopP;MlyO+kASZb^q^b?0S`&zwNqtJ`(d`QzaX4V#ZGb-X`{E^T ziMeTVUZ7gE?Y?qzNPYb9pji07u#o?~h{_U6>O+r>GJd+OOMg+3KCuzU>rSl{qY zD)}5Db#+Z`+|WFcIa8UbbIhqRtCwQq1_B)jQh94?DHD@_*f0q;q@!noRi|>iSjWFv zkty*Xd7t@O7=s{x_aKE@EKyp~%VV9EuxX4ktQj{Ci=kGX^!?EKVsRb~HJ)!+p5^M; z$7EMC<>#ORdo!nHEw$f9dv=+5@{Djse!1Ehiz56T=y%Ojz||`)`bGi6a%*6# z_T-dT>HS7vDK&iklPv*qJsWnd>|&P<}z=rDBn{bV$@S6AE+NH&^5d$r@Bw0 zPP#`TL@O%|p}G=V_y-@@8`JaF5UmQavkl*BhQ7hiU7N!-peHPJl$E9ZwJBfPL+u;B z`@?dwqC|QlOl}N&LgAj%QaiN^b^e}ei?9I8rXxbl0?e?qKZ&fC<=ntu1KZ@A^^#s( z%1++KCQbHY&r1bl@;o`5viQ>{@02)KI_P74Mkp3g49qXAk(rPOHnqlyN#i6fHN0Lgb?7 zvN#w!xAjM!$jbpoA@Kl))&)%2Ee;eVoCDPo+A&nx7c8$R8l!NJ}@#d2ikC?{4Xm|Zes$=U@I2zR#7C@#gJT}^_9phm28x@ zX7Ws$ah{B!RAb*{;2oT?j*2Y}M1^!#`>e zj&9TGIu&bh^Of1|{gSP{J)e`qU=dE*a{NN{m8-Xst#Y}%*Cc9>(U1t|-lB*gc>-DY z^K~)ZEqHp^{8reYzG&sZ;8CarM)-F67(k^^FsRNGkd~3~_`Bc!9e@9Ce=%kty)6mD zg=q#H>IRpvmbW3AML+Zo@Q8-dti83F^V;kN>1BrB`>K1mM6HEB6mCEdVv*Npb<*~; zQVetUM_NE?O<`TCT8iZZZzq`zc(fAGEOP#_5|e>yujt|vGrtgWoe z0QsnVzx0{&$Fz8pG{Vj@Yulu_Lag6OtF~HU)SvJ6gxWr|*dm=PSF=&~m) znmD+g-iqEOXJ4rnNJC`SNVEaZ>kW#^pJ4y))xDcsO()HEXrns3NnzR_HLnrZT|%li z6Lp)KotIY*^jejlN|)!y^+rkz`Zu6G@7w^?K)ITk12&HrUJty^=Ngp~PgXjOCRquu z$c*C5`AbbdkNl0aRmEFYxm=M+)oNVPR(`B`*6KI?(q~Qu%pL9rV+ZfP9Nxx3#fh`K z<3(1Np9C2ga#Z@&>Q@P`&lsDYR-N@DaP57Tzdl^>r%=IY4=s-%B2&U?qTZxDMIO95 zEg(;=e^H{bDrnqbzFvOpEdxdxJX-ej;}+<)lG5N>F(ovvZNEG7%wyyJDq>dO7i)!g?s2dV@AAXLd#~Faeu+f- zT$innjFRQr&zOs0S}L8Y9h1hp=n6zgSWfmkJKv{uec=Ax>^dnDNMrkv0puM(Xg z!yl=IMMfo;mSM5k2f=n}&QIWpu#lE^r}IJMd3kB&YKH0MoI2xZtK1+C-n+(F#IFey zKP?^vOM9_kwtB7M6VBeGH}l!+4e5AdIb`^a^NfgLe-PY=8=W+_dT)r;UG<}d~j#pF1*!2nZyX33Y$d@n8vL} zKd(F;P4ef%Hzs85S1Bop8ePxJbSX&dHQ!i%ezA-N;&~!~ZuW&gUcR_wwpRMgxXiH@ zuKwVP)hBieNnhJp(>VN%;R&lZPGmS7h&b{PYoYfqH#l+^h^_89t1gE9i}h*3Pq{(C zf+UE3)mzv8j6j*{JozIwD|5x`la)8_^EqlS`Lzzj9$Z$wx`VKqcl(row>q-v>|7G+ znXJKw+*}i*o*hv|rH$5cQt^>-!>1P2i-i^_VEB4L0}vhQg6K5fF9M^df_yu)p?KW- zm@NmkC#d0D0H)F5pp{IR3{4r&GnUa1TatS) zbXPOJEmNi@@6+IwR3aa+yU?9&(LdB|Nm}2u5ZfNtMoZO`19f%M*9>Pn8w#i&9g%e`nUynj79hO&+Ux`9I)LhdUv`}o zF)nffxgY456VrbpWHH$dS-c0k;K@WndX(tuX;%HXianJh>{e1t5r>&})*99?!j5qMIl_$7?im1JIbJ!B}`Da}urON8t#o{JrM< zpA7hou<(Ju3A$rRfU2QkXXs$=NciC6n?+u>Mr%kqal2v){5RHgsWF4UZr*fp@m`jt z(R})kq)5UZp;qhj2g}7qxi?v7NS9a~%}CmZj1H(YTOXv~;&f)L=)-k_$-Ux{F&=Hz zy>b<{xs=#NbZ?yl6tN9=!-=;ku-yZ{A_&e3rWmH@)$Ww%WU80sRakKn0rtYxLud5?r+uuEbUD*h|S!3dhgjT7;$BL@B z%Uv4Cno96a5T)@*d-dpBJI?`Ul6gp%PXhoC>CaRD04b0U`$|v9fWZO5`Ts2j+0h#Pgdp5$9^q+K9L(VZ9piKuo;%$5N1K9Q@_29hCL^9TI4H5D z$KiK(j@v)D{i4~qaCOFOGpZ1EXI)bY4M+TAr=XVDpKh(ASlNmv4ihx9{Hi+tfWOAByHTESt3TwN zY)M#Ly`Mk-T(7a)_eQczC+Wv~u9o6!iY6`5^Q(RjN@PUqW8*B$SC3Rn`r!q8S;yBp zhvD;`%%BPxVg5Zm&t&($Lio)=SRYujxwa)Xs|#=2x?q;A@jAM1T0(SooK4`|nKL*J z`9Az<4`ZXToF4}$A;88cvfF_cRil>3%iNw4!toILt%**oNfcO8D^tF%tR5VSi4Rqv zrkKg0t~(pVH*0u|By;DaAh`^`NT1 z4)5-f95zpcNj%NV;OH31mj@;F`oFb9{XM>2U*aB$U3;Px<&sQxfi(zATyD<2sqdQP znX``({BG*tmi3xLFJx*G?Y#k=^Nd*?n{P-E#J$gL+mNP+O6HGV~ak^6t68zgtlEIRXJ081U6MOX|04 z)Uf>vbC^z*D7tdo1;=$C6El@!+hYmG5%c>G!qf(Knk5UGpmV&f(^oL{R1P|RddNxl zIB)F;hUt50)^D<1@=SCL;>&mZ&{)%g5j;?g{RT8nMDRkDtj1p0cGtk}qr`H|CC(VU60j!Fx=Lqm&5HJle1 zjn%1Y7+%>>zO9G2P1*a&@I%>cm;5_D+uWw&KxOV0FO)t%MRVx-$q)&(>A+GFZLHy8 z@0&+Xvl;h>gTk@Yr;HoZlPM>Cz{YfCGAuTcbp3}KE3;8=AiJ$fhotyARIKKCO`?J$ zA*s#+i_b@J^L@}lKN{tD0UXhBH4hrnSLD$7omh8Q?EPfp;)Z5<{Fq5Z5X=(t<1_Jq zXfZ|0XoNO``QjD)Qg0sVjf*}n>!^v4Mhw5)beuLDIRPeO3m5S7(@2el6miR z3Va}wRiCuqykWv0mo^^^K(TYriqg;m@yWFxHwMIBtN&VK z{iLSemW<82nt8D>z+^JEjb0NJq^6D^*vRh;43YqEd7K(;-|}x11F4b5k&S5X_f`fC z2ixJ;>qwaXgQ{dshC#Vv*&q{y@@#Ibrxmuv3(OI&I|)g#7BYk^xCKMqN^M0t$_OFM zqEYcO9V%STM_u`2V*S^mWh4Dee}8rE<*tL)x*l{fZ%5jt2;iynB+)_Q>verZ%JlpHHPp!RU zqtO0vXsY%N=Bn#tRU8=t5i_VYzIe!HO|mwXmZ&n+vTeugW`{x*zMM$()@5x=kHFJo zS}unxEev!V=i;EfW}=^d1Vg;G%LL0#vk*;ITKP7w>7w3u0TOax?>lziFD!oMCj&QK zIDgFz(+*adQ|aWjxd&V!N#Ue_&>h3m!EdSVN5%98BK4^^osVjJ_NLeRAt*(VDq-B; zkz>-u3nS;c^7{NhOFVMe71OEIU#Z^UDLHT4XZ~YMV>GH|UgYk*!(&8id7Xoc80k12E$f?!%I_92#yr zH>$`sjFF|m=GqR(W>dkYV-9c+%u5PeU!q{*{`F!x$O*F9wfFJdB03X zZfXg*+zm;d3;KQyQUC2e_G=mogzfi#Bf)32gl?0ETXuT?`rgZ*=##7=DABQ*v?(wU zJhjY}b10jvF`A4lYJz&iypxjrEbwPqcX9HvW^)XFov7N4&UoNiA}5d7cntL4Oy!B^ zg;s3C=MGp-fzT*XyN_5q>Q@J}e?LMrYUx6;R3i-PUf^v9Fn3>oEY^12^;}zWW<**^ z3)}}A*A@pgE+s0BCoOPtlb7l*_K!PH!aVtWP0%3C})L4N5ywb+T1g}$7%9OyFs zee`8Y>XIbrS|X>8VMU?UC9u%54ms(($c08T;sa~dG2y;$wQKP*lPIBQPc97^>y|X! zD(}(xBd)j*oDO2Idaf~{ zZdja#zNESES$jK9%uEA~GvfBQXY?G_k7Any;gfN4u zc(4qivbaHv*T#FBBddNW!m@Qtg3%d-zUqby4yNRo#oSC6WMIH6PAi`ZkHWHo{Iuwx z2Mtq|65k0S7OTKhX>93$$%Pxy0TMdww&ns#+I;rT{$W`7#vjMAC@I?XDC9Tn>moc- zk2EQ4n%xa5f_U@ti8}Qlkx;Ne@P)nl35*EDpva|f@pDd=ZY^4sphwK_UrAd@E|P!r z-wW!0Gl8HIduDJ)EVKDx!`s=(khjor6y3wC*V_Td`1cS~DZ{g%NY+OZA8npff}0V& zRtdS*b-r+M<_3-e~NIiluN*acEkohxZzmy{)bzuP zvv6L93*Dc0VIt*IiO-eBC;`SG@#>QfVwEWZZj)2Qols+hbdg8x>gNk|CPe$?>R#G6 z`0W+@! zCM$3%QHAg$x_|b|F`a#Bg^lMRO)@VfhMw(bJ4=cK3&u$~8C2Rfy{3--l#12oQ zs}#KIgpC(Plh>DK{YcKxPzlQn{*UCp7apP%7cKbOHcFY%$j;k+txpu#xh;AF78_!2 zb+m8GZrJIZ8!sW23pbeQvbnc^t&4Bblzvx=mz8VLOVM{*(Jg_yl z70{q+iw0unDk4WhRr9i_g=MM@vb-V*@l8RN{_3~+AM4X`0@xJ0d!y~kid~a-zV)?; z2FY#4$Ai8j1E$yUb_k?p=#+f+nEA@`Xhtl)r`I8US9$;OVWj*+_S37FLu+@b8WTDMn;{P4rP7BuW2 zK+NtF_xgM9r6#AzwJX6Q0w@OdB>s2ooh~xx&fwfch|n4b&{Cs)mFYp_eOk`+{bLUB zhKI}N1@yPv4DWmW-x>z$2D-I-=8XI*;qsxvnhAgSS{i6{nwy0SVdkps{A+cSzbehf zwR%WdzwRZeA(o|$A+MJhZp*koQjTRoBNLm2L@$GoH_B&wz`_U0mjapsThr_L!aOLc zW6dj;J(M+PQFxVCN1$jb`MybtC5pf4OKPVaUlvGtGd=4jBixt;QeGvzG{ zGI~Bp_d=vlw;s*Kx7-sdUVi$`W@=J_&pzb=H#MZ!Lg-aV%`FK&R${v08H=JfLi&TE zU;AVhq_HLu`J);pQla4%#<6EXl84zX?~Nh5Ms!+QYxKI{~nxxMzlRcC|t}yu2aQtlV?6LuvQCkpnH|XYuRlt!87yi#` z?_6W9K@;4^v)|uOO7mx!KH*4P5?0ARFo;q;n=PDH&0Hk?8II=;Vhy>UBdu5cB~?;k zRWA&@zRU(PVfQ0x^7xh(zB_re$A9~#FVj|wAX-Ru{ZQ8cq%M^N9HhDSM6K!UZ25cH zGG7#@O?>y0bdrG0U46WQ#naZ6`m0kdzzlifi8J?g(TeZKYKAH3IIxSfKH&*E^jjIB zz|KNZ^&ESnxItqB51-+HiHM0(Leut6s;xb%B5Lea)p-cHgfZfb z#+mW5~demAnh+C>f?F>r^7&-e|osnsN+xR3BqSn8-zf zUoba~*l6&&DrqpD%PVQOj#$x=AQp$@t(ax=Wu0?~Y+8Gw-c!gdydRC>u8lFy<$*<& z$}EZ(Oic|kH5sm;=gWn7d_$d6i#+ke`TcsHN6&JrMmA~!U5{Vp?VQXRn?2~v?RwSd z2WE7@%Xq(TN{tTDw`{J69WU~i=qKc5v(M#B|J6{vUN#%EdNg{yYtCMm!=-ogN``Z0 z=zLo7bnY!c3x~-6(@{jXLt!L@-#vM0Vb*kceIu{8nQqv+ICtO>l{*8Ht7TI+XheNg zcfWp`<7%%Q3(B^tfJV|%H%U6&zFBI2STnm^I^E3xkpg=vvNnM(l3*0KtH*YZyZ>8p zRR4P8_DqSN)+czG!*uq=&OBG?R>eRtzi(T0zqg2B@Y}paYwg=Qd>=vEsC2Zd545kf zgiuxF9H$_V=%}sS0X`V0+88gz+E2Ca_5-RjEtQA$RRLDXi3Guq8L`@m>PB;lNz_)k zFM(L&lUosE4eJUo({%?cQfEX>Z8?T0S=CojR=25hGVs7=>!Oi9K3dkq?$F@Lu}b)@uTG|Kn&<0?e5 z<`%USL#vqf(0Kw=nLVy@fi*$oNrYKS9|fox%x|v z1iD-=MA!b$^)#Y_4)F=3O6i8sFk^vu&*i2eFxk&=opi;r3ihsP?*VjVg?Wv!Z{tO! zt!7?zJ#ZFW;=~V9t)Cy|w3-0jr(*79VXd4;%NC3LYesBxOI0|ZS@78wCsdR>8#KNB z%0@1?^z^C>WcqjbJuB!yUqc$6%Hu}#l^9OgO#~RVFGm6qSO$o|TUYG9JE8_E9qMla z!ZwCetD^Pd5=J-vrtjC9;c^<(>AJ~}-hvMs`aWHfhUgl3&$j7 z;KbO5R){+iJ8D3MsXYaH)-rn32~4w5geMGuL(X)^B0wV;mH1ID=G1>Ou-!w4E;Lz? zsKFrhwzDytiPNC`wYacwM?1^Mz&(EJ4iyFaV6MFvd0I{i z*mo;esN10i+Tf>9JI{Nfr)w8b z>-Q?t!3O2a6h{)_&Eqvl4K-qxbjYLIOKs#bAs{IG{g^&w3-#H$<1)Q z={al5o}7@iXPLv6T*}CyV;2=}-9@(w7E1;h^c<<*oOci1=%^!aklQ975NKe_rY9RB z&&G`XW7>^-q1Vlg?}VzpYc_zc9@MWCKu9@dy`d<%7F`9m&MtVub>rgZrUt|HwFu>R zz)2J0b5}ya8M~F|ye?R%r`8P+IzFFARaoyI#n%&wk;a|hmW5QuH}w;Ydyy0=qoxhb zANdKRWtWc#qg2Q1U%m%q)0Y~)8`i?VQ%z#_Ao7xDTtqtteFeIC8XtM*zweW9yma;{ z{g0z=-uvLxV;L*3pSk`3T+(=&w$gQos8;Z@q`3k1ic54&;KfJNmV>K-!dF7eJS7`{?DRv!Mz zAO}dCPd#jQ`&PZz|7jE6Zhj?E?lN6zdC}l&zL)*ikIT|S*7H4*$~Tsl@nKr7OCGb5 zCfdlh;V-R`E3NNCPhk)DUjxk?HC-adn0cV+ZO!6gRreD_koUQkMB9^NhUVa64zHxEz3r!tET`J@SGgV1ej2Ho7#K?5c;dpKN*5t?VL7Y za(i*c59t%uVFE54EeiRwrN{N!DB7;m)&b}zgM4OF1Me(v$5UGPQMhvd>ycwEwKaMi zLFInii7-2Rn3j83iercvOQ9@w3z8V-w5>A8zP6YRUwNMYkM`Nt{+ISy2A;$gP|pNt zd;h_b9tbAPjbX>26a1j@s@xRkL?}U) z@>@soUcsay% zszydWYejjncTIf2TcKux)t97k?SGZP47EG@8a<*@Z=|y3b8@g>c=exJsi%R01~L~6 z7$d*ScXG#l>C!ySK3YhZ#lO1Z?FzXkQ~6itr>Gb5E=G&EsJGs1dxyRI8Sl$t%Ie6_~xnoe|_ORvD*Y&=&E-Y$e4b zmw&Rjyb)6q%ADvj&a2e_@W2Fjkf9hluIO58u5}xMv>(xSJL{1A!oPNu!h8Od>ey3 z+h*Zk1nOIBliNoZ*YCLwXR|>9?8OlI09rx9LHIsAJD>)|tfck9U)7<+^Ypp{nPaU# z57!#$W~iE|qeqq?ftyOSLW@0t$eMfEL!W$$?Mtddq}}roO~Rhta#f|gv1uAAyy>0B zZTD-~k>M|T%g_(%{C%4`m+JG~zpgr$PvO2yP38^Uny-v7f*U%UmLq#VB^FICTTcZK zB-X2k=6qR*7T_p)zNVoh>}^?|pG(<0?Q;yo@z&QgqnpS$z4?-aes)!eAI}xswM^SI zEbI|NDQbl7bEL*RP1@+$?`40La>+b41*$h!xQr7TnCPB7wBC2Sbx`X*aCu%*#Q?_^xt!`$Xv17%ueZxch01ClWZA7)M92tDr{cRJs6T$XWS?eE7 z`vJkC@;-2WN;gXK>gR`fS|jLgA!XSkcD@oHKis}c2BiugXJ`{n>lpr1@>nL1i81y6 z;O@Pnn%w$$PdygI0!o#x0wP^{2OA(DAYJ-VIw7Gaw1A?3^bXRMDmBtl2t{h>y(gh} zNa%#n&g7i;eecYyTh^Uf_pVuM{v{;Ydu2cSdG_!7`+mO1St(I7eI9m|3t;osS3YSV z1=&s@=iL0Q{gul>kf%;Twv}HLpZ%`bJ<2!@op-47ajpKsuNXd()y|6Z*g2BgD(|Qn zGyX}`$UHJWjIJf5o^I!G4lixqerKFiv#jNOXYU|d;C!l}RP9?Wuk#bKGlgjwptT}1 z(m2c4Y3uns17B}p3oI{xFuN5i8h%>65Z&=|FZ!7ldSu0lm==cre64H*b#pp)~e{}?Wl<^2G7a&gk$ zG}ft*wp12VhBNZ3(kka*&`ByVb1=X)5pKE11W4=b4h&15?rqiLjIvN#B}rIIAB_g_ z2~&XyBYNG&=C3w+13T2q$tjOIuzVdN2xbc#m!foIEEfBE&uTM9_*<0=e1Kx{3Dp8S zztbT1^-l5IKoW2UodjOcnI9idvPHsLXDuHKjPk?xB>jY%jn6W(H?HH8QUq$*kR#=G zAUdF$m}^X#`Jg`h0!~-WDI$!rX6x$t_Its@(8SJwh!L#x-eIE z{tkF)B)uMao1^1MxDfx%!jElb?zp*0$SiOwsM;Qf1D6G0yVM_nQ)*CZ3-ca=Bnf@1 zA+*`GZ~rQq{67b}1I}kp{U06=tT0TpeJx7zZ#p`9xtr6=8}QnoTj}2~(KYh$FLQ36 zH^iMe>{DCQG3>=cE@nCdCCFc3;WvHNDf9icDlXoBLJ|P7Ww!#)wzG)uE{eSpf?^_+}h({_?J~I<3r+E(f39et!#0o57 zYi;(K{_M5R2zQD9Or61`E&P9aq?uF;0dCU{d-gudo#MJ-QJsKQ7$X#ofFz`hC`6x-mSR8P#8;kFxCX z!n?^RX8Oy?7#fiqX(GxIW*%1ZJTVl2y|m?kV_Q#W+b^Ob01)LotfwKY8>y9B-o%19 ziEewMKDPDe)q4fVt0sfbuN5ts1(mUl0oG-pBfcbabh*Lcmb>+bNbZkr^CQ<>Vv+SUtBoo$b{JC}|?u*oMXS#~3;P^cax z)=x7FefkdC^#z@Z53j3#eQJPgSeE?yW|D>WQLhbh=6R<5ESqa&3>d);WrHmtgSAq6 z=N{vTJ@!IU?pI!pwOhY*i!F6oB7$d(da95U`m`^!)iUdxtSo$v?_p-9Kw1Ia&6BR> zjs1#3#rn%_L^;(yWxCQ4Gtc?v{X}Vtza;&(He%GjaC%$Og|W4m64JuI2a6FX?d*Sv zUUvXtL-$2gl-7>U-qxg)_!J39*FQ;ah>owIWQ$i4g#0`8|0x5sGkmWt1h5Ho%QOl~nc+677-ip-NuSM%%4mUTaeX0shScvkxP+vAf3m2h>3 zHCdqN@Iy2BEF+8Om=$|ECAZA~HZ)rt470qY$}BRLkC zy$Ud5X<5bBCt*$96aoBZZY9{Cb)S?7Cm?y%29 zV1++WxvB@8V^z|8M(oVkFSjmA5RZnE8SWLzKnobwZ)aY6Trcrut)Y`|J0axlKTa^F zwoq>18cfR|C{&4g4B22JOFb@oRDN`eb}#nPQO2d)!dn@S_J{aV8Gj$2OXuJp%Kh|8vTkEeRC9}es@zCP zi=#rKo-7GCzm#u;J_OP1Jqkn^m08&l_eaCo2>j9nhbA0Hs~}xv^0+ z9)a7cHCW~ERR2JdhM_y9#w0myqZO&IeTg>g(e#RDWyE7C$7M8qInbf&bM?8CK9J9}7z2c31`L7zMGWpGizbGw!29d)r!b+W&+Qja|>sM8E*v4lKi#Tt1Zc?h_0a^qJ;Pcxol zSF{Bel%u`$#>RBZ8BtTtMg0cx(eEAYYhrXIAdLPQHlfh?2&Gmvf`YSJV}o9;fxNuD zztsSLpdbr7t;hC*Y5kn48?d4mBSUWvU^3yW_9pf@j>XS<_}|0;Dz;ly9k<23C$zO* zOWm~lp(@q;Rr8=iwom_7QEbhfq=vyENKiEyChlio2_9rU){{>cJZ$bJ0e^^Q?3~In zH~jks&72kRnpBijD;zmJXbOpQugL4AFZy}?%9z6);b99}w*Dn9m-y9|e8;Iu8<+aqL-V zAMXA&?d#A)9&U#UC=m}#$nPvi774;yFRUrIkG)JKlq^Jo&Qpslg|iy2Pw42bokq+J zO?B&^_bho1gpZp@lOx%REfwP|7BjBuzuDWz*P@UCLx1>PhcCx)X0>};4x*jrEGnt? z)yn*cQrj1{uF0|aFxI7gp#K&;?Ao%-GrTJ^*q;Xhkrq&j z@fMbig1yOOSqOZ%OZC?>we(f9qJQA3xb7l~b!c5Icq|_XXUQ?P; zUO19?4B)@dhOO&V&i{PMlkO*Zhr_V-P5lNp+c4@XTFTntYgvl8R7M6Q&hwx&pi4#g z$!~22b**Hs8;S0?C@EFrKw5{VLbhTc8OVZm{?`8E@TN;+wi|={S*P9OA9c;)gKwsaGjqp2sS6Jd#w?jJ5HsJ2;n#QkepJo86 zd)KYihhVy9*%ftA;2S|m<(O_(k?4KOY^%LeeXq+GMpLFc_gaXD=b%_$@of!JlMz|W z-7Bq6X_4D}(EXNnipQkfuV(a`#M@{|cd=^0YM68JGc12p1)u`f_Ms*yO`gIqsF-HW z8~mOQeNSx#v9K)$dYxS!H=s6a_71d>EIsQQgu>B|H&lPLlpogrpsQ*hzc z$p8H`BFELy33d;Z;Ux25`;WV31rePa176!s)5gi)4@FjyA{iAF5dPve1=?S6F1m)Z zyO^ca=3OlKDFK6&+Pp8Q`4B__Dx6E*YFc!;&^)#43eu#!q1L*~p&ghHr!@28wU)WJ zq;@3;&nY!C_Q-`+i0)3)*sgg5dMQtwtIM*;GfS8_J4)udO(W6B6);U z7A)mjRRVP@@J9?!^qtBF{^+^jC*8rcy0ID4hU1KWpI9iKKUZeBRZfga26&x{8rcT! zEGyuarwM>fC@_|I*q`UNKFu-(+Qx&~T68;V*RCHr8)sY=-a*~jVBmmlB4 z3ceIFV!%BSXiTkIROh-vOSd_4t11OZY7NPd+)A_*ORDKuX}z4C(6*2PNI}0~ zaBn|44QYYnYuO^A_Ln<~O_~{B)xSOwp_z4{0wUlqqf5a_a-Q>QvoSj5$5>g&?Km@A zWscXYi3)7JJ~66?lCE*6lv556L27*Nt@EX#AJ8k%$cE@TRnZJrw#TN@e8`0Qu*=ld(jUs+3jKf zqIf_|nafX$qY7aLlJi-SXi_#G)E%}nlp5wSK^kA4HaazYy|(#H;nK&|pnHPVAxsg- zfai;^Xy3^sS&D*-OXceu%!5cpyfb(+FhTJgKoJE#?Y-Uas8ns$%UYe*|1!SGH9uc+ zA~HFQ7d1%DTL}1D6JXCCdf(@Mkhz`gx{>han}4H#EpGRPOO;K5%J~e^VCg1|UXvJI zz-d{~G;pi8yYY0!V|5C5))x8hR}^D^&VJY@AHSz4BVgPnvUSg;sQ|9`0dpc9l>8og zXT3iEwPUi~q>K;=v<}A_cOxk2+Q0RM83I+1`vF&WbE{)}Mb(eP7&7#c5 zXW!pi{~+>03x1&&OD>BQ3_r0Vkfn83O6W12vv&wJ{V0+<~mjH*6tU zWpmDU?P4tJz&JcbF(}#m3T)0en>C2Ikp&e<OcAif@1YBXD;<2 zr}Eys(ZpEtq2JB=zMv7=8JZr!i>=kC35PWQbjiOVvyrUBtjdgKE+(uPVa#JViawyy zm+R7>RXB3YW}Wp0hrQ{+6%km^)keGBo;&nUk9;hpM?OY18a9lc{kup0${I-GjE&;( znto$)aIKCE-#pRf+aW2NE0^SD|1>0$9~&p z0xjCFJib2VA?><^Px9AL)zXaecGH%^bTo92c_0HHc`{EaD1zJzN4TV7L>5_HI(o1f zrCO+fgM^RRP+9pq?Uh|@g3s8VLBRCHehk}1#RvqBV!;`Vb%;gf*6?=i7g(6@9?P0r zZg1b-Z2(jZbC;i|nZ<2G5c4ATWFkH2W?UM4>~v9Yd9i#q@+P|&J3cm61Z{FiOqy0G55Bx|5@$C z37kaW$rsBCqqr6@2|S@)V_HGjvP#=1y48TNCmy9YB5L%8bSxz+(nq45eFNd7_&L9I z9ZVj$WWXVB^OR3{xc)>?+iR^rHcfk3acf57BdOtILvY_zm>rGsC9-e_tK!c}g0Clt z1^!G1{CV?ebjVjJ58d5@L*L4xbiRT8@bm=B2JecJopLFI_F;cvQiF1$aNe-6-y30c z|F#1w@<@Of;WVNnSrKg|?)&82Kbl4rqF6%HY-f=DF*VHodHriXlT8Su16Stx3h~)U%vJ8<6 zj?z>I&uUAb7O|8Fr{Veyw0~to_f%rbe{%(~HwqpeNuy zJmABfxVXm;3#Hp$52l}LwJ0bz3mSW%*|M^2f80B^InjqQC zRZklp4FEn-Q&Ny6g_h_hq;ZV=0)i zFIoNLWDNd591q5_pEe6AO2HOh`wonP7T z+;z@RAV#i~=8o7f@A($Drf83QNtqc0hJ`GrF3IVogw@uFf>{WnZ&p-!pa}P6*HhRs zll%V9BOM&h$qFc$Bg5AdkvBFr!4ADd5lpV6c@}R2B^0f;X)t*EJQnb@sjrEJswADc z8n)QVR8j{p@1Pd*Jy8!HvvJzs%6UX%nYr@gQh)+~@JG|6V1!h7ryBBIjL#<>rhNL_ z(-+AsmJ}HTjS)B)g~Tu*rrkTG&wX$p{EGy`M zUSt#XjIuE9)JW{2t1uTWqvNN_W%Ee)tnuA`OUHflaZ0oaK<$h7iCV4KRLAr@x<{aG z6cJ{ICCD08RP6(rO%^Qg1&R8iDqqq*#>V_ka)MNCI_Z~jWv4PFtnJn9l5)ED(5JU; zO;4%bnLU^Ev?+{bI%-@wQE<5R&WgA061CaF>r3~F??~oGqiG#5ooFTa0?JR%*$HPD z#a`E^uf*9=st<7??$~{p3?%@nFi}b6wNB#(dVU`^MY7XHc`To3iOHOO=IuppqKt|= zw1C%b7e2%^?^NwM3A6V6T#6@2Fu|W(-+?}$g_jicVzBOD#e(XA+Aqt18jusRK%hN8 z7uCp#_oMmj+KsRF$Ak%=aD;TeAlW9d8h|9zf!&7rMt}va%@S}(OOD3hvf^ilpimtB z*(%?~(Tln}O$RiK%asRF%Lwa}42tGY|N3S?Ye83}_14ur{ z*|h(`!SMf`Or_8NwW=^E-K=i!Fj0A*Hi(6OsJ{mF+tg-0d8W@oaYn$6R`b`%Siffl z_LH|ji!`zMVne1#x^a9-sW9SBtrMQ4aA$a_VhY*hF60j$IrTSDs_Ez6Wn=bq-?8~> zflZsi(f`u31HQ>vs7%1Hcw@G?0aq>q$~*?Pa#ox-4y<1gD^yE4&iX?pFuYb^?8&l1 zd;|0OVQsO$dJlRv+MoMW66;{+)&^!AZLGxBD*D2wtyfQ*+vz?n0^i3 zD1=O3Q|Nh0Dl-rn+w&46l+WbWr@#R^&O9Ba*-m z0UqfY9hi&^*iB>o!HkszXIy}!h6q2q{dOYf0jUvkl;IKF(-jOaRyTXWI&G1e4&j|E z1@5?7AZ+ZcX;cu})G}RK*A4G*QlZICrwG^j}rT=RM9Astiu$WlOT2r;Z)#cu&F=G8B8~4|DPhu z6IeL?|7Km)fQC(J0#ZpX?KrAO;MtUT5(89cy}`4t4r(WVq#TR9G6+xmFEVd#Baim~ zdJQ<^{}R{qZ`j^HEsg)p;Bl(U$C;;a5B49`VGZ1k9N(5XLUCXM&(feY5rj>jo9Sf) zpBT%#G6?@X5%uP_HwPB@nSDSAR7jR3hZUG~tQ8;5xUvqCt)aZ}9OD#&G{!J{NPTSV zb$wFd`a-m2Afmsdz|d;-@=l3@R1%Y;MuxMYs z0~vZ~>v8|J3B4O2n#UN_-4OWv7xQ12CvDz!LgSR;E^%J+vX-9V1}Rj$s5&$!6sVgW zG-l`UA2x)VI8-fkpLyZI4~bhAl{Kb^mPmYNf%0(GzL{4<;m_fc znCw}NJxZ1WmqX7s=Ntc4zZIpQ=2c}#%s^zMCvYvxtG@)+by#C^oOwS(=Pmal$#Y4_ zwoPXfMSPIAkkKmvxYAc%Z1WnRD8+|q9e|+H{GB{-@7W+@%LROWdI!$Qe$dQw|4JJ` z`!*}0(lYBz<3krNDX&9(^k-=Eb?OB9s@!QxiF{wcCTFjsm#VF4@+?(UM3@=wNU7}R&aB{iR z3#RtoJEd$){c0~8Pv7yqla(@iJi#fD-TycwYr7sDx}5y^)9okq{#Ax`Fn(EQXYmrC ze1R3i&TurHh)PTB;3bq06(Uwkiipa9T=1XLiW7iT$Q~wpKzC`e|>kd7eL3 zn4odMldzjb3jt%%IwP*M4?9fxyA9ldMf@5)85)guL@ckbJEl_l^HeLYUs!*jdiQjK zUb*ph!u()OtkqsQ;Sg*deeQjbnk;Ze^)R89gyj(3^N~p0lS9G+k_`P`{FL8-Q5*98 zyAR|p(^3#HWjB#Sn_7fs8oURm99us&4iOefEP?xFIRTh4=~Kwv2|3l zs5zLg4`D+_III6WX-UIq{a_M7{~8_R&?>z$`QXMa3C#~!H6kuZAl*woy=?xD_u@;d z^HuvKBUm+FP$&xy!dgBn%5CHuq`NmJz+zQLz>X(dSEpI6;?Nn|;0af9y-Hl3uC=zG z27$|FdL&x#r8-j}wH(#h2z|%|3VMjgDcEx8!z98Z=ST$5rjGYAfm9i6H4ohdis z-y&&Be^|HV9KKZ1DDM-$rhH@mHNW9kYtMRuK`_m?@K^pC*VB(T7pT5+KKb#^xmdh$ z(buf#y0PgSyYDjK?K9RpcQi^~u$FctF>j-_c}lGv>WocqyWrR?pB-GbrpvuIx@H%+ zS$jvrXtX#X9wMESOEb$66vyDSxen71*);YylOL{mT4|qhcMY1oJwP(0$+2Tyu+O63 zWpV4aqv1t6LZz-Za$NuMWbP2$@HK8; zGu#BYuO2OaVGvs=zLTGBO!Q^G<@$T^=5B&qR3OE8a50v4^$17uSk6D2kSp91^0hy- zjtHO5_?*T=U%LIKYc6*XcY3d`>D%2SNW9C7F;#w9hJdb0?|smjGiQOUelJ&5i0H$&oEGZ5Nct0{FZyLE z^_7#ko&~Z?^l5E!DP2#;q+6mt`1TKl{@U`+a$_Lka6(Ed(Vg7YflZw?;HB66a4B@W zFnx{cg0AG@9Z;B2;C?m3aJi{Tr#a`&h}o5w^Jd;;f%s^WmXxfil$GX88ZU(N=w?${b z2~NgE#kOLYddX}`^MdtC1B2d;jg<5>3*@}3nFTcScigwXcb-(>?#R%FN>YpxlyUv$ zBG})|y}(hQGzoQwF85I%2F#jXMBgisrq%o&G`s)yguQUNfm(jN zP})_Yys%i8G7Fcs-Zl8$YtWL-qHu<_fO}X?)(vi7bpM#FztSAJ=drCnHBDioe7d9J zv)$L&GWN|*o&D%BQ1TmHu`oL}v^)2f!ShY2Az`cmjP? zhPnkmmD7{Y3W==PGI!3@eC}o!5G|Gx>a)3C!0|mV2?zhdFjD@y))$u;&9Cb~&+E&% zDsY^+$`%{ua+^nH!GzgYIsR0ZH6U9>U`wHhaf;~S`qw2u(`jqeb^s+bCR&B$5;U7- zhE-0lP(%T!mmhm?9G%Na-1>>-+crdoZ#0)Sr3y-KuO*5v6eqJL&w zor!PR#Dlav=9N#=Pmoe$I%ub20(Fq#K?etF;SQ$+^udtaoa# z0-bF^#UuZ;vEEcLF3R%V^@CXlNtHIsw!UhdJh>AvdV<<-n7iK_qn8iHe?Epq_V@65 z#d38103QLV*5pzMD%`0fEw6L0vK`t+p4yKROr= z`to+}=VZO9=GLtbeBif}NeS&E4G$jslu;ZmiNM*gN{UdX5J~=*Q06X`+Q&x?Ja1ZU zO8nX`Tn{;G3`+a}E*|Sr9HuD&Fc3uFR0|t6axPyi$Sp5j9kuR&WiK(?`Aw?dI71Kda+D_ys zE*Z`3e_S%U-(@FuJTIT;w+B7@-RNEynAmluG>|e-vNfA47WBAw?-3<&+4f)81N&)e z(2Zl}qY3WwOUznT7m>K2E3_#d{uI)ARw+eRi<$%Ho!#n*J%3O6b^Z6Un1^60>sYQt zOEP#M>D@fOl!7OmI#I~4n>}`*+|qO322Ey!Xn7tmZueNPzHX?t9=C9~Xy)q8SL@=Q z$My;8IMAMFBR9(BNNJ)+%m+jKn>wp1o4n-u@TcCs(OYQkz!H_IgHNr%GpJWd3E+eV zr-Ef(6+-F5d_^q)e_f(bfbzl_l8AH0*ORbaRY4T?R{Um>PQ=2^tOaD#l<+xEOyEH& zUeG$#;^YavR_uIEo9>BdXHdhDK&!O5KD{cftMPdr@?EP)KHU}NXE0=_b5 zOL4sudE*7wz1PPVpkSo{C$c%iRB++#5=UPZ{>js z`Wf#GveFIuWks^A63G4moEg>Nbf9!Gi}c2DK)|hxwWalTNQN*lqvHCehx``SBzHK; zFe6jnP`jjHm@LA$F!o*=H#{?uw1kotgatg z!}?ik6U~T4tCkmAXdafvfXo~U3Rj!uJr{e91bY`rDScTd7bHRb1OM@{T8_7)nMQT+ zT91t#itu1i6vZr#Xj%5Xt^;7P4~w&m?D3he|K&Bl6|-=VVj_LV0 zqRU)1og zOsiDtjeHyRmgLeR8pd58_sWKsT<8(v0Ra&=npdtf6VYv!SW%*95?QVY$W6^m7o2(M z+Ll-CDf%d8oXS!oC>Hp`JAc8UUen>WkWcKC)TM+cx>1wU4mN%%hx|qMI=Y%)4!x6^ zZ+aRnwls=fms7ykS8TsT55mV^8QK)%5V^mS%_*Nh62?&PTDZ--a@RvKP@sRh;~h_j zMQe~?g=iUT7k4c@J~l$!?%G~GdTPYIFq&uReXUC>1#vz>#OX&*$_hWtq2hm>G2bkb z9Wp$WeK;d%-oYE?&s0GDE)%3=08e}ysm*648cUNpnBm1M%^ss{+3SNFPl>IuXT3c- z!D+uS+GuP!EshVqksIIdpZ0+5WAP8zGtHk})5}#`zHb|(d#7j#7Ats_+ zGzq8lK8P94-FZ9)PQb7-XVz*mI=kta=>zMO14WdmtSvMS{=Q0XD0?0|H8=I|xo+E1 zs{F3!*O0z0P;NQk#6{tBeHx|c-|}5P?!WIl`tOA-{K1k9K~{|iRD7|ihoMjszt6bX zW}*EO68xj&0N$+;X`4J7M16__MbEkg@GJB7Ew zixL_5f{pSPN}7i5Qn~_r>XG!JoH+$x3itqWhTcQ?EqAQDv^Ca}ZcoYa{0g)Q^Pn1V zPx*zY1;21nUEY*l63N4;b=h{#iyw+xVCcCdWoQC^B#1lRR-Pm^*xb^KZnp{O&@j(P z3GonvzDCtOu|%x2=sSxCM+vgL5bz@#LybJnR-Kke5Mh)h;{H+0=t{AN=Cn4h8q$xt z&#%MGUR3Cgl5q`RYP`N{F~Zy9He)rp+aI|7r1SgI-QU&^-Ur|M=E3CIF{x456;*Zf z?y5DUZ?T?&-MduN}_sIUzkr~FL7llFYNJ2vHC;x zqsjynH4jQ3q;I&ep>+(qJD)=Xnk7zw(E z2{omxB<34>#|wtUN*mI-r5lnqx4hl zp4E-^C++?kJa(e=xPJ*(|Fw7iUw^-G2a1>{i{gTOJyN^wqN@M={y$pulrx0&e=A?~ zbHJOJ4U3~UW?EDJfn0L?3iXpR(-H~KHjxnIN8-T)goCMIjbS?14~VgG9%34jQm`o? z!kC{GRxr|bJdu}k($^4pnqWg=WJbGY!^y?JMHk7>8L(`ownq*`KVXxuc4z=FTXGn*&`ZR0{1QUNX(_l%Kis1>mxXNk z^t?`s@#JNDee~(UiLTK;bisJJZb@^v0O99lSfsTUV3IhajQZ8FCH?00th0%+qQFLh zRmsV+;aPFbnNXa-0;NDlBiC8+l%mZD`0^(AYw{CzV>+a#w>~@33*&meF4?#O{h?FM zZcea$!=nv}3MOj?qwy=oUTr$_q^=K{?{!M%&)=Jlxu`i}~>w`Lz*&@GDw^=GH zAj>3Uq_seVaT5@&T&M<^!3L^>{Qy_(F$T@~@29$Hwq{5Z>~ zJbIdt>9eR{EMgwwR3V>UTDpD`CXa}WvGaW4_aV2jwvpP$ccR7i z!!M@EjL3|i#69LjygIu_Pml*TmGCv|qoOKX^yR|*!J9Wlh59;(cF3tD;TJeIrx)@j zoB;yoi#C8scX(N3nlW+7stGI>l{K~L6)PgCi+2s4f9Y4+)B5T{E7WcmQ%A_PuYW}b zqr0m-ttYopMRwIrgXvd(DAX7WI`^ljtnl=6)2UbdN@G4gkR(ms*3k?S^LOOSu(6r3N5xLQcXz}x^nyY#Ep_EM zC`N{9*6xGfd$ZyA0PAG&SU2KKPu-HAF*IiQBAIm~eXdmXb(cu$;QRBpi%sM6$9>yN z7hPliC!3xZ%xCw{yMCO+;$7RBcT)qmD%<8`X4vud!nZ?dR1-oU|MA*ZPkbsKUcrk2 zuwK*PfoZRJpcVZSy)!HS#O}bCreHWUQ>6>&{y0+x6G>|~VqyJ$sgpn*;#DfshUS>u z6opa&sOw*KwVX+JGBeK3j#Q%6srcM({TV&wKFT5Z?&#NeMNw#QVQ>?_>h*;s)I)`x zFJlO^s*T@AH*U&?1}_f&q1(w&V4~XFq5n2AaVdU5j*S~4og4av^ZVh>&o#qt5s|2t zu}OT)&oQ2EbwOJm={i4ky}1`@&oOCCu$E0{sX5Dcob5%LQxL*KGtD*8Nh7rBkXzc$TO-Js-{K-Z51Z(fPWM_K?miu?TZVE2I+&pn(wq zwc4V_+40kuYC<49?5g)t>jLw5-zY{VxxE?BA|)JuoNC_C&#l&mZJ9U`Fc}>Cs!TY^ z&gr&d>xP9}z|e(1$+=yqlVK92rI7nzEL@k%PMzSq>8o?dUY-b^KIJouFs}VUro`Yp zk=<8LbUqLnQ>(uzZ7jDUW)`toK+W-NypG?^S-$S7Yl{g-t)?s9!kSKgH3tdAW^>9+LusCTdQZFGFn!Xv`S2_^ z+I=tWaYCRdF|D$DN)Vo#^_)TeK%Ra)!j6i@o(cAX;5G3{t$U)Om$4L3yyocW1S?=? zjVbElGnzgGiKT6`RbS(X2-vnOb`KaJt_{gm90phB*2@mSCNs z`=uR)sO_9?Wcx;H*-%-RmwS}JM}?6T?^x-%y3_EZ*Z+n;`{k>Qo6dwSKsPu`#J{+x zxiIH?`rL>i;ImqVvGU{PFhM!7vG=99E zGyTNELiJP9dN7RlFSfr|5)c7Ll|tr+U}63e9r`BS$}bOA?PqBWl86SWwmFP&c<=}t z12|>(+v2r>6P@_&fLM_P-9w?|Swu7F>&LLb<%y2^VSUSN2MpqGEZojWTe3@YbFj9U`73H-4*u;hnnz!$?6WTf4zw)DouP_e?AirK1 ztvUFLk19WEGS~f>?;-t6>p6qugAwx8FG&{Gbi$U=WADb^=6i~(Gr?IRf4uqe zq@+rCHe^b+qt@z}{%IF>0-Rej{M|67R-3YKeS|gRw~!l8LD}O=Vuz>J5|%0%QBq9_ z_f%`Q*2I$*nK8N9r@0aZ$??}y4Tl%bDk8Wh8H zYV_{QX=$#!A*$USCqLzRAB(P-rXR7Ce3Tvc!qKnBE5t)&*6Fb3p5~M}s`e7y4eqyI z%2#7T_^7DVgel<=8{sSbY5Z@QS*VwhVhBHGb3NFl$M56X1d%3Yj;}YA z49Bbsd70H`NQOL{Z2=?}$& zha05G{OcuukNn%wuPwB7S-~q0xUnnn+0|g0FZW;}>Ms&Lf2nEwfbYbG{@hb+mw1e? z$^#1OX?`}lSG=hzfq0_d@L2j^+lTL;6l(R~sFLeVjK^2G3eQhe#aCV|xiHXCoEVD| z5cji72c96=z&6CKTB1bZaw7TKUzdXUm}hf_kh7^%=erXo41Xsr+~wkbF)(xE8O7)k z9&!;&(&8Wkw&;U~^JeS4UNm;vSe`p~vc9QYZq23KeV3^qE$*WQHO}$UrGpLc z2aeTW*k`YF6DFrMx+{L{RmPJjM!l7Bz)Td8mm$DU4&LCqA{Lu(W7=TqV%^hP`bcZ!(+q z4Yx}t0n`kF37NdWVfFXUTcDDTl91(38}FF!r9~-^6TFM6-^$!G8?Uj-N~!^8QAIRR zc~&j{T+O-HZv7i-eGfUr^?^jD#F92;pn{Aj2%#PbqJR3YOXU=~D!{9tJIm)^cmU7Y zule{z_WNEOC*X|< z!bJCBC#gl}f>U{jN@Hc&9KPQ7T*)9|PtT;=XYQFT-!gmB^>6!fC}HLOg>2%xOB6bv;AHm?xFyFaHE9uLzN;@_HG~x-X*d0%_d^|vQ5CRrIQ2@Ev7`6mssPewEJtD zvwyRXx5iu;3BRX>aETeXa1o`Wd()r)s5dN8_ zbHoXj0{gnXRQ}f`s>;?=x&Efd8yGTRO~K$I5lt~vbfxXz*$^EwRuSkYyYZyiPb{Qp zT~Nhyoi}rn1xhKvvt!^H3D~3{;g$3Fb$ooBBJ$A|I`|jG2olz5bg?_&{ z#ny=wtMv1)OYw3~$$(x$qg|%c8Wu9Y6$s>J%k&^wQ%a}`;jo7HBwpmjfM*`1g6kew zTm2rUoA}oyhqe=~&=~!Tn6PD23K1&VCgZ|ji$j;hSVReK-6`HHJ}LS;Dq*Lo-Fm;a zsTs3R#}V#uESSxi8B22(N(t;uf=RF*c1ZknNh)y%E7yDN{95Xa6_LR6xq<+7C?Oafo&BY%R^Ix5ne5Fn633mp=w zKp@~7J@?w_O<%!8`Ey%+toe|t^pVrbu=)S3O=5Xe!(a>l6G_8<}$VTV>!q2r^ z(@G(`Ms6L6MnyA+V$8S?oYPv{cS}jz95Bq68)1pXq2_XBsCux0pFL_v&`)6@{bwtJ zNqi>5vlH@DX0CLfD0%XWu3OTLy6#Us-(K*ciuH+j;!f;Lwl#a?LHE3yeIe~W1#X1< zRZ}q@rw1#7+B&<0O&T^oRFxdgb7DMekG0c1*=aXdS>6SAZ|$r9%`ik8P!+7k-M%BM zoX$|{Q9f<;rdL=*J5@DmFgNt?Ur>7I_BXjHx)stm@%c^WKHKBbCq<@)mE}_oX#v1N z)a%O8>`!R@qLyWVGCU^RG7#=yHB-OdoRIkNX?yvgg}Nuu3~jS&#KBzC3%#%#*NG>0 zhNM4n7OR!4b*f_Q@lt8TzQVnm@|Y5Vz4RZqndzL){pvV~3_*`iEb6KOg7+#B61M7R zqSovFUNxx-5XKnhPbIq2*I;Y|PICQYuk%+*`)HEL8Rh2~c;f_)5-VZciu-rLSOyUZ< zC8z4C0dU-R5May79m;b-<66(QzNfaASo5|c*?PU(iqb4ND3l&nB>w8VLEYv+> z&9|!DTjb`t<6{|4rHB54x~Oays{hk^#WOvB`hX|!;NkhN&zpmyvL5@>m3+($UT`9h zZVEtfmSMIPs>S0aX?9gX7Rb5pJKy`J_zA*9TbLTS#P3t^&k1}m76dR!Xia`ZM#h*p!E%qE(g-jYLnSN?#INshf7AMO_}Jc{^*wKh0KL+V(-PgW7!q zO?%%BVo4h6aig(BCc2+UoUr5!n4@jlu7xgdpqVN2R;T>9>(skJKZ5(T&8+$$H;zLvzfOZdw&%y6;uORrVO zUNT%?v1eG(|3+YztJ#(E7E{gcPeQr)p*AJbXC9hE3b={F+iZ*J^ULgSHm3AQ=~Jp3 zB||ExXp;IP4yJW#s`f|tn`74f4olOwgjkctDVOQ-Flbt{zG+M;1|RlVgQf8VQ8@2{*nVS&g2XyZ8i zLg5&Sw}VjDq%Vx^1)TK_fD#e6*$2AW+zv z9j3uWdj%rvo;YpN2!-B={MG{<1YG0#s%dAYY?a}S`}D)sgDk-*G^8Oxg9tw9IdRyG zo)q0?eal&BI~r0rJ!j zj?PB`AWn+}w2cW6Zj`dBo8AnI2v$&iyhIFcug(FQ2g&JZ=h2MDdyz!>yhX|GHKWt) zQ!8wXAl7JYMilFl_LFP>-O!aGm%DuPUP0JKw%V>u?^I1S zGFHhqB21x11y(;OE?MAx{yQ?i;f%*D(|B7Huz$}!0+#Ul&zhYET^ z23JV^EnI&5Vi_-&6&`;R*(+6;jSCJ!u(Nhm38g^7wja(5_CamDFo8_hZMjMY{-S%i zua)%ve&(KlV&HSjG<^6fAnRponzCQFfg0w#y~y0GYiH%jM)P?EH#XLl^orvcuiP2F z%hD<|FW2^I8>182LvZhhooyb?&gj*^!R-Sf1aLawi!WZsvJggvs z3&p@O5|-l>ERp=GK~J))4KZF}avlKreWC=BBd&IxZXEZU!JkAA{w`|zbId%?J<&=t zHsZ#d!N`44f`eW&*f46I<9V2hx3#?R2B@ppYatdTb0d=&4dIfX61#Q84dM4bwvwt^ zbNb@)x8)fX`I!9;_)SNbM^2d+GbcM2YVRu;s+3e(ohZzvrcwi{Cgd`rHh4>io;J!a z_QPkh4rtvCrleJV?U%Fh5{?%L%xuIYCEjlU#x z-p<#K#;84~8M$&&J6joK`TRM7rCP1=>o$t85Z84t#b0!Fy^StmRYSeBgRtdNaE9_S zsKpcImUimPJn`r_#A`32LjjhdWbt)D5y2Fl2pA)^3`%!!B)(F4Bv*ff5ej|Rl9pN? z8B_! zxz+es>9k(tzRbprV_C@O$$Qma4b8bro+XY{ZE2;D&t1bR4wCl)xQ?6GCY``f5=hqH z&vM!U!xmr_w zr;D(h;we+JWcd3|iEAj%RyN{S8g)=AJY+p?2l#g;|A(@*KQsJ$?n&)ed&7yx{i$t_ zUl0Coih}=q`x@slq+`dv;dEzFGWoWz>sQU&v_}&+*Sz2T!R(&;kSLs7Hk;D>WvS6i zuF)yDUdH-~b?XnDH?L}^nC6SF*p6qhonjeQg==iG zvvkc*AIqEr^g4HT$)42C*+s1#3OW*Yyv)Vp@xD}zC@hD#1b=#j_X5#VN}0Z1H=ylS zm%Mzk$78zlBsUQDcG4wlyo+#oNd_1^PK#4iZaRz)tvZNkjP)T57CgkE1QsW4^@KZ1 z*2Y=cc|(~xzB?sINWDl9e*GQXX+?T3H*ocnxIk0`z5J`uS7%EqW2Rk%$y3bPe!bHf zSLtu8 zcbm#1Zey?4@Y3-60zw7nn5smpJF1<8+`ALZmlJR5%_rJPVXVyC)ag42TZKzpxvs7= z(>A@}$x8VE2bV#ZZ&uydy~1au%ObjmffB$E+~MTS+kFLD{0UyXfl!4jQJ7vEY*xB5 z)atA&DEtLg@>uFP?N@G}+tw48MD%0|_kK4rycTX5iT zMqP4aYvQHYL_Tu0+w~fL?Avefke-4MqnCAO&^j-yZ#@ai3V~FxzE@>y=-dXMq-3atUlPom(=ID70QPMAaMD!IX*U~r`&lYvDu~UNmgfi+PJW#Kes(mnQMYSF4@DAq>r1Lf~LFmJN99t zt8>L+F?uo?nyL!-JE7;|(>dNx@h7!%cVCXIy7)7)OwC-p-xsOiHSYoSbKj`m5nG&$ zGE`07Fcj{D8)&!*b^3(<5dz$y0>2i%OLnIh>RUf-pduknB_|vb;cp=a-M0x=+6=y_ zId@Q=iPOy9v)Z#-Y9b}^%6>T>*)BZ5pO3>(qMjdw9UD*^^To}{-#Ua&yN+o@{<;tp z3bIlPz~^Y90ms%7hsK&1SI8yyZke=AG7BgP*>P`BX$;wv#`+!$P*boioMf-)4BfcgkJ**rqp&Kl|o- z_1V+ayYEs-Bl(!_2>kfkl*7~~uPO1V&i>k^@?nD@VbeqnkkK>Z-RY_3P3WGb#75VA zJz}I>kiau28CzdGzK|2_Pn}W)WiCa_M*n`i0MEmLtmm#5(1^^E9KH()JJKe4#=y>s zlBP%5oDA9S^f3ask4t|S-xN3Td!%#q%&5BKjhOKJ*>0S0DTgXX7I(VfGxE5~CH{+F zfiWNNaZZdO^DRv^^$Nke*I(VXWJxp9yOMafN`guJd`Ce^fq|{?563zByYlHp!B3ry z2boyB&jnvj#roR}xZE5BCRa!yyd0`)np-mCUk*)#dkYr=CM!d@KO?11f0&ldUsX@R43MG4bgS3#B zgy(W?nXmCi%52Sx458bOg^7mo63W1ZiM8R}XSn5%hLolTmwpTVFy+*rRks!n7 zS3Qr?JDqmCk#W2G7O2Gd(g5(mwHlr8wwk6l@PM#?;0hX?fk7EkuDA`dp75cGAELe? zXBwB{roc39Ta*Fvk^y~LNGYv54D#>*JP4_fURqdPa6NC>3l3x{Q>0D^7xT%Qva_dB4 zb5x))xshWKWW5LAva4g!#x4Era8X24;JK5g1S4H;5u=_wws7I$D}Et?462acJ(4P7iKRnUsHgsyNSsLtye?_aE<9c1;ZXMbLE;eNep3>Yg{mNElqe>K33CnRY9LoLS;QGbNAXRpYWqU2r z0u5B5mh|y z6)xhheb#)aGx@U?RIev6`iUjOHUX`L(2q(;djLR_Sxe6`A zL<9FHgd9*^N!!bsn_qbPOq$Fr?VqxW{J(oVsb5|bIUzi!7yeKj&=B-}5I16lu4NRP zlt;U$djw9jC;#bkENW^(c4L*q64zyYpbVz<8iTPl0aQ*bX_W%Im&!|8&);;!ld=LV zv9yv}Ih~#ozzWjhC9bx7-*0^Muh<44ZHWDT4>54J)ZWPOc~0&`Ob(*W!4|xGxQ0F% zx6i#@)4tLaJSH-No|=izYN{r#hQQt9H|yA|2~ zW-+*p^^V$7liN+JsHFHLK)h(oIA1#B|%lh(Sae<+5u@ zIlKq}3*0x`{;?Ec=uwfRy{vYxAmTHghZybmMnT9Idz~hI-~II{f6$ z2jAO1zY`UijJBU!o_)c0wA`JzmO+cN&@Uk-Q5ZLWGdqcYn4Lps|JPkPfAFyDkPffM z1Mlj*tQmjWw#;SYz3Q8k+NGzg6;d?FGCUUsk1O|S$+1qhyPJj>F}ta$_VoZ%i@ma1 zdZwx6lx0ck34)ZEBe6mr8L)7Q;2Z1r*&CL(t*^l7Ork#`5t#5Fr2ZG`G1qu)x>Sux zOlNJi%*qwF4Wp!Axt7aj3JZDOKak%j$&VMFy;q`~-P8uX@gx5yT5}-$&KvwMy6D$g zAx`r`Ja;nb&O+2gKasnNd4|pXgKG{p4Ha6OxUe?B!ih;*J-V{9AoENE31@2iG4rVF zwNHwv5dx4C|L>JtJpN)OaB>j0j|yUuD5;~Et)8vUlfiRvrpf&hznT z9HQF$Z8c!F{0+b8EbLBJdjn{J6*T_mQ#f^{KSO!z-_k;2C`NF}N2S01@qX(xoJ-MSR@TM3Bd`^v*A!g))%JCpz=H; zlcj*{c0&SW(V{x7Tj$t(Jn>MNC+h2~dQuh_Q);TXj>$<~6AkFSRP(Ts!8gO_nBAxk zD)s$wcu3q%HUqNI5XT{L8z^_y%8mNGiIj5N8Y`(6?xk+0wz)M%dk(R;JR4d%N%Z0k zw_`GoCTaGm9}BcFuS`RkG=z_zgu>e8V)LBUgRLvzTT>efE$=0=66_(mVJ7QMs1u>) zh746Uv+&W+C#zy+-4CwOXj!RuUCy4D=?C;NR~D+{W*WXB;JB1C7~$J=htSjx;zTQlfK87(_wZ#^N83M&3_5Rwb| z8MZl{jR-amv;E`z^~OgVlSq86u?UBpu)0vwX26D7X)|9OskH2aX>(XJFQ4upjowjm zrO_T6Z}+gy5gXU3NNbu&%A$(?{uXtkVTi_(%zPc*WtOCEz(I+mgNvuTG@w1b3emne zLd_Fh1*bm4%deiANAD>Zd;*{B9EL|!XFocfuuCfyqGtF|C5)D~6+X77llcC)e3jF0 zCaNeuoul0RNy}O$Rql$>Uj4(>kn=YD4E!_pMsKZQg0uooRlr|&4id2hwQnIA9~ssCbc{5)$dZ&A*0`)LupXQ1%_k&nA7Jd z%j1ky?!*o}#ghn|8KK=^DLBe?^?G97*A4dlEcTPLXAa5BNBaCUor0-`=0;vYwZ`4w z>IRFq|Ehf+G(JPznVrF@zCC8U1y6K4;b;iI%qO-;+Z-HQ(-bSdD?5R@BVR{`%08P7RCAQ!BR>a`Jon{~}-#PZw=OV)ODh!vVC|lD8o) z5d-gM#@Ba+IWPR8BmX>wJ26JAo%Gd2{1ls$!i?rC+c*4c z%4swX_>?B1E>H5SJQ@zzxq8C=xOh67srxi(p}ke!!G_jWMx$P?79~9jis(ykmuTF3 zdUv;u$z}V7`pFtD;&R<#^lCAxwMx2Yx?=R2jnXOT@Kslw_Mgp3HGvuY`Lv`f7l%O!-t7N`V@Mg&|N#`6oZfm<3J{vmS-dQfU0)S zcHvL@N$tY-n#{X|J8AwoZ`&_jubqFtp6ilMOvWz^$?zp69ATw`XZP`j0}$v!I$O>+ zM_G5-Go=sUh)pH=dKHx-e$Xh{);ne7XZcX<^wyysH#qY0LEw%&uM>T|X5FILDUmt$wp7)P!*)1O4Ot`7?Xd3ZC)J(w%YcSPSwunKUP~ zu`D|6tq)$6n2D}S@L?zy9)lXg~ z`&JYPCY}X#QWDu?+0_nX#o2sRCTwguK8T8YPN|CFs_Pij=DOik5IE8V5AnkB+UyV^ zwi&?AvXN5Suxrp?1!p|PR_{w}|AYIIHV(O?Fg8|fHg>BhL-HygkjEIh9QgZsryq)7 z43sQ{2%hf${l}$f?*F-whIb4HxNJ=MOw3Ad3vsEiZe?=6gb40(is_w?Bck zm#?Xst4qk?2i`bNnl~#MheEz*upKd%|8RAg{L*QJOu>n8@*1h6Z_wXT ztmHRR(SVEQwY@Z20S|rM%+p#PP}uSo<{g<)xV>OJibo-XJ>QSyH6@`m+C}|E{ zY}|jlYbAKev*4Xq?4|hdWdPQy8ml8(5Wd{@;&g-_E3I@C(&i`DJ%$UgJcBOET!w*$ zQuFjGKH4-`Cdb4_b)#(BHSE1AEf#|;F74EUx8rU#@$fjWYU2U zTJ+kMGEi%0`~C#HQ~MwUGO+LrV4IlWD1y_6>_1e`I1*HA)k=f>(-GxNJn-$DC#N47$J>+>eN*UN`-ajB;h6WA^+m;Pfb z2pGcU7R;^Kdn9gcZNXR z>!n~C3g!_sU;h&HVR|wj6{EY9G>+pozTeAFcwjgoRg{*~>`N*X)GcshtDVVIjVa%AG^+&$^Z&wb!|d5^i6E#pSNBv$r-W z!SB{FD@sHLwQ`FZPge5{;0l{C6#ayF%(udCZ+AQr;KJEUy{=Xmm-a~zl@*O>*vz5N(W~}z1bM;i6j+kAUVgvmx***l2|mC`N8W`CCxC6Se>E5J ze^(5V0O_uN-t)u-69iN6lH*ne<_|?*!8Q2)4lC_cF!U844#4wHU6?qZsWPbSkwWAO zRaSN(!5Kw{!K7JalqksE>E$%r#rY^fc}1d=*4bxW&nKQY_Gd`gHINA@X}!wz1nY2l zKQ_|0G1g{XZM-?N-djm#NwF*6&Rp-?$~ae>@=xZS1;r>10B3h&Bk0~&8KPHVT=Wy? zH@pP3isM@`(eku%mf`voEQ(15ylfZ|lCr3X>PyVi(XZn4J5J|bLvgEfOr%8wunsXw z_}erED|&nAM)l!bw_#S+di#*u%omawKE7k_%@5*a|0=`XeZ4>&t!0@L9dK4+>F%aF zb7`8dL11Q~ok_d@A`Hp%TN&Uj02iI>1{C}oDez)wjKQ}tEoGCQrbynB@ z7wrDuO7Q;uoQAa5Q#I}$CvHlZQ0}nH|1Qq^uNE3m{y)6>AMtnZ_O}lwmnEq`-q&rx zX^uA z_7`k5t6N=0j5-xGop_{i(*nz(1#3H3V;%c8ho&E{YXW_jGB406O`K#LJSPFa1r=`}}Q+>VmiYJ`uoe5hsy;8pHyR|(!3H?Bl8ZZevf+x8Ee3k-oreV3=Z#FzE zT6tLz8gjm+iN~*ASY*(K*{3B|=`6)CWUZON5+8j{dMI_0t0jER z(+=1wh`507S2ELhHoXcVyvgfRmT~3xJTnVnuAjJvU2A9tuBrO1M$K-y)b@{iygz9g zw>7U)G&Kzu$;}cAcoUGz&?0F8`ko%utbA|HyyBIm0T4Ym*IxpEdZhS3c_lLMg7(#` z-$1ySrL!i_99oh`lT3E)?5>T+h1$vz zGSQZH6=S1zB2Tw}KH@s1^wFYR?w*?TW322Q+(_47lI_OY`&?)?j(6J4Nar6(2lY&P z$jjV$MCV=joat>>RMS}5&q1;eGGXR*N8&f5wQx>=Lt5U=KvptKDCTCH>rq$V3=fbo zjplLmqWBXNG~}&s_Ce#2n$1B&$`7*@I`b)ZvWs2XF&rguNM*p=FhxVYbmQ*NMZU?b z1{<4?Z-eV+Uf1JRh+pr1=`Y*+xw>vAhy!|uPL}cbJ;2&nu@e7LYk8xh`7=+PxUzF} zl-9O_4XpCr(~oFVVp{*EaJxx698y)I5eSi7+z&4_fWP%21mRT7;8ArUSq2E$LbKvt}1V-BZH4 zVPy=+q|nAxTh?=-;XYXWpTu{QFRfiEUQWo?S|F7ynxX2MdvE=L79%}2MmD(5+G6$? zG#WU?XOn7ED9I47SaOo)53w6;+w~Nlb9|_haApqN=fMt!zrjOZeQe?+8daOcd{XsT zzN-QWQk!h`wG)WG;laZuLHLq9O$^V$VHrg>pWPk&_?BE>4Q}Roq9Qxa(+h2s6#CmT zrLSyY;{YTCZK(|z^ta3OkAGt!e~Svro{2x4#}gkKLxEr@Q2bR=9bnLF-RTCM)87(t z-Szj+b5yr$M^5E`EJp>CD*FW)_p8$@+EhVy>YRIrhNb*BxcHf$u{*YM!tkl#$xQtXz`KIA;rl=m^Yj}80etrpL>Y@R^zx;_+8<&6x!-q7A= z6E=~x-^a8()2c?Rcu-z&w9R=NF-21hrP?^Qyvo@C;gAH4yJlU65@oA!>-e74j9U{? zva;^%~(7zPc?c=q%eutq-!5YE!ijaXdgUE$-LLkpN-5NsgxTMFB5Ek-!i z-cU+#dd-cYr%?_aWg-=7Yj~%-_d0lV)%oOOdjn*E*)}e|G;&9-2@9GPVykCMufIlg zh~v5kwsP&s4S6xK{S61}+F9GYAov_K{*=(u8gR$TG(tnT(cF7o0f33M>5D^7~eXhs$r|-t9xK~V8kz@v5-qiHXwdRISUHI$;6*ADZ z&gRi6iODR{pw+cJ({NM0>wQS`kJIrQRV#lei` z-DJ8B`oC)*zsF7m#GZZfl3%SZr2kPTEiOPZG;C8ry7Gp{*XEM6k$7R#uK?X2U8lV- zqIJ@mT(RT*c2At_8AVy`TLp$a(@&4X2l2@D-)}4ji-#=i>lS@@)*aQ>kKg{&9Lx|8oq*+17jg3J`@`riG6jWW0jvL6VO zLYvIo8P#ryA^Qz;BYUUn$*^`ClgGp$V1RM{L{0A^lQByluC0s)UhB3yZ!Y zLDmsT`Kyb-HNtf$pR;fZ7%F%_&Ymgem}-@UOKfZ>tpY5^4aU|-<`tKS&@Jq!SDs!R&o`GD0_x$8a?HT>X|8}|8R;~cX zH6(wqlzN@T6i*j8`rHpQ7Gt1S`9TJC$$CWM+TlIUt|(8=`d9u{n(GL7*#aJ^?kGQ7 zwGSF7{bnLB6@NP_KQra2N3cKdtJGqli96#B*73Ldiun`dl{#|_qXDGt(()(8!UB1B z#IYzZgO0o}=b&#Hy3y-;M}7purjl|X`ey;49=;ztybrxk^B9jvC|h5uT%Wq;8~#<~ z2GCn3)p3S5GX!th=GxCCa5g+unG=nO9@e^_TDbI{fMR$HS`j&%T=Im)vuqa&qs_0U zrdBkjC_a3OmbiX+`OPFh>BWXg-aX|Mdt2i^05S|Ja&6;SZs}>!6DKZhk4u8cDkH-} zqjTBCLRP+a#%^C6WS`&mV{>nb;pn5n7&}y@`cm6ESwtzwVwsV zbX0j{7FSwgZti<;9BX{aPmq_&vZ^#N00B}8Fr_c`Oj0W)90?5%IUSaA9b*&^U{nJp zWU;E6S;dDTlafL%iz*z#ZIr6MRb$No(A0-QthiY+u=c^l#9@Co>nA2L4Nz zeCF);qC~v-hHmK;u}xc)F56nd zT(S5f%F%B;U!&DK&JJ^a=?L4sIh4dA_PY2Jyrd|_#K@?}rfyldsb{?k7hn81!-78l z0ZoCyc$dnX%S}s3=ld+lu1`QcCi9J>+Jk-6Hg@ZW*Fk*k%FIg%4gYpbkq52qx_f7I zXSc8Imeu?WE2GfY?KcUO4|*>rIIQe%|vH#=djQ}sAi+TW5yq@X@Jb9Et&Jlk$@Xdxb?s!E1D;wILK`1sy z`PIJMWnq`MIYVii*3fv z?8Oh$@Ns5!a5G}1QX_SV+Q3CE<0A^)2@TEFIqkSk(XyCprvNZ>w<%N5oL_VR0+lv7 zQg^6qS|Ikb#_7##V@qtkJSB^SD!^Z^22t`%t)MF>w=2-Z7o_> znm{NLi-$IOgY%GX3K@NP#eT>Ykk(#H88oudxkDF0ibq8kp^cK<=&4zd(yfUI`J`oa zj*ySP=v;fLWI-O{gAPqoqnRP_+In0Udf9G*Z)Y{!D0VMJb|*qx=eNgCz3v8=(OY?) z5g^Tk=ASP=m|{w4Ry2JWjR47^eyTYw85XOd3mzR_6p?Md1JrNy1+0O87 zS!o=&DZDfzR3e@ z56|v192>-*zIYKD;Cpg6=`bWuI4^(S=*MJUGL~{(LGiLJ^0WG&|4wpsOpl zn#5^;Hg|Y0v^I67{RucCx^d6#^2^BR#fa4le8)4X_75A6yoMKkgTafis>jUApP3^bb-d)Y>nG(^D$lo9C z+n_e`@SLhGOauQ_CdgN2aFcBU1Mx{KrzzS;t9}ZzWgksL4EVk`VA5*| z8~x3Lgc1cJccsP8=GNd|IY`A3KE2oo5^JU#HP69auOpXO-}}f(o_PT=Qh`k$!_g=KdyK*S-W?U85w;@SHfN@sATIBTgL8(pgz z%3+GFnyfpg*a71*AEX!Q__NVA=X+7s$hb)wi{<&gJbLzlU2Of8Ry6azw%Upn%EOR3 zh9smyJhbPiO>M=9SuW8 zsjTVBYn!*hNij$68&z{bJr}ULzFy1H^BT>yyUzz@OZDpFS-`jn`MGdXmVB`XY<>Yd zGGUx?v+Zh5IPbk2Ofx0KPA+zey&#y~x!`8o=sTZS5B*OqV-4P0{(xEi`}pA9*xf7V z0uHg?gsL(Wv75CX_xp*Ru;wJUUAvn za$}*t^XR+#9~I#0<8l&Pp1tdDMSRuVawjG34azzlK3!nA6ffhC#8a#cc<}P`GSZrRAUmM4T6M zZQYtqtH@;JD;(9-Fx`E21ZVVe56f2op0Y-W_KA$6j)9cH!1*#vOj&oR-DiS#y&a4@ zXT7q6A>1*HNjlBcj#FyDdhMiPxhSl;w;+DKopk>LDgJ=5!!p^s$Vf%G)c_;d#5gvGBafs*X19v5D z-N^)v^d9Z`sr=fcdNOCa&5%}W?H4tek*LwYCs>?$R-;u{#!WpB8kYlj_T=6`Sd&ae;PO`YTKvTjE~ zb9yEnJ_ZVSvYXQD84~n)ShV1K(Z+TMuxnPE67yA`LQI=5WXr2wRdNeTr#tw(%5)x- zexrf|P~$>rH})ftqU+ys9q{%1rz_XLg0FZ#y1CL*;N%qlvT5X#`{ne--swhB6pxpl z0cs9B-tO0e^k4&P4;Jft$Hds3OJm+o3i>CQZ7J>ZBe7vwXQ?*Jl-WtF9g+CseCjQ- zfpubzVDkQeo17Pu&m2ou_z2VNwFc-UVsTAou0&X8Q`SwwSbTUwZf zv;7o(x1*nFcP@un`OH%P=jZ>MQxzSpg<}6j=tOjLq&!iYkN^K^{qz5?1fm6H{Mi6w zaN&H(C*21b!l6kFS-)$9{?qcGjr)In@!z*{`?STs9eT3ZXD{$@Y4GLC-x5g0=xkN!<1VH4dTMIqVO)r~ywEA^y&5~;B&s*=9o(EN1!2q?h@96-n@Ye2P>f+b zOY+}|i(d}Lkj!YXyfShnSiI7@s(0p<-INb&CZLYe5_Gcavpg7Na3v>UKnku4NiTh@ zyF%MTt0QJ+)NS&Tc2p$UL!62473$fnk(2$>w-aGqOdaRBS{nCc;YB&YY2Up@p!l6T z3k%0q(9oG1tF|+ljn(spQcsO|xmn$tD$_hx7r}>9ZRU$#X!YtTGA?ZTsY{s~;|N~) zck@K)Hq#qBg4TAM-V-}xN)x2pQLmm8n$DJQY(a+E-9L}NT`2D(el&ktRBj}1L!o$t zA_6*44F_3Ls{J7$NCpwOS%Ci|bNiu(aFHZG1f!au4tHH5UmySL#%D5wjVEOAx`1EQ zSUt4q!u0^ZA2wX3rax8b>4ra+Hu|{?7RNm@8+>=2HV#^wTVt>A?rIPC6yzY- zjOq-Vl=~~%d_eJvhk2Kw2vb_X_3VFHqKT`ElR>EK^_ihjO~IFkWJWXP$izw%zfYCv z6p1xiefCUU!Jb*z>+9*skV(r?^J0!mo%T~iaL|U_fAz)FWIu58O8-VLP5kj}$W9SKP-);n3DAC^V? zyi?{SN#Y1Tv0d!&6|g+Um>gOqUb6gcf==NuQ@8^wLt4VM!Y*0Ip~KwU7<$$mnh$Cn zTB{cv9H&z^@wJLtumFBb0gM7mhI+c5_trj?RwS1!=J~Y@XHY*PpB1Vs61TelA;9I- z$6h!ms@Lf=7Mf2vQfrIxd1c8julTo@FX~3~FS-nSUBFImQO0vZZ9RbiDsDhjpjX#h0Zj(DuK(&K+^AQUm!-?P-N8~ zYa&*dPHS>lsF>(*Rt<4K`QxFXTXVZyGkLOd(8{=x>MU}4#;)A3VP}a9%JjouL{Ahe zE59F7o}WK5p1*f&fCG%B08Gd8F+XaukxjWUFzh}Wur17@_L11o98mg06f^3tI}Fgv zj`N(fu=cNd5S9Evfd^FDzbZGzpX2cHr92Bn1-bl#hiR2da9$p5lw$m7Ze2@RtLr6< zgn?p=mVkIaN8av5OmvKEMfrFvY!VvSqe> zL5qbj1SKm%V4*n&Qa|Z8k=G|dEipQFLgC7fR6w+2VegvFG`tPLf!Wuu*{E36Gt=S& zXL%SFVM^^EOuP^hH~csV@8c9T9eDZ%6=F^>y8QGqdQrJN`{$3Y&V;TOkm&~>YFN&u z{9ynn3=9ba`YMRY00_;8n`Ek!ig-@O;Irtzw!b&%9 zaxAa{4;+DuRFqQ;tphu2X)z{M&e{rM_;f8NflR;pJeIW_9?l*9!e>s-4~ZVOmHUBsY^3KA z)rz~kky@!2qV}<-likPX`{Vnqa{_mCkjHOu2J~f^N3$j}XtweJ+s|+V!#|5by2Q#^7?yLd?3k6a z?A4w$WQvqbTMsO|c=)_%@^rQEcwxJ=m5M{8TrRJ)1*A!Mwc=6x~58N zx=*{tUwasud$kRFUIYqfKq+d@rieENVFoOhzgaeWvn@o0e#Hue~F+@Dzl(Ok>quLv4A_eS@Zng3lKQT=4$z)NM77 z(1$8%Q85=Mjho10>Wn+}w%@@edADh+3w`X}xvoA*cZ!B`^k(Ni`%fFa5-J7AjEcvWI zGjq)Fjabvy_naKR)!NCGIscWSZu^~#sNKoT%)6$_Y$>PtF#FBx*9>ryJzs^hq|876 zZYTb~H^SMB&}Zjnw^C0PW{oD3{V@Rwdr>+ImTl*tIR_^^@szN>*)w=^5G|8Uye z>+{z>wcHpVKBQ1%k>~@^06wA;623<~CL9b_{)Pa1N%$`8#L}!n(93CHvz$?Z?ug&sNWxH>6wMwsf7bChu%k;xM#ZqnH8DQa4V7i30e#7y* z9$#Z^8^Vyo-9+(_$G(QI&NL0Q<~6^!lIiRjY(Z#_z#ybqXs$&IWy;*==z&LcN5Bi6ACa7;*BIvbd_mD-te311p8 zt=RT3v76dW*dX>+97bUj5|n>NB|Gjs zYl(CAzZ$cnsL5MBQ?a5_gC?-4w%{h)FQ);LsP-_~GY*U~6)*hYy(RaH&bip~QNske_eDsF+9y7wNcVJkA6P?X+F+P( z-DMK5-+!U#1bgHE@b;ErZEcU%FZEIi)PUk`ac{9eu*wDs6ewQ2#UUiP+pYk`ix)4h z3B@7=X`#3iJOm3CAh;8$}G%|1T;Cxwhkcr`_+?`9jBO4O`DCZ|9JYoHh9i`uL_x zBG(FQJvpkndCDW$jQXlUKFQjKR%zOg^X!hQr|*{SVpx`hUto8{no^uby`RuO$W3qW|52;^lMM8M`1^Qth?aLyeFXwU4u@&uShpB}q z4C{rE?3$C>IM(muX{epTC%Z~=5#b^CgIQ)xg3tFPDA4UEb)+wiJB7tS%fy9q?!H$g z>)3D2Q#FdQLwp_I0Si2zFK59G^DT|8(vrTFiQCM2LzMOsNE@q#dMbRexqSppWrte?rNXNasEZ+B-)(PV0D@i zH*ddxTiSkwX!#y-(%aWqc@VO|o3pDbMaqO$E>iX_K({wARJ3xUsB<4zQs#ubcouLy@07OV96;I8tTCfN(vvA0fJIwmqu(ZC={DTbanZQTvB0&^ zkY(qUQCMWvfJzU=zX4b3*YUXSw8aQmq}h{Yxr3XfH=8|o4a*9A%*1K?W-M!|^6c)Z zL-M^!Pf93pF`vRqzZFeq8NjYav0!Hl;VbD8QkTpbtdqSp-2b9-w#@8Az5a_T&Bb(e z|3=7}Onm8A=ARqSl=c!IX?o_~FMl#zFZ4#k$XE1lhq1B@VKb|cjPqFiroI?e*F$~~ zIYzMjv3745%G#&TbVW<>D2Y;pPU=gYBQZ{AD>E_<|O$D!s( zfhuLEcVSD3oO_JHti=-kN<%V~gK=!$e#2v=b8T1b^JXclo2-3cA!6e6#xZS>Q})O{ zF~ekghJtsoTvS2#@2^wX1?XMkS4gy4)G=f#WnAPd14p=h6<*uqNEee@ue2xK6lNC{ z+aMAXQfon4m^596G#|$bs?16Tn>VC)f`-eUEWH9l$t$beTKZnLTW&i8d*wE95vol` zAKG*;ea}oToOy&|JvXr16Ojf`?^i@|KDx5vJ#TuZ59AP~_>PGw+t(ivH~+p3KIP~v z{f60qU0v!Q_Ah<0#t1!pjWNjvLzSC7uwpZ+I_eipjP#5^rN-vyDGcR~XxCk10vzeK z;6pz35cS^pD+XjSLH?Y3`EJPrql(Sl_H0Ho z0Id)tD7)C0H_Ia3(X4!6YNb6>$-gj_w&!YqMKM}*{CRAnD zTz&5hq{u<@zI(E9#-IU*wh|A(hl;9dHVWcI2##xofm1`iGEMwNEckTQ_&z!6 zo7Ia;NL;5ePmzo&?KTQcg!8G%TBj2SV1s?2Tq*|HF}Q%$gz;|VFP)Q=LLkyH2Bd6x z4R`|5mtJpN3bWI|atYY0hjibKsm)i=%hT*m+Cx!r$dZZjZ|#?Fzp-KN$j=U-=1rdD zQ|#g3=sChl^ou_c9#;4njjg3Os;18EaYIyV^Nt_@_ZRu0_mWoUO9_w&QPH|%^PAG> ztOZ1bznrAKun}O&kZ}#>Xfmt`UoF)Jm1X2E&p@y1| z8Pm~XBXf*iAbT(xtL9qRJDof2bX_bTX@3g~nb>5ujg!c*o4(|*JMg&ceIV4uC~};@ za;E3Rs*bbuU~k*NSk-}uZ*!x~=ZlyaSGA4vSnQO(7WH!JcF)}@j$xlm>xZ=bPq5Gp*UtJw z1ha*k|GL1?^Kv}{P1n_9os@N-hSVn&&}E63P)VW`jhD|oi%-LjWo4sEb>KS{^3w^y z?>fjxRmr=mSIy=#*c%hAQ|wJ@EvRR~48io|&LV zMa)eEM8RjHgqO|OO&5S%Tf}KAv&uruW_x@nTdmiDOq05zh2*O9Mo*|>EG5H*>+?{1 zAX`|+a+?AioYOB>$@w#^EPXpg1R7dn0Z2`~Z}3uRhRGQ!lS^RHSd)C|!ZCyury0 z$xoX@ez|%Yw6(|8YQhA3L7T_4v5+1Gmo5>B<4mt63u!CP7_WlVs)?@4v1kB&R>CVe zdo=S+cE=YwLr!y+SQya*TO->2D{DzXoz4*o)OB>5J0@LSUW%!ooOy?SYaI3mqZ}f) z?^$uBUV=+FgYq^^wK8bWazWnmAcy^2G=ET<^Y|nAQ3!Kt#Tf-Wano{3n*1o6yd3h& zlDvyoG9J|~hl?GDpHh>o$FeB7pwPdl&N4#W9c3?*YT~W=TI9mJtkz4xAa7DzOk2Yv zni7Z)+M2n6u}zaMdAQ*977>03t`U`8moyLRXiDM_f9~(c{n%YLw#k$?ien^v=K(` z+I{$B@!DunQ`e0F=jn$Zh2k4s>Z-hFB1E)AleIr3TdHzW8`Xm`12Lt>s7V`RWHGa& zu0g(;)oQ)3Vwh9b=jA>IdrARUOOj1y@Gvj?Q|`uumvc`?UOO2s^i8l9d@o83wMY!c zzZ~{em^ZV|xk{qz)jiS^IjhO}i;B6*B6ssE!SdOm(DUm3rp;i1fa8vxxIeZSl(Hr( z=Z5T@eSQhdr%;QNJUirdUp!#+VVD%6;jI1ovIG<($WQ4y^M>}B#YAW6IKpcEV2XG6 zVrJyNcrOL8zDm?C7u62`Gv(cr?3G^=)^d$|_K=AzQQQaBk;YAslXq=n`-g(}BgxuG zTYqnGZ@uHVASR1RwXqlRqitVU&bMwfPqI?*ShEZxP1!hjAPWn4ND;H)N@BiUZCT?S z$c{c?#@%V%mzB!DyqrZm%5|?%xO`k?*eV#r^h&P~okD}SwPa?(9KLXm-$SgG#yd=N z>QMLl!j$HYZl!9?+DkXH4(hZ8|d=GB%{`Njw4+w_sk858}-VB+0p4_PDo!HxU zmd^~O>rxZF6SZ*S`U=;Mdm_GhC~byTDQ_2Xwa`~LcxFZ6bL6z{G@})FM}-m}?)|G} znT1q2cbA-ev^vs}Mj!wE^~-;^BmciUt^Qfp{kP`i|IWqyzrOe1!$B-_GO98=Gk8(M z95tfMtypmIkNrF0_P3)42 z?`ElORK1#Z^n5smDQ%Y{e$?7IAEe4x4V;q7VzuqJM@*)H<06#*?XxHEmJL(XRPQRI3VgXqvI!{Jw{9;k|JQ4a_Dx}DP5j~#dW~M)&C|X3 zGTBiOpxh_MJncJ)lDP@U1f_XwVxI_E^kb*~5T;T{Vr8$r5qX2*$7WV)h0CER9Br&u zT-*|5Z|z5K*XE~I5!=F&sP8q5f`!kk5FAo+DYj;dXIBOB35(>azIb?O%JK37yW<7n z6uO>SPqt+fGp3FDfD%oql5HyQ0B~f~e!A#2yV`c)lj{%7ZBuZmv<(w232v0$p&8})E6F8Ic zR;RUxX^0Y)J@j4=t;tZ48R1aBSdoJ+J?C*_&Cv%V*nBI4yxQiLfH@I-0@DbK9PeBA z^_Lu3?Y~_6r^Cw!ES{2sq@J(ZaU7}`TgHVEU-eL=$)RL8+6|VT_-r@JP|wY!EKcYa z>Uy2q=yNvtHOqMInI=y`m~7pM@Mc?ke3F^1`i}nm20`A97ltwm zotTDam>UZS!a(7?^*XNNT06lM55q}%j;gvR%W;L5sTv4pP5X{ep{a zd?>%9bbr10#q0PaeG^awKm?aO(M|WoVgOQLau(I6`22{=Hoeojp!qTDXQIaa4p!ek zZfA{5&y9U}sz4J7@4yi$eAk%Zw(=^3iLAj%f92$Y>XR&7)X@P zF)(ywJZKS}k2Y2_KmMDY>vi7xE( z_>z9N7>8qn0>@2O#+6XSY;P{s%KU}o$Z0YR|1~n$ zw=q80$oD>jyB0rVIis;4Rk3+y#+EfbZP-jhUqAQS{&8OtYI0hu&w)-I)A21g{X=$A zK(I$BqXN+qnfmLMPY~3?!w=b*^RX`cXG#7ZQcuWCV&c!A>T!OP$6lDm7q5%tg8e^g zbC4^4_AK1R!MiN8TRTE;WF^tg>@%&~Y$Rz(HYuVK z#D8Qk%2z7M5t*e`3SbiKh-ZA~&PV_l8+Ge4zU;$wKuYh80k~NH1NO;?WBL?xQ!-fz=OSRe^~aHhnG zBfgSXeShqUqKOYb zZHkEVFnqs?-^!I5BzQmt1}k!L@=3_Wx#lz5BW~Q5R7Q-jD>8e-hAIJ zz-5+nH-g~PYnq~<(T6y;LQz>6&JHn@1bPO<#8q_vWXOwr<$OqmWYiW`R~)^UdW(v0 z4S%2{maco2lY%oeoYig>Ln(001Uj^-yg7mCuS|wSTfHF}v^@jeRE_b7kUml$l5-i|rH@Qz@`Kj;6)rnM@0dm<*E9@h^Pj?zD?&Z3DXF*_S#-rd?|Ybl1CO zc#X9rFU;}&@gLR1smUJ?zRWpYzmefHSq(QGtVtB|Ac~Z>wV32BVAaN=evtG<;J5)! z&pILGn%fZIYEcPB4bW2AqRyaZ^>6pX|5Cc0T&;CTL7;k&?TUxg!Gv*>ii6+NjJ%v& zV^gCgVD2>Ow2<2-Hh_k+E-#sZtG!^*VeM0NULM9w8S7)~F8;B=s0J$}!R^b+4i7ii z0PV$i>QE~yR`ZfXwFFE(gH0F$EUc%-b@my2)G@Gp9sQ`tWRtZ-cP1XtD@%*0xSAFN zsBe^`527{(=b-6WsrLs&)Jvo6)k8Pq!P$PjoSGkgq18_cUJ~2uoiwj?dyVog%o^OE z2<=oZkA*eq#*3?~}X?dt-@I(Uu1o9bh0^&mPiUV>jOL%Rwm>jOGUS-JA3I&@C;_o2Wwpurz(`eoz# z-HQk-r3EF`~PE9a~>1i}F&)6gUWee7q#_q%Y{cfR5gr*S%GrD^HT{ zv4AT0AnWyoOfLg~mv_3)vxdkD~Q z+XPq;`%52;)c?89px~hE9$okbcClCV`Ak}U=iX)anh>|MGS9!~7NJ!=_t(jif|O5n z!l*78v~l<-I`*B!%*x-R`?V^)&#K@3+WYs|OetgQHVFTC2)voR==}GMpM_*JcPlvK zh;Xkbjppy?MGwx%=8;!?=ORCYcD=@YlupS1RTR)NOZyj5;Fg6~OwTNK=VW_~w##h( zL{#bV*$W>Rdt6wzP@V}N%EKCRVlj67h1S8Lo@2}QowZpPBFm$?E`-rLsTQTv)sZLf zE7x>#rVO*zd0iq6*c)=s1$xlmNRwZj zR_+osy(JjtZOTGM5Bp0xR)kUx(d!%av)p@ztzCjCS3&4KFcLZ9@ z_du0pO|+6&Pjq=BKNEg04SqW@LIa*o2obkn*2YXrl*dwSU+Uf;@%)%X0Q2lDPM z<00aH?-i(nS^GQZ(1u>RwM(%rs_K>CwT(v0P$!oad)CxKypMgUQYg#$bQQfR1V9vg z^NDEP`m4fpc>G7#MuO^1mlPwoOrCW?f+|ufzP&wFVaww)Ey#qLd-dXqHM5rbEzQ1q zZWR24+iNdVrb+u|Wp!+d=M7v1nZ>`*9Thsj5BG9hwwsfPI0 zfv5mwEn(Yv>ZFp~FfdX4F?y@~J4()7ebKs~&J4K^i`9sGf!6|owxk++#ASx7y!*$T2;?H9T#!^p?*lUvF?r?F?8MoRZ}C zrn?!EZHyB0yB9RmEU@KMtR%;GjqwO|g=wpkAe18a=bsNAY)yi9=$LNT+W4a9Ssc!y zKzmQPPffv`OQIj7(6}_QxoXU=%Io58dm%yNtxTI^mBUMMDLN?2gou`v{*q4~u4eth zthw?7S6-|tRX4RXPq66rx}<)?{T3ez0ql*U!L?Oq_?YF1!#Ou%K-pHH2fewH&70%w zdKlg%$pY`yk@_xX`_)Mkff1e|s2x|ZOe$eLJD!>SEK9rMw(D~`k`-JSZ<0q&l$&00qnA94nDSPZ|8Q^TyJ`EA7b=_mu(&I#6SFwQQ1l0;Cr0*=SxN0; z2IHMKdgb#3nH*(ToXXG&Qnj4Dtwd2v(=*s<)Pb^5%{M?2RUQ1}`v;iC=-(FYH_3lm zdT3h+eW52Gn)+70)HqSRHeW$@;cC}7u_K%)s;;;_hD<07TnY4$@7Q%i&cTJ7m#Rru z0X=EZFXf0frFIX+$VuL+w-l_ip?ycUX<*KeFSr|JovEZcsWZP|Pm6`hlWy#JL5TRH zugh`esCZ4f7f~S#2rlgmWw)fis0ucMX}FHUl|mWTUcoq*+(Nc)roEBN~9Ssrsp;} zc}Cv%q*>!`+FVG<8*QSZ*y+_P7>E)j1wm05Y9g>9DtNNC%iMbWRz}15LTdF_RpCMK_r@du{Hbbor*4znJJ#dU)ocPKqsC_B`uR zYB0q(kEN$4p(ScZ{s;22>UF!K2~SvYJ#MCS!!osx>WWGI86Bg_hD!`J7Nc$c)}$q- zC(${+RY{iQXTkPdDkj>kD_7Gwq1!piA-)g=c7_k2gVeYMZ9@F((SUD+fiaCeKi0!K ze5!?HedTG{Jep$WmY6GQ)Vv6Vh}pu)2#nH!Fe=*iw98w`e3jz(r?5|^p{{d>7uxF< z{q9JuDva9W@dl1pv;U%U&xvd$aO?C*;WX693cm%4f|!k^*;@d#n>^@?zxG+!fTdx0 zUP*M`p*cc5Z=cfcs`|oP+TBB{O*Gn+%fn|@7;W=J(#EHhrd&9r2N|bmDW7# zY@bkvj7_Y?VqR+C`*Hby8@&xM-16ZIPe3I@kv)l}r;0wDI?u*k^$%?s;9y6XLS1vB z#JA4q?1M(V)I8jYcP}%`krkOWOwRELWKOu0@+;1Tw(Q}{POU_-`qihr1Z6X_QIID@l>N#Zt+Av(9^8c;QAiy#zwBd*p1Jpp(Xu~F#ux@5vy#`6@SgM&mxCWjZ(n(>ZkW+ zvQU`kg*TmB7KNsOqiLXDN7w1>`>QSHd)=Z5kwPiP(G6EIed03QYu!uM$E|qDpydy^F#pf+UmokJf`)IpFOw$xl zioa_;(!h*0kKhOd@~P)hgZo)QU1BHCI-YEFnE*J1ud3gczluv?NL%@Cj!o=2C6`nxiLWm-W4Wr*-GA@yXAdVrr58&$yy+v%}DLQx^)a=gYnI zJ4RCYf*;#sQ>NK@-gHDRAYE5o;^;m|_wPY#B!qy5`eQZ+CFPOd3yOapSaKlL<8A=m zk5}`$yFs#uA+DIcQO?CUMP#PjI^_)5fr?5X2{DZrsLjLDnTr z&kpd!65J9UY{Yi<2C4IGdjwOya4edw(e4jvT#DU`v*(aDXlij|ScCPeC z)MM1;(GDYBT7XFXN0IpN9q+3BFmHDl7E=nO@7sMz7y|@YY`v94$y4sp-&P&(Y%^p=ygMHbnh zM;um)%<&sptZXRLms*3k0wD9lE8*Tv$ztG1yi0XT5De1-?K&gua3E%FJ!-=y18TPA zzH4JOT_sc>EDe;#eRyR;t4Qc{`%>Se*c<;rwKCUa3p{DvVj2xvsBt6RJTgW2^0dpD zmEt?$jmuF?#=&3-lSlJ*EG+d68O%g~DQm$?Aw2$5EfWv0*};`(G&u&@K0X|~eLS=X zZ3_Piad6wtc}pVY!aXyqZf5>Vg^3B)1$0yt;k_Op)vqX(*UuWaMdbbk~wr zTXr*RA@knDj}YvPWlVxd)3JF;!&!zFr8OL;wkt~wsXqn)4d$uj zbt^>;+HssPhYr_gy5ltPErpwb%1g6+2r4Qu$80cjT_M(q}kX zeeEt;!p=AMVU=r#)Bsn$F;^ZasM!A{$M@>kk@8bsp`PTP?lKJ=u=3PUyDOS3$PS2{ zwW)r?O4D1RkTLmn_q1bDynWJQLiDE6hTX!g@z<|eMyRgSB+We8ar0qKdAwBi%cPiP zXvk2CkYBdFugIrYYh$wnKHOR=vrO=sS1+pvdK%~)1C1_HD2NY!FR?D(4k9W11Yxcu zVV2T?WZh;;%Tlqp5>9eBl{VXLU$WQhY5b}zt?A! zFPAKnNf$$go6cFj?mgW7PY(M3^OjyI^1=6W&I5sFQ@z4?eTDURr%G#j!SM7qWgP$f zKvUR&-hU!E?lfr@T9hIf-sr5Pdamv=hS6YnF$3q!Cl>z7A29MPoxXe}~sEK?`FOEBfNn;>RFmO9_=R1QDll48x;6q921%%H61uxpI|_+MIX~ zmt411MN3Le*)k#Mxf3neV1b}tZ8Z&=Ptey`&tg*J$VqZD1{X(iFxXyBcqZ)DJGp?P zG@yL#Qo*VqQL$1iA9Y5JO{WmP=Fuxz?mD`fWr_ldLj45(N}nk7xUd$kv1kOMPRm=! zQZ#yZ4=9_3j&46j9x}>u+f+itdzrbusCNYY`~?1Thl6VP+u*S%y;qVw$}&k$$H(?( znW9Vnx6`Jd)TWb99?A-+S+_=dX_uiClktG4r-*;eY+M|*-5k#G*e7UZXV;bWe;Klb zN!8i-tE2}GYy?Wti(do0Ef4hf_p1D+^C(xf{A;7o+M+?>2;n?l;L8Op%ecj-^ABGz z7FDuzyOA44EIWd`JM1P`PiYnW4YQMPW6I;wZQXE&<(y4J!ChK&v3G?xZ8WXTPB@OF zqODn|#R4K|9cUT2SML!<6&Nw#dTu0Q@ev?Ejvc1)I$F;iT##TcvTG*Oe1Se?`6#LJ z5V_K0{Q(s106 zKWTr#GRd-%D*kp@YnuXBa1?cGnIYUP*nsqy7h(1Ebw36PMn&!f^ha=vpVjz)(g!vx zk~6=y2^c3rMwd9$4FdV*vi$bkDhllID22w8Aaq3~bXR)LuOeXKs;^dZz%vg{ZYiLg z!(ill9rIUx^_x7Ryv0#U(xAj0rAs@04mf6T&DJp%R^g{&2#~W3tWmrh7vnz4AHJ_Iz^p~_b3^A zU-_qDz}S3_y=Nn&Z~Y5AJx|wBv@EdfwU3_dV?zW~p$JMI zJFW3>_jtf%l=yK+*kvJihtcMz8%AsPZXHL~1jxhk=_#LbrcX?t-z0!MW68YafksOd z+lEIrNY!zo>=q`+#uyjIStGK$Z>`8HUx|7c0rQ(ax~k&6=~18VR12F$C;HTNXTr2H zvE}nUQNl#4sbAl#wja_MVxW%_)Emt2=$8j`iJ-25St}}gN=q51?h+V$EocR|7oFRB z)W=tR<1Dt%^S_Wx_nZXqDh9i8zQIGC!6GNM#W6QdG&Gx2{X}b;gr)M8t4j8LV}gJc zQ(@_1GP`l$DF828>6-S>&D5azGu4O3h~=?+JNaWxI{%y}Njtfg{72zLw(y1740YeZ z%A|nS!`K%)E`5da4o2PYCM>+6kK%ePG!P-Uhv6vJaxUCPvny2S#rh2s{NVFIpjOcK z!WP17=hg|R3qbl~0KMtDHEC!<8+#Zwe#6t;(%*Ly3slM%CW*_=Y;B{F!ImC#5tx6D zW}Hu(1qeJ*ZBTMpRAMAe>9vRc=acsT>wzl#+wg|7C54uxUOcjDKqgnQCjuXGyVKT4 zKJUj}VXv!%dP<$7nE2iwkEr`+$Zs(1(dA1bie%k6WBWiBV7MtuqIvKHK{-=jU~Jh> z8}6=!RcDtX97T48JiLUk51du=LQE9b&gBUT^)G1lkCvI_1uJce!#ZCYt4vy68`M9s zuH|G2P-!Yq2O>}M%=1IJls#s4$Um5=rC(24GV^=wc7Ow^58t2Yl&sA!e?E-F@u*UM z;a)8H>Gg#E^Y(g1tgruhQ9+XF+BV~veyMlNapUKFv8BsL!dsseE`ejihejNg#a|a2 zr7@n_%sOD=qVi{+TJ}tr)-(~Nc?gwSATL}bL*{w=k2|0&BAQRPrEuez zGAUX~3s-Z5qv5#y9N}28#EXRe3C`M%)`dzJ6=PtVwS+PrTFGG7R4`NqQ?nhwG4`Psy*af%5E%0|JR#)N-D?M!4?ZpJ`~Mw2%W&5?%5xd)}7xM$Sc68~I7 zBYN!-|79NVu+aA2wEx=fCj5t}NSjSXjaeL*$YtLY6GfdXf4-fb6lbzYmu_mi@~j|C zvDF?9H*eZJN}uw9YK>+D0oY27k8?TcwL`tUT+fJ;E@xTUTg0_;j(ss3^HZ#o6z0l2 zN>m;wPY;_Pqht^s{uAN&y_I>wK@&f{lHdC_EBxUEYqao2cN4J|+}2YZ7%x2rxU&Y% z75$c5B4y4yjs&N`S3;3Ol)^?XFF7ZL+j-i0yZgQ}nPGc%E=CB4O*xJB{9nmwLNHK& zO3_%-@ou4ISZM;CNF=hwjbtZC7*bs5zoshm%_Hl!M^TFQy8#=>gKHSWP*e1>>A*B> z*;vygv#fj|!OUUyV~d%y3=_ODyZy=$lm7_+{wNH*U8Y_9BjO@dc;AAw=pt=CzGBaD?QqNV3wwONQ?UzG`O6bEkg3DGoKf-3Ac*spw0dG!v-kRL zH#m5|SPGfo`-J2^WzpC10QGo4dTv%Mvep6FrDbOEv*5u+O#Wnpm)`fO7<4K?quiju z!9c7UC0fD6hrtZ)$IoP7&`$kbRwgcX1Fv#Kq;tp6V%IVTNvmtyw=&GIVz9@u{C~J& z-=Rz&!xY0`fM{}-Q2ikM_8yTE8l8x%&3TTcN0kfZ+EDd1p*+T zhfUHge!e}jQ~~+k(;SiGs3Ps=!(cV7Ta>{BEqUGqe6BgV=eg8Vxg^pz1K@H3PEX*l zaVa1_F7}t~<^-C^U&x9jlZKP$iU?kl-X$cMjvtu5#b2w=yjp&40p?!F2ojF(~gEI zdHf3r=ktxy4e&w7f~Z!O3;e*;2XJ0ksz-XTF>{JQ3^v;|jlGsu0U`eGI07t_R{q@H z`ly4WuWsc^+@_vS<4K4)aN5|(5o3UzlSI&@`+3XEUXIIxIB7f8RQB&j4qfE5@xXkTvf7Y(*^*ua{-BIg9|D0Q|i`iq=x zo!Eq2h~NJrSk?ShV>eSN4+-XS+1O-QqxcuIGh?@uOZiASO4|sETCwPB2M&4PMq0Kl z%`ok^Jue@iC+}l(7KP^s*4HTX8$kSu(n>(i;v{F*uW@t4Q69aabtVSD?4MZ~%G9NsTbR5xNJHmw%lsSgL^wOFQF0ZHO%HN$YVygSJ~13fHT5{R zXw(J_Lj$79{o(I6glP;0TR>=%Ss6c3PiI;5wd$!UFAU(tLnnRi@3r^Rd?+RUx zB*{V)>bx?rX$?DiOdQCI5DxL&?GKs0r(`67F9c3Z=_al5Gst_2WPpc`M{`oSa#5v6 z;l85-gD&T6*Yz6*+}=LB^tNZkadk|d^Tk+GasaL3_s-(136o<;W*srOw6!vW03g#` zE?P$)gfH;FE!W}`X&~$eZYnlEyp&f`lRuha2Melej;Dw%Vos%@-@qMbxCHQl{kpYAA>rjj6LmQV;?plkN(mx z4RNn2=G|GLhT68>V6KEtWb3=jex1w6#~Sj^380r5G}j{q%p13WuZ>DqZxG-COx1^( z(`FX%S6M~*`Wfn4l~HDQR?b^vW_O=#`{2-WPYAz0xs+;XILbcbhf&ufda$dd_p25& zgE>6XdV4&_7GOJHuqHTGq3SNtM|KjZ`_ZP%Cd-Fex+d2&y%-RkQ%3?v!R7>n?}K>p(Ui@rC#U6N-k z&82C~3eWi3yVvE4Bj&*UPf;7r-UET)vvMak*2)SN0Jzev>ql!<+%=&waGg|{VB9O& zF*QZ)}bP9N=bjd8D)$P8Ytfwia8SY4B)j8HI`a(y_qy@k(UtGO^l77=dhP zsL!5EFgEMLA=3MKpU$lkZS2AQS7Y4nRjRWG0iX!i-o6fW6qC^FPx|SZ1}up#nTeG# zK`#c-*!I!)h{cJ%^w9NGTmE8dU|WlT;%%pxeI<_ws}9-lkAIrIUCxvcKi;~JRW+VY zdzENW|K@#?>HR1i^W{5hF~Hl!FqPRXj|R8thb(i&Oy&BH$}Ea3MNRMDk?&FqG^;@AgCFyXz~?uQt*;^+RwYkt8)*tj$+y+V4>T zZ>YKD%>Bm=6=$&RlbT+IF>3&Zh7-%4TPcADK0TDtc#C2t3m0wyUqvKA;B?m z%^gfpsR6=5aWWvyosG_j=_8`uOnd<(w+@O*QMLBqw3}jeWR)m8dxOO~K7xXSHJP$I zD9sIieoXEQc!>AXeS}PXSC?K=4kxR$Tx$c^`1lRnwW!#8bfR0$G@(G>-12^*_6>`b zi!V3E_>_8)iQ6@P?Guzb!F7Bs>eJJ%3X@KAuA&btRlE9^O6Vj9k%rK>c3>=rvj;wR z+FM^Q$=oE%oPUI?o zDP;@V$v<+Ntzzf6I@tcw1+JpyDxy!d*JTDVFN79r^4Ff0D$7w78auRwoaV`kAA5IB zoAuELwjDa#W9oVqThfV^Uuep}9ChJPUCL93QC(!y;=stTQiQQ;+(_06MSmea>%)MD(YyWhbrC3@1#EK-|ovc96-`$Yc$;KeJu7{}% z2F=D#%hVL!i~(F!y#X34RPW2IUl(#s3N$q0r1%0cKvmkA#5JuMBh~~o`s}q@K*Z}V>vD}(6&s))w{aY#sha~$ z8%EG`&4qe|MR^z~r|^K0D$InIbY2e)(V@{k?qE??|v#o<`{U@&3(U8Cgf@b_z_ ze!NkPi>H8D@0{03`5ZuWLt|MsqV2x8-|VNMFSMp$t4U32mdB6lRX-Lg--wYu69 z9qARf{ut1IRCkEJ6H*r%3^jg>Yegfcx2Wnot_{I|g!|qxuQ#<3_(M$D&U1L@ zNTB%8s7c^;XfV#JA`5oM(%OD@p|+xfMQkF7b>_HUg%z%@ygwGQ&4 zzzEA!fyxgmI@8~9JoP3TZBa&BKTroTe-4tgY?U(SX_eld7)iZbLwSNlo0CJL1E6D^ zJGNv3nLmWz!vxRt3)J<|#QU?aEs~Ccq@LM$Tr0EB@a>>9b~vNp5UGs7B#Zfc3}H^h z6{H$@WG0y3uR4+`JYb3@WE$=X1ik-W->YKXlpMFor1CJZ3T^~v4R2u?`*kvZ;TP2f z=u@gcWi=Q2c@^>Q{dZwNr%aHlvVM*xyHR-VSTYb=bZDV63)yrkdZE=IU|^&&e#1cL zjKK5bOIb_jZyBTa=oa>|qWy-W>svXqEr$2LeDP+#8=C2Q9sC-yf6Hf z4*^&mI`&?xtonMNdAXRkUQMt^q(XIop7o1{LPI*=ek%< z37ii^2Z6c;k`$(sa^1cfsq1NDpx^r+uZ|H;|4%RepVJ>y*w4=k+X||bMNc@fQ!~?0 z*yJ00`PZ>Xsp2+uO>tIziGLSO@-=w>Z%7@j-F zZ&vB{JxYWtlkfC^Vz}DP8CJ(17zL9rk>o-=DGP^6g)tK7oMG$0nq;?~vp!CarSR@w z7O%n1N!O0O$*VczvFpK7IbGd6EU09Fn4MES$EhvQ9!6 zb!a))_Wgt>7gcR--X zUsSe@c4SP5YtJZanYwnZPD&CK!7f>7v(%;}72wCrMEaxkjrDG|olSS$ku-!nzjuS#8B^nnZ=_rCC}8 zOMg&rnvHV*4El9PY#md3u#-!u0$$(-e>N~}M~awOdlQ)e<4>MtsEb3G^i;_NZBuX&A<$SAsd;Qqhf3-$1* zo^n=n{{5GtU&=0_AzL{I_G#HGDTgW-uxao|3c1UkxVfBigrC0!{m$${{3*^p=Nlx4 z^3Kr_O^+r_pPxl#EA&9WMPK3`zpr!i)#b1cC){YzeVWe~3-ptdsUK)Ziqh=GS>Cc$7q=O z)*g#VwBirDdS=cD9&{UGbI+xDoYb{zvh>Z&EoWKEEcg}!W8>S6Zw3b3=;ZMn0gi26FSt>^kHO~2V9c|(rX`2W7vcUm+9{{z&*Y^)ZwcvXQ-BCdFO}7H_#W+7w8@l>CI|Fb&#5j3uY9vY_C;fpOa^3a|{A3?*y|tTiXg3)@;BpU^vd7B31qZLP21sRnKtFQj zt{tv}I$f;8in~>bYS%#k+@;I~g~hEu_nQn>cctAMmnmiQSjJyf`Vi~q5F=q(8OoaQ zAeBYAXxgdVWUQ3&A$ln$rXrj=B9{M0tjwghwe|f$O7o2*5o9v-^y+*6{{G&@CHbg+ zmneu7_}Ca9moa;N%5dZDyY>--N6FpFJU_WpFDJ|^|ETXR7I5RDY$2KEa*4U9lfsl3 zK2=GFb_^GiOpgZ~Ah?Z0&}a%Wr1r&vWSWD-q*2{Uj5L-DGBvpfl`yO_HmW{kdTQUM%F}&WVt2qIca4?bt#RymM+AT$$16!h6Ft zSdm8Gx2b%-ZK!BX>umzz%VdZ57;yC`RlTPHF(W4C?$=t59|;BisY>qBwzA!Q23gvg zeuT;!$E!ZxkR@!L-HdKjw>KWzk(k8@RTLbpyd5tY_IQ}Jz9>6)4fCs#Us)p~w<>ra z%2Q}qG3I{v?B`cW;6mk3j>svE@kP@BCvtq%u|r^ik;@+FT~9K*g~+TEeDTdsnOLz% zZ;Vc8Ee4|@9c<22G*^zcuv}T%O~Y6Bkt^_8nTBjKej@oa9};|FeCoRY4_ogY)l}GR zdt)yM*yv3KM7s12Dgpum(j_#NCN1<(LQxb^dhbPPkrE;$gb)Zy?;5LVpA@T&ZEead?4*B-t zsW$xG=?b7Y1(1@mCfX%?TEJ8l>D}0%|WbdKuf_Pr(4GQ2{DVY|AclkBU7E zidbW!FeoeSBYgtrK%Za|(Ti#@RnDMk^e| zU1zxaN{{;Mw0A}p+%!v%f^*MFRYccZrcC;-?OjsResQz3Rx)>5E(vCF{K+2DBYAh|M z0;^`vzFB5mRpO!}_mvMze`)AKX%C|Q(zL$ZKZ<%)U$Jw#Kj+Idg7kEej< z%V=?m^!H;fKF6yi3X;vIwneKt9rsHhMU3h^Y)D|8j0$UoFHmjLEq$l);|!o zN*P0H8GUi_)w3{2dG%60Qo*B#p4n~H;}Fbf{dL^Xvsl_{ zob`R{q^5DBi0Zib)_PCY8=+OYN^QzuBAwJ<8b$4&k>vr$x3Y_ef2Ik7DY^TS5&>2> zom~8k2Y0{kI?Wm5!?JvR#G62-iTO~QYJ##3PX^bTMcQQXOnJ> z{NK$^DJZYSg0 zsW--fn&aA!1(okV`Ok?%|4y{yV`03|`sjQCMx{HGdW?tk^SdDRM$lXJR9qeC-8vg< z+34*%5gUcpchT**s4DU{d>aCH zaq9iC9jbk)V_fih!_9wzk$=6`JA0uQcPRSQ*Byz~70J8YoGJSzcV*GCC8s{tHvK|6 z@0F+bHde6Yy&rK=F%Iij)pbPIza$vL7hqTPZ?ymqnY|^wy@Wkc0&4D+Gb6GVLZRrLHr{t*Wf;G?xuVEdLqgRekd8}!kJS~0 zPFja*HAeILkskYQ-F@SLw47^FCnbYN;Zc>Hm9!h%{FnIV6H5>Do_2I0P_yDnZZhUv zR#AyL&WjNm9Y#aEXTMNxU7%X;B`(2*a+j#pCQojO@iJR}r_acVrVOX!6s=?TPLO?b zo*}i&XYK8bX1?WWJfQORjD%a8p?lUimWrGoU&-ZbZD@Gp&AGH{(bBaH&vVf4 zYEuor-Sf@r26%$d;lVcgf%}gBuM+4}J!4>mdLR)&XJ9h-9O>N^5!DG$L)XqsSGRJH zU(OLy_pNFZSZHrhzP`S$=iZPAoSIhf+)atluay^dq@)X-SHIT1g^}JFc<%!X*Czc6 zM1{AVIdab=Y!il%Zl*S33#@s9yq|cdH_lFu+}xY^BT%K#w$QDGCIVIcT9T$N4B1dm z)!xq20;i}v{X?5?XBuMn7*m!`DpWso9=*6bwsv@P2<w=%KyOJVen`Y_8m4g|rbsv?lb9M#a&`l9Blj*K7g`RoxxB*o| z4%cCfJ=CEoKKGL%2({k1hi{^b+2RF`6YGK0B;>_lVLi>yIW6p8KGlMb3)rc<#(=AI z!FMa7U<0*{f~Vb^WXRU|Z!&`Whi!AVB5mjceq50EfpXaYM@4&M!$y5|YT1QwEp)}>+WtesLwuLmGliNP zT7mKaoSxJIX(QLo(T61JEfc?b-SqP-PN9lOAl`K0`P%O&S4GOZGrHO zW#1jFOWEF(AkZTEL8h;3l$pJko`_*?Kd)q>_L7$#H><;7Z_EMxC}fYCxpG&Tk%GHe zTfSlz1!qY0RwT6VLu>EOz$T9*Bb(=@#N*$%sa5+YS?LPcC$RB$p{d9pRNTndh?qLCXKMx#3C0mS_xd znRZ)?jb9G&LFvodZY`%WcY`Edi29qv;CY?XZ>JIh3nm1nzch!8RA3uTfS*u9JYquW z?UMUh=bx?Rz>`RLn@H|07=w;YcGarHUz&87UUu*msuWxJjV+<=oE*5(7Hgr*sazwgTNungb1Fpqq5!lrT zxh>*h{!gFFTv=#{nB!4%=Kj`QTR-|`pZh0u=P_66+NO+f^<4;@?#c*Fc!5bZ{tNDUeA|7w*CQv@oTkoH?B*7(#XJY`n;E`YU>mKGN! zLz#TCV#?gNlyRYMs#(48!#2zPPA_Y|$i`TUXy4udB&5c5Ta5#QpJ+Yc05jP3CS;PO ze_o9Jj4K$U=(9Wb_5K?6dPC+De27WT48j@*tEkUt@=XbuZp$_{UEtI9_u~ofX3IA6 zjPwjP%`sEks?bgNTDQlsE!=-=G*KtAs-wlv#m*h}*<-S|*O5vYLf&CkteyxB z^_v_1x2$D5evNZL1mNhJ%tbtdf2VkDKf3V^JWQwI1DMTRk!x}Ev6iRuwN)+gdSJj< zUAmv=5(}Z}@{-7{HE9-uO)SdKA1Seu^MIWPvwtJ>ZFfrj$RBRl<6BY!pdZXH6|+eXM(3 z`R!5rNT-G&z_#5mNf*sXoP*TAB@hbS2{Mz}<;&WBP|M^uyM2b@pDhgwbi(~jRIl*b z+Ik$|`>zCa0`Fyvr)PKziS?1E&PcMck<6D_QQ!hwHfbmR1#6@^(p0gHu4=eoS)@(w zeas`GS$hg~N?Ymi-lS6O>g1IBGkvdUhmk&SsI5#=aj6M!npn`b-?xrG&H4Q;?n?5X z7_&R>iMcCQWP;n<6tl6i4po(uI!tBX}s6g@3R3N#at+5+u@iP0%+`OBMGIkV#+GJ=-v>@FX*>aP4e zg{*Hk2uvz-iBWij+_|mxx!rThw#~Lhoi9s5e2E7ggYc7-SV-M_nab2TzL+*1t5!#M z>51~QGV?=lZdZozB1A|J`w4q@ZgRpW-x9~bpNs%IFbzy8U3D8ushctz9z{y?vGCvB zm8H@`3XkY>kvw(((E<-;h}+pw;#{gg7O zE4xxF#6D;AUmBi!o`Fo3dLA zbAK_Xs^nUd9CKrscS`P`oA-_x^AeN^5QZU(rQ?e4s|qlaw1@EW@G&CMzB5|ovg(W~o!*QJ z;0=9VKmGOV&gR(Zk6s?kPgEfIchNAb1Jd}J*D=#_G@7c&}VHNV^9xU#6K!o`kqUMy*Q%Wh@J7V@VLte{ua zRw03SEyTM0(p%!TjGE{{tAvWUQ0r|S+Sl!EyzyTWX}B`azn7<*n&Ql9UTC;tX*cp{ zH7UPTKgQ6PxUsE3E~Z$K(S+XlQ5`+Fu}@in%MZAwet;M6^_t56l)LxMnp%4K_u}~X zmq&Kvj{JDGqCzhSik@Y{53U9Aj=V~pJqJUcsInhduZtKWCAg*jx3uYVuu$r18Dx+Q+z(NBZ%~+>mPjG=AXZJrY|d? zCL)C%j=!2a zxO}Xq_~bj=djWON6bFz5zazI(OwY{}9zoqzoutwwYkPY7=Mulj^9$}+c#_w3!!J~I zJdc@8MKC+2gQH7N{%tFMD?naD!u4(%riTaWz=TM!kzj%+;w8tFA(6H9>lfqlYy4hX zxI6Cjq(|Kml)rvWM90|DrE7Z*i7n`UO+w<*{DZ9=m6v98ZcVz?>AV~sHsLU%XNZL1 zOm;YRT!Jr*KRG@p*mmm`&9cDO{|u4Q1tVq;#U?`oywbXEBCDh~?;NmZ zZyd)Uc6>`4D7cm0P=e0r_;J&|4M>!!nT@0!HfLgH0p@3pzbaaV zaZ{E5X|6SPI{lqh$_ZYt8P3mJxH^}=nnW^Vstf4pM&{g!PPgj#)jlQLcC7hj;Tzn;zRhA-@gfFMf!>`r}_N?Rjlc`sgUL zf&iH$V|$*IDrTwkGDkt`POpkzd1_U&o6Ums#G$Y5NOev8fI*sTpvua3)UdGcLK}Wy zQE7&ha`0;xGb6}Tqo+2>g>M#^`8q9|*u7u*mfhAKD|w|y`4C9$K(D;`Gms$buF)rL zGThen1mECGE(wUX2I#v@(oLE#J_xedqX5aMHSI{4rA2JN398Ga+1Yqw#rFpk35Yc% zfLR*_cT1ktK&9K-Yf7O)0F#?h;u$S=8?OVlZ!~pSjm_KIUEp+gejCSWzt6M}u+Nyk zElt=fhL<*>H@qt)B%x!Vtsh==jX)FcG%k+YE6Xd(a=p?GZtP#^hrl8>c*gptm04muNV#^XS*){4z9zjl|#en_L29{%owol<>^YadRy-WGM(p_pb znZpMabR!-xQK?z0!l2a&zdla%g~S1oO1$q~xv}}gk>lKpemC5P#Fa=2Y(6Ssa6ZCu zEs@o-t2LT$5h0VD7Vhg`p?oO^ePlb8Odk6)=?KCX64|xtRFrt(8$sL>*pPd~Jlcwk zuLJdM6?DPdu5V?c6*F<}=~k(96~6TFiYR_UL;65v3duhHP|afa6e_J$Fx_x%BH(fB zfWOveJ+$N5e2#rZHajG_Jo~JhNsV_*MeDAadJH_}-~iAA=_U+T5!y-DawL7zqn$_kJ0`a%SrHMqfCyxj1Gf6hgW|M< z9%W(G0T~16u~A9~+af)YqeQTs9%Gb9G-FvS(~d1--Ml=ZRRoWS*&2t5wCIi$`lk~- zU3t$9X3Q~z3+_mb6z*OVC0m8V0|Qz5wU{a1=#i+{z5SE-9p!E#HYHR2X{v< zImtgm1B+l^irW06gb$M9Qm<9a{Py}rBJW3))p^FFC&q`wt6p|3GNX8WZg_~646^N* z_tcL+MzYIFc=Ci;yIQpu3D!SM&8$ajW`oxwyoRep-YyNWarqFPMa7*S4i{BKY5V%l z*KH{^%{j;@I!x2@fCWA{-gkW5(EOC6^VOhfs z(g2s1!Z=(IpS`{Q9R<0#ln$T*w}K&Hc}?$<-9eJ$#b5Y=cBBup+4I`|3Cou+b2ocM zrtl658>~4j{-Qh@Dko z_KAWiS_;O-rP*30Yo+oh+a|r~KD#1jOp@UajOWw%dB5LcezgylK3b>nU~cULcHD%& z+0P0)EJG%gMGo#@wKwKpf*0Zx2iW8+K6PtXa3+qX(O1XT7qxkc$j-&8=u3_fEz!iz zG{pV!Hj9Qa9o8fi-GbQ4#e}b29=-x<%R;gQrSuiD#IJ%0BXyuORKcL5q)lPt2Q50i z+RJofyJ&nwFBLmD;tav9!ZiU~!cBAi0;#!MO5SPUpH#vDB`egAX&=lUKGbx}sEK3< zpN3d5c~U@jut34C=AD6=V@+5}5P@-_qpKq!X+8IL^@?>=)^cbw$VF2jU}9w;A}vDl zt?eccw;wpRs{Z#@^y3~S^*B`TyKyIbU&(aty9O`uB~b*)7ZXoJN*M34L4#sRcH@j1jv=ZC&QI$P zzUgy+mG1~Gwufz{nN1~+{?%hhFXdXwU4yy|>QT791h8jsIq?~vY*)aEP&aie1`Y^N9sb5-G zg-*Ip#UXY{K+UZ)o88D%R0?-FGpa!UN5SF^>2~(}(Z5pV&SaKE)f>ZWHTL7?MMcGP zk3&=@R?qqg19h&^Ok2I`Tq<8L-o|i*ROYxVvJ1}h?s0$tkVhIjxAW{EkDB!o3QDaw zmE;tPe$QF8H^yC42jU>bf`*8PvlC8w29_>=(0O6e3>B~o1K+6r;kXYd)fipnP;&>|J?nM)Y+8*Orrt1tYe z@yC5*<*iIm?m%!D-&Q*3^W=u-g(a>8%UuV-)lN!tf!2m4`+UPxqT#O<9Yq|YwR-_x z8gjoC3S9hhEU<}LD{OQx$$?~DRzk=6q z9T3))jJ;Vdtou7iES^ohYJc&jA$aY3J>`p%oV%?v-IM%9KOMX%F23Adk-dM&}}V zP<|>wwN9apgoAIWC^SH;N156s7H5bqt3$Lo{8Box2>X0q^|unIZeVD2J^_`x02#)> z7W_gU*ndN7Ouyg11lhQ`ve)8|XnWVcbb$Zlc1?ALiyqzQayGE4iSkp{(Jv{o>86}K zednHtn1KFqqJDpQuM;N0&FCM;)V*b}DZvqkQpzKVmG}#(i8nOWRJxNQCof+;8Qmt` z24S^_El8oI?EPd%mtA8hsJ?zG31p1Drk{2lrz>A-ihh9bK%!@6EGL<~vfWlz_hd$V zwKVg%sPgKk<=2a@vEEPaA+U2o+ORBbdcks%$aG9s9q(%7wF!IjE1Xr3;H4KkJ4WM; zY)9vtnEk4VM%P!!Zf7b@E{jyum?q2nllXjbw}6lz$q*K_^4)#HtsLRLDBz49u}EN6 zJLknt;k~8KC@NqjMYq;u3m!d1C9Tk~W$vsEJ%6(xqRiV*dP@g{o)dZ*OaKk$X0H6; zw&VF^G=yOsLj}V|2i1k_fiqWs-1{`6&al8J`RP*u6Q!NxD|#gz;#&0Qdki}7*2=Cx z4&q{#I3iHi!T?6Y?@}agFv7@)`5apSHNZRn=eoVCi8fygmTY-l?bzzW3cm9{T^lZ> z;s?6Cp7{}JBk@pkbBL>=-+8|~*x%QUPeu%AfxeI@jUh5lr4_|oCM}&hCx>4d_C^)A z!oEUm?k`W|Q*Bc|{S*Y8fCCZ;(uXR5;s}_gR)h;zPwml!aiQTi^SblW|J!9h92o&A zq@7>=z4M=P@E^8f~*Dow#=$)^{|89;KV1@Jsuvd_)aj|qibhx z!&!Y%hwLaHVjLqz+~ZO`=L<17rFEWc#- z#Bj$9nN~a(JEM!uc9C8=d9YfeDjNF3B#yg@Qy!!;s=BIURu}3(kTbV&Q~gWxRoG_g zL^wE{==quhj@BC8LU4N=N5#ZXrE-f1XH`qmMW=_YR*txTv`*hsoaXqd)EgzyHViK; zFk{{TQ&n3|SsvS-0^gcV9qzd%e|j&9C*Rbyyvi@!5VECxoH`WP2SvT~QEw9z z5o}Q8*OQ*LrVVH2>9`<^jBhtsr&2Fy7_APOW&?n*tbzTwKUBt- z%r-Z9pZd6jq&DU66G9iu!3k7|2N2qFEV=xr``GC(&B@ck{wa?Vk#`)D>`86*SyEpt zN`MQ|9HGfbx8D2f-IK#TrjazXS*AEENGPzfNn?ALj5qtWQ>w16g8sP@B+`+_B|Woz zBv`udie9tqh@`YdM+dj*j(TM$l6G_~o!9kq%r4fImTneIsfTVvYqErL_GVmkz0ED@ zX}B@S<NWi<0{xMVPTnhjX++cN z61=CluZBit-=0k@wj{Npq4r2B3R6@`k9VeCd1~MHwKylO zSS!;v$YUZQ{9-6~4}>zB8i4z$438hhW+x@-^7|sx^(%~*i=5|gbO!Nm5XV1m4N%Rb zxJWqBZvgVJ1IfLsUOI5r7kcZzZnF23>b1W#QHP;>$9ZR{&DTd_K~1cc6wOnEG)Sn! z^w;^*n!hw>_b_9GO^tcVbV_BHJ8Ji zVQk#~OLIN6oRxYZab|JokZ|17Q*YWdZM5N64|9iJ zTmNrU?}GV+??+hn;0sEIZ>stOK~KOH;a^>LRk0aGY2pN39`(F51k+}kB)_{67xu@+npbApblG^t z;Rf%>pl+@)ha3J+Lh|iE=6$}2VwK` zVb?_vxd&#aZ+k)!lcBp9>`uu3nWW=n+);j?{a+eKD;9HAH`U!m5i*W8^-)IKCQ|Xn zS_SEg%Bl{eGNBu2dj-7EH7Wl6S3KP%PPJEpjpgRkZ)HWM$YoieZ!VFMZcwpAQ|uCP zuI%?_cNYcP;~C*sZd2W$7*AT9$LJd_E`YR5OiZ&m*?mfOv=6`S%}^6;5&T7M`_lK2 zn66#NYfiPFO=mZ)_5KiF9ZLwTSxsRrULRZ=dJ5XNC-dJu?cx@ko-VYfbg5>$-{In( zmX;S2dE=WMKI~s^PZ+a(4q`HT*|`RX^fVJW?j5*`&~XbAJ$Y<<_>RVeJX-yS-iQEmXLI^8qhuR%b+sh@oI55mOtp7f5}3>m%HcVq-i+yO0D_(T zMOM=CRC%pZ{>G`X3$Dv<$pj5y3ZCmTFkq5Zguyg8ic>lJ#1ua`g_ zm~odKlJu-{v+3z*bhv{|V(-r6$jp!Qfr(a8sc$}cp0r86?H-t1Xth0ZC+^V_VDK+Z zO@%iYK1M;z4lb3E>!*!L;ObC}42MN7t+uMu>yVufmC&#`$sHS)&1WzElouDERcBRRY{# zXcRlm*F`Z^4f2}AhX#;BYa7Z>v!Vbe^A)Ibe`!RJ2OObcnio)lkd!Nr$W1l2OM#Q zAN6CK;(J>DgJB)}#jV^DI-}%$HfWVnMx75<+(YCr{d8C@&{2zzJB5td(XDcYKKmX0t^|@K@aiD2PzasYuypq~l6iS=%JhSX`4Y#~{ zW{|N1>N~BxwO!_Pl~-nT8Uk7UaCcV_U($oZMy_O?%p)pC*4>aQUp2QS#NW7dcu`i4 z6=Uyg%ktQySlE>UL1u@je+G#Se-cukYLHm({XVn5$#$OBmGtp1O}Q-KBoij+WR8~a zS$^kgqPI9cI8x^FmuB(>{>k)og-@^?+Tu{2-M5Ik@x70y8U^FFSW(WZn5=5*tlB_Zid~L|-^!PkcpP4$@6nYw5BtYwJy&BL(^x<+24TX%hrgk6XH&^e z9^MExnrSm5qbD_Pct1|&r!HQrHAz7hLcG1PqMId7bob7c5Of;@eGS-w)J-Ixr^d9? z(B>Dtj+W`+$I|`MY%wW>?`zsT2tJj8wNf503B-iY-LP2%o#=aSQ0C3mpaO&9AG$q2 zJawBXR03~~NC##pPPIpzCp_iRypAatf)%|aYfl>I$Rz-GfLd*4A8*VjNuR_;w4W=J zkex}wptTA=5{InG9-er~!b8PZhnkX&miqqqcgV8s!z;{RG!Rkq=4xgRn-9_4ALpOI zy3PE&L@0YjgO!w^pWG5~DO6LSD%lhrJIhPWY!z&;3k&^|9_SxeDiJqdTB6?LSf568 z-%hsH&{jNC4E+l0<9+|_#te|(W~25F1a?WGlA1P`_?PBgsCJ~5j=oPB)q_v9;xyg9 z;#G!x4?2DAxsx{&eJ?WThv|xo<7b6nG3w@~C%r4Aaw<)eI*`BeK*P=>^jhVEf|CcG z=NUfkTjj$eu}zaFsoYu*BG)bINB{i`?Y!c1PpR7K2S0Jz^;5>R(y~9r{$|u?k#oiS zhO$*}&HKpOL8dqfe`$VAAIaSupLhB7T5j2S674g*EHu#^DqxL|viS16o-<074x7=) zyO;ff`Y@V45WWr0VC#RnNmq;>6%w4*E8geUx2`c^%Adm5N)P=rLJZm@TJ&!<$l*e) zsxND?bIHzj`MzMatQ>UFSQ4MlyHv@7v;T8Ei`#R2q_-)=L5?J7-b9oP2{3|}Ii)hVVDkWP+R zw@EXe5-vB2xo6XRk1H4JIr!Gf=+E+QQ$m~emB3rb@%rJ#lcS-G zAOy>w#!U;_%G5g9c6_hp6A_WQB*e{iwS9pSa&3J)c2;e8-)p^(-{nsgJXsoKZ0hx{M$YD>0!Ybk#HOi8WBagwW;Q$* zcnENj2}&oWP3R_WLMYhD+4KnNlCNV%4I*c_J}2ib$sCZyZ^r`%o(D}_o9kFlJZ|&_ zwRZ{WPJ+3xbPA|vmwZYb*1ejm-yPL1ZrPT``n)Q%{o`vDaL~8~I-_WMcXqY<6}Y|a zQ8%eajvCF47HQNR*j!HWXWFn-Z-`?}=n7bN4IVpmJr*Bhy?CZKl9(~?QSZc%77Bl& z`&30pq$3b)ZB=gFZ>DHmWTs$boSDD6Wjx!)LJpp?8092Qjmn^|$r)IbrhbK#H0ngb zxahX+%dBO3&g8v&*nKaGA}D&Ey1yQdMS*iW>6P2^!WT75r5sdmBKCKvi!3?Z@5wSAojo zeBmORnRO(V)-Y0C?HxYNs&o0>?Aa9*eWxMb6x#`b-TF$X6Qnrz4sDi{tD8_Tj#Z{W zvKM5(eFmP6OShFvS#p=B#S=~*&6oc4)te~c(FRMRwP|FFYqwa6X z$Lr-=qGO~5_bNSKqY9{KvWs@UFR|@_E@uE`4Qa1Vm}p;X;=8WsV=%(B%U?25>M_&6 zo5bEhoDFI^$BK;Nl^8vAVCA+QOYH>UuRTv)>g`obq)g~rWkuix8=&15l%6EMD=w8O z2z7-L=affBWnqgAKEapznTEK?`=4&(v)zxLiPHhwwwxiUNG08GaJqzPp%zKf!Drk zw^k}XU65KebOqlpbSDO>@SEA&%}X@dUv6wi@J}iP?Hb+4uw2s=lCKC7F0$e88?T;M}~y03pbFM#!i{icQ!y#Eh?* zvV4+C)Z?Cd)koAAHUxou7f}2IE#|}BVdG)qwW^=p==px@`+@dHYovT&;Gb8Q>6lY` zs=Vg*OJNt^r8Ok1(B3jwARMXQD4a&)Mdic9&A31LJj{E#l>mVST+lcCqtz3(yYy$1 zEBO_b|CScKznQ8PlU2B#cZ~>}XnD)N7Zwub1YEJ4PAwa9PBYWkq8de42iq%6(wr*A zZij_7mMk^Wfpd=!0xo3zv`60-prHwVm`0tdi~Anb?W5nf6Wp(L0EBO7e=eEWKIMNO zoi;YEzYi~2RqQdlY14g>Oz*_5)Wj49IG{Y#dEH~lp#3N%s_e7Jwq0JteOTDbE}LHm z4Wz5mdvcqh*NsD-ZT8^(w|k!l`#RFTEm>1T-+siL_rq!#4^tI2I*J|`m9aTnc^e?k z+-l8{3UNQ^amW?-z+HfBi;+?>Weg@hM$QJ+LJnAg_4u8fza zD%W^Q(`R=Rk>5VDjCi9q44cj+R~@JfhvNFmHdxO*UPT+WqnPWCmS`WK4$0YR2}5T{)GKJ?@^ z)?7qk!~jzfQ*qbLu<88#3q~iq{|LCx)%C^9sw-=MX_D2bgUi!c)20hz zpECt-Pu`Q>SB)Tsf`S)H%^s>P#)O4Eqxo;E|Dnxq{!^j#p^`WWZk{*aW3ZdT>Y-$De`^cNMN5o3QUf zn@8IVPe6tItw1&SsVuKxE|r~a()+p-e}U`?b^!6 zRn?R|mUwTJ_K=SlEj7bc8@lb}?T{Km42O^HWFIFW-j$f(qJppS;)B@pb%$iTBoxmc zAH2Dh7xHx9P)#!pEqd{$a&45=(0RSA4?lgZv|p;BGQ1lPVr9NgxLIQ1ebU|TO}{)SIcYXxKIz6c%{iv{tXD{w?)pWJ$z?Yu7`xw@P*4GjmkA zystrYla%$v?8ofz0jdqPkN|A z&Wf(w2OkXyx|S(H!poaWtm9EprTGW6F<=|3;+nNH_h)Tw9T_R8T8fz(^eRN8cWMqQ zOfRAHf&%lFdEFwi#&!JO+@~kZKFKy6Fh*bzRTzR}N{J55m1%)XMFJ>OlD1FOnk<`# z}65T?kKWvpZQ4^kq@TFzp$v zHQNEb3M(Gyup%70u}IBs6LvE9tf}A~g-fmJeJL$s^=I42c!!+@ej1>#IW2kBJZPl5 zI*7>>;|DiR9;>J#Yr#kSdwxB&r5m8M5D8oN9{=#dn|KR*w|8MvGHN&6?E6?b+~{o8 z-|-H8_Z==(M2YSP&Q}nsWxaH3*SJKsR}{dUi{`2O*Q-P(aU#k5UsA_Mifxjg^=qce0aB#+3_ z)E@GO8#)?#i#nP>g^sZlAnoX!yni)(gT5E_&WZZ&0uZ#Eb3FI`-0*UgLmh$f#B};_ zVC;d_I<>s&q4hG*uBa7wjzr*Q8eHSYC-Ku3f51RLbvS96L zS^B>HyY*{rLpfYbdNLu(4JSYu%2TO{f`a9c%ScJyn%mcC5(X1~9x|r@=3VPFbme&` z=C9HZeh4uz)~$GE5Iw@1WGxXVLdUm*CmI-R8MWPZ+YLyNz4`~0JZMmqb}HahLH8#K7| zx)}~@oS3L%_CTb&C&_fB3^I<9)trP>PeKX+fkOJ7+B&)+H3H^jpHdLIKYmGrYmkgO z8_h2?!|4hd2*}koV5kW~b4C!SL0+FX^b3#lQW$YqZLV*O{EJal@Vh90VS}7;SPc%fLkMTqVwL;g+lxxt|<5bEauT`M?Ro}K}27n!D!}eKU<8gk+HkReAs|B?MV|&~Ahy9GWfwtms@sF|M;HNX0h(f;G-V6g8ArC>4NUODD<^-88PyMCVsYH4* zpC@fPd1|x9IPreBNs~6YB2778;44Z7?)RH%L ztckW+Q)qA9nZgahCw80_8OZ|MD()6(|A98poB?SGN??YajEik+m~la6f9F~8sIi%<2T5Qt$-W(?)%P+n{(!s zt*P{cuZ}j!cdahzIijUdlL(GHO|mJe26W=NjE(CvEYr-gkwN3`n8a}WnyKnw5(|M* z(E9|t7UOOap8eXX#IaFFMY+_u^STQ4(X6z;%;c~uy&&` z4a*tL581yZGx+8e?1j`5%fhFEq%kmk!L5VNPK&Mads`#ZBmHc0;|m?tP-dt86jm#pkCdCC>rkuyRTDsn2$3^-9LEvk!Xz0f84oD016rh`H5 zWi}W=3ElvG@{{dcXO@D}uXma2@4Al|c#}?bCwBdp|hiCRt_9!!cX>kXshVSErr(!v7Yaxy#r%{q!f0f zgi<{dO@d-$W#0ll;Vjw5%5tuh;}J4U{z%t?pJ1MveHXjbAG z-{j0f=+&NgmFZu%e;`s1#cw2a#XCqcFFAOE1j+5~FDCoST_!g5buB|mrpj~I00Rco zq$yPT=1~QsmRb$6D0oZRXU!CAbACp#$tAe)%R)5);m&BiCScGAxLCY&70u6K>|#-`f;4Ml z#@Qv6-OUlT&M*DM+jhX9-NZu(N4g2)Z##tA>mZDj$c0rF@~qJgEHVaifl6T_8OavPNQ_TY=<7Z>A_2J56I zW{{kUpY5zMkTp{=ay8&!{Ha@Qo8+ zdjSRM9TAZ(CG?^oARr(efq+Oaq4#P-lqxkss6vR8giaDdQF`wXAPEQoLJLR__1(Px z|L&eWXFu(i{X8@0JkQLTnfrO}>-t@+dOt0nt_$B#k(sK04lRoxlFEVqbkCJ}B~$BU zt)H&S_+L4|Z#=0@y77Nj1AfVgT5=KM%Uq4d-+i7kV&^H9x2|H3m~?`X_bt?NPB>!a z=0dF^2|b&ouu^Ieve4zgA@pSO^}0@5eNK}*Nq)mTKGaTPilws7BW*qotFg6+1kr2h zML8>VDJZ5Q!o~KI_fe(gN8h08W%(Aj;SZm9KAIdcco*OZ!3m(UdzcqUr9P?Eun@E! zm`h~dEg-Fm@-qGEXWc*=(>M!l6CjH!5x@-?vo3v2eq1_hGSku4D8_at(9LMY<09?} z+aYjN-B1r!+vbS(=?M?tf0_r3T+XWXfq8qM+#6Bhen(&GUbI)nSg=rPQVVM`7Svjq z5(bry(AKFczA}1LoNt%KOhEELN>WoA1zCa)r&=bjifpV3tGGLslp?4-xKg>9v1VRH ze!k1ze%Wi4y^YzU?0MOZtGCQCS{X`)E-(BS7-W>Z{mJganqeOL!e8|}>wyo9YY+m$ zLAg8xhQ>$aE%L;v(r2>vmyxl&^bZh39JOp>52_=zm2jIT^U3Lln;x7`Ny7$yC=cLF zce8Lsi!0W2|M@D zmeM)|zhF?i1*nbABAhX{=&3p{vdrXoLyqXK&3}W$E9-4z8l(p#ccnx=ciy(?e!{(X z(^rM|u_Ds}XoKgvh<1gaKthpH9AmcCxNkYp)-d+S=7XAQd@GLzT5MUQI_8NU$$No!m9eHNjvKqHk!!~ow{pfHz>6u%4gQI?RhiscY^Rv%-sgB{dkD9uUvP1q6 z`D4~4E<5k-(foGE6!um206$euN55cYl02yZZ*q=QLr#B}ST^o5ifefFHv_;{Vwg|HnPOQ+q+!tgSJ9CF?~r@N#_s`jeN9VNzw zG3fC#T&E*uipW>v@s>U9R6-b+xoH;SU(vQr= zf12o~+T73JQg-4AM$+Q$-kio&6=vAu%ORg2#=eOTzxREP++Ps#mj_O49u3y7**Nu{ zm6}=M8Z7!%y)VYp=%d9*O`~R+lin0`gmbw<+Rz*^7X&5-p=<(>%=)N4ISwBl=Xn4< zL)Fnuz=O}(D2CC}+y34ixC+N|)N7O04Ay@AX5WoKyX)<^9aZHN>n4|NHcJT}zu(CC zj|w>BCV2nP`fm8}><&z`vk2quML7LDdmq#Gv2xl@d29n#e6odF!`haW{VGU-^fzj~YIXPPy5&ICO)Uy)jwD1?6 zt=edlJuGf*L9HFo?_#3+{4$hJac8*^vYTa<{w9xdrWax4?0Owel1KUX8KCc zUj*EE9I5$g^QMN>Yrj3u*SW)DObkau$mZ0H!3K^9c|(Z@gvtkg6Z2@Eh@DP$9Ar*E z(`yj<+B+C`NVU1ke*Y5Fj3NHT@$)Q{#EUIp%q5=?JZ>uzLf26TI%@n{TzK6J^Qfg% z=s@0(%+i9BYrO5F{HCzwg{sy>I}5k^rOZ3wXKdd7c+hXvA5&L3#9TNlqTEAj1J3K* zU<*>)5`%h|CBQDZAh|yYWzg*hO^;c9u@tJLOJHR;NbI0KwZWYVuFE;=lUp|wp3|ka zx0Ai14pa+OCXbsqrXw;{fw-up`Y6g5r)hi4(o!mieGg^Gs31gfMS-1k$?Ahf7kpxT z1o1cD&4oSy-`VO-wxTqKa84~@M04AkDoAf_ZC{tEh5zn6ru&6TTYFFQ)D;cDi2JYw zDHP&-kBl1%*cDlGrQKdd%|5A+El;gSO{WGNPge$xuV*Nczt7F=z8&+fg4j-2pTrEj z9PRzs(XVnNjpGf;i=*tw`nf@Ns(baory`VXOpE*G`QXc8ujbnj0|0Jf!?NK_*~X}J z*~{BIQJ%hb!<_MhBB)}&z#5_$R+F~ZOt(ED65c_C{i8Q{keEEr+4{ulOy%pfqPd9T zwT-;-pX-VU%&qDnv~6Uj+Hd}M1oq4sH-yNT)P<@3oMt_V1$GE0E$vACQ`s4?b>2$o z-ur-)zJOy+zg{?NgRXCT&f~m9j#&p{cQbNHXJu;ddyajCcCfo_QAS_)EojrOZ_aV8 zR})+3Pod?4du;Qcn)fB;9L_dC{{t0Kexc^2*^T1l4m3D z!6Il~x5;ASBMO-M{r4K9t~d*h&XX{hK1olSA3hAKcjq zjVGO#CImWt)pFo3kRpD`gJXHRj9(A8!aJD;<>Q?V%zyyC} zH%8_@lt@+N??Hutls@uBa6ZNUm0i^b6j)%4vvJapz3|5oMOkw>D*g>n{YYy1^4}b1 zx@jUCbK`rGT%4GS;h#|YsZX>4lff1MmDzEsfdPN~O4Y%w{UB;Lpb~0zqVy@_v+Qn; zTWb1A{k2b~roKW=DrRQJ6NmAQp(iG13oPG!tuIt7J1kaGWyELYMIohzaNoe4b0W%I zxV1t!=bZLjSjfe2QqI=4+U^;Dq&SZGG@Hfd`KhW<;l{@O1m z`n6Xp{QryqFuYkkqf4jpZN$xR4x{OD>*QoPnmKmtMG;z?;1L!Y_CJ7;(1hKgP#jdX z(&g){kjWBUIP5NyA(KEYXttHDcDFcyCE%iJYc@2DDpD(YPxrlhOO%yS;;6x|(LIXv zsh~1hGxVy2rK1{r6BHq5;C`5Ix+tJ;n-cw}N@okmI((*1S3->IzlQwq7)h@{-N`NC&g`9b!{^O%kaw+UbyuFYzd|X?#Yku_Q zxR=OXN58YT)TCvh$U57z=LGe;5UA!e!PMz*LKmR>+%3rsCixbtkF+$IZTFY^;l~3v z@7@<>X<{3KdD@4v1!~vUIZAAllp#ZnH|4H0ZO#1;UIfeYVivcjLe zhhi?x?4_Nb1%)Bc6hjTLosEa=~}KSKCx%KuJTJ4 z9CBI!MwRWN&^(o+)d>nzrDdn{3) z-ly_eWA=UERU@r!=h;eUPPj;%crL7#8r*)2)e!5_;&0tvchZmlzCnK*)N${)owvm; z9*sMB_-#ZkP|0oL$k!?))LYK5yu}+BI8`6!R+K0*3TJSj_Nax zLp>1ny5nF?k#Y5F!|-;c2)31|nq%kFp5|!{wyGJ2<-^#zSr$`mVBZ|C;ba02^za1lv()1(&KtUMKWTo2>6YfyO`g$y0&ZRaTb zc3*CTKH$3s2V&qT68<6ROVC7sMe5R+y2=wZrH4EEosf_YzrxD zVyK;fbPc_XTJHX~mv5>a-ZFNkV<7XV9IxiMx?PMnS2xf1^hSZop^@M=ogEj&A>g|c(#p&8oJ#b~AfeF) zZ_#<#wa#}xzx=v-6B{*ut1PD;+3(bQz??U1)`H#6C_%sh``Eck{o74ER^3gk`4!ox zK)G<9W+N4qNMOEJ{#~re512!y<$~85SKa+*g%9&z(PXr@F+hqf?yrvLfXW6(uj_F* zY=JLvT}B38;Z83psn@)z;Hp=_xmW~m`RP~@u9WB_TBy`$oa&JI`4>Ca4c?RAH0vck>0A$gJ{MPCtl%zw9&errqvRq z?RQv}crzsFc+6c>)$Fz`F+Rty)`{nzY9>1Ydkw*cS>sVru@-91@mIxAH{pxku$Q1F zTKfJ(ieKM7ntX{+{@;op{;cI3(RyHi>?N7ul1;_8l6$>`A{eDIxytpPZ*EdSn$G95 zjjaKV_Hj2>PoqCY*2qQ9t?1bNanmm`;qQ;s&`d((GaSS=EaIq_Ne30V8MR~fcY0et zSNx<0y#IB^afe@5s=(yus+;Cr>kKs*AXM8}#NrHX$OlS&`YZ(;eUq)!jebUkj4dd? z+#j&6RW78p80JK~cIPyven>#%$xJ!im-}TV-`kK6>oDIFwDvLZ?!AQFi+cp2NHA zN(L|3iy(&B`t$daUPn{W*|4lp6vsYApubN=svo?!d80QnN$z8!J67%L?YWCDD8Sh^ z6FvV7*_Z3Id_351;##tHN%`>PxNh}-VjF$cn`~i2xPb87FRjdCQLNx@UKfoWX4y+b zo;%k|-kD7~VJz~?okr`C%T#nU>;6H7#dS=l1hXIo+O~j0EGi>74!MAJ&p9Pdn(q%*Tvh>ArO`rtSyl(ZcPazg0HIO&&^?I!$`+wv)89=)9%GR!ubMs7U z_}0BESJ)R_OGxq#93MaWpr3>#A3D1WUwyW}54>9L9~->AZhCwgeOZVkKO9;Qoyv6i z`@?x=F(N6Z@|xBG=x(eP`>Pb9LEKkdb{qs~ZdLv*y-sjSbNPMN|Ia{@C_yTj#p_JX ziFmLd)t_uO7HqOVpysQVIwaSczrQ@(W_|3M;Jfu~fLs-V5)JY97G0?MtmM%uGu<>G zc10>`=3!kAKs6g%XpYOoRTG9W{``Qpvl4t!Nu!-^WjwgaXcIRaS^=^=^pzbNXP5m^ zq~flaY9pY%Kq9W7v!*%l2)%qMqFe&2UJs>i^tUU|oZOSs!A~!p+=^UDD3IbQV8`k- zCgG*+7AAxxJX}IdPTa~iwk?mu!&YDKNLo4iZARs`t&-5-c;%9N0hC?CCXgHk`-hF!|sia&;*T8x#4J5&Fsu01& zP51G(FOrGS&6u9Os-xE2y}tK%KR4%_;x~~s85;n{Qlw;`rR4f(a(S3rDKC!Ui~6gO1#*rw*cZn+nF4sGP_6GfceL5DwBP2 zdotQqE)h_Y%MS424U)JM5CIpIHo?s)NOr#j`1> z$wSP^)|E~R#IBan;VAxg&?9Lku8to!sL61vTO}JaA6`g6WN_4Ox)g9vJPjj_;Vd6( zsJBUy!CS<@*d;)J!&^dvKxF>iEP?A(M`>^B*^cfi>m(Vi_#-EyP@_r(2PBymK%(IMlmAEvEcZ#HfO`cuQSS4Th?d-NeR$k=Dv*On?Czs zRmR2r`mVgY{)u-4qvkxxMAEXngHqK-*eztIA{4IJ)l|M*X$}MZEM;Qi(hTGg{^J_? zRY&gmq><^vLSEzITlBUa_GeeXg}_7R1nCK^I53=wj|1t+UhU9 z>@e-PFw8aZ<59}OGrnWMO|5U%+%=cwWB+jhXqP0p=#aO_mUC6>$dcxKlHq-41xR65fO%zJG8QhiU~0YE4=`q$|D)eopF<{ZU4s*9KI&dBi+3hQybxILK=)1@wQr z<6&KO*ZI>c%EzfzVFlTPfG@aD_A}6l!WCJ`#3IG}#vWGr884wisz_;$SI8S@^GsWx zrDVa(#xO)Ztb8IhJzHn@0Ri(WE$Dck(qzla#^ckfzh7yWU3Yxnv~GMu9q9&~YB^p$ zTIKA)AEGDls!3Ex4!ecbgY;B4zxzmc3q}}e-E!ABp1f*KdbMv-4=fvvv4?AVV3!dYrkBV9?p#4 ztu8`~Dp;otdc+Xu7c7w^|34_d6KG&AQZbwnsTT}~!xj5^>d{?kMuBk)Q|?V0y@(Iz zD;yHENemtp_063v>K+^spxTT=XX1hhBRf3w{AMs_U0foSNd)^U;?VL@S~#oIe=d@v^xA9rPV0%7!I+7>-O#V zl$y~p#N~{4UF#i>Rr_+(I}?nt9#Xxg<>`VVe9Dms!rFf6G&BuVt(ol32n#h!uP5R^ zL=0K=&8vBXQmaAbmAe`esSY)F8o#FEkc}gb;J!Lg;M3U`?5kj;O2Zs2=KWg+a0j?y{bkw{rvz}yk-FVEirt~CWm!QPWYjdzxZO( zSL$PDES@k6h2Kr4vl)!wLi)GXEv+~>cFkSQbzg3oTD0Kg&6&%X1iPYq-J4Lt%-g;S zuJVIREhPp!@iX7P!5Im1?Y2S=NlILeJ*z zcM+wgGnU{PHgWz=M>@Ml3vsEq{$A;hO4^7=LCtWlkzo1}b}>)=anIJ+l&B$@!elp1 ze5{K%iLos82T50UqlYjs6I@|)W@D3pvgvDDqVDJ-T6(+n(k8}yC$e=j$`^)WzEiM| zf*&<@Y4#K(OLNQH4rjCFlmh{fdC+}P+V-d|J#LM|6kQV_jcqC+2wJZp9#Rt`zLnuo zgKX2$L63u(+FEOzJe=nu{gqjrHNA{#5f&L689rV@&-${1aza^|m4nrS57J+g zK$~3gdAm4in-&9!2)s21(lFo;)lnA3bwaDSxNubTyT%~Y; z-;?m5g>@b)rO^X3kLe(=LQu9F44gZ)S3W-c{$clm6v}4%7J7J@cZpdJ{1@i{y5_*= z=Zn0LtL+E2-#NAS05#{mLq3&J(k<^DZXd$!!9i0_i7B_eOu#NTHsZWZt!={ap*t&Q z0xOT^bCFvdk%MFVe$@yYBP3Ih-zF|@{2{b0WudPeSEQOeJvNwr=%yPMYiM)m7TvA|E^|b%RaCdSN{(&tTyBf(Tz!T}#F)02*mqmr$HG-eZGw_cMq% zk>8^XUYEMK;a7PgmveDI5aCMOpW<0IZ%KWGAfJc`?uO^{<@5X6Xy5L!)RcI<490su zkT$RS?c~N$6sLEM=$QyVs&*0aM7V_G^_P;!?`Bb^lab)y!FkCVPT3r#P)oumNP4bS z9@;&YP0UC~0-|REzrUcdjIos+jcUtV&QOj>nibMg&I!;;U0{JWp6@gYo9&ghB8h4@ z<2REj{R5X)cA03AsCvHU2J-Z=WU-}clGobORj{epn=90S$iVF+NdBm~$PX@Ipo)+o z0zGy+vBj^9)Ov?|)0}5aE@CYJFuLHg-g+nh=2%?J&yeo6C_emxd|OKT}C~F>1zd$qFuv+@u^Hp55nWownXL^#v)W>t3OahR07B7YOpu|>RtCQ#A3oGOfqp!+;G&(qJ>HQ>jp<)?jG2>=w4#dlxI z$`aX9W&POdy{;e;CP3OF5XIV{Soq`x;8f$ z!$s)8czj;SO5@mFjZDm}Q#TDP#!ci4vgwLWWD4YNhxQ^RR=!UGi;vI99S1sQ{vQ?$ zzG{gvRK|n~RiY*=&%Wbw7m*gq4x(*;*A2h=e7MO@9t!w91#D=~e9geqXaqj2zzKkB>q9Zp)h!{=26nK1GB4&49KOeH`8OooV>DR#r)g$%14llV0uGAO>)lTlP5EY4 zZJlmC?~<%bHc!>}XoSJ+vIK>6rfhoZIeZhvcH$5Fv^igjOO6$vT219u8fWSH=@~JT zXFqz)tL7;;J=MOK-eiKFh}*9;LAL!|mZOyzyhVWe_D1f_j2Mk}tg#=Ngq%E}7Nys{ z6X^}y#YF}mn3HuEbDA!aJvz)S7t^SEDK6olgTH^_uHVv$z=s5+djMHc!M89r<8qHa zY*do@BsuV-;rE~Mfzoa!y*)$ILvww!=}-}<;#6swRehu{JKxMd?()U?<(whP_T?(#CBv`bV8S7U^GzL6m&@Jb*#Xzd#bol#$=twpsR0oQ z4K1rKiwv2frU)?ni#WhCwef_Q?+9O*)6GOXxSohqpzhPP6#G27Aa+!EC?co{3$Z8M|o;CI^d z;G3)tJnMe0%**q&*x8hK@8pnyZb0)cX73;v#9e+GY#)h_i}(1D7Qu1c-Mh22HZVev z9Xi9|q{LmkSohi!v(TNYQXk^|;*P)XxR+Cj2s=+GQ_>Kd1vu=t%ck#isX&u#L$LJq zVHy^HS@Y(0CV(E)BX{Dm)rfigd|=fg)?Bz58z{G*Lf=0?pn&A2}z10QmKTQqv=8Oc_i-RB5(e z@$XvY0+VvOt;Ub~`lDl9d=fDc+GzqGHQ)@tZYKte5XEfSea-J0usDgn=(0SC4ph6} zycNBemsfT%qP8eMw|#NxZolR3ceE@wRm?Bx;hUS4Nn%S)a;}*jQa$LdmX4g~vLONH zU4t(hy4SIUgmOGTgdF)+7$`+plX)kd1Yhg`gBRBphGT?}6Z`KsnIE0mL=2Ss&pj-f z0UGPxvx2qh)tZ5@8^F-Oa!u(YxsFPrt!Q-7g)N&=Sa4wU|BNPAclPvr97Qzgr&@z7 z@be6eCWI<~{}Da9w1t@%5g(NxPO%@_O4P-T3)eYrUd8`@>Z2iRm-a&p!n=zH!0 zrp4*??_MPBn9w1XGcDnye-H>+J1>KYbAJ8O5uvFV>E6X4BlC@&Ck?-zxN_vMqtrsW z;2YQW+#WAGNRsyG{+H&1HLBz6ndkkZP%Xf~Jzb|a85N-kTI4_Si&<5f`+=H@6M?UB z16$*0E>^HrYXH8Uwy}fkj2eEqRF*bIsfV9&3zua;=I)029ux`*e*{R-MlHV&g8u$J{1iHuf zYXG|yn36bdJ0xXy%N+l4Ov)PQ(y8m088bMMZ=z;1$bN8r!S&A!L3SWvb0g~&+TJ?N z6yDkU5Ui~)qM`S8u38peHbmR6;6-&NKw(4ry*q1AH{0}NPRO@eXCJJ&IqIxC+n)?Y zN)e$B>=dsDDII7;==D0zYq`4pZa9fIB=z%+1|`Pg+((e2cstrV;lGRs`u5?1l~5jAuX0L@5cmZhUngyF_<|#sd+D39zbqveoGE zDu?Gh=VyFklCDz2@>{^@tW{(A@3T#SD)%HC>(Z}=jjZ-())ijY_IcP}199pv00rDL z2N|GxqnTgmLl$oha*^P{E!uOp9s(!;-`$NqvsrAZ1pf+j&24!+e}-e--XFYvERvi( zF2{4(Wt8{enO<88`K_~wzdMH!D(>@yY4Qs$*OH`+)dyvDYm$|Pd$JapCy{egi(Fxm zQ-Za27In?Oq#3)I`ReQ_;>(>rBEec#J@B5xC<`uY&l$AiLkH4t|F8P?=)$QX6ZU2vl-_i|>s0I4&9!CGVXKYpQ@F^wt(Shcw8hMSXe1?H6C9N~ zclGYjLr?M#4}Y7PLG~PPAw=s8>rGgpI}j2gPi5BKrs9#1Z*O`*D!}>)t;Juv{*G#F z;h$#*M@}Zm5Gwz?O2mcj14{x(YZgTZxpfyNs=*Ci+#i!JTC0$|{3DU}??1ErLG2Zn z?0oM0Y&JpAdwhejvR=LA8OmTO_)Z3o91^{ob#mP$1`T5MiVFTQdw7y^q(88u!LJ?m z?sB0x^}7n!HY@V-|G4fiCa#VL+ksJGsqzGRhhOyXlwH|5Mm{cR(x*=xXb(Ly`uI63 z^nFUl1Nyql^ln`4Hv-)~h*rf=ITgcU`UFOqN~sv$q{q|GA2O#IYamVcH`Y!3Owu;? z9^ma+&*p`Xbv5ruqF02y9wikaK|46zQ^jJEpAL1+!%XhdZ_odwq43a`PNRc+HkeMG zg0dKQ9tE~A-8%9}pPPZOtQ=DLNOH|uw?lA_R2@*XmT!-PJyGGG?P6(5ctKuK?^2Vp ztA(!upb@7Bw)bCtdYp*rK8V^o+19P!6=#su>fVi@W^@%Dc=2#Go*RR^r^=RvwB0bU ze5l$GedvwOZOTb2yE!455|Z`& zO5)*El3CEGe!h8*B86Mv=A)K+pv8KK94XA=q7W<@ckY1UsrX+-7yNRJ<>myp#y0@_ z#A(e)m{|o!_`#rEyvEu?BSKQ%25!86Ts)HTrpa{I?obGuZlvwdJ^;2UqG4!W_CqRd zrh#miFnesQc)L0woSF!EMirip{)#o|y2DJ{zIKXJ00y3I--N3KT4XK@q8tTR4rN<7 zV1OtgkbGk3TuM~S@&`S?o}uVPj+|=?U;FRfT-PMW&?>($lZ6U2kiYto;b&Q3ERm(j zTWrq~NmX^-s7`f=;<~9AjuQpQjF2S%B&WvP>l*bDI71I*FXEgt_(jE1`gh{z4LzZ! zR^As6VvQ3)gUXM!1!_v5k~qs#Cxt1sXZ)hyyIx!OfrW?nzB8yk>f#up>%RMD0nPfL z*lqjv`o^Dfxhx$^{KNlC)HU5bCW~s78}*CIbaDACUzF@=DoXv8Vtf@D43l-m8J1u| z=25=;4Z#P3}J&0264=|>HJQe@?lcJ$#IRUd84z>VTOO1+`#XkTkz+c!aE zOq}<2-q1(L9&XBh7w;mYS>I0P$c$-_8h*%tmtC2AJdhCJGobVeI}4|M@lXB3Koxwo zC|1n+LRd%XG;vXgt+CY?`6@TA!p`?3aO!Cm!3_W2#2wGHa2X8JG#ig^=z9Z zi_1uD*(ZQ-k@k$_5WJiMjh_4)gq?D)7KTvb3HQ1 zl}G|Vrq6=^@#tZggYB(!1R^`CHztw%c5`pqp2PT4deLmDZmydlCVQjQ&(86X%~JlG1?{NYje zvKICQ-Dg+<(~jjEPbzNDZ^^}P$xD#kEpEKb3?3K|PQQWn?hmSWpCIGvMWjp+r7Bi$ zr?TA^Y(Jmbgy|Sae3Jw3;_ra(y`JVYRj{a$0EpJug_hg1IEx*Q)U}9V))s#e7c`B) z4b5QZ-o#Ra#byz=W}(M!8SW>;AD8WDZx3+I1jjb9g2mei;A9TC7zn+d__&<0tkf!m zF{xGAr{~urUK#m&i{x}c1K1b};+Nwzu@cF!$tOQX;vXk|>BRZ`!#kola;+g9fJld# z-7+zmXgW!I{H$GL@3FD`qNlp7(dfO1;Oo}|A5ta-gwX5YJiZ%R><%l8A0EH;z{v1* z&-w(Nq(DVX_C5Z4J0ZtI)N+`&)H@>r_Mrb+!r<x z0rKnL#;0vqT!qxf zJ(yFyT8^z4lg`;zGK)r=dS?I>C&dHCJb<4X7&4Q@I>;oqBFtIIYxX`@jRmK1N5aCo zh?5Ip)J|_81No<0w?&JnVQdY|4Kt^kzunr`o{ z(IUW7*m%I{7uA>qZ~f+1nSbZESUQ|U?&-ZOtg76e@3MW;HN~tzb^TnXRZUw$q(eE6 zzcN~ir1?!`9+&sD@Ke`HGL^wXMDGR9$Trq}$ihAQOU0UAYhSOmh=$LtoUG<6_(gdg zly?h9$Y|Ngc_|A}u@&wB3fD_>{VUJLG{F@AyI(;K{7u%Qb@qX^D}iAtmD9F0F}?L{ zGX#Ot^7NyyUe@x=f*fMBOY#=T0{>^mOQhVnc?_AhbAwZLYCf^ym9qPtOr_~{%3bxL zATQKU<(D%OTqhCt3qMKB82i6Q-Ag^?47gx5hm|;r<_d+Q5ezJ2@Xf!6FLYFNJTvuS zeJUbs4tB4`s-y&Xxb^I=^d>odH8jCj6V;d>MBljsb{1Uf4(tjb-Surg&{{U zCWeKGKE0+VXEC?u4_&J7@9#l#jil3cxh(3Bml}(~InS@fOw1PrhYd0_)GQqJbC|M_ zp@u)5ILbU$wztNk9yi$H^>jS{rD0x4zr5Mit<4rmmrmc>Fc#?;6Z3eLSkuKVXJHs< zdQk2*W{rm}{isB(2H1+96;(Cx%e?5lK_Ga>w7AsbeUO3uT0erHAp;}J&L!N-zY~hS z)NU!?U8!F%l&#xv+xcHn*aVrOKZJQIdaum4GFP`*u_*u=7NP9!9iM%}&0ix~EA^5Z z@48tahZ*dju2Mz04uwIGoC3VG0ROa9^`B*+0Fx`cEs;FIcHHvY!$Xaa9@KHMi$s_*a@@B;`~mnlTQjOPMS! zEf5FzUM>(>{LA?IKa-zULV=OSDBQTyNff`v?BG ziBKVBW8=Hhennp*RePEIcq;i-0+=Cy#$Bgi(#8AoKbw=7*WwlrSHUh439&(&W;XJn zMyO8P;cvB0_`?>%reF4COB(Yax8CiIBA)iAx4eiMg#16_$FBSrM87)tD@o{BzA{ zWf4&)^S>Ofqx;9A#PH*PX$)-61X?q{BwfF`Lr1)w0AcH`fcx&gZrf0D6SljG2EF~- zP4G)ykuxk_H-0y2v&D9ftIrLZGZ!U&D>=~d^M;=9`0w)P%m%d_&*4OYZA10mbmm1r zByt=KZk~-Vg6X_FRy`>PC4Sv`QrtSx%*N+uw!yP_>uhaWWK+>Kx!S(jE#Gi%4~_k% z2tcsNG#l5P|123Jzab{1x#u@RLDV%0ZG~fSvZ@iDZ?*-YkQkpRG8)|8d+5@EzurlsrgxCkvUB z(s01RA}rj&WM_R`eKfcE!DF-=2xbmu=`W&2&iO|!wGH>xCq{dH@|y4Jiy_eIvZtG7 zFy>#OAR?JoR&)3$7hW4lul*0K@Z8pJv=HJE`RkGEhdyiO{>B2Jw#t$LqX8v!1doFQLo+6YS5E>oNe+-rRnRsCtQbCwcWdJu}ao#%KiY}e1kGpJWOOh&b` zfQ$F6qr;e*Ziuo*Yxk9t3ip~a6b|Hl%PZ41fD1`0iv~c6$?&kgtCAu8>Fq_gCF})QSc0`;~rvB zYfS$chhdWKLfvdN#GiQ|F+Tva&`64FAUIMKEsCHL!biVnj&R4}pr*|b%TC;Q#i`|R zU9qXz15_9M(MDV1j=s@B7C(b=ah$~_d$f@6PG(wbtGzAM+7$4&O7-aBYzl?D^&#Eq zV`xbNq#V%#fkPXuONEF#n5^fR+~@?47JF}4(ewP^XNBoC}|-G z`vMPZlfCb9ujoa^?U6lTDvW4Eo}&3DgYmgJtC{KJD8Behcbq$9yV(zKs}%KLlef8s z{=iko3*s-hWHYy~I;JN8YDp>G*cc3KX>7I)tW0k6pWeX(A^vTdN2}Q^E_y*$qXuwp zs98z+g09~m$Fv@sXHsX+$4_~Z)^=~lNjz+rK!ftV)zB&k?J$Ubf5gIt*DxWkAAR|A z&6)ZIiP&0l$r9RtNJNrJJNE(2`bPZ`7vjSN{*ho_91^{AEq$lDJNl)WrtJC@#2Yuf z$T+v}I@w~J|9j^22N9U>3iHpW->B-oXf>k+4NgIVsi!_|fX|vs>^w)+4;+n9dBP)=B^;M9oB7!(jY=B@y*d z)<;+%ahqsXx5lGwPAA9T$ffM-!$_PI^p?un&X}P^-Q9erqpy>ks4Z-`-|Sg>x3+H0 z_r$io<_9VYr*q09u#AU!&lTyxs+p9(Uk7-lC08mv6dg(>mk`)alH+i8VzD+XYtQZ1{0g`S~{lNw!1XV*;qFoTD+BE&i8c z|AEkK()P^oBL7}(4?@{;FCkl$C796O-K9`x(v|=7PDma5@Fmq@F`N&mM@H*^G%@O9 z7ewx8H1%)ES6YwFyx1{wADc!5Zgn}qQ2wyXS>L(z z43~Em@sSia<5hvQDG9DKpakvFn4?=1Y#;7S8#fCV*BN~)L1#{%@}YD0WH&fRwVjyx)f!nGsPtu#>`qT2^)ii z1>i`PnszRVhiWttRfx!Y=tus&jS0{s{*$(ungY+_tZ>jsenyw8V~Blcg_v~x zw+8jaDiOvIn8OTM=vS|KyUR^P!c!&=yItHc(;-)RNpj!x@qP`ga`2EeFY2aW$T8Eg zS;($c=(xijcr~ab3}u`9nBzYwC6YUfM)cm-?wQXFkgG>?BDpNQHXJ%?+ZSDh#iWiE zLRsypK7SIBPqd{Iqeb_xy}c7GrbYR3bN|(2iM*qhv>fZX^7?AT;7W&yhQX#1i>y-c zRI9HwF+d%BekA6xZBlD(>M~SoDVJSbK4@O5;~ofP<^8wI79PxX8nIHnxBTsLp!Jlu z>@u;28~&b3D9~a~{=Gp})O7Mi$*Lfo9iaoVgUz{Lbiqm!A$Q)H)u`AUU^Z8rYy}nd zGQQ089o6I-N(8$~WwRx$42saYy2N0j6>VTrDrOF@E*H_1)z#)5&8sU1$s{FBoB@PI z7w|3&UeSn0L2=oN-L1I9&&cM6=mKlBhJw)cKP?5%z-U%U__)5dMmAr|7B9deto0V zYdSc~6{%2aJs10$Ne@+enCMhBuwLn>q#GwbdNopuo2?)op(r1=HZbtbZxghj{D#q6 z29>WHR|ceVZuCDL}%dP zHtRw#>j~$YS-^nbO`fHL8ORQ0u;s>}JC#}aw%r3wp&o8s;X=s_P_ls#c(PmsVPUhl zrhLEn5!fZBZO(dUpMkO8tB@G?&9+Ek`ZYKhujQ=?{r$G$>HHh-@#;=&dU|C!#;?AH zNHFVaPzXpjFRnb4l*&>417d@8sDc=7xOC%p>@53hU4;h=DZ!Z#kJkp#<_4w#q-KS(^_P5hKG`|v?!_T zp=9BlYizpY$l<){iNCJaw3!ziA)i&zz#zT`nBFEBZ7mB$Guy1#8bJyh+%bndh=I4FTE)`||YUqb;V^kXZ_Qt%%ML;c#3 zA-o;6%yi!x<3vd7s7~tq+PR4|j&{4sV!_@t{e1zha$XA_~Qd!t`DEl0G>^aI{SAb4}u3J{~V0v z2r0TsB^_((vUgd(XpD}Wv-eb1ZJNR{_Gz6(f$99RpV{nY<6z`d6Dpm4#wT zd(jYTB8$P>*;dR3peJ4M?lGBj+~a7qGS2Zv77$8h$Eo8d9%asq57y2sKZf%5-d}j4 zu2)fzWu~LVP>4`uia%&QwK{qPj;8DSsrX#)tS*{o?Mb2WaA=@B6rUYbb#XC3^Gynu zlY$N2$KvoU<;38VmGfFwX&?42%JNw~vft5zfb4tn<^SyhELlO~d>FOY>%?gzl6+*d zvf-0gNm}SL$F1w3mK6U@^3yuxN#2qoftDkEX^Ahl_)Ded!Q+@&0~KPJH$WSys@fm& zNum4-zNXxi3TS(ODIR$WtSX4CYzU6(xyWAYw(reU7WmLf;0P7^xw10#&|au8nv1Fg z^Zs2Qyqah|!%?{`?ISe^iA#jh$~24%9A0icg7xEXos~vQB4<8>p@%esVGqmZcZ=15&AI5G8w_3B+G7#J(JlWnk&U2&jBO$iseBQ zay#*svefAT+I(JS>z@`qwlLqiJZ28s&Yl~NC`Fz4Nwd{}#R9EHx`*-0tbTp}HY{0E zRZ=pyw}Z^>d2Ap2FvmyN*!QY%?hkg$kfNmeSLHNsFV>y7>N5Yp@j(3M>_HjE3n-~f zi!d!{dYyYxrhy(%rwCb5?BgCbQ0^LK5v^&G31k}Ik~DQ%%_~%2pi})3$at-PHBqkP zn|vgO%Z?zbDnVb!)T)Zn!-S!FTjos_utgyJ^w27IT@$@m3`O%1)Y+l+(mnEWBr z)i9SSPtvqnYo&gQ^zQhT<>zGl`TPBNRZCq9tl*;J z9rzaiz9v>LmEt>vFNNgceL=JG(k;3|UWDcyssSNImb(&LC3!p=`doCp=w|JAD>+Y| zLzI~I)l&^0MQ~=_ISim%tjhIj>di>?hnbR>{sR!TP2*9%eM8zkY|-MuSE&{%H|Zxj zB97due*Ja@If`kXF{1t3u_jBaujKFEs{M5>mM7}IY?zZzu^TFd=5LPp(^C;w~6V=4y|e)VIl&udUb_b7i`mcV63_ z*x2KXBP}9CxJ$6YseG)$8y}WM&$0qLLbPIJ3`X=ptc-f(toEXJ`oX3FgGJ86k)cjY zbI6Scpbg#rWN_rmJGUUAcFon?iPbFi`J z?a>Pirvojm8jI@nu7BiPKBe~9_e~3iFt<=E6mxle*`Bsh7oDunZFav?vpDtW&7O_V zykG*HhV!AsxK!v?K)B9EoLZe}*d>Su=aibh#l(s1Og48U9!y-^fV5B7Ovtwdukyn) zz$xDh%q=Rln+N?%Mm5iYo{L;h*uxI0CL445aHn2Z`D4F;{#{Kik+|cKJuOgeh<(eR zU>uUnB8u+(SfF`c-I&VWBSI3fsn6Du;rwv4ihU3De9;(VZe}L5Ncw-;Q60^I7UXT>vK^eEc!J07gpFQxl&7} z0(2K!^Zs;}NK)oMg$B-L(&xsTVNhcAQq}N|{z+0;C5+08Nt>7NRkj^DU(fy-9=}JN zYXiu=Uoko>Ygu8?2AUEE5l98^ITV&rChF)7Y6vUM^1oM>nCW+=t*MK(ko?xzYl*ej z;6iqwJzeU&DtpqMSiF8v#~`ueDN}A6dQGSmSI~|OwEmerv$kQrupCl7dMH&%k;Tt* zWD~L<#)IdOc9V|Ba#Ap8%VvCq!+(X-LL_DNsW`% zYuk;9H0lrP_vH(AZ+bO@2r(6Fg8`LMqf|Fj&n zoNxto{cp@3dnVJt)wnNDh5Xn_VHFv3`Nuy8?fRF(?Y~jniR^F!P0u`TVFmiVO?A#& z>`ES7GuME5QV`MI3r2oEbl51omb=i?JC`2`B}snMk~1VeU1?Qd7sj3h&D$E$)A+2R zEvhpT-I)y`Gv<2vIdlU@&^imw#>dO9X`fEqM|CI7Bdc_$*Iun(6{MGKKv~zFvLhkn zj!wI$*a zc^lZYx-v!8*)L>;?lVj(S*mN6oZRRt%9P#Btx7}rICUiZ*!4DqxPzYM&E}SBZ<#Y~ z6D;UFUEzGAJ|mQ`xtY@GF-S!7gyuy;vq$CD)M!wl8DPP_Gb#A=&9i@g)X88A(22z# znC_=LJY1gZ0mai-3h0fQPNY|4+=}H9b?Zu4wW+ee!LQjiB3we!Msu zTPzV|2%=21xHVR*0X-7C6SZYA znHkT|{_63QNHoKl>pphvdDzwSSR_8i?fqLnNairrT>(71XRXikIWm(M^)S=GiACRq z`=lPS>TE(UD!fpelTB)!El6zmg`^+#jPi8-ITG2q>X|le=NTJ+s>Bi7gb5e`b4}EZ zOg9Zm9AyT)Pu#M=7b01)?=*RF1DV#Tuis}*wZdJZ4vHI9mNPuM@j^P<2ZLh6_`O|c zWKSMV|0*-UN9OguC)*ftUvc4UN{vWLs9N@fqKp)KsG^8tYYwFX>f9e?UUEq$--w;W z;9D!Zj{?Qd(Se59BAwHXhnrgtky};zCF1${QU`$yb}g;;;CkIUJd6~S9PK(6W!K}B z(J5Y;zJZroyUy!s;kp`9@T9Fdunh&7ndqdxpn#=gtzxhh8bJB=;w;Qk z)^VErzsazcjF6B9$ZwIMr&T$fw*2<(y^C5ejzJhPSTDpf-gH@xWMoPFACVVjru5cd z{%y!Y+I7X)rSt?a#7-wmIRufKm{OQ_jtP384QJv(`4Zdygu7J!r6^|^J2&eMY5u2D zKBwPJ`9B5^V}Fpnal%3-@H$}hZF47SD5e+-`I+64ny@CwXf`Ek0DH-Oh;{p)xmr;3 z=z$>lo2Q}nX%B<%&(!{lJ_ze5{N@aNxp#f=4pkr(sM~{thBAt3Wu52n<$RZl=3gC& z;6Am+ozhB!=$95NZ*??izq;P!`4mnMFGt{A_{ZxS9Ko7KNdlZy32cK)6jaydbZY^i zv60upGDDV{V)cctwN=z?yYH#qv%=fq2uB}PqEUgrTmeGXoG9nS;iA4^KeCsELeUdF zRHLJ_^xu5nc=gIa`ysIlHkp)5U+Jw`Hd*)-=}Z&QmPx$4wo8X-8DKgo#dwj04q6}S zx69q#wXt7GY80-|mh?aAT)_8=zn@B>s`8@#IHSn~9?h+i!2FDPmy#W3&kJc%5M%fA zFa*J8r}S~Zb(o?=Z4Yf#M6UN(hFKw+EZWEHe-E6TLvAvUR$Vzwb)(-f|C5+#^NKSh zG~O4aTc*#x%-RNscEBr+3;qZTYzzy*^w5Yl zS^j6vIrEvJ!Qj1PAlWgEmh7nJg};#u?lRCV*S&c{UO^Tm54;3af!<%Vibqq|9-!gK zvkq_eZ3*)3shXokqc+?)YSWMEbgKAJZ1hty|ESnR^K8iW@R{ag6i0Cb{l-|D$9f)s zodJ^UQTFf^VFm}9vULh}r&Gyp%5l9Yn(B=Y@@A6%g&o@yASan$XO(zq^}-!ukUHqN zUf^qbnO@$l-FQLH$4Eo&&dE0H7EMHoP^*!d`yNj0XJzHRd&}`Ch9n6#PK)U=OEn;{ z6ivjx50w6oyi21$gr2wU+JH}u`gz*9IxplLIfKtu!m}G!71*A$1mK0k$If3qgDTK#J3z9!@kSbW;RL-V$9YW_P|iUgxw;WHmACw+s)-{2323 zZbO{B20oRi?8d#>La3Zu)|5*}O4_^S09tI8Ut&lHkE@7of!V?uqi?r&Up|fLWC81& zYmVtt3`1VMBroQyJx)#$qeL^K+(J2WJd~MhV}vYzWBl4nfmg)_RlsEYAd$aRm01c{ zHiFV)Ew{<~6M;@8$?Lu}ciK!pS82NQ3GgQw361{v&yRes*>b|6D$(>je9+>zSsjt} zo~yS1#|<_<=0T}BEWfD0eGm}We3K@1;8q03QkvPCF16f5+Bc|h{wK$@$Ei})HMiw! zrZ83U6Zk^yd+StktSJm)-i`eVL1H}_b>n85NJgmzCO5EhO)RKU+Qr&chVj%iKf=XA zKOx#tR*e^N58E8au`8$kY+1&tUu>oaDs0t0Kdol(7_{ul(gSrNbRJt%{c|iWSuKZT zi+fYqc+|gEV}f6N(kC|8#iwfSlsCJ6N>1f^#7lH#cHf~_-;f=YVQ}G9@#oRtEe9GF z`sz(ZgtnIJ$alL<&ldAyThN&L+5rmaSfvp2Q3x4QY-1Luq=qm?{YLqigY9d!jP_X1ubnuJI!2BpqXPNXEP<`$u*CS5HqTF?__64z zGKoAm^V;xKV%P7zwpo~HK()tvG)ZU_pl5WTgG|Clne%lhKiYGz%BVod1vB2hJ#W@i z3obWikE541Bc#l4)S62U61NrW)g4uI0kL%%GJaCWGf?Tr93M>-{R!%YOv34Vu1A5Q z@i~zJ4KSQw?=nj9MKmhUOGivUVMXVjU!cWmmD%gPD@Bw6 zW}q5Ji?tUo?r!oknaib*Rb>yLR{ynZ5k$ArlT`Ggr`Uw`wS~P1gkp^w3&C^VmqW}< zGWr<#6ok5mDc3~Izhls{Oa*NOw2m|J{oZVTD$Eb|aL9{ZN^q=dnI83`W?nv8UE@aP z#!_rnk6C?l!kwtHaBicqnw2(5^+#BugK6GurY)$aSt|}}Za&yHf8G}A;hIEJ>35ZF z5(DtR0|?cpO1I6*0SD0Ne;r|VQ_!3DPyTsD$9Bto5+Sc&De#jhj04#eVqyH``oTgU z=~-@tgZJn2$4_%^jJ$@*%o61wyNLo$M(1+7-=l7K-LZkWJ^R_Po&!Y|gPS}xXWcP4 zgShr*E-DN5ARVRCRot|h*jN4u3KK$D5&Htwb%)$38A#MlTfXj4dnUv z$jsQ~yz22fFGoCy$?MrO9t74WbtPG;?6tO<2Du}+47dC_12@i(Txcds(DRPWN1wIV zsN5){9(9f>LT;2DZS{uu&9Sp(z=O}iS=H#zgVL2Tbvc;vQs_OGyju$cG+Qcys_rjdOpGZA%9ytSUdWqUi z&CebbY=K{=#1F^aclv>`yGYRc*&S@2(tJiih7SQ3$(@0>gXcA zJlSM&l2VMhm45lPI{d~bM;BQ6?()S&p-FU+;gJ9{yshsaSh?;V&LX5zZZF`Si!=<{HwEk4o$&(!3y zrRr^$IP$zQSl65Bvq0HE;@HxHdvY9-3~k~Yw0daZY}R;YEw!}{$LuBZ#Rtp+-`V=^ zx;aols-n^+br8%7HUw)bE;YrCz7D2yOW_74@v``TALhU-@)!_It)7f9OgY zPu)%k5N%FRZi=j5S^YJ{#Mdbt7iCGQ0iTUFG6k_R?}?io;$uTvxGn$(A!oNxo2+Bo z40sKKLX$ju>t(0G)_;&*u+|BD=K$*;>Un zDE?vSAK|%PpL0BN(p6-06129*z|#*494MIdc)y)9*PO2{TbG(y7kb3zR-yc71z9zi4@5 zLZAU_*pddlQm7->PwHZW?6v4}u?4F;%&CivGQM2gW9E)J0&qtig;cJzQM|iXj2UpZ za1@MOna(J+2~YJNjNgv)ny8ND*5uGyiZwCb;DC?*03szgOe;j3F)9D9ji+liSCrw* znYBVaH@Ic#mp3|;840(#cT?SPIJ1Q=&V5ERW_b{8L_-4~6=WqWhI8x{SXXT&1Ts{8 z$DdeVi3qgbAac*VXmT=)v1E51u;=;NBU5ju&LL2^{Slw}q8nVNZ}89Oy6o7wx-)$< zokixL^11{4#tFyeO2|@S;Op|EjJ&|NAop$Kay;wB*LzaTCEE)tp#fR>(y$KX7iH~h zFvN%C&3b3l1Qdq>Y`B|ZjFNW8aC_g*UMqO+j(v>FOqmaC7VCNjd;Fxc^?bujFeXZX ztnbcv;Gv|#wBDfs3QPz)^K4o0j>vUHp1 zm(etZkh0X2zZCJuYT$L*mS5m=lR%9sN7wCqQeN{3IV;qBTbTuQ2~(sLKM}}rx_XAg zpYxuV1P~rwdi=O>UpQ<(5FGlA2r55`fc$q+?oJ@+u(xdwt!%EhZj$rM{2a7LJ-RR> z;#t*H9Wo`r-ub=s^!8cO|9h1q&HZD5>DR68=#M3CHBZl8efS#Ox|;wAU44(KwXWtQ zM~(b1Z{+{}S!;PjK1xV?ZmsSeJg(Hui2FHC_y1>jxPorHa}C`&qx*HmM=Es`ufa7} z%ZY;jFqbhhPVbs-8i24kj!!0op%#RB0Y7OWf>o>Urnb7aG;sLhaH!i&hFRKEWYM%C z4Xrb8{ylRk(%$iQ#(cG z=>ultw)%9^-e|HJ@nSYBQrEq%Vp*^tpAHDjCFe~vDFj*&cf9tb`h^d?%_P?nBLx{{ zwMWo>by01)EJ% zO1vYws*aX}KQ5VC8_O-@B*W4-Yze(zjN8&8t=Xlll58T08gzYM(orH7|0K6%R{tLcSjYU}Ifr`KgH z93JUEt)Dt3qisN+xz6lUD}-s`{(BGbUQGVn+mfD1Q;x2yQO^1agiGVA&VtTX1qUf< zK(e-1F>I{$>QR2j=fyZWGRE!kk;JW-fs*&qNl*N-8jdt^C0&wAya#R5BnnyefPLTM^B-f3QkTQG%lDU+eN@J+K; zDh<g$r3{1Y4K2f1RgR0b`hdNw${<~oa zqv#BZj#Y%-g?z{0U$&F>PqrY9olK5`CIQZDW4(l?Ydd}qLXsgqI>tejNQ#f8RHcmN zS4oBT_s>AHTpH^nMRwZ}3*fQL@RY9@p0%-Z>Y;ucC>OYaJwd%bFsRh=tYU(BmV=Qo z0Tycvz@j=jB_3_L`?p$Uc^)S$1-Z|ae{JIH1%|F{?_KXoQ#}q)f(LiVIi=_4B`vX* zS3NV=KW(`){!o|cuc=&5HYf62^1mZMxg*`ut&LI74>59VK%lJlsN)s@AyU4?I_-xUz_sA(YUUAw{m4ZG`-gJYpnlxLW=+@y3T zV78uRjjlSg{}ZmtVfI6|p9<#dx?|>`<;fJ6B$%5xH>1N(FU+@TxHfds)_H_qI5EKp zV9i{kxw~_dpC_~YN0@bh#nUm|)N0Uu|+j>9Bs-z8a{T#j$n$hd~16E2O_^FsI zg_lbgnB~qM`8Flw9c&=WIw}_D=iS{i2^b_JeK{(4M?sl>KTM6(iLR%`H`{8PxSiZy zb61<$ZhP+f3MQ8^z&j|}X=Zxaw(q)BVGdrs%=IG2o=MWE8Pl92^6J-&@z^iCRpZce zW|2H|nD9f*q&Q+$zb8a!3~%9Mjl+nZ30qr$w0lSe+^457TgSXOH%gFL!-XJTkOAOnsyuN^H`%7bet zQ@Ed$xA9C@3f1h4tu)OW!&IaBoNU-8CoYhIzEN`3Xo*ci%sbxny?Dg+lUa8knpha8 z&#P4Kk!nQU3kMqQ#t?RMmdBYU2T- zSSlw6L!DJpHF0pD(LQqvSBALX1n`>DP!egkcN+4sP4#D#{*yAssuU+AwuA#CgI)HM z`QB8qf*GrjarZC4fA&FX>wjW)VqQP6{S{>#R;NM#o_q3@Cbz_y%aOlkUUwDC*V~o48x>bfqoAT^&;9{Qagp=y#Fcv;e~-PmSvG;S=e$L33G8X{RL? ztrvSkwmvx_d|dPHGb6L!#&5p8*HkimIN8dgJ9qEKhNt`B_#dux;zGC>PN^OUw-jOr zFBWSge(znDnkL3)OU`!9^Q^TdXu1Uzvr;Bh`VW-tZHR#Jdv^1LnYfl^{UuJ%d}Y4a z-$ivwat-MSJKU>tJt;!j3eM_ikv};!|I_7}9g7;L-%n zZBF=Q(Oy>i3QH8aS%t;#VPxG(UXzCUg4_ns zHJMd(j+*7)hSopv*|6C=J>N*}tc0Mta|?r@pn0F*fCeumwe{lkW9k8X$E9U)mhoh| zvX`!ML!?TU@ssYd9~CMKv*+sUgZ3#8W#E$2HIn8e&zEuftWAN zx~;oEY?I}xMR*oeK)Y`7^4TCoRA_^hq(BD=st}o2s;;8yH2B>8K5*XkTHQ^s&15T(UzhpejwRVDpsS z7{jPTE$W#lWcF+N^J^T%9R4M_LCS?=a0^}p zwIWCGNOx&lSwMC0knfXa@jDUcY*9ICcZ;ZQMFzSh}Aangq-<#Da! zm`+jTJ$1gKvW_hf4=)-J$;9@4N10v-68q-y$D;io9uhj|UWQNq@013T_ zZ=>mG?A{n~O$0IVW~{$l#7g)=npLk0>}Z7b<#(Gfws zG-9a1S(v@-i=4If=;L}p{I^gix}Y_C2=cyRlSM1-#3D`8EWL`Aw&Hgoqx9ptLgUSH zuittrUGA6$+~K6*i<(RN>P#@5WN&<;KA>_F8mIlR&}1T*ngsF7^so>Y_h9F^4%K|T zKdY9`rt|Dk8b=>4uz}eCIe2kg`j{ti2g&>^>FKtqZ=;|@9?>hyDK(-qHDh=)RdbGe z<6EJm|57)>PikVYtdKpr_hRQ3^)TAz$6ZQygH(}ra?p01GEfuN90JPF{+}I1v9kS#ku{k^)bqAkD=}TaS}giUx_9R* zk=U+hj$gMQ?gp>9ZN2L{A;OBvLvFY?)Z1$)(+T5f(}C+ApK~o(MJIrSHzVD6tBf!~ z!J@g+UZJsHjOvDj;e(NrG;EY~^^kDzZ~yy=gz>4|ypha&&IEJq1|x)ud(w*GW%kIm zllTu!{V;q+rbpIJAYBLQd8-`Rl}P+qB)}tkFbiQ zCYtABwcd4FYJ+sHxqN!4Bfg}dCH%ho4|^Zh7R_2N?>Pam8{u`T7Er58ML|hmQJ5W$ zPG#<~O8&8vO>YI|bT&}pPRox14?L2LmG`-(ax2hiWpI`BPi8(PI-$N`6uNByN$_0X z9UcRdekPHzVt#QaNx*m()6#^0Al-)e>Pcl+0Ttf1XGYcFyu+*N`?zw6u^B0Rg=un? z<1Ym=lA&P+Wv;2t=#;Zs;2+WfRpgM8>Pn1o1O=dP)@b?^D;bqUFE52(kK z$d|10ghqtAVboE;s>;3;RWNAx-d_s9`GJ#7e?<2*@BgPRF}2h}5qhxD@}|hV+Z_Js z(_6u~L#4kISGT;5BdP)|*QChmRrWBZnVf#o6}2T-&WlA6(I>wNX{|y3iksMg9dQl5 zQV$^9&ed-^Z{R(vj!Gw!I8>Tzb8Mu!s$O*;xJdJqRfBzi>KSWlt<6j)G(!zWb~9l> zthK*WRyp*Z<^>L*S%hUl%lXP&!di}ZsH%3azq~^%ZBn9mF#+;#2qc^Ti6AW*VO!bc zCc`h=qoF0y9S`zkF3?T%HP|L`qS9rA2gVD`-mcQJ9N?tAEmTX7#*0;&od0#D?fy(! zD^E#EgpFc*8$tDGUrhRG1Iim=1xDF8CYSG{xEMEsG$qwUb}X4ZN3*zMEI_fQ#u}~( zOR@cyYC=DAp0O^6p}5AnS7i&oM~O+_-pIu_l&ARl1{7{bcrb|n=yH+>joRD=9$T_Q zvu-y}V4P*pu&yCIn~}M#BFGSLuq9PG@=MR{_l8BH)y^Pm@yQMD78Lh^Q4w6?0$I6v z`R9tWd4fJ0Lqe$!h}4JBmJYmsAw5|U@u)K^6yw~fF|V|$ap$Md8V%~&;&&{FKAvDS z)&c!ZfXWJ_dhm2)YB*3@{JE9nhIILx<9$na!Yga+mog2KqvyV#?VRWOj=a zqSMfE((N~%(A*06Vsj%?#8&=`!>ykw6B9~21``f_H~ig0M(@EwOrsrKS*J&sw)dgY zTN&%SV{xek$2)`1E>uGZWazF^Z}W2J>Ur}7qdx)rmtxm1sP=_1Ua->%_g0zCx3(7b zernoio{hM5a|k~6Lk780jkUY}gvE36Q(-{QLhH{YaSsMpSxHK)uiA*5Qmlk$rGmNk z<7#Q`rMZDBXfWLFK1dK!fDqDl(j37`l><)J%X)kgYRFFl`zw1joYEQ2HIYMln_7@^ z$#625vVXWx|8i#L>&p`>|4}u8)tq-hijui{_yyeqWPOW!Xh&y4@#f{k<-Vkm3^U$r zD+53O$jdLb@nJNJ1LoG`t(q4JM1*JM?6sobxX?nCx$aqKi>|O}#@%p3K7@bZ6%Fo~ zc`w=5OxQ@tw!g8dXl0fe+aPZ`;j(9bG6Bjf^+huqZ@ZY9gLfxSe;%;eX)6t>6$?gJ z@WJrCd5kXjw79@n$;Y=o!~vZould`ocCqcaq~=ggZ;Dk&oK9$SkuJ4I2^OAf`ZoJnn&n|+GXS$7jMsR^hbfY&_j}Ad0`gi%&J*} z$(Hwdq?ap{`pe8kPK1=gK?eY|IAu2H4jo6%c22vm$pQiMIrRzAr|KxUshqH8CRe*3 ziz{0-M6;@98^X5g`FQ#yVn1ba%TE{5rFBt=Cr8p!?H!Ftct3Dd4eBpnwCj|tYXm2_ z1ZdL^|ME+SnMAa#jrI{VW)_#A*%8-P>9P@RbSFZ@9zQOxt6zZJ4U>`G`T6%3KdRY7 zE4(tk6sFp{oJ*x=y*YTdFsxrITwbd~MDWrBWCyGbyO z3uzY?e;7OKZxB1SeQdll4Dp65_x^sbIvZ2i)wXP|{g;Anew$uQL#|Rvs-J2Wtop#3 zK_(HvK<~K=Z0JlzgQLs?G?l%kHd9&W$B$zCdUm(}#Y_zto@HWXA95Lkzg2~U%*FJ$ zp70rsPllGiTvtu4v%lr?3sGGq;KRBiah5&w*<4i+5!1yzP%x#h$TnQ8uXsyn@E>hW zqk?&qJ5-oD>Bum8Z=K9*+-lT$AiD1ykJncsV-mj#wamy8N&%NaO)aM734`{ChW521 zW5BzC+B+I7=Zy+FNy7WyGOAt1U{I{q7bww7*@y0+LMlzjPrn#6A{?YT797){z>AtZ zI9CXsUY${wMMraECY1J;>l9xq;`PQ4>FB^ZoQVVI(Zw0#6Hd3&y#&0ATC-v^s5cUg zfe)-oTao6>AT19=R)3Y2?n#;&6=io(@n<<)%G&zR=FUT6b*f&IK|l$q_@;UT8SMAv zllf#NDTYB8$afqS9ehJ=AxbOGHe}^zY1iizPJEzzplg0wHV3R5#zQ(%OSz%#AF#Qs zpCu_*Y0tGjQ@ueH33{xJyyp*{<2>;;UdVidgfTDp^wi6{2#Vj_RL?QaEgeHd%j-wg zMp`ZkT~aC_TJ?K}9Cx=}uiRtII%TJ)L$#HIWJM?QT7Fa?ZtROds052Ge>(?avQ6G4 z?LN=HPy&&|Q|q_=R*w3qj~WYZ`0XhJ!yx0E*AWf8XDK?FlFjT_-%&_LrF|8?!#a() zzZ3-=^$*;Bt}toqX8eRqCX%oB53u1_$w29{4xd?{$)`3VXlD7GdvlY~4)WS{TD43~>(v2MeNm+;z5QLO)$*Tp zP4@=4?x>Decb~|+B*fuH8pol}lS}D1+`s6EVoDLE;-3p$Rf3#6cK=d%YOs(c@M%gL z)jt&siQILC4sTra^`kMR!j*n^TlJ8+%}CiKWYimDGmhhgCG~<2N(QQB8MQGh#%27p zc8@+gN`njr8XvtrW#w$Zkv_wl z%Be2*97;M#|T^dfNO+eXD-47m5Res3rEu{HyJ=J-KxWQ>H}R(~Y+OFhER<<<_m~skmJI zma7C#7|}z-({77O=oH9fZll!fpi_X{j$WAf*z$mWj=XEL<+2mx+r5X1F_06WjA z0|n`ir@#q}+S-C9?0@O1-Um#$>h}vYZ<=;ZI6-d%YRQTMmMJ0x=BK~7!RFnWmqksA zs_D%`K z9Owah|L4aSlh0@6j0Gzvk;y>oQ-s$}yA*Q#>FoF>{~gYn67Foy2_1Pr=k$Vb)$p6l zf_bC;M8f37>dojV$wADbAa(vALp;T$+P!YecjHcF$KlBpr;-!I?cJ;WTT?y+o)Ab> zkgHk`;V*@wcnw~SQ_ng6JPY)XlQ|R3%X<_#x`XI|+L*O6{x4_162L!WJVw6AaEE}b z8EKLmhklSGtV(6`z`%c*NBe$~Xtk5~R^?x;d zXLD`Cf4f#!=h9Y-*0@?lQL);Z$JHu|lA7mOt*RjsbBv)Qt#O%KV~a@9L=hs1M2#^k zArVQac}&cL;N5xO|K7(w_OZV_U+(94o^SVkU)Ob>zq7e4!7GS?`JCevrMG@AOeVCi zr($2P@Yt?gXpgKPCK*%d8!3olY(0uJo)Jc##JBKml-*Nsqo04{;K?LlMxc`T6wR?u z1TxfmbEy4Nx{`O%s+Z5JN!hgS`Z(Qhw&a}Z|B){%BTPLy{FKk;YHUGynojkv3V7q>K>tdm@4Eo`wM z?aHBjvvsu2tETP^f==f@>Eh=`f00kIn0KllKvh1jU-Rs7|1;pj=XBTmdloL}`G)Dq z$%$$Or5t6fenn{HQ!}cr7U}F8PkMcRRg%rOwi2y#28)`RV_cXUhVqQd!PKrJ}F+4rJPSdFC z7Seu(vQO*CtN_hl?jht^QgZ5NSp7+|k*uz-SS>}P`)b{$R@#G2(ozz4sz2)L>pK6>`J|zBlNwEmIGUNxnmZQ_mA0tQJ$jnl$uri4kb12ZHHTRc3 zhq#2IS4@K5K3yD2lC+(fbx_n7EAKAntB4c>x@LFJ%jplC3r$KGlL?CgUzt-{oDF8r z)J2s+q(f!S147S)FIs(F-=J&UKFH&)%;M_K1^IqAOE$I1w5duQSJ!FAu){x&V!xN1 zCgeOrn08SCfX0~-ExWCN>9#cH)4=e;r)`Ya;M?t#dwv8z4VylupS?x2TSu2}3E0j0 z#Ic*`H&||>e+o5=Kkc@mC}$b%-nCQ;X2I5j#QZmVA)dKMPBd=?aqmWBmR? zvQJD&;1$%PVJOn>QobDv!oMzmdSFR?yFWa?viAO2+P|;~+2(}A*!J@+ zV5Xtbzcb~!r4coZ)4idnBqTAc#E2ca#t#^TEcP@3-%hc3#HT~a-Tlj+H|#AhvSsNQ3N&4u8o+X{!C_7*IvYf3kdPO0kXrAYCT2eQ#i& zqN4TQyRuQ+-%tao&f+~A*lj0KAyYNIR}nWz#a^G(-*;V$jaz^8_o?c{4{hNhbuIKE zEp%B~f`@~mj!sEx$~3RyYFD$Nbtm1!K)Cd9-y!v16V*#?5=R!Te`dYpJ6A@%l$XTj z8W{D~>q}>Dxn?d(JYKwim^Ie~H@nut{%B}h3+rT>F9%YPX@ds7ug8y0YB1&+uD*xO zy${cm74wzEyZrNut@<0l!!={+*YmpRPVlcZ^-X12C#Ylf#xvwv8&NR4ZsVH13?q(U zpB*TwO8}w$vVUmIfx^^hrZQnTyYL{NwMYHpB^I>s*Pz?LxM~1a`)ECiB-8DIA5v%3>%Ppu2z0B=90E-HscwPALv6?jAGo-^6TdX4`%Cbt`xa%Vl_ zswI9!`Q_Qd0@X*8#+L%4AP57g2QjOc5GVWz*h#G%=Gmka?SZw zy-&XcI&{Qd0q2O{T^hEQ(!PJubGWm!KqecE-f$A+!^`DEGS&?zXQG~`hUitp*B?0T zh<*I>=W$xV(+uOYuSOmgXKw36nPEXW+djSBccI!IVUd}OKS_v)D9?XVjLD|%>!GXV z2P?#H$NxT7xj4CK6=W6kO{BYI8rc@k5hS;4nR@E1r1~IO z|LXVb=)5KqXFT3+5!jKXxVIZVl1GQk!+Wi3+^XxdAQna!Fvnv)To4o6vipgHs^?39 zSRz>-jrGDu5s5?=*ga=4WQZ6YS=Io< zFAi7T2pOmu1QE3o9iPWZrkmnMZeBEh^V{#qf4qEj%Dq6v@^ax<#T&{Gp2U69u2G62 z2W`%vHegQgzjsr%ouyc0Mr>B<7PXM414s`u|n_CR{venw@}tbUyfdjfIlF?a?Ww!c!* z)Zf{n>C)XWvoURQ1eF8gaq;Wu30}NURS&yLkp(BqN)O51AqFVjNhmgx!%-Tp`L~Q0ilP?0hKXJa&Ipsi z;zU@f4d?YrjV-s^p4i|V*vAQ=!gFEAhjDuWZH_f>3c`14LP}j`TYrRmMv_I^stAi; zDRFOc7*hG5nD1|Tk4|lf-rdVlN+`GcRr)u~tvU!|ev>9vv7SM)Qi z>B5CqxwS`O7ntTtLih`R^UfB28@nR)YDegsz~_XEr?;M1DK@_WC|%P66iGh4mx34? zbLpJ2EKT3-lB*oQ_6atk%)$vzWw_fmk6{6TJN})?_U_{T;Fmp&X^2cb!T)xLIP7FR z@!N}ewKo>5hPXEb2yU%c8r)&TVmlst=Puy|2f2T^rT%z_f&!ujD4%r_YpadJdBkT9oz{6TEywX$19t8j>a{x0tMv=SGE0uvofcfY-(a70-Q!ckta}F5 zO+5o4IubpBZEbt3{6Npw-WZOZ+*4u3Mg*aw(-v^G|9t-U<^M;{c)aicNO{kSZN0O< zZ{TUH@A>~K8SgbUZLzw8*~$l);An#zzp_Uw&qc=z;TlPC^fVSrL);^P@qtmAUhe~? z-+aZPJyD=Ehh8K2hXZDrxa3b)9W(QiLi?;j6mMb5XV>%f=|rw&$Ha^N7YrR-z-yaa zEYuk>w5(9Jw7c%A74$Iiz5C>bD~s~$PF1UuQAb(I)R5yp71hUutae zO7|CWx%Rb@=z*tGQ{>;xp7{P1 zlmnL1el`|OlNL=UehDBC|37L@3}-cv5EGZR2y}~%yiHBkjh=RnNnf5gD?M2w5uD22*FeqUu+Uzymu$<$}Af z2um+~o6M^r?qpP~tQ$9|u(8^buT#7kthd27u)A9a-+ajD3f9wNa}vWq3{ zIbhc%fDvPwTu{#`>q+U=s5ve0+f56s&(Cc)X&9=5W3gHQESlg+S1Z>z*1_^(Dc`-vvM)k0ta{pj5)OYZo#D&3wN_AXLA#osyfd)>_Eya>* z`18Wj(^iW(H6C>q$ZX{tXQ&@a_p2+1@RXXC&9DN=WjKTQI@%#Et!m)$%O{&bU@oe= z2p7-1Bw6JjxcuDDxiJWLgt?O)9syBt>_751CgDf4 za}E5YOCuj3$Kh3+VN+HmEM$FgPi<{aNc+}yu;`(TZIrYIGN);3Ln3=ZAisM?OSoTJ zMefF!zTv<1=~RVPG1-Ph>^M#jC&r>c|JWDIJtpcItmEI>(O#GL6og;@A}d$Y0>GpS z5At*w`tDvn<6K=qn!7@;yJk&SL+dAU}16 zu8Z~85rbg^+o;ou1`x2~kHYjN!+LJIZx>#gIu&@c~T1&bUU z((tQz7fc|>tLPviqTiMz;`*DX&RxAGnw}&Q4?WSxq>+$gEScs|?X#5PudE@LcZZg> zY-z3@;>S`{rA{sVFIL0X>78@$z}@8}UEc|@AUmW?%n@g9WnW)UPn(J#DtzZAc_k88 zaANflTZSG{pv#|UjS6vZ>A=BNX8ZWXhjF>vNi{kUrRsT*E~(sss}s|w@e^Jo=3sP* zQkj}-(NC*cg6|~mc#AXHJX;P#FVex;z9>D_5-sH&4<6kn@qnBw@i+`Ol4hBOMCXRu z=m{?c-5^5{JIv+QoM8p&s9;`^2|F?}T454s_GzJ*(%UiMkJ=&m*XAU4pNeV(ThjU# z*49xrs+O+e%VfwY} zK}%sL3S)t$8y1M@lSS!O0hoQHvWkXVQDz{o3A|6PU*fGk&D!$P^jKlv*6f?}9ig9h z{g}7x4Y|>{VlFuy6n6Jon?5HF?Si)Lu&PwCRa2A1VcX-8ve1t1qxdCnSrFY;ZC<`sCKzJlrp!NvN1wn=TUS^;qBVU>-2~ zM{6uPjb@#g*%}>FJFIgr>i#WA`Ko-X{3M2()kw~+@qm3im#?bldKnm3;OZ_+`2|FR zMC&^t8$SrCmEjr1#4*&_8jC>M7i&ES&^ZKJbvroXRqpu^`-TtKahUWmS4_?G+zt?f zLFQ>+byud2&r-Hu{Gjo}YX!WEN0K{40sY&vN;cN^L+@N~PFUehG9$rulP|(Hc66wL z>}OMEqHHsvM%I{8TEbpuJ8m;?3WHFownRWxc85QSyYxK1z5YyjI@)0e*a;t>i*N}X zP5*P5W>J4b%+-0x$IwE<=o_4RwYEC)0OXe&kQ;v*VTK$*N~uO@^I;k~M8^7#KeTsMLOW}kRaKgl71%WoM)*+FHwifK-5t9X1#^D_ zvgS3x$z>?LuoUfp-bDf1#VROg$LCM@ClfKmHa<-ccTYz$vNthGB&p%`^%t_Y34Sgp zgzUfth>3~K6Lr8C6X5AWOpV~{x@e+;cLV+Hl*G1kPMA!CF1L!xd)8scJ9;{TnH*mj zTB-8!m12UPZLXV%{k9_78hHif>iSf+%_!x~mEGFGOLIX%&r3FjPDiCQ1fN6q)$;nT z@FPU6FzF|Pv0(jcRf@ASJBtzZ!%_%mpDG7yqy-$)KvBxs`NU3ZsZN$`exoEU!;=)~mgIO{+d^@P z)5u~d#3Xm#sBNt`^$HZ^viDu%LbItKQkgjmFz7{r*wZO6N!NqG}%)~tWG0O@lwHb3 zGBw{fTY$(Fdoy0fJEPo5O7~eyPLz`fq}GVXF`BhfR)am?wbyY@>Ax-wVO57ohvG)R zMZY@*k%iSC>?zt+kTa&c6Mq~?Y3@ZS$HQlzbq5j@%(@-G^yVeXHS5rd$$7i2x=C{M zs7lcJM{Q|ctvs)LtBwL`VR=FybmIPVtn1|7oiUX9o3Ejvpz65k#iQKS*oQ;>oQ~}X z3_{g+6F)AMAhe-AVE^s(=us|8k~89s##8ZIHYN@$;EvLwRN(8bAb|1(u{MkNrn*Ma zYdVCaFTqgMKlO4;r#;}kWnlv*-W_kuh9LmuuS^u@D&d7^A9c%ry8jAR*uO6$$F9Ek zYmOi^YZ0Y12+^o-WHC;T_dRpmdxEQ&L4@@uc~BE9f%a(K^pH7BJ#EN*7CHL+@q)EW z=7nK={(7y+Nmv8Be?g6sDwR2dDJ8)qT= zwUzj&4zO};)WR$~s{KL~Ucqv_Fu^*P#;&w=R*hlmPhcmxRbXD75ErX~wIJzf^H)#` z3y-`@MtVW)ZIhbK$XKuT8CBQT*b$H^7TIu5XCE#NWA59<^&qLcb@PiNc$;X6yQD^Fi4a~W{nxT$t zO51PS@acORqRI?1gX)R%z%v6!9?mN={LM#%n|FLhsHA(dQO4?WmSVWrfbbj-xb;|; z;;@YQ2VdvsyXe6RMVq!qs0Oka_*>yXQc&A2XG7?L2T5d30g;knem-8o{2H>H^Ejm8 zkKd}CdkFOlBkjuRcP%ekejl+d`h(_0GcPu9+^wPZGwPLvT>9jY>gC#2b?wNpQ1Qi# zNwsDX)b4US*vzS{z?tPl(R+Rs_WYxV7? znRW+M2BMtHa!CVd8nq{jB>Yz`7J~i@y*2%4z|0zPdGjm5vcf;#{n|S6?P!3j$c1G_ zwU;uuzq-iE?H-_NI$?jD-rMKY!MLhimb;;2{D4futopp0FPnC=-~}-C{@&o7Vef&e z&HjZ7rNdmPGnuY=(Q1GTX7h%z9<4v3rrI4Qi;@=vma=Y^Y*sr9L7lB#LpJT!i;NsS zs&@&2K1tOW@>pGe6yzJ~OWjMoxvKDllXqVA>scr|^wr!A3gW=%4)U-~+YtpVZGfwb z-@b5CbhHaRTlG401pEjg>@a0({A^7x@m`p>jvE-I;O^jdt2QoSd*Iw5pQgT9CFO2g z$t!4jQP6#Ms32x6YfuL1Ag!8LP~|zyV~ef~eIfQ!F&v00N_)AUbb4!faxO!VRqI5ry9Vc9{w9HSd$!D#1x)Z?wG6wRMq+-W@q)jb6LH(GN~O#NtSH|xN+B{tCI0D)L6 z7&!pS><%^m3Zs=6h%~*@<5f)=tRv4IlKuBbQW0GDb@Trm>-f0e#P{;ApLd@+%U{=6 zFA@0f`tTNM`A8vlcW~*57u$9x_Px~dZsLJ=YiuCns7_CXAf4cT^jFc}t5wsxO>G}( z^+gv~zHwHiyS}e_BI?>HADM=Rg`+p35udXcT(6le8!bQM!u%)Ry`OTo&L581oAi;= zay;B@@4#i-lhh>Q94dphpVh$iZF7RTDVvJe^VaqHs+ks|HV8? z8LpjM-IW{|2NBns^7(;|F;~ERe&IdBu0nKnG_MsMq4%{>!n))9t8~hhpqRk#)!!{; za2qSH21pnckIBHBKbLoDVk%ZcgrnH*T8?^2~0b~sBch8tfpc}VM871YM_ zYF~&lQBG`vk#LzQ&@36+QeJ^ypZ?jPq0TL8k6jj2T48{fj!@oT^)BNkl0f``#6v4u zWDn2mz+C*`0v{vw*WEqo57y6W0%!gj-MuaS6vm(zt9LwNOCE3UVLZl^YJC?C@ksq_ z=QsI`Yp<1!NRC;l5$;?B+DTMks)*>^kP?%Sfuo-Q$ft{aZPn-HpZU&Y=YG{BLZY`C zzS6$zotILB4?xzkzyG>pANKL%3_&DJRJlGS!g;wT-kg}yV~D8_nluxW{7uHL8b8eq znv0&tf%5N(rFs&7-Woo2jw=FiKKT&+UBxlozY{e%f6GA z5*4(|@Ku9^395uUy-xa2-7c&+OoyMSHyK-@qUUi~8Y7!}bYXu(xreit+<*7#p1wA< zRZ8Xfbnf7HQ-wwdYV@`I$>(SV@i8}>`}fgh$?81if)uJN0>dikEx6)qXKwj*WG`*1 z!DcDgbv0sxKuN=PNKRHm`-SkinO9tB#gPu@YJM#(Ew*IYg;-jN0H;!Yl^bpc$8}f@ zZ1hDy2OsS4Ci!XB!;mZbzu5vWQ$TJ8`VBnu z&V=*aHo50_Mi~qVfWBV|`kIeyuYb0v_Sj|JFLMJjK|4Iv-#^6{J}~0as+@G9w{H#QD>Iv z98;wt8Sc(zSZ;8OT>TyH6m)tJtdg^|RcFg_;Hli%mbxk<&7OG?g8qyp=<_?s;Pp{J+}3x$6sGOS>riR!|#RTydB zaxM#DFbF{x*cuv>u(_VWn3es)*xEFEEY0^(b zQxul#kFYTtB7`hsEz84}guT}J=p~-k#qnpn)Brb^UW4vp z=W|8a0_3(ijBUZMx^zMOZ-W{}kf)O#3@)*^1d*1+|#e|Y;&fGHJ?#H+4NIjK4h z$QN#zU}(Ooky#cbgrvJGLDJ>WI~beF6CHJFCt_v+xIp%cX=fvc%LOwqm1n|!YMURwj{UG_?rr)q?AoPM zFwE~Sb=o6m&Fi)*&6vN4B7zwRXRJK=O-x((q~Z51aSs3X?B$vap_zp}!#7$lPS3z^ zmgxRC;9doP5J>y9dqxbbua|~7{%guI0SV1WVP(@)SDJz#IlQ(j+@wF2%gk>WKp;0G zCk3;Z!BWr5elp^)pGUA*i!h+Tss8GTVUfjPpmtTpWx$fzOuY_ZUeQ#=H`x728hI{i zb;7cr5NTZm#+OWj_!xP3u{>ZYE^{IH(J_~2Me)r6k*z-mfx#s#iX;eU=HR;5h& zy$odtHP^lp*+yBcrS#NPuRWT&H$2V)I}|Wxqrc`wy;7l_tChF$4_!dTpv1O@63rO# z<=2rbC0nyu9Ljd~s?Wgx^qSePf%59BC941}V5TEz1(|AD(XyH9FBZH~bi#e85{Qe4)Q*>ehy? zEBC~_ES>Kq&@r>pg8^YFSJG`+mjrsrWc6-A;(?=+p8h@>(*^IaJ(Li(r)* zG~eY#0`?=s#VzMa5rv$1>8|pj ztj)Ed%dX&Q(d6{@kd>&K*1cStuGXqe7c5}< zUJZLS_RQG8?7g{BNo27jPq1a8)7^F-dlCvKlcQAGygbn+gwo6}^wP2g>D|WdqaMme z=pKtWkU7xA*27i=5DYX1A<^$QHNrq1;OHi|@ey@u;T0A_X~f%kWr=5Lgy2vUYxw*1 zy>bSPi!>onL-D z_Y!Io*aAiwDx3E}z+wVL2oNA<6Q17)vX(7cJ$yRF;6uJeX$%E3n{M?&;)sKezt;*}UYI4xM#h=uUNQ))8C=#0-6WhVQash~ zQ8nz~Gq-Qilol|avPyOJ_pcfmjkIoRHa(S+xm1ZStRPh7{5K2PpSHcD6K`=QuDEElGJaqn_WmP&>0Q}BDSsh zo*2wt1xCBD{GINAnS1`-Mez3F#H8N2i7m%8a{Qr1%>-@vq~R=*0MV{|w75OnXOL(( z+gZ|p*sp~)rMU8wx`SE!BmGfCcym4y$SpuA0M9CBl??M@Qad2g<)S%iN8h3NrprxR z0oS>b6G4;Uy$NEi>f*kXNalK#QJB98aspW}I<^bVpJn^|w)3R_r@hp0n}|L5o4%z- z%VL4@qSF|#a-6M-G{e^J<{(l}de97otD`+a@<)lFtw}_K)OT5E|FlfD`W}xa5gT8kW z5Y<$L9oyPFO3c{G&{4+5)^TG86n&f>ASW~+Lv>ZX4N=6xro2rc!kMiaJ)a+5ry-A< zGsqR!Ppt}7-}X0CAkqU?lKggpsA3PqGnxpk` z`s$sV0Y>3>Yw@wlS18px_3Mws=u*x*57)PHhmODhV;EzD;3r9`A4m|JkqWJ~w!=fd z7HIQ4Hvy!jLa>+g_%|(1REi)qHt+4Wo}mu0uSxPqYKk|OC7Zo0y2 zq*M0<*-8W=J6j_%`=2rdooqAwrFk7Cf<9A^8&s^N%EU!2t!ku%uD#nm!|;+w8)f+8 zCIVp+d*<%fRQ$ax+UGKbkDa(iSp7^VciV5@{3F_+R z>&{e!oG(8~_H?pDyE;f!oyE4k^G;U|JoP%cs6I|la%^^fvdMy)+tewrRy4STEbg(DoC2T31u9irr@zJus3n#2 zMMl~|6iYz))^1Uf{y<7?R$iIjhWeTI(vQm~&KyF+#ho#-XnT!%=cAK16i*ym>mFx| z^YZ9hYFEaFk;-n4)Vg^GU`R(oHHBSU+F_i$eJnm25+xHe0{#LmdQ8YyUA%!z#u z2fdMw5MIE)F!TPFFGpthc>quoGPBS$Il*2(d+9RJ{)m~*Bl zG0_xoCIGG{B^L!HvbK#XH73Jc{k!fjVZ~%`)sI!eJuNR3y{Zt(18B$#&F04_nU{f* zFiws$_vp>yUqrHt|MAF(PW31S9Lr|Qeoh7>j1Gr%`uj3;e!_U7kP1`$QkG`L&Ba0I z^^ygZJFo~p@gvE`h|0tGZ1?EVhjgY%Cl~shGaa z-`T^m1oydMP->PAclb9C;L2$W zvIpm7*aDkSZnj(tW9d696nTw>#&B1@V#i?cSQ7sP>8C}c5Qw>Klx|E)W|ff!K@r`P zCKBbWPb;eZ5%jq5@0o~`Ao^~<6xpLdfWX1&(Es29t~1histqkm_H=}^CD0#djQ zWzf~m>0hi@gx5Cv1Am|QN5yz9SKN(1Ma1#+N?IS6XsfYirEmSKm6BSg(()G#uJ>=p zuTYevbHV43Vk3UW57D6*^&udg0$4>%nbYqFtN7~AIQ-|>d5_S)!!cx&dkgI2&c{Jq z4Yv^UCp6`ISc2MM1tj{BYd(bR3SIGa(}t8CqH{PRrHuklb9K3=v011qp6C;)h+|C0 zMP)aIh%NAvQ%AdJu_JxsP4sL8Z!7E8KN}ubchY(o*8^2h)$YpTi7|tY8*LpDM;_!~ zpNdhJ0%2Va7m7jibPbPJNF$+^(sBujPxp6&6gbxIXZ~U;iS-1wC%2KXVom4uf3M$T z_33*QIT;$ReB2Gb$p=2`;d@ojCf~|Y-#5r*pv`;IhxUwNT-BpJ{21u5+0nXa@l23t zqxrf-95q>a@|!mQ@QyAart2y7N4bWe#NDO4V>|S&6V@ZSDbndGIB7?;q?Q-0XHVH2 z#=SB1Z-<2XG9%za#vL98bwXG7%6`odwsM3zvUq;e$|m(9_%cYNzgfQ1O6 z56JolJIhR%QWRKCJk9z%%<-9!k&qBm{k&8YCqTS_X=zW|zf4${lbQ~)cFT@=J~=d! zB4w#MeP8)tKwu+cJT$;$zMxWIwm_Z3()s(8ZJb`iAwL8Rn)WYqV%17JqtRmyO&B7jv=!3+FU+lXlsN` z?pEH+x?a$A`VSjp9OIEUU|TqI_Jl0G$IEK5_+nCiI{<~aSb z`|s4w*iQl2O2=ulT(Jwk6A>}PKBE(iXLujM)Ucw&S8x5?LfL+tbhvPlJR2Yd(l;y( zd|&%>nth{BYoOp;PDBaSNqZ{Q8rca6%j97MZL+5l1 z0uFXiDD@0rJ%eCLDmsyj?!oL0{FO&6OU>I%IO^P(0MF^fRPe_xHuxenn>m8}rk(t} z4j^UdopLnUYsX|hufU9ro)BP!oUB{?l|xXD)tF0kD@)DaOoYX)aHIPatZI$lxP{sH zkA)yYoj@z${3bzdi-#vGl>HDC+-J%}dW8T?Pv_R@(>YqgQ+s!oYYq~5*666F*08!m zZfBYsAtn`fxY}(r*xS%~EQ+fA(qI&DD7_Y%ILdXVRmZHv+_hhPWd=)R#$IwqM?c@{ z?udOvILfhFQl{;Sa>)Nqxoc8>YfEv=$!+EG-4b`HPzqYS%Lt*Nk5S(le@tJH#~ zcjIaLch$5U$??Cq1#sy%$gf!cU+x5HygXIY-D}n0{nt5H?}fW*M=D{5fWi`%!`}b- z_SM+`F1B=Sa5Q<>#+dof3nzFd=!>deEzDxN#>1nH!_kAM^Uu^;z!Q8UtwdESb3hn# z?bd|u#@$;bD@+W@RN`vK>s{xcuG9CezvF5-_9y~YSq-XCzbthoc&4}HQ?k}AW3WxM z*1^Mf_TmriS9hO&(AQsR;w>9wqi-L*CGL7hpC2jO?2MUmf0Csb?EOEz-Jn78Q|ZvT zzPHb88gQtP95|yG}P(uF6d~#9mVNEwnLY*ec?o6+SK|A4vdtJ zVybBZloPRW9kXQ{Hhz0IUn_8mZeG%>HLdIO6yH)nn2PaJbYjDL2xpulMe2-)tsxQ7 zFVxrB9m#f-ET`Ol+4s+r!$pnd9?N-_ph3&V4VpL<`;v7>!`4k&M{$K`<6O6Ls9M8d zkJ$)k7hZK;No)+R>L&c_1%3U%D7hJ5U+dvjnFyLUJ0pvVfBS+os)`Nj z>%`LC@?ZxN!qFI4c{=DTu+4T#+Y-Z$6dci|LaQs{^ZgBNkaNx91{QW z+kpNpK3-l$(OY+1yY%e8x-)iv+S;OX@UdlICI=1D`|mYPY>iBu^6{T7mVMb1Z5Dqn zG4UEXFvoGu>2HS8hr*5?weSC2GW}EQ>*?T6hFjvu*A2`7UX|`LrKgK<9vQflV42{i z5KY;2>RaKZ#-P~YJ8OS^b8WFN{-U7fWCW;;HIM?gHO393y3SW=E#I8kQQu|0(QI77 zVC%+qOY6CrUJcyDo}bdhfh$Z^|NGOGIA_KRH-hYoQ)(Dc_6?dtd|5Mp93Hf=$knI^ z^GLvG;lBOh+b@(!W|!ixOpl?Jmy5)3AzL9K+an#)rvD>PDjRck8?*>M8~akOLFEFgWxdUr|$VPp_g2QZ=X)8Wc)|ag3I*b;_%HC5E&x3QvFt)?d z%X>ebKETCsCx;7_Nm&1Bf|2&e-TM6v%E5%M zh(n~sXt*hx3r%IL88wXTeys?EZ+CUYsjGf_fJJdc@`aTuOfA~Omlm7DEyGT1H>S1l zNPqW4m0zW?T#Diy%acR}g>wPRkW*px`^jU_<@-NFXm>cq*7ku+l>A7{r$D<9ZQn_| z!NJvhyKfAeCtFGF=Qix};Vv(nJ-55@nuBX7&CTLyk^6*>*9u+F3{+a9|JjRQ0abQ6 zb;a&E9PteBdeG-nMkuXCK8gb{z?5QzCI4QM{vec(LI_Uc8N9h|m!G{m)x>2Kg;@0F zKT;&?X&gF$Ij8bEtec#!%VjZ+0D(n0v)%M?TnwcgxJ~i*&`cdIQ_5fwZ*~BGv8y#R)I7j+SC9X}3r}Vq-y1Ve=pv^#iPody zIs=kIUu9~)_z>&aek@zLnu>U<<92%KMtB8mUV>mr)&F1*%F?353s#0iN9*b~eyA?e z2}8LuHiQq_BhRWIy8Dh-bonlSMT!AFVh#j?-B{^b1HtCrC%i+~RB5yB27zV@$TprN zfhHgMB-2NDh1;Cg@}!T{wN4wP4gQ^LpKLcJxtw_2nKHa~XeGlWtDYQ|-h2`{bjLz{ zlo$z{zuKV&q#OQgL`L+_L`cqP`P{hyFpPb%40fEk{qGM)UCPeH-%)&J#h4hWRMK0= z2^zpyul94Tsd5k#8j-801XV2QpDRgKjBxKRsb-A_W6$?!S+`S)V2rnyODL9vz0UO< z;00||aPg?r@$hSeWjD6BfR2rA$TDvcC4ya+j9XlQEzY_x^(}_U0MrRUrwNqkS@Xld z#YVx!UePWC+f9T8=k4O#oBR8f=rl?kZC%fC@yh z-F5&mwgz-oc3fQPbt{%r)o`blnN(Sh#f`g`>UF>PcDd!9l$&Z=vd!om-kXm3;Gh!d3K9pRoHoTHO&;zV6fSblq>6kR zXnuC=LmIZL<8;!+vD#qs{!(aEo_ILcrrL7k0&;INc%n zdKQ#WvFBnJqka%~$VamL6n_#~0M|RAeNou&SuTVme?M}&CrsvQN44k3tD5k%_9TEe z(2fg%o?X>=dRs(*VR4XO#`LI*S1*8 z8|kB9?MnvA{}^)X;Y3-#M_*TnrV>O%0WpA3n@QtQ4a|v zoJULVcxhwtnxmR?4|Jk#XZE*@JMl@8$%bqpE9`f(;Y%yBEAAv@cs0&K8;B zvXT{C>rTYnrHQ2b*Cza2qJ7|j8Ncq-9J;60&p%-0Cl0mX{A=<(<cp6p@CKU zLasIt565}WI$SsN-kIb^jiEEo>(jd@+2oZ~)d!xT10X)O02d748_y0+4 zmPtBJ5cu^cktm6HG}JKqBbh)$S8|a`6;^@6_}n5j@|)C~dsV+JW;HU2$%)UxKT;=C zb@*GR)&b|8k;v9|=3ZA2T%{D%AL$gdqjmXBd#iG(bz85CANmi6*DqXE`)nn(ZX_i_4Z$lUb1T9>OKfqTA2bIq0ITLlk%ezvpf zMejg7%;mP8LNSF6+uMOt+kup>a8cr7Dv4FyFym!-N-WI(mOahOAopi_g|j9sf8yOB zJ^*-+OL6oNgbvH#$eP&>Y-E*j3hGXIqMrrZ08!_6TfcUh#nX6;o$Z;y~Tx zDu6yU;mu`UVC&7LrC1-Wl=kKFF|p-nLD^;e?1JBBdvquQP0Dd-I|rQ`L9&~-6tGU7q;U~*5 z%-U8*t2hq+c+my$nq�MN6)AV6%}|N?XbsiC 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 Oe*!hKc|-7#KmXa2WtA`h literal 0 HcmV?d00001 diff --git a/web+/src/assets/images/logo.png b/web+/src/assets/images/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..5890300ccf7f6dfda92295c5875067dd5b25be6f GIT binary patch literal 10409 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 + + + + {{ $t(`route.${item.meta.title}`) }} + + {{ $t(`route.${item.meta.title}`) }} + + + + + + + + + diff --git a/web+/src/components/Hamburger/index.vue b/web+/src/components/Hamburger/index.vue new file mode 100644 index 0000000..79e004c --- /dev/null +++ b/web+/src/components/Hamburger/index.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/web+/src/components/SvgIcon/index.vue b/web+/src/components/SvgIcon/index.vue new file mode 100644 index 0000000..e792e53 --- /dev/null +++ b/web+/src/components/SvgIcon/index.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/web+/src/global.ts b/web+/src/global.ts new file mode 100644 index 0000000..38a6922 --- /dev/null +++ b/web+/src/global.ts @@ -0,0 +1,7 @@ +export default { + // 媒体类型 + Admin: 'admin', + Manager: 'manager', + GroupManager: 'group-manager', + Member: 'member', +} diff --git a/web+/src/icons/svg/commit.svg b/web+/src/icons/svg/commit.svg new file mode 100644 index 0000000..79b894b --- /dev/null +++ b/web+/src/icons/svg/commit.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/converter.svg b/web+/src/icons/svg/converter.svg new file mode 100644 index 0000000..6cb9808 --- /dev/null +++ b/web+/src/icons/svg/converter.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/crontab.svg b/web+/src/icons/svg/crontab.svg new file mode 100644 index 0000000..88a9ed1 --- /dev/null +++ b/web+/src/icons/svg/crontab.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/dashboard.svg b/web+/src/icons/svg/dashboard.svg new file mode 100644 index 0000000..5317d37 --- /dev/null +++ b/web+/src/icons/svg/dashboard.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/deploy.svg b/web+/src/icons/svg/deploy.svg new file mode 100644 index 0000000..7555a6e --- /dev/null +++ b/web+/src/icons/svg/deploy.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/example.svg b/web+/src/icons/svg/example.svg new file mode 100644 index 0000000..46f42b5 --- /dev/null +++ b/web+/src/icons/svg/example.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/eye-open.svg b/web+/src/icons/svg/eye-open.svg new file mode 100644 index 0000000..88dcc98 --- /dev/null +++ b/web+/src/icons/svg/eye-open.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/eye.svg b/web+/src/icons/svg/eye.svg new file mode 100644 index 0000000..16ed2d8 --- /dev/null +++ b/web+/src/icons/svg/eye.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/form.svg b/web+/src/icons/svg/form.svg new file mode 100644 index 0000000..dcbaa18 --- /dev/null +++ b/web+/src/icons/svg/form.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/group.svg b/web+/src/icons/svg/group.svg new file mode 100644 index 0000000..dbecc5b --- /dev/null +++ b/web+/src/icons/svg/group.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/json.svg b/web+/src/icons/svg/json.svg new file mode 100644 index 0000000..9abe130 --- /dev/null +++ b/web+/src/icons/svg/json.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/language.svg b/web+/src/icons/svg/language.svg new file mode 100644 index 0000000..0082b57 --- /dev/null +++ b/web+/src/icons/svg/language.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/link.svg b/web+/src/icons/svg/link.svg new file mode 100644 index 0000000..48197ba --- /dev/null +++ b/web+/src/icons/svg/link.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/list.svg b/web+/src/icons/svg/list.svg new file mode 100644 index 0000000..dc289da --- /dev/null +++ b/web+/src/icons/svg/list.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/monitor.svg b/web+/src/icons/svg/monitor.svg new file mode 100644 index 0000000..a5fa7a1 --- /dev/null +++ b/web+/src/icons/svg/monitor.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/namespace.svg b/web+/src/icons/svg/namespace.svg new file mode 100644 index 0000000..583ef1d --- /dev/null +++ b/web+/src/icons/svg/namespace.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/nested.svg b/web+/src/icons/svg/nested.svg new file mode 100644 index 0000000..06713a8 --- /dev/null +++ b/web+/src/icons/svg/nested.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/password.svg b/web+/src/icons/svg/password.svg new file mode 100644 index 0000000..e291d85 --- /dev/null +++ b/web+/src/icons/svg/password.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/permission.svg b/web+/src/icons/svg/permission.svg new file mode 100644 index 0000000..d3f0201 --- /dev/null +++ b/web+/src/icons/svg/permission.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/phrase.svg b/web+/src/icons/svg/phrase.svg new file mode 100644 index 0000000..89020d8 --- /dev/null +++ b/web+/src/icons/svg/phrase.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/project.svg b/web+/src/icons/svg/project.svg new file mode 100644 index 0000000..008b2f5 --- /dev/null +++ b/web+/src/icons/svg/project.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/server.svg b/web+/src/icons/svg/server.svg new file mode 100644 index 0000000..7bd710e --- /dev/null +++ b/web+/src/icons/svg/server.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/setting.svg b/web+/src/icons/svg/setting.svg new file mode 100644 index 0000000..8446c5a --- /dev/null +++ b/web+/src/icons/svg/setting.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/table.svg b/web+/src/icons/svg/table.svg new file mode 100644 index 0000000..0e3dc9d --- /dev/null +++ b/web+/src/icons/svg/table.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/template.svg b/web+/src/icons/svg/template.svg new file mode 100644 index 0000000..4d2b8c5 --- /dev/null +++ b/web+/src/icons/svg/template.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/toolbox.svg b/web+/src/icons/svg/toolbox.svg new file mode 100644 index 0000000..36773f6 --- /dev/null +++ b/web+/src/icons/svg/toolbox.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/tree.svg b/web+/src/icons/svg/tree.svg new file mode 100644 index 0000000..dd4b7dd --- /dev/null +++ b/web+/src/icons/svg/tree.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/icons/svg/user.svg b/web+/src/icons/svg/user.svg new file mode 100644 index 0000000..0ba0716 --- /dev/null +++ b/web+/src/icons/svg/user.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/lang/en.json b/web+/src/lang/en.json new file mode 100644 index 0000000..0aebecb --- /dev/null +++ b/web+/src/lang/en.json @@ -0,0 +1,212 @@ +{ + "name": "Name", + "script": "Script", + "user": "User", + "userId": "User ID", + "userName": "Username", + "admin": "Admin", + "role": "Role", + "account": "Account", + "password": "Password", + "mobile": "Mobile", + "contact": "Contact", + "project": "Project", + "projectName": "Project name", + "projectURL": "Project URL", + "projectPath": "Project path", + "autoDeploy": "Auto deploy", + "member": "Member", + "server": "Server", + "serverId": "Server ID", + "serverName": "Server name", + "serverDescription": "Server description", + "template": "Template", + "package": "Package", + "crontab": "Crontab", + "command": "Command", + "directory": "Directory", + "file": "File", + "func": "Func", + "param": "Param", + "deploy": "Deploy", + "grey": "Grey", + "initial": "Initial", + "search": "Search", + "tips": "Tips", + "view": "View", + "detail": "Detail", + "review": "Review", + "reject": "Reject", + "manage": "Manage", + "interval": "Interval", + "desc": "Description", + "size": "Size", + "namespace": "Namespace", + "environment": "Environment", + "branch": "Branch", + "filename": "Filename", + "setting": "Setting", + "baseSetting": "Base setting", + "notice": "Notice", + "task": "Task", + "date": "Date", + "now": "Now", + "today": "Today", + "m1d": "M1D", + "p1d": "P1D", + "time": "Time", + "insertTime": "Insert time", + "updateTime": "Update time", + "commitDate": "Commit date", + "deployDate": "Deploy date", + "startDate": "Start date", + "endDate": "End date", + "creator": "Creator", + "editor": "Editor", + "op": "Operation", + "submit": "Submit", + "add": "Add", + "edit": "Edit", + "copy": "Copy", + "approve": "Approve", + "deny": "Deny", + "upload": "Upload", + "uploading": "Uploading", + "reUpload": "Reupload", + "import": "Import", + "read": "Read", + "run": "Run", + "delete": "Delete", + "remove": "Remove", + "install": "Install", + "confirm": "Confirm", + "save": "Save", + "cancel": "Cancel", + "success": "Success", + "open": "Open", + "close": "Close", + "stop": "Stop", + "fail": "Fail", + "state": "State", + "stateOption": ["Disable", "Enable"], + "boolOption": ["No", "Yes"], + "runOption": ["Not run", "Run"], + "envOption": ["Unknown", "Production", "Pre-release", "Test", "Development"], + "webhookOption": { + "0": "Nothing", + "1": "Weixin", + "2": "Dingding", + "3": "Feishu", + "255": "Custom" + }, + "route": { + "userProfile": "Profile", + "deploy": "Deploy", + "toolbox": "Toolbox", + "json": "JSON Formatter", + "monitor": "APP Monitor", + "project": "Project", + "server": "Server", + "serverSetting": "Server", + "template": "Template", + "crontab": "Crontab", + "namespace": "Namespace", + "member": "Member" + }, + "tagsView": { + "refresh": "Refresh", + "close": "Close", + "closeOthers": "Close Others", + "closeAll": "Close All" + }, + "navbar": { + "profile": "Your profile", + "doc": "Document", + "logout": "Sign out" + }, + "userPage": { + "oldPassword": "Old password", + "newPassword": "New password", + "rePassword": "Confirm password" + }, + "memberPage": { + "permissionDesc": "Admin has all namespace and project permissions", + "removeUserTips": "This action will delete the user({name}), continue?" + }, + "namespacePage": { + "removeUserTips": "This action will delete the user\"s binding relationship, continue?" + }, + "templatePage": { + "scriptNotice": "Note\": The package has been uploaded to the /tmp directory", + "templateDeleteTips": + "This action will delete the template({templateName}), continue?" + }, + "serverPage": { + "sshKeyOwner": "SSH-Key Owner", + "sshKeyPath": "SSH-Key Path", + "sshKeyPassword": "SSH-Key Pswd", + "copyPub": "Copy pub", + "copyPubTips": "Copy success. Paste it to ~/.ssh/authorized_keys", + "testConnection": "Test", + "removeServerTips": + "This action will delete the server({serverName}), continue?" + }, + "crontabPage": { + "removeServerCrontabLabel": "Delete crontab in the server", + "importTips": "Please read the crontab in the server", + "selectServerTips": "Please select the server", + "selectItemTips": "Please select an item", + "removeCrontabServerTips": "This action will delete the server\"s binding relationship, continue?" + }, + "monitorPage": { + "testAppState": "Test APP state", + "failTimes": "Failure times", + "notifyTimes": "Notice times", + "errorContent": "Error content", + "toggleStateTips": + "This action will suspend the monitoring application({monitorName}), continue?", + "removeMontiorTips": + "This action will no longer monitor the app({monitorName}), continue?" + }, + "JSONPage": { + "expandAll": "Expand all", + "collapseAll": "Collapse all", + "unmarkAll": "Unmark all", + "tips": + "1.Hold down ALT and click label to achieve highlighting
2.Hold down SHIFT and click label to view the JSON path" + }, + "projectPage": { + "testConnection": "Test", + "lishBranch": "List branch", + "scriptMode": "Script mode", + "rsyncDoc": "https://linux.die.net/man/1/rsync", + "deployNotice": "Deploy notice", + "symlinkLabel": "Symlink deploy", + "symlinkHeaderTips": "

The project synchronize to the specified directory(rsync /symlinkPath), and ln -s projectPath symlinkPath

It can prevent the project from external access that are being synchronized during the process of synchronizing files

Back up the latest 10 deployment files for quick rollback

", + "symlinkFooterTips": "

If the deployment path already exists on the target server, please delete the directory manually (rm -rf projectPath), otherwise the soft chain will fail

If you need to change the directory, you must manually migrate the original directory/p>", + "afterPullScriptLabel": "After pull script", + "afterPullScriptTips": "The script that runs on the host server after pull
For example: bash after-pull-script.sh
", + "afterDeployScriptLabel": "After deploy script", + "afterDeployScriptTips": "The script that runs on the target server after deploy
For example: bash after-deploy-script.sh
If you need to restart the service, please pay attention to whether you need nohup
", + "predefinedVar": "predefined vars", + "autoDeployTitle": "Deploy trigger: automatically build the release project after certain conditions are met", + "autoDeployTips": "Go to the webhook page in GitLab、GitHub or Gitee
Fill in URL http(s)://domian(IP)/deploy/webhook?project_id={projectId}
Check push event, (Gitlab can choose the corresponding branch)", + "projectFileTips": "Upload to the target server with the project deploy.", + "removeProjectTips": "This action will delete the project({projectName}), continue?", + "removeFileTips": "This action will delete the file({filename}), continue?", + "removeServerTips": "This action will delete the server\"s({serverName}) binding relationship, continue?", + "removeUserTips": "This action will delete the user\"s({userName}) binding relationship, continue?" + }, + "deployPage": { + "resetState": "Reset state", + "showDetail": "Show detail", + "noDetail": "No detail", + "taskDeploy": "Crontab deploy", + "resetStateTips": "This action will reset project state, continue?", + "reviewDeploy": "Review deploy", + "reviewTips": "This action will approve commit, continue?", + "reviewStateOption": ["Wait", "Reviewed", "Rejected"], + "removeProjectTaskTips": "This action will delete the crontab task in {projectName}, continue?", + "publishCommitTips": "This action will rebuild {commit}, continue?" + } +} diff --git a/web+/src/lang/index.ts b/web+/src/lang/index.ts new file mode 100644 index 0000000..21217d3 --- /dev/null +++ b/web+/src/lang/index.ts @@ -0,0 +1,41 @@ +import { createI18n } from 'vue-i18n' +import Cookies from 'js-cookie' +import elementEnLocale from 'element-plus/lib/locale/lang/en' // element-ui lang +import elementZhLocale from 'element-plus/lib/locale/lang/zh-cn' +import localMessages from '@intlify/vite-plugin-vue-i18n/messages' + +const messages = { + [elementEnLocale.name]: { + // el 这个属性很关键,一定要保证有这个属性, + el: elementEnLocale.el, + // 定义您自己的字典,但是请不要和 `el` 重复,这样会导致 ElementPlus 内部组件的翻译失效. + ...localMessages[elementEnLocale.name], + }, + [elementZhLocale.name]: { + el: elementZhLocale.el, + // 定义您自己的字典,但是请不要和 `el` 重复,这样会导致 ElementPlus 内部组件的翻译失效. + ...localMessages[elementZhLocale.name], + }, +} + +export function getLanguage(): string { + const chooseLanguage = Cookies.get('language') + if (chooseLanguage) return chooseLanguage + + // if has not choose language + const language = navigator.language.toLowerCase() + const locales = Object.keys(messages) + for (const locale of locales) { + if (language.indexOf(locale) > -1) { + return locale + } + } + return 'en' +} +const i18n = createI18n({ + globalInjection: true, + locale: getLanguage(), + messages, +}) + +export default i18n diff --git a/web+/src/lang/zh-cn.json b/web+/src/lang/zh-cn.json new file mode 100644 index 0000000..9cb9159 --- /dev/null +++ b/web+/src/lang/zh-cn.json @@ -0,0 +1,209 @@ +{ + "name": "名称", + "script": "脚本", + "user": "用户", + "userId": "用户ID", + "userName": "用户名称", + "admin": "超管", + "role": "角色", + "account": "账号", + "password": "密码", + "mobile": "手机号码", + "contact": "联系方式", + "project": "项目", + "projectName": "项目名称", + "projectURL": "项目地址", + "projectPath": "部署路径", + "autoDeploy": "自动部署", + "member": "成员", + "server": "服务器", + "serverId": "服务器ID", + "serverName": "服务器名称", + "serverDescription": "服务器描述", + "template": "模板", + "package": "安装包", + "crontab": "定时", + "command": "命令", + "directory": "目录", + "file": "文件", + "func": "功能", + "param": "参数", + "deploy": "构建", + "grey": "灰度", + "initial": "初始化", + "search": "搜索", + "tips": "提示", + "view": "查看", + "detail": "详情", + "review": "审核", + "reject": "拒绝", + "manage": "管理", + "interval": "间隔", + "desc": "描述", + "size": "大小", + "namespace": "空间", + "environment": "环境", + "branch": "分支", + "filename": "文件名", + "setting": "设置", + "baseSetting": "基本配置", + "notice": "通知", + "task": "任务", + "date": "日期", + "now": "当前", + "today": "今天", + "m1d": "减一天", + "p1d": "加一天", + "time": "时间", + "insertTime": "创建时间", + "updateTime": "更新时间", + "commitDate": "提交日期", + "deployDate": "构建日期", + "startDate": "开始日期", + "endDate": "结束日期", + "creator": "创建人", + "editor": "修改人", + "op": "操作", + "submit": "提交", + "add": "添加", + "edit": "编辑", + "copy": "复制", + "approve": "同意", + "deny": "拒绝", + "upload": "上传", + "uploading": "上传中", + "reUpload": "重传", + "import": "导入", + "read": "读取", + "run": "运行", + "delete": "删除", + "remove": "移除", + "install": "安装", + "confirm": "确认", + "save": "保存", + "cancel": "取消", + "success": "成功", + "open": "开启", + "close": "关闭", + "stop": "暂停", + "fail": "失败", + "state": "状态", + "stateOption": ["失效", "生效"], + "boolOption": ["否", "是"], + "runOption": ["未运行", "已运行"], + "envOption": ["未知", "生产环境", "预发布环境", "测试环境", "开发环境"], + "webhookOption": { + "0": "无", + "1": "企业微信", + "2": "钉钉", + "3": "飞书", + "255": "自定义" + }, + "route": { + "userProfile": "个人信息", + "deploy": "构建发布", + "toolbox": "工具箱", + "json": "JSON格式化", + "monitor": "应用监控", + "project": "项目设置", + "server": "服务器管理", + "serverSetting": "服务器设置", + "template": "模板设置", + "crontab": "Crontab管理", + "namespace": "空间设置", + "member": "成员设置" + }, + "tagsView": { + "refresh": "刷新", + "close": "关闭", + "closeOthers": "关闭其它", + "closeAll": "关闭所有" + }, + "navbar": { + "profile": "个人中心", + "doc": "帮助文档", + "logout": "退出" + }, + "userPage": { + "oldPassword": "原密码", + "newPassword": "新密码", + "rePassword": "确认新密码" + }, + "memberPage": { + "permissionDesc": "超管具有所有空间和项目权限", + "removeUserTips": "此操作将删除{name}, 是否继续?" + }, + "namespacePage": { + "removeUserTips": "此操作将永久删除该用户的绑定关系, 是否继续?" + }, + "templatePage": { + "scriptNotice": "注意:安装包上传至目标服务器的/tmp目录", + "templateDeleteTips": "此操作将删除模板({templateName}), 是否继续?" + }, + "serverPage": { + "sshKeyOwner": "SSH-Key 所有者", + "sshKeyPath": "SSH-Key 路径", + "sshKeyPassword": "SSH-Key 密码", + "copyPub": "复制共钥", + "copyPubTips": "复制成功,请粘贴到目标服务器~/.ssh/authorized_keys里面", + "testConnection": "测试连接", + "removeServerTips": "此操作将删除服务器({serverName}), 是否继续?" + }, + "crontabPage": { + "removeServerCrontabLabel": "删除服务器Crontab任务", + "importTips": "请读取服务器Crontab任务", + "selectServerTips": "请先选择服务器", + "selectItemTips": "请先选择需要导入的条目", + "removeCrontabServerTips": "此操作将永久删除该服务器的绑定关系, 是否继续?" + }, + "monitorPage": { + "testAppState": "测试应用状态", + "failTimes": "连续失败次数", + "notifyTimes": "通知次数", + "errorContent": "错误内容", + "toggleStateTips": "此操作将暂停监控应用({monitorName}), 是否继续?", + "removeMontiorTips": "此操作将不再监控应用({monitorName}), 是否继续?" + }, + "JSONPage": { + "expandAll": "展开所有", + "collapseAll": "收起所有", + "unmarkAll": "取消高亮", + "tips": "1.按住ALT点击label可以实现高亮
2.按住SHIFT可以查看JSON路径" + }, + "projectPage": { + "testConnection": "测试连接", + "lishBranch": "列出分支", + "scriptMode": "脚本类型", + "rsyncDoc": "https://zhenorzz.gitee.io/goploy/#/dependency/rsync", + "deployNotice": "构建通知", + "publishReview": "发布审核", + "reviewFooterTips": "只有成员构建项目才会触发审核
审核方式:
1. 前往构建发布页面进行审核
2. 推送到URL:http(s)://domain?custom-param=1&callback=***
    http get callback的值即可完成审核
    重复访问callback只会发布一次,并且发布过不会再次发布", + "symlinkLabel": "软链部署(推荐)", + "symlinkHeaderTips": "

项目先同步到指定目录(rsync 软链目录),然后ln -s 部署路径 软链目录

可以避免项目在同步传输文件的过程中,外部访问到部分正在同步的文件

备份最近10次的部署文件,以便快速回滚

", + "symlinkFooterTips": "

如果部署路径已存在在目标服务器,请手动删除该目录rm -rf 部署路径,否则软链将会不成功

如需更换目录,务必手动迁移原先的目录到目标服务器

", + "afterPullScriptLabel": "拉取后运行脚本", + "afterPullScriptTips": "拉取代码后在宿主服务器运行的脚本
运行方式:打包成一份脚本文件
检查服务器是否安装该脚本类型(默认以bash运行)
", + "afterDeployScriptLabel": "部署后运行脚本", + "afterDeployScriptTips": "部署后在目标服务器运行的脚本
运行方式:打包成一份脚本文件
如需重启服务,请注意是否需要nohup
检查服务器是否安装该脚本类型(默认以bash运行)", + "predefinedVar": "预定义变量", + "autoDeployTitle": "构建触发器:达成某种条件后自动构建发布项目", + "autoDeployTips": "前往GitLab、GitHub或Gitee的webhook(可前往谷歌查找各自webhook所在的位置)
填入连接http(s)://域名(IP)/deploy/webhook?project_id={projectId}
勾选push event即可, (Gitlab可以选对应的分支)", + "projectFileTips": "构建项目时上传到目标服务器", + "removeProjectTips": "此操作将删除项目({projectName}), 是否继续?", + "removeFileTips": "此操作将永久删除文件({filename}), 是否继续?", + "removeServerTips": "此操作将永久删除服务器({serverName})的绑定关系, 是否继续?", + "removeUserTips": "此操作将永久删除用户({userName})的绑定关系, 是否继续?" + }, + "deployPage": { + "resetState": "重置状态", + "showDetail": "查看详情", + "noDetail": "暂无详情", + "taskDeploy": "定时构建", + "resetStateTips": "此操作将重置项目的构建状态, 是否继续?", + "reviewDeploy": "审核构建", + "reviewTips": "此操作将通过该次提交, 是否继续?", + "reviewStateOption": ["待审", "已审", "拒审"], + "removeProjectTaskTips": "此操作删除{projectName}的定时任务, 是否继续?", + "publishCommitTips": "此操作将重新构建{commit}, 是否继续?" + } +} diff --git a/web+/src/layout/components/AppMain.vue b/web+/src/layout/components/AppMain.vue new file mode 100644 index 0000000..05b0bca --- /dev/null +++ b/web+/src/layout/components/AppMain.vue @@ -0,0 +1,51 @@ + + + + + + + diff --git a/web+/src/layout/components/Navbar.vue b/web+/src/layout/components/Navbar.vue new file mode 100644 index 0000000..dc4abad --- /dev/null +++ b/web+/src/layout/components/Navbar.vue @@ -0,0 +1,403 @@ + + + + + diff --git a/web+/src/layout/components/RightMenu/composables/useDateTransform.ts b/web+/src/layout/components/RightMenu/composables/useDateTransform.ts new file mode 100644 index 0000000..88ff643 --- /dev/null +++ b/web+/src/layout/components/RightMenu/composables/useDateTransform.ts @@ -0,0 +1,68 @@ +import { reactive, onUnmounted } from 'vue' +import { parseTime } from '@/utils' + +export default function useDateTransform() { + const timeExchange = reactive({ + date: parseTime(new Date().getTime()), + timestamp: '', + timer: setInterval(() => { + timeExchange.placeholder = String(Math.round(Date.now() / 1000)) + }, 1000), + placeholder: String(Math.round(Date.now() / 1000)), + }) + const dateExchange = reactive({ + date: '', + timestamp: Math.round(Date.now() / 1000), + timer: setInterval(() => { + dateExchange.placeholder = parseTime(new Date().getTime()) + }, 1000), + placeholder: parseTime(new Date().getTime()), + }) + const timestamp = (value: string) => { + let ts = 0 + switch (value) { + case 'now': + ts = Math.round(Date.now() / 1000) + break + case 'today': + ts = Math.round( + new Date(new Date().setHours(0, 0, 0, 0)).getTime() / 1000 + ) + break + case 'm1d': + ts = + timeExchange.timestamp !== '' + ? parseInt(timeExchange.timestamp) - 86400 + : Math.round(Date.now() / 1000) - 86400 + break + case 'p1d': + ts = + timeExchange.timestamp !== '' + ? parseInt(timeExchange.timestamp) + 86400 + : Math.round(Date.now() / 1000) + 86400 + break + default: + ts = Math.round(Date.now() / 1000) + } + timeExchange.timestamp = String(ts) + timeExchange.date = parseTime(ts) + } + + const timestampToDate = () => { + timeExchange.date = parseTime(Number(timeExchange.timestamp)) + } + const dateToTimestamp = () => { + dateExchange.timestamp = new Date(dateExchange.date).getTime() / 1000 + } + onUnmounted(() => { + clearTimeout(timeExchange.timer) + clearTimeout(dateExchange.timer) + }) + return { + timeExchange, + dateExchange, + timestamp, + timestampToDate, + dateToTimestamp, + } +} diff --git a/web+/src/layout/components/RightMenu/composables/useRGBTransform.ts b/web+/src/layout/components/RightMenu/composables/useRGBTransform.ts new file mode 100644 index 0000000..b192bdd --- /dev/null +++ b/web+/src/layout/components/RightMenu/composables/useRGBTransform.ts @@ -0,0 +1,45 @@ +import { reactive } from 'vue' + +export default function useRGBTransform() { + const cHexExchange = reactive({ + hex: '', + rgb: '', + }) + + const rgbExchange = reactive({ + hex: '', + rgb: '', + }) + + const hexToRGB = () => { + const result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec( + cHexExchange.hex + ) + + if (result) { + const r = parseInt(result[1], 16) + const g = parseInt(result[2], 16) + const b = parseInt(result[3], 16) + cHexExchange.rgb = 'rgb(' + r + ', ' + g + ', ' + b + ')' + } else { + cHexExchange.rgb = 'rgb(0, 0, 0)' + } + } + const rgbToHex = () => { + const color = rgbExchange.rgb.replace(/\(|\)|rgb/g, '') + const rgb = color.split(',') + const r = parseInt(rgb[0]) + const g = parseInt(rgb[1]) + const b = parseInt(rgb[2]) + const hex = + '#' + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1) + rgbExchange.hex = hex.toLocaleUpperCase() + } + + return { + cHexExchange, + rgbExchange, + hexToRGB, + rgbToHex, + } +} diff --git a/web+/src/layout/components/RightMenu/composables/useRandomPWD.ts b/web+/src/layout/components/RightMenu/composables/useRandomPWD.ts new file mode 100644 index 0000000..7c991bf --- /dev/null +++ b/web+/src/layout/components/RightMenu/composables/useRandomPWD.ts @@ -0,0 +1,39 @@ +import { reactive } from 'vue' + +export default function useRandomPWD() { + const password = reactive({ + checkbox: [1, 2, 3], + length: 8, + text: '', + }) + const createPassword = () => { + let randArr: string[] = [] + for (const num of password.checkbox) { + if (num === 1) { + for (let i = 0; i < 26; i++) { + randArr.push(String.fromCharCode(65 + i)) + } + } else if (num === 2) { + for (let i = 0; i < 26; i++) { + randArr.push(String.fromCharCode(97 + i)) + } + } else if (num === 3) { + for (let i = 0; i < 10; i++) { + randArr.push(i) + } + } else { + randArr = randArr.concat(['!', '@', '#', '$', '%', '^', '&', '*']) + } + } + let tmpPWD = '' + for (let i = 0; i < password.length; i++) { + tmpPWD += randArr[Math.floor(Math.random() * randArr.length)] + } + password.text = tmpPWD + } + + return { + password, + createPassword, + } +} diff --git a/web+/src/layout/components/RightMenu/composables/useUnicode.ts b/web+/src/layout/components/RightMenu/composables/useUnicode.ts new file mode 100644 index 0000000..9dbbbb3 --- /dev/null +++ b/web+/src/layout/components/RightMenu/composables/useUnicode.ts @@ -0,0 +1,14 @@ +import { reactive, computed } from 'vue' + +export default function useUnicode() { + const unicode = reactive({ + escape: '', + }) + const unicodeUnescapeStr = computed(() => + unescape(unicode.escape.replace(/\\u/g, '%u')) + ) + return { + unicode, + unicodeUnescapeStr, + } +} diff --git a/web+/src/layout/components/RightMenu/index.vue b/web+/src/layout/components/RightMenu/index.vue new file mode 100644 index 0000000..8588a81 --- /dev/null +++ b/web+/src/layout/components/RightMenu/index.vue @@ -0,0 +1,443 @@ + + + + + + diff --git a/web+/src/layout/components/Sidebar/FixiOSBug.js b/web+/src/layout/components/Sidebar/FixiOSBug.js new file mode 100644 index 0000000..6e8fe89 --- /dev/null +++ b/web+/src/layout/components/Sidebar/FixiOSBug.js @@ -0,0 +1,27 @@ +import { defineComponent } from 'vue' +export default defineComponent({ + computed: { + device() { + return this.$store.state.app.device + }, + }, + mounted() { + // In order to fix the click on menu on the ios device will trigger the mouseleave bug + // https://github.com/PanJiaChen/vue-element-admin/issues/1135 + this.fixBugIniOS() + }, + methods: { + fixBugIniOS() { + const $subMenu = this.$refs.subMenu + if ($subMenu) { + const handleMouseleave = $subMenu.handleMouseleave + $subMenu.handleMouseleave = (e) => { + if (this.device === 'mobile') { + return + } + handleMouseleave(e) + } + } + }, + }, +}) diff --git a/web+/src/layout/components/Sidebar/Link.vue b/web+/src/layout/components/Sidebar/Link.vue new file mode 100644 index 0000000..4d2d46c --- /dev/null +++ b/web+/src/layout/components/Sidebar/Link.vue @@ -0,0 +1,24 @@ + + + diff --git a/web+/src/layout/components/Sidebar/SidebarItem.vue b/web+/src/layout/components/Sidebar/SidebarItem.vue new file mode 100644 index 0000000..beeaf58 --- /dev/null +++ b/web+/src/layout/components/Sidebar/SidebarItem.vue @@ -0,0 +1,117 @@ + + + diff --git a/web+/src/layout/components/Sidebar/index.vue b/web+/src/layout/components/Sidebar/index.vue new file mode 100644 index 0000000..ee27618 --- /dev/null +++ b/web+/src/layout/components/Sidebar/index.vue @@ -0,0 +1,50 @@ + + + diff --git a/web+/src/layout/components/TagsView/ScrollPane.vue b/web+/src/layout/components/TagsView/ScrollPane.vue new file mode 100644 index 0000000..4eb04c8 --- /dev/null +++ b/web+/src/layout/components/TagsView/ScrollPane.vue @@ -0,0 +1,105 @@ + + + + + diff --git a/web+/src/layout/components/TagsView/index.vue b/web+/src/layout/components/TagsView/index.vue new file mode 100644 index 0000000..1803e0e --- /dev/null +++ b/web+/src/layout/components/TagsView/index.vue @@ -0,0 +1,320 @@ + + + + + + + diff --git a/web+/src/layout/components/index.ts b/web+/src/layout/components/index.ts new file mode 100644 index 0000000..d9733bd --- /dev/null +++ b/web+/src/layout/components/index.ts @@ -0,0 +1,5 @@ +export { default as Navbar } from './Navbar.vue' +export { default as Sidebar } from './Sidebar/index.vue' +export { default as AppMain } from './AppMain.vue' +export { default as RightMenu } from './RightMenu/index.vue' +export { default as TagsView } from './TagsView/index.vue' diff --git a/web+/src/layout/index.vue b/web+/src/layout/index.vue new file mode 100644 index 0000000..3206d3b --- /dev/null +++ b/web+/src/layout/index.vue @@ -0,0 +1,93 @@ + + + + + diff --git a/web+/src/layout/mixin/ResizeHandler.ts b/web+/src/layout/mixin/ResizeHandler.ts new file mode 100644 index 0000000..f8ba0ba --- /dev/null +++ b/web+/src/layout/mixin/ResizeHandler.ts @@ -0,0 +1,45 @@ +import store from '@/store' + +const { body } = document +const WIDTH = 992 // refer to Bootstrap's responsive design +import { defineComponent } from 'vue' +export default defineComponent({ + watch: { + $route() { + if (this.device === 'mobile' && this.sidebar.opened) { + store.dispatch('app/closeSideBar', { withoutAnimation: false }) + } + }, + }, + beforeMount() { + window.addEventListener('resize', this.$_resizeHandler) + }, + beforeUnmount() { + window.removeEventListener('resize', this.$_resizeHandler) + }, + mounted() { + const isMobile = this.$_isMobile() + if (isMobile) { + store.dispatch('app/toggleDevice', 'mobile') + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + }, + methods: { + // use $_ for mixins properties + // https://vuejs.org/v2/style-guide/index.html#Private-property-names-essential + $_isMobile() { + const rect = body.getBoundingClientRect() + return rect.width - 1 < WIDTH + }, + $_resizeHandler() { + if (!document.hidden) { + const isMobile = this.$_isMobile() + store.dispatch('app/toggleDevice', isMobile ? 'mobile' : 'desktop') + + if (isMobile) { + store.dispatch('app/closeSideBar', { withoutAnimation: true }) + } + } + }, + }, +}) diff --git a/web+/src/main.ts b/web+/src/main.ts new file mode 100644 index 0000000..a3f0640 --- /dev/null +++ b/web+/src/main.ts @@ -0,0 +1,27 @@ +import { createApp } from 'vue' +import 'normalize.css/normalize.css' // A modern alternative to CSS resets +import '@/styles/index.scss' // global css +import store from '@/store' +import router from '@/router' +import '@/permission' +import i18n from '@/lang' // internationalization +import SvgIcon from '@/components/SvgIcon/index.vue' // svg component +import ElementPlus from 'element-plus' +import 'element-plus/lib/theme-chalk/index.css' +import 'vite-plugin-svg-icons/register' // register svg sprite map +import global from '@/global' // global config +import App from './App.vue' + +const app = createApp(App) +app.use(ElementPlus, { + i18n: i18n.global.t, + size: 'mini', +}) +app.use(router) +app.use(store) +app.use(i18n) +app.component('SvgIcon', SvgIcon) + +app.config.globalProperties.$global = global + +app.mount('#app') diff --git a/web+/src/mixin/tableHeight.js b/web+/src/mixin/tableHeight.js new file mode 100644 index 0000000..613423a --- /dev/null +++ b/web+/src/mixin/tableHeight.js @@ -0,0 +1,16 @@ +export default { + data() { + return { + tableHeight: window.innerHeight - 160 // table高度 + } + }, + mounted() { + try { + const outHeight = document.getElementsByClassName('app-bar')[0].clientHeight + 140 // 除了table外 查询与按钮的高度 + 其他的高度150 + const maxHeight = window.innerHeight - outHeight + this.tableHeight = maxHeight + } catch (e) { + console.log('缺少节点app-bar') + } + } +} diff --git a/web+/src/permission.ts b/web+/src/permission.ts new file mode 100644 index 0000000..91932ea --- /dev/null +++ b/web+/src/permission.ts @@ -0,0 +1,69 @@ +import router from './router' +import store from './store' +import { ElMessage } from 'element-plus' +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import { isLogin, logout } from '@/utils/auth' // get token from cookie +import { RouteRecordRaw } from 'vue-router' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +const whiteList = ['/login'] // no redirect whitelist + +router.beforeEach(async (to) => { + // start progress bar + NProgress.start() + // set page title + document.title = 'Goploy' + // determine whether the user has logged in + if (isLogin()) { + if (to.path === '/login') { + // if is logged in, redirect to the home page + NProgress.done() + return '/' + } else { + // determine whether the user has obtained his permission roles through getInfo + const hasUID = store.state.user.id && store.state.user.id !== 0 + if (hasUID) { + return true + } else { + try { + // get user info + // note: roles must be a object array! such as: ['admin'] or ,['developer','editor'] + await store.dispatch('user/getInfo') + // generate accessible routes map based on roles + const accessRoutes = await store.dispatch('permission/generateRoutes') + + // dynamically add accessible routes + accessRoutes.forEach((route: RouteRecordRaw) => + router.addRoute(route) + ) + // hack method to ensure that addRoutes is complete + // set the replace: true, so the navigation will not leave a history record + return { ...to, replace: true } + } catch (error) { + // remove token and go to login page to re-login + logout() + ElMessage.error(error || 'Has Error') + NProgress.done() + return `/login?redirect=${to.path}` + } + } + } + } else { + /* has no token*/ + if (whiteList.indexOf(to.path) !== -1) { + // in the free login whitelist, go directly + return true + } else { + // other pages that do not have permission to access are redirected to the login page. + NProgress.done() + return `/login?redirect=${to.path}` + } + } +}) + +router.afterEach(() => { + // finish progress bar + NProgress.done() +}) diff --git a/web+/src/router/index.ts b/web+/src/router/index.ts new file mode 100644 index 0000000..565263f --- /dev/null +++ b/web+/src/router/index.ts @@ -0,0 +1,261 @@ +import { RouteRecordRaw, createRouter, createWebHashHistory } from 'vue-router' + +/* Layout */ +import Layout from '@/layout/index.vue' + +/** + * Note: sub-menu only appear when route children.length >= 1 + * Detail see: https://panjiachen.github.io/vue-element-admin-site/guide/essentials/router-and-nav.html + * + * hidden: true if set true, item will not show in the sidebar(default is false) + * alwaysShow: true if set true, will always show the root menu + * if not set alwaysShow, when item has more than one children route, + * it will becomes nested mode, otherwise not show the root menu + * redirect: noRedirect if set noRedirect will no redirect in the breadcrumb + * name:'router-name' the name is used by (must set!!!) + * meta : { + roles: ['admin', 'manager', 'group-manager', 'member'] control the page roles (you can set multiple roles) + title: 'title' the name show in sidebar and breadcrumb (recommend set) + icon: 'svg-name' the icon show in the sidebar + breadcrumb: false if set false, the item will hidden in breadcrumb(default is true) + activeMenu: '/example/list' if set path, the sidebar will highlight the path you set + } + */ +export const homeRoutes: RouteRecordRaw[] = [ + // 预留常量 permission.js 会修改权限的第一条 + { path: '/', redirect: '/user' }, +] +/** + * constantRoutes + * a base page that does not have permission requirements + * all roles can be accessed + */ +export const constantRoutes: RouteRecordRaw[] = [ + { + path: '/login', + component: () => import('@/views/login/index.vue'), + meta: { hidden: true }, + }, + { + path: '/redirect', + component: Layout, + meta: { hidden: true }, + children: [ + { + path: '/redirect/:path(.*)', + component: () => import('@/views/redirect/index.vue'), + }, + ], + }, + { + path: '/404', + component: () => import('@/views/404.vue'), + meta: { hidden: true }, + }, + { + path: '/user', + component: Layout, + redirect: '/user/profile', + meta: { hidden: true }, + children: [ + { + path: 'profile', + name: 'UserProfile', + component: () => import('@/views/user/profile.vue'), + meta: { title: 'userProfile' }, + }, + ], + }, +] + +/** + * asyncRoutes + * the routes that need to be dynamically loaded based on user permission_uri + */ +export const asyncRoutes: RouteRecordRaw[] = [ + { + path: '/deploy', + component: Layout, + redirect: '/deploy/index', + meta: { + title: 'deploy', + icon: 'deploy', + }, + children: [ + { + path: 'index', + name: 'Deploy', + component: () => import('@/views/deploy/index.vue'), + meta: { + title: 'deploy', + icon: 'deploy', + affix: true, + }, + }, + ], + }, + { + path: '/toolbox', + component: Layout, + redirect: '/toolbox/json', + meta: { + title: 'toolbox', + icon: 'toolbox', + }, + children: [ + { + path: 'json', + name: 'JSONFormatter', + component: () => import('@/views/toolbox/json/index.vue'), + meta: { + title: 'json', + icon: 'json', + }, + }, + ], + }, + { + path: '/monitor', + component: Layout, + redirect: '/monitor/index', + meta: { + title: 'monitor', + icon: 'monitor', + roles: ['admin', 'manager', 'group-manager'], + }, + children: [ + { + path: 'index', + name: 'Monitor', + component: () => import('@/views/monitor/index.vue'), + meta: { + title: 'monitor', + icon: 'monitor', + roles: ['admin', 'manager', 'group-manager'], + }, + }, + ], + }, + { + path: '/project', + component: Layout, + redirect: '/project/index', + meta: { + title: 'project', + icon: 'project', + roles: ['admin', 'manager', 'group-manager'], + }, + children: [ + { + path: 'index', + name: 'Project', + component: () => import('@/views/project/index.vue'), + meta: { + title: 'project', + icon: 'project', + roles: ['admin', 'manager', 'group-manager'], + }, + }, + ], + }, + { + path: '/server', + component: Layout, + redirect: '/server/index', + meta: { + title: 'server', + icon: 'server', + roles: ['admin', 'manager'], + }, + children: [ + { + path: 'index', + name: 'Server', + component: () => import('@/views/server/index.vue'), + meta: { + title: 'serverSetting', + icon: 'setting', + roles: ['admin', 'manager'], + }, + }, + { + path: 'crontab', + name: 'Crontab', + component: () => import('@/views/server/crontab.vue'), + meta: { + title: 'crontab', + icon: 'crontab', + roles: ['admin', 'manager'], + }, + }, + ], + }, + { + path: '/namespace', + component: Layout, + redirect: '/namespace/index', + meta: { + title: 'namespace', + icon: 'namespace', + roles: ['admin', 'manager'], + }, + children: [ + { + path: 'index', + name: 'Namespace', + component: () => import('@/views/namespace/index.vue'), + meta: { + title: 'namespace', + icon: 'namespace', + roles: ['admin', 'manager'], + }, + }, + ], + }, + { + path: '/member', + component: Layout, + redirect: '/member/index', + meta: { + title: 'member', + icon: 'user', + roles: ['admin'], + }, + children: [ + { + path: 'index', + name: 'Member', + component: () => import('@/views/member/index.vue'), + meta: { + title: 'member', + icon: 'user', + roles: ['admin'], + }, + }, + ], + }, + // 404 page must be placed at the end !!! + { path: '/:pathMatch(.*)*', redirect: '/404', meta: { hidden: true } }, +] + +const router = createRouter({ + history: createWebHashHistory(), + scrollBehavior() { + return { + el: '#app', + left: 0, + behavior: 'smooth', + } + }, + routes: constantRoutes, +}) + +export function resetRouter(): void { + router + .getRoutes() + .forEach((route) => route.name && router.removeRoute(route.name)) + + constantRoutes.forEach((route: RouteRecordRaw) => router.addRoute(route)) +} + +export default router diff --git a/web+/src/router/shims-vue-router.d.ts b/web+/src/router/shims-vue-router.d.ts new file mode 100644 index 0000000..1971c5b --- /dev/null +++ b/web+/src/router/shims-vue-router.d.ts @@ -0,0 +1,9 @@ +import 'vue-router' + +declare module 'vue-router' { + interface RouteMeta { + // 是可选的 + roles?: string[] + hidden?: boolean + } +} diff --git a/web+/src/shims-env.d.ts b/web+/src/shims-env.d.ts new file mode 100644 index 0000000..f83a4bc --- /dev/null +++ b/web+/src/shims-env.d.ts @@ -0,0 +1,3 @@ +interface ImportMetaEnv { + VITE_APP_BASE_API: string +} diff --git a/web+/src/shims-vue.d.ts b/web+/src/shims-vue.d.ts new file mode 100644 index 0000000..1da7e20 --- /dev/null +++ b/web+/src/shims-vue.d.ts @@ -0,0 +1,14 @@ +declare module '*.vue' { + import { DefineComponent } from 'vue' + const component: DefineComponent< + Record, + Record, + unknown + > + export default component +} + +declare module 'path-browserify' { + import path from 'path' + export default path +} diff --git a/web+/src/store/index.ts b/web+/src/store/index.ts new file mode 100644 index 0000000..8bf36bc --- /dev/null +++ b/web+/src/store/index.ts @@ -0,0 +1,13 @@ +import { ModuleTree, createStore, createLogger } from 'vuex' +import { RootState } from './types' +const files = import.meta.globEager('./modules/*/index.ts') +const modules: ModuleTree = {} +for (const path in files) { + modules[path.split('/')[2]] = files[path].default +} +const store = createStore({ + strict: true, + modules: { ...modules }, + plugins: process.env.NODE_ENV !== 'production' ? [createLogger()] : [], +}) +export default store diff --git a/web+/src/store/modules/app/index.ts b/web+/src/store/modules/app/index.ts new file mode 100644 index 0000000..83b2a47 --- /dev/null +++ b/web+/src/store/modules/app/index.ts @@ -0,0 +1,64 @@ +import { Module, MutationTree, ActionTree } from 'vuex' +import { RootState } from '../../types' +import Cookies from 'js-cookie' +import { getLanguage } from '@/lang/index' +import { AppState } from './types' + +const state: AppState = { + sidebar: { + opened: Cookies.get('sidebarStatus') + ? !!Cookies.get('sidebarStatus') + : true, + withoutAnimation: false, + }, + device: 'desktop', + language: getLanguage(), +} + +const mutations: MutationTree = { + TOGGLE_SIDEBAR: (state) => { + state.sidebar.opened = !state.sidebar.opened + state.sidebar.withoutAnimation = false + if (state.sidebar.opened) { + Cookies.set('sidebarStatus', '1') + } else { + Cookies.set('sidebarStatus', '0') + } + }, + CLOSE_SIDEBAR: (state, withoutAnimation: boolean) => { + Cookies.set('sidebarStatus', '0') + state.sidebar.opened = false + state.sidebar.withoutAnimation = withoutAnimation + }, + TOGGLE_DEVICE: (state, device: string) => { + state.device = device + }, + SET_LANGUAGE: (state, language: string) => { + state.language = language + Cookies.set('language', language) + }, +} + +const actions: ActionTree = { + toggleSideBar(context) { + context.commit('TOGGLE_SIDEBAR') + }, + closeSideBar({ commit }, { withoutAnimation }) { + commit('CLOSE_SIDEBAR', withoutAnimation) + }, + toggleDevice({ commit }, device: string) { + commit('TOGGLE_DEVICE', device) + }, + setLanguage({ commit }, language: string) { + commit('SET_LANGUAGE', language) + }, +} + +const app: Module = { + namespaced: true, + state, + mutations, + actions, +} + +export default app diff --git a/web+/src/store/modules/app/types.ts b/web+/src/store/modules/app/types.ts new file mode 100644 index 0000000..c2a56e3 --- /dev/null +++ b/web+/src/store/modules/app/types.ts @@ -0,0 +1,10 @@ +export type AppState = { + sidebar: Sidebar + device: string + language: string +} + +type Sidebar = { + opened: boolean + withoutAnimation: boolean +} diff --git a/web+/src/store/modules/permission/index.ts b/web+/src/store/modules/permission/index.ts new file mode 100644 index 0000000..200564d --- /dev/null +++ b/web+/src/store/modules/permission/index.ts @@ -0,0 +1,82 @@ +import { Module, MutationTree, ActionTree } from 'vuex' +import { homeRoutes, asyncRoutes, constantRoutes } from '@/router' +import { RouteRecordRaw } from 'vue-router' +import { getNamespace } from '@/utils/namespace' +import { RootState } from '../../types' +import { PermissionState } from './types' + +/** + * Use meta.role to determine if the current user has permission + * @param role + * @param route + */ +function hasPermission(role: string, route: RouteRecordRaw) { + if (route.meta && route.meta.roles) { + return route.meta['roles'].includes(role) + } else { + return true + } +} + +/** + * Filter asynchronous routing tables by recursion + * @param routes asyncRoutes + * @param role + */ +export function filterAsyncRoutes( + routes: RouteRecordRaw[], + role: string +): RouteRecordRaw[] { + const res: RouteRecordRaw[] = [] + + routes.forEach((route) => { + const tmp = { ...route } + if (hasPermission(role, tmp)) { + if (tmp.children) { + tmp.children = filterAsyncRoutes(tmp.children, role) + } + res.push(tmp) + } + }) + + return res +} + +const state: PermissionState = { + routes: [], +} + +const mutations: MutationTree = { + SET_ROUTES: (state, routes) => { + state.routes = constantRoutes.concat(routes) + }, +} + +const actions: ActionTree = { + generateRoutes({ commit }) { + return new Promise((resolve) => { + const namespace = getNamespace() + let accessRoutes = filterAsyncRoutes(asyncRoutes, namespace.role) + if ( + accessRoutes.length !== 0 && + accessRoutes[0]['children'] && + accessRoutes[0]['children'].length !== 0 + ) { + homeRoutes[0].redirect = + accessRoutes[0].path + '/' + accessRoutes[0].children[0].path + } + accessRoutes = homeRoutes.concat(accessRoutes) + commit('SET_ROUTES', accessRoutes) + resolve(accessRoutes) + }) + }, +} + +const permission: Module = { + namespaced: true, + state, + mutations, + actions, +} + +export default permission diff --git a/web+/src/store/modules/permission/types.ts b/web+/src/store/modules/permission/types.ts new file mode 100644 index 0000000..26d6dd3 --- /dev/null +++ b/web+/src/store/modules/permission/types.ts @@ -0,0 +1,4 @@ +import { RouteRecordRaw } from 'vue-router' +export type PermissionState = { + routes: RouteRecordRaw[] +} diff --git a/web+/src/store/modules/setting/index.ts b/web+/src/store/modules/setting/index.ts new file mode 100644 index 0000000..c5aa846 --- /dev/null +++ b/web+/src/store/modules/setting/index.ts @@ -0,0 +1,14 @@ +import { Module } from 'vuex' +import { SettingState } from './types' +import { RootState } from '../../types' + +const state: SettingState = { + fixedHeader: false, +} + +const setting: Module = { + namespaced: true, + state, +} + +export default setting diff --git a/web+/src/store/modules/setting/types.ts b/web+/src/store/modules/setting/types.ts new file mode 100644 index 0000000..c265011 --- /dev/null +++ b/web+/src/store/modules/setting/types.ts @@ -0,0 +1,3 @@ +export type SettingState = { + fixedHeader: boolean +} diff --git a/web+/src/store/modules/tagsView/index.ts b/web+/src/store/modules/tagsView/index.ts new file mode 100644 index 0000000..2558858 --- /dev/null +++ b/web+/src/store/modules/tagsView/index.ts @@ -0,0 +1,167 @@ +import { Module, MutationTree, ActionTree } from 'vuex' +import { RootState } from '../../types' +import { TagsViewState } from './types' + +const state: TagsViewState = { + visitedViews: [], + cachedViews: [], +} + +const mutations: MutationTree = { + ADD_VISITED_VIEW: (state, view) => { + if (state.visitedViews.some((v) => v.path === view.path)) return + state.visitedViews.push( + Object.assign({}, view, { + title: view.meta.title || 'no-name', + matched: {}, + }) + ) + }, + ADD_CACHED_VIEW: (state, view) => { + if (state.cachedViews.includes(view.name)) return + if (!view.meta.noCache) { + state.cachedViews.push(view.name) + } + }, + + DEL_VISITED_VIEW: (state, view) => { + for (const [i, v] of state.visitedViews.entries()) { + if (v.path === view.path) { + state.visitedViews.splice(i, 1) + break + } + } + }, + DEL_CACHED_VIEW: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + index > -1 && state.cachedViews.splice(index, 1) + }, + + DEL_OTHERS_VISITED_VIEWS: (state, view) => { + state.visitedViews = state.visitedViews.filter((v) => { + return v.meta.affix || v.path === view.path + }) + }, + DEL_OTHERS_CACHED_VIEWS: (state, view) => { + const index = state.cachedViews.indexOf(view.name) + if (index > -1) { + state.cachedViews = state.cachedViews.slice(index, index + 1) + } else { + // if index = -1, there is no cached tags + state.cachedViews = [] + } + }, + + DEL_ALL_VISITED_VIEWS: (state) => { + // keep affix tags + const affixTags = state.visitedViews.filter((tag) => tag.meta.affix) + state.visitedViews = affixTags + }, + DEL_ALL_CACHED_VIEWS: (state) => { + state.cachedViews = [] + }, + + UPDATE_VISITED_VIEW: (state, view) => { + for (let v of state.visitedViews) { + if (v.path === view.path) { + v = Object.assign(v, view) + break + } + } + }, +} + +const actions: ActionTree = { + addView({ dispatch }, view) { + dispatch('addVisitedView', view) + dispatch('addCachedView', view) + }, + addVisitedView({ commit }, view) { + commit('ADD_VISITED_VIEW', view) + }, + addCachedView({ commit }, view) { + commit('ADD_CACHED_VIEW', view) + }, + + delView({ dispatch, state }, view) { + return new Promise((resolve) => { + dispatch('delVisitedView', view) + dispatch('delCachedView', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews], + }) + }) + }, + delVisitedView({ commit, state }, view) { + return new Promise((resolve) => { + commit('DEL_VISITED_VIEW', view) + resolve([...state.visitedViews]) + }) + }, + delCachedView({ commit, state }, view) { + return new Promise((resolve) => { + commit('DEL_CACHED_VIEW', view) + resolve([...state.cachedViews]) + }) + }, + + delOthersViews({ dispatch, state }, view) { + return new Promise((resolve) => { + dispatch('delOthersVisitedViews', view) + dispatch('delOthersCachedViews', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews], + }) + }) + }, + delOthersVisitedViews({ commit, state }, view) { + return new Promise((resolve) => { + commit('DEL_OTHERS_VISITED_VIEWS', view) + resolve([...state.visitedViews]) + }) + }, + delOthersCachedViews({ commit, state }, view) { + return new Promise((resolve) => { + commit('DEL_OTHERS_CACHED_VIEWS', view) + resolve([...state.cachedViews]) + }) + }, + + delAllViews({ dispatch, state }, view) { + return new Promise((resolve) => { + dispatch('delAllVisitedViews', view) + dispatch('delAllCachedViews', view) + resolve({ + visitedViews: [...state.visitedViews], + cachedViews: [...state.cachedViews], + }) + }) + }, + delAllVisitedViews({ commit, state }) { + return new Promise((resolve) => { + commit('DEL_ALL_VISITED_VIEWS') + resolve([...state.visitedViews]) + }) + }, + delAllCachedViews({ commit, state }) { + return new Promise((resolve) => { + commit('DEL_ALL_CACHED_VIEWS') + resolve([...state.cachedViews]) + }) + }, + + updateVisitedView({ commit }, view) { + commit('UPDATE_VISITED_VIEW', view) + }, +} + +const tagsView: Module = { + namespaced: true, + state, + mutations, + actions, +} + +export default tagsView diff --git a/web+/src/store/modules/tagsView/types.ts b/web+/src/store/modules/tagsView/types.ts new file mode 100644 index 0000000..1390d77 --- /dev/null +++ b/web+/src/store/modules/tagsView/types.ts @@ -0,0 +1,5 @@ +import { RouteLocationNormalizedLoaded } from 'vue-router' +export type TagsViewState = { + visitedViews: RouteLocationNormalizedLoaded[] + cachedViews: RouteLocationNormalizedLoaded[] +} diff --git a/web+/src/store/modules/user/index.ts b/web+/src/store/modules/user/index.ts new file mode 100644 index 0000000..6004243 --- /dev/null +++ b/web+/src/store/modules/user/index.ts @@ -0,0 +1,96 @@ +import { Module, MutationTree, ActionTree } from 'vuex' +import { UserState } from './types' +import { RootState } from '../../types' +import { login, getInfo } from '@/api/user' +import { setLogin, logout } from '@/utils/auth' +import { getNamespace, setNamespace, setNamespaceList } from '@/utils/namespace' +import { resetRouter } from '@/router' + +const state: UserState = { + id: 0, + account: '', + name: '', + superManager: 0, +} + +const mutations: MutationTree = { + SET_ID: (state, id: number) => { + state.id = id + }, + SET_ACCOUNT: (state, account: string) => { + state.account = account + }, + SET_NAME: (state, name: string) => { + state.name = name + }, + SET_SUPER_MANAGER: (state, superManager: number) => { + state.superManager = superManager + }, +} + +const actions: ActionTree = { + // user login + login(_, userInfo) { + const { account, password } = userInfo + return new Promise((resolve, reject) => { + login({ account: account.trim(), password: password }) + .then((response) => { + const { data } = response + + let namespace = getNamespace() + if (!namespace) { + namespace = data.namespaceList[data.namespaceList.length - 1] + setNamespace(namespace) + } + setNamespaceList(data.namespaceList) + + setLogin('ok') + resolve(response) + }) + .catch((error) => { + reject(error) + }) + }) + }, + + // get user info + getInfo({ commit }) { + return new Promise((resolve, reject) => { + getInfo() + .then((response) => { + const { data } = response + if (!data) { + reject('Verification failed, please Login again.') + } + const { id, account, name, superManager } = data.userInfo + commit('SET_ID', id) + commit('SET_ACCOUNT', account) + commit('SET_NAME', name) + commit('SET_SUPER_MANAGER', superManager) + resolve(data) + }) + .catch((error) => { + reject(error) + }) + }) + }, + + // user logout + logout({ commit }) { + return new Promise((resolve) => { + commit('SET_ID', 0) + logout() + resetRouter() + resolve(null) + }) + }, +} + +const setting: Module = { + namespaced: true, + state, + mutations, + actions, +} + +export default setting diff --git a/web+/src/store/modules/user/types.ts b/web+/src/store/modules/user/types.ts new file mode 100644 index 0000000..3b4759a --- /dev/null +++ b/web+/src/store/modules/user/types.ts @@ -0,0 +1,6 @@ +export type UserState = { + id: number + account: string + name: string + superManager: number +} diff --git a/web+/src/store/modules/websocket/index.ts b/web+/src/store/modules/websocket/index.ts new file mode 100644 index 0000000..fce1710 --- /dev/null +++ b/web+/src/store/modules/websocket/index.ts @@ -0,0 +1,136 @@ +import { Module, MutationTree, ActionTree } from 'vuex' +import { WebsocketState } from './types' +import { RootState } from '../../types' +import { parseTime } from '@/utils' +import { ElMessageBox, ElMessage } from 'element-plus' + +const state: WebsocketState = { + ws: null, + message: {}, + againConnectTime: 0, // 规定时间重连 +} + +const mutations: MutationTree = { + SET_MESSAGE: (state, message) => { + state.message = message + }, + SET_WS: (state, ws) => { + state.ws = ws + }, + CLOSE_WS: (state) => { + if (state.ws) { + state.ws.close() + } + }, + SET_AGAINCONNECTTIME: (state, time) => { + state.againConnectTime = time + }, +} + +const actions: ActionTree = { + init({ dispatch, commit, state }) { + return new Promise((resolve, reject) => { + const websocket = new WebSocket( + `${location.protocol.replace('http', 'ws')}//${location.host}${ + import.meta.env.VITE_APP_BASE_API + }/ws/connect` + ) + websocket.onopen = () => { + console.log('websocket连接成功, 时间:' + parseTime(Date.now())) + // 连接成功,当成重连次数0 置0 + dispatch('setAgainConnectTime', 0) + resolve(websocket) + } + + websocket.onerror = (err) => { + console.log('websocket连接发生错误, 时间:' + parseTime(Date.now())) + reject(err) + } + + websocket.onmessage = (event) => { + const responseData = JSON.parse(event.data) + console.log(responseData) + dispatch('setMessage', responseData) + } + websocket.onclose = (e) => { + // 1005 主动断开 + // websocket close code https://developer.mozilla.org/en-US/docs/Web/API/CloseEvent + // 顶号,后台发送关闭帧 + dispatch('destory') + + if (e.code !== 1005) { + if (state.againConnectTime === 0) { + // 第一次连接断开进来 有一次重连机会 + dispatch('setAgainConnectTime', new Date().getTime()) + setTimeout(() => { + console.log( + '首次断开,重新主动连接, 时间:' + parseTime(Date.now()) + ) + dispatch('init') + }, 60000) + } else { + if (new Date().getTime() - state.againConnectTime >= 60000) { + console.log( + '主动连接失败,再次尝试, 时间:' + parseTime(Date.now()) + ) + // 一分钟后的连接 一次重连机会已用完 还是连接失败,就弹窗询问用户 + ElMessageBox.confirm( + '检测到Websocket与服务器断开连接, 请重连!', + '提示', + { + confirmButtonText: '确定', + cancelButtonText: '取消', + type: 'warning', + } + ) + .then(() => { + dispatch('init') + }) + .catch(() => { + ElMessage({ + type: 'info', + message: '取消重连', + }) + }) + } + } + } + + console.log( + `connection closed (${e.code})${e.reason}, 时间:${parseTime( + Date.now() + )}` + ) + } + commit('SET_WS', websocket) + }) + }, + + close({ commit }) { + return new Promise(() => { + commit('CLOSE_WS') + commit('SET_WS', null) + }) + }, + + destory({ commit }) { + commit('SET_WS', null) + }, + + setAgainConnectTime({ commit }, times) { + commit('SET_AGAINCONNECTTIME', times) + }, + + setMessage({ commit }, message) { + commit('SET_MESSAGE', message) + }, +} + +const setting: Module = { + namespaced: true, + state, + mutations, + actions, +} + +export default setting diff --git a/web+/src/store/modules/websocket/types.ts b/web+/src/store/modules/websocket/types.ts new file mode 100644 index 0000000..e236009 --- /dev/null +++ b/web+/src/store/modules/websocket/types.ts @@ -0,0 +1,5 @@ +export interface WebsocketState { + ws: WebSocket | null + message: any + againConnectTime: number +} diff --git a/web+/src/store/shims-vuex.d.ts b/web+/src/store/shims-vuex.d.ts new file mode 100644 index 0000000..2760840 --- /dev/null +++ b/web+/src/store/shims-vuex.d.ts @@ -0,0 +1,8 @@ +import { Store } from 'vuex' +import { RootState } from './types' +declare module '@vue/runtime-core' { + // Declare your own store states. + interface ComponentCustomProperties { + $store: Store + } +} diff --git a/web+/src/store/types.ts b/web+/src/store/types.ts new file mode 100644 index 0000000..78c9591 --- /dev/null +++ b/web+/src/store/types.ts @@ -0,0 +1,15 @@ +import { AppState } from './modules/app/types' +import { SettingState } from './modules/setting/types' +import { PermissionState } from './modules/permission/types' +import { UserState } from './modules/user/types' +import { TagsViewState } from './modules/tagsView/types' +import { WebsocketState } from './modules/websocket/types' + +export type RootState = { + app: AppState + setting: SettingState + permission: PermissionState + user: UserState + tagsView: TagsViewState + websocket: WebsocketState +} diff --git a/web+/src/styles/element-ui.scss b/web+/src/styles/element-ui.scss new file mode 100644 index 0000000..5cb209d --- /dev/null +++ b/web+/src/styles/element-ui.scss @@ -0,0 +1,48 @@ +// cover some element-ui styles + +.el-breadcrumb__inner, +.el-breadcrumb__inner a { + font-weight: 400 !important; +} + +.el-upload { + input[type="file"] { + display: none !important; + } +} + +.el-upload__input { + display: none; +} + + +// to fixed https://github.com/ElemeFE/element/issues/2461 +.el-dialog { + transform: none; + left: 0; + position: relative; + margin: 0 auto; +} + +// refine element ui upload +.upload-container { + .el-upload { + width: 100%; + + .el-upload-dragger { + width: 100%; + height: 200px; + } + } +} + +// dropdown +.el-dropdown-menu { + a { + display: block + } +} + +.el-table th { + display: table-cell!important; +} diff --git a/web+/src/styles/index.scss b/web+/src/styles/index.scss new file mode 100644 index 0000000..1882adc --- /dev/null +++ b/web+/src/styles/index.scss @@ -0,0 +1,74 @@ +@import './variables.scss'; +@import './mixin.scss'; +@import './transition.scss'; +@import './element-ui.scss'; +@import './sidebar.scss'; + +body { + height: 100%; + -moz-osx-font-smoothing: grayscale; + -webkit-font-smoothing: antialiased; + text-rendering: optimizeLegibility; + font-family: Helvetica Neue, Helvetica, PingFang SC, Hiragino Sans GB, Microsoft YaHei, Arial, sans-serif; +} + +label { + font-weight: 700; +} + +html { + height: 100%; + box-sizing: border-box; +} + +#app { + height: 100%; +} + +*, +*:before, +*:after { + box-sizing: inherit; +} + +a:focus, +a:active { + outline: none; +} + +a, +a:focus, +a:hover { + cursor: pointer; + color: inherit; + text-decoration: none; +} + +div:focus { + outline: none; +} + +.clearfix { + &:after { + visibility: hidden; + display: block; + font-size: 0; + content: " "; + clear: both; + height: 0; + } +} + +// main-container global css +.app-container { + padding: 20px; +} + +.app-bar { + width: 100%; + border: 1px solid #EBEEF5; + margin-bottom: 5px; + padding: 10px; + background-color: #f2f6fc; + &-operation {margin-bottom:10px;}; +} diff --git a/web+/src/styles/mixin.scss b/web+/src/styles/mixin.scss new file mode 100644 index 0000000..36b74bb --- /dev/null +++ b/web+/src/styles/mixin.scss @@ -0,0 +1,28 @@ +@mixin clearfix { + &:after { + content: ""; + display: table; + clear: both; + } +} + +@mixin scrollBar { + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } +} + +@mixin relative { + position: relative; + width: 100%; + height: 100%; +} diff --git a/web+/src/styles/sidebar.scss b/web+/src/styles/sidebar.scss new file mode 100644 index 0000000..2cfaf46 --- /dev/null +++ b/web+/src/styles/sidebar.scss @@ -0,0 +1,208 @@ +#app { + + .main-container { + transition: margin-left .28s; + margin-left: $sideBarWidth; + position: relative; + } + + .sidebar-container { + transition: width 0.28s; + width: $sideBarWidth !important; + background-color: $menuBg; + height: calc(100vh - 50px); + position: fixed; + font-size: 0px; + top: 50px; + bottom: 0; + left: 0; + z-index: 1001; + overflow: hidden; + + // reset element-ui css + .horizontal-collapse-transition { + transition: 0s width ease-in-out, 0s padding-left ease-in-out, 0s padding-right ease-in-out; + } + + .scrollbar-wrapper { + overflow-x: hidden !important; + } + + .el-scrollbar__bar.is-vertical { + right: 0px; + } + + .el-scrollbar { + height: 100%; + } + + &.has-logo { + .el-scrollbar { + height: calc(100% - 50px); + } + } + + .is-horizontal { + display: none; + } + + a { + display: inline-block; + width: 100%; + overflow: hidden; + } + + .svg-icon { + margin-right: 16px; + } + + .el-menu { + border: none; + height: 100%; + width: 100% !important; + background-color: $menuBg; + } + + // menu hover + .submenu-title-noDropdown, + .el-submenu__title { + &:hover { + background-color: $menuHover !important; + } + } + + .is-active>.el-submenu__title { + color: $subMenuActiveText !important; + } + + & .nest-menu .el-submenu>.el-submenu__title, + & .el-submenu .el-menu-item { + min-width: $sideBarWidth !important; + background-color: $subMenuBg !important; + &:hover { + background-color: $subMenuHover !important; + } + } + } + + .hideSidebar { + .sidebar-container { + width: 54px !important; + } + + .main-container { + margin-left: 54px; + } + + .submenu-title-noDropdown { + padding: 0!important; + position: relative; + + .el-tooltip { + padding: 0 !important; + + .svg-icon { + margin-left: 20px; + } + } + } + + .el-submenu { + overflow: hidden; + + &>.el-submenu__title { + padding: 0!important; + + .svg-icon { + margin-left: 20px; + } + + .el-submenu__icon-arrow { + display: none; + } + } + } + + .el-menu--collapse { + .el-submenu { + &>.el-submenu__title { + &>span { + height: 0; + width: 0; + overflow: hidden; + visibility: hidden; + display: inline-block; + } + } + } + } + } + + .el-menu--collapse .el-menu .el-submenu { + min-width: $sideBarWidth !important; + } + + // mobile responsive + .mobile { + .main-container { + margin-left: 0px; + } + + .sidebar-container { + transition: transform .28s; + width: $sideBarWidth !important; + } + + &.hideSidebar { + .sidebar-container { + pointer-events: none; + transition-duration: 0.3s; + transform: translate3d(-$sideBarWidth, 0, 0); + } + } + } + + .withoutAnimation { + + .main-container, + .sidebar-container { + transition: none; + } + } +} + +// when menu collapsed +.el-menu--vertical { + &>.el-menu { + .svg-icon { + margin-right: 16px; + } + } + + .nest-menu .el-submenu>.el-submenu__title, + .el-menu-item { + &:hover { + // you can use $subMenuHover + background-color: $menuHover !important; + } + } + + // the scroll bar appears when the subMenu is too long + >.el-menu--popup { + max-height: 100vh; + overflow-y: auto; + + &::-webkit-scrollbar-track-piece { + background: #d3dce6; + } + + &::-webkit-scrollbar { + width: 6px; + } + + &::-webkit-scrollbar-thumb { + background: #99a9bf; + border-radius: 20px; + } + } +} diff --git a/web+/src/styles/transition.scss b/web+/src/styles/transition.scss new file mode 100644 index 0000000..45f0a16 --- /dev/null +++ b/web+/src/styles/transition.scss @@ -0,0 +1,29 @@ +// global transition css + +/* fade */ +.fade-enter-active, +.fade-leave-active { + transition: opacity 0.28s; +} + +.fade-enter, +.fade-leave-active { + opacity: 0; +} + +/* fade-transform */ +.fade-transform-leave-active, +.fade-transform-enter-active { + transition: all .5s; +} + +.fade-transform-enter { + opacity: 0; + transform: translateX(-30px); +} + +.fade-transform-leave-to { + opacity: 0; + transform: translateX(30px); +} + diff --git a/web+/src/styles/variables.scss b/web+/src/styles/variables.scss new file mode 100644 index 0000000..b45d0cc --- /dev/null +++ b/web+/src/styles/variables.scss @@ -0,0 +1,23 @@ +// sidebar +$menuText:#bfcbd9; +$menuActiveText:#409EFF; +$subMenuActiveText:#f4f4f5; //https://github.com/ElemeFE/element/issues/12951 + +$menuBg:#304156; +$menuHover:#263445; + +$subMenuBg:#1f2d3d; +$subMenuHover:#001528; + +$sideBarWidth: 210px; + +:export { + menuText: $menuText; + menuActiveText: $menuActiveText; + subMenuActiveText: $subMenuActiveText; + menuBg: $menuBg; + menuHover: $menuHover; + subMenuBg: $subMenuBg; + subMenuHover: $subMenuHover; + sideBarWidth: $sideBarWidth; +} diff --git a/web+/src/utils/auth.ts b/web+/src/utils/auth.ts new file mode 100644 index 0000000..68f55ee --- /dev/null +++ b/web+/src/utils/auth.ts @@ -0,0 +1,13 @@ +const TokenKey = 'LOGIN' + +export function isLogin(): string | null { + return localStorage.getItem(TokenKey) +} + +export function setLogin(status: string): void { + localStorage.setItem(TokenKey, status) +} + +export function logout(): void { + localStorage.removeItem(TokenKey) +} diff --git a/web+/src/utils/index.ts b/web+/src/utils/index.ts new file mode 100644 index 0000000..3edfcfb --- /dev/null +++ b/web+/src/utils/index.ts @@ -0,0 +1,260 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * 判断是否为空 + * @param {any} mixedVar + * @return {boolean} + */ +export function empty(mixedVar: any): boolean { + // discuss at: https://locutus.io/php/empty/ + // original by: Philippe Baumann + // input by: Onno Marsman (https://twitter.com/onnomarsman) + // input by: LH + // input by: Stoyan Kyosev (https://www.svest.org/) + // bugfixed by: Kevin van Zonneveld (https://kvz.io) + // improved by: Onno Marsman (https://twitter.com/onnomarsman) + // improved by: Francesco + // improved by: Marc Jansen + // improved by: Rafał Kukawski (https://blog.kukawski.pl) + // example 1: empty(null) + // returns 1: true + // example 2: empty(undefined) + // returns 2: true + // example 3: empty([]) + // returns 3: true + // example 4: empty({}) + // returns 4: true + // example 5: empty({'aFunc' : function () { alert('humpty'); } }) + // returns 5: false + + let undef + const emptyValues = [undef, null, false, 0, '', '0'] + + for (let i = 0, len = emptyValues.length; i < len; i++) { + if (mixedVar === emptyValues[i]) { + return true + } + } + + if (typeof mixedVar === 'object') { + for (const key in mixedVar) { + if (Object.prototype.hasOwnProperty.call(mixedVar, key)) { + return false + } + } + return true + } + + return false +} + +/** + * + * Parse export css to vars + */ +export function parseExportCSS(variables: string): { [key: string]: string } { + const tmpVars: { [key: string]: string } = {} + const cssVars = variables.split('\n') + cssVars.pop() + cssVars.shift() + cssVars + .map((cssVar) => cssVar.trim().replace(';', '')) + .forEach((cssVar) => { + const cssVarSplit = cssVar.split(':').map((cssVar) => cssVar.trim()) + tmpVars[cssVarSplit[0]] = cssVarSplit[1] + }) + return tmpVars +} + +/** + * Parse the time to string + */ +export function parseTime(time: number, cFormat?: string): string { + const format = cFormat || '{y}-{m}-{d} {h}:{i}:{s}' + let date + if (typeof time === 'object') { + date = time + } else { + if (typeof time === 'string' && /^[0-9]+$/.test(time)) { + time = parseInt(time) + } + if (typeof time === 'number' && time.toString().length === 10) { + time = time * 1000 + } + date = new Date(time) + } + const formatObj: { [key: string]: number } = { + y: date.getFullYear(), + m: date.getMonth() + 1, + d: date.getDate(), + h: date.getHours(), + i: date.getMinutes(), + s: date.getSeconds(), + a: date.getDay(), + } + const time_str = format.replace( + /{(y|m|d|h|i|s|a)+}/g, + (result, key): string => { + const value = formatObj[key] + // Note: getDay() returns 0 on Sunday + if (key === 'a') { + return ['日', '一', '二', '三', '四', '五', '六'][value] + } + if (result.length > 0 && value < 10) { + return '0' + value + } + return value ? '' + value : '0' + } + ) + return time_str +} + +/** + * Parse the string to time + */ +export function parseDate(date: string): number { + date = date.substring(0, 19) + date = date.replace(/-/g, '/') + const timestamp = new Date(date).getTime() + return timestamp / 1000 +} + +/** + * @param {number} time + * @param {string} option + * @returns {string} + */ +export function formatTime(time: number, option: string): string { + if (('' + time).length === 10) { + time = parseInt('' + time) * 1000 + } else { + time = +time + } + const d = new Date(time) + const now = Date.now() + + const diff = (now - d.getTime()) / 1000 + + if (diff < 30) { + return '刚刚' + } else if (diff < 3600) { + // less 1 hour + return Math.ceil(diff / 60) + '分钟前' + } else if (diff < 3600 * 24) { + return Math.ceil(diff / 3600) + '小时前' + } else if (diff < 3600 * 24 * 2) { + return '1天前' + } + if (option) { + return parseTime(time, option) + } else { + return ( + d.getMonth() + + 1 + + '月' + + d.getDate() + + '日' + + d.getHours() + + '时' + + d.getMinutes() + + '分' + ) + } +} + +/** + */ +export function param2Obj(url: string): any { + const search = url.split('?')[1] + if (!search) { + return {} + } + return JSON.parse( + '{"' + + decodeURIComponent(search) + .replace(/"/g, '\\"') + .replace(/&/g, '","') + .replace(/=/g, '":"') + .replace(/\+/g, ' ') + + '"}' + ) +} + +/** + * 深拷贝 + * 这个函数有个小问题,一般情况不会遇到,如果遇到请查看: + * https://stackoverflow.com/a/4460624 + */ +export function deepClone(item: any): any { + if (!item) { + return item + } // null, undefined values check + + const types = [Number, String, Boolean] + let result + + // normalizing primitives if someone did new String('aaa'), or new Number('444'); + types.forEach(function (type) { + if (item instanceof type) { + result = type(item) + } + }) + + if (typeof result === 'undefined') { + if (Object.prototype.toString.call(item) === '[object Array]') { + result = [] + item.forEach(function (child, index) { + result[index] = deepClone(child) + }) + } else if (typeof item === 'object') { + // testing that this is DOM + if (item.nodeType && typeof item.cloneNode === 'function') { + result = item.cloneNode(true) + } else if (!item.prototype) { + // check that this is a literal + if (item instanceof Date) { + result = new Date(item) + } else { + // it is an object literal + result = {} + for (const i in item) { + result[i] = deepClone(item[i]) + } + } + } else { + result = item + } + } else { + result = item + } + } + + return result +} + +/** + * 人类可读的字节大小 + */ +export function humanSize(bytes: number): string { + if (bytes === 0) return '0 B' + const k = 1024 // or 1024 + const sizes = ['B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'] + const i = Math.floor(Math.log(bytes) / Math.log(k)) + + return (bytes / Math.pow(k, i)).toPrecision(3) + ' ' + sizes[i] +} + +export function parseGitURL(url: string): string { + const lastDotGitIndex = url.lastIndexOf('.git') + if (lastDotGitIndex !== -1) { + url = url.substring(0, lastDotGitIndex) + } + const lastAtIndex = url.lastIndexOf('@') + if (lastAtIndex === -1) { + return url + } else { + return 'http://' + url.substring(lastAtIndex + 1).replace(':', '/') + } +} diff --git a/web+/src/utils/md5.ts b/web+/src/utils/md5.ts new file mode 100644 index 0000000..5f4058b --- /dev/null +++ b/web+/src/utils/md5.ts @@ -0,0 +1,171 @@ +export function md5(e: string): string { + function h(a, b) { + let c, d, e, f, g + e = a & 2147483648 + f = b & 2147483648 + c = a & 1073741824 + d = b & 1073741824 + g = (a & 1073741823) + (b & 1073741823) + return c & d + ? g ^ 2147483648 ^ e ^ f + : c | d + ? g & 1073741824 + ? g ^ 3221225472 ^ e ^ f + : g ^ 1073741824 ^ e ^ f + : g ^ e ^ f + } + + function k(a, b, c, d, e, f, g) { + a = h(a, h(h((b & c) | (~b & d), e), g)) + return h((a << f) | (a >>> (32 - f)), b) + } + + function l(a, b, c, d, e, f, g) { + a = h(a, h(h((b & d) | (c & ~d), e), g)) + return h((a << f) | (a >>> (32 - f)), b) + } + + function m(a, b, d, c, e, f, g) { + a = h(a, h(h(b ^ d ^ c, e), g)) + return h((a << f) | (a >>> (32 - f)), b) + } + + function n(a, b, d, c, e, f, g) { + a = h(a, h(h(d ^ (b | ~c), e), g)) + return h((a << f) | (a >>> (32 - f)), b) + } + + function p(a) { + let b = '' + let d = '' + let c + for (c = 0; c <= 3; c++) { + d = (a >>> (8 * c)) & 255 + d = '0' + d.toString(16) + b += d.substr(d.length - 2, 2) + } + return b + } + let f = [] + let q + let r + let s + let t + let a + let b + let c + let d + e = (function (a) { + a = a.replace(/\r\n/g, '\n') + for (var b = '', d = 0; d < a.length; d++) { + const c = a.charCodeAt(d) + c < 128 + ? (b += String.fromCharCode(c)) + : (c > 127 && c < 2048 + ? (b += String.fromCharCode((c >> 6) | 192)) + : ((b += String.fromCharCode((c >> 12) | 224)), + (b += String.fromCharCode(((c >> 6) & 63) | 128))), + (b += String.fromCharCode((c & 63) | 128))) + } + return b + })(e) + f = (function (b) { + let a + const c = b.length + a = c + 8 + for ( + var d = 16 * ((a - (a % 64)) / 64 + 1), e = Array(d - 1), f = 0, g = 0; + g < c; + + ) { + a = (g - (g % 4)) / 4 + f = (g % 4) * 8 + e[a] |= b.charCodeAt(g) << f + g++ + } + a = (g - (g % 4)) / 4 + e[a] |= 128 << ((g % 4) * 8) + e[d - 2] = c << 3 + e[d - 1] = c >>> 29 + return e + })(e) + a = 1732584193 + b = 4023233417 + c = 2562383102 + d = 271733878 + for (e = 0; e < f.length; e += 16) { + q = a + r = b + s = c + t = d + a = k(a, b, c, d, f[e + 0], 7, 3614090360) + d = k(d, a, b, c, f[e + 1], 12, 3905402710) + c = k(c, d, a, b, f[e + 2], 17, 606105819) + b = k(b, c, d, a, f[e + 3], 22, 3250441966) + a = k(a, b, c, d, f[e + 4], 7, 4118548399) + d = k(d, a, b, c, f[e + 5], 12, 1200080426) + c = k(c, d, a, b, f[e + 6], 17, 2821735955) + b = k(b, c, d, a, f[e + 7], 22, 4249261313) + a = k(a, b, c, d, f[e + 8], 7, 1770035416) + d = k(d, a, b, c, f[e + 9], 12, 2336552879) + c = k(c, d, a, b, f[e + 10], 17, 4294925233) + b = k(b, c, d, a, f[e + 11], 22, 2304563134) + a = k(a, b, c, d, f[e + 12], 7, 1804603682) + d = k(d, a, b, c, f[e + 13], 12, 4254626195) + c = k(c, d, a, b, f[e + 14], 17, 2792965006) + b = k(b, c, d, a, f[e + 15], 22, 1236535329) + a = l(a, b, c, d, f[e + 1], 5, 4129170786) + d = l(d, a, b, c, f[e + 6], 9, 3225465664) + c = l(c, d, a, b, f[e + 11], 14, 643717713) + b = l(b, c, d, a, f[e + 0], 20, 3921069994) + a = l(a, b, c, d, f[e + 5], 5, 3593408605) + d = l(d, a, b, c, f[e + 10], 9, 38016083) + c = l(c, d, a, b, f[e + 15], 14, 3634488961) + b = l(b, c, d, a, f[e + 4], 20, 3889429448) + a = l(a, b, c, d, f[e + 9], 5, 568446438) + d = l(d, a, b, c, f[e + 14], 9, 3275163606) + c = l(c, d, a, b, f[e + 3], 14, 4107603335) + b = l(b, c, d, a, f[e + 8], 20, 1163531501) + a = l(a, b, c, d, f[e + 13], 5, 2850285829) + d = l(d, a, b, c, f[e + 2], 9, 4243563512) + c = l(c, d, a, b, f[e + 7], 14, 1735328473) + b = l(b, c, d, a, f[e + 12], 20, 2368359562) + a = m(a, b, c, d, f[e + 5], 4, 4294588738) + d = m(d, a, b, c, f[e + 8], 11, 2272392833) + c = m(c, d, a, b, f[e + 11], 16, 1839030562) + b = m(b, c, d, a, f[e + 14], 23, 4259657740) + a = m(a, b, c, d, f[e + 1], 4, 2763975236) + d = m(d, a, b, c, f[e + 4], 11, 1272893353) + c = m(c, d, a, b, f[e + 7], 16, 4139469664) + b = m(b, c, d, a, f[e + 10], 23, 3200236656) + a = m(a, b, c, d, f[e + 13], 4, 681279174) + d = m(d, a, b, c, f[e + 0], 11, 3936430074) + c = m(c, d, a, b, f[e + 3], 16, 3572445317) + b = m(b, c, d, a, f[e + 6], 23, 76029189) + a = m(a, b, c, d, f[e + 9], 4, 3654602809) + d = m(d, a, b, c, f[e + 12], 11, 3873151461) + c = m(c, d, a, b, f[e + 15], 16, 530742520) + b = m(b, c, d, a, f[e + 2], 23, 3299628645) + a = n(a, b, c, d, f[e + 0], 6, 4096336452) + d = n(d, a, b, c, f[e + 7], 10, 1126891415) + c = n(c, d, a, b, f[e + 14], 15, 2878612391) + b = n(b, c, d, a, f[e + 5], 21, 4237533241) + a = n(a, b, c, d, f[e + 12], 6, 1700485571) + d = n(d, a, b, c, f[e + 3], 10, 2399980690) + c = n(c, d, a, b, f[e + 10], 15, 4293915773) + b = n(b, c, d, a, f[e + 1], 21, 2240044497) + a = n(a, b, c, d, f[e + 8], 6, 1873313359) + d = n(d, a, b, c, f[e + 15], 10, 4264355552) + c = n(c, d, a, b, f[e + 6], 15, 2734768916) + b = n(b, c, d, a, f[e + 13], 21, 1309151649) + a = n(a, b, c, d, f[e + 4], 6, 4149444226) + d = n(d, a, b, c, f[e + 11], 10, 3174756917) + c = n(c, d, a, b, f[e + 2], 15, 718787259) + b = n(b, c, d, a, f[e + 9], 21, 3951481745) + a = h(a, q) + b = h(b, r) + c = h(c, s) + d = h(d, t) + } + return (p(a) + p(b) + p(c) + p(d)).toLowerCase() +} diff --git a/web+/src/utils/namespace.ts b/web+/src/utils/namespace.ts new file mode 100644 index 0000000..b32d23e --- /dev/null +++ b/web+/src/utils/namespace.ts @@ -0,0 +1,33 @@ +import Cookies from 'js-cookie' +const NamespaceKey = 'goploy_namespace' +const NamespaceListKey = 'goploy_namespace_list' + +interface Namespace { + id: number + name: string + role: string +} + +export function getNamespace(): Namespace { + const namespace = localStorage.getItem(NamespaceKey) + return namespace ? JSON.parse(namespace) : undefined +} + +export function setNamespace(namespace: Namespace): void { + Cookies.set(NamespaceKey, namespace.id.toString(), { expires: 365 }) + localStorage.setItem(NamespaceKey, JSON.stringify(namespace)) +} + +export function removeNamespace(): void { + Cookies.remove(NamespaceKey) + localStorage.removeItem(NamespaceKey) +} + +export function getNamespaceList(): Array { + const namespaceList = localStorage.getItem(NamespaceListKey) + return namespaceList ? JSON.parse(namespaceList) : [] +} + +export function setNamespaceList(namespaceList: Array): void { + localStorage.setItem(NamespaceListKey, JSON.stringify(namespaceList)) +} diff --git a/web+/src/utils/validate.ts b/web+/src/utils/validate.ts new file mode 100644 index 0000000..cc5b811 --- /dev/null +++ b/web+/src/utils/validate.ts @@ -0,0 +1,34 @@ +/** + * Created by PanJiaChen on 16/11/18. + */ + +/** + * @param {string} path + * @returns {Boolean} + */ +export function isExternal(path: string): boolean { + return /^(https?:|mailto:|tel:)/.test(path) +} + +/** + * @param {string} str + * @returns {Boolean} + */ +export function validUsername(str: string): boolean { + return str.trim().length >= 5 +} + +export function validPassword(str: string): boolean { + str = str.trim() + if (str.length < 8 || str.length > 16) { + return false + } + const reg = /(?!^(\d+|[a-zA-Z]+|[~!@#$%^&*?]+)$)^[\w~!@#$%^&*?]{8,16}$/ + return reg.test(str) +} + +/* 合法uri*/ +export function validateURL(textval: string): boolean { + const urlregex = /^(https?|ftp):\/\/([a-zA-Z0-9.-]+(:[a-zA-Z0-9.&%$-]+)*@)*((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]?)(\.(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9]?[0-9])){3}|([a-zA-Z0-9-]+\.)*[a-zA-Z0-9-]+\.(com|edu|gov|int|mil|net|org|biz|arpa|info|name|pro|aero|coop|museum|[a-zA-Z]{2}))(:[0-9]+)*(\/($|[a-zA-Z0-9.,?'\\+&%$#=~_-]+))*$/ + return urlregex.test(textval) +} diff --git a/web+/src/views/404.vue b/web+/src/views/404.vue new file mode 100644 index 0000000..4735fe8 --- /dev/null +++ b/web+/src/views/404.vue @@ -0,0 +1,253 @@ + + + + + diff --git a/web+/src/views/deploy/index.vue b/web+/src/views/deploy/index.vue new file mode 100644 index 0000000..4c25a70 --- /dev/null +++ b/web+/src/views/deploy/index.vue @@ -0,0 +1,1886 @@ + + + diff --git a/web+/src/views/login/index.vue b/web+/src/views/login/index.vue new file mode 100644 index 0000000..744cf7d --- /dev/null +++ b/web+/src/views/login/index.vue @@ -0,0 +1,292 @@ + + + + + + + diff --git a/web+/src/views/member/index.vue b/web+/src/views/member/index.vue new file mode 100644 index 0000000..ee1f394 --- /dev/null +++ b/web+/src/views/member/index.vue @@ -0,0 +1,303 @@ + + diff --git a/web+/src/views/monitor/index.vue b/web+/src/views/monitor/index.vue new file mode 100644 index 0000000..50bec83 --- /dev/null +++ b/web+/src/views/monitor/index.vue @@ -0,0 +1,469 @@ + + + diff --git a/web+/src/views/namespace/index.vue b/web+/src/views/namespace/index.vue new file mode 100644 index 0000000..9dd717a --- /dev/null +++ b/web+/src/views/namespace/index.vue @@ -0,0 +1,404 @@ + + diff --git a/web+/src/views/project/index.vue b/web+/src/views/project/index.vue new file mode 100644 index 0000000..780ffd5 --- /dev/null +++ b/web+/src/views/project/index.vue @@ -0,0 +1,1608 @@ + + + diff --git a/web+/src/views/redirect/index.vue b/web+/src/views/redirect/index.vue new file mode 100644 index 0000000..5930a30 --- /dev/null +++ b/web+/src/views/redirect/index.vue @@ -0,0 +1,13 @@ + diff --git a/web+/src/views/server/crontab.vue b/web+/src/views/server/crontab.vue new file mode 100644 index 0000000..5cc62bb --- /dev/null +++ b/web+/src/views/server/crontab.vue @@ -0,0 +1,712 @@ + + + diff --git a/web+/src/views/server/index.vue b/web+/src/views/server/index.vue new file mode 100644 index 0000000..8adcc54 --- /dev/null +++ b/web+/src/views/server/index.vue @@ -0,0 +1,466 @@ + + + diff --git a/web+/src/views/toolbox/json/icons.svg b/web+/src/views/toolbox/json/icons.svg new file mode 100644 index 0000000..cc8298a --- /dev/null +++ b/web+/src/views/toolbox/json/icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/web+/src/views/toolbox/json/index.vue b/web+/src/views/toolbox/json/index.vue new file mode 100644 index 0000000..5c32772 --- /dev/null +++ b/web+/src/views/toolbox/json/index.vue @@ -0,0 +1,135 @@ + + + + diff --git a/web+/src/views/toolbox/json/jsonTree.css b/web+/src/views/toolbox/json/jsonTree.css new file mode 100644 index 0000000..047e263 --- /dev/null +++ b/web+/src/views/toolbox/json/jsonTree.css @@ -0,0 +1,113 @@ +/* + * JSON Tree Viewer + * http://github.com/summerstyle/jsonTreeViewer + * + * Copyright 2017 Vera Lobacheva (http://iamvera.com) + * Released under the MIT license (LICENSE.txt) + */ + +/* Background for the tree. May use for element */ +.jsontree_bg { + background: #FFF; +} + +/* Styles for the container of the tree (e.g. fonts, margins etc.) */ +.jsontree_tree { + padding-left: 0px; + margin-left: 30px; + font-family: 'PT Mono', monospace; + font-size: 14px; + list-style-type: none; +} + +.jsontree_node { + list-style-type: none; +} + +/* Styles for a list of child nodes */ +.jsontree_child-nodes { + display: none; + margin-left: 35px; + margin-bottom: 5px; + line-height: 2; +} +.jsontree_node_expanded > .jsontree_value-wrapper > .jsontree_value > .jsontree_child-nodes { + display: block; +} + +/* Styles for labels */ +.jsontree_label-wrapper { + float: left; + margin-right: 8px; +} +.jsontree_label { + font-weight: normal; + vertical-align: top; + color: #000; + position: relative; + padding: 1px; + border-radius: 4px; + cursor: default; +} +.jsontree_node_marked > .jsontree_label-wrapper > .jsontree_label { + background: #fff2aa; +} + +/* Styles for values */ +.jsontree_value-wrapper { + display: block; + overflow-wrap: anywhere; +} +.jsontree_node_complex > .jsontree_value-wrapper { + overflow: inherit; +} +.jsontree_value { + vertical-align: top; + display: inline; +} +.jsontree_value_null { + color: #777; + font-weight: bold; +} +.jsontree_value_string { + color: #025900; + font-weight: bold; +} +.jsontree_value_number { + color: #000E59; + font-weight: bold; +} +.jsontree_value_boolean { + color: #600100; + font-weight: bold; +} + +/* Styles for active elements */ +.jsontree_expand-button { + position: absolute; + top: 3px; + left: -15px; + display: block; + width: 11px; + height: 11px; + background-image: url('icons.svg'); +} +.jsontree_node_expanded > .jsontree_label-wrapper > .jsontree_label > .jsontree_expand-button { + background-position: 0 -11px; +} +.jsontree_show-more { + cursor: pointer; +} +.jsontree_node_expanded > .jsontree_value-wrapper > .jsontree_value > .jsontree_show-more { + display: none; +} +.jsontree_node_empty > .jsontree_label-wrapper > .jsontree_label > .jsontree_expand-button, +.jsontree_node_empty > .jsontree_value-wrapper > .jsontree_value > .jsontree_show-more { + display: none !important; +} +.jsontree_node_complex > .jsontree_label-wrapper > .jsontree_label { + cursor: pointer; +} +.jsontree_node_empty > .jsontree_label-wrapper > .jsontree_label { + cursor: default !important; +} diff --git a/web+/src/views/toolbox/json/jsonTree.js b/web+/src/views/toolbox/json/jsonTree.js new file mode 100644 index 0000000..9df2922 --- /dev/null +++ b/web+/src/views/toolbox/json/jsonTree.js @@ -0,0 +1,796 @@ +/** + * JSON Tree library (a part of jsonTreeViewer) + * http://github.com/summerstyle/jsonTreeViewer + * + * Copyright 2017 Vera Lobacheva (http://iamvera.com) + * Released under the MIT license (LICENSE.txt) + */ +export var jsonTree = (function() { + /* ---------- Utilities ---------- */ + var utils = { + + /* + * Returns js-"class" of value + * + * @param val {any type} - value + * @returns {string} - for example, "[object Function]" + */ + getClass: function(val) { + return Object.prototype.toString.call(val) + }, + + /** + * Checks for a type of value (for valid JSON data types). + * In other cases - throws an exception + * + * @param val {any type} - the value for new node + * @returns {string} ("object" | "array" | "null" | "boolean" | "number" | "string") + */ + getType: function(val) { + if (val === null) { + return 'null' + } + + switch (typeof val) { + case 'number': + return 'number' + + case 'string': + return 'string' + + case 'boolean': + return 'boolean' + } + + switch (utils.getClass(val)) { + case '[object Array]': + return 'array' + + case '[object Object]': + return 'object' + } + + throw new Error('Bad type: ' + utils.getClass(val)) + }, + + /** + * Applies for each item of list some function + * and checks for last element of the list + * + * @param obj {Object | Array} - a list or a dict with child nodes + * @param func {Function} - the function for each item + */ + forEachNode: function(obj, func) { + var type = utils.getType(obj) + var isLast + + switch (type) { + case 'array': + isLast = obj.length - 1 + + obj.forEach(function(item, i) { + func(i, item, i === isLast) + }) + + break + + case 'object': + var keys = Object.keys(obj).sort() + + isLast = keys.length - 1 + + keys.forEach(function(item, i) { + func(item, obj[item], i === isLast) + }) + + break + } + }, + + /** + * Implements the kind of an inheritance by + * using parent prototype and + * creating intermediate constructor + * + * @param Child {Function} - a child constructor + * @param Parent {Function} - a parent constructor + */ + inherits: (function() { + var F = function() {} + + return function(Child, Parent) { + F.prototype = Parent.prototype + Child.prototype = new F() + Child.prototype.constructor = Child + } + })(), + + /* + * Checks for a valid type of root node* + * + * @param {any type} jsonObj - a value for root node + * @returns {boolean} - true for an object or an array, false otherwise + */ + isValidRoot: function(jsonObj) { + switch (utils.getType(jsonObj)) { + case 'object': + case 'array': + return true + default: + return false + } + }, + + /** + * Extends some object + */ + extend: function(targetObj, sourceObj) { + for (var prop in sourceObj) { + if (sourceObj.hasOwnProperty(prop)) { + targetObj[prop] = sourceObj[prop] + } + } + } + } + + /* ---------- Node constructors ---------- */ + + /** + * The factory for creating nodes of defined type. + * + * ~~~ Node ~~~ is a structure element of an onject or an array + * with own label (a key of an object or an index of an array) + * and value of any json data type. The root object or array + * is a node without label. + * {... + * [+] "label": value, + * ...} + * + * Markup: + *
  • + * + * + * + * "label" + * + * : + * + * <(div|span) class="jsontree_value jsontree_value_(object|array|boolean|null|number|string)"> + * ... + * + *
  • + * + * @param label {string} - key name + * @param val {Object | Array | string | number | boolean | null} - a value of node + * @param isLast {boolean} - true if node is last in list of siblings + * + * @return {Node} + */ + function Node(label, val, isLast) { + var nodeType = utils.getType(val) + + if (nodeType in Node.CONSTRUCTORS) { + return new Node.CONSTRUCTORS[nodeType](label, val, isLast) + } else { + throw new Error('Bad type: ' + utils.getClass(val)) + } + } + + Node.CONSTRUCTORS = { + 'boolean': NodeBoolean, + 'number': NodeNumber, + 'string': NodeString, + 'null': NodeNull, + 'object': NodeObject, + 'array': NodeArray + } + + /* + * The constructor for simple types (string, number, boolean, null) + * {... + * [+] "label": value, + * ...} + * value = string || number || boolean || null + * + * Markup: + *
  • + * + * "age" + * : + * + * 25 + * , + *
  • + * + * @abstract + * @param label {string} - key name + * @param val {string | number | boolean | null} - a value of simple types + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function _NodeSimple(label, val, isLast) { + if (this.constructor === _NodeSimple) { + throw new Error('This is abstract class') + } + + var self = this + var el = document.createElement('li') + var labelEl + var template = function(label, val) { + var str = '' + str += '' + str += '"' + label + '" : ' + str += '' + str += '' + str += '' + val + '' + str += (!isLast ? ',' : '') + str += '' + return str + } + + self.label = label + self.isComplex = false + + el.classList.add('jsontree_node') + el.innerHTML = template(label, val) + + self.el = el + + labelEl = el.querySelector('.jsontree_label') + + labelEl.addEventListener('click', function(e) { + if (e.altKey) { + self.toggleMarked() + return + } + + if (e.shiftKey) { + document.getSelection().removeAllRanges() + alert(self.getJSONPath()) + return + } + }, false) + } + + _NodeSimple.prototype = { + constructor: _NodeSimple, + + /** + * Mark node + */ + mark: function() { + this.el.classList.add('jsontree_node_marked') + }, + + /** + * Unmark node + */ + unmark: function() { + this.el.classList.remove('jsontree_node_marked') + }, + + /** + * Mark or unmark node + */ + toggleMarked: function() { + this.el.classList.toggle('jsontree_node_marked') + }, + + /** + * Expands parent node of this node + * + * @param isRecursive {boolean} - if true, expands all parent nodes + * (from node to root) + */ + expandParent: function(isRecursive) { + if (!this.parent) { + return + } + + this.parent.expand() + this.parent.expandParent(isRecursive) + }, + + /** + * Returns JSON-path of this + * + * @param isInDotNotation {boolean} - kind of notation for returned json-path + * (by default, in bracket notation) + * @returns {string} + */ + getJSONPath: function(isInDotNotation) { + if (this.isRoot) { + return '$' + } + + var currentPath + + if (this.parent.type === 'array') { + currentPath = '[' + this.label + ']' + } else { + currentPath = isInDotNotation ? '.' + this.label : "['" + this.label + "']" + } + + return this.parent.getJSONPath(isInDotNotation) + currentPath + } + } + + /* + * The constructor for boolean values + * {... + * [+] "label": boolean, + * ...} + * boolean = true || false + * + * @constructor + * @param label {string} - key name + * @param val {boolean} - value of boolean type, true or false + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function NodeBoolean(label, val, isLast) { + this.type = 'boolean' + + _NodeSimple.call(this, label, val, isLast) + } + utils.inherits(NodeBoolean, _NodeSimple) + + /* + * The constructor for number values + * {... + * [+] "label": number, + * ...} + * number = 123 + * + * @constructor + * @param label {string} - key name + * @param val {number} - value of number type, for example 123 + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function NodeNumber(label, val, isLast) { + this.type = 'number' + + _NodeSimple.call(this, label, val, isLast) + } + utils.inherits(NodeNumber, _NodeSimple) + + /* + * The constructor for string values + * {... + * [+] "label": string, + * ...} + * string = "abc" + * + * @constructor + * @param label {string} - key name + * @param val {string} - value of string type, for example "abc" + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function NodeString(label, val, isLast) { + this.type = 'string' + + _NodeSimple.call(this, label, '"' + val + '"', isLast) + } + utils.inherits(NodeString, _NodeSimple) + + /* + * The constructor for null values + * {... + * [+] "label": null, + * ...} + * + * @constructor + * @param label {string} - key name + * @param val {null} - value (only null) + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function NodeNull(label, val, isLast) { + this.type = 'null' + + _NodeSimple.call(this, label, val, isLast) + } + utils.inherits(NodeNull, _NodeSimple) + + /* + * The constructor for complex types (object, array) + * {... + * [+] "label": value, + * ...} + * value = object || array + * + * Markup: + *
  • + * + * + * + * "label" + * + * : + * + *
    + * { + *
      + * } + * , + *
    + *
  • + * + * @abstract + * @param label {string} - key name + * @param val {Object | Array} - a value of complex types, object or array + * @param isLast {boolean} - true if node is last in list of parent childNodes + */ + function _NodeComplex(label, val, isLast) { + if (this.constructor === _NodeComplex) { + throw new Error('This is abstract class') + } + + var self = this + var el = document.createElement('li') + var template = function(label, sym) { + var comma = (!isLast) ? ',' : '' + var str = '' + str += '
    ' + str += '
    ' + str += '' + sym[0] + '' + str += '' + str += '
      ' + str += '' + sym[1] + '' + str += '
      ' + comma + '
      ' + if (label !== null) { + var labelStr = '' + labelStr += '' + labelStr += '' + labelStr += '"' + label + '" : ' + str = labelStr + str + } + + return str + } + var childNodesUl + var labelEl + var moreContentEl + var childNodes = [] + + self.label = label + self.isComplex = true + + el.classList.add('jsontree_node') + el.classList.add('jsontree_node_complex') + el.innerHTML = template(label, self.sym) + + childNodesUl = el.querySelector('.jsontree_child-nodes') + + if (label !== null) { + labelEl = el.querySelector('.jsontree_label') + moreContentEl = el.querySelector('.jsontree_show-more') + + labelEl.addEventListener('click', function(e) { + if (e.altKey) { + self.toggleMarked() + return + } + + if (e.shiftKey) { + document.getSelection().removeAllRanges() + alert(self.getJSONPath()) + return + } + + self.toggle(e.ctrlKey || e.metaKey) + }, false) + + moreContentEl.addEventListener('click', function(e) { + self.toggle(e.ctrlKey || e.metaKey) + }, false) + + self.isRoot = false + } else { + self.isRoot = true + self.parent = null + + el.classList.add('jsontree_node_expanded') + } + + self.el = el + self.childNodes = childNodes + self.childNodesUl = childNodesUl + + utils.forEachNode(val, function(label, node, isLast) { + self.addChild(new Node(label, node, isLast)) + }) + + self.isEmpty = !childNodes.length + if (self.isEmpty) { + el.classList.add('jsontree_node_empty') + } + } + + utils.inherits(_NodeComplex, _NodeSimple) + + utils.extend(_NodeComplex.prototype, { + constructor: _NodeComplex, + + /* + * Add child node to list of child nodes + * + * @param child {Node} - child node + */ + addChild: function(child) { + this.childNodes.push(child) + this.childNodesUl.appendChild(child.el) + child.parent = this + }, + + /* + * Expands this list of node child nodes + * + * @param isRecursive {boolean} - if true, expands all child nodes + */ + expand: function(isRecursive) { + if (this.isEmpty) { + return + } + + if (!this.isRoot) { + this.el.classList.add('jsontree_node_expanded') + } + + if (isRecursive) { + this.childNodes.forEach(function(item, i) { + if (item.isComplex) { + item.expand(isRecursive) + } + }) + } + }, + + /* + * Collapses this list of node child nodes + * + * @param isRecursive {boolean} - if true, collapses all child nodes + */ + collapse: function(isRecursive) { + if (this.isEmpty) { + return + } + + if (!this.isRoot) { + this.el.classList.remove('jsontree_node_expanded') + } + + if (isRecursive) { + this.childNodes.forEach(function(item, i) { + if (item.isComplex) { + item.collapse(isRecursive) + } + }) + } + }, + + /* + * Expands collapsed or collapses expanded node + * + * @param {boolean} isRecursive - Expand all child nodes if this node is expanded + * and collapse it otherwise + */ + toggle: function(isRecursive) { + if (this.isEmpty) { + return + } + + this.el.classList.toggle('jsontree_node_expanded') + + if (isRecursive) { + var isExpanded = this.el.classList.contains('jsontree_node_expanded') + + this.childNodes.forEach(function(item, i) { + if (item.isComplex) { + item[isExpanded ? 'expand' : 'collapse'](isRecursive) + } + }) + } + }, + + /** + * Find child nodes that match some conditions and handle it + * + * @param {Function} matcher + * @param {Function} handler + * @param {boolean} isRecursive + */ + findChildren: function(matcher, handler, isRecursive) { + if (this.isEmpty) { + return + } + + this.childNodes.forEach(function(item, i) { + if (matcher(item)) { + handler(item) + } + + if (item.isComplex && isRecursive) { + item.findChildren(matcher, handler, isRecursive) + } + }) + } + }) + + /* + * The constructor for object values + * {... + * [+] "label": object, + * ...} + * object = {"abc": "def"} + * + * @constructor + * @param label {string} - key name + * @param val {Object} - value of object type, {"abc": "def"} + * @param isLast {boolean} - true if node is last in list of siblings + */ + function NodeObject(label, val, isLast) { + this.sym = ['{', '}'] + this.type = 'object' + + _NodeComplex.call(this, label, val, isLast) + } + utils.inherits(NodeObject, _NodeComplex) + + /* + * The constructor for array values + * {... + * [+] "label": array, + * ...} + * array = [1,2,3] + * + * @constructor + * @param label {string} - key name + * @param val {Array} - value of array type, [1,2,3] + * @param isLast {boolean} - true if node is last in list of siblings + */ + function NodeArray(label, val, isLast) { + this.sym = ['[', ']'] + this.type = 'array' + + _NodeComplex.call(this, label, val, isLast) + } + utils.inherits(NodeArray, _NodeComplex) + + /* ---------- The tree constructor ---------- */ + + /* + * The constructor for json tree. + * It contains only one Node (Array or Object), without property name. + * CSS-styles of .tree define main tree styles like font-family, + * font-size and own margins. + * + * Markup: + *
        + * {Node} + *
      + * + * @constructor + * @param jsonObj {Object | Array} - data for tree + * @param domEl {DOMElement} - DOM-element, wrapper for tree + */ + function Tree(jsonObj, domEl) { + this.wrapper = document.createElement('ul') + this.wrapper.className = 'jsontree_tree clearfix' + + this.rootNode = null + + this.sourceJSONObj = jsonObj + + this.loadData(jsonObj) + this.appendTo(domEl) + } + + Tree.prototype = { + constructor: Tree, + + /** + * Fill new data in current json tree + * + * @param {Object | Array} jsonObj - json-data + */ + loadData: function(jsonObj) { + if (!utils.isValidRoot(jsonObj)) { + alert('The root should be an object or an array') + return + } + + this.sourceJSONObj = jsonObj + + this.rootNode = new Node(null, jsonObj, 'last') + this.wrapper.innerHTML = '' + this.wrapper.appendChild(this.rootNode.el) + }, + + /** + * Appends tree to DOM-element (or move it to new place) + * + * @param {DOMElement} domEl + */ + appendTo: function(domEl) { + domEl.appendChild(this.wrapper) + }, + + /** + * Expands all tree nodes (objects or arrays) recursively + * + * @param {Function} filterFunc - 'true' if this node should be expanded + */ + expand: function(filterFunc) { + if (this.rootNode.isComplex) { + if (typeof filterFunc === 'function') { + this.rootNode.childNodes.forEach(function(item, i) { + if (item.isComplex && filterFunc(item)) { + item.expand() + } + }) + } else { + this.rootNode.expand('recursive') + } + } + }, + + /** + * Collapses all tree nodes (objects or arrays) recursively + */ + collapse: function() { + if (typeof this.rootNode.collapse === 'function') { + this.rootNode.collapse('recursive') + } + }, + + /** + * Returns the source json-string (pretty-printed) + * + * @param {boolean} isPrettyPrinted - 'true' for pretty-printed string + * @returns {string} - for exemple, '{"a":2,"b":3}' + */ + toSourceJSON: function(isPrettyPrinted) { + if (!isPrettyPrinted) { + return JSON.stringify(this.sourceJSONObj) + } + + var DELIMETER = '[%^$#$%^%]' + var jsonStr = JSON.stringify(this.sourceJSONObj, null, DELIMETER) + + jsonStr = jsonStr.split('\n').join('
      ') + jsonStr = jsonStr.split(DELIMETER).join('    ') + + return jsonStr + }, + + /** + * Find all nodes that match some conditions and handle it + */ + findAndHandle: function(matcher, handler) { + this.rootNode.findChildren(matcher, handler, 'isRecursive') + }, + + /** + * Unmark all nodes + */ + unmarkAll: function() { + this.rootNode.findChildren(function(node) { + return true + }, function(node) { + node.unmark() + }, 'isRecursive') + } + } + + /* ---------- Public methods ---------- */ + return { + /** + * Creates new tree by data and appends it to the DOM-element + * + * @param jsonObj {Object | Array} - json-data + * @param domEl {DOMElement} - the wrapper element + * @returns {Tree} + */ + create: function(jsonObj, domEl) { + return new Tree(jsonObj, domEl) + } + } +})() diff --git a/web+/src/views/user/profile.vue b/web+/src/views/user/profile.vue new file mode 100644 index 0000000..4900c72 --- /dev/null +++ b/web+/src/views/user/profile.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/web+/tsconfig.json b/web+/tsconfig.json new file mode 100644 index 0000000..ec071e6 --- /dev/null +++ b/web+/tsconfig.json @@ -0,0 +1,21 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "moduleResolution": "node", + "strict": true, + "jsx": "preserve", + "sourceMap": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "lib": ["esnext", "dom"], + "types": ["vite/client", "node", "@intlify/vite-plugin-vue-i18n/client"], + "baseUrl": "./", + "paths": { + "@/*": [ + "src/*" + ] + }, + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.tsx", "src/**/*.vue"] +} diff --git a/web+/vite.config.ts b/web+/vite.config.ts new file mode 100644 index 0000000..62c3242 --- /dev/null +++ b/web+/vite.config.ts @@ -0,0 +1,40 @@ +import { defineConfig, loadEnv, ConfigEnv, UserConfigExport } from 'vite' +import path from 'path' +import vue from '@vitejs/plugin-vue' +import vueI18n from '@intlify/vite-plugin-vue-i18n' +import viteSvgIcons from 'vite-plugin-svg-icons' +// https://vitejs.dev/config/ +export default ({ mode }: ConfigEnv): UserConfigExport => { + process.env = { ...process.env, ...loadEnv(mode, process.cwd()) } + return defineConfig({ + resolve: { + alias: [{ find: '@', replacement: path.resolve(__dirname, 'src') }], + }, + plugins: [ + vue(), + vueI18n({ + include: path.resolve(__dirname, './src/lang/**'), + }), + viteSvgIcons({ + // Specify the icon folder to be cached + iconDirs: [path.resolve(__dirname, './src/icons/svg')], + // Specify symbolId format + symbolId: 'icon-[dir]-[name]', + }), + ], + server: { + proxy: { + // change xxx-api/login => mock/login + // detail: https://cli.vuejs.org/config/#devserver-proxy + [process.env.VITE_APP_BASE_API]: { + target: process.env.VITE_APP_PROXY_TARGET, + changeOrigin: true, + rewrite: (path) => { + const reg = RegExp('^' + process.env.VITE_APP_BASE_API) + return path.replace(reg, '') + }, + }, + }, + }, + }) +}