From 0b5eab5fbd8c6e88e4c2533b553e1c77d94bf58c Mon Sep 17 00:00:00 2001 From: panbaolin <123456> Date: Fri, 25 Oct 2024 10:02:24 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .browserslistrc | 3 + .editorconfig | 39 + .env | 3 + .env.development | 3 + .env.preview | 3 + .eslintrc.js | 76 + .eslintrc.json | 5 + .gitattributes | 1 + .gitignore | 25 + .lintstagedrc.json | 4 + .prettierrc | 6 + .stylelintrc.js | 102 ++ .travis.yml | 7 + Dockerfile | 6 + LICENSE | 21 + README.md | 103 ++ README.zh-CN.md | 110 ++ babel.config.js | 30 + commitlint.config.js | 26 + config/plugin.config.js | 49 + config/themePluginConfig.js | 115 ++ deploy.bat | 1 + deploy/caddy.conf | 9 + deploy/nginx.conf | 24 + docs/add-page-loading-animate.md | 31 + docs/webpack-bundle-analyzer.md | 40 + jest.config.js | 23 + jsconfig.json | 11 + package.json | 108 ++ postcss.config.js | 5 + public/avatar2.jpg | Bin 0 -> 80189 bytes public/index.html | 133 ++ public/logo.ico | Bin 0 -> 4286 bytes src/App.vue | 101 ++ src/api/analysis/biddingProject.js | 67 + src/api/analysis/tenderProject.js | 103 ++ src/api/db/table.js | 22 + src/api/login.js | 55 + src/api/manage.js | 131 ++ src/api/parseingPdf.js | 34 + src/api/project/biddingproject.js | 78 ++ src/api/project/tenderBook.js | 70 + src/api/project/tenderProject.js | 79 ++ src/api/recheck.js | 308 +++++ src/api/recheckSetting/otherSetting.js | 23 + src/api/sliceUpload.js | 204 +++ src/api/system/backup.js | 87 ++ src/api/system/checkFilter.js | 54 + src/api/system/conclusion.js | 39 + src/api/system/dept.js | 82 ++ src/api/system/dict.js | 128 ++ src/api/system/log.js | 31 + src/api/system/menu.js | 74 + src/api/system/redis.js | 14 + src/api/system/role.js | 85 ++ src/api/system/user.js | 85 ++ src/assets/MP3.png | Bin 0 -> 1576 bytes src/assets/PDF.png | Bin 0 -> 1577 bytes src/assets/SQL.png | Bin 0 -> 1581 bytes src/assets/TXT.png | Bin 0 -> 1389 bytes src/assets/XLS.png | Bin 0 -> 1610 bytes src/assets/ZIP.png | Bin 0 -> 2093 bytes src/assets/background.png | Bin 0 -> 192926 bytes src/assets/background.svg | 69 + src/assets/file_type/pdf.png | Bin 0 -> 2954 bytes src/assets/file_type/photo.png | Bin 0 -> 4251 bytes src/assets/file_type/png.png | Bin 0 -> 3702 bytes src/assets/file_type/txt.png | Bin 0 -> 2840 bytes src/assets/file_type/word.png | Bin 0 -> 5139 bytes src/assets/floder.png | Bin 0 -> 1296 bytes src/assets/folder_close.png | Bin 0 -> 1190 bytes src/assets/folder_open.png | Bin 0 -> 1301 bytes src/assets/icons/bx-analyse.svg | 1 + src/assets/login_title.png | Bin 0 -> 20669 bytes src/assets/login_wrapper.png | Bin 0 -> 433137 bytes src/assets/logo.png | Bin 0 -> 1700 bytes src/assets/logo.svg | 29 + src/assets/logo_blue.png | Bin 0 -> 4286 bytes src/assets/page/bg.png | Bin 0 -> 333198 bytes src/assets/page/center-bottom.png | Bin 0 -> 950 bytes src/assets/page/center-repeat.png | Bin 0 -> 936 bytes src/assets/page/center-top.png | Bin 0 -> 926 bytes src/assets/page/header/bg.png | Bin 0 -> 38901 bytes src/assets/page/left-bottom.png | Bin 0 -> 1584 bytes src/assets/page/left-center.png | Bin 0 -> 1490 bytes src/assets/page/left-repeat.png | Bin 0 -> 958 bytes src/assets/page/left-top.png | Bin 0 -> 1555 bytes src/assets/page/right-bottom.png | Bin 0 -> 1637 bytes src/assets/page/right-center.png | Bin 0 -> 1219 bytes src/assets/page/right-repeat.png | Bin 0 -> 942 bytes src/assets/page/right-top.png | Bin 0 -> 1532 bytes src/assets/shareFloder.png | Bin 0 -> 1581 bytes src/assets/threePoint.png | Bin 0 -> 260 bytes src/assets/title_icon.png | Bin 0 -> 1688 bytes .../ArticleListContent/ArticleListContent.vue | 89 ++ src/components/ArticleListContent/index.js | 3 + src/components/AvatarList/Item.jsx | 25 + src/components/AvatarList/List.jsx | 72 + src/components/AvatarList/index.js | 9 + src/components/AvatarList/index.less | 59 + src/components/AvatarList/index.md | 64 + src/components/Charts/Bar.vue | 62 + src/components/Charts/ChartCard.vue | 120 ++ src/components/Charts/Liquid.vue | 67 + src/components/Charts/MiniArea.vue | 56 + src/components/Charts/MiniBar.vue | 57 + src/components/Charts/MiniProgress.vue | 75 + src/components/Charts/MiniSmoothArea.vue | 40 + src/components/Charts/Radar.vue | 68 + src/components/Charts/RankList.vue | 77 ++ src/components/Charts/TagCloud.vue | 113 ++ src/components/Charts/TransferBar.vue | 64 + src/components/Charts/Trend.vue | 82 ++ src/components/Charts/chart.less | 13 + src/components/Charts/smooth.area.less | 14 + src/components/CommonButton.vue | 94 ++ src/components/Dialog.js | 113 ++ src/components/DirectoryTree.vue | 95 ++ src/components/Editor/QuillEditor.vue | 83 ++ src/components/Editor/WangEditor.vue | 57 + src/components/Ellipsis/Ellipsis.vue | 64 + src/components/Ellipsis/index.js | 3 + src/components/Ellipsis/index.md | 38 + .../FooterToolbar/FooterToolBar.vue | 47 + src/components/FooterToolbar/index.js | 4 + src/components/FooterToolbar/index.less | 23 + src/components/FooterToolbar/index.md | 48 + src/components/GlobalFooter/index.vue | 19 + .../GlobalHeader/AvatarDropdown.vue | 98 ++ src/components/GlobalHeader/RightContent.vue | 56 + src/components/IconSelector/IconSelector.vue | 86 ++ src/components/IconSelector/README.md | 48 + src/components/IconSelector/icons.js | 36 + src/components/IconSelector/index.js | 2 + src/components/ImportModal.vue | 120 ++ src/components/MultiTab/MultiTab.vue | 162 +++ src/components/MultiTab/events.js | 2 + src/components/MultiTab/index.js | 40 + src/components/MultiTab/index.less | 25 + src/components/NProgress/nprogress.less | 70 + src/components/NoticeIcon/NoticeIcon.vue | 90 ++ src/components/NoticeIcon/index.js | 2 + src/components/NumberInfo/NumberInfo.vue | 54 + src/components/NumberInfo/index.js | 3 + src/components/NumberInfo/index.less | 57 + src/components/NumberInfo/index.md | 43 + src/components/Other/CarbonAds.vue | 62 + src/components/PageContainer/Index.vue | 102 ++ src/components/PageLoading/index.jsx | 106 ++ src/components/RangePicker.vue | 77 ++ src/components/Search/GlobalSearch.jsx | 63 + src/components/Search/index.less | 25 + src/components/SelectLang/index.jsx | 54 + src/components/SelectLang/index.less | 30 + .../SettingDrawer/SettingDrawer.vue | 343 +++++ src/components/SettingDrawer/SettingItem.vue | 38 + src/components/SettingDrawer/index.js | 2 + src/components/SettingDrawer/settingConfig.js | 48 + src/components/SettingDrawer/themeColor.js | 24 + .../StandardFormRow/StandardFormRow.vue | 122 ++ src/components/StandardFormRow/index.js | 3 + src/components/Table/README.md | 341 +++++ src/components/Table/index.js | 325 +++++ src/components/TagSelect/TagSelectOption.jsx | 45 + src/components/TagSelect/index.jsx | 113 ++ src/components/TextArea/index.jsx | 69 + src/components/TextArea/style.less | 12 + src/components/Tree/Tree.jsx | 124 ++ src/components/Trend/Trend.vue | 41 + src/components/Trend/index.js | 3 + src/components/Trend/index.less | 44 + src/components/Trend/index.md | 45 + src/components/YearPicker.vue | 78 ++ src/components/_util/util.js | 46 + src/components/form/DictSelect.vue | 43 + src/components/form/DirectoryTree.vue | 50 + src/components/hivekion/DictSelect.vue | 43 + src/components/hivekion/HModal.vue | 221 +++ src/components/hivekion/index.js | 20 + src/components/hivekion/utils/props-util.js | 109 ++ src/components/index.js | 56 + src/components/index.less | 6 + src/components/tools/TwoStepCaptcha.vue | 89 ++ src/config/defaultSettings.js | 30 + src/config/router.config.js | 396 ++++++ src/core/bootstrap.js | 30 + src/core/directives/action.js | 34 + src/core/icons.js | 11 + src/core/lazy_use.js | 118 ++ src/core/permission/permission.js | 50 + src/core/use.js | 27 + src/custom.less | 8 + src/global.less | 219 +++ src/layouts/BasicLayout.less | 43 + src/layouts/BasicLayout.vue | 214 +++ src/layouts/BlankLayout.vue | 16 + src/layouts/PageView.vue | 12 + src/layouts/RouteView.vue | 32 + src/layouts/UserLayout.vue | 162 +++ src/layouts/components/MenuButton.vue | 179 +++ src/layouts/components/PageBody.vue | 172 +++ src/layouts/components/PageHeader.vue | 115 ++ src/layouts/index.js | 7 + src/locales/index.js | 63 + src/locales/lang/en-US.js | 35 + src/locales/lang/en-US/account.js | 5 + src/locales/lang/en-US/account/settings.js | 62 + src/locales/lang/en-US/dashboard.js | 5 + src/locales/lang/en-US/dashboard/analysis.js | 36 + src/locales/lang/en-US/form.js | 5 + src/locales/lang/en-US/form/basicForm.js | 61 + src/locales/lang/en-US/global.js | 6 + src/locales/lang/en-US/menu.js | 39 + src/locales/lang/en-US/result.js | 7 + src/locales/lang/en-US/result/fail.js | 11 + src/locales/lang/en-US/result/success.js | 19 + src/locales/lang/en-US/setting.js | 29 + src/locales/lang/en-US/user.js | 45 + src/locales/lang/zh-CN.js | 34 + src/locales/lang/zh-CN/account.js | 5 + src/locales/lang/zh-CN/account/settings.js | 57 + src/locales/lang/zh-CN/dashboard.js | 5 + src/locales/lang/zh-CN/dashboard/analysis.js | 36 + src/locales/lang/zh-CN/form.js | 5 + src/locales/lang/zh-CN/form/basicForm.js | 58 + src/locales/lang/zh-CN/global.js | 6 + src/locales/lang/zh-CN/menu.js | 39 + src/locales/lang/zh-CN/result.js | 7 + src/locales/lang/zh-CN/result/fail.js | 10 + src/locales/lang/zh-CN/result/success.js | 19 + src/locales/lang/zh-CN/setting.js | 29 + src/locales/lang/zh-CN/user.js | 43 + src/main.js | 69 + src/mixins/FormModalProps.js | 50 + src/mixins/PageProps.js | 78 ++ src/permission.js | 84 ++ src/router/README.md | 134 ++ src/router/generator-routers.js | 236 ++++ src/router/index.js | 17 + src/router/routeData.js | 62 + src/store/app-mixin.js | 32 + src/store/device-mixin.js | 11 + src/store/getters.js | 16 + src/store/i18n-mixin.js | 16 + src/store/index.js | 26 + src/store/modules/app.js | 90 ++ src/store/modules/async-router.js | 31 + src/store/modules/permission.js | 79 ++ src/store/modules/user.js | 103 ++ src/store/mutation-types.js | 24 + src/utils/axios.js | 35 + src/utils/domUtil.js | 21 + src/utils/fileHelper.js | 100 ++ src/utils/filter.js | 56 + src/utils/html2pdf.js | 36 + src/utils/htmlToPdf.js | 56 + src/utils/request.js | 129 ++ src/utils/routeConvert.js | 30 + src/utils/screenLog.js | 12 + src/utils/useEchart.js | 34 + src/utils/util.js | 95 ++ src/utils/utils.less | 54 + src/views/404.vue | 15 + src/views/account/center/index.vue | 289 ++++ src/views/account/center/page/App.vue | 106 ++ src/views/account/center/page/Article.vue | 77 ++ src/views/account/center/page/Project.vue | 109 ++ src/views/account/center/page/index.js | 5 + src/views/account/settings/AvatarModal.vue | 184 +++ src/views/account/settings/BasicSetting.vue | 141 ++ src/views/account/settings/Binding.vue | 25 + src/views/account/settings/Custom.vue | 68 + src/views/account/settings/Index.vue | 154 +++ src/views/account/settings/Notification.vue | 25 + src/views/account/settings/Security.vue | 41 + src/views/analysis/Bidding.vue | 637 +++++++++ src/views/analysis/Tender.vue | 680 +++++++++ src/views/analysis/YearPicker.vue | 67 + src/views/analysis/total/BidWinner.vue | 56 + .../analysis/total/BidWinningDepartment.vue | 39 + .../analysis/total/BidWinningProjects.vue | 33 + src/views/analysis/total/BiddingProject.vue | 162 +++ src/views/analysis/total/Index.vue | 101 ++ src/views/analysis/total/mixins/total.js | 24 + src/views/codebuild/codeBuildIndex.vue | 369 +++++ src/views/dashboard/Analysis.vue | 420 ++++++ src/views/dashboard/Monitor.vue | 15 + src/views/dashboard/TestWork.vue | 117 ++ src/views/dashboard/Workplace.less | 109 ++ src/views/dashboard/Workplace.vue | 391 ++++++ src/views/db/tablecolumndetail.vue | 178 +++ src/views/db/tablelist.vue | 344 +++++ src/views/docList/ComparePreview.vue | 45 + src/views/docList/Index.vue | 252 ++++ src/views/docList/ViewDoc.vue | 36 + src/views/docList/components/DocPreview.vue | 66 + src/views/docList/components/Document.vue | 66 + src/views/docList/components/ImagePreview.vue | 52 + src/views/docList/components/PdfPreview.vue | 85 ++ .../docList/components/PdfPreview_old.vue | 71 + src/views/docList/components/TxtPreview.vue | 65 + src/views/exception/403.vue | 20 + src/views/exception/404.vue | 20 + src/views/exception/500.vue | 20 + src/views/folder/folderList.vue | 320 +++++ src/views/form/advancedForm/AdvancedForm.vue | 330 +++++ .../form/advancedForm/RepositoryForm.vue | 119 ++ src/views/form/advancedForm/TaskForm.vue | 107 ++ src/views/form/basicForm/index.vue | 134 ++ src/views/form/stepForm/Step1.vue | 112 ++ src/views/form/stepForm/Step2.vue | 110 ++ src/views/form/stepForm/Step3.vue | 64 + src/views/form/stepForm/StepForm.vue | 66 + src/views/list/BasicList.vue | 220 +++ src/views/list/CardList.vue | 148 ++ src/views/list/QueryList.vue | 50 + src/views/list/TableList.vue | 318 +++++ src/views/list/components/Info.vue | 57 + src/views/list/modules/CreateForm.vue | 72 + src/views/list/modules/StepByStepModal.vue | 172 +++ src/views/list/modules/TaskForm.vue | 94 ++ src/views/list/search/Applications.vue | 187 +++ src/views/list/search/Article.vue | 185 +++ src/views/list/search/Projects.vue | 168 +++ src/views/list/search/SearchLayout.vue | 79 ++ src/views/list/search/components/CardInfo.vue | 58 + src/views/list/search/components/IconText.vue | 22 + src/views/list/table/Edit.vue | 160 +++ src/views/list/table/List.vue | 240 ++++ src/views/other/BigForm.vue | 554 ++++++++ src/views/other/IconSelectorView.vue | 36 + src/views/other/PermissionList.vue | 272 ++++ src/views/other/RoleList.vue | 182 +++ src/views/other/TableInnerEditList.vue | 268 ++++ src/views/other/TreeList.vue | 192 +++ src/views/other/UserList.vue | 340 +++++ src/views/other/modules/OrgModal.vue | 100 ++ src/views/other/modules/RoleModal.vue | 146 ++ src/views/parseingPdf/Index.vue | 172 +++ src/views/parseingPdf/UploadModal.vue | 64 + src/views/profile/advanced/Advanced.vue | 373 +++++ src/views/profile/basic/index.vue | 249 ++++ src/views/project/biddingproject/Form.vue | 281 ++++ src/views/project/biddingproject/Index.vue | 1220 +++++++++++++++++ .../biddingproject/ReturnBackModal.vue | 75 + src/views/project/biddingproject/ViewDoc.vue | 34 + .../components/CheckResultPreview.vue | 146 ++ .../biddingproject/components/DocPreview.vue | 70 + .../components/ImagePreview.vue | 56 + .../biddingproject/components/PdfPreview.vue | 88 ++ .../biddingproject/components/TxtPreview.vue | 69 + .../biddingproject/components/logPreview.vue | 82 ++ src/views/project/tenderBook/Form.vue | 129 ++ src/views/project/tenderBook/Index.vue | 214 +++ src/views/project/tenderproject/Form.vue | 86 ++ src/views/project/tenderproject/Index.vue | 252 ++++ src/views/recheck/Compare.vue | 69 + src/views/recheck/Form.vue | 58 + src/views/recheck/Index.vue | 508 +++++++ src/views/recheck/UploadModel.vue | 322 +++++ src/views/recheck/ViewDoc.vue | 33 + src/views/recheck/components/Contrast.vue | 617 +++++++++ src/views/recheck/components/DocPreview.vue | 66 + src/views/recheck/components/Document.vue | 66 + src/views/recheck/components/ImagePreview.vue | 56 + src/views/recheck/components/PdfPreview.vue | 84 ++ src/views/recheck/components/Pie.vue | 117 ++ .../components/PropertyCompareModal.vue | 209 +++ src/views/recheck/components/Report.vue | 660 +++++++++ src/views/recheck/components/SliceUpload.vue | 431 ++++++ src/views/recheck/components/TextPer.vue | 123 ++ src/views/recheck/components/TotalRecord.vue | 287 ++++ src/views/recheck/taskProgress/Index.vue | 294 ++++ src/views/recheckSetting/OtherSetting.vue | 58 + src/views/result/Error.vue | 39 + src/views/result/Success.vue | 89 ++ src/views/system/area/list.vue | 118 ++ src/views/system/backup/Form.vue | 92 ++ src/views/system/backup/Index.vue | 160 +++ src/views/system/checkFilter/Index.vue | 81 ++ src/views/system/conclusion/Form.vue | 72 + src/views/system/conclusion/Index.vue | 131 ++ src/views/system/dept/DeptForm.vue | 162 +++ src/views/system/dept/deptlist.vue | 198 +++ src/views/system/dict/DictDataForm.vue | 174 +++ src/views/system/dict/DictTypeForm.vue | 152 ++ src/views/system/dict/dictlist.vue | 310 +++++ src/views/system/filterWord/Form.vue | 38 + src/views/system/filterWord/Index.vue | 126 ++ src/views/system/log/SystemLogDetailForm.vue | 164 +++ src/views/system/log/loglist.vue | 241 ++++ src/views/system/menu/ImportSql.vue | 86 ++ src/views/system/menu/MenuForm.vue | 178 +++ src/views/system/menu/menulist.vue | 272 ++++ src/views/system/role/RoleForm.vue | 147 ++ .../system/role/RolePermissionSetting.vue | 176 +++ src/views/system/role/rolelist.vue | 261 ++++ src/views/system/user/CreateForm.vue | 221 +++ src/views/system/user/PasswordForm.vue | 50 + src/views/system/user/list.vue | 408 ++++++ src/views/user/Login.vue | 385 ++++++ src/views/user/Register.vue | 316 +++++ src/views/user/RegisterResult.vue | 44 + src/views/user/ResetPwd.vue | 71 + tests/unit/.eslintrc.js | 5 + vue.config.js | 135 ++ 406 files changed, 37861 insertions(+) create mode 100644 .browserslistrc create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .env.development create mode 100644 .env.preview create mode 100644 .eslintrc.js create mode 100644 .eslintrc.json create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 .lintstagedrc.json create mode 100644 .prettierrc create mode 100644 .stylelintrc.js create mode 100644 .travis.yml create mode 100644 Dockerfile create mode 100644 LICENSE create mode 100644 README.md create mode 100644 README.zh-CN.md create mode 100644 babel.config.js create mode 100644 commitlint.config.js create mode 100644 config/plugin.config.js create mode 100644 config/themePluginConfig.js create mode 100644 deploy.bat create mode 100644 deploy/caddy.conf create mode 100644 deploy/nginx.conf create mode 100644 docs/add-page-loading-animate.md create mode 100644 docs/webpack-bundle-analyzer.md create mode 100644 jest.config.js create mode 100644 jsconfig.json create mode 100644 package.json create mode 100644 postcss.config.js create mode 100644 public/avatar2.jpg create mode 100644 public/index.html create mode 100644 public/logo.ico create mode 100644 src/App.vue create mode 100644 src/api/analysis/biddingProject.js create mode 100644 src/api/analysis/tenderProject.js create mode 100644 src/api/db/table.js create mode 100644 src/api/login.js create mode 100644 src/api/manage.js create mode 100644 src/api/parseingPdf.js create mode 100644 src/api/project/biddingproject.js create mode 100644 src/api/project/tenderBook.js create mode 100644 src/api/project/tenderProject.js create mode 100644 src/api/recheck.js create mode 100644 src/api/recheckSetting/otherSetting.js create mode 100644 src/api/sliceUpload.js create mode 100644 src/api/system/backup.js create mode 100644 src/api/system/checkFilter.js create mode 100644 src/api/system/conclusion.js create mode 100644 src/api/system/dept.js create mode 100644 src/api/system/dict.js create mode 100644 src/api/system/log.js create mode 100644 src/api/system/menu.js create mode 100644 src/api/system/redis.js create mode 100644 src/api/system/role.js create mode 100644 src/api/system/user.js create mode 100644 src/assets/MP3.png create mode 100644 src/assets/PDF.png create mode 100644 src/assets/SQL.png create mode 100644 src/assets/TXT.png create mode 100644 src/assets/XLS.png create mode 100644 src/assets/ZIP.png create mode 100644 src/assets/background.png create mode 100644 src/assets/background.svg create mode 100644 src/assets/file_type/pdf.png create mode 100644 src/assets/file_type/photo.png create mode 100644 src/assets/file_type/png.png create mode 100644 src/assets/file_type/txt.png create mode 100644 src/assets/file_type/word.png create mode 100644 src/assets/floder.png create mode 100644 src/assets/folder_close.png create mode 100644 src/assets/folder_open.png create mode 100644 src/assets/icons/bx-analyse.svg create mode 100644 src/assets/login_title.png create mode 100644 src/assets/login_wrapper.png create mode 100644 src/assets/logo.png create mode 100644 src/assets/logo.svg create mode 100644 src/assets/logo_blue.png create mode 100644 src/assets/page/bg.png create mode 100644 src/assets/page/center-bottom.png create mode 100644 src/assets/page/center-repeat.png create mode 100644 src/assets/page/center-top.png create mode 100644 src/assets/page/header/bg.png create mode 100644 src/assets/page/left-bottom.png create mode 100644 src/assets/page/left-center.png create mode 100644 src/assets/page/left-repeat.png create mode 100644 src/assets/page/left-top.png create mode 100644 src/assets/page/right-bottom.png create mode 100644 src/assets/page/right-center.png create mode 100644 src/assets/page/right-repeat.png create mode 100644 src/assets/page/right-top.png create mode 100644 src/assets/shareFloder.png create mode 100644 src/assets/threePoint.png create mode 100644 src/assets/title_icon.png create mode 100644 src/components/ArticleListContent/ArticleListContent.vue create mode 100644 src/components/ArticleListContent/index.js create mode 100644 src/components/AvatarList/Item.jsx create mode 100644 src/components/AvatarList/List.jsx create mode 100644 src/components/AvatarList/index.js create mode 100644 src/components/AvatarList/index.less create mode 100644 src/components/AvatarList/index.md create mode 100644 src/components/Charts/Bar.vue create mode 100644 src/components/Charts/ChartCard.vue create mode 100644 src/components/Charts/Liquid.vue create mode 100644 src/components/Charts/MiniArea.vue create mode 100644 src/components/Charts/MiniBar.vue create mode 100644 src/components/Charts/MiniProgress.vue create mode 100644 src/components/Charts/MiniSmoothArea.vue create mode 100644 src/components/Charts/Radar.vue create mode 100644 src/components/Charts/RankList.vue create mode 100644 src/components/Charts/TagCloud.vue create mode 100644 src/components/Charts/TransferBar.vue create mode 100644 src/components/Charts/Trend.vue create mode 100644 src/components/Charts/chart.less create mode 100644 src/components/Charts/smooth.area.less create mode 100644 src/components/CommonButton.vue create mode 100644 src/components/Dialog.js create mode 100644 src/components/DirectoryTree.vue create mode 100644 src/components/Editor/QuillEditor.vue create mode 100644 src/components/Editor/WangEditor.vue create mode 100644 src/components/Ellipsis/Ellipsis.vue create mode 100644 src/components/Ellipsis/index.js create mode 100644 src/components/Ellipsis/index.md create mode 100644 src/components/FooterToolbar/FooterToolBar.vue create mode 100644 src/components/FooterToolbar/index.js create mode 100644 src/components/FooterToolbar/index.less create mode 100644 src/components/FooterToolbar/index.md create mode 100644 src/components/GlobalFooter/index.vue create mode 100644 src/components/GlobalHeader/AvatarDropdown.vue create mode 100644 src/components/GlobalHeader/RightContent.vue create mode 100644 src/components/IconSelector/IconSelector.vue create mode 100644 src/components/IconSelector/README.md create mode 100644 src/components/IconSelector/icons.js create mode 100644 src/components/IconSelector/index.js create mode 100644 src/components/ImportModal.vue create mode 100644 src/components/MultiTab/MultiTab.vue create mode 100644 src/components/MultiTab/events.js create mode 100644 src/components/MultiTab/index.js create mode 100644 src/components/MultiTab/index.less create mode 100644 src/components/NProgress/nprogress.less create mode 100644 src/components/NoticeIcon/NoticeIcon.vue create mode 100644 src/components/NoticeIcon/index.js create mode 100644 src/components/NumberInfo/NumberInfo.vue create mode 100644 src/components/NumberInfo/index.js create mode 100644 src/components/NumberInfo/index.less create mode 100644 src/components/NumberInfo/index.md create mode 100644 src/components/Other/CarbonAds.vue create mode 100644 src/components/PageContainer/Index.vue create mode 100644 src/components/PageLoading/index.jsx create mode 100644 src/components/RangePicker.vue create mode 100644 src/components/Search/GlobalSearch.jsx create mode 100644 src/components/Search/index.less create mode 100644 src/components/SelectLang/index.jsx create mode 100644 src/components/SelectLang/index.less create mode 100644 src/components/SettingDrawer/SettingDrawer.vue create mode 100644 src/components/SettingDrawer/SettingItem.vue create mode 100644 src/components/SettingDrawer/index.js create mode 100644 src/components/SettingDrawer/settingConfig.js create mode 100644 src/components/SettingDrawer/themeColor.js create mode 100644 src/components/StandardFormRow/StandardFormRow.vue create mode 100644 src/components/StandardFormRow/index.js create mode 100644 src/components/Table/README.md create mode 100644 src/components/Table/index.js create mode 100644 src/components/TagSelect/TagSelectOption.jsx create mode 100644 src/components/TagSelect/index.jsx create mode 100644 src/components/TextArea/index.jsx create mode 100644 src/components/TextArea/style.less create mode 100644 src/components/Tree/Tree.jsx create mode 100644 src/components/Trend/Trend.vue create mode 100644 src/components/Trend/index.js create mode 100644 src/components/Trend/index.less create mode 100644 src/components/Trend/index.md create mode 100644 src/components/YearPicker.vue create mode 100644 src/components/_util/util.js create mode 100644 src/components/form/DictSelect.vue create mode 100644 src/components/form/DirectoryTree.vue create mode 100644 src/components/hivekion/DictSelect.vue create mode 100644 src/components/hivekion/HModal.vue create mode 100644 src/components/hivekion/index.js create mode 100644 src/components/hivekion/utils/props-util.js create mode 100644 src/components/index.js create mode 100644 src/components/index.less create mode 100644 src/components/tools/TwoStepCaptcha.vue create mode 100644 src/config/defaultSettings.js create mode 100644 src/config/router.config.js create mode 100644 src/core/bootstrap.js create mode 100644 src/core/directives/action.js create mode 100644 src/core/icons.js create mode 100644 src/core/lazy_use.js create mode 100644 src/core/permission/permission.js create mode 100644 src/core/use.js create mode 100644 src/custom.less create mode 100644 src/global.less create mode 100644 src/layouts/BasicLayout.less create mode 100644 src/layouts/BasicLayout.vue create mode 100644 src/layouts/BlankLayout.vue create mode 100644 src/layouts/PageView.vue create mode 100644 src/layouts/RouteView.vue create mode 100644 src/layouts/UserLayout.vue create mode 100644 src/layouts/components/MenuButton.vue create mode 100644 src/layouts/components/PageBody.vue create mode 100644 src/layouts/components/PageHeader.vue create mode 100644 src/layouts/index.js create mode 100644 src/locales/index.js create mode 100644 src/locales/lang/en-US.js create mode 100644 src/locales/lang/en-US/account.js create mode 100644 src/locales/lang/en-US/account/settings.js create mode 100644 src/locales/lang/en-US/dashboard.js create mode 100644 src/locales/lang/en-US/dashboard/analysis.js create mode 100644 src/locales/lang/en-US/form.js create mode 100644 src/locales/lang/en-US/form/basicForm.js create mode 100644 src/locales/lang/en-US/global.js create mode 100644 src/locales/lang/en-US/menu.js create mode 100644 src/locales/lang/en-US/result.js create mode 100644 src/locales/lang/en-US/result/fail.js create mode 100644 src/locales/lang/en-US/result/success.js create mode 100644 src/locales/lang/en-US/setting.js create mode 100644 src/locales/lang/en-US/user.js create mode 100644 src/locales/lang/zh-CN.js create mode 100644 src/locales/lang/zh-CN/account.js create mode 100644 src/locales/lang/zh-CN/account/settings.js create mode 100644 src/locales/lang/zh-CN/dashboard.js create mode 100644 src/locales/lang/zh-CN/dashboard/analysis.js create mode 100644 src/locales/lang/zh-CN/form.js create mode 100644 src/locales/lang/zh-CN/form/basicForm.js create mode 100644 src/locales/lang/zh-CN/global.js create mode 100644 src/locales/lang/zh-CN/menu.js create mode 100644 src/locales/lang/zh-CN/result.js create mode 100644 src/locales/lang/zh-CN/result/fail.js create mode 100644 src/locales/lang/zh-CN/result/success.js create mode 100644 src/locales/lang/zh-CN/setting.js create mode 100644 src/locales/lang/zh-CN/user.js create mode 100644 src/main.js create mode 100644 src/mixins/FormModalProps.js create mode 100644 src/mixins/PageProps.js create mode 100644 src/permission.js create mode 100644 src/router/README.md create mode 100644 src/router/generator-routers.js create mode 100644 src/router/index.js create mode 100644 src/router/routeData.js create mode 100644 src/store/app-mixin.js create mode 100644 src/store/device-mixin.js create mode 100644 src/store/getters.js create mode 100644 src/store/i18n-mixin.js create mode 100644 src/store/index.js create mode 100644 src/store/modules/app.js create mode 100644 src/store/modules/async-router.js create mode 100644 src/store/modules/permission.js create mode 100644 src/store/modules/user.js create mode 100644 src/store/mutation-types.js create mode 100644 src/utils/axios.js create mode 100644 src/utils/domUtil.js create mode 100644 src/utils/fileHelper.js create mode 100644 src/utils/filter.js create mode 100644 src/utils/html2pdf.js create mode 100644 src/utils/htmlToPdf.js create mode 100644 src/utils/request.js create mode 100644 src/utils/routeConvert.js create mode 100644 src/utils/screenLog.js create mode 100644 src/utils/useEchart.js create mode 100644 src/utils/util.js create mode 100644 src/utils/utils.less create mode 100644 src/views/404.vue create mode 100644 src/views/account/center/index.vue create mode 100644 src/views/account/center/page/App.vue create mode 100644 src/views/account/center/page/Article.vue create mode 100644 src/views/account/center/page/Project.vue create mode 100644 src/views/account/center/page/index.js create mode 100644 src/views/account/settings/AvatarModal.vue create mode 100644 src/views/account/settings/BasicSetting.vue create mode 100644 src/views/account/settings/Binding.vue create mode 100644 src/views/account/settings/Custom.vue create mode 100644 src/views/account/settings/Index.vue create mode 100644 src/views/account/settings/Notification.vue create mode 100644 src/views/account/settings/Security.vue create mode 100644 src/views/analysis/Bidding.vue create mode 100644 src/views/analysis/Tender.vue create mode 100644 src/views/analysis/YearPicker.vue create mode 100644 src/views/analysis/total/BidWinner.vue create mode 100644 src/views/analysis/total/BidWinningDepartment.vue create mode 100644 src/views/analysis/total/BidWinningProjects.vue create mode 100644 src/views/analysis/total/BiddingProject.vue create mode 100644 src/views/analysis/total/Index.vue create mode 100644 src/views/analysis/total/mixins/total.js create mode 100644 src/views/codebuild/codeBuildIndex.vue create mode 100644 src/views/dashboard/Analysis.vue create mode 100644 src/views/dashboard/Monitor.vue create mode 100644 src/views/dashboard/TestWork.vue create mode 100644 src/views/dashboard/Workplace.less create mode 100644 src/views/dashboard/Workplace.vue create mode 100644 src/views/db/tablecolumndetail.vue create mode 100644 src/views/db/tablelist.vue create mode 100644 src/views/docList/ComparePreview.vue create mode 100644 src/views/docList/Index.vue create mode 100644 src/views/docList/ViewDoc.vue create mode 100644 src/views/docList/components/DocPreview.vue create mode 100644 src/views/docList/components/Document.vue create mode 100644 src/views/docList/components/ImagePreview.vue create mode 100644 src/views/docList/components/PdfPreview.vue create mode 100644 src/views/docList/components/PdfPreview_old.vue create mode 100644 src/views/docList/components/TxtPreview.vue create mode 100644 src/views/exception/403.vue create mode 100644 src/views/exception/404.vue create mode 100644 src/views/exception/500.vue create mode 100644 src/views/folder/folderList.vue create mode 100644 src/views/form/advancedForm/AdvancedForm.vue create mode 100644 src/views/form/advancedForm/RepositoryForm.vue create mode 100644 src/views/form/advancedForm/TaskForm.vue create mode 100644 src/views/form/basicForm/index.vue create mode 100644 src/views/form/stepForm/Step1.vue create mode 100644 src/views/form/stepForm/Step2.vue create mode 100644 src/views/form/stepForm/Step3.vue create mode 100644 src/views/form/stepForm/StepForm.vue create mode 100644 src/views/list/BasicList.vue create mode 100644 src/views/list/CardList.vue create mode 100644 src/views/list/QueryList.vue create mode 100644 src/views/list/TableList.vue create mode 100644 src/views/list/components/Info.vue create mode 100644 src/views/list/modules/CreateForm.vue create mode 100644 src/views/list/modules/StepByStepModal.vue create mode 100644 src/views/list/modules/TaskForm.vue create mode 100644 src/views/list/search/Applications.vue create mode 100644 src/views/list/search/Article.vue create mode 100644 src/views/list/search/Projects.vue create mode 100644 src/views/list/search/SearchLayout.vue create mode 100644 src/views/list/search/components/CardInfo.vue create mode 100644 src/views/list/search/components/IconText.vue create mode 100644 src/views/list/table/Edit.vue create mode 100644 src/views/list/table/List.vue create mode 100644 src/views/other/BigForm.vue create mode 100644 src/views/other/IconSelectorView.vue create mode 100644 src/views/other/PermissionList.vue create mode 100644 src/views/other/RoleList.vue create mode 100644 src/views/other/TableInnerEditList.vue create mode 100644 src/views/other/TreeList.vue create mode 100644 src/views/other/UserList.vue create mode 100644 src/views/other/modules/OrgModal.vue create mode 100644 src/views/other/modules/RoleModal.vue create mode 100644 src/views/parseingPdf/Index.vue create mode 100644 src/views/parseingPdf/UploadModal.vue create mode 100644 src/views/profile/advanced/Advanced.vue create mode 100644 src/views/profile/basic/index.vue create mode 100644 src/views/project/biddingproject/Form.vue create mode 100644 src/views/project/biddingproject/Index.vue create mode 100644 src/views/project/biddingproject/ReturnBackModal.vue create mode 100644 src/views/project/biddingproject/ViewDoc.vue create mode 100644 src/views/project/biddingproject/components/CheckResultPreview.vue create mode 100644 src/views/project/biddingproject/components/DocPreview.vue create mode 100644 src/views/project/biddingproject/components/ImagePreview.vue create mode 100644 src/views/project/biddingproject/components/PdfPreview.vue create mode 100644 src/views/project/biddingproject/components/TxtPreview.vue create mode 100644 src/views/project/biddingproject/components/logPreview.vue create mode 100644 src/views/project/tenderBook/Form.vue create mode 100644 src/views/project/tenderBook/Index.vue create mode 100644 src/views/project/tenderproject/Form.vue create mode 100644 src/views/project/tenderproject/Index.vue create mode 100644 src/views/recheck/Compare.vue create mode 100644 src/views/recheck/Form.vue create mode 100644 src/views/recheck/Index.vue create mode 100644 src/views/recheck/UploadModel.vue create mode 100644 src/views/recheck/ViewDoc.vue create mode 100644 src/views/recheck/components/Contrast.vue create mode 100644 src/views/recheck/components/DocPreview.vue create mode 100644 src/views/recheck/components/Document.vue create mode 100644 src/views/recheck/components/ImagePreview.vue create mode 100644 src/views/recheck/components/PdfPreview.vue create mode 100644 src/views/recheck/components/Pie.vue create mode 100644 src/views/recheck/components/PropertyCompareModal.vue create mode 100644 src/views/recheck/components/Report.vue create mode 100644 src/views/recheck/components/SliceUpload.vue create mode 100644 src/views/recheck/components/TextPer.vue create mode 100644 src/views/recheck/components/TotalRecord.vue create mode 100644 src/views/recheck/taskProgress/Index.vue create mode 100644 src/views/recheckSetting/OtherSetting.vue create mode 100644 src/views/result/Error.vue create mode 100644 src/views/result/Success.vue create mode 100644 src/views/system/area/list.vue create mode 100644 src/views/system/backup/Form.vue create mode 100644 src/views/system/backup/Index.vue create mode 100644 src/views/system/checkFilter/Index.vue create mode 100644 src/views/system/conclusion/Form.vue create mode 100644 src/views/system/conclusion/Index.vue create mode 100644 src/views/system/dept/DeptForm.vue create mode 100644 src/views/system/dept/deptlist.vue create mode 100644 src/views/system/dict/DictDataForm.vue create mode 100644 src/views/system/dict/DictTypeForm.vue create mode 100644 src/views/system/dict/dictlist.vue create mode 100644 src/views/system/filterWord/Form.vue create mode 100644 src/views/system/filterWord/Index.vue create mode 100644 src/views/system/log/SystemLogDetailForm.vue create mode 100644 src/views/system/log/loglist.vue create mode 100644 src/views/system/menu/ImportSql.vue create mode 100644 src/views/system/menu/MenuForm.vue create mode 100644 src/views/system/menu/menulist.vue create mode 100644 src/views/system/role/RoleForm.vue create mode 100644 src/views/system/role/RolePermissionSetting.vue create mode 100644 src/views/system/role/rolelist.vue create mode 100644 src/views/system/user/CreateForm.vue create mode 100644 src/views/system/user/PasswordForm.vue create mode 100644 src/views/system/user/list.vue create mode 100644 src/views/user/Login.vue create mode 100644 src/views/user/Register.vue create mode 100644 src/views/user/RegisterResult.vue create mode 100644 src/views/user/ResetPwd.vue create mode 100644 tests/unit/.eslintrc.js create mode 100644 vue.config.js diff --git a/.browserslistrc b/.browserslistrc new file mode 100644 index 0000000..8f96043 --- /dev/null +++ b/.browserslistrc @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not ie <= 10 diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6f77dff --- /dev/null +++ b/.editorconfig @@ -0,0 +1,39 @@ +[*] +charset=utf-8 +end_of_line=lf +insert_final_newline=false +indent_style=space +indent_size=2 + +[{*.ng,*.sht,*.html,*.shtm,*.shtml,*.htm}] +indent_style=space +indent_size=2 + +[{*.jhm,*.xslt,*.xul,*.rng,*.xsl,*.xsd,*.ant,*.tld,*.fxml,*.jrxml,*.xml,*.jnlp,*.wsdl}] +indent_style=space +indent_size=2 + +[{.babelrc,.stylelintrc,jest.config,.eslintrc,.prettierrc,*.json,*.jsb3,*.jsb2,*.bowerrc}] +indent_style=space +indent_size=2 + +[*.svg] +indent_style=space +indent_size=2 + +[*.js.map] +indent_style=space +indent_size=2 + +[*.less] +indent_style=space +indent_size=2 + +[*.vue] +indent_style=space +indent_size=2 + +[{.analysis_options,*.yml,*.yaml}] +indent_style=space +indent_size=2 + diff --git a/.env b/.env new file mode 100644 index 0000000..b5c472a --- /dev/null +++ b/.env @@ -0,0 +1,3 @@ +NODE_ENV=production +VUE_APP_PREVIEW=false +VUE_APP_API_BASE_URL=/api \ No newline at end of file diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..166c0bc --- /dev/null +++ b/.env.development @@ -0,0 +1,3 @@ +NODE_ENV=development +VUE_APP_PREVIEW=true +VUE_APP_API_BASE_URL=/api \ No newline at end of file diff --git a/.env.preview b/.env.preview new file mode 100644 index 0000000..a9e44c8 --- /dev/null +++ b/.env.preview @@ -0,0 +1,3 @@ +NODE_ENV=production +VUE_APP_PREVIEW=true +VUE_APP_API_BASE_URL=/api \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js new file mode 100644 index 0000000..e926f87 --- /dev/null +++ b/.eslintrc.js @@ -0,0 +1,76 @@ +module.exports = { + root: true, + env: { + node: true + }, + 'extends': [ + 'plugin:vue/strongly-recommended', + '@vue/standard' + ], + rules: { + 'no-console': 'off', + 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', + 'generator-star-spacing': 'off', + 'no-mixed-operators': 0, + 'vue/max-attributes-per-line': [ + 2, + { + 'singleline': 5, + 'multiline': { + 'max': 1, + 'allowFirstLine': false + } + } + ], + 'vue/attribute-hyphenation': 0, + 'vue/html-self-closing': 0, + 'vue/component-name-in-template-casing': 0, + 'vue/html-closing-bracket-spacing': 0, + 'vue/singleline-html-element-content-newline': 0, + 'vue/no-unused-components': 0, + 'vue/multiline-html-element-content-newline': 0, + 'vue/no-use-v-if-with-v-for': 0, + 'vue/html-closing-bracket-newline': 0, + 'vue/no-parsing-error': 0, + 'no-tabs': 0, + 'quotes': [ + 2, + 'single', + { + 'avoidEscape': true, + 'allowTemplateLiterals': true + } + ], + 'semi': [ + 2, + 'never', + { + 'beforeStatementContinuationChars': 'never' + } + ], + 'no-delete-var': 2, + 'prefer-const': [ + 2, + { + 'ignoreReadBeforeAssign': false + } + ], + 'template-curly-spacing': 'off', + 'indent': 'off', + 'standard/no-callback-literal': 0 + }, + parserOptions: { + parser: 'babel-eslint' + }, + overrides: [ + { + files: [ + '**/__tests__/*.{j,t}s?(x)', + '**/tests/unit/**/*.spec.{j,t}s?(x)' + ], + env: { + jest: true + } + } + ] +} diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..ed223c7 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,5 @@ +{ + "rules": { + "space-before-function-paren": 0 + } +} diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e507319 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +public/* linguist-vendored \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6b1e5e6 --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +.DS_Store +node_modules +/dist + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* +package-lock.json +yarn.lock +.husky/.gitignore +dist.zip diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 0000000..bcffb34 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,4 @@ +{ + "*.js": "eslint --fix", + "*.{css,less}": "stylelint --fix" +} \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..b0e80f7 --- /dev/null +++ b/.prettierrc @@ -0,0 +1,6 @@ +{ + "printWidth": 120, + "semi": false, + "singleQuote": true, + "prettier.spaceBeforeFunctionParen": true +} diff --git a/.stylelintrc.js b/.stylelintrc.js new file mode 100644 index 0000000..412e214 --- /dev/null +++ b/.stylelintrc.js @@ -0,0 +1,102 @@ +module.exports = { + processors: [], + plugins: ['stylelint-order'], + extends: [ + 'stylelint-config-standard', + 'stylelint-config-css-modules' + ], + rules: { + 'selector-class-pattern': null, + 'string-quotes': 'single', // 单引号 + 'at-rule-empty-line-before': null, + 'at-rule-no-unknown': null, + 'at-rule-name-case': 'lower', // 指定@规则名的大小写 + 'length-zero-no-unit': true, // 禁止零长度的单位(可自动修复) + 'shorthand-property-no-redundant-values': true, // 简写属性 + 'number-leading-zero': 'never', // 小数不带0 + 'declaration-block-no-duplicate-properties': null, // 禁止声明快重复属性 + 'no-descending-specificity': null, // 禁止在具有较高优先级的选择器后出现被其覆盖的较低优先级的选择器。 + 'selector-max-id': 3, // 限制一个选择器中 ID 选择器的数量 + 'max-nesting-depth': 4, + 'indentation': [2, { // 指定缩进 warning 提醒 + 'severity': 'warning' + }], + 'order/properties-order': [ // 规则顺序 + 'position', + 'top', + 'right', + 'bottom', + 'left', + 'z-index', + 'display', + 'float', + 'width', + 'height', + 'max-width', + 'max-height', + 'min-width', + 'min-height', + 'padding', + 'padding-top', + 'padding-right', + 'padding-bottom', + 'padding-left', + 'margin', + 'margin-top', + 'margin-right', + 'margin-bottom', + 'margin-left', + 'margin-collapse', + 'margin-top-collapse', + 'margin-right-collapse', + 'margin-bottom-collapse', + 'margin-left-collapse', + 'overflow', + 'overflow-x', + 'overflow-y', + 'clip', + 'clear', + 'font', + 'font-family', + 'font-size', + 'font-smoothing', + 'osx-font-smoothing', + 'font-style', + 'font-weight', + 'line-height', + 'letter-spacing', + 'word-spacing', + 'color', + 'text-align', + 'text-decoration', + 'text-indent', + 'text-overflow', + 'text-rendering', + 'text-size-adjust', + 'text-shadow', + 'text-transform', + 'word-break', + 'word-wrap', + 'white-space', + 'vertical-align', + 'list-style', + 'list-style-type', + 'list-style-position', + 'list-style-image', + 'pointer-events', + 'cursor', + 'background', + 'background-color', + 'border', + 'border-radius', + 'content', + 'outline', + 'outline-offset', + 'opacity', + 'filter', + 'visibility', + 'size', + 'transform' + ] + } +} diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..a08bfcb --- /dev/null +++ b/.travis.yml @@ -0,0 +1,7 @@ +language: node_js +node_js: + - 10.15.0 +cache: yarn +script: + - yarn + - yarn run lint --no-fix && yarn run build diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3ebc1f5 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,6 @@ +FROM nginx + +RUN rm /etc/nginx/conf.d/default.conf + +ADD deploy/nginx.conf /etc/nginx/conf.d/default.conf +COPY dist/ /usr/share/nginx/html/ diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..66eef0b --- /dev/null +++ b/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 Anan Yang + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..eb88edf --- /dev/null +++ b/README.md @@ -0,0 +1,103 @@ +English | [简体中文](./README.zh-CN.md) + +
QldP$>6iYXHrDx`!r+7)n z &NzYMegO4L%UA!Mo}M9 zqhK2rT>l9ZquLb~-zW?jfPZzFt8Jw3`IYF+)a(L<|F&t{0FcR^Po4gRVM9X0UTRBN zyk8u$06BOx{2$zk8;V;ANGYnq(>?$l*bnL7l6xN9!7tuD<^~0SVE;Tm)T4XgVg9Fz zco5*1MvMm ww`y@$5$Rs5plXJ-9H;d-DOLeoEGcpoUN|DinS{0S`s0M1bK>VMqew(r^h zBMb6>!+Y?|y=rLR0N4+udsq?x5PL}fkCO*Y$Pd-;eRz-LN&MRX7#%Vw^&XsrZV$3V z_c=I8X!6TX_eB8A*{>Z+ YC-jrLc)e@OgI;4k_g#@&}4J?!nF zhx_g$nmKtmTDYm3*_uO3f7H`5cjttb9!%DOLaz2sj#kj}!=?hVbpLx<%H7G~SNYx) z06@#i`Vam?8PN^8qCjpydlfe*6XqZ7AUyD(WL)Tu^iWWg`I~MeD_18E=YNn8om_3K zY#c$39uCkt=(5`P+SMOu&@zUphr5$J$Pwgf>JGYh9zf@XGw2Ut)L+8)lzWb%gB1nz z@c(uH;XGXJb!7E*piTYZ+ wRYUC~WJM^(kl z$;tj+A@ZN(e+Z*kJGuHu+S^$D=_#yVomcpi46TV|0kSmpuy==MQ9MDe?*D^0@K5qT z#nH^Hq@C=YT>s`=oL~B- G`1j2|OkAo5F8X~DXB3*;J1gkd4g)=YfM#*(0gs_5 z`EOhudZqb|tN+H;f8*-EarNK0`fptQH?IC0SO1Nx|HjpS T6gC#3^m@Fi9IDRJAZr^1A6JmJkD89TkDa-o1--Z! zs)+c5Dpsf(R!bXucaW YnW_1m!q@+)XLG9qb+5guF%RA1Vkz^Y>(S zdWr`TcRNvfeN_z#cPKDuXX8%6#U{YU#mddiLSgA@>HzX`aSa5RinzHh8@N=+o zaza}%HMihlwcy|Y@d;R1@bGZ+)1y-S*>6*4Rn`Bw#Xm>D!GRsxDg}iIl%T3AB;#c6 z;Q(@USCkR^ C ziw1Qo)WPh34cfgq|KD%F8~Im0{_U>c?)q0A_*cTeXV-6c{VNarE8*X>>$ki9l?VQn z@bB66+g<<41OH0+_w4%Zu7Bl$e YpqS6! z;&dhM;iiW;U3j?r4VuCuLIX+>kr3eF5s;7(5s?rPkx`LRpc^tO>O*kuuk^pg>B1u* zAR{4Tp`v2_U&QIcoWY#I!9W9B{}ZPx4(SFAL#@1z(}i05$A)nK$`B$F4D$WEL;v7F zgP |S3FThk=n5Gc ze2rb{nojPm7Ie(7(?zl@j@F7Xn&gJ-vcM!H74xa#m7V0luVxxaS8zD1NY9<Ew&a zUP* UnehijUjcpYJPE@sf1y?+g0OD)~rz+9>sCRthk!myZ zpn#STDv!0x;o{ 5}A?`(CCF&VfmW)q%ejh7 heIy_`e?sUb$%)Irl=+c0T_1`OE6$ zf@gOzXjI6_qB8|RuL19)q}Azit20d4VhZ~h^LAW~9Qs-Df=qnfTA7?ZN%@$B97#hQ z4MZh<(}H$K14`DyV6C(~{BZ>YN+l&^trnKuCXcN8$H^wP9LJ9Dcmg!%6FNG0N-j#( z%w=?OvYel0Em*|t5*WrQRFR>*=$-o5j^JOw?!-YoB?X(3_^6&XHMc8f9vYDxwL>Wu z7XIu2wSGEuj%2%(f?41z0Bny~G!vb#CA`tAb&`1GyMvU^bS_^|!qx+3UMHt4s>Sk= z>H?C>?7mq*tr(P@M)7kHm}wcfG7o)ONvGLeog#*(qC{f;elZc)lZzsAiCb^m;3Edc zMSfZ%i=x@56jD4(!YVRzD=!>bXDnZ;xn02(HzlPTR8glgZT_eO&8}oAWdlDNAM>M^ zrVa>$g}xC#ngE5hWRr{7IklXIu?4SSyzZl-s2O;Idaa)ecmGK_+1Y$UIT5WjFxX~a zZ$F!*&;~CyBujo@3qU-hiPnsf36}V$i%-LSrNJ*$`{j(;R5ebwn-GX z;Tp#kRhv^wMdX{jWUE{N*Nmjmm*;t4c|vS(!-ZdydldY8rRW{HoEQ#E&99{BSli?L zFH{X_#s?I=K3lyhE(_^u+CmuHElQj#VO6Hl_MqL;n)EJPtXd(Elf^%E41brgeLDsB zoV0_d%17_@_+?NHU8Yul$+5DH)~shfMY)m)fG8{EgE7(T0IW@R*fdqGTm?P+=6WUh zyen22whC$HHQ>{jO^M^2-F0XPnuUEt=Rz_5FjQB%(r!~Jg~YpxfjH`-iw#!J4 4B>Z z@d{}|erBTbG+w=FjFh;xL5vzK=OW5?sRJ?$u{F0)wGusgLGAmjTXH!!6}767!J0EM z|3}t~2G3 @G0j*4pGgl=q zOj4c_r1}My?gAADI{CJ&_rcGvM#|0^usG}67#(mEb!nSg$eBjE%v*m7VK2s~;tQb? z^i_7~0 &K&fw9NTw3yM*Vl4q;!+nTU y zy;baQ2UBLb8a6ck*-P)H2Mh=dbM_q~lDeer9EvDWNMN;C5Coa9B^p#%Py&xn_PKav z $H3Q@qI<1#WKV7lu*xV-6Bu(XT=S`&F8K6s z$;_|Ev)SRt1u`i`%=DWv^?vIvqX8E#s+H7A=_XewCFco-EyIn=6CKEGsx*q)d1}kR zz3_tohOozEte(b+4PjO{-UMmYiL-0k*glb%Q{(w)-$~+JPB`QZR~OzZV%GM}$R~;5 zZQWIjDyub{Tm?~; O&1K!CV)mRtqS)~pZBX6^(m80)*@Ze`vf%k`HZINg*3~)GRJ(=DH}W#cr`yA z(yo;zc-<=`C3iMTnt7BI&(r+X!C3`5aOoNPJ#CE@V~QH4P3|EL&3AU6i+4?^nbZ2k z^zg`rhLnJ{#qedZTs^5i-URlF*Sem~j}*dpCJF6H4d^BKi8^rHBcRWYrW|CHE866? zkTqxIQqY?Fnv`LU(^m-%TN2-VzTC-6;@y&KuB73LkYtNXaETt|cc7iZKlA473se7M zRBTc%#dI8QqUeKbVSG{5E5?s6hdJW9Vxt}w cA25+i;L{s1KE*eZoBvP+c)){!gAYhhf& z{-KCC7aeZH!X1#wMqzxZ@%hUUf${!nX&RABZws$ME0r9dk$lLa{#ntiwGh`O52ps+ zdlD-l!byTaCdryJQq6%Bvf^U)FkIL{MYw+1J0AyGxZ1(S*HymyyqvPsb+fPBZz|~0 z;#X?GC-Wpu1z9ZbK7rFHkz$TohS_Ch` Y3ZpGm@9IBgiBn5eG?^9ItYyne z6OQo6I>w|-h8qprU}@!BZ@D`78XKO=>F_3cbvvMns8 Hk@aLT6&CD7L;6d`vRz$AT b9i>3Mg^T6as~Pd`u(0SFLq1z1SQx1Qi+4|1O^#Z!;w zHIMx?D_|eJM)5%!XDmi)tB*Y1%GW|wPpaSAsptq<@W&)P)vV6* 3)uxzC|!1r2B|P1(JvNM3?>N=393^U_(OSl& z`k&t>aFCh*IwLXYiV7{1b>mH_S=QyhF;ab)X_57}Y!tyPw?ko~z|(G*(FD1IRnvPS zLcs1b1c|n2=q}Uzd!#-H2C{X6T)jkTH>$mxnM#lEN>0m}bakvJp5TV+^3eHeKtq=v zej6dO% WE@n_EX60WmlhP&OAK2-6~=u@XG5!~lNp(~)~XzP3TrRS zq(!^y`(%SV@pyS+4)I%H(U$iWyGl%DJ`gdJgD>`rmOYY#t%5!&m&gli`3C>N6AbIL zr1?UMJ5?^%C&pRRBG_9&i&r8H<#lH)HI)c5f+3vh4CYT>e2}hhQF5V=(g}aWce}FW zH)Flc^%5C{3{kXCv^1gnQpiT@-OjKWQ`E5KNdyTmzU^rd-=L4u%($>m#iYATk *c$%V!UMg1KY>TFplIL^SQGnI!!PEXP<9M6fH+G z*{kLA=)_l_jj!yfnBW* UQZ9YM8(?|`1m50eYL4B85z4H<@Wl!K4Ux1 zJDPIoU|UWsh8KQj cp%LK*9V*WsM2kU409JhrmKg6w`S+jR+d7JBL~px^@ZW{U zAH?+iw5hpcR}$o&9@|PS+RPUS4n#oFy=oaWZP-EORcupqT?~Ho1X-S2&^P3aaHO~M zt%ui?`W}LT&o#`pby66q)Q4+{#0( <+prv@X=2naom0!c z-An=fg959q4^d8+Y%1zCkJuC)ddcDz+U?(V#P0mW1-$4Gf|Y9aAIxVFl+^s|L>&m3 z{pYH{!hq)tn+a>y^8oV9XVkZGA+Tj6Curk2RG&zBW715}6+Av3Vy=~JL>$NFZNW1z zsua#xeTyHqR|cYWB*sd;WHKjQi5f~5n6dcisKCzdvN|rzY#5HSRqujDQ!#+uRw T&nJ2Cl9JaJ`w= z!4CbgZB9KZp99vJ!q)OV&6Os+%4yH7P0^#cpr`9Wr`Zm6+u$w5_l!vf=L&a&zbYPb z@R6@EAdpM6>}hXHN%V0s1Sbq^nCK=y2`62)ckltKMnq8~@wAPx@?)&fs$uj6^gYA1 z{oo-z(4mxHAs3pSkCeR#AT?zqEt=O|VoN^MlKU|2{@q6Cwy-xj(T;4k3yVr}z$(Ln zxG$l2XZ#JEjq~MeZAEfZ58!Su4MD$(%479mXWS=}PbYe0FmQzx$F-Avh#ZYWs@PeI z#N^-ov`eP-N7z`g6R%R0nxUF*uo6q_@OwkZd3&c)JJ_elHH%g{oW`oN(8+FKNJMQ> zGBA#TpsK{9mvrr7-og0IGE?fc!ByEKab8vH3SfjBH)bU(L2000siCWxz```&S=uGI zWeIM?AYgK1>WCQMZa~>uJC;uhMk{(7P8*oQ(?fPc(^oy~D!BEE!P9M5N%AWnuAb9* zj8?#gODR*<*M#OJPlY1zpn+sF-qtR8R&L^S*t(}+1UB?rF`T*AmE@~2hu_W$U$ROV z;H?dfzKITvQ!d*FZoEBhW)uXKTQj8-It
9Q-k!^@qh#dLUNJYMRAwJ_#vi%zXoe&Sagzq-{?39ES0 zvuQqTTAGuv)bBxQZ9H=NwQU{muI(oPHyOCn2?r?;} ztyNz#Y`Vb;(dws=$i_dhF>=V !@p6FPEUo)&1MbX>|EbIa{D3B|2mIGY{ePno)K5l)rc1x=% FkQ_VYcR8I9X@ zQL&ToLVXYa$%0N*;`43hRJR4%zJ!}bj1xjB>Sq7aY)XvM(E@hqlWwzixUcy?wP}M2 z>M&TPKG!fg)AxCdF-;$KlvhX^KbMjLS-8#*OUaJ6h@ME?jdCJTkFF(e^DO8$s^$tD zMi0IaM?Ww~XwKSOE;=AkXn&a=fod)}{Fw@wJd&WLgaH$fPZ@?K9`k0VWZ)9aK%ie< zuJKgIdy|e==z8fxn|Q7H@gtXM1tqMdvXpsQ7=fZ_;{hRsyTrcM1MR3d@hj<_B6 Mc+w9(t`gud2MLrv6PEkfiUc}{(Z31IvdZK)IY{!ua@|2&~ zSPOH)m}uqu`0rFaeWq@EjJ!9L;pv_xW1V=TBMkv$I#wnxwRblXjJ?oZbFt@BtDD}3 zeoW@@u>4IXuf19i7c~fH2}YeuVfuAg)El0CFH{k^Nd= beGI`e($8! zHmDs~9JJra))TY|U3Zs8;?H_!qZE%OMuy|`Djx`cqe-rlmdg1gw4;@R|4D^3v324+ z3YDB!a~oivcVS#be`J}%1TrZ$ca<;Z!3{R bc1GPZ-KCRd8)D zHaoIQ)Sdlj<^2O5g;T0fYL+S1oybv%%c_m&e>#Iy|Atg0^OhyA7#QZVL3vD*P6nUb z1&le-Q6ui}MC*QMfH!}R@iS`P7#=@Jwf7w}0;#pnmvYjT_1(Cxqw )f_!aQQYS--P>rh0k{jZOX*ZZd$-$P3mtKNS$>VD_~%v@a^%HgO1?Sz1u%o;xbm zmS8A68Bs&ns?}c#Ad$;Sbr}DuV2vd;?KhLaZ<&_&1ogP#)MPDcV&0T~yV}+$mdyR9 zhl2$tGkQWnRoqrYIzycJ3?B*oZAZD`SeauK$!;LWSo7H9)*|1bzQWI>ib_Z;avS8$ zF*LhZv3*hj2G(zIha2`(wNo&D2GiPlP+a2XG0o3JJ8s5;U3wk$s53O$6`f@g0vlqT z3vYMR#kR{{wf0-%{fq!}92b_(`dDbl8){wg`=uHC)LRU*@Lcx>a 8K%6&~ITNiP%ho&*~V;@Ȇ~_mYlz55^9KP)hUklbsu17%qOvafHCep zv@w;K^E_uz$;{cLz=M^SK-N4%ors(cADeVtmSFt!4eT8S{kT{Ja}$;lhp6HuK~V=B zGly+vLoUS+K56mcDg)9!X=z>rF=CMdEPR&w%JUN9a_UKDscVvEZsBX==2tqUO4F7w zZV4G0NO)|}s~>QNp8Mp-8{F@6ogX}9$JZGST~Gs{A6z=c$SRRHt&?x%pzcf$?^>yM z1&bt9iHUbtntC2ECKJt9))JIIUJrdEL_kDb&W}LY2~KSSDS3mu=PzpqraM?07S;rs zu#% F5*GQ=FjCAXin12dFe$|?D5qD}(dO(hioUa95=IR< zb#scl2&eA$q?-IG8m&Qd#ja}`o{YuA6)oVr8*xUd_&K>p(O{|hwy5M>5f6KdP1$&v z< g#|A4eh!xhn^mG~=ZtWqQJfKnE{ctHIAxeA3n z0t+fHi49^SYd@@#q8-=zRnMDc|=Qmw;Dfyn6A1Ium5 $Tt=pql^;$4(kCingMA00W468R^@Pg@zVg$^;y-fm( zuUWPM?f@!I*_G2hyS?M~DCmVG?_TXLkv=` +%9VSe@o7Dr^bu%*qm_hw)m+^ubfIZpm6dE#&9O7 zFwZsp(McS>g6)w=`qbLnF1JYCvfE-@JNzP1eUxJu_|9;v7?m`}XV6 eYg#CUS}@iFhk6`3_giJs(+ zQFeWHA|^nF%VU#DZ+h{;p;Hw!+SjFBC2tkf qiIZd(KqfzGX&Qr^) zO)oKSqUmyDrw!Ey-E?rUuqWpVsC$(XlQAHG1(R?KGb}%$pfJ}6(NDZd3t+!DWo?0J z#&3nQ%&N>hv52t&wN|{mc|zb6P6{6chtP_|XWc`r9nat_Z~@g35?Fln0ldvudQ9y5 zBH=d!RhQY3=6XyFk7~z-rk`IaS8EmBl!V3Z7d4HD3=v3mE14dzds0(x$&v_9*XUSh zj04x7gW0>i--d)V?9sRS<=LIY7<(|+CZhgWc!BSsfOMW=eRFPTk~HGQr~m;_EJ=r= zxdg9+dica-W(Y&J$|saAzUk}#P(a!!)*fak K7h z!zu
^ z0a-Cdb#YdQvzjs>Kp*-{Pq(A>zAl!j=)!Rsn`b=gQr9CO=cv*iZZ (#yao1H$@O ?r=hfbblj|OiU?l?@s*|-|V zQ66UG=-X+sG!A`rxlkzod~i)*(Hs~JOaseOSF7^#e1sKyL?VAZyou0x;ao0%Lk!d( z@{!AAq8e)5Q0q6V^K5$x&csScnpW@WyvTWcI-5BfrJ_5UGes<=g&1U5`xeuBs}paw zHA-i?)Fl$rIF-KIp&4*z!jE4yU%s218yv4DPL2x~Py{rxcozRkK^=N29}H*KDtS@x z&UTG{HmgWxDq(IKyIyP%HEpwENNOkIGJ?PDgiJr!uFL1kO2rpmOUHVD>9i#7v`q4| zL%|Qc{>c=#r2|l?xf qkK`7nJ1i+%Rf1 yNOv4(Z& zsUZp6&Ae?6hTn)E^H)-5`N;|knzPg-6F>mpXS5UbrfpvqZN6UIT|HTzX?*qO 1}|3|svvgdIPrZ(k2EkjcFJO3ur~KCD}b zZBDub?l0VH?3}e>ymK(H9qhp1XC7GG{~?+VV*0XYB;B`RP(fSvHd_iUhmJt*uA)<+ zn0FIbx>Jh5Iu&s}ni4q$DTGSVBMh^#==ikKgDRbrs*hHL;`Al&b4Sl3D~fRul;qZ` zgb( %RC*)C+>HqlIi1qj9G;m##@N9G!l_gfMkv~jUQKb{fD#}Ha>4tN? zS{v##5hEgbPpKtCmtk&UTS=)!1#ClY<5t>e<{0e&z4zn0>UeX_h_{A2xuuMBWwZY7 z^X`o#FrS-%FJ@6|b-cA&wQY~4UeG6V``B6kJNs2Z%Jpz<7(AMBxe1eqDr4I#Q;eC> z%fEp6nOCSu2+Gfh>RICCc|{1=QAl=4a!@0`7ry&?TNIOHI$;>>riR4**i(pD`xIY1 zWWqtbal6uX!Xb_{EBi7)$bHX|v#@oW6hx6E@}s(`z+Ot%oqL4yP~d0no7O&1b4=SH zE{vG3wpkgN)vygrx!&Eap5D+zNw-ytVI%k~6Dx#+*=7DQLTfdRd=KqRAa=g3-T~^E zp?vKMzTxXn2Hk7U2M|Dya^z#I{X&ED7tKw&>D@-p-Ck1NIgB)vGML2qXeOE$IoA50 zV=-!5pS0) fPU1Fr~fgkwJPxM3ie%|e(=sL#l8=s8P3p03@8n-Y @kHGHV*M}ud-K*Ym^3Id2q7H(x;jE z=z&)e7Cs(9-;e#r&=O6hK1NmL-S&PE=d}mQ(AmDgMGB5gSnGN1(%8CXVD!@ES!1E` z^5Gee`S?QZ$}E6L3zy3ABZ~FnNISD*SN0>I>sT~nC%cMO@!3zf!DEcXG#xWN%S&;_ zk+
nlvel@Kh?E>Y7`|0qUYr=HXJvfX_}!bD z|8XMKw_0&kcb9h03@+xZplsgi5;^3Y`9R)C^J26V>caw|MRDeWx?>`u@4J{G<6fkp zR>fMJh3C&~ a-Gyn z47hHVW7O$W|Nh%sp3JMH_%LgeT|;=#_j>=S%=+Y`l`n7MnwYSlCxUWSO6ErEdAwwb zZ|~{MOJH$(l}RFU^c26-5C$EzZ8Tk_WiQI?k$rxOq$$~&H!Ae&?IxIiKGA~Hc{N=? zM7d-a)1fkgK~ T)f)vlA-ROaPMhKGfQFmRXIV@RoF3E3psZ^QgcgQWtrm@)N$BN+$MoWm&X+}}z= zM`WWRfMKDM&TQr6dWM&D$5x^VM#ZeXJzd$UFJuS+#7abnpH?v0D*4@&`EG*4270>d z%dsfS)#0c#l)W?plwwEG(r^k= EtnB=*6c5=RR=2r`c=uh>zAbvW? z-K|J=mt<8%5y^A6@Rj6kK&wlkYUKmcGo>X>Pgi-o|6tg`T3&Yo z%wCHoaM53$bW`g`?@LdmEr~)kc3WOvT|{;^J|fX!N=b{5*XR^cPk661BA-4~OUp#P ziVS{5QTfp%#6(it0_?BRv6A|Z{b^qRVGI`~Lzj^v;qrvUY00OiBRpxl=(xvGlYr)s znW4cwY8`j 1J%>7#4cira*wG+Ot3YIjwQIs@xk6&BRPu1y0M)7@}CJ%RVyQ%m{ zBuHBc0aV6)3*AttP@aq|lpa+{b(<9&+vC*23ta8Dh5*FMKb`!*$;b>Xt0@pXm1V%y zG9HzI?a6e2emTE8A@np lD4OKelsaNsr_-wkGAD5S3>aZ2a+F%zu5zhdj*-y(mf}SE5+QOI5|4$Y9ZJQ;(^{ zzD?w@Bh;X3B=L+$ot`d?nv7{u5 !fUMemu#AoU`(2D;IaNY7 8& zU8+6M_Jb~=|KLJD =ndgg7q6K}WIbg^7h2p-gmyIH&)YJt8UgA4;7!x&(E^ zQe_GXgkO1JlX`KV&H%JiKls>N5qv~(oAgY~I@=ba7Mba;a >6LC&AjW+Wz(yg3@HACzmAP$m-Q*l!N8%+el*dm9o)&Vbr&srU}QpRdgkzF2l8B zx3U~YQm+joSJDsMzx((m1n9Y5%~KEq&rBUR(9vCwxGiaprLouQ)}L;@);MG29b5C@ zcit}?oba Bau|@mHG+9_y&LyFdBO)taJAAcf)=<63;m}Hc8_NSOq4B|Xbx(? z9EyOtM7Zot%iFwGrWUgdp_?>?PGQPQs#i=cT g&@2jD=(*gGMtE@JKpWqqIUP3J%@GZg7b$qa>r@acoPwFPgyIy_^tbnQm4Lj zc-;wAqbW)VNO0|xCn#{0qA@jRfvr{d4%bfU{G3wf 3V}FPGh^7u?66Z&ik_=E-{^IFSUyoW_#C zfk3s_)s?Xpw&2}p2RE1lAi9}Z{QJQZ0OxFrVbxQPQy_lHk2Y@LzV3eYfF)GOkredP zi?xnbt$Eoi)Qv{rJonTamfKd-m+^|r NB5)Q E_j!O{1n z9ab$oaDw)6>U$&o`)lE>U+-Z&< oeRr5V+qZ`KCYJo3v z8X3oCDKi<- 2Jo-?S3M20^JKmAB{mv3GIYXOc{KdeYdl^8J1|F7a z)fL|OY-px_P9YcxQYFxNS JZ}An03~Ck z)zID@-m)Uarv`hLc^=`qs8F=~C{3`!^Nk{D+MN8Njpj|IZPUuJmuB!EQh0z4Z*~TD z=6i^aQ%OOn=5dmNBRBo84TH-5tWmk3dqx)~*UB>TTd};s>{YK%trumgZ_uSmHEJ4d zqQ6bl4>hBJ6@f}z7T2mTdV^O5Cl{vT*&5%$y0v2az-g|IDm5;3PR&PXF*Okmfw_O! z1HAv6v%`@m6k(^H0fL%U42+T4q+Kb$(mX|kD76A<*5|8u_LKUN$Z$c^A4|PP`3+_9 z!@Hn^N&mtBXipwtZS0Exa>vVO2(6wbPAV?{iX30l(=dRC)he&7SU#v QxHG1aF;Crc zdY>CLc7n1}i)kQ&!FPa=8i#Ktg-e9Rk@1!{Zk;LD7e4@C;$73@vJAituFR-qiki@g zD@m!3ebYIE=F{y8&5_Q-(Z?Ee{@dmU`j`t;U+S7T-JtBgPEs2tysE2nP9M{=3du;> zKwc}F6vy0}>SD*JZBe*4!}4d9p^7)&5=8|~uTW@e4)5#CWAigo1gpA+D#N~~XKTh* zxZl?if-JSc10(M`x1^sdicdxDTNj2F1`0*jj&qnZ1U2xpmr(QCWQvPtW~ZJ~@U zeo?W!27_&(NLun7pqGZ)RJmP;I+xh2aq~fWvxG*8%iSiW@NCjV*Q4ZUop~`*U)}VO z%#}BliXW= C7Wt@h*&Oz@;Q2uX$^*Fi;*?4E;Wap96MlDh4@!VwsbV zdcExkk>0bc_nC2Q6B^3YbYz)w;?p^R2Wq!@6X-70z~DY?hHP6@9KSoygE^-H+Gq7Q zva$&1A2nz5gRAKx_;g8t#e;P4;6YhVpBNFRMt!5f-5iZ9%@oam+VsxkA_8BYkhO`5)kWyd0q4McyqXfS^ zMN~7cY>PDS ~ZASlf{dUs63()pxu@A+0mC(q9qsoTYl_ZC{ml z$Ea(x-BUfMSLA-^%AnSm-|BH*2D>##9Xb8 z2^N?U=j7;x-%X@?b4Y`^7pk{ z!L=DYTsJQ%vklvW_FS}FT&@DKO<~&ghpv&PD2>)hCd#wwDa5i)!m6#6FHwhg{~Pa@ zpa8nAK1kdN0Yz6}V>9C2=*q>Q2$+LiC+>aw8NJ;=eym`NsKOayuG=-)FC;7Y LvPoR6?K1ghRD6}UePm=E zD`*72tp_xyaas}>I}^r(dsPz%tH*E2tN4KxE)+=52*bw$3s);6mYfF=shzg44*7Cn z5uv$K2$mBX{a$#Hrcuxc(xI#$-jzS^Cd+O@rtXY{)0a0XYmBNHCGJ&&V&J2`bR1G$ zGU1Trh?eFGL&&q=Rn&0_wMnAOilkCx#pNcS4K$h+OpiPQ_1V8H6Bsno>zUvHTEm#Z zD#c4!`ugy!q2#Lw@}YBR=1g+dEX{A0*_Rk=lWzjP{EX;v`Lq}7Xo4-f8UE*sQUZ>q z=j1^Yy{^j-TI1{S&s;S0=fI> {;t5zeCaxD=U-C^eDiqijFPvkz1yhNsN zq#g3kDIBC|&FMM}?U;_^P(t4gsK>R%H(r>~dB+mh6fq1E|K=9%A&?=OAGz_(=~FCd zJ__D}RpxEz?NNH;wE%HAs_gR0g#8Hq*%JSk3gnrRua`G8B>flocsphYRqEqnDVt~! z;qK&XHY}X|+CstUcR}z3@L!tBLN|FTs74q&S1Lvx6e@16o0fvs*eH0#4@zCS dbmxkJhMI*2Ha7v4dV2#l<6Es# zyKX Ne+F>R?x`Y->+~Cj4~Lmi9y2uijr}_8((#GkuglwYbyru~3U?6{`Hc`xIe_ zwy^%m6$p6$SWhVmQ=Sb3Smg%Na^nE^tJr-e7I{guD3>0AQutD|F1Z(q =BZ zfKYD}%3Otu#RvJ{Q^s4;=1im|lL%j4=}SRV+--& MekxwU4= z6(9qXL*1LOrVO8yS}E}OzyQ8NyVM)IxRhHFQKXh9rdz{oX+5}>gckuz`W4l|09QK@ z*^?i$YlT6FzQ`J&ZrmE@x`lCcQ|aHutIa>H75nX`aPKKel#mE)Vw!w0Qv=wFxfiNM z#Zk;KM4mt$rq}dp35>bfZB?b^d6JkIr6%g0R*;paKyol#^<(E7I~*K+Eo;((hj%!L z_uoTT|2U#e_G{;BY)l5mx-|UrZnUXRnsWDjgwW@xMxHRZ{cWm8As{vT Gz!Ym&wk-oRznF%Fb}I zTwiaDCY^-YJgnO9tqb9NMr;Sph&!Y}5v(<*&k^(&V>@HBHZ EsdqS?0(P^Bb)qG9eM;Mw1o>(j+pG^7MM;}apYoPZh`?k9?2%xjf$L=!)+RsV+$ zyvT#$W++fde>G49^7TP*bQOxBpXNwI_0;}j`HUv!lh?b7qQHjy$NY)a=O%wLh0zUd z;t$U_H%xic|AI1OL}H)QfYX=lXeeepvJkh7wn-E%o2_^%P{6ptWm3-Cxp*PbA)_kO z_w2O*{Nm0;uG`=3kFfnk$=M~Iz}HpBawb;=IWF>!+o`#lC)=$bce|JO?>~^@eTBTe zb;pWuc1=ynnw2XUW=}TZdyk0el9TL*)$m I785Z zLK$1~U1&9CTIenb-IdwBs)BMqOur;du^cWqnQf2am9FSK?I;|LX>8EY$RtnVq9bvu zRz{I$Cvz$SGkFpE84y#tsF}J%B-vT4?t|oqIb}4EYdP98oX&MV0-{QK)cI#T^XRr` zciHsLho#qz0Q}TZIP2|8J<`mW<>Au#F#%EB?bVlCzKHc1;&zrtK`msVDtNy*{$k9* zJyowXJY{>!%e^O!g;(4*4iq-qRfpf3|aAbgMJsTP698SK))zEMF^?W@Iknu@1n z+(MY@u6+64tA?_+uG+MlY;-xFCGfoAIsKnJC6PT`+_pqApYrz&y%`(NfjI`J23ZW5 z7dE%!+}fN$KC-gYnO?YaXqyE5FMEbyHnB!uz2XQ7JMSud|6Z62aMZxpJ|6OFfPJT= zY@!pwYA`arI)TUUduLg{OLL>uLxu@&&Z$Rhs0>+nz)^k6s~QGf-ru^MKeP}CKmSmz zihBPRKD@Q4To9JEHT>F3DTS90h=(AD5ptJV`jLJ2;`fh|H84@o%=NPMknQ#p I?HaK6s`hDUF`!-;L!q3n p zgh^Y9$?IM|o^QMS55nc`S)-R7w$D*~hR;zzVQ{+0oy!}ce7RcMwU7#HALEK5D&~#G z_W&$sQ*(2T4_R^mM7iia-M*)s(Z?3O0jaVUkeLB<-dp-abrcu+m%DL^dC>#yw^daK zRY8v)%yH{?9k_s$sX&-zeO1kTV0pLl3`SsinhU`2KMJ@1wgL)cEMuHn0_Djv gt}WPmCN0 z(0@?a?zTHjjb-ZQcM}Mq(%ZlNW*WlX%3@ H0DiT~zUi`y%S$+^7oGd_`5}6SiA|zUzG6 zBiCH=MXH#Y%Z-#AG(tf-Ms1pMkQt1X4(OQl+-?+@n+sE q+Z6j7(pVoSU`Z3A31Qe`7?ClVx{IrVx(W_f4Z4Y_eXZ9vDjj);d%&d$ zWd&8CEgY)USb_imlrn~RhLHp7IN~UI95N90)KNA)bcu#J0m-KGonhBdwl-s7!_||v zbkAO*<46S)YbnCP$!ypG^CPLNB6IV5nYbDY+LL95(7JL5+Qv3VZ&%ANpDp_($X4^# zI3H@nS8 dQIZ!k7J({ z_RQ9yYDxQ$%Cm0c59N`jKD$ZBtHWt`ZKu3~;`6dI%X%~GQfNH1!Id^^5GiiCrsQSn zXqdp@gE-+8&!jt5uBVEmPy6O^jpQv=F`Q9y#eHyQm2@Sh+E?xPxS!W?bMk7BcDv3C zo*tosB|Y4JE-Q`2PxIjm9Y^n#ItHqRK^8`_YTd2pUwl9sEGudjd#V*+ssB;25Dd=P z(>MsAEbr|e$}friLxBv@tG_ThxrJ;^t @@Bkz44U$Idt(%h4@bcsEnW z@?aE8P9C0|EPVGIyYeuvHy$ZrU$cqpu4Ho{N1*mk9H@Qr)tgdFxK04g#53&JWxows z;Z=$i`yBq(I%CO`xPZnD%P`Kq^yVZ$=Qn>1tOSDAi*HMMC>4pS7aMRBHBHCRmTJ9n z-3L-}LbDRU(#XzVm)<(`s#*_{$Zx1e22ebxrP3+{mNyFsI_8y8$N$%wjPoC0>7O}( z $%SF9z^>h%`d$@bG#%8m%PTcHG&H_JRSM`&%t)1d9Kho#^NKY+|4)^GIr1A% zRlI$tQHnp{AXhNsFGh~f{QTg)#Ep!KZnpM~JEh!}^Iwb%{rIWQc-@8D{(UI{tw%q) z>PI6%Y(JV*mxKyZckezIkq1>MsZMmAJ#ZE%hJ%?-oY^e|BA`Qlo58|7acZz-C<~%aG7t;mMo+1Q+#6eA+=xV14=L6 zZ0DNF_~t~HFUL2ikKnGb2*Av@6X$O)b8OpN&!_|Md_0zhv`3!LjBR}z-z#x+_Y6h5 z`jpH^P!CM5Ck;6emr;oa#R@s{`Q-Ua68C|PNy#M(Wym#*gd9_JvZ4)3o7{`?vN$ps zo4lL-PEkM!e0<8{HxH;E)|eh%Ge%-D!I`P&mf7is*dMb?-RwFDnLZyP69bIt* Dwg2_8&=G3up3XKkojkUFl+677=9+VNfYBoqTs)A$y+nf; z%*JJ)syt<-g%Z?+==12*S;AE5POF*))P4~yC`QVujC>mHfCTa% oXm*6&o_3N;kPpM1^Wv$WMmQ$YxLNrh3pFF4d>@&Jqz}!KrDcguo%gq_E#p}|{ z4XhdV;gf>xW(55@(34|fswj+~<6)&3}Z>$YuN{D7dU@4`^)K!&ta>y|X^Y{wkGP zMk9*ZIW2y}FhSf`%Sv8kEB)<2w)q}1k}=ge*rOTbZ|!Ax5jrD(_V{R)aVF{^$-zmZ z@5N|P2R8xJ!LzNj-&G^|N-7MBH{vL?PpcIUBS+uuRH~Q-UdV&EJC`b{otT~>cWf}d zcE*GRJ!(StVcBp=t}d^uTjhta9I+FNmJ^$>S5~F;8L_#uXI_zf7=fW51w1G$B|v~P z>)cBg&52bY%ZAn|<-JHf`*cf$2>cKY?V307E2qf{RGHSqwtOu-ms|_=TF6!KmwTWK z8{BKvsaIIQ`-x9HlIv;}TVx23CEOXJ)p-_5WPHpsIa@jz<$TG?aByES^k3i9zc=dx zG+azfOpwkss{M1B8;Z62&TbfKw>mn+lol6ZC>C{93c$5w3beOma%ioASC4xpElq0E z^mYOIv}fiXE}WFspOZ~iycQwj9U?*nZGSQDj-{EL($nVI ;=dkm+J|@D z#WnqDb^FbQJ_{KOu8Z_IvEc2_*b1<%^Su<(xTv!nD$A3)uC}=sqgVZlAw5VoH3d&? zgZTVFq*Bf_$*92y*(dnGIoTxZ=2vs@5+I?eh4S75E7`tW)dxuYv~bC4dJ0zffz3!J z|CknErugjyAqMO7atwjqRin<7D)}3tF#ocgCVn*CJ1C!9&n+pY{6%!w<(FOpm5Nw4 zm1J7;=oJW+|0k-5VpRfPP}`fI4zsm`daWm%Tyt$p_Ci&w1Ij3YX +eR~!Hr=T9>pJ_Kk`{@lj?o6G=(^vkkmb6u z(S?Wd+d0S}yDuu$& G!Qc1oBXiX`szY6x2 zdx4nCc6Pk+ZX#Z57~LdL0Hu*We&lvWg#{1VS4hd~AdJ}0$;X%LI$=e=YomFtpnm}Z z0j2b5gtZP%qODw->+KZOWI&v+g=ew*zQ+_lG$a OG+2b*Lr61j=PUsuw z#w9BB9t`01N1?DQx4iu)i)!YH)oXWDA8+3f740Pl{=DPN_q{M2Q_`3^6n}fo#UO7i z;U-XgK<=iOm6-m@gmR1z(n!YIhocs!leAXDmzC~U{n+6^17D*B14`mkWgh(mML_!2 z8*FGLf+2}`+o!6FB~NdX`+ odBJH1n6W182Dh%`(c|k*|s5Q ze)Sx4nCCF{6c3LHwxK(38BZ>&Wa2d_nlY{xn)lv=@v*&MQUF45>fvj$boP9#jcK=3 z{$kwoJ?j4>9w2|F=I@mTHH4Q4%{>y8Yd`mEjcW2W<1hBd&4iQf8XR62u%H}|40@3Q z6F*uDNfDo&RQGwp%n}%Ff482`Qz1F`Q46*Vb>SuF2KK2DDwM$ES(w1c{|s{xxd+xR zQKj?oP9p_vCnfr4eHNn3UZY(Pq{#<_vrIcJpm^s=XSjKN*eMkEuA=_~{r~^2DNzKr zANeD&!f_G1)uUkvI3uNI-X`&N&iFW1%MfMnUknU`_2!Ui8Xvq}eu;>q ;lw_8+)v6YT%T~QNz;MhhwVAPD=nwZcL@H ?=6t66wq^MJ=wc=53qcK2*PO5NMZ%0ap+X(DhcQj`Y`VTWUS zCLJFo73 )Nlb&8RQNi!f mfbX=6rXw3nn388>0*P1ReToJD6pZ1Sh(@Gkmmk`IwYb&Z%?`_A%6U1E9;x3 z87~r$()M0&YDu*&xueZ0cD@Wh{aS3?>}g-wj ITlrTOG{-G&`pQ(TqBa_km#&~e^_WOfJl8}A+g$G$0aa!zHaC~R^XQrEY z_b2oIA4$)DJ;#hN__#&g816s;=NUyjd;*0b @tIF+!GIiaDlW?672D z R}d+}X&is%CC6<4>!*Ougt0A9)uhk~Ncge;!Y^ z$u=@$^9)Motd9XZIlvDKv$8y?bdj6(qw%jK)2B*}p)dEtI#Sz6LRhS1gs;nTp)sQu zl>qw;)~~hJ(FgwohrRKiRuzD9%|lg`wap0Zaid#!Tc$PA_o(vr5Nb=L%iO#n|NTD+ z4tY#*Ab<5=8;~dhw`Nf e>4&*L|q z%3g1Oj+5Nj*< 2g>>&* ; zoA-;!N-Lgr7EVi(TPoU_DXXS!rGHy!yv69-@0_rh;~rz>#~?F5{MB{k&o;A(m?Yxh zRo`8+Xh&>N_gfh@gBz*-$(-Ro6v59qZ5M?a&-V1=dS$qD$9c#vpIgx3=65PoBOEgm zVM`SDsmdejm bUOlC$Mqc0s^*qvi4iiLW{Co&Gj8HbxGxgDFe%AN& zq`HKZv-$~LNVG2gOtik$phYYNEflMZUS}S`jhDc>QCdEy^-g#F8(^EkFp*j<;-bfh zg|~z#<4X@S&vsR-q=*_{+<;Oa1@IZy*U~7N8R-IGVE$a9g5c2zkQ<|FpZ1MLK1~ws zBiUaezsf~l#XS8ibpBKtm&4hCbqB4N&)?-~SSqXmmNYC?e0Xtd5g8Jepp+EeHGo2M z=zMbxlPd+&z1UPV@DtP2F+z|Ge=$DzpW=uymUGnLT-#9>I}*gzu=2`D(mgMN9~`{? zt>fkBr 8o{TsWX`SqgRCNY^IMn<&lhL>IAI1GvC2-UTCmQfL?bITaFf1qaD%IweahjF ztP2F8PE~oB_4xP6FOs#B|M&Twet3STR0Yy`mvdrU6}3%2a{#L1ARHDhC*^9>xYjNU z!F0A`o-?^6WJKf*3I8+fqj5993fl+rXBW@ZjrjlF--!t^OoC1H `9y 0De<_fVbZx>azJNk_02i zKHbxP1Q`R58YR+X6eO5PGTA~a8Gk3Jn%V7)h7*{Y dG zgZ-13@B~#tq?|8YT(16Xk%F7thv~gxCUU+x>Gh2^IlFphfs@$!`8+Kn;w2FdxQVNX z?+fKPx0hDjlKygR6)PJC9$~A&&^L99DlVI#sn(^BbP!l=_A>T^(*T{h2h>PG0^CwF zDM2PgE&8V*e>y`#wKtkA@&gHD2)}tZ8$T5LShRW%zg8G4Zu%~*ff$H>IDad`J;Ny- z>(ra5WPv3EQPV(W$3q_`inmdJ=y{KXWG2mh-hRDAWW8O3*xGuRFS7Tu15SLjc(&>h zD;|}Z63c1$refeocJytj@}{!Ub=b0&79ul=RYgZ%b nnFm z!kA65;75={XvnZwrOCkI^vbc(cuh&B9cl4M@^=EIM04_tPqCPUR;;LkR~#!%9ln&) zQsv`sd1%-7PfhSAK3!cWLuhOCF7`QY3d1Y)w{P~*_O`mJD1Is3O7sS1{AY6(zufUr z U$dF%g3iJc5Q^e;$^HORn)*#vov zqdL1}%+8kO>!rPVZ)nTH`@0cLAu#}Z?5Z3UrHUi OC{6&wR>^!OzZqCHW$!3U z(gS)j2PHJGh_&E-WC!NGI6+~H7Q@5{6@uWFBKoI1b;UkB{K#Qe9NKCJFi_1nE^Al; zLy(w{u)6=x{xsEkMAIU$S)?rA)?D%IW?vI%(>YFJ2R{JEs@Tm}k8Ug&hJ7?M9I$@k ziYGm$DP0Q%fA;r`OM}j1M@klAt5_&Ap#{D$!B5vXf7-YT(sP#kVEC)fRPEbY8~XU< z6+gEil{mM}Hin=5;&8aePitXUD!WxL+x9S~4hi`-o?X577vrrj_G=UrH#9TjCuDmb z%lA2Z&IDQC51bD(#6@e*K#n#f8GiL(%dXU62D$i3+75W8V{sY@XT? H8DyE~Y`GvynZk0BZrS-oUBjwjY4{wNur$yF0vO6E!NI=PJXrh#V`240{L%!>^?lUIsP5t-8J06PkK_r0Hr48vj$|$GA<(lA z1NqQw>($%mVrEON>@o9rY|GIq8DK*@5&N3tst3r0*2q8+k?f{^P=)Ts-*@ g?GWXY3EbCAuZQW5TmKO}dx1{nMU?E8PO8 z=Hbp{xmk0r?YTrXqS7xdfcozn7tJ<8!Q8>T)0HGP na;L417Zq5A$oZHUb}0ud-dyQ-FvytL{$}aoDcK_2A3>+#t VYzpj`oS?I ztZ2`8+k3RWQmNV}dqCD;hjPiT&MwS}QflgqC1>UlJt#e 5vNjY{Sw2D}9yDES8UzT<)bv&<|wzSn@~3BIUNDoRG#8}I!Tc2@Bl zT6|hR5o~CUo)twFuq=b8R>W9Buq*0~p+o6tDxDGa7BTF5LseR0;>a$Ik0Ww|{C6@o z%1qr|RFR@BFeYQB_}$s(#zOJxPJm020QGA13xRt;?bz71RUoTvYvEbIh?#*aShc#L zCjn?YNBE(|ilxDojptNWYqvw;3edjlYOt2VNKeki-Des8(aZ`!Tq;^wYw7k=u_ Sttd z`*_o d3nPxb2df+NmKsl*5D9*- z)A~&WkK4z~rfmPirQ>gWFCj})I;!R$0>=gpNiwbjtA$>O+L WNB>&~EFadQ#lswQ4e8Z19x}d7Cg3;{>{|Y^&^pj#YE)7Sdh>9R@`}DdR zw1W4;NX?nprqj;EOXt1DK5f1 TF`~&8^ZZZShz93bf|J5 z5%T||CFPNT2RZ_?X|z!t#hdDWs^iq*Y^YZqx{;R<2BX*Hyz%!hW5V&3;{>qwroX9} zzK#I%nHRWCyA)(8SSCALYj_!c&urRq!YSEb3h^jpT|`$G>-+ZiW^$^szo7Mqbh(A7 zj()G|1>?L!v{ybcoiq-rHYJ_K-(02(p!w5f=t_Md8L4h%*%^5&nS61aMs~zBtrb_J zDG>I3_$G+Ri)%#$aZD-qfxyKZuiVek+&_8fQ&7M>tz%YK>l*x*K@$YyyYL<=y7 9J2$d}*12p3mw+Jf zliK@10rlDn*Y#l;FhOO$#4lP{n5kJnM(^`R
1lScwX zVbQd&*k}S%t@Io9_Vm=%B?-TKfP1ojqr`>>xFsKNJV+h3`r6>r%RxygAUE-s1ug(r zDhiwgW5}DtbUq4lT7+T5h #Q(v~oGM7zQ< z4OvURh<2a$q g*{C83{P5cCy58F2*@Lq og*ccwXdd9$^a8iUFLY-)x|{^eFg z3?Hf3w-)C$`1ue+h=ZUk&ANVD%r>9-K3*7*wz-`O_gfEtcMQ%4u=Hl0eO_;k6|Zl{ z|3lHHnL+NDtFe9-n$}bG=W9i#u0{d(lZ!Q!oCav2_*wqeM*n>rfwa+8t$YdAI41nI zd7v&^Knf2B_vB`1<}r20NI`02W-Y368%T~?eqQqBHo?3O{-@F=J!RSs=_YE)1QMie zcsg?4?DN{1YpQ{tY#=o%QJXZJ-06W=&KlbL{V7>vSYcG!QM#8v!wX)6 )KOOrwW)=sa`jc z7D_-9fkqwkvnhY|IzCCXnkkJOYe(!+<_CsQ9sMEy4*Tj?t1?s7Tq$wEOQTF)ZbYDB z_DMLyZ`D96CP4~XPy5(Ox&XIP&vA2&oe%A){ZqFFrUKD*(
<+P(2tESdr0}?gB_IHY76;nvkxflOr!qNdp|a&fV^r zeg}te`^0LCH+dcS@D_19J=|zzKL=iSt{e;wD%l=q@b#~^W<>$MDxYis1x|jNr))$n z4szo2%x0$52P=_1#~E$66#g}inqnSG0xBlzdoP%4P*%SaW9@X+XJqwR%dmq#fxuAj zh$yg=_4ZH%>Ef6Q!g`(Q#B2aR(S0*~E-^-1buv*E7vye{ZhXGyhFdb988vc5*8 zCeH2ii(AyZ*LRa9;^$ak=Ut~XTx_)(@dJlpdQ$kJX#Tfyhh^D$F-Fm!@|iOYZh@k{ zacY?k0$Q8q(f~(mA_=ee FiK}3Bn zziTv8qvLAIF?mA|jjU{cPk!i&XcNRMPeAT=6N!>(52qz30$)bYC_a1g7b99&JN9}$ z&}1HBLFQD>d9kwl(lkaLvr}zrBI`U#Y_x;5{2SJn}TH1RgOu;XHYO)Zx=ueJ}0N z_F_!(tw{Ss^?_ >xYI;0LA38iV3_S`?v@8YgqN_HMRHQyHC6EW@m0t zmoBj>cZsJIK6kG1sS3kqlBf82XW!J$*=>#NYdG0DKE^!)4byoeJ*)^aaA(RH%k(LX z&2^v>y8`UoJ2hmZv@(ognpZV~CpWZ4o{)3?S&Fc e2a4X8z5x+TdxX+XI& zaw^6G)jZ6+%fSHGr00Sq SW!K 4n^# zR&RWt#S5A(UB9LAY=IA_tnp8Ob*X(~^hPrM(0(=K8tiz;(J^h}WbN$#lx?hNw4EmP z{$|lLJ2HVZyKI9o_|a9Vp@d8!BM~_gS8} z3SIxgyTcmPL5&}*-C8l0NEw9lOcB;YU (kQZ@ui2I zrIQNe21 W9 zgdAA$_G?@5+nJR?QM-76wAZsS?$s8OZDwL%g0_Ycl{AE)MrzCw;UKxD`(jZr&!S#2 zLCsrW;pS(%+EizW<1u5YpKeV{y`h8hYoBf34ClT&W_!4AbMS*}Pn-~_#-`t*hUJXL zS8q`dD$DV$m;ThptDx|!dv^1#Ri;ra{{$#I8mgOD8rNP1bvmW7OpbMKI(}7XU$N+s zSpuD+TNp?!Tx%nmt)Ld|QO`0doqA(7r=+O$i_V8N>SXuDV^A95-j`RIbiq7s`Kg`0 ziQaW@u`krP{Q=}mMlNDF94+9g!N*11S_pB9)u14Ew*92cBH6M_cWF5Fb#9%NMn#z7 zsP=~~6+3;>5D(aAlZ8_r4iU?Vs~{ruehU9=oxFCf6 (s%t(?h zE6QIGxFtfs$Up`_b4HipJJwoWf0D~Uv#noPDM5)-JeuHj0*$vXVee6&gS$}@I>x5! zHyKFIAM)^f$h@v_$e;1gc-z?~muyTUCMlD-YQqZ#g1FrtLtu^JqY-TtcJ&W7u6LTd z{zF}IypigQY>X7eyMn(!3ja9p9-Z2|PYo*#d T!Ah N_b|cS)*gPi=@affC%&I7KYNiAiJ>NqgY}QRE3T5eZ@jR4>OmRm45aP{0qN}SY z>K=YKb&2``FAwU3!&vOtZ7bK|Ps}J@RTrz_Rjegl?8;lv5>~l-=leZifrT82-l?hh z&srU=P>umqUCpuiH*Sk+pp0lscXYFtK7Yf5#p(cO3w~21W?#HYX~#02ocWGY*Sl$( zpn5C9F-}Qk{HPmU1W!kL(lj|sKG8xfva(^96L?!<8rF_6sR0wl?7P^jZRDHUB}lw| ze48k<%T;w#d`lHAesUA0zOnV+ze1&r1qSf9h^W0iHY2hgMVPgqEvd4nXmh5yFFIG0 zJ{zL A;cLX2A07;(a12(Hfe&Ar~fT^M?p1mlIJx42^_3-nt d# zs5+zNoQj#*y8HY-H-uz -U0G%O0dB7|5eIlnt{_( ~thl;@+7<+C{pzM|`gHh$~p+ zfD~DWN~tUKtO^OYxO7*m)(VYwiw_zaSFY%rQV_+{R=`697$;~{3UP=%D|{h8$Wc-{ zlDrI$j*UXRV?F>rF^&~G5l7)3t74oU!;13Cya_FJK+W2=-r95(;+(BJDFeib=&Nk= z)PA{6PcG5c=w&0=v#qt7ECh1C+U3Vyab}f(D1Fey9Hj$fuo=Zgh~8%TWH&;_sPt5r zpum3+n}wSJP>5rpIGyCNB|Ut~a)+|iF;t3^x$4N`tsQvCXXe6Zw{cZ^W#2w;Ur?Ch z29!K-C~@$9v2avrKN87&vwAnYDY;q4Q&Vjx@{u-Kxc+snI=a *uhn`Nm|bo^lA8d^SLjX% znEC38WhEu@+q%}wm?||kv)Y+3QIKCp2+ebnmHA5JbItOM7$V DHjT zUaivsG^~6GV`5AlJAT)q9-;J&8SMU?F!a2haw&rSX#Yg*a4H|ml`WpcV$$8#I&h?O zyj V9GAY*5b$Z8kK*ew7Ib->({e2xRPh06-&j@5l}wl;I4i;w`9M$?|V6TdUL`xKjcZ z#Fvt|_@ogOcq; s{Rb|N`~0}GXc zkX4%2Ql(=yRm6(!xWV(&3`9(H8Z|&eT`aH8VI@yx91OMReN|&D0aI#e6AGNg|F|&- zcIcZe8Ck8(-C9AA kD60Fp3C0 z+6L)tyoryK<>^);alnLkRI1xR lO}wmU?bX?>C~iUt1G&!T=nbtBnc~tZ zSS~}3Yo548$V>8AG8ZFT1hz)H5BgTeTcpO$S3Dm{En2$N5@kCQ<2PTyxz))XQ;*Cn zy=qo`aWR#3 a)fn>f}- %eggQ~=vdUjhWwA&6bU_&tEzn1 zsi;(Rjk$y?Eg%p| ZXI$;q z$_CoMmG0{t`34OCNP9x%mjC_8UaBk4rkA^H6WRJCi-ZZJ6+g{O`L)_*l$mS4eK - +FMXz?#Mh=wu+CM(LEfC2XFg1{dCV&s^yB{k+(0A0xkRt) zRhBoaD)U8ISkxm5
dm@oC#a+tdR(wK|nYo(GP~M(5Hkw)X>g>Ln+ yh-k>DP7Xp3rS={-bve>m;7fairwbGGyfz%RUHc z_E_-Fw(z4g2o}(d#F6Ez@cVlG!gK8E_p_r#O@OV3J(%8LB6exmsW%cPV)52IKgub2 zC%nbGCbDF_snVDA8lh z)LcTOr)-w7%AF`4nK_rs>+`3>BkxvhO3SPB6U0jHoc{op#`}HNJ1bmK&65kpLxli@ zn^mfe@=b}>+!~aTR;nnIF?{-i`F1&dE#>iKed${EDhiMb^Ac7 -`Dol4vJg8bwwo9gc?xby?WZUTa|mE!yFOx7w(;5_PLsp1R&FY596DL6 zgvRnup&M`q0nuCo(4K_RQfN2|f=_M*K_g0qO$eyMx|$JDc!Km$DtcVChe@cRH84LB z<$Ki37cbuJJo55W5zwY!Z73dhoNWEmOvb9lCq&th=M|Bcz{6F%HX4&LcK)>?wvv4g zuC!yk%PU0T-xKrFTYns2jq+WV{{Vy7v@qf>I>JisYWzf;R8rQy<5vw8E$Zn{dKt<% zR#=Xi>sH82v>IXM++D3Vx^L3zfFtSz3brVyD))SQNXwD8PF#_`id5 )Lh{M5P%m03Q?8ID~fzke{^K)#H;a${>?v1v2ilK?=bvUjd{+; zE)rdi^Ccjq#GMZdipHH8Cm6>zV8Ov5dOL%kGnXV^*^Iqom3F8#9^Y=8j?H%lN3Tzt zm$cESSyi@%biv%9--$n(aVi!{q^(FFR#aA&PwN#{IjwrlHPfhfy{S1)PRVK%>(0Y; z{{S8;+#~hbO;UQMUOF>Z4k_lpin6j#1NnC-!(uZD;)P@;pt_|Fi=n01_Ng_U>QhMd zn>@Qo_jL a}Qly;-AoLojwqXKuKL{nckis(VSK-s^E1QOIzb6`{8>z^*J?4)UG<{wvw!5zx z?y|GSvMN1JyM)hS`HvYNGlZDj+-#)pW%ka8pn?sGR1S(tfKpZ6P`zwYO&qC0QFLe{ zRw#Ku3|oj#6;)eEx{F|3w>a|0FQ)mttXKlqN@P5S)}i%MP0yHBKB5}1$>@ws-;5Em z7i*I6IWA&(K!iRSFd>C?DcL~^9#povT(a{TVZ$}60!eS;=P_$PB?pxtD#zXN&HMDr zbfr%|0yXPG1um_clw%Vsl;o~i$L*gmJ(bLv&?20sUE?Lfhb6Wg2rej;r)gF6tq{ji zbI8)6yr0Vax1D4)G81IjcyG26ml19S2E-3Vt9rtYWU|RRg9Dt|$VbLZ#pXF^T&Yr& zRJKLMgNpAd0^ic7b0gbjr2ZvCgrU-k);T&E(D3<~nYe;nMG>yoT2_uWy92dA6VPr5 zJ5)Q#B_tYRNtxwT$*1A**=CD# 13o;}qID0z)l#WEC{&=#0EoDjTsRhGt& zT05kB+iCiX;J>n~9;&U;YNx4b4#LT>UyQBjxk}PSl$8!CQcj?bkZS7WRimBrEF{3o zH1b87k`*0&TfpAgK7}XGPfqEKgQ_`~Ho#6tEr`UBlGlu> GL)gYMI@s&tfquO1#(Q+H84dNOVsQ1fp9n_zodD0ESSMAgAi60-@D% zIw*rNr% zhT!!--IwKHILs08h70!5%p T^xDSvpAXfNk;Ly z1(jRNTIh3WL&D{%cS$@_!Qg1!EScbT-862DO!Pf&o)m73QW~e~$|bjou1GZ10*+(> z F|^2rs36&`zx%-bIiXB znPjO-vvIM}?tY0bKBat#O*@BIY-7 $Pnh|687G5rQ5ETvf{xJJP3*nT*HY|! zrj?c(*(1HB8)n=&H*wCI)g|pWkfS*?wISBaP*G( 5-6@;gOJ-p=Cb${bdo*Iuf5{0V%Aq#;HefZ#! jKc1x6t z?LO4F?8{{CW%MP+)z+1ON6%YT)kJAxk1s67=lPA3WKGA$bpx$TIP+^hV6;|jitnh> zpOtl#^UC)uT$eNoz~-2cPtjn?ZN(oag6h1~sd{>t$Uiq)XG8cnJbqDkI_1QS^!b@L zf{n=WT`i$E`mMHsS;|TK4Q5!60aUD-4#Vm=#JP_Tijm_-a>#ca*mxvb;h76niRrfL zq+qvOXGycE#8#D*8Er~Rl2V`wNU;Y{L8{c16BQ?wW#F=|a~C4Ih%%p6{FW8MQ;(W> z6R0A_Jn7}Ef<
E)TZEqCe&SP0sMAgY z8&1a35|N+@78NCuC{1?2>rcjt$mE|D8jT|#1iaE0X{aQq0&E*`Tzs|E!4 TL~?eRj%uRHl16}P<2_%9&-9J$=1xCOT?2h; zk5$W;dDt6RARdF$Qqh!h^{O;VV4Q|J?itXOBjhb*F5SmcI3>_Hj-%@*qpGHa)W!2o z?3O*`r5+YRn<%oQs$D_egMO5iCqvUrS5zGfGnO>!a+%DQVXKruj>{2=)4rsc4i3wO zB?hXz(sElV@ixCKQs@5wg3l<&OITcf;6E9JysP~;e-U3QjcLQ^LNj{bSX(VEc>G+s z4U4+dYf~vc)0VOm=T(I=Zi%sQRdg~uyp+d(DDnwYOs$MuWuBIC%>*Cz%XamS3h%qS z=4_SH@9+6gu+B|0dA}b3cZM~GatcpJitsEo@_3ZFy3H IskPz?4~M0 z58=#D< MloQ@?DF5@;s-y*AKEbcaX z9Nr^@Q@m`<)9pCI%WkBlW1!bkGE!AX4smgGWJ*?*Vzn4oZF=g&?+sIy;Z{h#@e S$23PVnt?d%Qagxn@FSwU-y6Y8dCDiI z;CSfns7Td6GBjrQtzyT32ISWoIOQi~c4d+=RcsL>FXEo=iRcxw96dELPl>5mNm9CL z+msXaDoB?}>8d!FQX~t%8m$X&6CmEG%O*^P6rhvS!j#bT&Q+C^g!9DCB}#_DBx({H zl_+c4Z>2X1yEOfk*YGer`y@zznA{5QJf`8aezUB!(nsqo)1avb(luU4#zw|O%=4~B zbi}DmVWY%~!U_B}xaRo^+&XL&jXLO1Su-~N%1hodQ*gqP`%S-h#6OYFwT)MX%Vu6t zNGp#CzBavrmPPia=GXR*bvIRP%auV|@0jPq8=K}_=I`OxE`-BtJvn~&n#nZU 8MCbKpFroRAzL `QkI~LK7!}$J)Pq@>4L8X2xKz1by zN_^DlX+rJoC_J$bow;&pHcW)e$Dg#~Q6WDg3Z-OMU8|RIq7TZ~Q}=tw`Skcp=9qwf z7FP=FhHs_ajD<9^Jj!p;N~N0UCcAo0i|~$XQh5&)^Fv}BY`h!#A@kz_<_i>>RVGBO zCb@=lr^G&8<@bLtdBx1i@h~BzJo0q7-T|@!zqM+s!sI&?sLoA-&t&eks4kHn z`)k0^UW1!(AXxwb$4xb N`zq#L7t=kK&Agh#2&r z=_Y~tth%q!U0g5Bxok4EW@0h&!dGkB_1c3mP9~-syV3~Oo?>VunJuC`h9n@W6tsA9 zyg%NgB<@3~>sv|zY4TP~_>|%iZ8NFz4q 9f`Jt0Zjpn5{9 znH5x5BBYH{S49Pp$Tv+10x?|C;Wr)0Dj^GK5*BpsjZ_b1g)%DR;&C_*y3Z%(XE;1J z@(oGJvu!k&aDnAdchZ_fDzUfES$CV|N0BaSN4VEViinZfWwEslB`E`{z-e3JsHkIZ zpw4EN(=pJuzulTqmmrRYp^qB>0IZY`Ju54s<*;rgb3Kn`=vau1$QxxX9z3t($R*c* zZAOy?NTXZ3uq%^S?^EXUBDGAMf*EM_#b i z*f08DTKAo0jR2&`q)QzXv8Vsk`@MCc8011~=vx@7u|`sv4T)&j>TlGpk>sai$l~l} z%Zf8pW?p_V_@t-;<0IMwfbA94#g$8};O61wk4vCoHn=slBOOL5RvK{Vt0YeG63(5K zbc)ojvUpQbR?6xo^u$)8PNs%gGVFRp%`jnz&bUCjiMLs-6G-0)Fq2Cr)tX4t7F%sz znnOdBizz3CDWS=epwiiN%T0sRNn_$?`M;SLhh{t&2}{|j?gpW <7rA$#8a@Vw6 BZBqM_dr&MWS38c#=&a(K1O2+myqgY!^4EVm&izRT$h|B zOvPzOV`^}ZSdg2cv8ukRX&5HmcYRWI{oY#(=Yq4AiBtEvZ8w~?hKC6yDp7fR&POqk ze^(t$JM7$TqI^(xq<2yoS6w!VORDmHT)l@nb8UMfy8d1#TjZFoMdf@$Z>Ma54UZ8g zh*4}4e?3e+E2zPlt@loIMlVvuBgInK)C NL+K0fSTMMsI10Fag2`&Q41_I6a`W~rrHX|H)(o9`YjKPZIVc-)Lh z1obwzLk^!aZmO@5Sw52Zo!aPs5>JdSvk#Z!XWUv_On(w9>L%A_b4q9ATANqhq)Be7 z^B0Gj$miU*&D_b7#!15BCa(+25T-tmrb3&aC6^s9u${)mmcvdqJH7QMO%qd#6Q4p) z=DmiDkxKfuxpmwnb{KENVF_(Fy0(j4^`5eN>uX6X6oND#4k5KCo*S66WyHtGDII0k zSx?P+=W$yNkkIX$Y%g4Sqf8kZjjKB~A|)DusEKDoP>ay@3ZRBc6+uRicThzScV4VT z3KMlnwLT1^iN(GzD7PC9dOi7FzwpmjR}8$%md0ms)aK}$wLwWY96=l_wFYCHP46zc zC9t9npbFTTf^iHD&8xgT^(_dYV+YK+9#WkoM2sckW?Dng(rn^fNC;Zm=p?6Q(d~OW z=&pS5(oL q9Ytqqq8e( 50*=m#)j )P^{`&AtXld(x^#+^t6$4br+K)-28cm*Z zzB#y%q+l90LkuCdRCw)DY!&6+6l#tXj_68Nbv8K+h?9hiI3(`;2NaDi6i(7L>L%2d z{IwUmdL0W5k&87qWnif`4j}hdl6n-AsHv%%Q8e+=)vf>svaY0Llt~D%Aob}@OwA~m zPIOXS&+@EpDom+Ti2AKWaTon(Q&-ke<*>FpLVZicd XZnCTy~ zDw%)v?D&q4{vE%h>@3wJA|;FIOBjFu)%&?-v?CmdRB4DyWMx9FL2Z$#K-JPH*{;A(x;go{Xv<48Hz9{(tfAEHKP7b`H6>JWrw0c{R#D?j z7g8mr^>oUz5}LhAo}mPq8!n5?Ad7X@X|q%UanowaHf@MOp;_BBM7Yq S?QMWgG5a_KWOILbsXnvA!{@-CUhfhQt?`m6=XP-uCfCx5rcNZ&QGFCwf!l z0 BAG?;uymqAAHZe+%;d< z5dhrrK1NczpX(R(s?t=B?%8tiIos8i_Q>Di?e-mJIue8=0kt4l4xlN=G2EP7n*^J6 z)mdbZRGL#`Vpe@O6$uVUIh!0~Ik`ynVe h)*W6C z=lO{FrO1fH%#ABwd1c0u+I3Qjl183N+Ocn@iovwgIaKDdUl1`#$nzYKpyYBfc;<=s zXr*YfTvhGjIzEx^r`aCWE<8Wfjb*i2b9`msZc|w0NbJ?~{D54)lvtdFENmG#jXI{s zvnm-e-v_i04L^3N3E%gZ;*XYI<44oAIlML+g7wE5B_WW3uJ}~pS2X08#VtW?H|Pb| ziTQR{Gl_RJ#uht!Nh?L`43$VujETgQk}DjMt}dl@(#;5r>J0^tQY Q)D5M`Avf)pTV!sb?|I_-s(`GmByD#G%A* zU-@X@_Uhuk?L%AHBDuWY f}3F)^o00|^P;HLXZyGK z4veWDviwB75?eCf02cs`{@d*ZX6V%QE4n`2UU6!Sgz8N$LYae+f=RPZB1?b5abd&g zP+eom8YYIvRLulQ&pgb0lPXh-*pi^p2z?rB;j5=!Ew1TRMJlQ(#M)vxx%T6s`Gemv z m?NiX~5S;$VZ&QB*k?vGO=_xf)tVuNFzf|iH2yzX59C# zeaEy7(+3$P)sBE=KFSm64KLA7hplx5DT(y8>`&r*%V_aAl+WTE%{d(k>r8B6Y>zVc z`ROusoqB(yx7erb{{UInT1`Zln3MEXDlq@n`?bSbQHn)Xs+y6WL@HNpUV>XADyAe> zqY1r9R>+sau7$FcnC!?#$5IqJ4@mM;;Wr%&`5_r9Fa*3q?GmPc6|SM{4>fdg=TBQ4 zoV+xnb#x9=2sR?baR#*}Vq (M0G*n$nvc6l8uNN&f(r#l!>N%gbgOl6V$H-FYXmO}3 Rh?G z&Dd4z%w@hHq&)X5;#GT0l;e(evl%IMK=vzc-#tvPB#n3@MBhQrGcxvbY{=vKMi! zVAG@j0H sz`Fg9^{Pk-{>=&cRY*POz1(BW_g3cLwacK}wB4z#nCMIqOKh@3R*(mh zsx=~m=T9v 1yiYX~i^I#*ToVR&8jBKOW)l R!fc-K$TXe2gw>V-L)0LQd9^EfZM&1mIeIBd|IHhwTdHWP7shuk%`8 zisw!WtCr7|je}|=1AQoyG^m?TgAaSuj$_EDR0#~hO1du{Dq4r7+T~`QSopy1xc59p zz@;fw88SkQyCOBwxC&I_R~}1&-4-^itm#CG^-+U?sVX}35P5n4YL#k~fU6 FTv; zgi1DZe~R&(naT6qWhG8SElmj=NQ&xRP##c{E1`{2=6N%UI>>g)M|lbWf;9vh??lef zSCU&(0z`g@&ncw+iv^^4f`WY1{5DkPW<03h$63<0Gn~R~D4PRGWEXq}-5QG?x?M=2 zT2?)$no|-QL(D8$NO2))Q0)fds_4}jWo--}C_u Hb-#NKuP0GzWK!-~cRQv5Qs zB>VH*i7mOh#?i)sXXVkD;V-Lwi}Qc-Dsf*<+h67X0O&m@Ck-vF*Hlo14a>MB**f$C zTV$w=$}Gcj?=#>T$4$)7nuZ<7KK?=96e$EV>aqslFJ@4V9W~C!k_s+O>wkx^+c?X4 zMJ+AMw5;0TN#*2DRMuR|Waq}2Ew-LQ+-t^=(o)@lzu~qJgQv4qgHAQA+fUj|n^LC4 zf-@P(GRw?9$(a?+1JU-O^mP)25Ryk7$v<+Pk}j0h5eXne^PHUxPAn8mZ3~ArvI-Of zsnJ_iV`6rwU)d(G&&;}XHpa}e$@!%!D={59?F(stOL|i2Pn2)}0PSi{Cu$bU8=AqC zUJgQX&0N8CK{+Nyw!VSnf$a_o`bq5qnAI+1lC6zeOR+!a9K58JIry?61pyvXR4z#9 zON4M(^}W0COB8ma1fIqXz-3v^a~^j*gZ^2hM1+z-1tEsjAz*{Rg8tPGf||A_oTU1f zF7h))#u1NO_kT&F )%o(tk*J2`C3O- zXd7^~M1@5YZPKVP|JVDe%G8W9Wk)H|GRUr@O*6JInz2fX^&wG;t0JwH)yA$Zj3TU7 zrFk$T${qCCeG3{IY% w8Wo`W z*SzGs!;$cLzasEAM0|UXE6M|Z{u;A;vu~LXf~*qh33C4cFG-V+fs2&UW+FmekioH3 zhtzyUsmouvypj{`ds=sB#|F}_g)-zxx*aDS5NDKeaS2WaIoXktgKv0JbTQi_*}v~p zKEU>@N$ 8w zIP7;{)$t!q %aWU-?G7YO!4gC!Lr> z@|%`)W+GJ7!Z`c1&%#mrgm3$`&*D|<&979sROsUz-hM-Pm~o>w?>xyQDl;)gqsM5L z+*<9yw5SqIWtK*g=QTv^{{RHAuVJ|rgvljRrb?A5*GRE*bIL+iM@Hl!Bz9LKY||B0 zQ?KGxWrP~69mH`FwM|=0hZ?c1NmSv=RA3yeCA6;*BTkyjmK3?x;j<@TIX0}vMIi;y zMF)jYRiPCMvPD?~tJ0d0N`s_0NFx0et_Z6H&5ntYUW)hb-b#?Kva5>S3tU8wB_o%f z<<&oro!yNHDRJZ LYZro;W)$uyz&YklBG#;1X)S(iBL)H zNFhFI*MVC5Zeq-87#u5U&S6O4=}D1Lf)#2@BmvHuw=lf7kee9po8kBnkT|MK W8bfu(j+@S9xB|FFTZ@O)G9)gkqXfuC%`{(1T0- z{(N3v#h@Hibu|7)K^J9Au(7d}Th`p9>U~|PP}Ye(_qw!N`~|@^=6anfRyICHFS<>R z)TRirL(QdQ SJge_ z)T+66ohZd975SoJ9N7DS_rx@y547Pw&8>K&e!{Oqm*kM#j%9JD)nrX|xUO-(fYKR| z?+s4j+_%=O`QM(L_UyEcSk)t5Zy!oG&&+-7bgY93Tuf7F{qpXY vIg)NEY^~RwREcjL@5yxTamDbtK1~4Vu8bm*EIC90WYZD=E^-62 zVueK^GvcgBgtKrwR01}t-pau!SJhQlBx lS}hH~ zc{e{DO)2v~?Plysl|&5Sav7(mvdkq(Zd0D bG2`xU#JuIkpbx zZNcM4D-i=44a7L@F}ttAKuJD(Ru;{PQ3v5G!*MDd2U-)OGv!rA))@r=js$642%c{$ zxcM>C@<<~0scNNh