From 92183423df61f147b3ab2be7d350349f3ea8c7dc Mon Sep 17 00:00:00 2001 From: pycook Date: Wed, 18 Dec 2019 23:33:22 +0900 Subject: [PATCH] Modify code organization --- .gitignore | 14 +- Dockerfile | 14 +- README.md | 34 +- .env => cmdb-api/.env | 0 Pipfile => cmdb-api/Pipfile | 0 {api => cmdb-api/api}/__init__.py | 0 {api => cmdb-api/api}/app.py | 6 +- {api => cmdb-api/api}/commands/__init__.py | 0 {api => cmdb-api/api}/commands/click_cmdb.py | 0 {api => cmdb-api/api}/commands/common.py | 0 {api => cmdb-api/api}/extensions.py | 0 {api => cmdb-api/api}/flask_cas/__init__.py | 0 {api => cmdb-api/api}/flask_cas/cas_urls.py | 0 {api => cmdb-api/api}/flask_cas/routing.py | 0 {api => cmdb-api/api}/lib/__init__.py | 0 {api => cmdb-api/api}/lib/cmdb/__init__.py | 0 {api => cmdb-api/api}/lib/cmdb/attribute.py | 0 {api => cmdb-api/api}/lib/cmdb/cache.py | 0 {api => cmdb-api/api}/lib/cmdb/ci.py | 0 {api => cmdb-api/api}/lib/cmdb/ci_type.py | 0 {api => cmdb-api/api}/lib/cmdb/const.py | 0 {api => cmdb-api/api}/lib/cmdb/history.py | 0 {api => cmdb-api/api}/lib/cmdb/preference.py | 0 .../api}/lib/cmdb/relation_type.py | 0 .../api}/lib/cmdb/search/__init__.py | 0 .../api}/lib/cmdb/search/ci/__init__.py | 0 .../api}/lib/cmdb/search/ci/db/__init__.py | 0 .../api}/lib/cmdb/search/ci/db/query_sql.py | 0 .../api}/lib/cmdb/search/ci/db/search.py | 0 .../api}/lib/cmdb/search/ci/es/__init__.py | 0 .../api}/lib/cmdb/search/ci/es/search.py | 0 .../lib/cmdb/search/ci_relation/__init__.py | 0 .../lib/cmdb/search/ci_relation/search.py | 0 {api => cmdb-api/api}/lib/cmdb/utils.py | 0 {api => cmdb-api/api}/lib/cmdb/value.py | 0 {api => cmdb-api/api}/lib/database.py | 0 {api => cmdb-api/api}/lib/decorator.py | 0 {api => cmdb-api/api}/lib/exception.py | 0 {api => cmdb-api/api}/lib/http_cli.py | 0 {api => cmdb-api/api}/lib/mail.py | 0 {api => cmdb-api/api}/lib/perm/__init__.py | 0 .../api}/lib/perm/acl/__init__.py | 0 {api => cmdb-api/api}/lib/perm/acl/acl.py | 0 {api => cmdb-api/api}/lib/perm/acl/cache.py | 0 {api => cmdb-api/api}/lib/perm/acl/const.py | 0 .../api}/lib/perm/acl/permission.py | 0 .../api}/lib/perm/acl/resource.py | 0 {api => cmdb-api/api}/lib/perm/acl/role.py | 0 {api => cmdb-api/api}/lib/perm/acl/user.py | 0 {api => cmdb-api/api}/lib/perm/auth.py | 0 {api => cmdb-api/api}/lib/utils.py | 0 {api => cmdb-api/api}/models/__init__.py | 0 {api => cmdb-api/api}/models/acl.py | 0 {api => cmdb-api/api}/models/cmdb.py | 0 {api => cmdb-api/api}/resource.py | 0 {api => cmdb-api/api}/tasks/__init__.py | 0 {api => cmdb-api/api}/tasks/acl.py | 0 {api => cmdb-api/api}/tasks/cmdb.py | 0 {api => cmdb-api/api}/tasks/test.py | 0 {api => cmdb-api/api}/views/__init__.py | 2 +- {api => cmdb-api/api}/views/account.py | 0 {api => cmdb-api/api}/views/acl/__init__.py | 0 {api => cmdb-api/api}/views/acl/permission.py | 0 {api => cmdb-api/api}/views/acl/resources.py | 0 {api => cmdb-api/api}/views/acl/role.py | 0 {api => cmdb-api/api}/views/acl/user.py | 0 {api => cmdb-api/api}/views/cmdb/__init__.py | 0 {api => cmdb-api/api}/views/cmdb/attribute.py | 0 {api => cmdb-api/api}/views/cmdb/ci.py | 0 .../api}/views/cmdb/ci_relation.py | 0 {api => cmdb-api/api}/views/cmdb/ci_type.py | 0 .../api}/views/cmdb/ci_type_relation.py | 0 {api => cmdb-api/api}/views/cmdb/history.py | 0 .../api}/views/cmdb/preference.py | 0 .../api}/views/cmdb/relation_type.py | 0 autoapp.py => cmdb-api/autoapp.py | 0 celery_worker.py => cmdb-api/celery_worker.py | 0 {logs => cmdb-api/logs}/.gitkeep | 0 {docs => cmdb-api}/requirements.txt | 0 {api => cmdb-api}/settings.py.example | 0 setup.cfg => cmdb-api/setup.cfg | 0 {tests => cmdb-api/tests}/__init__.py | 0 {tests => cmdb-api/tests}/conftest.py | 0 .../tests}/test_cmdb_attribute.py | 0 {tests => cmdb-api/tests}/test_cmdb_ci.py | 0 .../tests}/test_cmdb_ci_realtion.py | 0 .../tests}/test_cmdb_ci_type.py | 0 .../tests}/test_cmdb_ci_type_relation.py | 0 .../tests}/test_cmdb_history.py | 0 .../tests}/test_cmdb_preference.py | 0 .../tests}/test_cmdb_relation_type.py | 0 cmdb-ui/.editorconfig | 39 + cmdb-ui/.env | 3 + cmdb-ui/.env.preview | 3 + cmdb-ui/.prettierrc | 5 + cmdb-ui/.travis.yml | 7 + cmdb-ui/LICENSE | 21 + cmdb-ui/babel.config.js | 25 + cmdb-ui/jest.config.js | 23 + cmdb-ui/jsconfig.json | 11 + cmdb-ui/package.json | 146 + cmdb-ui/public/cmdb-ci.jpeg | Bin 0 -> 133511 bytes cmdb-ui/public/cmdb-preference.jpeg | Bin 0 -> 63073 bytes cmdb-ui/public/cmdb-relation-define.jpeg | Bin 0 -> 80517 bytes cmdb-ui/public/cmdb-relation.jpeg | Bin 0 -> 139283 bytes cmdb-ui/public/cmdb-tree.jpeg | Bin 0 -> 132418 bytes cmdb-ui/public/cmdb01.jpeg | Bin 0 -> 118206 bytes cmdb-ui/public/cmdb02.jpeg | Bin 0 -> 71403 bytes cmdb-ui/public/color.less | 7684 +++++++++++++++++ cmdb-ui/public/index.html | 23 + cmdb-ui/public/loading/loading.css | 1 + cmdb-ui/public/loading/loading.html | 1 + .../loading/option2/html_code_segment.html | 5 + cmdb-ui/public/loading/option2/loading.css | 1 + cmdb-ui/public/loading/option2/loading.svg | 1 + cmdb-ui/public/qr_code.jpg | Bin 0 -> 10568 bytes cmdb-ui/src/App.vue | 41 + cmdb-ui/src/EventBus.js | 3 + cmdb-ui/src/api/acl/app.js | 34 + cmdb-ui/src/api/acl/permission.js | 56 + cmdb-ui/src/api/acl/resource.js | 65 + cmdb-ui/src/api/acl/role.js | 66 + cmdb-ui/src/api/acl/user.js | 41 + cmdb-ui/src/api/cmdb/CIRelation.js | 30 + cmdb-ui/src/api/cmdb/CIType.js | 123 + cmdb-ui/src/api/cmdb/CITypeAttr.js | 124 + cmdb-ui/src/api/cmdb/CITypeRelation.js | 39 + cmdb-ui/src/api/cmdb/batch.js | 67 + cmdb-ui/src/api/cmdb/ci.js | 41 + cmdb-ui/src/api/cmdb/history.js | 8 + cmdb-ui/src/api/cmdb/preference.js | 64 + cmdb-ui/src/api/cmdb/relationType.js | 31 + cmdb-ui/src/api/index.js | 14 + cmdb-ui/src/api/login.js | 66 + cmdb-ui/src/api/manage.js | 62 + cmdb-ui/src/assets/background.svg | 69 + cmdb-ui/src/assets/icons/bx-analyse.svg | 1 + cmdb-ui/src/assets/logo.png | Bin 0 -> 20228 bytes cmdb-ui/src/assets/logo.svg | 29 + .../ArticleListContent/ArticleListContent.vue | 89 + .../components/ArticleListContent/index.js | 3 + cmdb-ui/src/components/AvatarList/Item.vue | 46 + cmdb-ui/src/components/AvatarList/List.vue | 99 + cmdb-ui/src/components/AvatarList/index.js | 4 + cmdb-ui/src/components/AvatarList/index.less | 60 + cmdb-ui/src/components/AvatarList/index.md | 64 + cmdb-ui/src/components/Charts/Bar.vue | 62 + cmdb-ui/src/components/Charts/ChartCard.vue | 120 + cmdb-ui/src/components/Charts/Liquid.vue | 67 + cmdb-ui/src/components/Charts/MiniArea.vue | 56 + cmdb-ui/src/components/Charts/MiniBar.vue | 57 + .../src/components/Charts/MiniProgress.vue | 75 + .../src/components/Charts/MiniSmoothArea.vue | 40 + cmdb-ui/src/components/Charts/Radar.vue | 68 + cmdb-ui/src/components/Charts/RankList.vue | 77 + cmdb-ui/src/components/Charts/TagCloud.vue | 113 + cmdb-ui/src/components/Charts/TransferBar.vue | 64 + cmdb-ui/src/components/Charts/Trend.vue | 82 + cmdb-ui/src/components/Charts/chart.less | 13 + .../src/components/Charts/smooth.area.less | 14 + .../src/components/CountDown/CountDown.vue | 102 + cmdb-ui/src/components/CountDown/index.js | 3 + cmdb-ui/src/components/CountDown/index.md | 34 + .../DescriptionList/DescriptionList.vue | 153 + .../src/components/DescriptionList/index.js | 2 + cmdb-ui/src/components/Editor/QuillEditor.vue | 82 + cmdb-ui/src/components/Editor/WangEditor.vue | 57 + cmdb-ui/src/components/Ellipsis/Ellipsis.vue | 64 + cmdb-ui/src/components/Ellipsis/index.js | 3 + cmdb-ui/src/components/Ellipsis/index.md | 38 + .../components/Exception/ExceptionPage.vue | 130 + cmdb-ui/src/components/Exception/index.js | 2 + cmdb-ui/src/components/Exception/type.js | 19 + .../FooterToolbar/FooterToolBar.vue | 30 + cmdb-ui/src/components/FooterToolbar/index.js | 4 + .../src/components/FooterToolbar/index.less | 23 + cmdb-ui/src/components/FooterToolbar/index.md | 48 + .../components/GlobalFooter/GlobalFooter.vue | 42 + cmdb-ui/src/components/GlobalFooter/index.js | 2 + .../components/GlobalHeader/GlobalHeader.vue | 129 + cmdb-ui/src/components/GlobalHeader/index.js | 2 + .../components/IconSelector/IconSelector.vue | 86 + cmdb-ui/src/components/IconSelector/README.md | 48 + cmdb-ui/src/components/IconSelector/icons.js | 36 + cmdb-ui/src/components/IconSelector/index.js | 2 + cmdb-ui/src/components/Menu/SideMenu.vue | 63 + cmdb-ui/src/components/Menu/index.js | 2 + cmdb-ui/src/components/Menu/menu.js | 184 + cmdb-ui/src/components/MultiTab/MultiTab.vue | 173 + cmdb-ui/src/components/MultiTab/index.js | 4 + cmdb-ui/src/components/MultiTab/index.less | 25 + .../src/components/NoticeIcon/NoticeIcon.vue | 90 + cmdb-ui/src/components/NoticeIcon/index.js | 2 + .../src/components/NumberInfo/NumberInfo.vue | 54 + cmdb-ui/src/components/NumberInfo/index.js | 3 + cmdb-ui/src/components/NumberInfo/index.less | 55 + cmdb-ui/src/components/NumberInfo/index.md | 43 + .../src/components/PageHeader/PageHeader.vue | 202 + cmdb-ui/src/components/PageHeader/index.js | 2 + cmdb-ui/src/components/PageLoading/index.jsx | 10 + cmdb-ui/src/components/Result/Result.vue | 109 + cmdb-ui/src/components/Result/index.js | 2 + .../SettingDrawer/SettingDrawer.vue | 354 + .../components/SettingDrawer/SettingItem.vue | 38 + cmdb-ui/src/components/SettingDrawer/index.js | 2 + .../components/SettingDrawer/settingConfig.js | 105 + .../components/SettingDrawer/themeColor.js | 23 + .../StandardFormRow/StandardFormRow.vue | 122 + .../src/components/StandardFormRow/index.js | 3 + cmdb-ui/src/components/Table/README.md | 341 + cmdb-ui/src/components/Table/index.js | 315 + .../components/TagSelect/TagSelectOption.jsx | 45 + cmdb-ui/src/components/TagSelect/index.jsx | 103 + cmdb-ui/src/components/Tree/Tree.jsx | 124 + cmdb-ui/src/components/Trend/Trend.vue | 41 + cmdb-ui/src/components/Trend/index.js | 3 + cmdb-ui/src/components/Trend/index.less | 42 + cmdb-ui/src/components/Trend/index.md | 45 + cmdb-ui/src/components/_util/util.js | 46 + cmdb-ui/src/components/global.less | 491 ++ cmdb-ui/src/components/index.js | 62 + cmdb-ui/src/components/index.less | 5 + cmdb-ui/src/components/tools/Breadcrumb.vue | 45 + cmdb-ui/src/components/tools/DetailList.vue | 5 + cmdb-ui/src/components/tools/HeadInfo.vue | 67 + cmdb-ui/src/components/tools/Logo.vue | 30 + cmdb-ui/src/components/tools/TopMenu.vue | 34 + .../src/components/tools/TwoStepCaptcha.vue | 89 + cmdb-ui/src/components/tools/UserMenu.vue | 73 + cmdb-ui/src/components/tools/index.js | 0 cmdb-ui/src/config/defaultSettings.js | 34 + cmdb-ui/src/config/router.config.js | 219 + cmdb-ui/src/core/bootstrap.js | 34 + cmdb-ui/src/core/directives/action.js | 34 + cmdb-ui/src/core/icons.js | 11 + cmdb-ui/src/core/lazy_lib/components_use.js | 99 + cmdb-ui/src/core/lazy_use.js | 20 + cmdb-ui/src/core/use.js | 25 + cmdb-ui/src/layouts/BasicLayout.vue | 192 + cmdb-ui/src/layouts/BlankLayout.vue | 16 + cmdb-ui/src/layouts/PageView.vue | 181 + cmdb-ui/src/layouts/RouteView.vue | 32 + cmdb-ui/src/layouts/UserLayout.vue | 139 + cmdb-ui/src/layouts/index.js | 7 + cmdb-ui/src/main.js | 27 + cmdb-ui/src/permission.js | 60 + cmdb-ui/src/router/README.md | 145 + cmdb-ui/src/router/index.js | 28 + cmdb-ui/src/store/getters.js | 15 + cmdb-ui/src/store/index.js | 27 + cmdb-ui/src/store/modules/app.js | 123 + cmdb-ui/src/store/modules/permission.js | 62 + cmdb-ui/src/store/modules/user.js | 95 + cmdb-ui/src/store/mutation-types.js | 16 + cmdb-ui/src/utils/axios.js | 35 + cmdb-ui/src/utils/device.js | 33 + cmdb-ui/src/utils/domUtil.js | 19 + cmdb-ui/src/utils/filter.js | 20 + cmdb-ui/src/utils/helper/permission.js | 51 + cmdb-ui/src/utils/mixin.js | 76 + cmdb-ui/src/utils/permissions.js | 8 + cmdb-ui/src/utils/request.js | 48 + cmdb-ui/src/utils/util.js | 60 + cmdb-ui/src/utils/utils.less | 50 + cmdb-ui/src/views/404.vue | 15 + cmdb-ui/src/views/account/center/Index.vue | 288 + cmdb-ui/src/views/account/center/page/App.vue | 113 + .../src/views/account/center/page/Article.vue | 75 + .../src/views/account/center/page/Project.vue | 109 + .../src/views/account/center/page/index.js | 5 + .../views/account/settings/AvatarModal.vue | 109 + .../views/account/settings/BaseSetting.vue | 161 + .../src/views/account/settings/Binding.vue | 25 + cmdb-ui/src/views/account/settings/Custom.vue | 75 + cmdb-ui/src/views/account/settings/Index.vue | 155 + .../views/account/settings/Notification.vue | 25 + .../src/views/account/settings/Security.vue | 41 + .../views/acl/module/addRoleRelationForm.vue | 202 + .../src/views/acl/module/permissionForm.vue | 235 + cmdb-ui/src/views/acl/module/resourceForm.vue | 191 + .../src/views/acl/module/resourcePermForm.vue | 123 + .../acl/module/resourcePermManageForm.vue | 120 + .../src/views/acl/module/resourceTypeForm.vue | 217 + cmdb-ui/src/views/acl/module/roleForm.vue | 258 + cmdb-ui/src/views/acl/module/userForm.vue | 293 + cmdb-ui/src/views/acl/permissions.vue | 309 + cmdb-ui/src/views/acl/resource_types.vue | 317 + cmdb-ui/src/views/acl/resources.vue | 339 + cmdb-ui/src/views/acl/roles.vue | 310 + cmdb-ui/src/views/acl/users.vue | 361 + cmdb-ui/src/views/cmdb/batch/index.vue | 85 + .../src/views/cmdb/batch/modules/CiTable.vue | 95 + .../views/cmdb/batch/modules/CiTypeChoice.vue | 113 + .../cmdb/batch/modules/UploadFileForm.vue | 61 + .../views/cmdb/batch/modules/UploadResult.vue | 95 + cmdb-ui/src/views/cmdb/ci/index.vue | 461 + .../src/views/cmdb/ci/modules/CiDetail.vue | 369 + .../cmdb/ci/modules/CreateInstanceForm.vue | 163 + .../views/cmdb/ci/modules/EditableCell.vue | 78 + .../src/views/cmdb/ci/modules/SearchForm.vue | 131 + .../views/cmdb/modeling/attributes/index.vue | 391 + .../attributes/module/attributeForm.vue | 338 + .../cmdb/modeling/attributes/module/const.js | 8 + .../cmdb/modeling/ci_type/attributesTable.vue | 561 ++ .../cmdb/modeling/ci_type/checkTable.vue | 349 + .../modeling/ci_type/defaultShowTable.vue | 355 + .../views/cmdb/modeling/ci_type/detail.vue | 89 + .../src/views/cmdb/modeling/ci_type/group.vue | 591 ++ .../src/views/cmdb/modeling/ci_type/list.vue | 312 + .../cmdb/modeling/ci_type/relationTable.vue | 338 + .../modeling/preference_relation/index.vue | 346 + .../modules/RelationViewForm.vue | 160 + .../cmdb/modeling/relation_type/index.vue | 280 + .../modules/relationTypeForm.vue | 192 + cmdb-ui/src/views/cmdb/preference/index.vue | 366 + .../src/views/cmdb/relation_views/index.vue | 441 + cmdb-ui/src/views/cmdb/tree_views/index.vue | 258 + cmdb-ui/src/views/exception/403.vue | 17 + cmdb-ui/src/views/exception/404.vue | 17 + cmdb-ui/src/views/exception/500.vue | 17 + cmdb-ui/src/views/user/Login.vue | 210 + cmdb-ui/src/views/user/Register.vue | 322 + cmdb-ui/src/views/user/RegisterResult.vue | 50 + cmdb-ui/src/views/welcome/index.vue | 34 + cmdb-ui/src/views/welcome/welcome.vue | 0 cmdb-ui/tests/unit/.eslintrc.js | 5 + cmdb-ui/vue.config.js | 126 + cmdb-ui/webstorm.config.js | 16 + docker-compose.yml | 6 +- 329 files changed, 29553 insertions(+), 38 deletions(-) rename .env => cmdb-api/.env (100%) rename Pipfile => cmdb-api/Pipfile (100%) rename {api => cmdb-api/api}/__init__.py (100%) rename {api => cmdb-api/api}/app.py (98%) rename {api => cmdb-api/api}/commands/__init__.py (100%) rename {api => cmdb-api/api}/commands/click_cmdb.py (100%) rename {api => cmdb-api/api}/commands/common.py (100%) rename {api => cmdb-api/api}/extensions.py (100%) rename {api => cmdb-api/api}/flask_cas/__init__.py (100%) rename {api => cmdb-api/api}/flask_cas/cas_urls.py (100%) rename {api => cmdb-api/api}/flask_cas/routing.py (100%) rename {api => cmdb-api/api}/lib/__init__.py (100%) rename {api => cmdb-api/api}/lib/cmdb/__init__.py (100%) rename {api => cmdb-api/api}/lib/cmdb/attribute.py (100%) rename {api => cmdb-api/api}/lib/cmdb/cache.py (100%) rename {api => cmdb-api/api}/lib/cmdb/ci.py (100%) rename {api => cmdb-api/api}/lib/cmdb/ci_type.py (100%) rename {api => cmdb-api/api}/lib/cmdb/const.py (100%) rename {api => cmdb-api/api}/lib/cmdb/history.py (100%) rename {api => cmdb-api/api}/lib/cmdb/preference.py (100%) rename {api => cmdb-api/api}/lib/cmdb/relation_type.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/__init__.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/ci/__init__.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/ci/db/__init__.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/ci/db/query_sql.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/ci/db/search.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/ci/es/__init__.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/ci/es/search.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/ci_relation/__init__.py (100%) rename {api => cmdb-api/api}/lib/cmdb/search/ci_relation/search.py (100%) rename {api => cmdb-api/api}/lib/cmdb/utils.py (100%) rename {api => cmdb-api/api}/lib/cmdb/value.py (100%) rename {api => cmdb-api/api}/lib/database.py (100%) rename {api => cmdb-api/api}/lib/decorator.py (100%) rename {api => cmdb-api/api}/lib/exception.py (100%) rename {api => cmdb-api/api}/lib/http_cli.py (100%) rename {api => cmdb-api/api}/lib/mail.py (100%) rename {api => cmdb-api/api}/lib/perm/__init__.py (100%) rename {api => cmdb-api/api}/lib/perm/acl/__init__.py (100%) rename {api => cmdb-api/api}/lib/perm/acl/acl.py (100%) rename {api => cmdb-api/api}/lib/perm/acl/cache.py (100%) rename {api => cmdb-api/api}/lib/perm/acl/const.py (100%) rename {api => cmdb-api/api}/lib/perm/acl/permission.py (100%) rename {api => cmdb-api/api}/lib/perm/acl/resource.py (100%) rename {api => cmdb-api/api}/lib/perm/acl/role.py (100%) rename {api => cmdb-api/api}/lib/perm/acl/user.py (100%) rename {api => cmdb-api/api}/lib/perm/auth.py (100%) rename {api => cmdb-api/api}/lib/utils.py (100%) rename {api => cmdb-api/api}/models/__init__.py (100%) rename {api => cmdb-api/api}/models/acl.py (100%) rename {api => cmdb-api/api}/models/cmdb.py (100%) rename {api => cmdb-api/api}/resource.py (100%) rename {api => cmdb-api/api}/tasks/__init__.py (100%) rename {api => cmdb-api/api}/tasks/acl.py (100%) rename {api => cmdb-api/api}/tasks/cmdb.py (100%) rename {api => cmdb-api/api}/tasks/test.py (100%) rename {api => cmdb-api/api}/views/__init__.py (93%) rename {api => cmdb-api/api}/views/account.py (100%) rename {api => cmdb-api/api}/views/acl/__init__.py (100%) rename {api => cmdb-api/api}/views/acl/permission.py (100%) rename {api => cmdb-api/api}/views/acl/resources.py (100%) rename {api => cmdb-api/api}/views/acl/role.py (100%) rename {api => cmdb-api/api}/views/acl/user.py (100%) rename {api => cmdb-api/api}/views/cmdb/__init__.py (100%) rename {api => cmdb-api/api}/views/cmdb/attribute.py (100%) rename {api => cmdb-api/api}/views/cmdb/ci.py (100%) rename {api => cmdb-api/api}/views/cmdb/ci_relation.py (100%) rename {api => cmdb-api/api}/views/cmdb/ci_type.py (100%) rename {api => cmdb-api/api}/views/cmdb/ci_type_relation.py (100%) rename {api => cmdb-api/api}/views/cmdb/history.py (100%) rename {api => cmdb-api/api}/views/cmdb/preference.py (100%) rename {api => cmdb-api/api}/views/cmdb/relation_type.py (100%) rename autoapp.py => cmdb-api/autoapp.py (100%) rename celery_worker.py => cmdb-api/celery_worker.py (100%) rename {logs => cmdb-api/logs}/.gitkeep (100%) rename {docs => cmdb-api}/requirements.txt (100%) rename {api => cmdb-api}/settings.py.example (100%) rename setup.cfg => cmdb-api/setup.cfg (100%) rename {tests => cmdb-api/tests}/__init__.py (100%) rename {tests => cmdb-api/tests}/conftest.py (100%) rename {tests => cmdb-api/tests}/test_cmdb_attribute.py (100%) rename {tests => cmdb-api/tests}/test_cmdb_ci.py (100%) rename {tests => cmdb-api/tests}/test_cmdb_ci_realtion.py (100%) rename {tests => cmdb-api/tests}/test_cmdb_ci_type.py (100%) rename {tests => cmdb-api/tests}/test_cmdb_ci_type_relation.py (100%) rename {tests => cmdb-api/tests}/test_cmdb_history.py (100%) rename {tests => cmdb-api/tests}/test_cmdb_preference.py (100%) rename {tests => cmdb-api/tests}/test_cmdb_relation_type.py (100%) create mode 100644 cmdb-ui/.editorconfig create mode 100644 cmdb-ui/.env create mode 100644 cmdb-ui/.env.preview create mode 100644 cmdb-ui/.prettierrc create mode 100644 cmdb-ui/.travis.yml create mode 100644 cmdb-ui/LICENSE create mode 100644 cmdb-ui/babel.config.js create mode 100644 cmdb-ui/jest.config.js create mode 100644 cmdb-ui/jsconfig.json create mode 100644 cmdb-ui/package.json create mode 100644 cmdb-ui/public/cmdb-ci.jpeg create mode 100644 cmdb-ui/public/cmdb-preference.jpeg create mode 100644 cmdb-ui/public/cmdb-relation-define.jpeg create mode 100644 cmdb-ui/public/cmdb-relation.jpeg create mode 100644 cmdb-ui/public/cmdb-tree.jpeg create mode 100644 cmdb-ui/public/cmdb01.jpeg create mode 100644 cmdb-ui/public/cmdb02.jpeg create mode 100644 cmdb-ui/public/color.less create mode 100644 cmdb-ui/public/index.html create mode 100644 cmdb-ui/public/loading/loading.css create mode 100644 cmdb-ui/public/loading/loading.html create mode 100644 cmdb-ui/public/loading/option2/html_code_segment.html create mode 100644 cmdb-ui/public/loading/option2/loading.css create mode 100644 cmdb-ui/public/loading/option2/loading.svg create mode 100644 cmdb-ui/public/qr_code.jpg create mode 100644 cmdb-ui/src/App.vue create mode 100644 cmdb-ui/src/EventBus.js create mode 100644 cmdb-ui/src/api/acl/app.js create mode 100644 cmdb-ui/src/api/acl/permission.js create mode 100644 cmdb-ui/src/api/acl/resource.js create mode 100644 cmdb-ui/src/api/acl/role.js create mode 100644 cmdb-ui/src/api/acl/user.js create mode 100644 cmdb-ui/src/api/cmdb/CIRelation.js create mode 100644 cmdb-ui/src/api/cmdb/CIType.js create mode 100644 cmdb-ui/src/api/cmdb/CITypeAttr.js create mode 100644 cmdb-ui/src/api/cmdb/CITypeRelation.js create mode 100644 cmdb-ui/src/api/cmdb/batch.js create mode 100644 cmdb-ui/src/api/cmdb/ci.js create mode 100644 cmdb-ui/src/api/cmdb/history.js create mode 100644 cmdb-ui/src/api/cmdb/preference.js create mode 100644 cmdb-ui/src/api/cmdb/relationType.js create mode 100644 cmdb-ui/src/api/index.js create mode 100644 cmdb-ui/src/api/login.js create mode 100644 cmdb-ui/src/api/manage.js create mode 100644 cmdb-ui/src/assets/background.svg create mode 100644 cmdb-ui/src/assets/icons/bx-analyse.svg create mode 100644 cmdb-ui/src/assets/logo.png create mode 100644 cmdb-ui/src/assets/logo.svg create mode 100644 cmdb-ui/src/components/ArticleListContent/ArticleListContent.vue create mode 100644 cmdb-ui/src/components/ArticleListContent/index.js create mode 100644 cmdb-ui/src/components/AvatarList/Item.vue create mode 100644 cmdb-ui/src/components/AvatarList/List.vue create mode 100644 cmdb-ui/src/components/AvatarList/index.js create mode 100644 cmdb-ui/src/components/AvatarList/index.less create mode 100644 cmdb-ui/src/components/AvatarList/index.md create mode 100644 cmdb-ui/src/components/Charts/Bar.vue create mode 100644 cmdb-ui/src/components/Charts/ChartCard.vue create mode 100644 cmdb-ui/src/components/Charts/Liquid.vue create mode 100644 cmdb-ui/src/components/Charts/MiniArea.vue create mode 100644 cmdb-ui/src/components/Charts/MiniBar.vue create mode 100644 cmdb-ui/src/components/Charts/MiniProgress.vue create mode 100644 cmdb-ui/src/components/Charts/MiniSmoothArea.vue create mode 100644 cmdb-ui/src/components/Charts/Radar.vue create mode 100644 cmdb-ui/src/components/Charts/RankList.vue create mode 100644 cmdb-ui/src/components/Charts/TagCloud.vue create mode 100644 cmdb-ui/src/components/Charts/TransferBar.vue create mode 100644 cmdb-ui/src/components/Charts/Trend.vue create mode 100644 cmdb-ui/src/components/Charts/chart.less create mode 100644 cmdb-ui/src/components/Charts/smooth.area.less create mode 100644 cmdb-ui/src/components/CountDown/CountDown.vue create mode 100644 cmdb-ui/src/components/CountDown/index.js create mode 100644 cmdb-ui/src/components/CountDown/index.md create mode 100644 cmdb-ui/src/components/DescriptionList/DescriptionList.vue create mode 100644 cmdb-ui/src/components/DescriptionList/index.js create mode 100644 cmdb-ui/src/components/Editor/QuillEditor.vue create mode 100644 cmdb-ui/src/components/Editor/WangEditor.vue create mode 100644 cmdb-ui/src/components/Ellipsis/Ellipsis.vue create mode 100644 cmdb-ui/src/components/Ellipsis/index.js create mode 100644 cmdb-ui/src/components/Ellipsis/index.md create mode 100644 cmdb-ui/src/components/Exception/ExceptionPage.vue create mode 100644 cmdb-ui/src/components/Exception/index.js create mode 100644 cmdb-ui/src/components/Exception/type.js create mode 100644 cmdb-ui/src/components/FooterToolbar/FooterToolBar.vue create mode 100644 cmdb-ui/src/components/FooterToolbar/index.js create mode 100644 cmdb-ui/src/components/FooterToolbar/index.less create mode 100644 cmdb-ui/src/components/FooterToolbar/index.md create mode 100644 cmdb-ui/src/components/GlobalFooter/GlobalFooter.vue create mode 100644 cmdb-ui/src/components/GlobalFooter/index.js create mode 100644 cmdb-ui/src/components/GlobalHeader/GlobalHeader.vue create mode 100644 cmdb-ui/src/components/GlobalHeader/index.js create mode 100644 cmdb-ui/src/components/IconSelector/IconSelector.vue create mode 100644 cmdb-ui/src/components/IconSelector/README.md create mode 100644 cmdb-ui/src/components/IconSelector/icons.js create mode 100644 cmdb-ui/src/components/IconSelector/index.js create mode 100644 cmdb-ui/src/components/Menu/SideMenu.vue create mode 100644 cmdb-ui/src/components/Menu/index.js create mode 100644 cmdb-ui/src/components/Menu/menu.js create mode 100644 cmdb-ui/src/components/MultiTab/MultiTab.vue create mode 100644 cmdb-ui/src/components/MultiTab/index.js create mode 100644 cmdb-ui/src/components/MultiTab/index.less create mode 100644 cmdb-ui/src/components/NoticeIcon/NoticeIcon.vue create mode 100644 cmdb-ui/src/components/NoticeIcon/index.js create mode 100644 cmdb-ui/src/components/NumberInfo/NumberInfo.vue create mode 100644 cmdb-ui/src/components/NumberInfo/index.js create mode 100644 cmdb-ui/src/components/NumberInfo/index.less create mode 100644 cmdb-ui/src/components/NumberInfo/index.md create mode 100644 cmdb-ui/src/components/PageHeader/PageHeader.vue create mode 100644 cmdb-ui/src/components/PageHeader/index.js create mode 100644 cmdb-ui/src/components/PageLoading/index.jsx create mode 100644 cmdb-ui/src/components/Result/Result.vue create mode 100644 cmdb-ui/src/components/Result/index.js create mode 100644 cmdb-ui/src/components/SettingDrawer/SettingDrawer.vue create mode 100644 cmdb-ui/src/components/SettingDrawer/SettingItem.vue create mode 100644 cmdb-ui/src/components/SettingDrawer/index.js create mode 100644 cmdb-ui/src/components/SettingDrawer/settingConfig.js create mode 100644 cmdb-ui/src/components/SettingDrawer/themeColor.js create mode 100644 cmdb-ui/src/components/StandardFormRow/StandardFormRow.vue create mode 100644 cmdb-ui/src/components/StandardFormRow/index.js create mode 100644 cmdb-ui/src/components/Table/README.md create mode 100644 cmdb-ui/src/components/Table/index.js create mode 100644 cmdb-ui/src/components/TagSelect/TagSelectOption.jsx create mode 100644 cmdb-ui/src/components/TagSelect/index.jsx create mode 100644 cmdb-ui/src/components/Tree/Tree.jsx create mode 100644 cmdb-ui/src/components/Trend/Trend.vue create mode 100644 cmdb-ui/src/components/Trend/index.js create mode 100644 cmdb-ui/src/components/Trend/index.less create mode 100644 cmdb-ui/src/components/Trend/index.md create mode 100644 cmdb-ui/src/components/_util/util.js create mode 100644 cmdb-ui/src/components/global.less create mode 100644 cmdb-ui/src/components/index.js create mode 100644 cmdb-ui/src/components/index.less create mode 100644 cmdb-ui/src/components/tools/Breadcrumb.vue create mode 100644 cmdb-ui/src/components/tools/DetailList.vue create mode 100644 cmdb-ui/src/components/tools/HeadInfo.vue create mode 100644 cmdb-ui/src/components/tools/Logo.vue create mode 100644 cmdb-ui/src/components/tools/TopMenu.vue create mode 100644 cmdb-ui/src/components/tools/TwoStepCaptcha.vue create mode 100644 cmdb-ui/src/components/tools/UserMenu.vue create mode 100644 cmdb-ui/src/components/tools/index.js create mode 100644 cmdb-ui/src/config/defaultSettings.js create mode 100644 cmdb-ui/src/config/router.config.js create mode 100644 cmdb-ui/src/core/bootstrap.js create mode 100644 cmdb-ui/src/core/directives/action.js create mode 100644 cmdb-ui/src/core/icons.js create mode 100644 cmdb-ui/src/core/lazy_lib/components_use.js create mode 100644 cmdb-ui/src/core/lazy_use.js create mode 100644 cmdb-ui/src/core/use.js create mode 100644 cmdb-ui/src/layouts/BasicLayout.vue create mode 100644 cmdb-ui/src/layouts/BlankLayout.vue create mode 100644 cmdb-ui/src/layouts/PageView.vue create mode 100644 cmdb-ui/src/layouts/RouteView.vue create mode 100644 cmdb-ui/src/layouts/UserLayout.vue create mode 100644 cmdb-ui/src/layouts/index.js create mode 100644 cmdb-ui/src/main.js create mode 100644 cmdb-ui/src/permission.js create mode 100644 cmdb-ui/src/router/README.md create mode 100644 cmdb-ui/src/router/index.js create mode 100644 cmdb-ui/src/store/getters.js create mode 100644 cmdb-ui/src/store/index.js create mode 100644 cmdb-ui/src/store/modules/app.js create mode 100644 cmdb-ui/src/store/modules/permission.js create mode 100644 cmdb-ui/src/store/modules/user.js create mode 100644 cmdb-ui/src/store/mutation-types.js create mode 100644 cmdb-ui/src/utils/axios.js create mode 100644 cmdb-ui/src/utils/device.js create mode 100644 cmdb-ui/src/utils/domUtil.js create mode 100644 cmdb-ui/src/utils/filter.js create mode 100644 cmdb-ui/src/utils/helper/permission.js create mode 100644 cmdb-ui/src/utils/mixin.js create mode 100644 cmdb-ui/src/utils/permissions.js create mode 100644 cmdb-ui/src/utils/request.js create mode 100644 cmdb-ui/src/utils/util.js create mode 100644 cmdb-ui/src/utils/utils.less create mode 100644 cmdb-ui/src/views/404.vue create mode 100644 cmdb-ui/src/views/account/center/Index.vue create mode 100644 cmdb-ui/src/views/account/center/page/App.vue create mode 100644 cmdb-ui/src/views/account/center/page/Article.vue create mode 100644 cmdb-ui/src/views/account/center/page/Project.vue create mode 100644 cmdb-ui/src/views/account/center/page/index.js create mode 100644 cmdb-ui/src/views/account/settings/AvatarModal.vue create mode 100644 cmdb-ui/src/views/account/settings/BaseSetting.vue create mode 100644 cmdb-ui/src/views/account/settings/Binding.vue create mode 100644 cmdb-ui/src/views/account/settings/Custom.vue create mode 100644 cmdb-ui/src/views/account/settings/Index.vue create mode 100644 cmdb-ui/src/views/account/settings/Notification.vue create mode 100644 cmdb-ui/src/views/account/settings/Security.vue create mode 100644 cmdb-ui/src/views/acl/module/addRoleRelationForm.vue create mode 100644 cmdb-ui/src/views/acl/module/permissionForm.vue create mode 100644 cmdb-ui/src/views/acl/module/resourceForm.vue create mode 100644 cmdb-ui/src/views/acl/module/resourcePermForm.vue create mode 100644 cmdb-ui/src/views/acl/module/resourcePermManageForm.vue create mode 100644 cmdb-ui/src/views/acl/module/resourceTypeForm.vue create mode 100644 cmdb-ui/src/views/acl/module/roleForm.vue create mode 100644 cmdb-ui/src/views/acl/module/userForm.vue create mode 100644 cmdb-ui/src/views/acl/permissions.vue create mode 100644 cmdb-ui/src/views/acl/resource_types.vue create mode 100644 cmdb-ui/src/views/acl/resources.vue create mode 100644 cmdb-ui/src/views/acl/roles.vue create mode 100644 cmdb-ui/src/views/acl/users.vue create mode 100644 cmdb-ui/src/views/cmdb/batch/index.vue create mode 100644 cmdb-ui/src/views/cmdb/batch/modules/CiTable.vue create mode 100644 cmdb-ui/src/views/cmdb/batch/modules/CiTypeChoice.vue create mode 100644 cmdb-ui/src/views/cmdb/batch/modules/UploadFileForm.vue create mode 100644 cmdb-ui/src/views/cmdb/batch/modules/UploadResult.vue create mode 100644 cmdb-ui/src/views/cmdb/ci/index.vue create mode 100644 cmdb-ui/src/views/cmdb/ci/modules/CiDetail.vue create mode 100644 cmdb-ui/src/views/cmdb/ci/modules/CreateInstanceForm.vue create mode 100644 cmdb-ui/src/views/cmdb/ci/modules/EditableCell.vue create mode 100644 cmdb-ui/src/views/cmdb/ci/modules/SearchForm.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/attributes/index.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/attributes/module/attributeForm.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/attributes/module/const.js create mode 100644 cmdb-ui/src/views/cmdb/modeling/ci_type/attributesTable.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/ci_type/checkTable.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/ci_type/defaultShowTable.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/ci_type/detail.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/ci_type/group.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/ci_type/list.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/ci_type/relationTable.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/preference_relation/index.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/preference_relation/modules/RelationViewForm.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/relation_type/index.vue create mode 100644 cmdb-ui/src/views/cmdb/modeling/relation_type/modules/relationTypeForm.vue create mode 100644 cmdb-ui/src/views/cmdb/preference/index.vue create mode 100644 cmdb-ui/src/views/cmdb/relation_views/index.vue create mode 100644 cmdb-ui/src/views/cmdb/tree_views/index.vue create mode 100644 cmdb-ui/src/views/exception/403.vue create mode 100644 cmdb-ui/src/views/exception/404.vue create mode 100644 cmdb-ui/src/views/exception/500.vue create mode 100644 cmdb-ui/src/views/user/Login.vue create mode 100644 cmdb-ui/src/views/user/Register.vue create mode 100644 cmdb-ui/src/views/user/RegisterResult.vue create mode 100644 cmdb-ui/src/views/welcome/index.vue create mode 100644 cmdb-ui/src/views/welcome/welcome.vue create mode 100644 cmdb-ui/tests/unit/.eslintrc.js create mode 100644 cmdb-ui/vue.config.js create mode 100644 cmdb-ui/webstorm.config.js diff --git a/.gitignore b/.gitignore index 54bb2f7..c204414 100755 --- a/.gitignore +++ b/.gitignore @@ -65,12 +65,12 @@ settings.py *.db # UI -ui/node_modules -ui/dist +cmdb-ui/node_modules +cmdb-ui/dist # Log files -ui/npm-debug.log* -ui/yarn-debug.log* -ui/yarn-error.log* -ui/yarn.lock -ui/package-lock.json +cmdb-ui/npm-debug.log* +cmdb-ui/yarn-debug.log* +cmdb-ui/yarn-error.log* +cmdb-ui/yarn.lock +cmdb-ui/package-lock.json diff --git a/Dockerfile b/Dockerfile index b510247..0bf6ed1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,7 +3,7 @@ FROM node:alpine AS builder LABEL description="cmdb-ui" -COPY ui /data/apps/cmdb-ui +COPY cmdb-ui /data/apps/cmdb-ui WORKDIR /data/apps/cmdb-ui @@ -22,7 +22,7 @@ FROM python:3.7-alpine AS cmdb-api LABEL description="Python3.7,cmdb" -COPY . /data/apps/cmdb +COPY cmdb-api /data/apps/cmdb WORKDIR /data/apps/cmdb @@ -30,11 +30,11 @@ RUN apk add --no-cache tzdata gcc musl-dev libffi-dev ENV TZ=Asia/Shanghai -RUN pip install --no-cache-dir -r docs/requirements.txt \ - && cp ./api/settings.py.example ./api/settings.py \ - && sed -i "s#{user}:{password}@127.0.0.1:3306/{db}#cmdb:123456@mysql:3306/cmdb#g" api/settings.py \ - && sed -i "s#redis://127.0.0.1#redis://redis#g" api/settings.py \ - && sed -i 's#CACHE_REDIS_HOST = "127.0.0.1"#CACHE_REDIS_HOST = "redis"#g' api/settings.py +RUN pip install --no-cache-dir -r requirements.txt \ + && cp ./settings.py.example settings.py \ + && sed -i "s#{user}:{password}@127.0.0.1:3306/{db}#cmdb:123456@mysql:3306/cmdb#g" settings.py \ + && sed -i "s#redis://127.0.0.1#redis://redis#g" settings.py \ + && sed -i 's#CACHE_REDIS_HOST = "127.0.0.1"#CACHE_REDIS_HOST = "redis"#g' settings.py CMD ["bash", "-c", "flask run"] diff --git a/README.md b/README.md index 3cb8bc7..03e3406 100644 --- a/README.md +++ b/README.md @@ -28,19 +28,19 @@ Overview 3. 关系视图 - 模型之间的关系, 用树形图方式展示, **管理员可配置** ##### 资源视图 -![基础资源视图](https://raw.githubusercontent.com/pycook/cmdb/master/ui/public/cmdb-ci.jpeg) +![基础资源视图](https://raw.githubusercontent.com/pycook/cmdb/master/cmdb-ui/public/cmdb-ci.jpeg) ##### 树形视图 -![树形视图](https://raw.githubusercontent.com/pycook/cmdb/master/ui/public/cmdb-tree.jpeg) +![树形视图](https://raw.githubusercontent.com/pycook/cmdb/master/cmdb-ui/public/cmdb-tree.jpeg) ##### 关系视图 -![关系视图](https://raw.githubusercontent.com/pycook/cmdb/master/ui/public/cmdb-relation.jpeg) +![关系视图](https://raw.githubusercontent.com/pycook/cmdb/master/cmdb-ui/public/cmdb-relation.jpeg) ##### 用户订阅 -![用户订阅](https://raw.githubusercontent.com/pycook/cmdb/master/ui/public/cmdb-preference.jpeg) +![用户订阅](https://raw.githubusercontent.com/pycook/cmdb/master/cmdb-ui/public/cmdb-preference.jpeg) ##### 关系视图配置 -![关系视图配置](https://raw.githubusercontent.com/pycook/cmdb/master/ui/public/cmdb-relation-define.jpeg) +![关系视图配置](https://raw.githubusercontent.com/pycook/cmdb/master/cmdb-ui/public/cmdb-relation-define.jpeg) Docker一键快速构建 ---- @@ -66,24 +66,24 @@ Install ```bash git clone https://github.com/pycook/cmdb.git cd cmdb -cp api/settings.py.example api/settings.py +cp cmdb-api/settings.py.example cmdb-api/settings.py ``` -**设置api/settings.py里的database** +**设置cmdb-api/settings.py里的database** - 安装库 - - 后端: ```pipenv run pipenv install``` - - 前端: ```cd ui && yarn install && cd ..``` + - 后端: ```cd cmdb-api && pipenv run pipenv install && cd ..``` + - 前端: ```cd cmdb-ui && yarn install && cd ..``` - 创建数据库表 ```pipenv run flask db-setup && pipenv run flask init-cache``` -- 可以将docs/cmdb.sql导入到数据库里,登录用户和密码都是:admin +- 可以将docs/cmdb.sql导入到数据库里,登录用户和密码分别是:demo/123456 - 启动服务 - - 后端: ```pipenv run flask run -h 0.0.0.0``` - - 前端: ```cd ui && yarn run serve``` - - worker: ```celery worker -A celery_worker.celery -E -Q cmdb_async --concurrency=1``` + - 后端: 进入**cmdb-api**目录执行 ```pipenv run flask run -h 0.0.0.0``` + - 前端: 进入**cmdb-ui**目录执行```yarn run serve``` + - worker: 进入**cmdb-api**目录执行 ```pipenv run celery worker -A celery_worker.celery -E -Q cmdb_async --concurrency=1``` - 浏览器打开: [http://127.0.0.1:8000](http://127.0.0.1:8000) - - 如果是非本机访问, 要修改**ui/.env**里**VUE_APP_API_BASE_URL**里的IP地址为后端服务的ip地址 + - 如果是非本机访问, 要修改**cmdb-ui/.env**里**VUE_APP_API_BASE_URL**里的IP地址为后端服务的ip地址 Install by Makefile @@ -95,9 +95,9 @@ Install by Makefile ```bash git clone https://github.com/pycook/cmdb.git cd cmdb -cp api/settings.py.example api/settings.py +cp cmdb-api/settings.py.example cmdb-api/settings.py ``` -**设置api/settings.py里的database** +**cmdb-api/settings.py里的database** - 顺序在cmdb目录下执行 - 环境: ```make env``` @@ -109,4 +109,4 @@ cp api/settings.py.example api/settings.py ---- _**欢迎加入CMDB运维开发QQ群(336164978)**_ -![QQ群](ui/public/qr_code.jpg) \ No newline at end of file +![QQ群](cmdb-ui/public/qr_code.jpg) \ No newline at end of file diff --git a/.env b/cmdb-api/.env similarity index 100% rename from .env rename to cmdb-api/.env diff --git a/Pipfile b/cmdb-api/Pipfile similarity index 100% rename from Pipfile rename to cmdb-api/Pipfile diff --git a/api/__init__.py b/cmdb-api/api/__init__.py similarity index 100% rename from api/__init__.py rename to cmdb-api/api/__init__.py diff --git a/api/app.py b/cmdb-api/api/app.py similarity index 98% rename from api/app.py rename to cmdb-api/api/app.py index 95d6059..d331f6d 100644 --- a/api/app.py +++ b/cmdb-api/api/app.py @@ -6,6 +6,7 @@ import sys from inspect import getmembers from logging.handlers import RotatingFileHandler +from api.flask_cas import CAS from flask import Flask from flask import make_response, jsonify from flask.blueprints import Blueprint @@ -23,8 +24,7 @@ from api.extensions import ( rd, es ) -from api.flask_cas import CAS -from api.models.acl import User +from .models.acl import User HERE = os.path.abspath(os.path.dirname(__file__)) PROJECT_ROOT = os.path.join(HERE, os.pardir) @@ -72,7 +72,7 @@ class ReverseProxy(object): return self.app(environ, start_response) -def create_app(config_object="{0}.settings".format(API_PACKAGE)): +def create_app(config_object="settings"): """Create application factory, as explained here: http://flask.pocoo.org/docs/patterns/appfactories/. :param config_object: The configuration object to use. diff --git a/api/commands/__init__.py b/cmdb-api/api/commands/__init__.py similarity index 100% rename from api/commands/__init__.py rename to cmdb-api/api/commands/__init__.py diff --git a/api/commands/click_cmdb.py b/cmdb-api/api/commands/click_cmdb.py similarity index 100% rename from api/commands/click_cmdb.py rename to cmdb-api/api/commands/click_cmdb.py diff --git a/api/commands/common.py b/cmdb-api/api/commands/common.py similarity index 100% rename from api/commands/common.py rename to cmdb-api/api/commands/common.py diff --git a/api/extensions.py b/cmdb-api/api/extensions.py similarity index 100% rename from api/extensions.py rename to cmdb-api/api/extensions.py diff --git a/api/flask_cas/__init__.py b/cmdb-api/api/flask_cas/__init__.py similarity index 100% rename from api/flask_cas/__init__.py rename to cmdb-api/api/flask_cas/__init__.py diff --git a/api/flask_cas/cas_urls.py b/cmdb-api/api/flask_cas/cas_urls.py similarity index 100% rename from api/flask_cas/cas_urls.py rename to cmdb-api/api/flask_cas/cas_urls.py diff --git a/api/flask_cas/routing.py b/cmdb-api/api/flask_cas/routing.py similarity index 100% rename from api/flask_cas/routing.py rename to cmdb-api/api/flask_cas/routing.py diff --git a/api/lib/__init__.py b/cmdb-api/api/lib/__init__.py similarity index 100% rename from api/lib/__init__.py rename to cmdb-api/api/lib/__init__.py diff --git a/api/lib/cmdb/__init__.py b/cmdb-api/api/lib/cmdb/__init__.py similarity index 100% rename from api/lib/cmdb/__init__.py rename to cmdb-api/api/lib/cmdb/__init__.py diff --git a/api/lib/cmdb/attribute.py b/cmdb-api/api/lib/cmdb/attribute.py similarity index 100% rename from api/lib/cmdb/attribute.py rename to cmdb-api/api/lib/cmdb/attribute.py diff --git a/api/lib/cmdb/cache.py b/cmdb-api/api/lib/cmdb/cache.py similarity index 100% rename from api/lib/cmdb/cache.py rename to cmdb-api/api/lib/cmdb/cache.py diff --git a/api/lib/cmdb/ci.py b/cmdb-api/api/lib/cmdb/ci.py similarity index 100% rename from api/lib/cmdb/ci.py rename to cmdb-api/api/lib/cmdb/ci.py diff --git a/api/lib/cmdb/ci_type.py b/cmdb-api/api/lib/cmdb/ci_type.py similarity index 100% rename from api/lib/cmdb/ci_type.py rename to cmdb-api/api/lib/cmdb/ci_type.py diff --git a/api/lib/cmdb/const.py b/cmdb-api/api/lib/cmdb/const.py similarity index 100% rename from api/lib/cmdb/const.py rename to cmdb-api/api/lib/cmdb/const.py diff --git a/api/lib/cmdb/history.py b/cmdb-api/api/lib/cmdb/history.py similarity index 100% rename from api/lib/cmdb/history.py rename to cmdb-api/api/lib/cmdb/history.py diff --git a/api/lib/cmdb/preference.py b/cmdb-api/api/lib/cmdb/preference.py similarity index 100% rename from api/lib/cmdb/preference.py rename to cmdb-api/api/lib/cmdb/preference.py diff --git a/api/lib/cmdb/relation_type.py b/cmdb-api/api/lib/cmdb/relation_type.py similarity index 100% rename from api/lib/cmdb/relation_type.py rename to cmdb-api/api/lib/cmdb/relation_type.py diff --git a/api/lib/cmdb/search/__init__.py b/cmdb-api/api/lib/cmdb/search/__init__.py similarity index 100% rename from api/lib/cmdb/search/__init__.py rename to cmdb-api/api/lib/cmdb/search/__init__.py diff --git a/api/lib/cmdb/search/ci/__init__.py b/cmdb-api/api/lib/cmdb/search/ci/__init__.py similarity index 100% rename from api/lib/cmdb/search/ci/__init__.py rename to cmdb-api/api/lib/cmdb/search/ci/__init__.py diff --git a/api/lib/cmdb/search/ci/db/__init__.py b/cmdb-api/api/lib/cmdb/search/ci/db/__init__.py similarity index 100% rename from api/lib/cmdb/search/ci/db/__init__.py rename to cmdb-api/api/lib/cmdb/search/ci/db/__init__.py diff --git a/api/lib/cmdb/search/ci/db/query_sql.py b/cmdb-api/api/lib/cmdb/search/ci/db/query_sql.py similarity index 100% rename from api/lib/cmdb/search/ci/db/query_sql.py rename to cmdb-api/api/lib/cmdb/search/ci/db/query_sql.py diff --git a/api/lib/cmdb/search/ci/db/search.py b/cmdb-api/api/lib/cmdb/search/ci/db/search.py similarity index 100% rename from api/lib/cmdb/search/ci/db/search.py rename to cmdb-api/api/lib/cmdb/search/ci/db/search.py diff --git a/api/lib/cmdb/search/ci/es/__init__.py b/cmdb-api/api/lib/cmdb/search/ci/es/__init__.py similarity index 100% rename from api/lib/cmdb/search/ci/es/__init__.py rename to cmdb-api/api/lib/cmdb/search/ci/es/__init__.py diff --git a/api/lib/cmdb/search/ci/es/search.py b/cmdb-api/api/lib/cmdb/search/ci/es/search.py similarity index 100% rename from api/lib/cmdb/search/ci/es/search.py rename to cmdb-api/api/lib/cmdb/search/ci/es/search.py diff --git a/api/lib/cmdb/search/ci_relation/__init__.py b/cmdb-api/api/lib/cmdb/search/ci_relation/__init__.py similarity index 100% rename from api/lib/cmdb/search/ci_relation/__init__.py rename to cmdb-api/api/lib/cmdb/search/ci_relation/__init__.py diff --git a/api/lib/cmdb/search/ci_relation/search.py b/cmdb-api/api/lib/cmdb/search/ci_relation/search.py similarity index 100% rename from api/lib/cmdb/search/ci_relation/search.py rename to cmdb-api/api/lib/cmdb/search/ci_relation/search.py diff --git a/api/lib/cmdb/utils.py b/cmdb-api/api/lib/cmdb/utils.py similarity index 100% rename from api/lib/cmdb/utils.py rename to cmdb-api/api/lib/cmdb/utils.py diff --git a/api/lib/cmdb/value.py b/cmdb-api/api/lib/cmdb/value.py similarity index 100% rename from api/lib/cmdb/value.py rename to cmdb-api/api/lib/cmdb/value.py diff --git a/api/lib/database.py b/cmdb-api/api/lib/database.py similarity index 100% rename from api/lib/database.py rename to cmdb-api/api/lib/database.py diff --git a/api/lib/decorator.py b/cmdb-api/api/lib/decorator.py similarity index 100% rename from api/lib/decorator.py rename to cmdb-api/api/lib/decorator.py diff --git a/api/lib/exception.py b/cmdb-api/api/lib/exception.py similarity index 100% rename from api/lib/exception.py rename to cmdb-api/api/lib/exception.py diff --git a/api/lib/http_cli.py b/cmdb-api/api/lib/http_cli.py similarity index 100% rename from api/lib/http_cli.py rename to cmdb-api/api/lib/http_cli.py diff --git a/api/lib/mail.py b/cmdb-api/api/lib/mail.py similarity index 100% rename from api/lib/mail.py rename to cmdb-api/api/lib/mail.py diff --git a/api/lib/perm/__init__.py b/cmdb-api/api/lib/perm/__init__.py similarity index 100% rename from api/lib/perm/__init__.py rename to cmdb-api/api/lib/perm/__init__.py diff --git a/api/lib/perm/acl/__init__.py b/cmdb-api/api/lib/perm/acl/__init__.py similarity index 100% rename from api/lib/perm/acl/__init__.py rename to cmdb-api/api/lib/perm/acl/__init__.py diff --git a/api/lib/perm/acl/acl.py b/cmdb-api/api/lib/perm/acl/acl.py similarity index 100% rename from api/lib/perm/acl/acl.py rename to cmdb-api/api/lib/perm/acl/acl.py diff --git a/api/lib/perm/acl/cache.py b/cmdb-api/api/lib/perm/acl/cache.py similarity index 100% rename from api/lib/perm/acl/cache.py rename to cmdb-api/api/lib/perm/acl/cache.py diff --git a/api/lib/perm/acl/const.py b/cmdb-api/api/lib/perm/acl/const.py similarity index 100% rename from api/lib/perm/acl/const.py rename to cmdb-api/api/lib/perm/acl/const.py diff --git a/api/lib/perm/acl/permission.py b/cmdb-api/api/lib/perm/acl/permission.py similarity index 100% rename from api/lib/perm/acl/permission.py rename to cmdb-api/api/lib/perm/acl/permission.py diff --git a/api/lib/perm/acl/resource.py b/cmdb-api/api/lib/perm/acl/resource.py similarity index 100% rename from api/lib/perm/acl/resource.py rename to cmdb-api/api/lib/perm/acl/resource.py diff --git a/api/lib/perm/acl/role.py b/cmdb-api/api/lib/perm/acl/role.py similarity index 100% rename from api/lib/perm/acl/role.py rename to cmdb-api/api/lib/perm/acl/role.py diff --git a/api/lib/perm/acl/user.py b/cmdb-api/api/lib/perm/acl/user.py similarity index 100% rename from api/lib/perm/acl/user.py rename to cmdb-api/api/lib/perm/acl/user.py diff --git a/api/lib/perm/auth.py b/cmdb-api/api/lib/perm/auth.py similarity index 100% rename from api/lib/perm/auth.py rename to cmdb-api/api/lib/perm/auth.py diff --git a/api/lib/utils.py b/cmdb-api/api/lib/utils.py similarity index 100% rename from api/lib/utils.py rename to cmdb-api/api/lib/utils.py diff --git a/api/models/__init__.py b/cmdb-api/api/models/__init__.py similarity index 100% rename from api/models/__init__.py rename to cmdb-api/api/models/__init__.py diff --git a/api/models/acl.py b/cmdb-api/api/models/acl.py similarity index 100% rename from api/models/acl.py rename to cmdb-api/api/models/acl.py diff --git a/api/models/cmdb.py b/cmdb-api/api/models/cmdb.py similarity index 100% rename from api/models/cmdb.py rename to cmdb-api/api/models/cmdb.py diff --git a/api/resource.py b/cmdb-api/api/resource.py similarity index 100% rename from api/resource.py rename to cmdb-api/api/resource.py diff --git a/api/tasks/__init__.py b/cmdb-api/api/tasks/__init__.py similarity index 100% rename from api/tasks/__init__.py rename to cmdb-api/api/tasks/__init__.py diff --git a/api/tasks/acl.py b/cmdb-api/api/tasks/acl.py similarity index 100% rename from api/tasks/acl.py rename to cmdb-api/api/tasks/acl.py diff --git a/api/tasks/cmdb.py b/cmdb-api/api/tasks/cmdb.py similarity index 100% rename from api/tasks/cmdb.py rename to cmdb-api/api/tasks/cmdb.py diff --git a/api/tasks/test.py b/cmdb-api/api/tasks/test.py similarity index 100% rename from api/tasks/test.py rename to cmdb-api/api/tasks/test.py diff --git a/api/views/__init__.py b/cmdb-api/api/views/__init__.py similarity index 93% rename from api/views/__init__.py rename to cmdb-api/api/views/__init__.py index 4cde7ce..1388e62 100644 --- a/api/views/__init__.py +++ b/cmdb-api/api/views/__init__.py @@ -6,7 +6,7 @@ from flask import Blueprint from flask_restful import Api from api.resource import register_resources -from .account import LoginView, LogoutView +from api.views.account import LoginView, LogoutView HERE = os.path.abspath(os.path.dirname(__file__)) diff --git a/api/views/account.py b/cmdb-api/api/views/account.py similarity index 100% rename from api/views/account.py rename to cmdb-api/api/views/account.py diff --git a/api/views/acl/__init__.py b/cmdb-api/api/views/acl/__init__.py similarity index 100% rename from api/views/acl/__init__.py rename to cmdb-api/api/views/acl/__init__.py diff --git a/api/views/acl/permission.py b/cmdb-api/api/views/acl/permission.py similarity index 100% rename from api/views/acl/permission.py rename to cmdb-api/api/views/acl/permission.py diff --git a/api/views/acl/resources.py b/cmdb-api/api/views/acl/resources.py similarity index 100% rename from api/views/acl/resources.py rename to cmdb-api/api/views/acl/resources.py diff --git a/api/views/acl/role.py b/cmdb-api/api/views/acl/role.py similarity index 100% rename from api/views/acl/role.py rename to cmdb-api/api/views/acl/role.py diff --git a/api/views/acl/user.py b/cmdb-api/api/views/acl/user.py similarity index 100% rename from api/views/acl/user.py rename to cmdb-api/api/views/acl/user.py diff --git a/api/views/cmdb/__init__.py b/cmdb-api/api/views/cmdb/__init__.py similarity index 100% rename from api/views/cmdb/__init__.py rename to cmdb-api/api/views/cmdb/__init__.py diff --git a/api/views/cmdb/attribute.py b/cmdb-api/api/views/cmdb/attribute.py similarity index 100% rename from api/views/cmdb/attribute.py rename to cmdb-api/api/views/cmdb/attribute.py diff --git a/api/views/cmdb/ci.py b/cmdb-api/api/views/cmdb/ci.py similarity index 100% rename from api/views/cmdb/ci.py rename to cmdb-api/api/views/cmdb/ci.py diff --git a/api/views/cmdb/ci_relation.py b/cmdb-api/api/views/cmdb/ci_relation.py similarity index 100% rename from api/views/cmdb/ci_relation.py rename to cmdb-api/api/views/cmdb/ci_relation.py diff --git a/api/views/cmdb/ci_type.py b/cmdb-api/api/views/cmdb/ci_type.py similarity index 100% rename from api/views/cmdb/ci_type.py rename to cmdb-api/api/views/cmdb/ci_type.py diff --git a/api/views/cmdb/ci_type_relation.py b/cmdb-api/api/views/cmdb/ci_type_relation.py similarity index 100% rename from api/views/cmdb/ci_type_relation.py rename to cmdb-api/api/views/cmdb/ci_type_relation.py diff --git a/api/views/cmdb/history.py b/cmdb-api/api/views/cmdb/history.py similarity index 100% rename from api/views/cmdb/history.py rename to cmdb-api/api/views/cmdb/history.py diff --git a/api/views/cmdb/preference.py b/cmdb-api/api/views/cmdb/preference.py similarity index 100% rename from api/views/cmdb/preference.py rename to cmdb-api/api/views/cmdb/preference.py diff --git a/api/views/cmdb/relation_type.py b/cmdb-api/api/views/cmdb/relation_type.py similarity index 100% rename from api/views/cmdb/relation_type.py rename to cmdb-api/api/views/cmdb/relation_type.py diff --git a/autoapp.py b/cmdb-api/autoapp.py similarity index 100% rename from autoapp.py rename to cmdb-api/autoapp.py diff --git a/celery_worker.py b/cmdb-api/celery_worker.py similarity index 100% rename from celery_worker.py rename to cmdb-api/celery_worker.py diff --git a/logs/.gitkeep b/cmdb-api/logs/.gitkeep similarity index 100% rename from logs/.gitkeep rename to cmdb-api/logs/.gitkeep diff --git a/docs/requirements.txt b/cmdb-api/requirements.txt similarity index 100% rename from docs/requirements.txt rename to cmdb-api/requirements.txt diff --git a/api/settings.py.example b/cmdb-api/settings.py.example similarity index 100% rename from api/settings.py.example rename to cmdb-api/settings.py.example diff --git a/setup.cfg b/cmdb-api/setup.cfg similarity index 100% rename from setup.cfg rename to cmdb-api/setup.cfg diff --git a/tests/__init__.py b/cmdb-api/tests/__init__.py similarity index 100% rename from tests/__init__.py rename to cmdb-api/tests/__init__.py diff --git a/tests/conftest.py b/cmdb-api/tests/conftest.py similarity index 100% rename from tests/conftest.py rename to cmdb-api/tests/conftest.py diff --git a/tests/test_cmdb_attribute.py b/cmdb-api/tests/test_cmdb_attribute.py similarity index 100% rename from tests/test_cmdb_attribute.py rename to cmdb-api/tests/test_cmdb_attribute.py diff --git a/tests/test_cmdb_ci.py b/cmdb-api/tests/test_cmdb_ci.py similarity index 100% rename from tests/test_cmdb_ci.py rename to cmdb-api/tests/test_cmdb_ci.py diff --git a/tests/test_cmdb_ci_realtion.py b/cmdb-api/tests/test_cmdb_ci_realtion.py similarity index 100% rename from tests/test_cmdb_ci_realtion.py rename to cmdb-api/tests/test_cmdb_ci_realtion.py diff --git a/tests/test_cmdb_ci_type.py b/cmdb-api/tests/test_cmdb_ci_type.py similarity index 100% rename from tests/test_cmdb_ci_type.py rename to cmdb-api/tests/test_cmdb_ci_type.py diff --git a/tests/test_cmdb_ci_type_relation.py b/cmdb-api/tests/test_cmdb_ci_type_relation.py similarity index 100% rename from tests/test_cmdb_ci_type_relation.py rename to cmdb-api/tests/test_cmdb_ci_type_relation.py diff --git a/tests/test_cmdb_history.py b/cmdb-api/tests/test_cmdb_history.py similarity index 100% rename from tests/test_cmdb_history.py rename to cmdb-api/tests/test_cmdb_history.py diff --git a/tests/test_cmdb_preference.py b/cmdb-api/tests/test_cmdb_preference.py similarity index 100% rename from tests/test_cmdb_preference.py rename to cmdb-api/tests/test_cmdb_preference.py diff --git a/tests/test_cmdb_relation_type.py b/cmdb-api/tests/test_cmdb_relation_type.py similarity index 100% rename from tests/test_cmdb_relation_type.py rename to cmdb-api/tests/test_cmdb_relation_type.py diff --git a/cmdb-ui/.editorconfig b/cmdb-ui/.editorconfig new file mode 100644 index 0000000..6f77dff --- /dev/null +++ b/cmdb-ui/.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/cmdb-ui/.env b/cmdb-ui/.env new file mode 100644 index 0000000..580d9f3 --- /dev/null +++ b/cmdb-ui/.env @@ -0,0 +1,3 @@ +NODE_ENV=production +VUE_APP_PREVIEW=false +VUE_APP_API_BASE_URL=http://127.0.0.1:5000/api diff --git a/cmdb-ui/.env.preview b/cmdb-ui/.env.preview new file mode 100644 index 0000000..196e0da --- /dev/null +++ b/cmdb-ui/.env.preview @@ -0,0 +1,3 @@ +NODE_ENV=production +VUE_APP_PREVIEW=true +VUE_APP_API_BASE_URL=http://127.0.0.1:5001/api diff --git a/cmdb-ui/.prettierrc b/cmdb-ui/.prettierrc new file mode 100644 index 0000000..cbe842a --- /dev/null +++ b/cmdb-ui/.prettierrc @@ -0,0 +1,5 @@ +{ + "printWidth": 120, + "semi": false, + "singleQuote": true +} diff --git a/cmdb-ui/.travis.yml b/cmdb-ui/.travis.yml new file mode 100644 index 0000000..a08bfcb --- /dev/null +++ b/cmdb-ui/.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/cmdb-ui/LICENSE b/cmdb-ui/LICENSE new file mode 100644 index 0000000..66eef0b --- /dev/null +++ b/cmdb-ui/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/cmdb-ui/babel.config.js b/cmdb-ui/babel.config.js new file mode 100644 index 0000000..46e423b --- /dev/null +++ b/cmdb-ui/babel.config.js @@ -0,0 +1,25 @@ +module.exports = { + presets: [ + '@vue/app', + [ + '@babel/preset-env', + { + 'useBuiltIns': 'usage', // "usage" | "entry" | false, defaults to false. + 'corejs': '3.1.2', + 'targets': { + 'esmodules': true, + 'ie': '11' + } + } + ] + ] + // if your use import on Demand, Use this code + // , + // plugins: [ + // [ 'import', { + // 'libraryName': 'ant-design-vue', + // 'libraryDirectory': 'es', + // 'style': true // `style: true` 会加载 less 文件 + // } ] + // ] +} diff --git a/cmdb-ui/jest.config.js b/cmdb-ui/jest.config.js new file mode 100644 index 0000000..29fee32 --- /dev/null +++ b/cmdb-ui/jest.config.js @@ -0,0 +1,23 @@ +module.exports = { + moduleFileExtensions: [ + 'js', + 'jsx', + 'json', + 'vue' + ], + transform: { + '^.+\\.vue$': 'vue-jest', + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'jest-transform-stub', + '^.+\\.jsx?$': 'babel-jest' + }, + moduleNameMapper: { + '^@/(.*)$': '/src/$1' + }, + snapshotSerializers: [ + 'jest-serializer-vue' + ], + testMatch: [ + '**/tests/unit/**/*.spec.(js|jsx|ts|tsx)|**/__tests__/*.(js|jsx|ts|tsx)' + ], + testURL: 'http://localhost/' +} diff --git a/cmdb-ui/jsconfig.json b/cmdb-ui/jsconfig.json new file mode 100644 index 0000000..1bd0da4 --- /dev/null +++ b/cmdb-ui/jsconfig.json @@ -0,0 +1,11 @@ +{ + "compilerOptions": { + "target": "es6", + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "exclude": ["node_modules", "dist"], + "include": ["src/**/*"] +} diff --git a/cmdb-ui/package.json b/cmdb-ui/package.json new file mode 100644 index 0000000..9c5dcba --- /dev/null +++ b/cmdb-ui/package.json @@ -0,0 +1,146 @@ +{ + "name": "vue-antd-pro", + "version": "2.0.0", + "private": true, + "scripts": { + "serve": "vue-cli-service serve", + "build": "vue-cli-service build", + "build:preview": "vue-cli-service build --mode preview", + "lint": "vue-cli-service lint", + "lint:nofix": "vue-cli-service lint --no-fix", + "test:unit": "vue-cli-service test:unit", + "postinstall": "opencollective-postinstall" + }, + "dependencies": { + "@antv/data-set": "^0.10.2", + "@handsontable-pro/vue": "^3.1.1", + "@handsontable/vue": "^4.1.1", + "ant-design-vue": "^1.4.2", + "axios": "^0.19.0", + "core-js": "^3.1.2", + "enquire.js": "^2.1.6", + "handsontable": "^7.2.2", + "handsontable-pro": "^6.2.3", + "js-cookie": "^2.2.0", + "json2csv": "^4.5.2", + "lodash.get": "^4.4.2", + "lodash.pick": "^4.4.0", + "md5": "^2.2.1", + "moment": "^2.24.0", + "nprogress": "^0.2.0", + "vis-network": "^6.4.4", + "viser-vue": "^2.3.3", + "vue": "^2.6.10", + "vue-clipboard2": "^0.2.1", + "vue-cropper": "0.4.4", + "vue-json-excel": "^0.2.98", + "vue-ls": "^3.2.0", + "vue-quill-editor": "^3.0.6", + "vue-router": "^3.0.1", + "vue-svg-component-runtime": "^1.0.1", + "vuedraggable": "^2.23.0", + "vuex": "^3.1.1", + "wangeditor": "^3.1.1", + "xlsx": "latest", + "yarn": "^1.19.1" + }, + "devDependencies": { + "@ant-design/colors": "^3.2.1", + "@vue/cli-plugin-babel": "^4.0.4", + "@vue/cli-plugin-eslint": "^4.0.4", + "@vue/cli-plugin-router": "^4.0.4", + "@vue/cli-plugin-unit-jest": "^4.0.4", + "@vue/cli-plugin-vuex": "^4.0.4", + "@vue/cli-service": "^4.0.4", + "@vue/eslint-config-standard": "^4.0.0", + "@vue/test-utils": "^1.0.0-beta.29", + "babel-eslint": "^10.0.1", + "babel-plugin-import": "^1.12.2", + "babel-plugin-transform-remove-console": "^6.9.4", + "eslint": "^5.16.0", + "eslint-plugin-html": "^5.0.0", + "eslint-plugin-vue": "^5.2.3", + "less": "^3.0.4", + "less-loader": "^5.0.0", + "vue-template-compiler": "^2.6.10", + "vue-svg-icon-loader": "^2.1.1", + "webpack-theme-color-replacer": "^1.2.17", + "opencollective": "^1.0.3", + "opencollective-postinstall": "^2.0.2" + }, + "eslintConfig": { + "root": true, + "env": { + "node": true + }, + "extends": [ + "plugin:vue/strongly-recommended", + "@vue/standard" + ], + "parserOptions": { + "parser": "babel-eslint" + }, + "rules": { + "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-console": 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 + } + ] + } + }, + "postcss": { + "plugins": { + "autoprefixer": {} + } + }, + "browserslist": [ + "> 1%", + "last 2 versions", + "not ie <= 10" + ], + "collective": { + "type": "opencollective", + "url": "https://opencollective.com/ant-design-pro-vue" + } +} diff --git a/cmdb-ui/public/cmdb-ci.jpeg b/cmdb-ui/public/cmdb-ci.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..4da2a1cf488ea525e5c16c38b59e183b1a7ae87d GIT binary patch literal 133511 zcmeFZ2UJu`^B{hQA?GY0IR^pBIYo^Og~|^pCIvfx|gHTKneQlBb?V8#|puyxvQ+|ii(!E z^mJ6zZz}&}>MFUFyZe1KVgPV)_43eDRbVtWF=fP>2f0B5@Bl&Jnw7Pu`;A+-ZeG&- z_4||lAGgEdpS%NuyqC28$o|g&5*u4jYf$)GAo@KUPiq$tE&~8`DrlywLM6O z5abb))YZn(6)g4$gk`NAtZYE#H-b3VTwL5P;SCVxy!RJ6_J4t`tnU3m)5^;J5BN7( zz>;9aN{*iH_pSVYKK!4&x!m^#_4P9`gLixf4>djTmmJhvj$hP9_6s7rtn>~esOm69e1(}FOix3j^G-(f*34-oo^kEZSD zrLO-we9yy8?|1rWKCbt*FZFv#C(OZC{TG~S>#2Mj%m;Zu^RaVOQ3qkLr=gWSbkH{f zVUSO>Rv$-0Z4f2|;XY62+m}3C(wTbbpm>@86UW0_?~-R$Fn{09L*-IN5C=--;t4`O z=|lOft$x-8_64ZCmxDey)-KCJjcq-RFZub&gN?0{G6;h_Ky7SY4Sweh3id9AOPZHu zL*4KH?CT&tG}ZRL>SaEtXXqzSpWDC64tRO!U*>~4gw8oxY1{(g%eoHTy>4CV2jmSM z4Y&y?0!jcQ;0<2)05`x1aO~Nr+yI|`d!qta0Um%oU<>g6p7X1O(a$%o;Qco65ZDA< zK^)IN$|?MOYYX^*`R9M+{#KS3u>1Me=Vu9LUR!IiK&dKgsFz9g30wO2e1aYz7Jj=faBlfX@c);LFqieyX!9*{-lSogwc;NhcSdP zgE0yi0t-K>{4S}b;}efx9Q;993zz|^{iYRLP-CvZ>MtC0c93fkbOm%7kbjVObV_s@ zfEQgDl;j4w94MOznEOk6mt1@Q!P}p@{H6C_c$Zu={zb;$^9i{LMSkbv-Y==Zmi(oO zf2Z>28%Mwf#M1nCOlTOi6xso8f_6gdpp^h46b`L|c0=ng;oo^y`KcZIKWfwasZnQ8 z2FG7G*YmHhUPu0p|4RZZ@a<*&mo4DwW$Wh!_B}w+&E4O_(cZy}@djv(Z5h>Ft@*Ao z3SJkG0Dw!|eu)DBdwM@@HiWYG&phjA03e0{0G!i5^IY}-;1e!rI<@}HW3vE<3MK&L zELnSd`20o>{qhF`zy*lFQ9%vR11tb1D32f@3P=I+fHI%~=m7eF319(g+yQU_dG-YY zfyY275COyh2|zNC24ny^Kp{{9R04HC6VMKH0e!#_Fb?*MMPMC30EfUC1OmZ=5J1Qv z)DQ*;8-xcU2oZ)WXK0dF61+$8qx&mg!Ds3 zA+wNG$S&j*4T^@3Mvg{@#*W61CXRLkO%qKY?GBnf+5@zQXiw3i&|agZqZOc4pf#a& zp$(zUpsk}FKmjNoloHAW<%Nnv6`?v%Q>Y!(0~!nshbBVPp+(Rdu$>2?Gtdp_2|6Y^ z89F06FW5KL&<)V7(I21(qrXH?M$bX7KyO7KM4v@RpkH7RV9;XlU`S%9V;E!DWB6i( zVkBZ@W0YgGf#YTo;}8=QlM<5yQw$uJCYVl`0hli_-(ePGHe&W;&SM^6VPR2Y@nFed z>0nu5d0~ZOy}>HLf@2L}En*#G<6$#k3u3Ean_|0SKfzAK&cklN9>8A4KEol#VZ)Kc z(ZR97@yChA$;7F_>BU*ZIm0Ev<-nD})yH+heT@4Ww+OclcLH}04-bzSPXbRD&k^qt z-fO&1cwg{l@lNnb@wxF8@y+qQ@uToR;y2=t;_nd<5U>--6POZs5kwK>60{IZ5gZee z5%LkL6WS2M2vZ0v2nPtah;WG5h;9&B5IrPHBq}B9CE6gyA!a95B(@?BCQc!)CLSR^ zAR!|WAkiUlA$duXN76~MLW)JoPO405L;937gS3Too(xLHLZ(P&O%_6yN!CWTNRCO) zL9R~jL>@t2NZvz^pdh6XrZA-Nqe!8srwmcfzX z6$6}Mjgf-!2IGCk*Nm-<2qs!4H70MS4@^BwXUrVT2Fy>Gi{wp0G_xRB z8CbPg16lJ~$JlV##MvC!lGr-fj@UWajo6>FSF*2gP;sbpJmkpdnBXMfl;eEBna=s0 z3zJKn%bDvPS06VTw+OcbcM5ke4;qgsk0Z}Jp8jhX*CejFUQ53=!i&#)gV%>QpLdpz zlJ6$p6TV8mEq+#hQ~p@~4*rYlBG>O<&%8b^Kq{ai@I;_SU{{b^&{{A>@VgL!kctpY zs7h!@m`B)FI92$E2$_hM$a9fqk#kWoQ4i4~(N!^4vAbe##YV)*#czqf6#pWDA)z1v zlc-%LmClr&mtmH%lKCJrBg-gzSN6T^j2x4km0Y^q zoIH!XjeNHJ@(r#VPB#i}Y$;q<@K7jMI8u~U3{q@Vf-0#hg)8+alPVi1Co4~>FssG}U6&M%3xlt<`hY5gK9|K^m=^_?ovhlQrjVa^Lj0S)+xfrJ)tC zHKEO>?W$d=1L&yh#OqAn;<)wTR;@0k?k(LE-6cH%y+FN=+hn&bZ|B`U)K}1t)*m%Gnz5xHx4rHGNCbXG^sMhGBq^KHa##?HcK#DG#4=sH6Omi zamVjYrv;70eT#ZaB1QADI>~z7M&9O?&8n@8 zZJh10os3@*)S9Io;lz-p{;eePn%7e2#q$ zeM|jF{9OII{ki>L_%AZ6>; zxR0G5e|vKMN!*kD5TlTqr*uyrJ)M81`Yb<`Fw`S-UA~6E_()#7sNP)=Lk*FxUsGexi=+qd@7}uELSh?7oIFh)Bar5z7@fEKaUxmNg zPq0krOcYK`OTta^PMUdr^L5o5);BS4kjW0oLn#U=#cyffzIc1|&gR`fs(flu8eLjM z+Ua}8_dh#3$gB_oubbcRvr8XqGgWikB9Zv6a0oCo2!HfK>Qb zASxXyXR1u9`l~gnn`@+M%4_**Kh`nTrPNc@M>pU$JZ(V1AHokB-5WQW?3?DBEt|(% zj9b39>bCZ@X|{c7S7~qQxX}UsBJ-uLQ?j%AtN7Q-F43-vZjtWtZzA8ydqjIGdc}IH z`Xu^l`lb6D2IK~s29*ZezpH=m8qyx>A2t~NF=9S4^TX!H%IN*koiU%Wv++k07!%=> z#FL3rv{UKRT+_ufqBHfgO0(T_x97&^t>@PlJQt9QPnQUm5|Q+@&`_|0X z7T4X^&o)9gNjBeZac-4u%Wrohj1h}F9y_SrmwVKEANPg#n-6XsOdYx$o*jiBQy=G? zh@W(v8l5hm`6989ug|&8Yc4b|CQvRYl)IIO)z7s66uhI^fgbMeM*tu&0RXZ-0Kg^u z&G-6=0WOsxAPxu{Liix-XivczwHG}ULj@Cx*@g8Q+ZE>~E*Bma-Uj{vK_%fwqHN+~ zk}A?>vM%yIiXW8IS5~Ojsds2jub$JP(PJ^-G7>P6GLy1UvQn{KVW;At<)q_cb>qT~~c`!)JI(Bdp1?S+a$+WvR8gEwBA;N5mJu z&U;_gyZE{ZyEneI^}OwM?^Ea}>z^Me8GQU*cZh8meRy@G`$zF;+?dz6;e_}k%_MSa zYPxAAYxc#Q+q}Vo^dc+R%MO>nuavDOt-;psZ&+_yZ@F(rAj)^P_vH6K9FiTqKH)j- zLBcL1QK-MPzaVr4Jq|+?lLB)Rs}%bsjy2FBXt(K>=qDHk7~7btnX_3USnsplWas9<;aKDB``Wm8|S2WLVPHVMj=jp`W3edIFyM6nHzJLLfA(;`D(W&ve$%JXQS-pAj zo%a^;me217T6x@aw6?M_wbi%NwbypgbkuZGbC$Z#=fdPl;fCjq=8k-D>~Z3G?v3F? z>dWFM>97CLGaxarE@%mc_lV&!?-Q92?Wgyi`G!V5&klpX7z;moNggQ}r5o)U6B(Ny z_a%Pe6)KS?N#ymdH_pk=Qqta5z3WR|NxS$!p3apalX)x4I@|l>^PJb9o$JouE+j1y zD!%>c!RP3b{Lo@K zp#0D+^d^kwn76Swv39VlaYAwR@M!U-@G}Tp2qlQnh?l4y_;k@k_rkn2zoQGBBe zzoJ3~p{k;GrD37@aW#TgmUfdagWKpk}IB@ha1jwn`i0TV_r7iAAB$Q75MkBe-tniBoKrPxeGH14~RSw6%?Hnix!s= z-;_v^RF^!E%8=HTzL3e6HIc)TE0?#vL3*Q6!CjG2u}|rVvas^9O0udBxbCP`f1tsm zv7niH(^QL6Yfw8*NADKdtzq3adKR}?Z?EZpHh5^LY(!) zTx4ogZgfRVOKgAKRQy%~dLmbn`RkZBZOLbE`QF`2O-TFt9+@tfVVjwp)%y`WM>^Lx zuQ-3bkh{pKIPcSTiD>DgvhE7%%KKHVH4L?|y19m%@VX{}=7Lt9w$B|3U&g-rbu)bH z>y7N!A7mc_hSz^AjIB)q(`>Vr^La}cD-YL!%}j*#p4_4Mi2?HUW&8gYgS(s)Fhv0% z;W+?Y#$@zz0pMi;0C0f8vn!zQd5Zu5^d$f^CRG4(&O0u0`tH*gbE@8xef7zBtWVllc3Lc4b2ekF z7LT@s&XgWXU&vqvdIbGU(abt5BrJohNo;29OzcY>1)QE-lH3sPPM+9nW?=6`@D1?S zUC$PX6ATt|6uvDYDas%Q5t|XOlXxZRBqbwFC_N#QE9)gECyy=Pf1^~POtDg_M!7+y zMYU6{SAAGxN^|+c+hQ z>nfWgJ8}B}hbAXnXM_8hE(dOE?x_#9J*B-Oyr+DH{bKxg0*nINgJob1k2RmnKYbA@ z69&BKkN6b%Haad=Egt%+Eiv}BZL;FqYpKld+0unGwX+}Oq~vuK0>xsVwM$LP9V!E> z6KYH92jGXz^sQ>`USHmS?dd-66eAo=k0Sob9BbO$MU4!dalX+M5ze^Rjhxd1URYGVXO*@A&rKt9k4OaaGW zoZvb{8;l6VKuRH_XaE`)=;c2_`;0aR`tdiRPr+Es85mOvLGQ+(!mz`rz{J6{z^uR` z#=4Kyg?$Y>8v6jp9H$+Z4>t)9iuV9-7T*B>D}f?G1EDlwJ?O=LA=V|H0{v7J=_@im zvTx+BpyyddX>|qfN)?qIH6?WijsMkaS7&LH=yd3@>6;lIF)A=&GJRuCWU*r9V@0xc zv!`-A;8fm+aQgB;nUU)?0t7xrQfq1gSb4d>=GigN` zZdqd41GzEzh8x8SpA}1$DwS(h;Hs@^U)B3GMl`2yE^F;*pWVXNrPSlNEupVvU}G3$ zlx$pWGG=;i&U{D1!prjg-QIf;Yf&3l+g!UP2X;p%r_au(E~>7HZYvL@J%T*p-snCz zeUto_9!dm61uh3G!*U)IKJgD(2JJ~-n8u5a2(_2pQF_rcv9NghSB;5wuL<8&rP#b9 zOKpE2lrEaFoAvplcdm3kX2DQV)~CP{^D@y2!piyTvf7Y(Z8%lqY;$g_N4xYFtj^)C z+;5M1&HH5s*@j4lzx*&5T^xTnNj_CFqd$wB&sj8CCR*uS3)|4#BHkX^dB5j$AbNy$ z+oUjJTz2S@xVv`lJ1lq$p|oEfh$ltRz5Zvc0CSz&PQBt zxXVGm8^K4+FL>QZAXqR{s8{$*luOJ+JWgUjid@=6CR27>Ugk!m!nBf*a)ipPnzVYN z#_r8qT7^3Jx9;nHz0Iv3VX$VTVVq}*W9DeyVZmwivRVO=r%r|8dzr50uF z6}*)(Rfrnh+M;^g20M5|6KS(;OGO)c`>l?YFY{lyx*WT+zs>g2^y&6L8z>u`8^RsF zKBD)-V>D_kcf4g{XmV+4XBs&RnZugLT)~tyZn2uZL~8Zfb4uY-4Rt zBdT^@?3(Uz?d|T@9XvTyI>J0^J%*h~o$Q=uotYwWkrn6G7X%k2D3iyZ~Hoz$e3XK|NYfVsQ=T!<2*3AFx>zJ~vV5^&?n??s+`H!KJ)HMNPxT z&cVsWEi57`CN3eVsHCi-s-~`STi?LY2n@Sg+t}LKJ2*OddU^Z!`uRT$dHO8$dDx5a zxcFBIiAk^DB&TO&W`WI?n^#g=R$ftARbA8E(%RPE@ul6DBqoQN_f>#>M`baDPwuKNI0)BKjktKq3&320A)A7WkhS4+oF< ze>tHh!3By5Y7D>!Jzg{tCb12}{ zr>=NW0iK5fj@f&WZ!BAi&mvI3>ez0B?+f_k$Z^s_uN%{a(EhpZ5ihx}C2o*|u6cX; zyc?#U>*}>Y#Y8aW`=EZcwkr1o5z3P*yf?pVA7uA*swzz>XJW z8Y~!bSuk#OBT%Z?*eQuKR3&_PjcbCDk&^qR+ATHe)i@dFkMGgKIsYHMPNwIdZyF$k z4t+%{Pyo5KN}}nr-8YP%pNQ4e`n9X3bsVtlk+Zu|toO6#B2YqjrPABY!lPkM5)Hm?pWgN}E~<`Pt7jr0npw(gc+WIvtHQRyrnplwYIq-z+l8jKz-4P>N#3 zuT?cLl`EA14K(1$KTfzi-^hUbVNhC9n#1#f|3{}7vo5>SClg~iiFj;#%pv!r*bP3N zOt7d-Si%m|&cobLfO9YHjWf02Zx+1$<&iAy#AfH8U5n^Nq8ymjpzZx_ObpDNi5z&W zu9TC_AuRYcobJL8F%zF?;ZLywD^cy>M|WZT8(w#;YsF>$hd4Y3=5Ndn4F%_Iu z7c6rD!&t4*Cu zxQot@t8;FfB0GaR$06_iLR9;uB`_15tvrsRrS33=n!KB2QoDIy^viYp&bPF&!*yMA z_N^%3=>_Eud}Hv89?3Qw-$s1Q&{o6SlaRHT}ZQ)|(+*UvR9*--u z*_oD~+~d7z%Z+>%YwJ&4oMEqbzAt1MX!DHj*2>88^19YArZfArQz>x?ZyA%C&-D<3F7XHNGM2`Xdq{UgN2v6bo#^%k5`;nT z*ghSDaedk6q;Ar!%1}G~^O;!$rkHQL^Qq@>9oL!V_{Bi+yp$Wm%9w8xr_B@fviw(( zMGf7Fd8Ikl4!EV-)FD@6%V>A85@Bzr$Dz8%F8RR&snXwNNm7guWg}l*Qo9&z{n6F< zEa={IMSdiu;7MRyRM#Vr4$pjNydKbU$82~#U?sJdUtkHL@v45htT277XVv=v9=m4? zT72`s#=kKS|6($X4lGds`X~yB=Q;L90S{p3QWi$LA1sGpNHY72o5iyu=WQrpf79Pm zs&#s69jUo%Um1e}s854)&Jx2pi=WAsoq(nw>Vo9hy4`{p(ebiQ!nyc3x-BWOCg^o) zkHkxNE%(pVG>#;XlpJxe3DspV)r;&~El77FQ>z1ei zJ+vDODsdi=IUOZ>xxSQ7}Nx1Lap zT5)Qia(1BDj&^mx9G%hZa;uduj49EQ&5beo!Fq-GmVtf%M4o;dk*2z%60V2(fZ z^hyZ%ctX^=Mk00At0cX99Yd7e4mp(Nb(V{PuvNME;So%)8b>g+2fLoI6f5f$DhaXd%vU@spYnGv}S2 zQ-%75ETjQ zrb|sZ%CeP-`m$x$rv{i68V;{6nb`S%?7Us!@vW=<+oRWwn08q^r*=D$?Mbt|>gDTZ zSMRVduw};w1SUCOOVYJ?%=Sv~_3OO$ozEC}e0|v0R2{*UT37?;;02qXeRHyXm@qGC zORJBLH?3)XX7he0ZA|+ocGsEiQvXb5|A1E+Hexph{pQxrnu7U19Y4o-Hk^^AY0sXL z+hGfxG*^M1RKynuV8-^-c3pjHXtfl|;`EuGXWkOeuhM8IIs|FW@N~;|*n6G#+S*p! zi^BctYX`itE9`8x&Dk7tO!Xz*Dt#vMQYZk=4?g#7sebl_2%U}=d_bgYQe#ZbdLX-` zTJ64`JBJCuL34sXOEk5%LDLLE_GR&NqL$n;O9lrTA!EnAwZr6utclwWrUSo3L-X=Mp=vVvd`SYAGhiaYfNA*^t4Rsw>)y`45RB&Kz2YhlB{K3?1ijo z@HbP7(s{hn9A`<4i80=`E}PElRqT2QHkhndA_#1Uc_=kv65Xb_f7$`n1UGGNo@4*0>D z9=<5~(_yHBQ3a|Yj2bV!9d49jUTik!^C76Gaq1&{?(Hoc$hm=zgWszwwgq))U_OxEd{ zSU4`(F&ic{*Vmq)03oG2kF`lkc=C@m5$kRAR4Gj*&SN%)AJq`whTn-tsZBCfC$3SW ztB11YDv2{%L(xMX%hNy4Mp_^H&zWp_!EyYa4Bmoks=Lmzbc+sTDlXZ)GqOn+Wz=A{ zvsr1R=MiWS^UD?hb)Bp7P^q>n^NI0Wg3dTu!wqe5;BX!9j90IH`u3o`X1-?CfU#|42y1NB zL_vW#;}dL_oP6))G#p_9&E{!*Y2Mj-JBV{ow&U>do)WdW%FcVe+E)qU?SeQID_#&( z{~!Je=odrHG)4|4ak7GlbgKuG?@}td2{oG&KCU2%Jt(O3iH)ef)~(L^HcrP=D?P#+ z?-{wSJjVaZ1v5Ya2(7deLHKjaqbn$2uzV55O>u4nwyG#>;p+t*Yyw;oX^$lA)oER9 z!CT?%0scfgX&=|3s~ytAk8iIl{6FjC{^r}``kMNr1@V?0ReUzrwB<;FehJ?sPtkBw zxWPScT%zd}T1S$SJa6}wP(W(rNwV|_ zd^sc7F1nbn=|F5^Wu?gTH*AMr2(opxSl_2TGya{N!|Cn@!|kA+sPN@qG=8scz3bCI zmHb_}X`%A>mN?Z$0Z%;ElDmStr|`qOsNO=G~NB*ftm=p@}~iy9mxg0S)6w=LMOxH~V!R-pcOqRruZk z|M}tcyy~eN@>~-I1XUjQZy;M44&SNN`_dEP( z92Uv&C#BLoLhG9JD$D)plhdS&Gq;_LzYsbMw(9oPH^RF}K>>1lC}7&c$R{bRSmS?`~@>i@3!88wKMOK%8A0im`#%Sdp84Ssa!b|IvS6ylGT zTmCt-!%Ja1$>;D3rX^n#AYUTK42FC{;!r@JzRo*`;&k}zn?QeXZE@;$eh#iNUiPB^ z{I2<4&_f)AZEs8??V^vLznMNq`yw~TxB%a$AX_%&St&lYv!sXhUalr!b|_$87}g?q zymtZHpFTSi10%2*ziJ~o4wK+N$51*M4nO6&pib&Y+xxi+njVE8e`7#&H%NoaByhQN z@eKvEgH|@o{~gHLwU7&DLU3_)Ls!=OKaoyuj@}-&kH`3rWdF3;f7Tn}nQ6xySCA=g zA;C4#7jOBTccA~?JA)AyO;glxgm2?C-m%;5I4;-w-?k2)mZ}7HjV@4K%X@gem(F?V zIOCZoEg_vjTfcjRPwlqd=CRQ9Y!6r0&d}sFHd_g{0KO3o6c8?_!h`}0%XyWFPRnzh z_lAS|z|D_GV3Y~?=lXjcpuX>(a;C$-w;;Q4dDa-vk;I7YusVU+Lc0_1PP>u!Rqqx{ zDqn2!B2(VXVE1(RED<^!>SjFysM$V9`Ous9hqen}mH%<=M5O`%>0;B9zwTTv+wEw+-v$Co(!%S+2Y zycz2^g|g1@+*f}>s4me))k};Zci$Hf)LYEUoKGM1t+l)|x<%ziv@`U8;!|fwa(sAV z@up7+j37$%a;qDg|Z9Zf2CQj3Up5DK`xBy_(d8;?wy*Dai{XLY&*3W&v1Kb?TBobVvhGWn4&9AP8iZuBadoI3*VLRAE|{vE!b z!{DZPQRrkE&T!zYH?k8i_lYpP8JlK^F2j&Rf)zSd6qG!D;m>it%S|A4Aw7?Ty~!`{ znaWCMC^Z9P0<2)5L7Bm>5)2xtqkzEh^5yfSBx57hOb~b0o$s*uU7eN_+$=NRm!qhmKNeoHaD;aK%syiI5g)(p0R6Jk z=lW2en%d;6`M$}Ao6QBz%Y6QQ12*^hHq-=S0Cb~PeWT{NDtZbwvCYitx2fCO_F~!aY1p9eS)dqA&)d88 zFD<#lN1eZ>*TNpa)QyX4V0K!r#?HZ&By#IYaV#(K!*>bI*@SbBSy!o0f%@{rf@uedn4( z(pHY12-lGo$_uW+jf0e4JZ1Z=ADuY`*C%esBovRCEMIIT^)yx37Ck^EdtzTQb{Jlm>()AB0yX_HuK>)0Q8^c;H~|s)YN&@!Sur zb&e8W`EPAZo*>_*HJ52sY-a7Nh+C4b54_sc-U&>;!{OlUoKrYe)XB3yg#vVghf;Yz z@2E!IS58)~;Sv9ss3s!e&120r;mDGCZMjQH<;(fNd)F*aOTK>Ppe4muija`3knFAZ zg+VaG>G=;k{ud9VTc~eS>zaI<{^;zbxeM;E)q8gQ-7ed|^>HP?Rdd##!x^oc!UxSjGxS{K()iWFFMOF&O0v9!B9wB|9QOg`B^j) z2aK>pyeE+45jtZZIXhxFCIiDOS5*H?R9msh)+h^ic#Q%?nKK9363yi8T(+WFZEGtN zH{OVEJxB)Ne|vU~A|U|$OgVr-AR}@>o%REFhn4&lmKfRlJ0Wd=Q@=^tU-kYkI){8z zw);1||5fLGnC~dw{8jH6f7Q7>jhCVQU-TaRm!<|B|7%n`UX}!$o~K(Qe}sb_Hpelp zi}$^d=#gri;N*Ch&&{{K;@>R)2M*NN`e~WX`smmF?W?R&w-T&By~m6F!XWC`H23bW zD*Z3omH+=5xV7r;M8#w5a^J#og*$B%`>0a_GCHYUHy3N!wWZ$LJ>u{G`&0IR9;4M4 zk+2Q#du?W2+d<{Jz9gBg67X^<hm5zLngEOU$lh5R!8MyU# z<_7-rtPX8^1~?hS1v7jx;I7R<0UZlz&vz*_D$R&{QNzbc7c|a|u)Wz_*mMr;_<#X1 zXaNNy*aVsv=ZYY1{%kVOspX7kAor)KX zhnmO|u=eO`_-u9^77CE1Njg7$4o-8rD1bm@M(zah9lrft4*9TwIz9UMW%cx)DhhxQ z9fyqa?{HkLO`=A4PBkj#jq7s6i_!^aSl8zxT*Lb_^`g<=X?^4@w5 zz>~%<;$SmxEq7fS2u|1JPTi}Eqvu`ax;@QV-H$8Y>c1*89AbwX23cacQ(7j>Wra1f zXU@&%HzeuotFC^RTN}>G0Y?-Vm=D(O9qdW_%UV!x5I)}{*Kv|uYrgHNba@<17IvJq zQ?ou>KN2ykMIu6ls+n?ujcdd5R zVLLZ$;P&F!*u!1r3&Hv`=khYEpCD!Y0~{jxvJvYvIfI!F zu34W-qlS&YkajRD#odhNvOwEHYlv~9_VXAURIDBG1qOFXmv&Jn+$GU0 zuiFf7?TBnaCuu592ozxG=nbK#8VV*q7Moo=er+~2tv-8hV>zan&DQY2leg7!Oh8lE z*U9B(t&OpDe7C_>DuMZxO_w?yEF{xT*KC(1*`2FDl5}fLSjwZdP=IQDcf%72WQW_- zJ(0+(-FWPp#8de*$PY6dY+t!}#H0PU2mb!W75Q~2uzLVDKdf_lT#W+ydriIHWP{||5cAC{V7A_M%5QVKwex|H&Y|4COXT90&_yK=Zpr8Jfo=93I#J+pIBAx- zb^d3mSY?Q}sq8x`F(Q&5mxv>`gnwsw$ zZbOd(G}kpFuHJTICK!Kw&jYhhKeYHkf1T#+Hi>$U^7}Qz(}-0u9b3PO-Gc0?wd)0l zuCjM=oVIM**k6j@HqdC!@zVqvxrNiDJ+}HZ=q5b6e-@;@)v`fTM{3eV<FuTD62t(3PQRtFyijQL!c+q%6~%CmOF;ncfX zH5%uxY+haoPWKFQcPcCDso(kpS0Lqji>4n+J?u`pP!xq9Y|C9dr*Is$f$vh6gKjPu zn%Ec57fAMAl>8XERj75)o)Tp5?M9muyQRmfDnUSE=r>e_5wcB(-Snj+-zeg^QfFkV zT+48(r|&%R&#&?c= z4Tht#Tz6aC9G(rcIa0i)bjd%fY7wA+bRK}~6OqGX`olTdX4vqMSEl({W!y{`Z;P6) zuTnwY=NA&xJzL)w4l56;lFW`!087Dlq$LamU>EijTG8s6tIUd-Y9|SFeBEt(;^Fxc z&`~r8w+Q_U9BW=x999~x&vbM)N!Qv_gkLmKk@6WH_wx_Asu%-JlspqjD2s2 z-8RC~AEpQ?f_;*mfPa6B70L-Z1cBh~Fjh5NCZzdph*>+mP_$ z_rhk(-H$Jx#(c%R>A|mZL>IP&L$`uv+wgchP3LCWXGY(~6Mcc^Cjn%g&_4TtB16}t zk9;Yvw<=Sl3v810uG_@cRDRmPx(jTY>O=n3R+X&_ftyazCUWa@%b+!tas1<(F|3|x zGFgt}{AM^Al4Hi@sy<>Ulb(Z@rXx>_c`CoXXrY5f@;Rvs4%N(dFGrUD(KA{0K=UD4 z$u$_(HZo|Y>y5OGo3*b$zNAd|l@UxI-_$YeX``5YWwiE9z7c&P_FFR{!$`|x*p68{ zoVZRZ_n5w`Wz3)=gmy#Z+fA9xIdxC`SO`XVYxqrkLw);dT%D^@BWZq$hc1YQ_#KAU zRE82Qm9KP?gUw_06?NEWK|SRd!#N{K9(N?kljmk>RlO6W(v!NliQm)Au4cc@JVbg| z&cf5OTet1q_}7;!&76)t^%7qU%3doiJI>;Nwx5y@exr`PPCT}XSbHe5SzZ<^n&!sz zYzzAZ$wHMQuG)r5N8~3xwIBPIrM_+349DY!-vc@3ozGlcy!>MC4)KX@tVmG?$_Q?ycNGGDKVH4 zrKPGLSx~s)GI^~Wt`5%*R8+)_8q<&=cZsBFUWXiByC$UeeAA_=aISeWW znM(&NCzL(-%XwHpkX`5dHyG0!=8p_rMBD({#O8#u#$D?ShCMFAh$z`2nh8R`OCpMsqe zau2>&eYKV6}nw zwEnQF`m}%#DV4Xbs#oc6RavI6PFfb;jVC&EK4JAbT0Xe`Ni?|gYDys^dQnbYc)Wh6 ztjv;quFW=TK%HLc9q!G=uPlw&_kR3Pw+tkUy+i+T?hO1>2FkA9&e(Htb7D9(176ip zvPOy5$l~ALMSDoIuzBT{Vfm*K;ZCp(O#`0cxv@1RnuW%sZ@n-vuqO2odN-L@_sL0Y z3eOp@t>(ph2i}>=C)6>T6(YBn$Ve0M4N_9Epd63&%P;EM(t}l!{^xe=U{iM1b>nW8 z$$a%xh@ira$k*-~F*?*o#f-z!ECnt3KNK@t4g-XQBWPOu1(`XYJ+f=HQ86Y|yQVJQ zD^YxBkTG#wr?T=L1#2YQCl$VG`j-mv2aLBW$R_HQ$@Tv3Z$O}>Sjs1Lerzx_xm9Bm zSU^7eNao8-?26~Q!nFKR@5gLY;~1%#z&xti8!|5z9=?v>F9zIk(yPIhFN#ocD`9&nL_J6Icnk9 z*Fj@zQ|ldPEgU0nsvIsT&$q*p&$G4(UjS#=-G@mSL2}^cckyljZQA1oxpmXZaF=W4 zmUNDiL*bK!36l-)W}=Brd*Z*KW$JkHPPQ8M6s+_vb?koVa=~)nD}EtY(erM$t2o@p zg6{kK+PZ#ChcR02Pbcn9efJ+P)hDWIMTiV_B;nr|eN~!zrwPYtxen^TL#8%dM|5p$ za&mGizChD65bF`rz?wbl{4>)XrAf=)tIZK_q*uO=XFBaD)uu;!h{!VeiM7|nBk%2? zCmV$yICyuN<-}>$OR1lc7FKS#SbZwRyrZ#@>B9I@T#cbSQQ>K~rgK)pnbc{~9r#rX zFu*Vur&V4wjC>e0Qkk7Q86ejL8zX8<<=-KS7KTy#*{${THXo68C*gQzPis+>jEIQkWW$|o7np9w2(Zi!w z%P8i-nK}ltUB{ohnUC{J7|v5<;~6a30gH z&M{vhm+Hr=k%h1vp4IIE=zjFf$ z@YxivRrW?+fX2>}WuL62rY*a6c2dlutUlyc1-v|bmah;#KV=gO#bG{4Te#~1{=Gp} zjza(GMpzinj^?ag?EJHO@F?acRxSN~D|uP1@1HT61FLU6qP3y5=a4AUnKS%6&;LT8 z2~j&clywpBICqtEc}QAWrmo_}$JI*t(5UY>^R{y|-sfdc?+2d5%|2mS9$PW3Y}B~| zoh6_Q(wv3AU@H%I{%`EPcU+U{x-}d{L;*#RA{_*zgLI@tL7E5%N^c?^goyMSM0zg* zf&xnKkuEiKq)Qi&7J5&p0g~`NGyBYJXZGH+&whVrzwdX>nLqf2JjqjX*Xv$uUF)Wo zxXyDzkG@}J5c1)!-e#_rx)c*Hv0twoPaL^H-?Tx-0oAUr}_(;o-)-d-?;3Cq)41 zl71;s@|6UB>8|K;yO9$ga_XERY1|dp18#FHR1{uvT1+FHc!;aQ!FhZ83~-;Z}R~&ocX{|M5sRmI?w81&|X>G{#pM4P|~(u$}oU>Nx#e z4txeAiUW>3J0$Ud_zjNdeHl3$D#bk?X^VB4$U)&Z^zQIR*7I9I7LC*$NT>U^dYK7+ zR=q*hsziDKxO~OG-fSLr!DQW+z7B3ede4P-`y)f8y)~1&Rhsbq@>t?BbA=kN z7eZ+rWiD~iLcrJrxIhR$c{g=3g&9O@Q5?WJOad5akBmKYV1?r2tVyOj))`9Qpe`|>rc-}z?YzDmn`$y@2VUlc0d4Ei=w*3% zYo_hB-;n!D=o7)EIV4` zzx{28ED4DOn&_2_`sjkn_NWr#^rqDd>WjLe*Y4$Bp;gqpRO&~126~u;;Z_1&Bmn(= z(+oWwzS8wE2=iny`Jlg7`He4(n&ddGLX93`G19lW^06dZPcMOAeYng4P{Dr|{C}#M z#lGd>=>)mlDu@2q7BdwFNBnu7UVsh*YY9S-LzJAJM|gJ^&vx#pv9<*`glQ}r1iCGL z{_l&2yK7vcwaY!Oj#}qLT%Ug1arY!9cehwSO4syrM7sn}h-V?_9_Gp;++W-Gqo2v& zzjm$6(;vFkU%1~NyH@m%wfi&u`{_&^$OgsPBwf?)`RtO*e?cCL@G0VTHl;NPr z%=`KD|&+9wp%@PUBR`a>a8Jo`Asp{S)&Sl!a`NmIy zglWuXu)>w~-HprO{Vpgls^$F;>s$&?Ka|s*8%gQ=pCOWtAtC(g%OR3N8)7jwKtwo18!^o5l6^$BgI0zZ=_M9 zy&Qe`qS?j*O?@tGxp@dvx$cM@EWXlai)DGy#YOk&3-Jr(CVGNE5tHCrhsrtS?crAK zuV^Ptm1KGsm8w%NpKLb4d#6Jd&-u2>h=JY8?!f}Bi;NhBv~<33Z_Q5Nj?|FA{3tB> zv3T{+ZJdG4M;1Z<0LT5rUZVT!q$(+IYS}}6x|^St?m753-pr^>sW}^n3rBJKhSTBURYBa@Z|{>nEXeg26CytG^%*og z1L+L5H_*cS`+Tbp#9U7K5;2c4yb!rflCU(6p#$*5hTJDF=vC{Jgu_}9^5J?gR~4^* zk98t~S-6j`E~i~Bj#I5}h8qEttQwWb$}+U|IQ2701Xkkbkb?Xt$_n=0 zs>=Dq4dc;?27EkpY!iXfV{pWQdq*c%yi%Al!Z`oR|Nk?6!2h1l&-L1ZQOE4_m_W_K z+F#=CLYGovz~SSUSo;@l=U;vO8xnGP@^3PX271px!F!S~7^zQOevqSy4?JJn-$Cz1 zqi~ibqrAWB()y2t@BITH<~K3wekD(B+k$Go&(1)BeW=&C;8eFW&_y>B%*zJ$!+KyP5Q4J8 zeul0QQ|wtlKfb>lGpDWM@7p5gJU3fg>A+cCt-TG!bFA`;#C_}Fx98@HSDEo-yA?N^ zAgf#_hmXf~weU3Bn#;VhYZm9%X~ z%a|U))TZ`~%G1~nY*Lwx%X%tw_+hu!g~ATiL%@L2qII=MBvQS})%RviU8&!*Zjo1J zL2}RISR))JSQACflBE)3W2^ZFBS`oe+rLW(b<|(c=T4Rs>tcAaKiH56=qhUAxk)do ze8O6IEVy6^n>9&`RW_2&UfZb&sheBSWa!@%X)b$5dW1l2 zEqcX}O^HP!p^MJ*H8TOK#H-VnF1#5hI*wt#u;s)M33ak8`$X8!6dNOe$8ypX@NE6NPA$>yPsXCmt!=6b1d$Sf%=SBv1EGvZ24@&0W1VeASH$vAQcCQ z;V|=*yXTK1AyP3Arl;qd@c=VCwTs-t_iy2LH`RH<>FbJYW4{bWe=gB|!xX<~Rw53= z$Htt27N;@nXCPqxb7CazbIuf4kn1O5z4>vWQSbo$3b}C zfZxQ<7}Q>><~y`_>Q-`z>Ghudw-eS9FSmc7IrJ_>+AXk0dE2oETcKEAO4W`$#N8Jy z)i;>)StHF!SaPJnv~hOP&7q8kQEnYHv#;y#K)mKhc)g@YG~y3AcM?nqgvdTo5Kf(& zG#XTSY94nkzYxFDu5=arkMxr+NZ-&?IdAik9rlX$_psdV#G`Y4eJ6= zC8P4|m76p_v+u0lQVC)C94^WBsHf(E=nZoV-SZ@+ps4+=>@S*Q?Tnl69EJ?>HV#9h z_nvX73hG%@T(q27-BmEC^Kj^jk6NKFJoqg|m6fR$);H#`G`#P%fd&a0+~X;%i>)F5 zG*Bh)t!jk=6tuK!a*swJ3zc#767&z2E(Q{X*e@$QosbwRCyD(e8ocm^y4~lNd<#0F z<$5YLYsSzR)^!5B-Wi>;@&p-0m}RisQ0$P{xaEc!s9l8-57ld-s2-yq+aa`ThW4@E zmEX&J3Z}FCRou z>u9!>2e)Jw`^LJDo%~bx*TyDS(ViP^Wcma7iWXGwQF;aSC9e|&3I&6jR%pxaF0h{m zV2J>DD;OCLZL!B@lN?e_G)^2g%+~ITZqKGQNSfVQphh%$igT5Py?-_dNm9c$c)6{5 zmbDK>yk}!g(HXCXs$rv|!dj6tpBve}7FDipZu5|x2yn@{7Q`2bP0tkclE=P|Sj6kU zD(|4JW%J(rz3^=Ah%MDPRMR$Qo7P%4} zs+iLO-=tq=+J85yRg6t-yox45^hd*#5v(I)M{@3ZDcy@8l;P4N*2@+yEP`bMuKl+a z>8|TP&{i!Yt1I12pg6gMsynns%gup_(C<1VjB<*}R#67WFNiv#_yrftl^%W9t$vGF zwMJpZPR+1 zWDD}E4*)`+MMqXSdloZlD(G9w*jkiaBP=wertUR&+b>n1j z%a}$n$?Tbz^AoU+59^$P%2ry0M@W*h-BUVd?bDs;=YVqHAIDH#-V+ zx$<1Kv@U!yTnP(!nsayt@=ITDL}B#}w~1WNK={7VC#A=k@?IvLjD+rT&6C@qIcV*n z74?)2rSb-NMeS!Qemf`E9F5D4bcRI_1C|uov)!}psSUd|s^`(`0A#7b{C6eUKUj?Z zZ48T<(%Fv(j9dY)$#{DtWE^M{!-0Js$LUC%l>^=aSnV$gtiPm2uTXEL%KSB+&CZ2( zzK2HdiMZCxEQbKV-QAyX)Bh=dzAV1u>AQ{$JZGS45-hWS<8xRp__?HHA!L%IE&luc z!A>{&h)<Ret!Dma$DF1v5gDSIKYYv-_*xz>HU|wyJIBd& z+uwG#Zd6iPc1=2|DXn)K$FW{jyV3@yv=bG~Ivk&@+#ghCt^>3flPha~yNSgHr)*6hr-?|0l6=&l3qI#5GrAS_>6qu(cBNGn#sHBy~{ z?spoKp5B_6*2N8^k^1l63Q~yLepGb(fr^`O$gF|_v2>(Yad^S(`nA$?lUgxXmmVtB zoLDGfxG@V0q3o$<`cso5Kzhmq&L3&6--Wc<*#s(Z?b0X=z;LZsMd%-QFfiJS-LD;C z9kefTy!mbBdyDVnBSGAb{0M?4gMz6rGa^QT1Z=Kh!ZkXO8&TwI>pP%t73wX5P`_yC z9^5Jsm^mTG_D;yA8YK+1JtxGeN=VMEWNf@=8&NJvnsPFA7+S-R>^}p^R)1<3aX3(T zbu(TwxbIq=U`vvet#`jWV_;VUQK2^!t>ckB(NnmGz{YmL4Sp@r-J+K`-=bx%}17H!_X; z659sr0Ac3*7ZFwc^&whGwm5rsb^n>|4qBfh(qc^2J+h^Uh}efjGT25_CWy&kH}|GH zB*M<(%@W~lwUdq6>B{{Hz0KjHv|5&x@<#gHD7(q7LYwT-cvVTg?fscG1AFyw;XdX{ z^;d~Fx-luf8D`YOaVkpD#Og^NSCoyLo67q{%F_F#cLOB9b0KsHY*+*7jq8wNO*AH< zzSL`;fMV|Soupm(TbIiU>DP-&J98hBmb^2)k}Mlz&d&cjb@V`hDp6N8501)E`{0zsAf-w6XMFRukeb)&ygEE}x}UmabmpeHX4C@|TO>Nez1biy zYgPLi-V~R#uo3zASotifQx3$mnZ8+Z^6sm)UL0?Fqb=^q&}Re35J62GzoJNzRZ34t zQLfv=8Ypu5B-^Ujx+3OWae5C;b&jU5C(rpr|ZMz=^p?uz? zWMg!2++Rz0Ka4nRZ9P^Q-LZ<_w9j2<s-qj2x}r#@>!1 zzz+JKWpe9(W$p z|DB-2H}wavg?^!_eYAi3k6l_1m*L2zR8$%jfciAL6Mn_ zB!KBsawc@H7C=BEf%uG263|X#FQD@;QO|4&*x|M$4mtp2hd`Gtu;H%(%25Ew zG0{0@00PtBeVy_5SJWxcQ2gP1#&4g&$9s$z{J(ei$MJK~EgaM4(ap6IWij_?T=JNr zWm#aF8Nq1_(4Q=>knA|qA0L3Uo&1Hur+p-24Y);K;9wq<N3vOo;2`1a0ji5<-jR7Nw`lucbvQ+5~b+}at z3L_OIr6Q@d&5}j^)ByH}b!C|!Z8&=ayy`IyMOp!CkWTKS`rsxWS4n(D>VuH>Ct-2g z5QP#r9`gHMrxYa-wa(>DHulTn)y|b_11RtZF79LO-=KiezrQ5VY(pJ7e)2SvS@wXU zZhzxH!B3irUL_2}LH`zy%KSYDh%hJxoXtpTf-w(8iEythjxtZqXTZ~Ee|H-ovFCSi zWHdT)6N1H;+Xld*>sS1Nd;&e6Rh(ZQY~|?p_xKxBEEC68M+BIhVj%HH0FaGZg_o*Ob=&A)4g=l++x z|AX!}`fGRN{w~GB2&66qCN&C-*Yn#UBxkqY7F{zkG?p!GI~?F_s!XFx?ZN2598v6k zIJ&O+E1I~0W^Mf^#Xwx?We@^^hUe!y^uu4q4RKy(98d&%kwQWdA0SG z))5U8W86Uc1q>C6s5K=$L`v1h%gZe{d%EqKT>jdjb~TY5O<61d+dda+H&$v<9^21s zCt*XH%6DV}Y@NXk3R zW4}m7IesPV77r1##K2`{B2Tze9z?{cpRD0*JnI;*YnVJihtDMidCR%EAYlF{6*8Pd z7UL|X!OGQP+cVZfbILp#9^+wkAyI-vizh2%GsSa|S0{>XpD_d_t26Awl~*1t_k&Br z>+aJy&0N6tNXp+yeNuH0L%~MAtUX!EsCGZG{;$6c|)Ilq)~qwhNN7Y+!$a zO_gGtD<<49L_vaF>LR82dE&;l_fKJ)`b4`ZY(%FhVhS)0-Vd)HXvk)Ki%jn?Iv3YtH<>^FklZHWNq< z)YVkNR~aypkyRTj{<-R{hCIc6pr`#~*Y|%X>vs+vd1?&pYI85geFyIc5gwN{#$#dN zMTC^z8OVY0L=NA3!eou{{2Ay=Jl+||_~+FoU?25)9H%Hgdvf|1;4w{&Yfw{765v*n zu-cVZ6_;~Ae;W4fTWaXx?)BcV&arQ&AfJE#Dv-_$F7gh!hd63e4>Xx%MEb4IPCzHq zbS9yW7jRawa3BydqFtb!$`ML)dS!CgcLdHLrH5doMyEH?5QH*~)L(Hth+a5jaNDBt! zk@TiLWUs4&qx4#Nj3CrI^3!!%?;*!m$HykQ3=H5a_KlQir)CKttKf36ba6i1z(+>+ z`eRW|p@-|4jsln%sa|b$fzYc26ni+11=JhP`LwH98ON!|kL|N6CkiL*>>+~;vqA0; z+4K*_1XJRchEv8G_NOIH?AGkJ-4)vgUWpnLzgd%@dgU$eVRJRt9&ba8Dh8S*&+1P~ zQLoWN>b-2SJKcKi+l6aNFk|HSWsTiFVn85vLyAwO#_dmx0VPcRu4Lrt7-YH z=MJ;@*rL5UnI;zqXH*cgC| zK$ESUKiv+nRi6~^-?~%$IBc}$!GL0S67Tj_6+GK~!cz6|?f2Pg41MA+b29D3q~pSB zC#t>|XHV5SqNx^kTKcZfD~1VU8D$$15wshZ98$P*c%6v4-WMfTS2clK-&|?_PL49B zFg`lHt77VfP?daA8a2c(^HpKP#wW*^Z}l6n$5*Tz4V@T@(=6)hMFM}FZ49$^#cnrQ zn|g}t=vpB>F?b$hsum%{HQ3skNTvM%n*@dLe#PDb0$|TGP%jWZyntcrU_-W;iN867 z<3bhU9y~X}0$F@Hb5K+FJ7*x)Wh&e(fKkQ)U^biwtonO=`+v*(Kfv+Fewj06ULiXJ zFpm*Cufz_G$p>LBg(2R`5SC602wP8vPn1SYBHOczO4L&3W4V5fbl!5voXCYf^>zlT zQDHBk`MS?-M~RQ8+Kh7i0%vb>E&2h1PwwRcZZU%IgR1yGA5R4~(rCU`FkW9zI#CO@ zcf6XMXHb<}IO}j-*^wrMSHG!iucecD;@PuS?)NAYszDt#_s>T{2D#s`oDfos_;@4z zy74)HADLAS)*Q~Plj!(pWt+$`>5a1(Nz|8(@wYgA;>hh+xXf*CCGrXp9X2VF)U1(h z-6&ISuQuCiOmASsH3KR)FrFNEzAIj@b)5Am*IBac{UWi>N-;(6r+mrT0w@sD4(yEk zsAAzRvwP|$b=$-CBrqHoI@BdSfJy?Fm13Dxh;G##I=IZUfBMaVVXoCo;=557@%>{4 z^EgiHDSVSV)Qem0>GH^=u*N&+2d7Q?2aTm(<|(TEFcx+Es&qSw0PPp{{vN4PN3_)6 zIr=YYX?CO0DPc3$mJ$|bcePE%(%C)+U{`k=`+T-{PR5sgAoE1U+&bt?RGfIF9k+px zZI4dW6yF)BO$vV?tZuURb^XQwcAIttJ6 z6zd?`;8jNqM2gT$IM-Izj=5ZZmUxSVF1DdH!NRmz^Xff1Qe!6o$>Mm~u2@RJ*2m5_ zFHf!&^GA3-1r{(zY!-(vPI=QFj6nD2olN>F|7I3VPd)>YEW6Ih2<@-`>u0q!$>vLFPW{PZ`Q;*)J3ir+4(@259_1 zBBUKI04s^ZgyG8O)9G%%<*6eHfXS*o3NXvmc2#CCt~NMM?>1DK!*Nr+MF>3MR!nq? zA3LgZ*tmZJ?7bA-Cc%BUha=~2hMipB-#Oj=X}$5+YaW3SPs?^r2-0yXIIGYz&^7RF zU`hM+4Acexf|1LBL%{R07#cv!09FI!yf>rKkKh;KtLnq>oiCZVTSPz|fA9b}Zul}I z3U80(7)yeAhxsSB{Nawk0_VTvhVS8XX@_pgRtu^35T^FRDbC8wjNDSP^Qrd^9<8g7 z=&Wve@WswwA!t41%&`_w$(d+RjhQl3C00puzyE?@Nk4tU5jrrsgS+@0u%YP2K^D9x z(;z9@y;_J|dtNU#3X1XWm3{t;PuDH(SkN_OvlDH2*)A@gc%((jdkh>Jn(Q5T0lCoC zV9d+t&Cl?a^`kQoo&yxUCL{_O^(&`*{KqE^z#XU3ad#AdTNZi4IJYBcGs%{1`WGN+1Wk~sVeEuWqQYQ- zoS->-0QaHG{O$R_6j$(JrTU@?6oWUI2fKso3CH=uph!_5ku*xoP&Yg5c^%#KMRED>gyqr{f%AoR@1_~#QW9xAJg%5qSexQXWXF@@IadP^zSRWvZBn#NkGADhPX6y{Ku@1)G@-NZ(s=j%m zxU2Z3(*qi2a`ISEWEv`u>`0QSM$mq%I3+SozLo6HGypO`U`2u!(+EVG-5)QwwZLd? zU*AU#gcNV@Oi40xv+|vKNM0y-hhAA4pqA!FL{Ft_j~cYg(0xt*W)nM6*YYF9Ki*YDNZW`OfrezFUz2kxDpc<&A6|GM>a27X;M;g=)x^0%FtarR@gl zg>u{{2ih8$M!n_vLbL2}Ov76rhKud3QV!{CIxKBc86*{7(5&GVnEA;(Rf4_s)|!K& z)ttAkKR6W&wm%@bCR&~)Oz2mDh)7)^dL` zw&3r{NM+;SIN3YE;IJbHMqq{EV5w1(K$U6vI+?G0K%UA!N{}5QkoGB8-cHjIQqTRXhf#Qa1|g;F&SUwa)!YVu)NU1bf|&h)Qmy9o6XI>3#%~N zkHjSrf<>3+{O?>$cJZ(>yODV4zV$WcW7bo@_$l^=m!9X{M@xh!D(&7~9EO)SeGVh? zU{2b~ensrpb2ICnAR$>VEjk27f+7g6AYt?!q%x*Mjd17LOqvA8Av(HWdZ+I7YTC3c zS~MNIxy~VsmBdeb$ivgwgTD z*6P7)cSag8wOevbZHVSgu(3zu7n8Gr(!TGwnG#W6m)hGDSHKTQ7m zH9?Y)YcxBnIxZyRhKB$4J#Lz~b8bv@9ACO%ANd-|(Sj-}SpEk|S`vYYu}(z>w&fl9 zIkp;l+|=#$sx;lPaYdyMheY=xI~5oPYPQwztb3P92U)rq;GD$5&N-9FOfH^C?++|-0!9M2|d)x|fPKtSwx}88?KW{*sGDmGp=!;=4!ELRUv`e<>5L))>34n@eUM0&J#U#ug z9H+m3qcb6DLeR)yn;`~p zxMImbt1j_QhKJI9mtC_6zfL^nm_;jT63=KH8TcnTm*zMQFswk24@q2)3y(0+Hi?tr z)0(I57mQO+G4h^h_SQv%=heeccsxx)wB~CndB&<=%&FjsikV3XR$W|@cI>!x!CgHN zY^F|Z^>t*ccj~SsR6AOef`~x32OxiNEw6AK&zZ~z>a{! zKkb(q5DhfQeey~Gi(bQt98g0jS9GO>n&%6;g{Swc#%KD+qq{Pf_pZ`*3+M)hwLOl= zDK0*$8rLa5&Up?Z$Jg)^2kE?7HzAx{FdjMB0z9(@f(>*N*lYcpi+ah_Vp(M@`RuKp zc8GtayG`KW_&$CX+M+lQq;3)F1KO>9z_JoN&w>O*Z1}v;ofBxJcVWxOYy!6T#CpMo zH>YvmV=K2M*nfNH2^{5HoxlF_o1x9&xEsH9nVzDvMwUAzk#&48FAaS^EHd*3bw7P@ z6E8t)O2A3*tAj0_R)ysY{!gk!lkN=?2^{Zim1NUSCr@j&l$YNz+H5;H!m#=>0%&_S z44@v>QJKH3kimlo>0fXwE4b&dEkbBN@Fb$KfZ^cRdKNMNieiVuVYS)@m7Z4+`V=L1tO}XH*YRh zSY$miaql`^FHYnB3jIwHFd}2oP@I1v{0Ix~NFTK|#=y4O%<_wK8utV{n`X#{MGC>! zY*Ng%-D-Va4f6sUON$rv6s0|o%~GIxna{|laQmuw5sVhYi{x)p=CwjuCLiW+zAh3{ z5YFZ3Kl9Ksg*wM3-x&?EF&jGyeH4I@@eeztu#Yxu7yenMTIG0rCNhPa_IC~S z_otr}n=C`J3_k&ynOmM&Cb2l0V1oKWE8~KVy>rNim82gNf*j-hlKE1h;-O z&=3C>>_|lxX|`u5SSmzjCnBB}-EOu_UNn6DMN-$?wIr%EJvb?jWxZMg5QN&uFiG^4lpne@G#FS^?cw_2s2vE#&OADr zPl|*2(VGh(DYdYHiNf!VK0Fi$!Ak_lCD}5MS^}7w!QWAsnC%*;N zzLGm9l6ug_mZr{5I9OiDsoCXs(G&VgVkUAvn%G(fuet^~mUoiVGeD}8|GZQ#qpM+( zdn!3g&haJn=zXQE`yUgU=hFKMxbcG@@Ci%+s09W*Uo~Yj_Ocv0j$s5V*2?sw2HK;q zqTe<7UPbvtHiqV{8(*(eS{{NFXI8tr-G{nCAofd&GHFBn$^KGb-VwGZ^!YGSwFfXr zzH6V69u*e%7O|lWzZNT1T3|9uYiE}o;h`pQrG7V=K~Xc0=;nbWlq0Y3Pyhp2o0%P- zc~~HJWPoYhS?^rKPyH~6u`g21cCVB5Kk(-D%C$*fbKSDHvdNh>P|R)UYwZ$NXC34_ zB+ksCzH_rdOdAz2IS^R1wLcI>qng+N;o-hrKju7DSzl>2#dA@Y_*x7_I7>rv3~8Wa zEu1y4D1W}@`BVeE58iQ-@}OZ@dlnOi;mtK0!U+xFj{`a#+V4|J<#K%0d1VsUy1O0d z`~jR*ay&&t9`b;$RAbXZ(|hRUHlXIy`@_7FKP>|Ot1S$aKVRJkRXlcs71NH7`O(XZ zd7cb5_*kDC`Qt+`Ploe;F_Zeo7IJ?z?f6#-u3x_YZzQ@XpF|-LF3A)v;&?9z@Sde_ zJUpdH#~`DD9kBuVWb`}O$trjsKcC}#^|vCxX(<4D^d)ms8@ks5K3&vG`4Y@8Ip%5D}7{y+Id zr=p_LPFL@v>;q2Lyp^!Qf-xv+g#hbhvUHc=*K++oudDy#3NP5Qu{+Eg?|Mk?6q#A7 zKUmNQ7(vBC$M1kszMebe1|QEeVs|-ysbUJtFi`RTo1kv zOZ5Or{UyM$I9A*G1L5pn8|t5*%-;O(QwGEvbt+nw$%*6_Sgy%Ni5LD*#o+_!y>whn z^=_f?IfGwDV~t;W5mz7if5B0W&CQnh#h=IC_ItJ`5!wjy4&C%OFVCl}S^_)1*~M0{ zpZbE2OpYHBJpSd*|Cf6;rK{iK-Snd`g~E?6ocPLg-#+iR3wXNDe<`d~1T_57kW(9e zT+pcJ&wG;nK{n3tFWESR-1*2Ae<>3Ldgm6hG1{fzR$7|*7Ua4Tiy@id-SxZT^lDen zwR>8Ow~}0Ow`-aVT!|717?v`+#(y=jyl~*gEil`yYTa+aNrH*f!j=?TJQ3zv`A#ab zZw#ck!noH5UZvwzFoxpJqZD9H&cHr)ZZyu6$R_sFhYT(qbi{$xR-f-`O7D~!TvUkk zwFSs<=vWmScO4_=pvjBQQ%P^};YxZNevyfr5$^g6TGbV!Tif|LN>qlAdfu6Z4^XLWM zL6J-);|6X9$ZXK7{*+|00ohY*+1DBJWk)+9cRO2ZU3P+U8b*ZkDwT>WAruuni5kaE zzz%JClS*cB3*DgdM)Ejt6va#T#^8rnUyqI@=d~oIv=@Bm@IigjT)T6cQ{~W&l^d+rADP( zc&pO0ZLhDDxyuflR1GKMgj2V-C-HT!47cbwSacv>r@7PVm|NDNkydL( z4AYB`6FhP)q{AwT?lH8{eZ@ZkVpeWo0_uFvc+dw;@P3C9TQF%OAs#@<_OxcIDc5uJ z2QdvZEYIjY5v>$#mo&VPO#I5t;{2P=mv$T6VD#Q=Tn%g&_6Eo9eHAquM$$Gld&O`q zW2e2$-N9ajpDme1XYiJuIn^!k_XUmL`I=V7$1>is7`C&f)z7)CHb#UdTfia#BV; zZ(zJ9CPv!h;&!>(?p@)#tk6)U8F{54DetLpt1tvc8kv5Wg@(@Spv3?>wau8J3Yl6l zq?o-iPV{23BRyAXsSW&Wx36MY_Hxu68ZFJwJjn<@nF)V|#2ZWQy${zfD|9@G{W=#L zJNz2R%IX-DqkFi;DNkrrS`%`ks|k<25tMKJ%NpdT*YoAj&P9`he)Z+bc5n4DZ=?Bv z3%15gNNN9dK$*26DXN>Ze zp5rAJjYmkX9Wc^<*S(c*{alMRz;4`iEjO>`b7XJJC4a68V;!Of)aPgg6iGXj!JTDZ zJs=xp6~S9CuyAJ#!9ILobj5|&N=HC>srArDQgs9*B)DZmtcF_Jy|1zxMcbTS9vq6% z$;fSi)7V@G(v6Kt;!V;OQdHhcXGY4>~~Xd0^%V?H#dRVpH=*qIQN{MNW|crSh?L?!mT+e-6tNRrf+q=Bad^)g$jz^Da>UhT#35NdS1bkjwBnTY^W1ai8WKI zRC1=5v772rb7SRab=2wR{O@@cY*83 zY^>RKmoHEDnS*ZI^))i0O&$$G_)03JMTywWpG0Q3#>A-U()XiR zC7$_7s}=rr+|c`BHN(i@p42(RSr52#Hur%MdPBS}(t_)2yi7x;UWIxKQM{#{PJ+s` z-ciHb&K4Igu)Np7KNZL5HlV{%EbUb`>NPeliJ=Qux*BuXiwS{LMZT8AO@Rps;HSeZ+S=E}tv? zBwD^?i?ykU_7(YtV-xDVP$V5GkPu!eA4ezXt=N}U$nR=Z8VIR!**M;EkD$4!w^{FN zxf~$VWJ1wb$KjUg;VDbF@VP!SopjABFm;4Vu_djl;H>=c^+#T>eQa!OoU4;`gu0fi zS|v84IZknpX#s`NX6_t>9wYv)-IxId4hD8dtE=9&<1Hre7E;>b8r3vP9?AAQ)`*^JBrhPKWH_KVLL_3)LTHiAoyMG{&{E9Jv znYjDgsVXYeRt_(VSH~7F;sZ;RwBQ@9z->u}Q}#Xgw#d;Zs;+kS&vfI}tL~7oKBa!O zN;Qmysl6U+xadc?YwrZKwX6A#*+y&XjTf6tInKS=z2V((38n|*LBE>!k<+iQtQ{8q z#;>Olr;spl3AA)~axE>l#2T*@*-^(IvR^sM@O7e-h4hBycRfXvGo95d1KwZPrbBuL z+1c+YOFu+1%iqoXKq&C)!7S>S3hNYqTnzF!YRBr+Q_YW+LiuW-^BJWDoq20j{P{)( zO8p<{?ahMbvy8r7l`7w*ykk-?BagD`08^T%&xbz8C@yf{E4F#03UQpDzOEplmZLf0 z0Bqd_c*F%%-|is0_gU==mGzAQ-oxlN?j3R)+|`jBq;^d0a`jCf(JGkWRGWEnfUkL( z*mM|Ehq9>u(vtw~=Xl2lcF4?ypjRH5dh4E6VWG(J;19?OO?P{YfTO9S1zAQ9&y}Lj zp97{ntcO|d-k`YLc>liexpnY$nLFR#?r9H!V801ak*%F@FI$Q|XMma%w9p!cV67fyf%TkTF|mu=h22 zAGha)4rOZoRxw4Oo~vL>SOl1?-ptDdpvS{boKZ&Wp9YFo-R$W7rwpxMA)@eV zyLVTd`<4kD&N~IN5~uQq>9e;-le%xHylY}$i0jd$!Cy|`EA?@KV3VJv6i(F--DHs- z?d!ex?Rj)})UAH~ySF*hfQ->LD4^#e!-!ZE+K8T12RZv(g^<`xCMMl%;w>i4Oyu7p zQb`hoOgY4c@-D^*k?D&!-vFWI5YSGN$!CmYDi-rlDm&6iecLYx$#CnUTonOkaKkH% zMBs}63*u@5Tymd@JFaU+5;YzrB~YZkfCUyj+Kv88#E%UpL$=y@J`)jdWUtw=IB3sg zh;i=5&ECfAHA5?-)Z1|);|Cl3muwp8hGz{vkF^1D}$s^@r%1|wjt@ZcGqPi1Hqa$^>IORqvnTDuL4AxnujAFG?eT{owiQ-^k5 zu{JT2_H*FnFp?KtKP-d>Knj$XyXJ*QGzY*ndx@ygcevWONJngQTEf1CcRAzcUJ)Z+ zkE2*935MsmQUrAwb-w+yVlh!- zVh^^LcXwpOY{C)r4lS)(XmU6O&nB}CFJL>UATZS>`Aj!fgnA)Xne^kc!pcTtWjc3) z%~Rxx0onvI|HXx5qKX?#`tAEe7~&G2Gl}S>lAIWiv}cCc4!(8wH`4HZ&%`skkP-m{ulFvB;i%qgt>1HO@TQ?^$MES5uz{K{(uM zT9c6mo!HYN!$3s?4Ri1o;h8KRZWoS~u+=$A$?meD?X{u2Oh(?+KS8RXVL+c4I>#7V zh=O-c8fRw@*aLxb2bIvQ;rcbB=4+poh3jZZ8papB4IMSU<`qmqWd%j|vu{0`nUkpy~lYI;?nChgKWVp*3vB?{!b2PmLau0j6@g#L z4G7;jY3QqZN4(~ErJ=aJM~a&~v{^OFeqIe6;QWCk8{iW`KmBnPZw*c8tGEt!-40cr zAfs~KC(Mjf2T}{dDz#uNHHl+Nn@iXF6~8PxoU1cu$Q<(%kG_OXHy(A^<`voE@}loG zCa^YoY;{B((lP(-=umtB;sJ=bf&BV$QJhu>S_=blba7-4O%Z?kD(vP>kU0zb6>cZj z33JN*3y$=GNCYX?4xz)CCg525a?o)b%E+--g`HW+!W$~`X)V+|&mFF`e(yiV>#eaL zvY#U3bYs3}derAFgaE&;wI2`gHUP5xLl}wKP{CnR_lh@ejrI5Ht2o-*IN~CoZ|)9U zuoUy3q>5j$#79*}fUdy((?rqHC>B{1f2foqBD{~kRa^9k@{=vZB3F@or<@mR;Y8a< z9&0ccvqdYr>HeKG(EDI+HWEt3E5%uiuG0d}gRC&nqo_iisYQr<2u>M*t;foseBFAQ z{j3ejqUv~M;Dn^_pvgRWhPRaJcJ z8v{bYjCFTQY4Pm}?Gv(d{E;&Jw#HOQtB#)V0ZRSVl!lUgzSQ{|7ovAwx|wx8SNoT5 zJo9=lA1_olzk7!jWy0NjsyZwBF}oxkC8QTR{-{)pq|iOMsZ7@=#<24cF7Vv1hN*ek zeiu1aYT}OJKz6{30E-1uSiR}T8FynajqR=~#Lkhoe5TzF`_9H}S;#J^Qe4b5hfQm>%+f~*u-S-y%AA8>!71g$-OHx2Ya!yJRBuYl2 zio_C0l9PbMqCh~Bgi<62NsVPO-+M>*c(=QM zydR9(o7$`P8f&jT*IaXc-#5(|+!$0>DW+?;aDJ0%WWmY%jQ7uEN&kcIZ`9X=Y#an; zRX97ixL>N8&3@*m;rib)6tPk5+U;^@^dJQPLZZZ~!!R2A;X)_(Q+F?d<*rX7pU0wYvu>x(D?_u;@ z2Cw{nOfIL#_#>0M4#G2;kbA9}jm35Kg=#DF3Y|xwA|(C;hlo4hMR^ zbL+{XEz{k_YT7D%8Q*9Kp2WrT=Tjiv_o0Y>0l4zZik?QxPe^uh~Q9tf{jH;lSP<#JCpZ82V4S%03VQVOSi%<6*u~s z4d?{KE3J8>)F|V=lb6ctyqTF2`>oCsF7x8{u+LuR=e-sCoC zoe$h#d+wCkZvM}HVTYw|DU+EbL_gk*OpLel?6o^6gu?;-6j^~>WAAbS$*v~LMu?4* z2ajF6s@;+C_c>FwTt_^Hnca!~dU89vr1eKFTmfIacb-;F`!SR|7-y!smKo0*X)@PI z#GljAsrR|x)Je4@=D3=25x=i0GgB5|w-^9u$I|m0cZ>uJLJ?b>Nu;-wYT`G$Nlb#0wc`yM7;w(jQ?#Ug$1#HFyf2s= zD1*1+VQgK}O^&A(HXbxx{P5^6W+rMI=klh+PJ@hWA_AjFIW)HV+Gao$O(>N00m`LU zfW#cR-(KXc`Lr6jo(+-6D^RiK6FXcmZt>i$ubjInk|VEwKft0*T2kpi&%_Q;u2~{I zH(8jS9!<@)A-KxO1AJfcfU}9i@fo`Yw2;=M2b5?NUS8&92leuGAUHI27}&8BRejge zN2}~bQRkMO@`+V#$4p#nd{0p9N@S#C|I|#`*WUUAsHh9fzaN3Gj^I-5e87|fXmKGw zztFqT6Bycks$1Ov$QoV)cvOFpHKcM_MD6{;fp7uNCA>n9MFuO^zL(p6!KAnS7jNM2 zGiLuLY%8bum5pk@ee9Nbi0BD77AqFWiAVGQ;hi4>n5;NQ%B=)_+FP$8}<`YdeF1o z@eH1om$uQv!iTU3l?5X*#J|*hUmFvbTGx2&Jv_&l(0eN5y*H@JY13S6;ZMtpHjMPkul&Lp zlpNLDi})Yzi;qaCGN8GvpHtYXiT4(6Q4$!B+aO&a#+8e~6I3&&8 zAye7>Sq|Yry|uySZ^_`l4@&)Awf(Ok)Bo(}zYdg&msfwW(|)n7aBQsCR0P2S-dXw30OTpw-In$*IX5uSevBTO@z9OQ7Q^+77{bDV5){})EVckW9pt7W!e4d&wPoyp z8__BITQ)$W|C)vZR#u>WCmy=VUN-fIlhPVqAeN=4tR{9#0bP%RpX%pnLpm* zeI0?JVy-)#i87+i>lBU5?y%NdVt;}J;1s7pG2SN7ncw2sN+y3g!!h}f`1ybCu?N6- zSi!PgtO;R*KH@t62T`5BM1qP9f8i9lT>92`CLz*F&C(O(4>0OOS2ikew8JE%l^&ObOK98b6J(% z@JPE4K`$@aDD#^qeFd3;%B;uP5mE8rQ6#bDYDVgLx6+%Lo)}y>ny}|g;ti)L8JYRI zKd;fOyQU+3Z@ZL!&&dl(9!?w|0;(~L1==Hji8*6kVjH=! zfqcWTgWxoSa2QL#k%>*FoH4!iJE(U);Ro)hMxLE^nRmVPy{*<}@&*Itzi`UrZ6*?P zVb$_4(RBG{`BlrQL-u0X;(HlkU^%cx+?U$=y9;a9E$x7=LmEfJ?XcoiH)b01dL;mi z)tq6ih=fMU%H#~Qv{e;e6?fp(r&(m2(j?jhj_BU5Iil$b!4oO%e)nQvZ#$D7{cwSL zrk1Hy@Dwf}^rYr+h|lF-LqqfZ^Sk<~`z-o$1?=K6w-b_Ot%9ILvfB9$X-^hdQBP>w zIBMHlCxLv!>lJsF)r-LD!OM596iPsyH&$!N6TSW(aB+_5s7b~2j>Yg5+;c6zpsymQ z2~)RIw;0g0vu#d~WP699cGi5~B3H1fd}NpDBw$r{Cb+pr=h;yT^bw2Zlv z=l5{pWs?h&cf_En8Xghtga#O&fnm-NHr#_j#WY8Gjk0trN&-_e_OC%G8aAu~kN_{& z0c@3;sYJDa#9mx2=B6)0;`)zn-M_V{g#K1CyzFudBWs4Q7c#4sr5*oLp1-vz z;@B+FrDpD_&}6gXOQUk*2brQxQhK)##S1ZX9b^%-aFyU%5E=8<>2v@ENTDiwj8*?g z0HRSO@}Sjh^V_E--nhi`h6j5dLZNNKsB8Hjn+_s%SQIsnFoW|l>U9xbM}{=y>7#XF z_lxl%{Z_aGD>P$z-5Qs2A8U{G>$65*pEUALo2OkgV;T2gwek;9*VX}nq^Hd@9{sSL zOI(-F^Twms$`kTb_+~BUNK^z0MM3X5i;KTs^O3CNrHEx48|xcYKMw`yUo{6|vKA#K z-uXa&b3DWAsYxV6TE8l+)5gJ_A$&-kUgNX{;`+)~D$cF2SlwVktLIMmotuX2!GkPA zuY}_@bq{p%_Bk)xclPTs;=w`@SkT4gzM2yC^WVbQfBDn zZ#hW7yC>soqYE`zhQpi56&d3gn^4J~9Be!~YBue@NRf>$*88Zo`l6kSq&RCt_+H}D zgkT)y{s^CxrTvBxyE~JM(e+Iu=A0Mp59L%e(XPv855xxz%j$oCPm#uR#_|)+0(*Pd zp{g%$iFE0|5o9?%Z$8{=OFF3m1h>f=w-!x$Q!Sj^Losaa`-jaI5f&7F!v6UhC>gbh zgr}%$(Q9i}4V);G%rmWjOOgFt!Kv5KXZDG!KdSDeFX{Er_d zjtMGa68aP6{gn6Plt+wZmCbGAPH#G|)qpw|aced3jgkB1eoAHA!rp3m*n!&S#_+u| zt0aco!Z?*BeZ}#X#wtG4yl>HSOx_Jgk`o0$`~iM7d-lyDk-IemGoRRQf{Ahe62ZqF z_*Vz3SOEj=1U622fO8aIHU(huW6;o@kL?$fT7-lE#>lw+Z40Rv0&=5AKpo2z$#bVZ zb;yCkY+lJFaEY>gM@mXcHujA{0(g-Y%Z0w~uhZMpq@V6_H_PT$9rr|<3*V)nOyP37 zvKjy#k%miB^2H=+V~7HbPZT1tH=5C*OQ0-bV{+29>C8haj>mo}LU+<2)!aiBYdH`O zLeB>*U_6E3MP#(m4t$r&-20%5F*@|r&)T>t92d56MK7zxuEIoVtbF)$?h5hh-aQi& z^O^Ilf)$rU>>JLs`je(Bp)1EK*+(d7*Vs-|X6UjUFZ?(|zxUCEZKkqnCKhba+7xeV znsAeR@9U$+Pa>-xwBlsU7^Ck_yRven_Hb)-y3tffYQcOre`NkJ-B0tq{RRG7)H#?s z%#t4@MW5g>M@EDpnh3hszzXz{4r$gC!f9WpT*=P=vLNZs;ZL=>QZ;e+2#vCn z%jqm+fM&qYBJ)v*JP?p1IVgVPwUUmQ>5?&8{F=RZ@y36>fZZBs^zO1{E9J-mu zT_iX{@;Xb`0S@tfFERymI?BT6d#w~F`lID|xgQN;nAu|9p-j}o%&4CYPWvQkU2iV8 zqzkkZ)ADt_wGeQW`p56qHB5P^ofN@nram-Ge4b1?mBM_CGqN^(oU718;bU$-6d1~x zE}=lsA`S*qE;veus(@zA$^s#0x|$B6FhYcp9+6;QK7VUE3G&BS_q>l0H}Cq;M2MBj z+Y%p^dj|gC_q{;Kk}UxcxxGAW@^a(dn5QkxN&9@K-an;SQtj3)n3yD{Xs zXUDPtGG zM;@GGoi3D}fu#$INr~aaJrw8oqZl=m3u5mb>e_H$PJ#xoesB*yikgVzLpwertGCQ=k6ERm1X@&bAAK234f>EYjRM^ek&PI7$tUV;Clrs{ zYnq3Y2WkfZprS>u3W+$^b%R+fBY^5SssFU#XN?+tuWOps+oTkQAS3HXkPy}Wv>CZ$ z6TNrWM`h^SY77-G&+V-FDEIY6suP!p>6!Zb-kU#6)PXrtQuuP5tKqp3foFTOM{+z8 zRj1V%fOvfO!3ER|ZL#b^IdTXN7nl^;JY(dHO~#X~ZM6T{5634KWn4}SdGK|FXqoQR zcTAAc2hbLy2E%uc?9ZAg2mReiYCR1GB9`$UMy`{-4QBvVDYOXU1$*eYPWUQZH7$k; z0I~6X%MAx^K_ChaX;OT0h#KZ;qvs^Jvg7-aqZ9NUX9xCoUc53jfeg?oG$_Jz0T* zpXeH0)JGk47Y`E<=z&(^VUVY$OwV)3P5ShZ`J~%#8}L7ML75m^(;ifi`6&Z4rprV_ zXY}h#^8G~<#lu10d~*{{O&&|8-KGdKvFi-HWfOtQkII>rncu_&dys`)xP*CJDR$k< zaeUS1?2U}>0YWoQzZ${djK1ZVjb?Ci#y6YG)Ib-yy~QueDf9AH|lDBI~1z}|95lD^!A8-#h3DQKi? zL3GU67xt_xed{6ny%gumtcvThp!?zJGO>YQN(S8QbXD zv~lZ3#{mt-U!G%r_+xbt{`6!n? zQiKLaSKI9vWuT)VWL}qNJ?*n(w{7G1DPPib9mnp32t*1}Sop-gPoV!+p*AUxhql(9 zEML&j)romD>C#i+mCZi}037GcLMf9y?4!P!YjJvy>qUP8DsI1PFTpU5p9ny;r*~x) z%j{o)-8$uStn=r~T3hG77k`eej2fkqX3q^Fwq7U}9Z@TGd3kJsTtxbv`nC!}BxbS6 z$p!P@4@aY=36jpdj1w!uJWR5f&`E|%$c*U3`R-CrO=`8q1){t|n_#xrGa|zbOhhpZ zKbT-Bq38f^bMGv3BvAQoPXw$6&&k$;>X{82j1gfZ>!DPs&5^$+Yro7O7d6XymV3+L1?>3$Z71-tHSx z$8@K>JR}lonS?1&Vg$yIWAN?Y9GM!S!yGPpKEZ1j;j~yqnK=$e<)!w-j3DWON6I+3 zpU8}$fvohf?-=16wDIXtrzl#PJEY@CnohSU=)P%m;%;l49jb@L*2Z~IhB_bm9nCej5;Rbx;qp0EmHT!uW*!~i` zW1%uVPZR{X##&duG_&aI*mB&6pxQa?ULI@@Ni&*iVJn;Wj(j=}lWd+Um@Ei^V|)Tl z`1*5G-pLB5tn~D#aPAr4WN9ErV%(P$B9a5}kn1HLcVkL6bsX={F3yb>if62~Y~gyZ zHpHzRu2BY#CH1Ththkn;kP01V@~qRxWx7aerhEb! zcu)RBkC5|y(#Tn08zZ3msXy7G;#IQE%046hJcOYF#vPt#;w`%Njq(w*unN7c?Hw&z zTmG(3R(HUc3(zR1me z(KJ)ESYyNjT$y{fjB?+skp7Qvn25yUHU_I3Z945z8U)I5_k9(yD4iab#P@0rC;02tQmFzJwBvi-guE@hzLpDdPR>|Cl9eZXY371Z=1-aW}-XKs_+7 zmTADC8jKHA!S_Jy7iYX|1; zq^-@(YU~+Rv_5$b_f_#k94dpi5=pj9?G!a=r#unk?rzo!S`r=JGFMV*qBGlHDlg}T_MEfM&&si_Q zH#mudxtRX#N|cQXQc`)sNmj;X+22?1yO6ASfnXx(UT)H!*fc1RBZE88&|+QdTae|u z&4-*ca%PxcIOjq~=9x_`(-DK!R|-p4JNc2_vJX({UFK|Pm!(!proQzVSfhvi!htcU zDuT_l~gPm|Bcbxg}lFWO9)n}1Z&DGMo- zohdcn%X6@fzjv*Zxvz}k={uN#BVzdA+pzq4?~_AWl`<2sG0B`CK!(UOnbR6@4qwc%6@3Kq*go zOY~GK7Y7x5tRfmnx*1eMdEV6OiJ`na^*!+LJ!YClO+b5o;jGue;Xdbq=#aA|Y|hH) zEeCjaOPX>VB-i2x8~HYskG@6`NS5l!nU2qdtaTry3d10+)!Vm^=;5JV3d|T~G!*cy zK{XH)<1z7QcDR}tv7p$Bubo)k85Mn+1EqS)dsxX$gXR{q$$lfVnyVAhG(_&BP&o{vYRW2Sc2j~qE!$9kt8C6QBz zjz8-{&31eF`-=#4^xA_=_}T1Kt%Dx#zEotqx8OzjjCa1iLq=uHBbuqpoNF4RcvW-r zmDpJ_m^qe{TR7!f=_?hc62Ar8j$PNrFdRIc?URX%UpViv#soIDWs8{hrCHRB?glAP z05JrEyCP@nLQoLq(sIvb+2qO!!D8sh#CoKWsIc<$*wvBDc4#>pP~hpH%F=zBE|WD zoz?t~CuyFhYq6}k)z-eeuXk{*7CT>7>JPzFC(2%uFj*O-rrP(GNBQ3ImtE4+?H)PC zqc-+Ui9>F^G_~8sV|%JObFXsFqEngheJgRU$yvJqS+{!VCw~D*(iaDrUpOX0Xvu?s zOTXS_GHL*1B3FWuj32R}ZjbWNcuYb@-CJ}w*J*HWw$Jva;KLf7gty<*{Vb_h_+ouy zn6_rHxTu2=82!HNle0H5VFGQl6?5k57b5V5rz^XpcFg1Kfeg2!(qHSjeXt>5z9b95 z656-1O^f*}ub5AZr)!d?ny6K_H>yEOjrD~0&8l*%tCfeDZGAX-a#u1P=>zaLh0RR9 zdd!<^k{LVV>xL>iWMAT$mbTkJd&0idQxkx)a)`Lz%k+@uOZ-Mu%fVsOIQ-NZUgmV% zDC8i-=XWwQ>e23^$cMOxZA^QBXF-X9TQ5~JK_v7kEZY-J44iy@ z;XqyJL2U~S@B-ZgM#(pO(L#+^?X!h{8!m$uqXoN(pZxPR&!JwN_puLp9<9l`Ai>MY zT}%)SS+(U>dEY%9;@kd;yPkXgtY}O&r+YtBWgInW6d<89LGxZSu|o2kFF+coJt!Hp zGL*jCE(zq%8V9`3I+5t~&I`$K!DsadQu&bye9-p_jgol{iJ@mlT*FmR9zM&b4d>yV z%r_24Z}=IaBodKX-?YnH^OQ;*HJ~@gy#ql-F4hvdB3H?~Rk`kSqeNZ0ed^cv+BfDz z_uo`}yP|Xui>$ceD49vtJO*LxAb$PMgLdaO{R{)dn_*Gi?gQ6XI`Mf0q*8YMNR7B9;4@~MtVkue!(g`g{!$0B1tit4MeW)wHfckUf znNPPniUUa`CAotI<+;HCCBviDqRTil%XN9@V0WIy$z{DR^x37{C(-kD`cz6I&LpeR z4Z>@W%W-Iq1?!g~3KmnZS9LiKK{99;gM<5;knf>6VD8w2{i4$7-jlLVck!_yQ}m1i_Rr2Q(;VadRXPEL|FwL%IF z%0ov2VPHvsxy9g)=wgQ(-uP;jqgC zSAiM**XC&JE?&QJGIkt{mghnE53)b{z}4H|uJ8&sBD1#x9*~8ASafTt-D{c7h6UPK z$-+z&LZZHI(+B>gBku#Ic=JHcbZxX|^Nwsc{q8`45R9qm<|!qJGsKox6Bz{0I4xo9vE&D`|%b1WHs_Y?lciR~4%yTy@` zril;tg~^HRXxAHyaIw+oHnQpR77br_>yicYS;f3;a-&Bstm&L7-V>>7qIaMok39ov z^j@i5FgCVYbX)|$$~KL!CI;$R+0q=!rih4!Wy$be2q+&KaK8B9I_YZ0b@v!lDe2|* z58()o4>w_{2Li84nxp0WPxwAYM|t+Mca7IcY3=Jh&(cxmLyXdbjWYBsL3LOLPjN*XRS)yZNIVNL<+&`sIrQoyXB&(&S=J@*fHseT zPo`(!qS<^n7g$axmryiCuuucP>bkm`7UL;nGqJj4*a)|AGfF=kDSxI^)10LPzHEIs z??`7Xx1T7+$FF0SnkJKE)iqcB_7@KSODe|lwZ6lwaJqI%AwN6P=^VNBbl+U{YKuoM zUOt=@>W~{^vFD6woDO$?;RtIHnOQr@NDft;hK9A#7hrA!b~6|wkrX*FkPqcmQlQ5vkr=3#!2*E+aWbd;L;$oRSSvr^Nt!CVvY zGrOFm3Y+Hkmgy$e^ChNK7g?(8xuNP3H9O*=@$*9|`29WZRAI=VyrE7cY85(4M=InkShuT&a- zpOSp0+z2*+RZ9_+!RMvnjNr}mWeycD#HCp(Tz73ko>H>o-gXwebuFN^(SAC|ZSX6%TFvOYYjEcNw%Dd<1bwMgWrh!CO%x812m-MkP>rkrgJ z{iuhCZtFi)D`$`>Ip3igs0uiG!DX1uo`)3bw4mFB@1WDQ+Ra2%fISmPsyu&^y`d6J z0)C?QGS%v?s{oKmPvpP;JZTQBu(w-(DLj@QmA9M2TCbzNWene5fZyY5Gf|3*7;ueY zxlvm|GwKCPgQYL3d|4PSuz9^2;}4_K`w@4I5x7# zx0(cDG{+_E+XiGeV1*H)3{jje@uqDEf5MeTbVVmC!_-MMv`6|NLhONce2;D5c+Z7V zfuy!c@LR!6j+=~141~;7Cl%>Dg|EEkU|c`=_Jw|qcDtj&%bBI6aEaKokeXbhZePCH zvXj2}Lj{TEVZCfVzr1o%a@`OEL&>2fjkyf@eV_UFq6>^yzGHC^jQ7&)mFgICf_ZdBTdD{w$t@FVCEQ~GWS1R4_af;~Ai=N!hz4?WiE33t zWr$sdLY)&ezAJwME~k|hi075?H^Oq606A>{ZDw%xKqx;e5PWegy%y1|Q#XS#8y#DO zmvm>|nm&dSJHq`>lM#htOk254H2{08E57$tRiVYPQP-tAn+zdC|80-$Ha3iTX!ltg zY1TKv2`Ww%qsbtBnvF^15os5bDYb5r6S;QVi}qw{?VBR%GdpgMR?HcD zOPJ^|3^K=TOXgZ z4jvus%+^1)Gi!WM#)N5p<8?3zN7050g`5n|-vBq8oK?s6*j1-G3*_~pRCtjCQ28$W zIKx_P6D1kPmkUh*R^;g;06Y12wP^pXu z^;h|h**H`344gXzzP!DHU)QOB2GltprEfo2fug7ZXk-zvyTf_|1`^5yK&Ep1f8k(I zkyxxG;3Phz-7HQA&@&rR7H6n-bcE!8M@xL5`xu3j0gEeQ-uai!3s-gQRxw`5cL`Hm zqw;-z{%`L-?RI_^0NtcrJn2_Brck~FqFXC;R~Q#8d$D2bW_3L=wT)lxHxY8zce9qC zNga9f|8PY#P#pfKN9Yp0h*1Kdq{S}n0Fyu%x(GyB5Il=efc*my$J(QTWSbT+bN&@A z|AeCb(_GMFIS81g5LRg(Ou!$K>d}?m{omL7e==f4*4VuEoznIT;le)+rXEPL^)TH@ zJ8m5`{rJJcPwWkx>3{N5|B}J~uix{}C}gHTys|}pXZZt5vf9Cii=3)zJ!Fu;x8jBW z{V(5Mklf${RiSKf&JrUcd4` zOMv<7_5UM?Zl2Pg;@7FvZqioI(W~n7SmOxeRvk5E26=ua<>eFIJF_?@1$?A7U{0qp+CAPWK6r!W|u1AG{^%x+L{5#T$~t}EgypSf3=VECI?DXf zQ=M#Mx_hJibG&OqFhM--Iv08wdB`Gj`AqF#K!yLiCi5HpY_Zeo*|J@txkVsam{5eB@^TU27*g@oxQA7Zz8Ug|{VX;FIm$Cy zU7Q3r*Cbz9OZAO{6(fyBblbiuQR~qE8#EU84;+?6=RYAUOTfke$f#8U0`4*nZc8qh z-8*u2&QrY;<9^L-T=j8O70$~;RccZWod^`z0?xgZ0jR*`LOUFCI$oc=i#ptl{Y)zT*E#*$XW=g#6ac=xasx;_kJan-{s|m#TEVJzp;w= zGNv&m%cG?2$>oc^wu?56tzD^Xo70w04_}cD(tC_fzsvKd7}M4=o(EJM6n*UxhJq9? zqkENA7zq3ymF_?(?CIW2jfM(%@HxOtc*c$PD4#nZK4>Y z7Y_}?C=@%Ug@orjdd|EFiMOUpLOqQUulh(C_*}<`1V?r5x{CUBr!ggK0O$oEeZp8z z#01o5wIR};b&a$~oNZ6G0>{)UGs;B=GL>+g#`MHVA9t!%HB6p>Qg(OuDDu)AKB+Lf zejXI9A*Xq`8vlwf6PXnwOSdxUa3D)pZnX1iR!Yry{B??QZ!D98RNq!+YvIF@>S9MW z)UrE(`OW&xJUjpCR16p-KE|W20Jez}UpBJEZO`e8{6bENr0S=Ua$m!}RIQ>iMyTC> z5aO2s9WoUP3*g2)KqghW0NY|Jbo#S#n9S!g7TEBltNOr(V@B!Mw_W7KOR=u{vf4nr zU7jdufsDaBM)Uh>lfJ$F={BD`d(k&uPRm$ghHl(d&*uh&C4M?+@aL@y=dv<%38=Dq znnUELrrfGBfB`94il@UQ5ixJ|56OTvB@I3*Q|Q1Z2w28 zkeBomuG=qz=9G8w6Fz*b$m?|uHB+)Pbi8<0lGjmdJrpSeCm*TA%rk0X)BYk@dYZ^#-P*Eq|EiwYD;*KNn%~CTuU}~Y* z&D56n)Ms@;3=7jsv+4;%TA$#goU!gmqW&R%zv)o|SV5uy2r56z5|x*Ty_N=bKb zeZbYZ^@uS0dZnKxV)3T85D4PZ-BeZ=^P;q9V_v=L?&;>|DhBHx088w*nH3VT8WYn( z-bMpt{8x8QIXauYe&N{re^IDj@fs<+V#Oj}an%_;)%_ocs2RRp|+!J0D6fW(t#Z`%#jeCb)+%^CiaLIFe0G6(6W z99AOud)&?{9CE&TLN_s*X!jMlXDdp`bF8<6Dq0SyoW0ni(p@^>d-q*k-u@#7?gtEo@z$PW1^J+oRrWNf;G1MmXf zZpE($2#A#T+e*z!rb6skOH|O|nVsi@*%_810f_VGUIoP(bTQ5Ag#;qW;XC1tR znU~s8zfy4ybyxD~iA04iD}ifNLe2URCwBwwEBpU!*-@dx2`@$$vL!j-)h*tCLB zAS-WaqlKvd01M$Z(we*Z=YG94A(WVLDcZAZE!G8;f}L65Kw^`Ne%Lo9CeIjOZ+s=v`Jq>R18Q2crh(M4 z53PG1F)V$DvHWI0Fxn`>ubIRWgDY$l4i^lqH($`zYnz;B3pW&`bb3nOT*+5*abWC8 zK#)o-8hx*@oOBYL@sp%IvDoNs2yz+`$b>&hC9uY?%58g0M=O|!z)+!8Fa!aBhv`B1?s4m%Nb#XQQSmRhU!%!*jw*)GH>=8f9Dg4stx}tDX;=KnVxLr5T zNKH)F^qN(~>0ycuepGDrJ=3=;%*^_CVJMenuTYOiU%+krH;!yBZd9q9+kBQ z3Ki&@PF8A=gP%t6tb>}*?GW0=L@P>FXfTK(Vb7@2PZ23TUtZ*ESN?OZ^UHY_qZ*l~F3l|3H%A5{*0@oN zfqN|~Y(at^gFLW)&)q7A@1}KYbHWTV9}MDp)$6|i!Fh9zrpeOREYCQ7F0+= z?YXc!@4h2dCMhP#sgX1*tUkI9MlwI)qff4w#_k&yKQk?MJcE_j!}fL{kRO|X3%M$N zBS~S~1lu$S6n0=Nn*y<&09b!B8-OYrt^ZGS1jhcFQMkc3k7e=WAA|XeDgh#p2Wywt zu=&%kw(2~q=jImEU77mvRHLdo4vFu#Sp&-Ezi^01XVCALB}4smdDWKts5+#Zw(1Q+ z)pZ54tzXq;f@@DNB8FY*qrMO=4txB(KRZ_4*i?KfpzGOqI1G@Rv+(6_p*0a?fqr@j zA&U96P1w?f^oBIhgsKEN}&-kr-8zBj)VBb#TDsVNW81r=v$tO z8W`IK zp|p(VIiJx`ZIt7}Kpg1Whib;Pn^gm-#Birv{-`@{7931(SXCSK)n-Q)1EEE{LG2`1 z=xTu1n1zEwJAMmEA;uC}A8K3KJYK6|(YaM(ZnS98O*2F_!1W|@IF8-+YBP$wD*2m0 zJaQ?HqXsqERsqDEEBaAR{EdpIt>d*h89Zk(5y$GAEXJB082Or1}B zsq%(u?1fwEzrEGQ(-b}%J+_fQ71iqDb! zm77I00;l=k30AZjppxPcSKNsDQ`lOIfucoA8X4LAXz{}E^|Y;=K8t|ZFEXB_tD~s| zz;^$Q+|G9N?_w8?0-)u^5DzGM7S%TUK6v?NY;XEb#a&!6TRQLCl;_&2ed?(c_=f?` z8c(Mt%qA?}h!yZD>@*&>@2*&{kV+a(IKe>CjBI#(tB5s5-{}MBE5G31p(<&L$9GX5v3PNsG;|S z8Xz#wnCslN_MGdUeb4!I_dY)o7*CQX8Oa#m_`bJpEG1_%d-k6-onGEh?RebW`2#1J zt#|3{Au#bC=Qh`Oxgp1R0!=h(?2GgvNMccuu!^Q8LxBp=xjtKtF{!}KcLvw7`v+XR zQ=3^CUN$ds*(vVf-eMcf(hh zBfTvs#_Ju2A>@mu4u;g;h7*YS9cq)bkF(ya$R~S+Dg}a6+zo4RQXDPWLt}JrFB8{H zC5&XKXvfu}n|G|U33bwVXpL8a-fMmA*w@%s`|`DbYAcmIdjbJmzg^aHZgb`RwjINn zUnpNr5=S%LKw&KL+$zbyc$ryQK^V>aSAn6Siv;g=j09@&P@{T6B#_2Y)bH)bZmLpY zcuc5}lhu-AiuoqnI)C%G6&LZUm`M$AucALxW1(`rMr_>Abkpl_w-hZGBmJy{29pbd zly6%wg&bN;R#v@d$<@p-cl6okd*}Z-XxiPKL9}O)_GRMJ>&2-DWGP?8wkdSjYYJ1sF zsqAmt6t{p5ng-faIclu2WMUsMRUyi~$6GX#4aS>LpsWGQN(5Z6u?Ysjs~u!M1xuj!~8Td`FW`u3}cc8&Z+!OxGr@xi3vuSfFWqChN` z4aGYfb!tiB*s5OD;QMV+F_7NUR6(LXo!$pLm^2ce%1UWH;_aUE>4fGz4{uc!KX|_& z28k-oQB*Yi_!Zvvo3L@bYgE3g6m$f?+&&t=@y1dQTX+;^*Y9pN=0+m1hv@Z$_6i?m zE!0TS3O}6%X2zL(t2O>~y=ZFKm%hEdB$slYfadPPYsA~5Nz&|PyhQ?Wz~(?4eM8{L zzls>8u=Gjr&wjD-AnVgc{5qIxGXV9Hg5D$gOaFQ?$vY>V<%Yn}JPc=d4oy333MTUP zH%QDcdcj?!s6tCsV(9(%@o)S?oGHHS)8=9;OCN;6>Zg^=y^=NwdF%r#Rc~q|o@Uw_ z>arwj3AojY^L|W1_6@ZaoHdd^Fm`G!I15Z~Y9ij>L!qNV=^ zN*U|`!~H)`t|zzvDQpk+)<=}GqK5+SxXJyzpG2DVDCFLE zHp*4WlSN+C2B4wDT^Wr%B_@kyBx5Fxs^U{zEB6L@K+jwS6WFF$$ezR=R0+|Qp)GYW zqdi`-qGJic-+rK{Hh!Vc?;Sd@nZ|0`R5c}M8tg`X~+}&Mi?sch2%$L1vE`=0X zm`VJG$>bG1KyMg!OuqG}}ePSV7Z5=W3aS*Hy>stiH=%5hZfHQ2~xVf7)Ne z$`C4GE7j@4MT^9F-JIUqL;9&9irpb z69xzCgcGk&Jilx>c5#@8lWW?CT<9HZ*hJ3yWbdJDIwR@3&n}6=OddoSOwP=(*ei%` z+{NiI9(D_|(3EjdW4?<~P@CjAQ5RFFsh_OB2=8yGHyCGs_PWAImBArTyO&G>=b?ss zX0}uIW&hH6|HT;u0u>Rhm~K)J+y)c{E8EVp81l-dXc#_o6x1^|-qfHYN4J!t=aYK; z5o4+`Zw=>nBbxUFL*k3Zu}-qX#xs6OsU>EM7Taf9Ci4!01WxZ_M3i$BwSw1eaN6*0 z$-n=C0~km3*0Nd+Sh#`dkj}F|Lxsxz(`oo~W+}{~H=46wMxpz1GxjimvuInAv7^YI z$0@ykBU80Rb<?}rtYU_l(xjYfg%4sSK$bO28O@hhKI*%SsI&{p?^!e5p{iA+ZH~Sj9)JH= zOTHp${D<(}9BL#}Zjt?E+H^wds#+%%kX=QL)%5B)L-U(UuQefD5(?ak1|Cu{^Sr-? ze_OB&fV|tb-R4*SB4?jK)o2{huvjgCmroQI#v#u=mL!gBi5FYR=nZ6|t*lSH4-(Zj z8x+DTj4~_8Hs-QZ5L2XDFDyZoya#C^hW0RjP#jl3_;a!~D?e5AbyHKpm zH}jp#yWww(EgfjC)cYGMw1!0=Du3F_%LQbT_Mo%d*qsnKe`CEBxorROYx&qaOYsN= zGS@G5nWZDA6xR@n=}zXZ0g?tWV$JT7O9soxhTN!(%hQF7XqW(~aGSIuM{!>Ab8ET| z!yO|0Ipkc6Ti-=|eVqH3L^2MGW`3K{gsVV5#c>BnM z-dPI?w0?1EA@(JzzcCo(O8hZm*ucLj&4#d+Xb7+En-s?UT2LnbZK83>S9S0nn9xP_+DhUWtG4AlA@s=h^x1Ma`iwew!BTvJ}>8DMlG6@ z(!x&9s8{9r@H0jIJ8R)M9=9|6z32i*S*Q4mX9Fm!LBFSQ@}6OoS@(t4;kt{zxQylD37Z^UCoxkEU+h;CSjJ*vjzH)62e=w3?xKWm_HHt z4={S^Sy>X);^(|yZh0L3^y1)5Mf^ts(G*F<;v(AVK%f!-ETA=zOL1OUzv+Y?nH&bS z{tf^CH#$Ism3MYDM-r7ADLfi;gM-%34g*y-d$=97Di&DeE73-C)7*d9-*Yf* z?aF?QuXo_FFMH;1T0U%Fk~yHj+x9)?7hzmHtj?B0YCXaI=j0K!Ax>_NMt?5Gc5w{rjy4kL~S=a?$XC>kYR+pG(Es^=mzM2k@ zTIGh^GgDuA;22iZUPmp)O_)+2Vj%P})`5iTO(X=@)vUm9%w)6o@D?UZw{Zrmyz)y* ze~RZU%E_scCCC0Od$?vnjgU!+7(X+sZxJ758P68NPh(F-hXmR>9_$)by|igfBjdJ~ zLC+M6nE+0(53{>X>aFvo!YBTaZp{;Ho6(UvKXQEz^PmK)G2?+Lp5f=6;dWHHMY?FI z_Oz+d2=`rBbE+dh=e@ZhT#W{jtFiwM#=LY-FcB!Nl*q|f5YT=lqM^8S$#6S{aPyM{wwG0{z|cd9N9Wd5gLC0 zzqiqwF8%Y0KV=}BVr!~Sy4t9$SA*)B(OV|#r`8|hhN&iVT!I>EPYGQ>N3+GKlVJg^6nHCHPNuFrae7v5Z!5%dmQX8LD6N-^b?U8DTcxacYdZ z@S~6!s2AX*9q`RJ zm+e6wENSJypYm1WM%ld6Wqf@8Ei3`6}c0>^1xwG83 z@!s-*L|I27nfoiHdPrG2;+I3IpruK7=R9d|UE#Hy9u4ef;O8A_`W-PU?RJf0xiAZF zS09HtMCwk5W8L?z6kr869HzI{Qi+pz(OB#Ci(qK&-buTVM*2>m>;yfCzv%dY?#VPA z$g9jZg%YO@tZzQZiSzJ-0aL-U<(*x+eQ1m)7+14>=DpVib)88+$4^rNn>p^Mo^Vw* z{1CUNrfS~mf%{T7RF-`3owE9=^zGsf!^usr(X>-3D5;NbpDY(FLI&TUc{)I%ShS*b z`gl&gq~e(>y>##QPnz#H-ATeoRz9BIZOO&$NB)5$w0x75xA=RTiKQB)S9R=whM{B% z2j*UCBcfT8es-8pz2yqGxL^H-dT$@n)j@zZUoXx>CK7L7woeEDf;FYrXtGO3Tq9Hp zp^uoPVlw&w1ASyXZ(bcbBGS4_-U+dqa0!=6Q)Z+8s8Vrjkd|V--0c7u%ZeaJmYLp~ zudOO6Db6ghi5Ed)rjF=`X;q6&J;V>Na^`Hh9pj$rhQ^_NVsMVa%Q!)KkiU=_N9UaN ze6rs4 zU+cal@J+u*GwjX%YG`x)zLe$!&zp&pETf8wN-bqV64pTq`+{5A6nOf$UvY28G6Ih; zi?-U-8zj}IywagCni>-N%}(3r;kN_lU*-X#MaOLKcC&IIMF7MpHA!)i-&F%+*)@E-g1 z;fMP%vmf8JHXq$suIUpzdBvaaEh{loWj%i4d>=#AYcy-PXTeMd8)bst%_7vw&a=rp zuv~18{umy8D_-vg?X^$Y0R8xTAU&#=VkA zv0Yx^lciEOy+@fA-o5~H@1d35CSa{y^AbmX?Et1_r*g!DE4<1IHLYVSdM~Tf;hYVM zu?KizrO&CE`S2M_kNrn1oB_cEU#>5g>`wfd*!2z{98jG2Y_j5>s)p(h`KCRJY9cxHU74NveAi(W1p_2gMlMOG_Z> zV&!LsUqUi+*j)EjyJ*sOBdO_7kvwHd=IA?go7~(NuAZJ3s%~M=t_pVKh_JFK>QLLv z%^oJYNnr^mJ$9(I9Z{Xi*EMdMWL2EwP@OH=J1EU?Xw|74AqJv3;mm*0oH;S`ggq;J z31&Y1R5?&$gtczU%bR#CAVo<&MbLW7GLuPD5CZpXCyVdhOaIDz)|Z!?OLq9 zs;Rx>Ao>T6LtXY;G4i#_(NucM=A)I!&5Pejg>>HJyLR31$SB2)Ea32T!vOX@_7KnF zbQv=zZTIY8xTheGtSW?)G}?c5UQ)9c8hQD!Ni5n!j&M6O2bvmR4@|<2m=Xy z+{a}Y-JVR1SikSqLUTsl;HOHD(w6AB!R&-_tHIj%j=ua8OS9#>j^;orN~ui>`#aZwM3d%B4^uSx?#&1o^g5H8YIXpvO3({ZnJr9HOY<`wFVtGFV~~DVnPLt50{=*2=GY{(Q^Xp z>8-0u*`7-^5EPu>obp3c@@_KaPo4dDi(#P+jct5N4`~v@X4#+td>A`qw&H0bIYwD! z`fx$t1bNi6h_otu_7xWO^Etz<94-c@7K_^46tLsWlS#~=L|Ns z*4I5^mD*p%36U8*qhO2;Uq~MSvT*jQ0&q(fv959?M6IvRS=FDL<1IZ-z0SUk05kjM ze^1sTyg7DZ770{#F9Ds`!51t{6{TkcX~Byx4eZ~&vmYK%`B9^6!~SO9N|M~jWEQxB zA=O`v8l$O#-eJtzjTKYI7kY619Q<@YL#{vh%Pc3Vt|y2d zCD+$U2NYdp2AJ4>wkxrJA#O!O3sl$5?+x-CEExYzw;m?*g}T#ed=$~GihZI~I2LQ| zxem>FLj-&IZeTw+8r(AAJK&&Fe|689PvjmrKVfHI`|)S(mnl5PzZpLaMQqI@l%9vXbEx z4zj5KibsSru@Qcax}n*nGe|=fbm1CwMEruDwDZA~MCeHpuY> ze4nDxN3Q~WKRIfSBB{vb`Le6_-3-C4dB{WOV=fcKklet`g*mf;PYUyWpN#&x09MpX zuXF>d%s#sF=u_&9$5Ny9yl~Sl^H`CoqeqMKh&yJ)pYjtc9Y>vHNwH7brY+4|Q5Mmn zMLYv52e}%JAh;DGE<%9`dDXJ;W%J8yo?gj8(KW=xbWNgdsB_or^mtb1|I=a%y0_Y`(&PbSuQ%WI8?4j<&+-L&N|zNV$``JDA&yY zb+*On5p%TIv*f1f(l3U~g71Z6MKHJp_O-$?qdcL(BBMClE)CfwQB=G8-VY+0Q%t*F zrV3R{1o?dL!ohil1Fc^nyotE$;0Y~6o=mE#zB)2N=v{buopz46Qt28}ztY=osCd^f zZ4O`D9dD=WNN*qge5x*`-hp{q3hE%95}uy$D0SkP;`OKu+BA;-nlp_|5Ip|+Zh`yo zXkZ#oEX4GY?`)qX@vcG6v(}onY3QkH0ISvQbx3{E_fBhivA`TJ&1VXah*>{nBY2j$ zpULF~aiJO#W3Xc1e5|$?;Y-?yKfELDlL$l8=I@O%c0*;+nq8f^m{!32zcZ6GT)KOt z)N^Jkr4}2jm_V~Khij(r=>E%hM+Ag>N)PW{{)|lA()qS-++4hVy?H3^uy*R_zEqjA zQ0U{cNR?ImHIEjNaaFEimv6%B3!XTK@9lRmt9iOEgKr~`-b$w$A%>ctYNm||hS07_ z+<(sA_AbQzmq+8$E`X%$0@~Gakk;0vd1GXu(N?2kd`Ipb19XN|*1K1v-b|agsRqc{ zVP8v$V7cq82sW= zX*caZ>%Ac7DyKidg=_|orAQ0#!4%vwcOBEcytX__;bM&~zUSmcI|$d-Cm1$Y&g*$Q zPG$!TF#pTWNL*lVopuJ2dsO#2#{*KN%Rj$O(YaHjf}6{tC-z1|LZV9ThC(K0OYDZZ z3C&k>$0V)2{o_QL@#pxWc3Aq2mTl8}+B;RFk8Z!vB*dq@EFnhQ-i;qbY`&6z8Em_O3YeF)93OYG^2*92!!K6~(q zm%pG*Qoti!!U^J0#yf!&{3-ilrS{$(x7^$HEuAaYaKv+XL%rWKM>RIanW$vhPrS>m ztovZYUoaw$o~BQ2)wTxn%s<(7d99ZZgJFtgjwT(QR!vQG%fakP-&9j*C@FeUACcWF zoV)5i+7~&NDKTyLlT_}k z1xH8Hzh%pi<}$ewA+kPe@iu|O>kq-AI&H560t76o1S!v6d5@p$ogBp)bhN>TIyC`* z?2*FZkN*@#|KF)uCjO~rkAyLmI={SxOl2n@i<{70rht1F@y@#1VNh8_2CnG>c6$Ecv4%+bH4d zulSZ65;)aMXiv)2B5(gpu1vhZ)hhw4Mj-LZLBmQm(-V&?pbCt3Ey>&z0i>2qcg0V& zFFz|&zQ5m%=gWC3N(ALe=@x$?bRuU4RKi=Xlq3XjAf0iyfR&NSl$RUtPSJY!7w_^% z$Lv=kYcsl0`=Px~mIh-^?4EHI+&sB+J9R4PVv6s3&o$e>+?EN|M>j1Y#&Yer2kB(M*EZdd8JGQV< zq)1VF+vM`U5U<>T%P)cDM2IV7s1YOf=g79*v(YRhw}Kt{i9ZmOt#DK6U=qW8>Zmh2 zB7~3({FjVH4ajv)1e~zU8xH&K?Y~F>C&Y)pwyD&ynWnmWyiFzz=&--Fj3x!w5QX<2LFyncvZHr-jL4#40#H`>4xDgJz;Gf?N|j^z)z8`i}C zs)um?7R5cIh8RBk9SMIol%V1AnW5xL#CdNLGCI}y5%NF1rh%Ex7nd1FiGO;4|0^E( zTg3~rZPrat5fRpe};ou2Yjg&6)q@pBDI@{?(83m+wo@-!}+B za`pPNz|aUe8vwi6{%N<&{g2&wawWWUe9FHLn9=@Wul{fG(9U1e8UDIAbxj}p`pmv} z!ZN;Uj4YNf{$H^(f9uLoo&xuuXNfW1DZG|-uA&Wzlh?G`=i#T!&0)&C9q0~i+n zn;$;^?LXna`&=&<^=q3SZz$asTMp}9zT`FiuR1Bo|1Mis6RAfKU+Vp1Om?HH9?5wW zRoN>|tkzB>LQcjklCC08+^c)r-DzP@t4;fv1z@&e%eS7%FD^FQ+f-gg3d0ppM* zAcO+BH3tFe7XcwzC!iGjN7BUq@2|Y|FTZ`+f==~3?{~KczA0wtd?lw?Fx{2I{&h6c-U}Z1p(V#$@WFz^26caNma8-Y7s6R$Nr3m~n{^T=H^IE}el#^w z{V*J|!ak0DTC_tzoO3AX7`o?8^*xqdcTSzMVn8oh^^Qt1rOhKJ8V659HV1P&b$2k} zc^!#429(Q-Z0OwRlm2O}?$^1kBy)v3XCVkJ|IK7uojw&h_`H%Hc*~MK=hNoc(~*aK zKcj|3JOFvB>OVDdc*_6L8=~I|OdkQ-;h(0?BIr(&TwXKmkhyh#FNX4c0GT5m?{e1J}y2@pSTT&!1| zP3KE+LXqK*d0AztM8!Rfs*nsHzR)&>ZPlqh z?tMHRm)+lZ`!}wXyv!3^+nC-7nEFb)*Ur)K%jrsy2k|o4wom(;35LOc;Iy$8kVVc_ zJEpf|vR8ay3I!NvHCWTMQ-h3>y69U+SB7{yVXsv4WWiDnRU;L+i<|uR3&Y>UihpXt z{(1Xbm`M4*SMpVQ`hwmP!}&|pd_uVnlSBA6-;@ce(Aqw_HJ`*y*V}(XKK<4|o8P1s z2GA6>LcQ)3F-;te7wqLE>&cO1vv+UEE-el+l<}Z^{{Ym%_79 zqyJGdrJ_8+CFtYc;qc6M0HPMF06=v_##jv z9K=w0| zpLkby5n+FsU5SOi&(WWd7ko9Q8n^fHDF;1c)?L_OUnf15BmZKwQ2k*iQOD=<9l;@M zcZ#w|Wuv%i0i7`yqo`+OjO=Gi$u?@1;9_qhm z($i|7H!(ZOw06agEX_=ST;NK!qk71Ll7@Ci-+*Dq^klXa3ErYiK{2HtUDb~gK61FqP>#O( zdyvcjqFwR`AcJB%7-})GB>^HaGiL`kXSR*$8&BlMDxL7kE!c%#_bY!w<+(&L1cxBx zX{pX0X2|Ho9IJ~VOTwLCs+AaP-L}wIZ4;g}C*Q-T`&=8=CgA-Zcewhfq-+MpQ@cfS zk)1J>c|Hk%d)d8LG6RV5eW2Igp)R+#!~5uCb*#Uc8VQK~cR$;UpD$8B2&4s)-!yiv zNkJ?lH~bbTH{s`fP-2XK*8?=!C3k@h56LiISy#^)$mtnNlL|f2W?S|1NE+)AoX5rE zKr)!69*Qap&2+OZEJLr;5V58DZHTcs`Z3P8w9k#)?ujtpL-o@mvYFAAg>f^n*c%pm zriZ8#CYCSiWgN#m2G2m_S*3?I9v~`lN^vV~+9ooRCp#8WFhGlwt8-3)lYq^<)Y?L*&E@qzu`G$nB`NB1dd;+m3<+LNd-*O?kp)B zXga{G8A!=`CX4XWiP}ib< z_GhVm^@X6cPHe=Rn&!Z^TAKKhhohFemkWWb4nsnSZ%`qWcV8k#<+ObCfnzJ>Vfg8= zln3mJ>vQpP}|QoUe+5Lz~lQeL^DX$ zDe%?p4UFdV9?2a>-idp&@v+|UEv5H6KXc0UpgWkaL{#g06uao*(>DQ!ylH26;s!c? zlW#F?D{Y<8+^8QvCNBNE>InGpT1@Y41XC%8j=JTo-`i1%duH~bkLgaO7a$nib#0e} z?p~e%N9fT~G=vH!gMxvycV?RW;%A`Z5#0VXGsZeHKcKFUY_+NfMq&;$@us}15L#%t zi2CeTqe|1Bj%vIL+EU=kjU4ffFA3vpBqNZ8yWv$`zkYB(JnskS`UXdJT&?L!UQa2M zdV68rKizck8?)BrtHW9}-ib@$~dkk~kpH@QwN=1tnmaQIDln8Edsjfapk;ew{b z0YVWVl;<Z!@A+iJMqXYG0P(ewsz~6aFu8!WEX;QpRk9D zqP_ccSK6&r$Asf=U-iKwpw8~z3?}|?zF~iZa0?~J(q%KM?A!b7ISw67Xs%6#u@lGP z+y^`AmAkVQjdOE6jD>jwzoMsG-A7xw*GCgPyYFUr1>T=W-t?a zOU74jrgB%pzK>EQ%haa~J_(Hb%I!2?q%tDd)|q>H4uw%zEX_KPD*WDpvI1mmzc2p* zA1m59yulK`pE52pMYHrC-Q9*rrnkPl>uFZWx9|#59j)1MLt}2pFzx&?B4ELh)gHQ; z!FEelqDXs0IGj z`1FDb5Ndd(U1wB&hJS66$1^&-bIz_czVNwp!>4&xmGSEM#YZ%M+NmwE=BV|IK69y+ z3WKI5@AEp5`X&MSn{Y=LUK2D+rY)EBVEBWu=WB#i@OwW@;0utI?sCywh3O|yYP8{i zP@bb-RqR(EO+&OHmTg>Fw3IKiaUBfnJEr0=E{-nF9q#>P7NJbn}lNZZAHV#<;4(7v#&Om^u}$cY|2Q zq=l@nOOfgt2-P~m(oOT9Ns2Aa`b#YOLwiEMTw7=RrTQH&?2RlO-IR?J*BZh06 zCiBH~7lzjB5mp38tHVledp}~nrgRxFteaulN{Jq&sGKK~rJC}~7grbdJ&qVrv{p=C@SZEI; zWEB#U(9_p34)>6ypXCkETv_1nYkY!6?95b~_tjea6>hO>AyjE^wRE$|5EQ0OI+pB0 zj^3O!TxRJRMmaFkvrIPlB6E9MtH*dfpPYR5OljP9XwvyneVY{&-usfnB|<-{$~`VP z^X!thsCx^}nsq?8x(``<8@csonN(GebF*V2V02B6Ux~!A=5rZ1mOq3<>z}S5YcwL`D z0DfQ88qYhkPG<~E@tS5*6^oCn0 zjj1`=#n|^{I3O6na2wL6_*{Ma2B$7q#?RBGTw3`TsVR<%72scO+n$$9L2S`3!lh-C zWi93vr~Zow@0yc-%Fp>bph^&xNuRbfK_H=fg&T#PezF42z+(?~+-c*CvE*Ntss>8Q zcirj1a%OjdHixuFtDLk>i4NpCF)4E?+7|9;a-?En?>8RK_Q@(wQV3fyFYK$eN>W>! zFO=rdldTr(-*jt{gXYY8ne%mkW3+BtTa8Eir&a&NAYOmhJNq2<;FLKu>?uC2h2w0m z%YkSEheeuH|K33xqWxUl(YD#oQ|9Bk-PV<5U@OE>xnU{l`aV1zYy5(r4EVXu;`T?00$IvN)YpReXfP~3UYr;{R@ua zo(>Qz@exx-g~^Jc4L-Y8NneJYJ)0Z!JX5(9LQ}NF&Ew1#y0PjYY!`R1Z*FRzLyC4v zw`C%8Ca@SPw%qYbnOhnXsYe?P?0F;1X-l;B!e55GDGUu47mpO2BF^2)@5sOipiEUU z(aW8*n3!XOnglSXCO?B4{jW2f=mO_@pm=R+;H~jTbkv z?~RfNFk*O1wr*HjCnBQ?B<&*hJ$FraW3vqFKP^S2!&zhBCmyS@C>-M+iTF8($k{lk zCpH?XmemFJ>vUNHRZl=`r=Ff01lHzo&u^@=3YZYYCQ6!^#r`4Hl8rLiQwy zL`*8FOwi@7>fv+BCsoxx)cpg8hBcCA!=j<|!vQpSB&=>~WUk-WT{KpHtQm5u3jF5& ze-n$HSq}e>^;Hp$Vjx0wx6rvIT0jthNqT(_ z_m=O|j=IY7!#( zNunhG=Jw{Mk_^t_b2|Ocg#f-+k$Z}E2jVGm606N2W3N_kE+YTHiJxvWeODj$BCHzk zQ~Hi^v@ItMLyEr^UJL+fa{ZlWJZef{1uD;?>p*mt@wU3i(gQxvYu2ax`TlAu!jbx| z$5!#qyaQXjT@dl7^N@B+J>Vz%3r+cEkd`ARuDV-%M~3M2s>iIy?4lWmZ2;w!%<#%D zz_B3)t=etMw15`g)_0R1q%bIz z9z*pnf*H;!cTTkR4N9cHw0)i^8KR^d132rSf8PCry#6~ZxB>Gobd)>{=Rc_=HcFLm zZhkE?FA({eWyFTm=@EO}XZ@tm>THB6O;s8YFL=Xzxz2wRmgbaS=$k*TmBIZQyJAV| zb9b_5=|RO{zXVK*BNHSzzuh>o-6JCu^l821dc7ir=wQ|T^+DJV4M9VuRJ0bxaKKOO zLjw`B#U$1sGw^4VfaN@hYiCI3uUw3n>rrP2>-{C(k<@l@hdT;Kjw zNipJ3>}*x)X1Zlg9BrIXo~WLfb@D<+FYPu;5*xC~HPI=%HM=GwEjA*BUhs}mk(oS4 zM`z!+>=}=LP&C+stN0!pq~F{BnZ@#PCE88DQ#H?>UEsTR0ngWcXIKj(v4yf(cK%uwBFCuVrsZa0f5k27eD>KBFo4B6?(bPD64Ze?_C?tV25UtXnf~19g^L zH0MxT`q0Vn_0fE{o6_^+5%Z+YM|Md9r#8iD#lOuLmyAu7@dgT5huvA95D7=clGWv` zv2um@<8Z$y0z``kDOaf`frnGm`t=_(G%?I;os}IN69E#yu=%iLB?}VC^q?JOo42x0 zu3g*N(o!2JK{D!K6)|qhg*U_JDvBA--{)`R6H@Dze2YA-SFNZl!T;Q})@# zlxtyth^Tw=&x4N(7$E*>+vZyMTdV?(kN3V9m~peaU1!3St+enw^A)|~Batq!(r=nz zD;)mp0``Z#B5UUz_>Gv<3ZKlYu0{G*RCo*~h~B6eRujmhT46lTJCn2Rv=bhlmv~pb zO$8idgqv6+BEzjdQz_e9ZmR6TG0~!y6^gA)$ zMV3C2lji93G|xAOCAGi6YhBgz4*YLc2vuz8JAEh`7xv@3W*1NN=0H204=ryL{Q}Y| zf1Dqy2c83Rj$PgUAY8bmeFr`h<%|dQ*lFNHU*5wkGHJ2n>y6F`r2OZZO<8LpvYr0q z8yl!YeoX1;=Y?b%#GeNu&{GG%Qw9y= z4=~JkFd-DBQkv8ZG#tu&YUlrnj%FIpUtgH~_D2}_lP%5dW+KBCaM4*Pno52-vMJ++ zBwKP&wK0d>SD1*hVf>1nEcY2Kxj9O7z`B`b=t4cPMUmS-fe|nQ{ehEp0}W)+nb5hZ zZ@OS+^f_MfDyY+$kY(PIdwVmEV%+$mSOKw(QJpXfi1l*0%@a89avTnk-bB?joJJmS8rK`-?#++T!H21rEq+}wwu3Kz+1niEZO0;T6(>Zn;$ z&l$YOYvp%s1drFph#v6JEMI-`^Tc4rWdSt}UNj1;MR3N<{fpYEA9vMhxsbt5e4||{ z#y#uf)Z%4lyU69|9)@ZcQ~QpM+$|SbMpS3)Nw(ji-VDsnyUIv|ozzGjWJ9P$?efDw zg+uOK56ps1aQD^S42CMt^IT=`dyXNOXQLQFmNaj!MbYgE9en<0MHc+^;sH z+7?hn_LCaJ`DGaWN+J~|NUazx7w3f4OD(%MvokUB`-P!YOqP)qZyTFbU7YJ;3t-Iv z(ZPavFj;IoaF?l5dfWOI0hcb2SItF@?}vi0WR)#Lw!u)&&M!VE3*+I z>Q;w3Q?l&lY+c(9Z|mxtRTRR%bn)iJsUQW-*a%y+V&ol;p`mcqP^4F9CB_zEF3Zp{ z2~I)o_GvHhPFgB*QzYPb-rmkPT8PE{)Js~IGJVQHF$w4*D=YuN!JpL@@i_t<;Y*iC z_x~nl|I5b2?FC=MJ|ZbC7&@^xwp_~CE@IH6IeleS$tFT{;?SCy1^0f@f*yHrbMREm zsmas+xq0F+*xS6{#qH?yK~s$PH^vw^+1aB|nm|f6k1og%T}w=dyd8{=CNUt%`WxyA(&GAQsFT$v zN5Q=4gLf(SoX8Ag$h1{=j#RF_GLLs5_XFe`P{iHWYW;qCXEPlP4b2fdi$8kQ4IJ$< zX;LOY6&$fY1)msG{$LYU#9XM6p0887rGjfXi(r))(;MPaq~%>{@f;?M9Y=g+!)XPz zA@#YI>5|Ey4Ueij_jgKOD|UHW_FAPEwV@IE?_<#W{yjmQ&cT-VtO7;R8NIo4LJl(^ zo3pl0Dctz6yw;C?4$#ig7QoHD4)l4x8qQ7Wq_#rN4sX=_34AYZq;g5@E$FAD#WTJ8 zeo?=iKCIx8)^z`74p%R#j31Wwd^01sV7$E@eLMP|mr}e<>ZVI1cbm86WP>G>X@EQ$ zjhd+z-u+Z>3g)|~HRnjq$b>XaZ;yD8rc=p~YWrl(YfsWnhD&ccnf?}DEZyGv4!YQ53y_dis*$?ex2`>&qt1E4I*QvIIl zE)@6{v7~5dG%pZb5!3M$&EIDkd7i@&se?Mp0x`4(eY&i8yrS4^27l@0+!qEN`CfXI zD3FwfpNv`xKL{X2CK5U@lf%dZp}oZzdd*2Dd*O}g@P_3~x3ep2GAd{OHQVQ1gic&l z1Xsuy&>UzJa|}7sL>;$VY?rKK#5=DWAO=mnq89fi>SZ2uMIuW=J>y^em>ATLVX@+K z0{H)wgLT`cy5_pthkJK!X~`OsuHIMjdbax>W{GBAY3f=K$U_~}l zq=tkh(h_Qb5cm4s+4=aHJv%$UIXm;4J^SaAbMA9v? z0n@-%?Pw~?mF&!G3XrQ-vlfM{pRd0>NPXLA z1Rj=B2>n{(`e`Up=Oxo-|4N|{o33wVXd|SxV&~yaMVHnJ=;wWF#g|TUtyU)+(Ds9E zi0o7J1>Cc|@^vmsZ)NxH%x4v7SKVPVg*mgvZ)2s_H~4Z^TIDk_lB*excThLG72PZw zu-*4%I&NZb;qP}ZTp#zbx>N*WeEc)o_v0w*tU`e2=!*sGxv=Ged)S@JuNKRng15?V zO>P1TRjS?AtyXIiW~Ri3rlsODmR*_DCB=9yhI~=ta#0wa*-pA@fjuSw(s#fAj=rR>YEp^#1+nL>RUTT71!V)(%ly`e8shBp^x+4 zMMmwGQUOvA(lW-M^~PVO`F;o4&>*9LFY4e7+I^tHjzflcx6Af((YgcpmQkoh8;;&; z!9O^N&z(0)9x)*V;jv2OfDH}P@>}?la-!aq0$VlQLhKUd&NSla0pdoGb}yZi$9?a# zpAG@lWKMkFY3ZgR`|QZJaozXLChe+}0HmsYGgQR-3<|grC+=1EQp!o~L=qWsB@qN! zKLBYl?K~5kd%~CHBH|GE0xR(dF%I%qUZM#1R)s4q%Z=@B+ z$O+Q;z@ne5GI<_8KF&q!a1D1i>&j)BZtwIvsp4uZI#vCATBM8{DaL)Kt9wmo=-$l@ zcOjw-p%P+;GYtauWrj~b!R|zCwmAZ)DE^G+A*)Mwn&W0RM#6Uegbt}0^=Hj_^)+B&D zm=~v}#mRqb{*M1p?b+Rn9n?7L=5iNc<~yt@b`l5gPCI=An>Lx5_Ki#r&^g~u9t_qQ zsp)%n0k#{wyDfZM^-hK8#)I)4@5p+}3PF3g8;_HHqo7i8Y#+;I?=NJ_W>YUvS2fNf z>r1|-Eb(TITduE9)$h-Y^7MT5jI{l*#Im~}5sNsPt=2JZQLO48&XF0Hwl+iCz@V7Y zhJo#RQjz&OuD{*z7Ytx<8KVBDDErJ2u8+D8F zhep=-IIH?JXCX8u1byQdiFx;V&BMGtMtRkIg|w`a4JJwFOjx~NS~_K;rh`7N<)HiK zV!WM2X87AS@d`^9Q`VeRS3lQE&7_5X;fL!laOF4ZUxi#N?|bF=!C>8nsMSAACAMI6 z6tv^3pl03eumWV_7EN0o?Rh|C1=x(T7cz%UH;X#vmyUcIn{%nJGJode@D^V139TQo z)JRE76X$_UNCGn6F*TnTUkH@}xV?Wi0n5Dhv@uLE&>ta~uOAU{zPvn!gk+IK;j(96 z#MhzQkC#v1pCi1g9;@*=gIP>&&z?^2f43CP7KFRor_aTwsyeqzSX)R%xE=t$5!yl` zy10T@5AOFwUlBGRh|w68sM5G5&~XW;%|U4z{}9JnJ5#h;VaFMU6h+>fHx+b~8Z{bD zcvlb~QybbBeEij)XU7`)Wq}^2Puephom0`ERC8EL=brp>uxX8aMKr1hD4xvJ@Z(Le zUoqqL#{{8bEtg$2$p?tUYa#2j4=<%Tw z#S+xoO5ScjE|oDXI*p$uP&G>1gw3VF>TF{Sn%Z$|w8WC2fuk-cwW>!PzSAylhR5X< z!`eY83J=1wvm>Bgs+TSO-7zVVFy|AU>X`=T8xd7+$n+TJUOK?O zHN<&0r*Bq~#h~>SB-O6dq>}`Vb0!zx_we!Ks02%IsPA=*XRvZJQoc+jIk*1W*qe(I zpsyan?9lDEklIZFmcDT_455#{%GAH*X0at9JLu;SlEdxBT|o0(tk$_-+#=%JQr8(+ z0THo&S4DsL=^aLZudul>*kyLZ#|?oDTyIxnFk20uP8EhuHl6tZ7+iJfzhSmu-+tq| z$i;ySW&d(+_%7qas-LR3V*xZF)DVW~k^D9FKdLFpv*@t83#-{Bc$rj+Ctx#$3bJdHd0%u>j} zziCIw=_tLr)I!az@>!Sgi$41cT7o9?@6WZWa*vx%IG5Bh%6krKd8?e_L<`V5Ug*cU zB=snk@1vM@Cf?Rhljdp{vq~d)bG(Yxe0>RxTQ{AwZDpR^+a!-Sz%m1MEs`H_yj7Q3 zOShFvdN4a&^hQg|rx27jT;PpX4$bXH_M&xzs}b|Q=Ses;&vy#{sIovC=VO4=yp=Q& z)asWu^YGX-PM z<0l1;t2vsJ;t3b~=5C(^-o+=Pg=i@JEob(6d<`CV=das7fYS06ke>?MhlOv|JXx#K zr=MJd1dP}-onet$nQXHtU_-Ayrg*1m zGxF})_nra1y?~(@nQOrY1{zc8x8k2FYz>ZXf8D@1LGk9SgbC|@$dRn4F1*)|@npbJ z<*BOEYr~r~qk9Y{Y_+$=qtH(Ijc;8UVoF4xeg9vo6btfcI>_-PsPQqJTkp7mZ(Ra0 z_&=NNnkgE}a=Oiz$WV#2Qd!G6K0c&=f92qL4tS(AKS}Gk%r@g0kP7}H*SS0kVLOzFn@gxR{=j)! zvx3Vu{B+_M32IsuUry4bW_-$^x{yvJ4gz2jgF``RyV%(o05ORAK-v>+u7M4nrZF{s1Sxo5ZxNO(dZuPf5|D8AaJ)-~TpJ__xFG1%& zMzB0hMn=!UZO5HWQvGext0Ya%$#bxO*Vz0A{cT`(6_1B*q;#Ip8Jy)l{Y9bz@F^&X zj0T&}LpL==mS*e{5>kFRkU6izq=NRSXQyot6V8-HZ9 zRi9pl;0pPjO>&ptOjUnr&(dy@Vx}pPy7=B!2tkMVvAGf|@uPJGp2DEr`vLe1(c znIDy7n^~ZpIq2defSo6r@)cpP$b3_HfRa7COz75fjvk5E9aiJtn*4BJmG7D*HVY6# zfKu`wEul3L_g)*G27Gqu+_XyztTU9LDqORXgpx_8j(rX*KE_pw-UGSQX;U)U8l|!H z-OkdIIpHT_&=(I?-sN{_;U#ei_!&LQbxC~n!@JH!R%#-xE=+z3RduCo#?I^yk`(W= zJ9=EN5&EQ<%BV|>e;D7N`HSRr^?^2s9jst{@}TLHcD6*9(1Bo7*TT_gh?BkeZAHE& zV~yC?!`Rh|BAuaAAtKqt<3sK0-^sXKt#KP?Y_}dxN`w73H6Gub~l_z3gjgU4P=R)O+Zk=8` z7B)7mVfCkM`bl_(k6)gJ9%Fs}#f!iJPWf}_j-%5Pel3|4iTBm#>-GJ#zoL+tTb*Nf z`B2EcUnC-j$6WdbpiB4yAfFM1#H@_IM(kHps@Z2Mg#oripa`C0KUrrVc3*6_$C`A{ zgY%uOiI*b3QZoe2UE<+MaF#o5`@HW9d<=!>|E;S3Zc#WfI*32EB&-4E^&nk)Y6sPQ zk$>u0U9Izn+7KsG52^UXl*@DFZV6Aav+laI3-pbV$J33WTb(h?9x5qL69y1QZdlT>Z7N4xHq-%E0g`AMG%L&nYvLj2}=RLmB_Xg~%auT?ctgXPl zti_>z&kh5(4k$r4j9j5FL_V~TdXb(>eC3sm+fQV`=?JxQzZA-uR|{~AAl}BScFUer zr3W5nZ10!UHi=u^c^0sJK(ckA@^Xoo_=APv&&CeVu50m#2h02GJJq=`o3dtCl~C9)F$!L4;6}5(-$T{nWso^fqd6}oiik~ zKqV3wI-uO8i9=+|G<@J4E3O=4U^e6*sG5?Kv`X^C(I-^DVk4_EyYg~|6+jT(B>4^O zGx>8{Y5F%20pO%$_6|Rcsft}ZvydW#ON#^=G5sQWo;mxl@$^yJVOA7H(Xim_pj?}r}iaBeG?`;XQ&PbP$bV)js)H_DaG8wliF5PQ3 zaH)n9xd^#)r~f@HiB3l?Lj6*xIGZc2tUWD-vL{y*RC3QM?I&TD=Tx%CP96!Rd47mt zaIiSX&9Lk^46(qSS~_pvz!FnSo%G1Vq_>`^ReV1dOeal;BlQ?pvDEUlgAGczdt zY1aC_?@4;Y@3&sWn62s$?iu>4_Cc@uh()$Eg(*EP`o69Jyt;XnYYxuagqjyv@=wVT zuMF#@`#yW8Bp1lxBknQ$Vh@buB1oVuWx}Ddla`n zD{@_Uvwrqe(aO=eBt#L}64UP`18GVKdQZP1sP>gqMV7^~mEo{?E5$@v9kUA8YiX@( z0B=Ot`o+z&7_9mjno2v~`cSjT#C>Jg!^Q+#(A%Mi<5-K@AB$jWWHLM9%wxFPTT-8- z!7e#--@9~ID_$HvI`g%>TysEQ&@vV#29#rvUf-Q6x9rT|-c+~t9wXf7Cc5=P*K(Yx z>EsFwM|w_3ByGg7P>etQZ)9kq~5ut zJE28Ree0-64`2n^I=20tPw=-^0$}Ib0m4>qk&}6C94_3h=>)q9^~jz)&V0|LbC&DK z;HP3zJ0|lo!OW|?w(4#|vAU(1FR@AcfINToIGBnUKFMH~0wRFE)sNBjqfgI-OhXXb z-}iU6G-@5-#947lb`?9?wZPj3-1nK5nu7hS*^wP$1U2}+J2ON->{P7@+yABk9IK*p zOVd7ZIO6%LIp4F^y+qp_qqHzpzVr*{1bD|8gG}d%J9{93pr~bN2@1Lk^*ESf+^vpR zkwO6we%b>rN-O_XHEeHK_S2_cod$3>u?6)uXFo+HW_?}*Zu2jWOJakhEc;^DeyTF` zl!=8m=x{yw=6xo%h0L7VYHkh-=+jnDfQ_hMGhrTaWBq?qBuin!0G=>TJ5*wlAr`jki1d`L%6|8- zQD5BLq=FYVZ8pYXUIqJM5cW$k@LTmkme8z_V=V=LR^1lUZZGd{$fr~mUh3xVi==N12yFP=GXFJ$rf_{+Rd}Vg zOip^Z9yqo2h1QJm zO&A?33^5fwdLA*=#>O|lnyS3~dbGE%z!}WflRrx)kW6uxzJ@G=w3O?n^k;A`2Lx1t z?>4T9wiv(O0zWtn;-tAeOqy-EJLCK`=5Zm)iOfCjz69gzf=eWJ?=xRSCr4SE5Y4o4 zEys#)QMX+80c$cK%N>-g2HC(FE%oK1MR@vTI=E^k-Q5Y&cH)^tO8%U#p@R>5Pon(3 znr9D;)mRv4N-!|S;y@VHcmiXIwSO*=PK+84epnAr!t`+%3goPrx0z>Z<=siAt$zZE z%A?cZO^$hDED#i=%Jz#SeHm2er(I2uJtjI%dYg^5r1xcm@8gr1!*=RL)QO7KRMS5z zN}Lh7PAyRwixn+GKi^eTX_ITu*s?;e^xXW>2FCI9AVE|&aQ$C46qQZfV5=>%3ejz} zmS4!8Z`+4zyx(=x6Mi6*aJ(?YurhUYWBDXFwt75S$7@i{rwNmMX0Xj*mI~%#sNbQ) zgSs<|Yn**be=hK98p8G9Pxh+Z+&H=9dz{Q~{7*lcF|&NbY} zr)fbNpI5n&iHJmJTWNg*fO=OaHr=+fOzQ$1T62Cfr?&M(t@1TS`aX@2pq;Jh+IwG| z5|D$!iXAh3nAHNLC@!Kh06Gm?rb7Y;jSXgZQl)PbhdJ9Y!`-DCCdJYXYLfM7SH*cS z=G(A4=Gf0GT5@9?LJ<>09)b;0Dn5LMJ!xG*AVSHVDGzew$5fjVHiQI!PMpr@W{b2- zlW}myzEWN2XZ2M4bO6Fa2a`Dr!Hz^T6g@wKYcs1Z$-P169x9i!^%q_*0DPjFR8txw8z69*e&vrPk(3laZslT&MbO z+A4GAeYOV!7N3(>V~Xd*i(KW?P&tuA9f>(sUnq8_;kYv zhDT*}ov^)b1CP?$rlKLT5!jXBHqND{w4*#vgdb zxaS%lLlkrBxP^VoDd&1qBgSo;TY;lq)Lja18>aOZ1*UJ&y>Tg8{OXOBKKM6wA+cD6 zxU!|Q`*&5OzSV=lIv)G)D&4$?BOMcZj02wG+$Juh*?m$kl7z3=UMftT@2tvQZ9KcS z+U$lp=sZ?kFZg*PGz6f(0`FnJww(3ouK%@KSr-4^}gZ9qJa8dv(2 z*A~ISiw|EGp-#@A)*=1hQ_LcO4OLSQ=u$_z7uxmK$hs;RUN9*pX8%ml-JPfYw$*)> zD-N8`_IMIrJt0}n?m+1k0mUJJ_1>N21!}%zjDlHz4;Y`Kp zbz7caPc!Xcn5wq_C`;F>9q7aTF%zqGIgjFs(|Ca6$lSK)z4BM1ugmdun4^dT6!ReV zV82ya>`R?U{@oyVVYo|rx?u#OiPm5ap(AvC9WsmrG4Z0@w;(-x;w(RrwWSU9zm*rquaH&+bM}#-ex%j zZ3M(8AMZZ~tdcqn9h2-G$JIsRvlcyxN@31dRRhFsUA22eH$vf{uZhHRHv3_qr1-#| z^qLY**io z4b@4$f|cXMzpE4dOH*Ad?lGh~h{|3Gv@pF7Vj&0# zb(r|s&u3}L7R|%J3tQf;HomHoMPX)TL0P_L&O+AHU}XOKI@t0 zGh=@OjoRLJx2uakqjO3rANHZ!4$(3iHa8lY!`m+L-I1@pg$v&jT6&9P%7I+x%RPKF z@rKuP<_`RRmao`_!64lmoHsj6hd#?zk#; za*@n#1Y*Y)Z#f@knxyq@>FOtg{TbL9cu8nHRetDwlTP)g69sAG#o|Vn<$beo0vLA` z(MAC-)J9Lc-UuucWp!`pnFxzp;JI!>$s4F`$5!j{1N=2>Nh}sHv|#X~H=omHtUO}! z{6eYzK3_#X>WFblet)~RBgrYzB1VVpxZ<q(^ITY{Qfb!EJ^keL%+I&hH3&FbnhoUMGp_kX zVu(6GfX=Q>x%~}Ef9JOuD|;V6!T2YNV(VX(_9iRZv0ni0@&Cqj;y)}}+clwZfF3w5 zj>tC5)rD{8j2c^fw+Dvz?p&T%8A$-v1P#(yA!gBRq_$gcM+*U0k#T4zX|_ zMbzalC13oC&DRxRwbpm}dJLTrU#?G5=+_YXArk6wn?{3A)RA}LR@yjKUF_GwbRttb zLK?&f0N)1E5z*AyYc%`|@T0odr=_NN>;F!n#2<$cy*;v7i)KkVJ{K};P81k>$ph-(ce};MKV2L;6rU!P-pmjp&>O~kn!P6M=7bH|w<%o2T3$$F{x;lJCZ5Uqn986yP4Nce{1F zsOIart<0pTl>HTYOVr8cZ`$KOr``Vy7n7DhTl(a~$v;$?-5?&ghcp+}iq%TMNSQRE zZ?WhNf4xK3dRGsUI9aRIFG4HH*Qj%$N#ySN1QyodH<+DEj{#?kp6VV}>zrh=ve7Oz z_b0*`bBvU&_%I62PwO^2YT8jA9y{(`hXm9Ds2(z;4a7ewA#v}y>J=idf6KRyBWHBUn-?T1xZdg~)disfEK$sIHhV9|$V=t`lVUKF)ZCdjdis zoRKuTO*OiE78NMB@*Q{U&S!O+QV*(MNTeDT8kHBh{BR=Ocy~#2)=jcGa%uhN zO)DKhZH3W&Xr<4$762Eo#wROrVUZZ>5^QVtf?#JRrF(>XSw9Ax+7??7VwL_HmWFtd zmvg%@rpErfK?=LfCFSB8G)?rvjRv@qR_VOc;R4S$Y3LS*N}r@u+WEOzEtkXHxpxzW zyS!hCPH)McQ^lMc>l`<`=`!biCi9Dgw-Y`6-ZWDAWiWIVV9#>h9>i8)Oy*|^cR#gF zMW z>g>LLZ9|%eD`&PHR|0p`i^O5x%2zd>HL?AqB>Go@;p4#Hd0hh8<7bm8X&WbJG#7BFE)I>p-7!*>nzO4HI&k#Lz`4W;491*S>pU%E z0Z4HB!fR#muNo{Et}rMI0qWrqv_v7rc9T5JC!0=i)1f&*8d03^TCpvm%zQBVU02d8 zNAJ*&xu)Z~o}Q1ZU7<{~1k`?H@v$YisFM~# z#y95>y){~zW}M3S#3V9n*(}|QeVfF#{ic$5a3|dgE-^{0MkSHs)uX1YRao~!UGXM2 z1gT`ww6UNhhA3e+Ullz zF-;nCv~Spvc597%aSQ;@&;)a8`^diDr_^EGF=6s@R8%pZ1iios1YXD)+uViA|5Wm9s3T)O_Ez#nlJiw<7Arn#$6l0W?$?y zh4_^dF5@H1`~gLBm5e}Fnn;m`lt}^SurY%TnAturgr z+XeRa`t}K!h+9=v<(kZhb<(z32usS4MU!S;uE!pQT|%Jhc|fy3g?7A6uhi06fhoEA z=MYt)OwznIHQrW;W@dZEfVUt(sgklLSpV9d&5D|FAxbs}kc;dL0mveHc-7UhOC5MU zm^p#LJzRxpDuxv<>@^0N7~jnv(N{6K6qRn$U;sz1w}Z(DnaKZhAy!o5ZA zI_GfYT1BfT>sZTxv&NkR3g)!E*hcw=`rsE6@^~){47sx1Z$j1^txa_R2ke9IOml$P z)>yUIXKt)m&lux|pNar({%b}7AO?thshf2%(}s9$rDJyl>3LRu?G0g^Tk|2~W$IPe zIkf^jJ;t;X(@DL70-~wbdlFleJ>TByv^&b%WMuQ;dcdW$YoTo}(am;7*XQH2D965~ z7(+q1$DQj!iog`;cPzGEw*nJ5bZ^6U)GXSeQEXs|A02cpY3{Z2!_GafS0ZawZ;et0 z#GE=TObd<}hkvO%OC)SF%IXL^WZ5Do|%rzrk=&8rQ}x$oa(LI8^im z)oz+ZE$G$v;ZY4UGE|AJZZc=*)b5*^20C?US%`hAat%oPMS?{wL;9VuotW?th*r_Y z!lkx}gSYTDv8U*xc#|~D{94-hvfT^&DEY=E&+JdO(@#@Ai=cjhsKxfh-ZDdJLg&mB zvbTyq@a0mmi};n+*A9FMerDcN`<`0!v5)jdy%FqXV#>3l&L!VpBuu?JyIK#GMew}o zi}Cb0f!9h;(iScu+IU1_TGrlt>p~n=^ZKUikGXMYLw+nJX?}kqAs5^7G@U#iaN^X# z*-rcfu}LGM#iHzRJR2TXZrRT{7nXG6_0r~xc1KEoo zBjw-EeZ3aZ&1exUOyI|n$13U0wC9Es#4y+F>$LrOk=LK95#bxl*t$(}ksc1~HD zg5&2v`;jK5cg)YR$+7TWp1^-u6w&Ty^-Tra6*TNWzDXRPkX$@8^Ga60jVgb7G;iQ-(u|@Yy z^MI&1~yQAhUw>$6n>{{bdFL=HDzC%wY*9jft_OW5t2dWA z_$I!1%p6NK*CK?svYhNiPm=iiToQq-e7YTNj^4G;u((&abz81mp^h}Ss5DQ}YWU<# z*>Ai5rflE=v9l`6S7Sg$3D1lp?G3(x6g6DZYj2orU=y0P8s3;)@^Ey2j%}_F8#RF? zJd?d)BJcX$USO43$r=mp&rIP|!1kp&egLfpD>f$uNGso6wK~171ZFwU7>e*Bc|4n| zBFui}iv5{`+P&B$kXTyoasz7h``rA_8Z@W#_jcCmD`V^V_OL3QL3q8#tpe8Aag^S_#?%@bbfo#lJ{TdM0vkjY_meU-UrBoZ=?g|Z)idk z%SHoU@CvgmCH1XNUixfE>7JoANb01tMsnQOun3KsQK`W+;5`D0sbu>+DZ|swfY5Ah z3Y2-cuY$| zKFan&@BVv_oWrOI6SmeMD0;v^+b$MfNdT4lU$6f~a!on{x$RmU<@Izm`u0wBzX=CGQ3E_@>Ma@@}_{(E>I|WmA;&yZ8ieT@K$G<#iwDPPC>`lo}Q=@L%<*Z zE{j%34hCKEFF+&X4|YOYCcvzssWgX=Edc_n_4;V3OHA@GZ@#7j-G|1sN3Y7uu3t0M z4K_GZX55#jxoR@JGWPIhhttr`Y16p(lveT9j{x~bJv|n3-3njl>JF4LtDbt>zKR1* zpxdgQ6s-}lzf}BVZ;s5lGXLAYm#v|Nu?Ekj9(a1KYyuw#)|NMpB#$}eKud;t!LHEKdP;Sm)@&$mNdLKUTEsb z`Xmc>>Y(XuRcSN9duD}{sOwT#x%wLJKvxOEFnBul0drah+6(!wfxyP$WTW%sr|Q0?NsG`@4P*Ahq|%c{;@*7s_@Vcbj&c&nW4CEb;Db59 zESnw-M6XM~ad-+9Hte_KLt88d`rAfA>b;te>dwVLvf^%2`Dd5Bl{(|Oi)?_YcAF_U zjI`LBuDgQ^tSO$gw!z&~VN-U|D>LxkRYl0FSCzA`s>dybwmox{D?-0?lYN*oJA!$y zjDjty#qa{7&)7wDJNPhFDY-{(+XdhSV9RMb>z>dSgr;EwtH|LvD?a>4MBQ}|=2zX1 zgo##hZs?v~kK|DLC^D7Jm(equK6Kr#_$aDB zc24_jBhn7gRNLQvty7C+oO8QZ_23CjonR$1hb1L`9RFlVl`F!=6wp z)gM%F%`kE8?J=Jnb}p&?5j-SiXL$e?UR4~50u!a6PUg_D5zrBUWQ(-|WUKyc|IvZz zj}Mn~|LRZUFf^P%=>0_!RE?i%5hUgB+vTfmGOV>%e-rUO?#(C5ro->hRBS#bL0Tn92i1zQbCPe+rxmp z50DPUxXd&BM_k7u7Qj4f>stFngB#F)J6LC9^ttMMI`K>k$bgOi z@q88D`WN&XyU(VfJCnHt9WK}K(^?>nTc(Q7Yyu#m|B+W2*R(}GhfP*yT>XF%;Q6r4 z)KFfW`-_B=33V{2x_|W!`Cr2u|JOhK{ht3EU8g_(BJeiPm;47_4_GeT1+?VI z9`zQOP;2?vbBIs9Vx0e5x%(Tr$^Y>+?|jK0YvA}F-Tz}Y`lJ2-Wr;PtQtf7a$-$YA zJMQj9^@@hSrV*2te+VV6N^{`}$ynmOGLv}?qAD*zHKE+3<$D zGIq%0gfs0y9AeU0?W~l_8V^5Zc(2rddls*cr2Mh=GTT-oZaics{i-`k- ztkc97v17GcRjxZCnAZAKfe;_FxCc)Lestd&>JGWId=-()9(jx6#*?4(m*mND)e%s~ zc0YaG1pvbVJBX#XN&?aRXz^(e&tS~%$SSdVJS{pLX7F-vPWiLCff!)dm!QG2Cpo{~ zd6_^_=Fi+?35r&d%$xhkdgW+33VC*8Xa-~Dzan8}HDtA^?jSyZ6;oGilJR5f6|-NP zwm$wbn71?S*R*m5HP!p+A~e)Ni)a3lLyHZ|2td2ijcMf?f2<8`7Rl4h@il)NGYCB8Qem{59B+5aL>^N#2VnF6SF)UcubDm8=+&|6o)LTPBZQ)#Ls?mzV~yV& zEDkxbu$WY%YMrgsUVVta!x*-?h}C&iJTF=JwD8G?wwS97^l=su`U**R*pX}Mp#a(aeE&T} z+g*<(E0|-SU&3P>Ee8(_g>BT(&l&A#%^NL^*F~3`qK9J=CgfF~_MMyk(RocepiKmg z3XlHa@^RK#@~6b3@ZR($1DohtK>jB(^d#Nsd9?JfhGd_g#^t;@6Du=HMQt6!;1=iE z{Z5-gSkdPKq5&LrE)nCPE zZCqY<_6)cCJpf@QNPUucSPmmGOAb7r$8zqBgFR-y zAl0)Bz+NBxkcG9Y(gF;Le>U{I_2+KR^yi-~fWcY)-e)HwmuVHp6}t&xDRh=}CQ|sb z#4gtfA9ZQVZRcD%ge1zLdSJ}~CO4--1%svVb%w2oHtpi|Mh_s5pQ+PW#lFEvqqde!6NedE>_G`nYrHD}2ib+f%|@j#g)Q^d zieh-79hFbO$Xxs%v?9hoi~erqfBItrBy1ZGoMWG5=c_g&46$z*wVwyS!_d__z%RqFJb!N0^?qPgo+qGQ`yhx8$qDR$|kw|`wxZZ z@PR>k)Tql*li{P`q^BVqpDxKthCPnU@5@`tjaHz_4i9gLWqSmr2P=GpOPziyO7x!2 zKNXs9pY2V{Q5CUGyuughNJ{6b7_#nj=1K&gJmQR7Fgpel^~Ut>qkdFpvSE-tiWaEP z>6yCkiBbwZmXD13c`J&QyeyRQt%6<>p;59IIeK(jJ021F!P(GIHFa;t4{$;;deKnk=QI(b&y|#m%=^(C)WepOTh*fWX|{VBQppzGyrjc(`AoCo zKrQ>@ws83LY9JJ-p{5`Byo_OkR6sWfKnhVYNKXwi9Ds}OSE17JgmSJkNk%BC3PcFs zfIFnig{H~YXRL5Zk|!xWD*X@w^%Wn>g6K_k2wB<8eOW4a>UtAv7FCs(teJ*3u)jJ( z+(OuBclS--r#g+i^lmvDQw7|D5{1)&KHN?TSWXJ8?>PPaAvMhbIB4Q|+*pr}=*|}f zvH0ip=n{O(*lNtN{=+SRY; zXy)iJF0LuZxJSeJxz1cfq`TWYW6Eon&C~q2>ty9B-pjjqs;YjGJ-OE9SF)wdwJ>p} z_o1|kv>Qba;laRO?sO{%H@TKt2*+|~>9#jUUzJmzmBRMZ6MCKqy^mAB!{4@qF3!eq zQ9}%HX^9wBx&?gP{URsiMEjT7^Lk26g96jAPn1^COP=6gEOUqsMG?Q z!aI2Up%{_kGRH;m@H=-{-mybFTudZMAmw)Kp|u)$Ch3(_)AcVr+(;^HoU%q&OL$L^ zY>xsl55q9tAZITtJK~r^A+-UHeBjad>A}LLp&*=uU9hNOXJ)Y=s1v}N?wwqYI^O8( zq_xAp#&-5}V#_g8(o}{Qn%=5$z*aN7A;%_GgMlec+{b}m4^;Ujf-XY@TI$Bzo>l;g z9^(x`G?p?iQ28#bQ+*9&hYllw=zx+G^&e}`qZ{;Y-SzoWoV;2`tnXYY%>q;`5Ql`Z zyz;;KkOC8N9&pHJRy_cC3j6e$l->q57Ygtjn9j(9o6z;dgJ477t}_OtmFDPDryD@I4}UF+*lw}^g#BJzhBd}~E#%P*4U zpbRyCrue1mD5Ah*A+k+2-?@pC@r_yTLvVnA|A9ahVjU(b#&rMm6_2+sEu-)cxdidc z{yGAOp*YSmOayOO-;nFY9g83q;XLi8DIViyuwLV!=vdwJh1SgLM|Q_;T_`@eirKN> zj0dFS(+d7m=$Bt40%uY|9%>Myvd0@L95|-trOpT&4&0@2SIC`#CM*C(!rp)8pb1;G zmQhSKYa-`#98M!^?0ftgyyO?#Ky&q{LQXDvhjuV;os%?YaOYWlE7P8hi;)g3)7ub= zrZ5W1(X%!0$FZ?S%s$L0kPbc6hj^y&HuZg5^&SEhN6gH9W?(~#ap!=jPZA8Ooj}z4 zTM|LC-KP3u0V4YomFdaW>Jz+7#k8ikYhLx4QByq06Hnt(bhb>7B0Qz(?j-FmaS7(G zYr?8$l()ARm!3Rw_mUH@Z}LkVs1rB1M%$P7Mp06g)bmsEj{Am|>RH1tlFyd$>Dqu; zYY|YW(YwFT8HK;K(Zh<2+$6I5lWYDWdHbeEripe#C(u4W+TJhBBdO+H=8;tVts0*LJ zIIlzDZ5fKsauor9U%3r(zm-_e*8$}Cx@FzF2Xo!WLCpS?7-H;VX$S8yXqK6i8H+{;E(Q`FOL^+PQg`6G`AmK~#tkA2kjdWopdu{8d*YcmbhUM4br9}# zFP=5j2AHl_-KdM9Z@hMROOVv-34PL?ygsD6ef1fnX{*Fru6Q4SH3H}vae!&JE7mn1 z*kjq$#})+bX<2SSXRc_2>Ff-i%v-Xs@&nTsdD0=#(QHCH#JTd;bln%}q%JR%qfHH|xx*Dk8a z3W~a#xdX@p>9faW6+wroM*D(2H@>%qjhQ2~}eI(gc7qOyWB!x1gb!GO)oNA_?T4aZvm)rr1PIB~b zJH%qJW#gN(#OgU`gx}HON`o5QApiYM<|j?>z75!E@frTOTqh*42T6C;C|U7t*lG#R zOv*vRiLAd!igI(prx?t76;g;2s&&$_#j%wSkLbYnA2qkOfBFQRc6bppV@{u95&A0+ zD`Yk|=a|XK%y2sC(LT8mM)-@$JcdXSB|h|-^iutVPlk7(`L^hlE-g!UDLvty2NiBf zlHBKpKML^MSI+F6iJb+9maaoLygREWPhUp;xAwj}s>yCoH;9UK=}nqc>Agr(lrB~2 zCDMd|0qG#2SSV7Z3rLYBJ<>a&BTb}B3%$358d|)sXXZQOckZ2YXYQJrb?%z^BP(QO zzhu8{zk5Hwr(n+8M@%owMlWa1h$*n#6Wt%xmYLaS<)Kg30h20#mLdr7)@UTh8yW0$-}WAW##*um}0t9#s7Y zsgqB`xYKQ`*-l=ZsvWREr@tvv1j~g)`O9vmQ=!d{j}7lKt|nW$Sza9{>yw?z&OPW# zcdT?=o~As&H(DmL(M{WUf9Jj%_jIB5o*MQO`v~L^>i4aCbkwkgiEHda1-_*~CJQMr z!UQ`q-`I3B=?=)`6n>*bTPntd>SdEQC)Fzt(eq8;*_jcB4I6Nyw9)@OgmGQ~9Y>m(E!A0I3f!_s9O zCDPv!2dE_s&Bv#WQJ=$pcn9A(QlK2THW<3rl&(o~)@Hn>Y8BPr-^%upb}=y3e#oqV zoC)83LNsg-3*^`lCP+=H0Z@a0^A@`7j1>r3VEN6SW~}~CA3)sj^hUcp?`UmI`#jVi zOpa^{&Mh3YrB0&oq1K&_Vlh|zLlhh&j3e!FR@fB#x)YFt|qGX?NO2(3rL7x}fd zYf(oh$4*hzk_V;_KKrGAqq{gDdi0JjRzukC;LYn#h9CmXNoo0aHR~zhLVgv~m!@NL z7s*GORIL}H=&d^#YMfYv zha4fuy!CuFxjJYpn1ZPi9SisrOZrhcf}z&Q<(7Rr&)gY~3-ozRUo@f0ceivf)(eE^ z8y1U;Ybsx2joGbscaPVNlRw0&ak0n6z8qCDS39m*3IOKsHEF=4I3O9R3#QyOygL{I zQ!4e|TcinrDTsyn-keO<j9Ss(Y3)wlUwOq}mc-&$qJFni198ep zswQ=enBP{CoDuH^o@-y*Nr!&T#mwK%{n=a-B`srjCV8$azU6K@p!h}YN~IJdO7&MvzHG$nL3m}?ENWy3OfXlatiC*Ft>g# zBiRo>JarBUFiH*YV28`d$TXW8?^mZZc#c7GPgEkq7V8vK5_m|oXNNbZ<_haQ=QNKd zl>L*2%%TIGY#UKpA#NhQB^)2QL^amFF4?zNrrUJZM5l5pOUcH%nR7IVYPjOF^97Px zmTCI?yvyF+R8KpG`gM;jY@VyTWVk0ggq<25X8?#AaZQL-n4kLWvTx6;5$tH4w`H$S zBs3zhgR%IGP)3wEWl!j(cQ+HIKa3 zb;^kuTNth>)$3ph(eearUv=yXa_yV7cVXnM$88Pf#!m3U<~gsq0Pqk2?;;{J1zD8~ zGie+ZyVO3H*T92V#pxpI->AxKeJJH$jiR>c5fN{_L>eg?zUV1+n>UQQP*Uii8O}xv zB;=>|q%a!XIr4E@9u?@Ya`VaS;I}r?)s67C@T7`%CJGu5BrWQ@imu$`jHldjIxji% z+C5g^u?=0EaxW8ZfAXdwiO2Ww;-Z18WIF?SsH@};^KR+!EUl;--e<5k#|ZY-`QP&n1wP~Uo{QJ}crKQGiewO=7{ zfBA(9Rqj7~#r$rV^G#NJK7+zLsnf*2OrQ)xlAPsp@MD^g3lg+E9y{d|_sB`2(V;^6 zMj7ie?84?u{>U1m)g ziPrQRn4Q^Ji!=OQmwuF$0*RE7$zJ^mP?B}3hh_P*jJ(&ht1D1p#+Q*Kq5Cz-jt)?@ zn1RhbWui5lClT<0)fDflwT}&0%r1llRhA0)na2xzw$96r6vC@(y#J(*h*;9 z#H`E8jXW4Id}lB-ql;oUE98kyI2;uYwNiaRedCjBx7#fuo4C>Q(fB8ybKf3$0RoNp zzcgTfdHwE~^k@GhZrru4xmQW@Ea;HPqb6jwL|RYUz9 z*CNw1EMg#jbvMHqu&Pjr!1&Hbhg3RZ1jWrwAEVh#{Bo)#sHbv<28a_Xx5^(zuLUu4hbkP5!kizbu`KiRwcT}$Ft9q^T8kn zsYH+|FM0jsF3%EY6#(~oois0-Y5@DKC-iSgSzklYTu^zTNn4WS$tzhH`by-MIhEg@ z3Ryf5o3_zT2KOmXDU)ow-W|UhK!{kNub8O%0nC)-4!aL5Ul(1pfRVTnV6h7ql^&3x*;MUpLO2M~7T}Vk022Tm&3kk@@ zIH_fi2nwt;g!N3CAP4efa-t>`U&n~99Fr?nFg6&5?W|{|LU(cgNZI;5$Gv3ice9*( zOm0ieL7wtFkDVnU)^LlFut2C-E~#%iOc%v^Ep@(k(^Tdh0fJ@FhpPwgh4^ z($_p4%5|AQ;8P$8LYsR8V25bF7#&*Y(>m;Z}2cVNHN$eH_IOr@EzDLQ-pYn^Z z&vC+}w4nVaMKGu;O~DXqr$0{fu*MfEFsD@gJl1(5IFuO{-9?w z-4`%5BI0fAW!1JpOP)%?3SSAgRM*b*hl2*%9b`QZxAPMK`T!<=1F^AcxizPz7w-)v zAq!CX!OoP7h^*MhzJ*gJ#=URh@oeQjNRe#&ryVmA+htd;wcJ|E$$HyGHL#AP899`* zwiqvAPgp|}_Zu4G^u`;8A$e`d0yBdq$>USF@v14Df%%%d zYSro(U)6xcphl7ob}UKd^$LY{EUMR?LU%O$P1ti72qV0JJy?X*36*ZNY4ks&7)OH}K80W?C0~GW9uuUXx z>E^!o%Ml&=k9Qd~Nq>;9*q$r8veH}^Pdy2zc%&mCH3fpZWCi6RCXTZ3WdPncd~+LJ zhB8zN0Ymk=&BnGXdpt;YjNQEjbj3~uHGCpjnZW5(IhRWv<)M?O+^+Zi(@=IA!{V*^ z8~&{0C1SYviODq>;~P<)K_XA+TGYE6<#z>lz6`KLiH|E z1Ve|)?$({Hu3LzdLL%z{sM!{J-1c>0a4((HIhDaw?nw-?=~-BOOnKAFjqV{|7^>3g<_>Y7FeT!uyS*6TLl0yd znT?4N{sa+i6y)5`H}1ikdRDHaPiBUn8Oud?Z~pXYkxhZwd%wJ}Qai^0^MHZNZScej zR%2HdioJnxn0xTOvI$RT)ZKKCM0VfA!SjG^j;6utMA;yXLrtkYZ68mO@M+);Gu-*4 z5NlMuJ#|WH0n|Sw`nYavsSa1y?_OkyY~+`Y^SEWkA^o@qt^mPD|{0A}c zD+B>duGrC}Ic_2HE>7uGr>)ELM1wx)va(S*pCj#}-u-y;2Ro0V;|+_4lsbI0Vo)jz z&LNG~kfmr6jI;Kz2O%#6nnj)HiBfKMy905#W%>5g{d=v=OCn3x0cWFu*O;mc8}_6f zxK;Hv5n1>hTgd$`NvE0av>)A0M?<>m=ROv5GIIx(bAyL9r)(|T0d^TgKW3(t>vyXp zBApAWzqlt0y#LYn(#|o+OZR4yRqun)M5WO3A`$8t00uS6 z6*zbqY61$)Gw5m&b@iExKIm~EP#JWeMyrH`;8$w`{NI=Ugn7`#uJ#utucz%cquX%F~ToS361z z9Cim;`090b=#_LlR&J$DRGy;4moc(=vk|X541}(K74QZ~uGe4+*P|CM1>4R_KQ9zC zif~aUd5RW2YFpo}r3inUa_3^=^vBn?d#A6iH)vn==2b6yE1WP zBz6vzg==J_zWF;80G$u=Oy`#v59bwL%J(7vn;6sk!;Lbz#+sf>?e%X{3J1lqOv4){vs0v>)yKpqL1a&! zb+y; zjeqa+?4cqh?~OD`cps}}SgJV&e_{3|!1GK#YO)yA8W(&zTIxOxS=5kh4D2v4qcyRB z#m}VMC8~a#nU8kMig#BNNcCr4ZeIDJZ7{uc>0gXyrnn&Z4%5ir5{+~-7(Se%5Rr%H z8EaE|dToc5mH7?HmL*&3M}aw2Px9A3#;s2UymfC9?W7M0+o4yg8+~59%_IwtjWKH6 zqwXYp-|?-ryyK|=sC7_RNt`p`)mGg=`vUYXDUAhYz~Zs5pSAPndh%wSuqm}%#p|=v z;g2RcLR)BYV__BAm}{9EdwE6y&Rdd9w}#+s&E-QJwV^-S`9yralrG$?^InW2is=z$ zVR>=yN)s|nclehGkn}XNrvcF4^Pk!S%Zw{Lf97u${`q5|bdz)2ls}?y{ch88Yz~sK z!MD$aPN#%Dal|Bsg-6XiPMDTu7x$wLvmDy4RgSdtZgo+CO7UijnEdT1sj6@d{OqVX zUDZ)#*&%kV^)A+xingH!P8=s3zzvZzZpJ~=A?mR|JX8Ji{q_Kq6Xk4Vdky=o+0!me+mExm0g zEYzT{uuXa5`TXNWt?m&c)z*sfD%aJ$kc6u6)2`zQUxz*D*+<%o@+eN(s%(#E!1Rtk zeF|(>u*`HDW0ipl+``hJnmR`(Od44!H%%gE7kP2J=oeOPm>Te8ZEg`9XooU`0FCS> zRtWu&h6TLos>sKGV1L_te4N%eFVUAb*_w6i>k}y!A}F8gSz*{-Uu_LTaFQ&CSIP8P z!@dRJF>%ErN!mr4gem6<7kW)j{jx$5HE5VI@I+nt_=BV$M`mx4otw=c@(yA!K;arPm4#yIplOnF( zS;(!3<=%GMIW`+)XWpO@F%5bjANHv5VJtc#_8#r>M6wzxWbqCPTi`VQ68f#k$M#x; zi2NrJC5BYqBH!@D&I+2--4E;!uiTq4yG3xe8+P^_5ssE}AZu3?Ua_b_o=uh_f9F9QfIYBXq&tKNaMbvcau;m?yQ{0EtPamAgxh4Ws3JGWms-d;U=5+13g|1FV7U z?F7UO622V2uSEWA+garP%h(gA-{FtAlA`)QBH@cX%7}gf%Cvu2V-;Kx>71y=b#_vg z13Vr>=FO4wexB~BXFv#paex$Xk=676o0yfUbe(m#*PIV?#QD69hE$ zL-y=S&#Tp2)_2l9^_xz9f)2U_&oOfsN~8e43P8Lk?gSjN7Xgxt|BNpDhwLj3`mzmi|rRc6FVQU7XokgaDn??akk@pzD zkW{Rn?Zp!Cgjzp;G()iV-)#Oz8v-SLr5k}f`7OACpxi(I!e5(c78*(8 zzPO4zhX>#P*V+I*0{)e55Qr$QyI^^E=%4C0f7Ee)e`n*VkAFdD^z_YFmcQ5R_f7r{ zf8XdW&AoNqfR<(dhFIl4SC4+*OsFg30a@=p>8B0ttU!jEnW2iAk^Ic-+b3erPsBF4 zaT??X7~}@-hJl<0-INF2w17qxe>B?p)gtq%zCNuEs7Ll?x+XuR4p0dAH>Cjn^&tK_ zK>wZ>Ha1}XBX}R$Obm#;&tBBQSEmp;85k~_i&W<~{`Jw=j{=T^fM!1AK;{KA-I)jJ zSyh1p_pjJCu+-plz|InL5RJw@D;?vP!OAXO1SA(#eLE4m|404ej|$U2&^rzx&you+ z7w*jP#J2!yS+bm-r8!*8?xtf=nxdR*?>JJLE1-O;%lgAttH7JDR-};IbfG#pfVGv3 zF}f2Qx9A8aXgx4I`8gMCT?rgHMyr9p+zzC-}i zI`xzvDz#eb@~5jToA8iHJ&KxW*V@ScsvlTmzn~FJ+$|NRsZhOzKwQ)=L0z@~(48kQmxC-pp&t`6S1GIxE=w6Eu9ASe-`$zG8it_vu`- zc_-b$>6>t^op>iqM#2T-ZT!P@6ZHVfn~9x{^>Lc1zEzX#y06-EV5#<;=;;gIHd$XF zU#vS!{?0lR>GuoX-03;~HcYtLC~HNKfF2TG<33$H=gvtI+v*xWy~a$~fS`{G;t;#y zwNG_9{;NE3#;mXA7m(fZj=O|XZ?Tc5qP6ggeK!*lNyqr=mffbWm&VI5D^5|!C^t_pAY zv)X$F+-zp`PFZTl5{)!^@;6Fbk_>n%)nEtHU1WzYlVGliu}?f8QsLL0_|$zhvz5rq zOWaUsmISX%AB`lKo9yH)%IiSDW|ILULtWGm2&CvV{}C0oa$je@I5)CZ5s#H^NF zBFLBTSW%{BCV~oBuIu^ih0vz~OUG7H5(f*$SaYj|Lm6vaBmw zUU8CY&T6+LO{wZ~CWaWIc4|WRJ&0w!y^Kc}>tbggRrL6Jcu~^0$+f}a#PeUh-aij4 zDeO*kVnh@H4oaeL8lM0VA9%cbqwDix2J!lotUv3RhlZoMz+>`~(b&Qk*fBme`?nbx zA|s)j9N@4Oj$x zV@_Ki4G`PO7Wm~S4AII>);T}sZt}0y*G6&Ya(EF(bX@N}Xx$hvMAdXehajbD(??pH z*+!1)O5$Y;Y~5~chiTyoDN9{N$63&!Id`F4?f$f1pjJ|{T+RfheZ|u=b0(eF#>!9G zb|mRNX82;%zB0T~E*D^YLpd0Gfsa;(FM^pMXWg%>xIIF5ck*h+veNxbb)X_s3`yMk zKzzJ#m}%sPC{X6dB-R-G&$OKbopRzAG)Mb3v*+TRRU<&YPWB-|7-F4h=yA7z%&Ye=Q$Q#LuDAMJw*|=%%yH4r&@e-1Vtam+5qjjf zMaxQ~%3)+3JZx`GNc%K1f$v8jxu*LLs-aDFgJP3@u`zjyH1sIY^wvkxYPVNBd?ZGoTL*qM zCjQc>1jH*CV~O`fJAEnq`ln3e!Tj4Z4igjKAMxw-e(xck8BsR4m#aoV=a#?{cA|dZ z95J`Aa^dk4^ps!wCrHf(t_H_r3@tFlSI;$;)<|*KGqm|+>$hFHvpHyZO_8!p|IV;M zG@p55*v_}zX-C_W+qiDexv2A=P>|JfF4RVwd30)n8N8!gnMlW*Z+{MvXI$R`@~A!f z{Oruoe1-Jp0%FMm#Q6;^ZtP{Rh&;dkQ2mh9(&gU+rxNtg0L~CB+7jW@U32skgttmX zI>it0wJUsz)~r1T+CAl5CaA<=`e>Q9W`^%a16+&XAU?6_RBo6qM53Zp$<=Orsm`&? z;rL6L-c{D#c0LQQKBi?dyA-zKc;6~aB?8`%kBo7yIR#wP9_*L^>=q&jn_}TMWnJ5A zm$-;||0@|_(3S!PpT}G@6X5j~`fPODYFK=$NmP3zD)r@UQ|B+UN*vR*Z@c+wD7L4_ zQu|&#xG8#vIpDFztllp9u-PYFx_QI>DJ9Yo2%GHrlPXkj)xy>sfj3a#m?+*zCqo-# z2!>@U_C23?S<-0XP7kxt-;lYTj#Se7erjYueBRQ{^187upk(;+{sw?!nM$59dkrZ) za6M3Q=AHhW%u__E=Ta9qZ#OeqE%q+Il&ReS{T4}4JL)Xf5pAT2HN#~EGm;QeY<2Cr zbejlzIMXUEaEmjT3o{%0rQ6o^==Uto3&{z0?TYSbu5%R3=<1j>?who8j9T4ErmV+( zU#!9=hk_i4K?oZMSGo!{gk=;1rKNYGO*k@DbjxN;``F)i@-%d|=RZ}C+r(4%jumAM z6%xo4HrvPfipLa!w-1k~jK*JQx`t^75G-RARm& zuV5Pijd2 z-V-H#kQaNLuAw0o4p0N~r-l&P9cKbzJc-#h^@%`0v)J%-cz!w?ABlAWZh`qw?TVQl zPy2hH0y57qwDWcEZi{ksLU-FBS-wwKQMb%z}vl5EM6zn>3{mJ{4zwmE;)>@VpP;F#n;XWnoS zmZ9_$^j5tzuh$4h)HB$e`xi+B$9Nj@QMPEGKleu7TyYpKcb!0Y&5 z<1dlUTjt>|X1#JiLOXc3E{!=FOVwOdunt{J^@dkMf|_RZHU%kE1X?-g(v^sVWD~yP z@w{kxg(Q~f%qA}$p=4ui9s>+=51J8z85$K~*y(mS<56O?=iJorI=MI4sA(i^JDt)! z(Pv0-Wll7^F_fBd>->jt&S`TS8nEpmrNpYK>4u{Yy9gQvTsa~x6nX|iPiy64V4l8yef4pqW5XV80_?+!#)0L zX`^{^5f@}5*J2~}*$CRIPUBrDA8SMG4W`ZgRsBaf4@E_LV|Lc^nT~)G zF>z+yNaOt_&Fkh`2an%8LR6~~Z?7&IC7N<`*pkf5S5S91DTlkxc$IA^OiCc;Y5@UK zG6GYtP!0`102uiz(Ezl^von0B5{}pSDM$lmzVI<4R}z_sBgSs3e$Ik?haILEat4js z!81330M|nA8{Gv-7*g9F*$6#$B(|q|hoeOvVgKPLNaA+R2uC82oCe*EX18sqN!(7B z+I2}m7^i4oyad#7U>b!p>2+MKe@?z5vDO8=UV0Qrmw6J*|GGXmEeW;z`JWUU8I9p0 z`w5DGqMUyPR*wXA`kZEDiEpCQcT4`dcFOonaST)% zm{%QkHQky9Zl2vq7PA?~IeaW)-;;?q^r$DBGmu$Hlrtg)_Og4?h2y6uiU$x2hpqif)?c}ysZ_yWNgIXqUz5(UM7Xxd}#{NALlTJ zbJmPiF*wV8wR;#~$wXpq``(l#}aJcVs{D2J_&J2u+bvF-{iiH!_xyOm|6S+-=c6_mUDrTkR ze$Cfbl__BW`kpT3hZnI+L~l_wmzz{`;gIdm*at{hEBA16$f9kQdq3HLUN#H!!)vzJlK z9~yy)e%hdKE`e_xBP~9a%4+)vdwIsU(nbj%kW=Za5Y(C_K6iS?*9i z%c({l0f+F*4XnL)8WJeAtZ6)#JcC!6cHVAxsR5CSGw@vbn17|%8@_-S2(v4YhnE;@ zCB@z2e-_(&yxUsJ-{nI26J(PpD6Xu9yW7G}bj5Ml)xHNH2gCZi&9C=Pv?EXv>&Zhq zx2w-N>MHOVOj$HTEw33sSZoRax-N4XHU%(8;xUE`_7{W&Fp0;&H15W6PI(9P;`p+& zv7Oi%_j36yQP88bLiJKgkn|Et^#U8aa6EO0V79c8$k?Sn3)&ZQu8X z&u$>*)|(TTxKw)QRs=C5M6o$|_sAoSSYM$sE48PtF}z=-(a=h$Y=ELd_(#v%nMc0( z123C3>BL4V5J#6@yTX6DcXO^WGzpCFt`bgM6W|ZMbDOcGMw(mO!)YEp_vVd>*srS> zx4)TSX1WiR-InO0S|XpEXJRzVB5m(fa@*+HyY6QydO1vs4dJu6YNH-d8MDSW{Y}HL zz4D&AkfgQJ9(f(b>XoHcJjO4M>ErSYu)ApDgUu9xPvc&qwg1Q|eYFce_qlstJ+(sG zvw*e~%>ADrMTsE5vbYb7l>|Qs?O1RaPiKAd(JU3p{n^QJ7My18Fy6cMX~8nzsz5i0 zM72kW!;2FRO{-(9Zr+{!iWN7T?gX;_JYByQ$$!o>|1tGR3Q}6SXm9xr&(rH^Cdq1( zVl7~QTGI|E1#=c;dK;>b2(o>f+$nwEH8AyqK+L5_de8zu@^YQ7Wrp{n>mPJUb_mD;%yr zs&_|Vwj+|Qt>!joAI|&7kXzQb3@d*Pm~heDXr(=uqm@_~6~<2R9gu7#;KzI^izI%S zS^LpM97Ri`Y0rKxqjmQ*SY)!@?#1<{2f&p_QBlu0TPz>;3^<85dPggXxeS|!j~JCn zC6<)ZN=q2r1QSHt*@=GW;Xac#f6)@<77?i2Dasky707I11n{W*=@4P0;nRS5FuE~fc_y=qL2I909`Xm0fh%oA?buZ5^l>jm3FQAD-!w|ugrAABudyi8q}sFl0Pnkw0yX587LpGT0Sj&8JX%p?>F{(M#J98%KPp2 zo8=wm>U$CITSV4)R9Tq1N_AC9eA}6*zQY)ERIgV^ySmIAY%Uu)Foi z#P<7e*3)xm5|xmRZb*cZm~h8RFwfe6gyiSL4hXda0|>Xpx8USIjF3}va~9RvFRaF@ zXcrSVGJIkdOk*f)j`UJp_LpuM7HQ@|YRKuF_*oMM4eZCFSCy15!?ObhgAkWz+Ne+V zyNrB3C!tt^3kmeI8aMb>ifNyR-*R|I)aELoZ>uvl-`up5=YdNlk^d0`Z;-TZ*zVB| zoyRQ6-UHLVG;yaTVV`3?A4#%1n^tjn*4BY7HXgK6;*!S#Kv7nn8u0YlP-u(ZHfO-X z_s9_5xv`kIl)?Kgc{TRt?tvN` zHJ@9YNs3B4t(duWyWxw?8pA{;n(9%@>R|NLBJ^Zf+1gr$vBR_jPUQPWqU-eIdkwF- zKLxEQl({>fqH2I5u^N^Nws&^=6O?*d<^hZt_AlHnc!sLLG z#|h~eM}amqpV=>qCw*uvj{Uajr@!*-G3GU~l>OA*_ev3<=rbF{g2_FQkkpmGV$sr( zf3=PB`j@$wQ#EVGe?-zw41i(3C7o<&oihjSIxQNii&?`%V062>Ds`FK$apjwaJb-R z;cs`LkUSlT862rKJ#h?6aw&XKx1X4cbX=p`N%Q>Jz3qZk=pUQyDnDFPu>K3Ey(bP} z*$>Yn86xjD4mA#6@#~80%0${D?f>Vm|2YPKa~*UoXru&+OWpc@bvjb!b{5`v+C6e$ TIEC2%stW#lUjKRpaq@owz@h6i literal 0 HcmV?d00001 diff --git a/cmdb-ui/public/cmdb-preference.jpeg b/cmdb-ui/public/cmdb-preference.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..3efefb1f77cd1afccdd334836f456ad307c77ab3 GIT binary patch literal 63073 zcmeFZ2Ut`~vnaZTA!o@MB(kWx~e)>t!`1@PzwODrmBW20D%C2I`{{m z76AoVu&WaQXln!9003YEkSJFG9fUv>fCh{Jfc6UQcM3+@E9h?+^7bkdwF5}%x_J3} z`MG#`Gl}pE0+LD^+UQpl!0-!Z`vnq@(Z@|D0#)c6_i!?{Pn051OSG&S%E~sn`Z}r_ zH(|e+q9wES_P&Eg3;-UU{=WKZN=&9^=1f@2AU9|L9v}?x+S>bhE9&aryrTL0_ZR)Y z9!KN9cn3!Lu4w(0{9gmEIXL>+gTm{A=ync%_8uTy0|4k$_TIk!0Dv(Frn3b3dtbqO zAWY^9G6(>eSMriM{{d57!FGSZyuWY^^_4*!1yH^Cwzj^`06=)fKU1K+Gf0OJAWQpS(fA-lcR!^Q!D)?>oQx zI*1R=cD$o@l@96|`pz%V;CI;(e_z9^bWn%TB{y45T@b#i>&V+*_ewt?Z|G>iO+Xn? z0hoXQFxmlLfE(cYdAoiaeETCu6|e<-0cXGw;QKS>cL|eUIiBFt00;qg08bFd@2_%7 zzj7UcKrsE{uhc)v@&Qi2asz*ra0gbw8a&Wx(B;sj(QkrJ1uzPuOQPTSU5<(9H=md= zOchLZOjS&--zk7S$n_mC`U0;1Cuv$>o+BuoFZlHQEyKU)VXR^dV=Q5O#aO_Y1dM_2 zzo`5vsg3Ic-`^bkMOhnI0IB_<6-Q8Gp1{U$9CUV&YcX^sbXkypkau(nbQ*vUT@;i= z5nUdXO$Sm#y`^uxe3Mo<{)mK-tUtuCJ@Ji$9YhI2$`MX?WW6^D+qw3f%yJ ztGWFO2LKNAf6dttilKj{**^jRi9GIVbB1&F{=K@BhfEC44ck1!w(NCOH04A2C007JkGum&~m0(gKt2LWNgec&+= z3p@p$0hvG!kO#a0%77}M9%unNfL>q#_yT+dron!(0&D?$z!7i`fk3bz1Q1dPHG~nu z2H}ASLnI+`5E$epL?2=XxealKctQdoVUUNASV%G?6Y?5T45@@PLOLM*kYUIqWD&9f z*@v8=LDBHh$k6D~*wF;gB+(Snw9pLEtk9g%e9%JBBGD4iGSG6--lEl^b)XHPeMMV9 z+d?~p0#H0C1@t&hU!4gp-xa=XaqC{ng-2T;K)0c%=$PoF=uGH* zVBb_nH$t~Z_d$<9k3-Kye}i6!-iC65zNr!*s(8#f-yziCKZ!jya6EjCqKKg+-0UgC&clgJp~5 zkM$VqIo4aOHmnh>6|56%JZwg6VQf`wb8JuS2iR%YCD^UlBiL)$=QzYTY&cRlIyeqE zcX1MN@^PAQhHzGJ&T+5da^TA18sfU)-p9?rEywM_oxwf8!^307yMd>N=Zbd^F9Yu# z-Uqxzyi_W{C50F`~w040(Jrg0&@a?f&_wMf-ZtNf)hegLViLG zLI*-PVHRN>;RxXmA{-(%B1Ix=q7b4qqH3ZcqHSUvVs>I>Vq4+};w<7u;tArzYoynN zuIXI!xE6P<3K=FD2bl($ z8(Az_8QEvDJ#rFqQF3GQVDc>T_v8x{PzrVm4T?Jyi4;{7;}mC<^puK}j+D`q<&-0o z$5gab3RI3%F;o>)U#ZThnW$mZ?$k-t_0+R8=rr6kdNe^a*)%;g+q7h~(zN!pF|<{* zQ*>x_+;sYMp>%n4gLH@V4D@RB-t^DuyXdzWC>RtN+!#_BS{XJNNg3rBT^Umu+ZZ>Q z$e9$G?l5IAbu;ZdH5>z}WmGjlK-F+X6gV4h{cWsziYVo7D`WZ7e7WYuO3 zV=ZN!V#8sRWOHFlXX|4-X6IlxVUJ?3XJ6-_;?Up-;V9*p;UwUc=k(#s z>-m2OunL$9Bnk8hTndT_-Vw|foE9Px(iD0i)FiYo%q?s$oFzOaLLj0l0vBlzL5T8* zI*MkCeiI`V(-w;o>lC{Xmk{?AFBjjCV3oKn@j_xkl1x%pGEVZt4U8K~H{dr~Zk$Sq zOZiJxN$pDWNxMszNUzIq$T-U6%Ph+>%i7AmmR*ozlDjSUN^U{^y1cD?uKbb$i-Lnf zp~9LXm!g~ETg4wrf=a$hwMxgzQp(}V?J7_eHI*2Z&oC005iAonr^>AAtXitNrzWNr zs@ATKp{}K#q&}fRuVJrItg)vlp&72(t%a{;pp~h$bd&q0@69G{G;K}o6z!Q?Y_~jb z)$0H{8agRDv$`C*KDy0%n0mT;S$eDbLi%C)eFmfkHU=dIM}|szhYd$r$7IJfCt0Ut zr*&sp=M?7+7kQU7mu**N*GyN0o4Q+$+p)WjdyzZpj>(-04{VRy9*v$Pp6;IAUJPEr zUc=rz-jBT(e58Dy`Rw^>`4;*?{H**M{K>#=&R_s%z@vc0K)JxIz>^^3pz7dj!Jff` zce(FI-(3q)4Jimk548{N47(n7KWs5vG5mD|B*HGD6V3vUgsU?PZLec zNykkONMFdfnbGi^_4(81$V`{auUSf26))&sM87zG>F{zSTOqqVhdw7Z=j@g1t8cH> zUf1Qa=ceUh<^|@h<{Rht6-X8o7t$2Q7G4y27A?Hdf74woQCwU?SCUwYRvJ*c@z(O~ zmok;IhH}30*A)~MvG0I)0q-^|Z&!|2X;pPrOIDZHu+_Y%C9RFAgVf!v+pBk}UuZCE z7;e;T>}-;5s%_?PE^4{nlJ%baePSzaYh){`Eu`(R-Mf9e!?|O*)24H}%d~5(Td(_b zk5_7hA%h1G!4rP zw~ok-6* zc<0*AiyxdnYIYTN2lq_(RuH}j)PCFn^+C~3(Vv}%x`%T|9!KZLF(=d~Z%!po`_4?x z*3N^FSjdbEu8XEit;-pd2MXnF>udXKF8~FfXilJoyI%wV1ZDt0`UL=R3IDLYeqn%H zWeA7^!p0DO$QD{8xS|fBKgLkSgklb0Wng>a+{ER=!@}FfA0enGEFvl-uDI4f(n&f% z_J#Z##XRLY)fP2^=8X1&9*qHu5toVJIteog3k53`8znmx2OTFp7ZW!V4>K<-A3HyX z0I#5+kchCjh?J6`9>?{CS2R?mZ=U*S4@vXpVolb5Zef93^747MK{ASC$^xrWVPb6=CWbE&1g$w zM{ZB*K;lU1MBz;9!tBcHCgHAn$JoQwGt4X5JKyJ(Z-!rze_TLxU`$X#aK_y?A+4d) z;Xnj0+~(f%`_m7ZBfTDVL}5N*i58AgiZzIHiVsOhN__LQJ!vZWF!kCqzBJ8rr;LZs zvojmBMqYe>d6bc&?T*wm3dWY>MJ2wXo$0lb#S21@Ck1MYhA0Iyf|E|EWV2x0^ zaF~d_sGgXTxUj@^NfJrajUQ4o()}`Zvbl0`@<9r>6*ZNFm1$JaR5oCrRo|&4srzXd zYKm)7YMtMl*Y3JiqLZW>s^_F{V4!FyWOUt_)C9}q%yi3a#(dD?y=8^fE9(@SsM}$- zzILwmwhrcwhE96Uw_LPbwcOO*rSI^2T=yjR!t+M+M*5uip88z`U<8r`u>?!qH4O0! zO$%!YUxnk{W4zDzK=$FSNV`WtkK>~XpR`3!#T>_x#S16sC3-%MPby9Rkn%khl}3{; zmZAIHJ@Zjk&WnbZU$WP8E?<-7a^=b9>lWA-1{6iT$pGiM!P4C_l5&v>gLgiaiB+Z5 z-8D0{`}LR&)Q#LtQq7tzrth6v{oCN}_d6bTKI(eh9o6%sH>NM{LwtYy$M}Kx!MIPc zpQDGOzC;e+9|<1~9P|0=HSRs(|1EU#(NxNG?o9P;@7(14&LXfxvdsKlXhm*SW6f^; z)yB@2*mmen>yOJlX++?D`N8)?sw1sq_(}EY+BqFk|03qH`_J}=p(#QIpg+(%FrqLG zusE?0*o`=karN=&@aFLI2s{XH5TOxu5Jz6qBq1XCLi&_Uhn$G~6GaTADiwsPf!dRX zh2|S=ES((P4t*AbI>S%KY$kQ4AJRo?r2Y<%DN;{=ohehL-|SqKvdw~2U*UKbq^dmt_>z9^9>DJ!{iBTGs{>QFjQ zMo;Eawp7kc9!tJf!CsL>v0ceqnMwJJ$^)1vY)v&&O$Xd}G;8>1@@Rh7%D!o?O`$z{ zD_KWhmsEFL@43FU0jt5LVWm-sG0cR>WXiPA%+FlO0^efXGRMlrTG;yBrssB&t)(58 z-I0B_LyDuVlZZ3A^SDciE8NY{o%asLoq3NY&kV01ZxbIWUj{#Pzit1o0Ud!ALD|8H zckhP;g}R41gj+?J!VT}~-`9Jf_fS95@R8YLt0>1O?$LfR@YpAD$?@3<#ff!KyOM^J z=Td$=Lr>#Mx6F9@yeISg1^-LC>}NS2Umag+2{hVz)60 zFm^D-G4Er3#-hjaz-q%L#dgK+z@fnjz!||6!A-|S;@RVU!oPw4hJcD7ju4G7l<=4+ zfar)g7cw_;Eb;;h7{w~(6Dl66FVy}t)HJQM4s>{QRrKZzP=+!_ z3(z7MzMjae!*Y#flr^2rg8e%CD#u$+KQ1Y52zNhE60Zf=JNNiU1X=_Og_4CML|jD; z#H7R-B_I+Dk}WqeKy6^0e7m1>mhRhnR}s$FXR>O&ginsZuf zHxb(BI@r1tdhGg=1~(1ujlzsGOj=FX%}Fg3ExoOBt-s#JwNnGzM8!#6n8vOJwBGe?TH$oQPdSC0oa%A*l*(X5saO}JI7m3M9 z>M79Fp0uP4$4uoHyxGjJ*m6blZx#By$toEr11cmcZ&jPsy3~g?K5MReKhk#8$;K`^$IpWoLwv(lqX}QzzmZPa&y>w=FVZbbt|+VtZ4howY$yB>*zG{5?|1(cKFmBi zJJCBWI71+%F5s8#zvhoW+Mfh$e=a}*^xBw!UbYAz6(|L|fjQs=^b-g|Zh;G!pd1oP$24hvI~a_w_} zDKg?B}kMJL2QiZ@HVmCU>mCFLt^A)_qIEk`VOC_kmps#u{^ zsa&m64{KI!Q|ng$sPRQ}LTmo!nl|Frxh}RIg+7PD4MS}s2jg&)Ow&fQDf0_UW-Co= zf16jghwLEs;trmU#ZId(?5=KZmF{OAYMyCc>pn8R;eKra=z%wb(t}q+ZiFU;twq4# zZ|)O5xchJooKLB|5I%3na(GFa-TNv$S3GaOpt2~S zSf&*7?bq^xcVShQHR5%I^~;Sl%@5z-YNKjj>@4o~?Ung})jvK^{OR71<*?i++t+L3 zAHEq)u1tr_lFd~u7%n20->jIe5v})cKH1j#LA*PGcy-`*D1MA~GIW-ObiNe%v;Cm} zCg^*;ngKXLUy~|e3i_5Ffxe_>Ufo!k_otu1@1uUS^3#y+4VV`Iqz{j=dK0q?md2D0bxNC zp$Or8ks;A@aV`ln$>bX&(quAbviWkm3bKmvO7kiruvpbabs3E`&HbCY+GRTUx_9(G z8gLuN8f}_rnwFU3Sh!mDS+m^12%m%qnt zb!uzvAnA1Ms_Q}T)$Pmru>6s0z;&?j)8Y`#7ro&}BQ>K-Uvb9;C-lGhP9{thPj}6H zon4(n%p(^eOIXX8-!WH!m9y2IwYl|A8x5PeTTiw|*WC?=>Kz_stKu4)%Yx z96mTwImSHhK7pS~pCZl*&drgy$hr&rOM=TPl-X7L`#FgSU#%Vh1YZesKhB|02kZcV zl?(tENhs8LE(&##2O1kQ0MLHtkMBBH$e5u2{}t^OH2m)H>gV4AsvWq74S9=^28A#K zXxAXnYYPd7=a!Ts6wDgSUnYnrS z1z@ukmsC~P)YjEEG&Xg1b@%l4edzx7@^nDF|G??k|^q7+4_(&3*W~kQ%ZVW z*@43%qQ6IO=R1r`!794QhPV>#mt_An!5;iiN%ogu|B`DObc>_?3Q#mOC z112`;QN_f>#>M^>aQ_VWzXIV^Ao?qyKq3&320A)A7Wj`C4+oFc<07&0{?T70GsHCehg>DhoKR)7|vJ!#Q$6eM5r(Srt}J@ z`imDRz=gJqEI46$u_)ScWD>p9w+XfwoyQWm*U3xPCmqFbcw~bl8CbM=B*%n|7?aUh z+LAoPmLV?`FK|UKeJ?lVsJ@i?8eJk4uWIe-IhAis@WV^o*XP<=2&t_eYxZ%-QJ|iWU2w2pm|*!H>GukG(&*wH*?6+7+Sw!Xn)K3YX~Cad4N|rA z&vpuTrcgj&Q3nIni48)acPhNMVqpl!?d&2xFJrY~beo?)H@fo&_b!QWF|J|<({lE+ z!SyDF+9hq{X{Eg%IX)$BCh=8x7N*&ESHhg#)Tns-psz67as^H}a(asc7$3l|T?&P% zxCc8;$OIN5%3dc-&9aT9=+xm~1B{GZ6`gL_4@irU^nH%NjTk(W*xouf4|6&hUW&D; z4i;E^pL$l9FfCqeWiFAyE1NOh$yVQ|KiK+p;G&fC>r1Jm+Gi7GDJ$pSlcmzkhBU>v zr00yM3#Qr@D^?>ohxQVe-q%NaAgTQp-g^oVTXlL~AI-VdXwiS$YBGsQ=rr!3z2k%B z6}iV{TR9kV!YB6HS!M{1d$kuFI`y;#jm;xJ79L@hYOuP!3fG1!M~K+L7m96&5^tW6 zEGM43hue^uqJR$dOW9zaqs(#SwWZUYFs+4eGTK4;S!y+p@t)inM=TiNzk9O3p3#@p zATFrR;hjkx@AmnHtD?1@SHy@<{epHF8;xduiN+KkUvrNp3Wz@CTC~A9>FYC(%+z@x zN{a%B=V8>(7e>n*o1fX~lQpUvWpMIBSnXK}m+EBn_KKDgAMmCdAc`K=zC`=Wju9-p6E!Y8xRo!SE7~NBGx*wTg z0JDg4o0o#={YUMzLFQOHY>OyhGIp6eVvOb}9U=R}KP!LKqlT6(*|g*S*zTm4TUqTS zogMRVq(I9amTVXbNV`@{_IBxI*2I!)!G>p@w2MQG5&aFV9rL4oZHeQYL2@!Z8}+a~ zJs27ApG94lSECAW-&8$Vgi6Fy@}-c9-iqxq{R1r&5J}V%lw+T%9(L{_F!;cRFJ?Cy z+0jT#ZIGad`M#>v(dG%9l%`+|ok&9%`>d#m)CUy(l!Id6C4+y1;MW ziJ?ULRblJl2T{nDza9)A``;m&WQ6I~eC5CM(|KfZOoT8GDm(sMGGS>@T=(V|Nuimp zv}w^>gv9AU6@El0QW-%%7hSCF!}x@M(Op_Y42LD%yg@H`|9$5phZLL9Nf!O$cjnXe zl8h2(Rgkj^SXku}BdI$I*n1~Kz3_=tVN8rbUgcei0oD$)e7%)2onXFFXt9LmQ#F6b zq{)P}DG8BMK1U>DSDme25#&$ZwFJF7eRWokESlK1jn>G;<@x3W4f<%nL ztlJ|l=GZHersxsNN$gS?R+o8eL4d~*4-Qk^Sa|^6i&H0?8Xdg(>X-QgG=i$_+#+MT zSR?)>9Cw%Jp{|!qv7IKD%%dK){U5Qn*_t2m&-5Robq=yhH{0IbvCKySWb%uQ2%){T zMA7J1uG?!*oZ)E;Ay@d##|Bq4JU0P^p9`^N5X7cLK4hxsn&6 zPp7#{vHQ;p@@L~HVDfz7*H8e4A%da)Rm8^>^YvX`pRJHj@$t(lJ@Da}0U?41!fz4G zNnh47&w`Ge_DmlB6qrN-ivC5pg7b1l2kP6 z^+URy-9d-jNrsueW9TE*4I{5nH)IwHckRO6H+m z|8ADsnn6YPX(fKImD(xMEu}V9TyPBX(}?_F9w|UzCE(DU)p1btc&E1ai}P6P#5Knk zv$2vZT4A2SHw%ouRaK>QHei&lYXY3PF#u}#@B13)CJOjAf0UMWWO>p-l)%58KlYPP zb@u0l@f3ZlpZSN6mk!cTY=k9Xx2f)R`FdJSN6ndBVuDR(;C?BdwM^gF&C?vty&Bk( z)1}0d@k&H!K=obOnI>pTYP z1BnDvR##(!T(`cbh90SHo3t}dw{_52Gx^TL+_9-=}b zTuzDXT0ExDf+RlgtP0-TR?;v=YURc>%5teCiKh$jXq7aF9B%%w6fuvn9MNc=H>w`p zuOfSqtOM^%j^P=X>FxZ#GZ`MjFf*a&si2v%&+_wL1@SoPQEZC-du{44_9=TU&N@n^ zlR=LG`Uh4y{1*+g2_i3itmk1s*zColb7d6pMZUf5c=a5~GmgY?UFMNxaB1-&Ou;yP z8N;7YRo0eL>usuia5t;onaHYq4zyW!1(UE(O4#~+ND~Mo&?&RR+j?3#`J(-%qDK%PaTAxD_KQ%UqN6Ppd zJYuJ0r8o_yJL(-nQZEk>QO?Yq2w%=kDN=Ly3o*tWZj9UgWEOAPf(^cH6OGV<`F#Hy){3Lo20s18GRLHuk>QXNj!3K>3h zK+vu8y_~)_9Hi|MoG`dZZOoqsPs`<|-n32r9A!&Gn%aTq&jB%* zyLh_O>23Qblb1$Qh7p1HpZ&FFgcCrh65!2F?4ncY}(9qjcNqCw4q) zcGS%4CRla0-+XU#EnAC$v+dq|9Y>vri-u`=zajUT2Z6ytP_*aHArYZ#tBAV*?z|g( zs`JCQxAiz8vv~cs=NhR_vjsELVeghD4{+m))~7h3{a%+8v9ki!qwty|xW`sq=J+m$ zoXMm^ZAyPHqB&@?vN_K4yoj#6aj(JMn!Oppc$AauS^m?af~SAB{+z)i-E(JI&J*d( z$S?AE!@3&m_q;iH$|tG^oo!PN;T4ur6EDAC%xv20?Fa6z6{R=J?|59&9G3iH!V{rJ zz$GpB05o^9V^3pbPT*^~mv(LDYgR*_?=sq%a|_5Zp02lL3u32>@9kKln z1rh>gZv2D&?@IhrCj_vyE)*b3c|dk|4+RXtkUhBW4Zd=H$09HXi<5_n&D6DHWrd8} zH{+4<7MEY%p@5u>w%uA3K!ePBmXkZv2s8Y*RQVcS`L$Jn^Bs6^tk6vTf08TM=owRd z@!A#z$P2;e-7iJqE~fCIL7QXH+YwJ;>pM$saIVyK8DWP4S|^Y$|5gic=SmZI(b1zQ zB(etugjbvl|DBN8qXB;-ogF-))6>|?a~nk7-|1B2rLC9bOi?f%98g{ywJodtor)7B z->}i&L`eJ>k=#Lki`^&n+=S8!Vn>Q{WA9^4=Kjpv9u6`5 zsptK-68z{_2#M9O4TE7=`$G^x52U~y!r4H4Me>S*4vZ3w2t-f=DHN~gF8ou)KZ^RN zNBxiE0*)H{Uo+snqHGZBZHm_2QYHyVDHMU%4kf`1cG zOebf%LZKSr_N3CbX(IR+xKuoB*!+W)b=r2l$= z_YE1B9ophMZ@~yoq|=Elg7)UHC@r6s`LL&qG~9EmB-WJGL-|-w;kf>q8tbj<&PvYM zH9K8Eonxg_H*Egs;JiHN@c7R2TJ~o=vO6fCZu$W9Yi@_z6qtrlR_`Sw7Pz@DW`&b> z`pH&L&EJ(8NNX8TnV^Xbe*7^sDn733&Kp6rcYw)YE8d>=Y}*d8*e9idu8{DAJo>RZ zajA#`TfS!2VX+!{2ekve@5bH>G73V*w=+&%Gb?r^#T+a5tYepTuC3FE+y_r`2cT~5Q!h+g@{>mYp$@_(EBtUDrm450XT^6szhA%HEH^VE!?VbW2rR|3 z+F-vNAOF0jTOVKZod5OZXEhDG=D7BcNi&qj$?Ep8w(S^dHXn58rj+fM`P`-^cN`+E z28Xk_l0!Y>dQxGma2`%{K#ifZb@L0{)$5VDT6E$Q+t#mq&Y4!61Ac@lMX_0t4{jK5 zINLOme6aKsM*%l384ma0u}H1rldkTw^yu2y^p@r^c2@=yK!h;%DFDRRJ5c`vSTe%>3_dnQbfw-IgDBxtT z4h58Jpnz8~E2YJwC}6pB`m&MZ@&Qlw>wGQnOplZ9e|D7Vf73jOf$r6IH|Oj-3OK_l zH*b3R$Gnz;0@m3Z-A0}ZgY#MqD{B0&dF{VpW&cMDUB2o+--MSJ{kix4o^ytM#f$u< z3}4$;GJKu6agzqT%s^)Bh~Z>mZa$dE`z1fYA)PIiwCm{&xvxb=yzsI5i-2?#pehD1 zP98BH>`-3pwJoY0g-0RJVJHCnZf?}XiB|NtcfE@o@MDAAFnk{GlH4-}DE`|!8Ql3B ze5l6exDy3DvdF#1{rC63(KlXyg`4wFbpj{<9c6M(=BgeGsiNh65X1r;$@b(5D~z>DB?{1=KODEYp!(`r0$vR$_Bz`VxQufHz>NlYo`(GN_&hLTI3x$$0}xFjCHJgG z&4Z)5^+ZQ!dZ!&~EBkN0-mDP8G_w8p=#H;pqO{oH#=^SRH512^BeiEQoyp!&xh|D@ zF!ub^8atMck*`f`2T#SE z@8}~uyzIvPpY(TRZ+@Z?`T=Vhm6MCLNsuRKr4F80CW@i$oWrfN*fDyYypm>?e7#D> z%Wj_-XMiXoqINx7{^D7yM3~s#SgRm{KQc2nB76T z&Z|^1IAp$wV+?W|OejFjoT0iXI1%;^fte`S@NR5psj)sOM8<&A-}X?SAbb}OAu2-S zQR~_la8@Dk;X>r0WN)^Is&-#mevnPcJ~CdDvm(CD4IXnTej*EBd~czNfR!iayYJU! zznd{LCrj9rTxoDEc;C`e7bEI2#{8Nw7@xEmy0OCJ8D3)_n&U8R6MczwQPs-VlDQqy z*3CmZ$&R2kom5Rb6C0e(;h)u3E zBDCip@7Aib-&GiD(bzDui0MthL1~t947gV&z+U z>?wt8-6qErLF0Ae6id>L&dCxD$q_*Kw3!G^ongeQUv=H+Ej-4S0|Ak8xNcNq-GWRQ~PNDGCL{@ zzoX%xVKTICen&d+z$WBL%bU;XELeyJJ*EAi!P`_|G<9PDa z$MWnyG;+P3Pp>-gLRci1THXxV`z@E|K(OB?B;|i9cMVJv+)OVrsjPWdm#O8HEx>2w zF=9HIYsy7x@Cal0|8oWl6I|A;&j7Tr#SHaDe9(-NLcrzE? zhnzqBC~$$Zjy6lCr+`6b%=n}>^-E2ofcot9Qx=2SA)SHZGhOtv!uo>sbz0pQDi+VI z-$umTK)R=amQvy?uj!Sc#N9iV@O85bp58gFS!*OU-6ucaMMe9s84HBL(4XYZ5)Z=E z(7m|o2#Fmc1Dx7_0^h%2HMoY%rN6!IA?L$oZ5ASUR=kENGe5N+|FP7&$X~`Pq(%L~ z)fNPxvmuh9YPw7>4-V}*$a?eoTqn9H zd9FPQUlZ%e;{!rDy-{H7qlVkZIEz5Fiea1hOtqa#gdMHTiD|mE>`5pWf^8=|HJdhV zb4|*k&;Mw|no^(ow&MjdS;%3(Gj;1A90hRnFcQy347PHdytXZ059w_zTtE9XLpcQ% z`<%Wung59>&57T%u!jV5p}{uJ=hm&U6}{~?oei+0UnE_LYUV5ou$d^b-_YbiocA!+ zTE8v|<849&Jw^epWfBGmZrA<*!sIY{mqfk+CVQ_BGiAvptll9Bxvk$Wid%(?I_Cjb zn((4%z81cUlisuGTh(LbadteM1H9?!acrm9kAWUVbZTl!tUw;krz`XCTSG%4SPhQf zPB>j^nG~*l6*XC%=w_Ts@0H`3kfU*($3xy&)|MOU6%UE!EiE!t0;P+elKS+a7i*<$%nyj= zvZN%_Jt;5aGk6EGtfB<-=-{%gLV4s(Zpl#=sU39-rmKJxvxm@rt0X>jw+ z7(_t6_$QVbVJp*&GFT^Z*1RV%VUc`*oKt&8g~1rp7^@c^tYk_(-Z$NP{z!e{ z@%^xR4RZ0OWQf5i6Aej2(7vp3%>D&W7Y!^YVK?udPSxk$UYDeDXMZyWivp*q5n>JO zSKk>Pw77Yw+Fv|Pu6;;gOdxgX;>ph%vl^OpugrJ+T_5zi1mJO-is00nJXS=sR;%ss z(%!AVwQsz}gnEH!Jb>LdaA7`ZWfbo;q$c3Sc~d zPjI&VQ+u(E)0C9dNK)Ee>7PLk#a^0MMp~|Jr@j67-o+rYM0=7g5cxDr z;pF9lz@tpbi7*VFqZfpd93nD$Pf@bx{N@6;L&NDBH2-95am>4O-i(4A3 z-}WjxOqRdx5?2PeX>ID( z*kygSn)IAkY2#m8XpD-<*gQ#eOgAtdpOWD4@bZF%`u~6{9u{k_DdFn-k8P>%<@MS|yk3p{Y<|wW%V*^f<6@bg)b!%9 zu_dwMIxGSOMD(>WI-jiVE%vr9oMd&qO`Cd%Pb6zeO3*tzI*8j5b^P^7JCn(%cMeT> z2;8KCtY~Cf{)A&}?k-$~a zBA;)wNzA&K$(}Yoy8`om`_{1Pp2BUPFA25B)tNEA;Y4E_27bv8W?vqXpY~=;UX+HZ zl?7w|kbg1<9TgCB{lPb?RXG~K6KhdA^zNcWOKT%+17BZ}SeW_rsgP{eqYC5tlV^zR z(Z$4`d6M9iZU&06S|W7Uv&g_tugvC@JjAqk)Ea_+7$2D>9X)<>ufeJh@#vH}!qwS08*0t1n(}rZC#A7Rd zJn3jt-FFl=!=pY;)l0{DJsMbT9ll77U_VJ;f>k6^S|dcW`Rcxi)l^otrE5xwRzS@x zK6mWUvn1j6vn0N7xQD$EQ?Fe(;dM~IX;;FYVg>)WHeRC#Q?&i_O!^;Z)5B~^T!n)Z zmx2=Bj<(mgUXRs!Ukhufo+uZ+bgq6JXvQ4cZTSF6HEe=K^?|jk)D?6PN48>}Oikzx zFZUFDKg-WFTCEmMPs?;s*sC$orT%Uf`7SMr7hpopm|*a_zuaL+nEsJzJpHM)iT!TM z;9bLlfgeR|;UP9wEoFILR-|&{xvk14QG3;$S_tXI!(6T6Q)`yiv2>u?CpVuP)um48H3GX#+1e;+M5sOc?IEG)~QyX zX9&4W3TTSWKuteslrqRo$oC}JpDW*95vH-sI*5*veZPu_Av~AiB#|18^ zY9OA!ZuD^B01kT?fYX-Lc+%o5|C+_buI*^exu~$Vj}LPXnVWQVB|uab=DY+y;S|_D zUfi0fs?0K&=yoVh*Qv1)U@50rRTq|RXF6gvS*_S{Jy!+qlhMlf1r=;acriY#am}Qq z4e*+s5p^hT@|JXZ`n@n>^EROtX%CYBBIA-L%>0W@PXt44ZRId}A^Q6oxGms;mQ93N!cxLmu)rfiW-P^>JiRZ7)LOh^(k54uW+_rGyd7b_rR|H_pHHo8gr z33QNcKk=x&?uTa4N8j6HcHHeK-|S?Qe&c7Rfq^T3aa$7#SlK9<(EH>&-#@)u+a_;C zeZ)q7s*JEdsy}I5(219KM+EG&b;8j<+52Foc$9C3G>smdkoEU<8c{YjIdFHFSD_DS}R_3Dbft6?6mV!f(J z8|#9Re2C12{KEA2v&k*nu|%Hg%eDpo)(N?S+&1CzR%y|#p&sF*{GX)Qi?0|e&F zqVTFw)x?`=%H+%IKISvZJeDoVREvyl@#Gmhyc&>m@P0eT(tJW)cFbKjyjg z<<4StYpnje(K`gKO_8#L#`CsGbEYzd#%f^>ba4k!7=h`a`5?cKw4dQ%FkD&l8bG1| zoItsw+!!traBuv_C2y0D@)WPbEtUyW7C#{Qe3l$@lp2}?YQH*k-Ts?ofN&9HU2 zIB>YbufZse$=!EfMr6qfYJyOjJPC8bd+S>FZsW|evP|~Oa;E(lb7jBEQi>y;S94nN z%!JHGKjh6uMMSz)bE&J}W7FPJDNSk7tckaV%@$5gIR<(*SnjR3d%bykq+P8N_1dak zde48ldsn)H`!Qn6O(E4iE>b23(-oKD=Ms@qBG1sRPriyqU^ONWs0qP{9(jn`77P?y z-D0YidjDysY-@HF!q?To%UR46c!#*W*-F_&^x&42M`7AT=4O8OCbrSPa1n%Ubdm50A28CrhUWz#Y|KSPEz34 zBW|~Ua}Ajoyn**U8oKa>U!YI$nH#Vxf}eRJbHM+U&(v{{nfDy2Q1Iyh20jkozA?zYK&q-K-TNl>1fRQ*Gw z#NzahyGe7c`p;Q87f)kZpDi?{=qYIp?`% zirU!LRXV!7&E#pj5xGxa9ozn$`~zMbUA71^2%!ZIez74ew_9OaD<=`bura?5CzfpX zY^|)uO0rj{$0V&5w1#Njl4u3eCI;@e+|PJs;T?w?c6msi0KN0s+S9F*yE#@{Y2tz! z2yBb_i=1<*)maa;U}l_0F)>ap+?+Y_x|L~0 z(J#81Z6f^R*^VxRv`s&!>p0YCOMc3|JLEp1>f~X!)M3m?_R+XIdsXxQ!QNYkMY*r* zqr$~bX(ls!2hk$}K(v7s_(A_DW(lPV^!}xpM>#V(9=Q{g3 z>wLfGclP;S*ZN}|!Wrg$KlMEKbKmz9Ba!p8CiU$W$TD;KDz@y#690{Avgi#%YA?FY zA0Q$T`7A36hMIF_OCibBPg6RnBQ8#i)qBS>Bx~RM%;OnO`Ffum8@piq^4 zfOAL9HJez)AiDkUtN-_1;GaB0O&0NCt0P{%jlqtk)V~y=A)X3DIgu^;iU7VzL%Mj{ zBYr}tSLGxGMY`%jrx*YbRMKIbHv~9(i+XS88>6yeJ4LWdu7derP{;A#PG%SgY6Dnb zl+Kv9zt<-+uJBU|#XSq3k$liqeQw(cgBBi1qi*xStyNKDV_tllU&!Ak-aEN|WhyXAN&0N`)GI zEQf~G)mceSjx-1tV25jQWA)}-*MFT4UllQH^jn_DZ7F`W)YVanjT#b)t9S_W%);sG z7I{%tP!*75W=Ovat0OY%^<7Jj4(CvS$istH7K6ob5G6`v2>aeX<=VJOYk?r;i0?HP zxt(xTL3*Yfu`|(UrK(fn)&%z!U6nN9&_Iz#%g|doJBO4WTaMJ6yADHWw{!%I8T>5K z!&mR$^<_O~qp=Q*ygNPQCEH~V^+=rjxEoiuc~ZCS^{g#n|1LqGKWn4$BUnI z{-~04;gNZt(>0-2r)CY1UR4PAY`_@0zv#8|`~Zn8*C#&t0m2LYdRE%3gyAaQP9uJ( zn6z|&qf6QNNT|LrWpMmDCcnbJ^rHHz#d)L-ZIv)6muVKi{R2#IKAQ1J? zDtc?C+TT2_&E2%IqhshBvQML&3p6_5;MnwFzc48|$vLAmn~L5GxMCQC z{UZ$xP~oE`UjlSO!?HmE@${|1ew2q7C4>*LvAT%sTBCyyw=9?!S$L4v3;QxorJG=E zfg1os3I3l~?Uf<@M)hp?=zA?nqop%Uod5s{;c;0?G7L#0zEmcFG55rumt6gKp* zhDgOjju*G;<1Hd(?^zXLc^$Z9vOk+|lt$T0Xdgu-d<**5Sm~ zMr5pSO4xy_BVJ4jI7s97WWRo@j_KD!a+&0_rJST|Y+n;dEPxfr7i+OV7|bZ))N-Fl z=pCzE71fMwLmKK9w5PsQq3Vr};Rt74-=VxA0t=~)aI*gF8YDY<(g($=iDYw1!*`u& z0aq$;bV;S|(NFE}?b+fLgfXW_lRimFX6YeU{>D~yIRTHH>WnkQ5qV&KNFL^zgZHpk zR5@Pz-U1uT!?{hl3fsYT)n|hDqeFL>MjZ>aJ0_}bTXkZO7bS|SnkGZos{iamabbJy9LcNKVJ;TvKX zB_U$?u0*1`t#zZ*wY6|{Kg&z0E%KO2e#t0Tjc&^u>1fHcdgh6zEUe;%63(R+Q~K(= zr+Y3oQ-Y*7B8pa>HcHhlFS1bbWvi1=jLKjU@)cUl1#61H^o2+D9y?bT5p{D7`}C@6 zlDO~kaEL(YT1Z9fyY1o?@!qF9d=WOM3gXHHcJx-H=cAPQCUvf7kg04U3drN(x4 z&E*d4a$EdFM;$0W{sYw9p8q399*+eN7Gm(F_xZE1Pw1b2sjfY$f`)`%e?bn|&5UdAXdlt^zUUZ}v7Av&BepF`f{ zt$38-)?`EL!TofuAzPp)QxYq88fBtivfm`h&k^*x(g9-+`hzE zHiHS&9i%Az(7016`PO;aQ~vM8l};YB`S%3WUOc7r>tjBMJ`Lc?jF_e# z=aG_Cm6D5jY`4`#%=$=5KN0Gn;Po^$!bQPzt8{z-)dF1JCN&tqP+lQf*Pt^Snqwkd zrtrZ&<;kijT!e?pAy>_~VO#ma?0gT}SgDEDxMlO;wwW5Ey3)(&PU-0?$`0c2C^}YN zbNd)H7Q65$3BOP!UH8(KInK6un z6pweNL#VYF@WoyX#0g~&Jrh21hA8w4Bl{d$FS`20uryibJ%{zv!g0atn6Dx zm(Eaj8}vO=cC}U{F@HLnY=m*g+6p-jqsdep+^L5``O{cY)Iwg25U;NY7q{gh0z}Ss zn-(JFkhSexT78NatlFhqQ&}_GkdT4rmi>Hm)>30LkUT>*LnA`1TdTh8n)Eu#i2zR@ zLiA+}N&kIrt4?%&K4zP=`n}e-ZPkv4W_1;Tpmf~??ab%BR38|_Xj7Wf2{S6V^KPLI zyO^jP6nwGRGql(*^YSbHTAq4wGy2|(oS4Y8khh$iwpof zKD|Yc*Q?23VoYDmPW)JqRSA8Q^pQ1ngF^Xqjtddjr#aEqx6!$70wUpU`DR1UhS8Mg zTrt};b@260dSs%g2cdmYC57x})n@X?bSAdx+n?h^MtMO?5C zj|H!2);F)`jnWhP5$3E@>gk~60Sp2>OTsPEG1+&~4dvvFvyF+C6jFm7>NnZmfvAjk zbU&yl)W-nDV&cF*ELPouU(r=Zkh(O$TSGv1KEN)C)a(8Tul`oRH3agJ7Aad>b}zK) z7Au*^W4+2yh)cMH-Tk5J6T{A?vr@e4%qEha!`LNM<5HMtrs_x1m5xsVH@4^fI3fcKctHP};q*LyPZ4 z4dI8Y#Z%}}7>3X{!VdMb_eP&N2wA;%(->jn5a6F+xn~#iiCV#ntAVVEY6`Eq(6oBz z<=0u!;@&SbCY;BTEWX9zzC~!5bDE}y@+)bfVjQmPJ1dwW4WIaMJ_e8qOS&!v+)MJ!0pUtd<$>X?;k6> z-XVXo|8c*#zRdE5HG&NsE)MI#2=teagrzs*Nn-**;m#U>^as?7WmS- z^$Xd2=6l|kpxyWJetgTT6xt#xhG%7f3s=lOa3fis=mrf??F<6 zZ_Llqy(pp%wr|gG#*}Y{k)mh}P;JmV`;PNgi~5IVF!Q|m9nv_K18!>?jyRL5D%Kjd zg<)@*eC`W> z&ini8jnFgE@uJfR`IY^`T-Qp((d247{O#n~Y+l1`*0=ooI$7^fyHT8L%3=m?J>r({ z2~-l_+DQ}bhTLG@&AgG6dZR37TklZlJ;J%axMBAxM zBM{9JS9?#(jF^3PA!|F_@;0K@a&YRx8_G8<$#?KE$@3l{=$EH?ZSQVToD~=B46R&Q z>>liw+T7j4v&MS&{&V1y=sRvv=dT#bdiZw7H3i1Ev~wwQJq2_Qa=Lh0#_ZRvkyVQd zb+Cq`dRza*Tk*jV&cbi{^Ez7#_&&>Hym`oIa~xTmr=xL45pA^*y~r^V6nlNSqW(cM z^rqF6`^03O&FO<;(Va?FJ#LAcR)km&EmTE)Ot^f*9`%P7_1?Sj>@1W8Rf@4caello zg^Zt*Z&tBed#6$7yyaL_d8E%T(ziU-+IV-lsIFl~@iR29sfw>Z=RI6Y^=NlWC{p zz_D5b@EX zlAwHfY=ev!RnhS@7dILy3Jkx^SjCYEnIhj=Q!OGGr_xa0s(r4a|LSr3 zs6#F@li8T`(MLlkSIsU%Y@`HSyaj+Wf%*!VvYm!{>|}a>V}x%&h?{+%K2F0@t0?qE z68RZX$OG!o7>8rS&a?obgO;e^#8RKCN^tckS!Hr02bd}rw?LYz6c=;;b>FyVmMi92 z`jp6{r9$x_FE)5d&}uQJT=e%ZVcJ#4S(O|v+?^L!SuyXPiL5%$u|oyFI~fP2=-i99 z-W<<#+&wS{s~0IT!XrIR}N@Q>*`__W^Ae&6RgiN;eoJaz&Q|8K|EZy zbAcQ-l3`1*AWIv|;OM@R)763o$B zL-O;O&s2zULW~d1JE3=Ut(%zStz{~&94pJq%fosqD{B;^+Y{bkC^5vi;}e6#GOxXx zfIW&EkxAQLzj=F8jF4@I{#}Kk5J@QC=~0_oxb*Wow2e}?<0mU5Ppzj1x36Z->laPe zholMQp6qTXwirwWc?zo5PgG|V?Iw+A(|(Kj|o5Fvf4tp;FHYJXg+iTWZRqgNk zhL%__36&n;Pt;ADB(%Cr^F`774m43)SQa9h^v&ddfP&m}KD%WO*jY&hf%CU16#7+s zaP0<&28h%B-VMqqtCShkUfrh+aChkh8@7=VSX!rlvqjEr0(4s?PvF^ASi`->M$kkSY_~RNjx^s-mR-sE2#Axw#mq z8=MeJ+bjs$p>)75gmzgwNo@*ZY_x1zF;=ux{)%o!K40_-YEkHWtKDewv44g5E$JrI zAk8f}XRsGL;^?YvU}=bWAbrcZY#I^Oc1fk7@#a`v_v6<pwt^^4H3*zx73!4de%maL4{@;R zXjd=Rd?Tl^jE=m><>IOH@Y2T`IO{}OQ`KI;`WaqD`~Vfsy8;WUWhxPSWN9)xOm+-% zl_KUT0pb4Ek|(!l>Cc+yB1@x&^_=CQ3&G^#E*{S7s4Jn_*OrF1F`pKn&}noEb>BM> z?}$xaFKWx#njB*vXe?5Zi)KTcAklge#Cq?(xrHcMdNH#?OYZfo7ybbND{%4%eNojo zwmsCiim~2U(+7${IKT7jMfy4oaoHMlOTQs(z3T8DFCS~-pwmex8lpz@j zGK&;n?%zy3)on|=4L(sKdbU!m*o`wW`C5GUUhgYX8mEzAEY*7Gx zvS@N$(D87pvmJ;>28*58Mr4^5L!cA9=Cqu*LDU+J@X|J~hliR-Mxp*G2co#!lh%Tf zlM=b|B5-mQ{)DG7o*mQ)*e@Y(BY(%L|JCYR! z)_KGqYVlC{u!l07yFA$!YuDXZw zstz=`{Z38_vyaM+*2zu8#;mz(gjdB-!M|nnvw~_S$-R=`D_r~=krXkRL80NAFMyE6 zG3AeC=ihA6ek(!$@#|Z^2o9W7XRn0vW_+7;n^pC_wN-KU{uwfnldI{I)Y4T)I_&1_e#I@ zsP>+uSh_>(zIE;2C?7v*AAjzVmj>`O1g`DF0RD)3%^zr6o1lUyphgG>XkCw>Ckz1f z1Q0)=XfMBWqWnMnTlJSYogl_b4Alk07ZV)3L^#6_LW0|@NV}=cn_I6lh}2{w`^gQ< z-hgf{T`eLW=5}-++_qeJIJ{9gL?n04B^zbP{`$T7&+)7r*X%bFq4n-ibFz9q>QTAp zuv%ervyZDv->Pztsa~P*^5kOQ%MnQdIET6+SX&Z5&^$mSGH>c+KG?zNNnB|8BB)B@3$CGb!}g}K)}z4c3(yvpWR zQu=QUV8Br?5@~`UgP*U)dGjh!PLn2r7EK$y{p+gCwvFwvTDn-8^Y^*YXcG+p+Ow~P z>m|+<0K@Wh)R~?pFyxODS<8ZUu|k;8qYQYaZf1LRjTnk2!kcg?Io#pr^~JPE+JvKv zMU3wk{*5_wX^rz1DCfm>FC~Zw@Me~MBuLFP;)YjLlOykShUBFBKMA&c{q#uX+X`E1 zJH@paJk1}%x1@h#tQAE#mN9x#NHR-&C!A#?Mplrm{YX0m;05xHjOc#X#<+`~HnD7W zxsN)|Wmpc!*GrqQoNin=IDp2rND^z7do2Hfs`1Bl^6T2U^-sfBAhrdDp>v7-9n;07=izqCB&IfV#vHb)eyl3e>{l z@g65i@CT@4obYO5r0 zx$ki4h(;s%|cjgnC|v>%5K8o74Mj^7>grbb0qHW*iWC$Trc(4i-!<2SV*twvq>dp=Q# z{FxJwZF!!D2 zRnk2#F$jJnyNDGT4f{9;?;#{#q`L04v+lf*C@&_?eT}2fA#yR;W>?<}BSyp?LpVoJ zOx9w;VH$@o_ew3v&d%fQi?f^3IreX3%}f{1_J!SU;D79o%fTvJYpC?S3ONc*IoJUY z6b#}g6IDmqYIF83x~!g7)|m&riJMZ6;lz4Yuw7F}v3>6DS*Zz9@^lldSFL#t4q+)^ zP--z>m{!JE>{|?RP_R2BYd==XiJ*}h-#<3V%VUSRFV@YZF;Abnu7+O146i?Xkr^WN zEBnF}j5~bTPd1Se?%yK@+Gge#`a7-robmkcb}IXHqhT#2Ufk^x;}{q5Sh+Ur)XB1I zb1KpkZI5o}q97A@a)|YQ(zA9dGU@7W|H@_NVE-I!%YH3(WJeTHlqQ3!x!7)01bTm! ztOoy?#1hrhL=ElAxW46aXUjkszJn4a+hqL~B!{?6N>iZr{euC6)xR^@*vPXa0yIL} zA4tM5=VMWIeSj>#3ar6K>#X!sMj1Gc#`iY`(N7hTCS#%Nc?$*J&Q{$5%-G1~-mQ$( z^(Sj+fzMdlX{71A%O*#(HQd+3^15&*fgyYJ?sFzrZxPkwZdSiR>6dE!C`S0{T&hBK zwk=!g+hMRaaZQSCe}4FeJ-(LH&D0N%`8SIq1Pn*2oV>Scq6cljtMw6T$N^i+UmG}O$ORzDrLkakNKR@HoM~`Xby;Msr7AYJqQ4m$E zUP@Ox!42&Wu;@W><&H^1uo8CMJ~OiW(|c-{$GtIF-TPSSY)&VdJY?ZWCWowf>q+;H z;)N7bRFj9BhQ&%J_QFV9CmQ-j`r4tgm6$l3Bg*yCt9XT7sCWBuc1Geh^O|xq_jhd{ za&*FNJdjhRnw>oHAp;!f0Z9ztF@dVwSoC>xS)bEi{yvs5Z3jO!wm^QL&TgUM8MFW# znI)M&Ku>js({Gdm6riXJ@tqIQ%e#}srV0Qga0G}^et=Gx(r^94Wo4skh!kkT!hRbO zrdc(H*KB;RHi2$|jI#QG{z>2Jeduv1_b;MHc`MFx+y%LQvb>X%v)iA~YNfbdauWm@(0&91FsU2fR z{u6c)79E*!nrwC1C%brW|7KPHTVDC>-EMT?D_?!gC9Rv6YA3(+nzBEq5rBiU8)`J` zzDHC(o)gV%m?G>fw4+@Jjx!3n8PjMtB!_97mr>hD-)TU2c&ly3f?_^0SH!}^V$a4n zq4fsZo4kIz7!14d&}^o5@f$71rg`($XZ+Qd;bywdsg6PYPv6N9k%-V>bv|1IwYsM_*}_wSxzrdD~yKK~tXB^^SE0~vpb9RSG` z3-wn3H@*j;pCm&Eb`-sD_cs9FcZ=^Nrwy>1I6+R?INYs%;+e`HN&ywXeSLGQP^IV;U&c|I`7{vO}&(pop(pJ^k7}y z!`ji3Ax7$Ua45I-Cpd^&0i>Prbx(YS*1O6&+B6#xrc|HeL-(X4!}-3`6TDPbn+<~z z@cqc`brjZeoSKhb_ve@8R4nFC=DNIvhcT*1LYwG@Q!T)&O(6@;DR)?HZWSv&M2|!Z zhfi<17E=oM0n|InD{>7F>kr!W(O9OAb{|dYeX#^FyxIN@Uj){{Gn?JRIO7=VuBCfE zfZp;SL!uq;J{W7{0nRlvkhFDhXRx4;ZmskstUdFavJiZ-DY%u05uGdfZgs__P4%6K zc2*2@>yiM)QNt-BpKf{X!mks6)Tq#&EuPEJIBM0cASNPx%Q4^kOmH=Pl^#IvjqO9% zE1?vw678A_#_871LLXZnL}ymlMw(+`-3raT8~&c>K%boz>-T{Ogx1sk%?Ln3XQoIS zwF~{JIl;5G`mZp(|3?fy|CG1To0fAEU?PC(_W&uXx>VyH)7HwBvgHbcyvzDnL_ z=PcZ(==cq%pDh_V7S~2(QE7?hAGZ<>f&@C4d9QGUwP~!=5HhRvfy}c`nKL-x4E43R zIz|Ko;h;5BSN!VJI<N~T!!(4NOdUj74Lx3P{qY&W%sIO&X?McFT5aDsbC*dmb|b4=Q;fKu7TK-0Q(uvfLNJHCw6=JtpgiA#z+yl zGCB!dc6tU2x`-zj8sBTUR+&P#tqSD!*RlWv|7j~AR=Pd*15^x&m8VT|6Al&K+&SF@Cp;|Wib;xSYY5urtw5vdQWmZiVB_E9m#-nlOF9uX$y zXoGokVpC0C5w=@_ygU7vZHxzf&caM~NW4Qi?{RIU(nFbnI&%h=_xKX#n*-);q;>s5 zjzoG&HoVgmGBae~F09?yQD@v(+OoIaxuBhtn5!W)mv?66J@kb<8X1e}wN^bWL#|4O z>R!Y{>}$>K4J6I_NC)?=c68)4c7S3z61bweezr`S?ZuQq7$8_YVz(4O-NHnL>C6>W zYeZ{l>wbHd#xlbjVQ=r8-aOQFOQ)EnN02|dg91b!n@T!W9|e$5;Ly_p!jIupZ=mVgZ$#FH+?BLh z0L+XRGM_<>@)^eN(#_2QyLHN-vuEkKC{N0DMWmfUvECqTX%Poeplb<{&gsbajJ1nk zy0v<%E|y#vd)4Rk*%KEYfit*gpPL0f8h+XLJvh7jzI^vP8DS~1 zY`-O#KV5YUCXe8YX|ulXosP$_fki8NN$iL4BE3N4Dz%hMuw!DB_sM{YlT<@(s_dz0 zRivz}LJ#$4{9r$`;p}ss8~E}y&%E*6R1Kg}NZPjN8j+~90GQIT2s6G$%!5a}wD38ZFfsnkY@;_$1ZUgXKy>#gt`cp53<@#Gr77rC(|-Ri5fX0}_iS zS9{+ZT6qgWiZIVU%wx5bJXDa^^6R?0b(ZKKXTkR^3)LMZ-^9GBADwlj`Xxj|jr|>h zl04Q9liTLp+7@Ga)>Q?`Y?B)&sG}LLba^1MLVJx|ZF8u%{m@mU`zG%4V zb6r>n-GZFXX0$W#G25ArPm-1=8I+Eud&=X!$-h4f zM08otfW7_3G%!bj*?l@FzJ8jk9S1$U5WjYax@fc~9{R>HA&=r&X*A|9%7&5$xTu{0x^iWMk{PE)RU5Z`CM`KGM6R|ZKQjY6!B zy}D*pyq(24!o)6w|!e4)TpH+nL7W$Ch~>p8$~%c zk8-s2s{07OC09H@5ss_)h{O(aKsN=dKC;EXGh6~-QvWf)JHOxi+l?!csnOKhhOQ4RHOX*399 z{hF^d_Zk!wW%+OtPPEo)1SnW_(Wtv_vuB7~>ZdvefSzv3ut%hEE=+8s!Ao{EWrum0 zop6GScpq3_RceWkDkRajn>vu&1%}`KUT)6Bx9OC%mRPlv9JLnW2N)65I@0-r)gRem0?ILrMVsf9etRXHO?5hBBQ`g~oWHv{I z7VQ(mI$Zdv5$@%e?;1DM5f2n=EXEx-6Isn1J_Nb-2{Aq0$l3o&^(Nqu>G~~!R@JqQ zsjL0MtwYYx-p=&miKfS(u1f}e)(!b$O-*@rx@o?UN|ii>RX4fuSgCDRQ;Z&cSGd;N{$1)(k13l)mSAx3zO>yLb#Zpr!CeH5;6m9ClWwb$@f-65J+B<3@DR9| zAXiGFJEOey>|7}FZ3CvUj;82rtD4wtrMGAKj8z@c*S#;`%-zQslCSR)tP@Us6m{xq zf!^Tlb=+Yb-CN+og->VM;e4vG;p)A@4bZ&@F2dpLRm8@$CkRR;sRV2rhj?|Y7IQM< zZ?)E09YvkvoDop@-4$8Qh|Cs zn?3o9zG3V8Hit~z&K?F?!s7?^rYT_=EO-6h!yc_oO$*@;*?qPg>xnqheclCP?s=*R zYNnN2-*3Rdtux5ZnYPm8XHu(6T-VOjqIkA(jTrB_>)jMY8FXG)R$dv{I*3CF2`*mM z8e?Lz!o^KX&&$nvdtM2>m8Y~)H)}Zbe1KTx<&B>czEB5RV0*d6gbK78(5UM7 zRl3F2iR@{pSYRkCTv*8U(8ji3Pt*e)2<3FBb+hG;xRqOnE;kuD(JyIBd zDDBrEzRJ8?jFh%L>+`?~sFl$Uj#yJSrFj$8l+Jabg!z>|)NYH4d+8SU&3(Kh7 ze!Y1a(m4VsYe}8Hqgcmncll&&i}z<0Eu6wS$QIw!j^D<6A5g_L`$bG|EjfSb1G-Ub z^xhZ#Vj zBWq%6_KKg${jCGo$R23>yv7C{EA(!Q$^HOsX(9vI0k4Pas?z>rC`i_g9a#N3C^wGp z`U2X|9N4&97~8F#tcc7a-{?a++LjK7dT%TdxRwgT7u)pdTQ9dJPp)Qrq+{SkWOv=V zn_dTK*L>xUtzO^*)hc6x%o>Rbz{0wh6A?eRpuYiW{~c-01R@?q9^VW-2AsyAi{GG# z0a|!}(@mgmd@YYcwE=W$>&*hzYw{nUV7D0PFq_ixIf@S73Gh!-6$AbaG=HPz=0m%G+fM8z$cag+PmQe8(8k4jWoIAi<_@zLH)uK|M%Lx!nV5lzR zudjoCfWm=c!|huVzxV+fhaK#SBh8vZGolbd2~5{F+QnDyZy27C&~F$b%nZ?h?r$id z*bOxT3e~*OHf{s~3VOyyK zuPgg&%>MtJjn~z`h;@H;j7A>i*Ir-zpJCfd)1~z0ghg+&6MQ(HU3^MSQYtM5356;> z`~gC_bpUIH5}4naJusjTF9fB=7qoM)`Lib<;9a%h05L1e^-~UAmiMXZy|u7k&%eTOh%u z2WB|Kob)D_WQql>LPS=8EjR*b#H_Nm2<)0qU+s++(M(D5MW6=D%7Nu%%s zggg#Ip@5$eKE?U#mH(nUv?Go{rlD%PkPDUD5m|So8Dd`&limKRs=FWK{$AAT6hxBX z22@VoL#G7A6E#v)>U}L4A}yZB_{8JNU9S)*6J!H{?_b0I|Jw8h!Yf*S*y%8UUE%4H zBv4n4DG|rAuyo2pinNmR4YozCfx=BDAS3LmxvmWR0g}*ZR4-Y!T;j?RFx4{8?QMZ& zgVZu&|FF0Jy0L?F9{swvNB!YQ0LpKFz4BjjheCfXPoz~C$aFJkO-Qg3QNGls zyoxSZ8oL6yMJ17qD=EP2(KExL(V(N)BkU$@fTrjL|9+VhS9npF zlGc%SPtUb)nLojezt(95y=oE?P+P~1$;kF*@u*wZMl0qigGut;$tKNG<3p+iicv8# z9am|EL+aFe=ye7A@pUL``-_0$(Fe69#Y;VNxdE7=hrP1_kL^AOeiX8^5*e+UVy!x_ zibDmrg>u=K21m&D2-9;ow-S zxnkvOe-$edx!rEMfAb+eNTseAVgt_&JT10rQ<{26hF#!VhodVfUZFa=q`M#_?}Y9m zZ&zpWG|jztn171V1$W7{BdSXYM-R#Q1#TO~rvPnNIt$K89G&aRZKG~1u5Y7`Pb~Sq z6dfA>fTZl$bBPD4dz}Hfx$+4qxRo%QuCS=MQk~`W9&RMHE}_)aApYxlIk4Y*j6+tPC8j>}AP{3C%`(}A7lmzyQZwm0ZMg?w|R z{Gy=Kh^Sa9R0>T+Ka?!A63U5R#=4`Y2ye4>aIrfJ*`J@hzZ;w*TNW|hEDE=-=Uh%6 zj3bNFLyr1SR5`1>Qt?y$C1rP4V4MFgo+!#-QZPuf+-+6s3u7TEZUjAqJmEcn;5&1=Q# zbG9t!mZC?0Pb7=- zqMB7&wI#VuRlqpV89i`J5r0u$!vk2IwPWMj_qZ?=boik6d^+ml5EQmLXpIU>C4^)8 z?Y^0y8|UDQpw&&&s0AJx-X20;ts68~3QBe>*^o$1*SDCLFN93Q$)El$o zrLj;`QF);o1J*a#?@Ib$PHb!tZs)Yh%p~9yHzF;sukWD4&SYMl+h}EP@oE#UV@Z}M z5OUJDcej1Z&I2Rb()vODmrBd@nOj9lJ+nbOHTHUn%G{2o$qdeTJzH%2kF%HjMou~jf(_FNGWQKK)P7Jx`j!b zV;2R6#EQ_m(3wdM0O0FdKBVb&WO>BolD!|#&S#bstGKN=H{`MS({tZ1%p3N>#A>BELHOufnuEPFdYjlLl*|^mIvl$VwiW+LNU$@s+mPA&+?KSx;zX_k6 zr)10pX_iSSPgCUTPa^x(%f;gz&J9|CH2;(oXs`a)ul_Z6Bk%R6mz3X`yPeCcx$)6< zWj3v>0KrkAti7rsBb}QTsLN&nt((?0O5!Q0#b2ZJzj4mO=iEw0D#4WL=z(1l$u!v1 z5n8|1S${8m{EMIebmTO3bjiA$hOjK9fer-%D2NxpR$Cp1wkfzCqaeJCSEoQ;OjCLQ zMTFNf9m@kAQ{q9e6#{d^K3XK!RbnW@97SQ>m3F)gylgQahB&2#j~R#n*eRX>>KaI` zyMWL=xGx6E3xoeeKSfiZY*0A;zSV#JH#1T69I{A2j?*lGx_{<`ECarZs?946gf8ba z0I8rDh3)kv@PVU%x;Gx*>d*yz40`TJW6 zf9T1#?L>fp*8)TwC7@uN_`Oihq#G#Z4#)oDnEHDm@c-cXzokdte=&Qj&&(gRwOGX<3FsQ8&?*^c{@ZzqR($eXNnb+^u_BM&vL358w2Ak9ZEy3%u zOK)PNBv|p&BLkZfMh-gjvu6!gF-*{-q&C}*2SAo8l3ozxOE{_Dq3+pI8C*R4J1j{e zX!**pxHu=%<#ph9K8ZW;leFKwaTdJCgc*K9ypj|Xx&v(yxFox0z#VVx#m+f?jgbN4 zVHcyf`T;5@3l`&YRa{jc7XdFT;cU*B!9GuKld;>mSn_ATJF_-Ai^E6BCK;(Ve|Sm7 zL(0B2NlW7;40(K58gxQCBOyHuEpIT)-6qq}6r&QLlc!AKo<4Y3T`Qk!E8xiL?|OLb z`}kS6>IXHqgIt&I9;N!U%ku_C*aCfE=yKZH*wq!!zK&Jh6UKXw(f#~VrBw`xAS{TA zD=ow_g!Yj362x(1u<6%cv1Vkxsdx|2<{@PD=G+q@vCPd$Q&Li8X!JHB6>p;)qr~5q2 zVa;6>ict!EaR6o7c>A6APv}Du`ICv{D)uDrp>qiq<#TxOO%AQ?nW27w#ys&J*4lc- zBdHS&T!7}WQDu1P7!HTS z?+yy^(GtyU#kaPuOm5A{KsHmEU*^rw&MTNVJ$JrNdPUyrA8 z9)hz&^U|~3MWez{PE{+#KmgQ!);(~az;9Y1ET3+%SP%_zAedz`L*%J z%A*&`-jhes=yu5No5?rgT82qjq+Z3U)GY!HW`qqdxAlnZD-LYiFXKkHDQC58!GoJ6 zgeK3WxJ$U7h;uTBqZ=i-CS|p$DWuWn4Y!m#RQOrTkNdxBhJ)_S?Rq10 z83HZn$=zI;!I))Seaqm4g`s=AcjSDfy`sL-PvQpiOYichUyG9v~Ev zN-*e5pm_cF9Pv1)&idPkPj%tjXft!P$XEbo>3ExMHeaAY* ziv~+aO2{W@OzBAa*W6J1`HmJ;t2=4EjUsoXr0-AlI=D%hKfXaX=e&P4>(FVpNV0DL znlKsXbpQ+7#0*s5aQ{HhdSNeq8?>L7(Zq6H2AGM}Q6IGOB9!u{Ez7nII4UdZuheSn z+>T|!!Jj|qavxN_E>H5ektGCE@jWT*k*=3NaHh}^m=-t(;B1LK9oA#Rm8iY2RTwVh z#UW-}3Z)ucDX6po+sO1`-U7qdI)AH~fN`96a7$~-&oU$SB0VlC{oW;53p2 z&bBIe5RyI>qvo(HaIlU~oQ!X5t8-H@c&kkQt&s}dley7)v@d>NxYXZFO+a<{n@&<- zONCWr9&Uz5h6OO&*qSX#;6H>6my6EO?w__ zEixn4nc|7ZP>2_H**N=2qqPGIyCBY!U3>V4OfdqaF>4l5DdI375g?eQ8q;l2!C zeMGuP()<^rK4I8?;KxFbXgAUHx6*M5KlQYgn{ZSxRIRDfNZQpn4}6l-aJ0%!FNW}Y zUe4J=^L>tBunqn89v{xPyOb(_`oJ{dXop5jtXm|Qd?Wp#wjdD94M@;nF zW0&+u&nQk(x2!io2pKyf{fcn3&1%L@u34Cxv=3HwwMprjv2khZlJk`nUGaO1JZ{Pt z{%mWs{YppJ@n^%I?P4;ms;SDuycxFW&oNq|a`n^(*c42vq6so6^+G+)w!&^c0=&lS zLd?K*fW8uqb>FwtgNw>ndd<2nm(l!+o7UDD`Gh=> zQpB(-R--q0BwTT#yOi6?N=t|otAP`QAPH9t%UttXpbzt#2EfJHA>=EmBZ>5MA;xsv zR9_x^y(w7Aew`&EZ2#WEi@h4oUk~(J=NHyzCsV%?o@O9DT)CGiGv>kbzJFc%ZH(tr zDvp3drB>S84Z=S_q;Zs6BBuGeSuXDL@JKF`aP_so&UuPw$9G7w-|sgIt6_8(uauG? zDGrg7sq7O)e4O|@=K|6E6_z22)7@mubmM z#}Hmt#7Jx2dnJCnx2WqSApYDj4P#RlU=iaXf?X9C##B?cAZs;nlgA5sJWFgA*$?@h z4`Z*Uzen^jKjh|4M~*D98iv%+Ru%6WJb-7p=LWMgSTvdOpUrrd-i~KGD{GDEWFPEU z@RqxWYjYo0-|#GA*ajk8VrVH4KfKsO9TAz3HP06R?t)*lY@To8w7=qUs&;F+Og(1r z3rH#7z%9BE@RIM-ytaooSW>Gag0P>?>~ffAf2=|$opO9(3O`4M1!RZ}sS;J3&UwSLMCfIy}4Ls93_3D^Du9woqBO4Yy5*}HC z=p$jc^9&U3`61Kdz!U~`^U}B|rMEGeOF4I`v2{X$k!cAhfZYlw&g^uG^P=o%<;BUT zN<%{abk$i|$BH_6OM_nKevRt$=EI?Qaip3`{wb%@**Ts6y=I1bI8 z-LM63yO$!Mr<*qiAmr#Zs#bBs99xX#AJt57up1)wNrUzv*g-uI#zfP9nd7O-w%T_&YYg6up=CDi{1)Bwbfj5X6MC|PZi8{1Cb4J9j5`@R4QHYU2 z6lu^Vz$cu${B89d1&e_tfuM1ZL0|7-8O!{pQl$4H9Sj%< zki^;CGskk~-h1vdb7$tv9sk^H^6;?p?e(p1z3=)h@{t%r5nj@#k)`%I6T9m!0%l{- zm(Sfg>oK`jF$a<1ejJ3(DY`m3@0m#2PIRPE9oBbx3{~bZDkv2_GNH+aKyO05^Hey! z!{F6NfH{wEh=S;qGGPbI*DldlhWH50-c84DUq)Zeoz+&f4AY^~m)D=ke%APrNH#fy zMQZDjSh`F*1tphnwW@wTkDV`YC|e32KiN0x$0}LTsn!$DiBC}A#CjVKt|_qlnAU!( zeBh&=uURnR@Z7<(-*Rl+ygFvt2{mth{jo6@MX!b~4J~)7+b5I8(&^1deu~&2Nfj@^ z9^SbO-Lau*a>OS)?zmuThu_{j7#Xcv?lHr>1qk)RMio;+5;#VT>$8#>fCB3eG@pDe zq$D!6%B1dCorCUqk}0wfax9Hl@r0?n1kpCTr}Weo&vGgTErKbcHqd;KjlTb!>H$UwtnDTsUtcUQId+o{ zdJ(ni(x$zuAYe5@JlAB&j@8S-38O#s1WW1w)@Y$kVW-T26I((C$<0V&H2>y>k)Si@ z?+~3f_03nM&%XQu`N9`+unS}&V}5IK#V$N9tD94I03lHnI3|795U;01?k}s~s|w-- zfj|x5vS07f|Ba!cD-(Y=F#b{C{Ab@c98jEVTqIO05&|5NCAmO6h@?#22bz5L$xF=2 za;^k~o+~C-{PHKok^Pm4)L`8sP(oz(%5~q@BWJlX>9%PzX%J?e!EYv6DiNZBy3zQp zZpE|QCfceXNjfgw=sY7!5DADjTlViO!@pOHiNBwpkPju)Y##OiG8~#B|2BmX(0Tto zDKGZ0bMU4M+5#tu_v!*9fb-L0j!(( zxlrQARR<)^Kdi#vU;k^Zz;7g*|3ty|HzvV9zi|6J{p756Yz?iHCFlz6)BSu2qFPm( z*;RsH7B2P+=usx4)i#EAJ{6}8a?&%!0{e7oz9Kgu|J%0=;qaP!yk9^kl~}>X3c~e^ zD>@yD*d$S)jX_c04~Wjq?~k<5M~0#H_G7nn2xr4B5IqB_F$lB-QR&Y=@#BLc8*{-7 zAut1orLsbglw9Yo?j2#D$y{c|Gy5O`wco#z*BDQ^j7@dMXW|FEM!}085t}4RET4aV z2miB+)j|h=L?;uf4;$s=Aw{(!;_GgEG0ZgWdz>_zOJujdL!kWcOHBW$yz~vzu!AR= zetWwHY_^d*3z3(gq+Rz8VPSn@8+_#?D?*Wv1G!<_SafMSfGLWoEyTn(180B@o0(7; z((Lt7@p81e^-&}3#K{xLZW9~Z%TjZ3ocSHxhFuDQY7ubmvnTYqAFvq|eXMfIBT>L_)(5L*e< zqdH<#!ep1O^R!XmbpgTWYJCm!@#bDvip*vAq(glaGqJFlGATcBZ^nBO5ji7AM9%mM zOJLUijcY~E;2YBBN~gD|E=5~=LQx-v^Qjj-Q_C71CaHVN?P6B-u#a*s;2ZtM!LyVr z#(FE00tpt;?(-2JAyzLm!MbhS;RPI?%^gf6skg(LrpitS&sqhR^znYG_s1zpXr79- z?p~@W?f4igIz6t@2ioZQP~9L2=F_~U>G=iJr;pq8t6iz^u*_J9PetJQ2*|B5_5L-e zqH?c~I6X2o4ercN(a3JC;n(72OZE;0PFjzM*^9AI7aWG4jgEB;KT3LnIBA-21aAD6 zFk}E16uQDd5E}>tx?Amr%{%3@$U$00-VF>)otiOk8}3Kdi&Jbx9>Mv1k`Aon5(y|N zmv_@mZf5aG9hGfv>P9v$wJLPchttZ8A~(00NeXKVqW!@_7j;6dh|csoJDp;;q||ab z-cw*YRvurH`%zsePHJOU3&EAi%x-~3@@sGg5Yeq=v#NUw9UOFSRd#u?xSgHftbJAM zjoNmZ$MxhA_~4e4?^Y}Jug2&0WVK{qAC(g$N42t3`XHBg^wg}&E9)Ms8VYNLU(chN zXFzqx9`v+Wo$@1t$BnN7^Rp*%>KTJE+NX|s!w36*sjY<1gtzQeEp6V^#Z$z*U<)+VlM-&eSA+qX{4ty=2SW2QPXFap0EtKuK zEBY1QRYbxlEmnjaB?!hOs%(BLK~b?=dCtBydLM-6G;?8kTK9*NDv`av8{ z9UMq$>d!Ktf!wDZCD)6Oj_usLe~v~rFGmM0xIA1tc=|*ml3PEdjV!+`>TX2m{5Vv*K9s&VQpxE(Xd;`O-H(1-*=bjuPkWE zDVXxasU0D=R&dHAEwmZ9oz0MvSOT0`{xX8;m?<%l4DbETNo1i8p<;?q!+|F%==ydX zGGsLHV%XBIKAsUn6;V#KUbVxFl6ZxNJua4D95QI~jAYNQdodn75PGwzsx-K>GEUC9 zfSEZ|TE^B~A1ZWBFAU0kFP?t!1w6SKZC|S8m18z~dp|4@7->=M9g=gG@+yNSm2Tp$ zpp$q2(VLECQ#T*AA>ooFMOudn>F6-84XGY)xsz#SH^9q+*4?UVny&tgd(SoIWVqL> z1t5_8)d3@F;oSqRD`f+hy%4v9E_g0pgylKeh0jU)73evPgoitBj^RAEZ|vaK7j0UA+e}N)jdac<5)O>Y2(_vb*xlu?{8rl$U&ZY+&G0 zR#^0$v06fhowW_X>_CT~Fr`?YQMApE%WZvQef* zf7T&BcbzH^$LGIQLjnWBOB<%$HXE`Fh7crkn~J)V@A z%BnGNo9>8CJe(%npDLiFVVb0L32c%GN3_YV6XIbgY_LXUzr>hvRoJ@# z^u~hNST}Uo%kLK}K3nT!)^{IYn7iu5;!IU>cy`xvzLOvE4_u-U*y=n*Z+Uhc=+K@LmU4`=u%QRd%{?f zwxzFBzaazyJ+Z<3vHbCX(&Y6M(CCe7(ZHjy80np(lAq(b_-o?tFzb+>x^!5L%H4xt zSP(tnwWD6Zw*46ki&$`Iux>~ZZ6 z4E$DrB(mJ->my98i==CXa5LG@>n=5+_+6>t?5U3=UMWuRpct}=-aE|(?DzGeRLB8(TUoN zWWvf3Qfo2vm#mf6jyN_-uwJwxG8-Pp#p=oc+J{p6m+c2 z|2SebvAE`3LB6oV1(;YajcMKvuq&rM2R7yZI)W*67Cy*Z^=VC3C?`{5aJS2KYZ*OO z7TsF0)qH0NQAJu-a2{`Rm+i5s@*S?Kb% zguoNbXQ+DHs){Ucv{Ed-e|^qerLb+5w>SL(Ly~V6BV%D;jAn^2SIjY_r4n6^`2ysW zHQhKz20fkH2i>D-;B3PPV3=LGfP;%w+kSoV!6OH}XC-FYxvg7)RokzB_Etg;Jb-X9 zEYG?oYOEN?sNY=7GV@HP2+9nezwzX;TR4nEz2B45jZ?1*{nRb8ST-@{Fbe+%AQBb& z$#H%RRdDK#=}BC{p~wAKeOQ@zQW=XET=suBdr3EWD8N@%Cx!y zn9q)JrL&o&>GKzyGa^!2I(pfRdt-xoqT(>^0LqtX|8miK@J|}8wTpyO!j3nTa<9Ym zVu$>d(kMO~PK^xKf9@v`fPQ~^^&JlsUIK7I0N714J7x74udRPrhngsO>kFkZrloV^u?GJqE!{(3!y#aM zcu<1~lC%nu^-P&vm(n)5nqo&y>Xz*EqIoT=%2!!l5is&|=rtSdu`i&;3)9K$nrD&w0@b_&&&ZjLWwOGvZh`el7|CAZ zdo4{26O$Bm>R4ywkIYRY1Mea-t>8A=F0}9%W(?)vfkx%EX6HWqQx$N`UM*EAxWP!j z{=)U9#h!>sHmvdfX0TveXvx)Lubd@OiOj1WFDhO@j`ep(Ig4v@XWk6W3%2Kh2(^#) zzLvs?SG<=Hp~2Q043%S{xC@02l`wL!^}JR=9qaXw9&!IDb=GsP8Z&ni-#)f!wL0!c z2H<-uk|u`?rFR9=N89^HA)Ugh4q3`K5<22`u~TnSgJyE*MIkRq0Wf0;ztY=(k)&EAwMv?CEFw!!_1v`);&@&EDACHh?B_3_?&B}99lkJG}YaUMYR7!H8pChr(v=34AvpqM8 zw0I_ao-QL14Q|`C6}a&`VsKR4>(hSkUsSeSLQBsmWapV`d61P!N0~Pu^UsVz$ytvH z+fK2P5&54}cg`B(;WyZM+PCVli`tgXm*KxEkX?+wXTHDRV9yc`>tx&aECw6LmZ5v{ z;JRZiCv%av5=XD8^Jh7&XbGTXj$U|!+xZkxQad9O;VEm<KD@qXwpyfEGc?w}>dWgtnvZCV0saSZUJww9WYDS5Y%LeShLotlpVkZPX<$HbD( zh`b_hLpA+3UOlIe1}-Tw3HnH9tq_EQ*OPKvsNr2CD?_$Eg_I6pE=_2FMG3dQVJ+Ek zorv!QlgByjj<%eMi5&o_y*OkWZ^wK|4G&u@uE&h!8vFH568Fk6qA9$;fR2>8VNIG( z*-j=4vNcMz_nIr^g8V+(+EU00k7H0oDEm*r&9ngFN?v6qwK>eOu$a$c(>=NNe56ON z6@3%gHD;rc+q#77~}$-YJrt_R~;>MtN4;59vIw3Hc7vk+Nvh;(W~Oz{Dtb?^7TjZ$UH z6E-~n-fkRD8ovd|;2cokB#;{P1@zhgkjD!?>%9&5`T3vE@8|mY`TqQjA3x*g&;8@) p{`ppKDiC&CAPp7zp@y`R;!i`8VIV!$<%C literal 0 HcmV?d00001 diff --git a/cmdb-ui/public/cmdb-relation-define.jpeg b/cmdb-ui/public/cmdb-relation-define.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..357c18a9d87137120785e28af4346d3c02f6ec8a GIT binary patch literal 80517 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 E17ed!3jhEB literal 0 HcmV?d00001 diff --git a/cmdb-ui/public/cmdb-tree.jpeg b/cmdb-ui/public/cmdb-tree.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..61cfec331471b5d834285b2b7925cd318bf6ba89 GIT binary patch literal 132418 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

  • j9gxjW-@q&@TpT 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 DW$oP% literal 0 HcmV?d00001 diff --git a/cmdb-ui/public/cmdb01.jpeg b/cmdb-ui/public/cmdb01.jpeg new file mode 100644 index 0000000000000000000000000000000000000000..e939125f348ec3a3e4f5f049831411b7d5c7ba54 GIT binary patch literal 118206 zcmeFZbzD_lvpBxbIdpePHxeq{-3UmhAYIZabp%C_6ckWGl#m8NNFEf#wfbcDQS1(sj zdsjDlKA!7Krv zsqllSDui90I1zyI+L%L+a zJl*bE-23tJzxi;!>kZ25$HfRfaqK;mwZUH!P;Plnu4?O|2x{uuM{?K)> zJnW^-U8T!(P|mQoo<2H1>kfK(=w7CSGK4KSTBzOv;mfuT-MnsH$_Jzk1q$2*Fzi^P`3nune}~j6#JXi6Vw_6MRa8H!q4XipbA;^!PvNL{mVM zM^i>qMC16G0$71m-vw_Ez~P^yseySmAa@?%)8!`*f8j%2Mjb$1KpjDyL;V8i14}=! z{K=`gL#W433VvZ$2j)O*e@Mj!l$Z;!_OlEMD@e5fiY$r*NIytB3KUHWaw3Bw z1@a~Urv8-PCDq=)X!}c+Kjr?j+$GiYzw!8II^I=0fj_CR{K*yAlRqW#k68Z7aR98r zQfmKL5*7h_2kU?}!8&2}uxfxF)(ESCb;CYf!hh1N_(M8&zgpA&AyFrg2Zx_!t`}Zk zyMF#>`JWtEfVr3LU-p2fmyMqnsC$5%tJ^&f2RnN&dKqvwwxL&XvEt#P=e>SI1OP7Q z_RBH=u&4cF&W4cn{gq}F1^`0a0DyV=SDN!40KCNlr%v_1(pb#Ep@IegdCOMb9zK8I zL%IAx1+V~oa8ytNv;Y&p4)Vhb2m)e&G@t;e0-As>U<8(Bgh?y9mECV4GDxifJ8wOASsa7kbFoPl!y;ixuuND9tQPF&A=n&j19pOfhC+-&kHQV=rZS2i ziWQ1GN-#<^N(xFIN)<{g$`Hyt$~FoD6&IBnl@nDIRRz@$)ehAc^$}_k>KoKb)HZP3 zd__G(Lqj7&V?z@H$E6XPBU%7jG+H`ZDcVQ00klQ519WtBN_0+i33N?#3v@5^N9Zrm zi_ja<2hqQxA7fx+&|&amC}J36xL|~0Bw-X_G++#3tYDmB5@51miehSFT4UbBjKj>v zti|lZ{EB&oMTo_QC4r@j<%ku6^&G1Ns|{-kYY!V6n-Nh8c;&|i4;^g9d#QB1=hl`8LiYtw4jO&FPi<^(zf;)qIj7N;egQtRLjR(g| z#jC;_#QTnqiO+&BgKviKkDrA94!;k7g8-9&l|YWbf*_b6mEb+W7{LJ{G2snDO+shF zXu<-*PQq0pbRt$F1tM#rheTOKEkujNFk&WRIbti~2gKRLZNy(m&`8)wR7f02qDYEK zdP%lPiAecL^-29mQ%OIN&XK{$Sjkk#?vllkm6MHY~k@gvF1MM0eF`Xox1Kl&aM!IkGr1UcM zcj=$gx6*GjP%|hqcr(0a=w&!#WMkB03}q~3oMyse5@xbxddAeuw9QP%tj-+BT*y4Z zg2^JxV$YJy(!p}X%EoHI8qQkHy2?huro!gWR>(HRj>|5^?#`acKFoo}AtcNE*Gv$t}$*LZW(SL?n3T)9x|SrJfS?*Jm0S| zUo*ZIf34#h;<~`~yVtX?Pu?K9p?V|qM(vGV-mAP;ys5mye7Jmyd~m)Rz8!u}ejEOm z{Nn<|0_pmViQ9;0i!VwrN?1s|mY9>Im%JnSN^(w$LCQiZQ))q)N!nWajr58P zhm504k<545>#`oQm9j^2qH;lUALU{4O7fBNy$VDMdI~8DGm4Cgc8Z0H+e!jT0ZJd0 zQI*w{RA~g;ax7Th(yXbktJR7H(d>>2b4G9jdOX{#1QRgGIwdqgoTt zRMC8@Iem-mmiw(bEi|oLTB%yg+BdWVwL5f(bnm=_1N{i^_unZ^-cBj z^^XkX4H69I46hjm8Fm>_895l$7^55O8^19=Fi|i`H2G>OVEV{(^fudVzuTQ=RAzV0 zKA7X1TbRGQgL=o{PQjgX3r&kmivvp)%QVYvD>>u1($HWD@oHY>Igwh6YY zb`o|^?bht2?33&_9ON8Q9CjR)9Wxw{oHU(sosf48?v^@ZINx!8??U9_+0t^ z;Ku3p$ZgJD)IHIC+e6LcjVHwOwr7nO3AoMa_Gb4E^PcyS^hxzO_SN@&=SS%0;@5re z>b=MJR{RzHa{^ETtOA+?83IEB=YwQ|UI#;hErXlkOz?;BulJSi=Y?Q}IED0tUJp$O z-G5;4p!Oln!}|{x!<51bAK^Xncr+F+7M>A-65$Zh`&VYh*Q1i6&ZDiO zKgZmNc^-p|wTLEl}#;8qfUFAc9d?NKKN4lWl082MpVY>D~DI(ua#a` zWwK@_WuayHWG!dwXLsZX=j6YkdK2~LBG)B%E>AnJHD4${zks?Rt`J)2UAR_cTGU@G zUtCkdUGln=tTgH^@Yeh7x3W8BqvdMl&F_TYl~k})q*W4EMpi+p?p1A9+gH!k7}X5C zSAE}HD^^=s$5WSE&rqNGf%HRM16ISs24tgul{^-st$4>Db)3_4w+SyI*!Dd?wB&?@yslMNSh;C(TgLWX^KT zmd**zeVCV@?_SVZm|V14Twn5BI{*4`8Fx8pg>EH(m3Os%O>wRNo5{DY>u&338;>># zH`Bhef3Mh*-s;{q-2S@bv4h-=-lN>h-RIwLKDc!-bLf0{b`*I`d7O75eA01haJq8l zdyano{DR}67NLfiLOLUnZWbOEKlTDJ@CmgAE!^E)0Khc@0OEcCz{2~(_WDr*+$uxB zG9auE;eo6}AA&1tAIc+CMKl;%7y5Gy7tEVj9N6gC8#sfw)p)u1ZwN{WYlxbOyGZ&; z$H`{NS1Hyhcc@OUT+l#i(dn@0aT$mhiI~WkDOku^DcGplX*lSw(sMF$F>|x>uwCQ2 ze*Fd?uOOc&zm$N2po)-+u%d{fsG^vhxQv9jq^K0XG>;6cER7tAJeE9CVNY>c>5Fo= zO1)~H+S8kGbw>?DO@&(mT5Q@^bO>}Y^kDiB1E?X25vDPL38g9XZEiCTbLKmA7F3p` zR>amsHpI4Mc312f9k?8YoD}csJ3F`px+b_~yT9^y?iueD?fuv%(l^%c`Mo^nd9{)EH^1HFaLeP=fa7iZ^b927;nkT*vqBf8CAGf zKCViyF0E;N-&xyN*I(cDp}C=~G4&(7$-G&#g{Wn@^?h4Gds;`-C%;b1&njI!-FV#_ zJ#D>deQy1-1H=Q1gXKdZ!&)OOqbQ?mW8LGWUlJy~CiSO;r>UmTXJ%%b=5ppAFSsu1 zEs1|+2DR*PWq7q>E%_UK{qBaRxBlma zt)e8Ls-cmhO{2fVh{m+TlE=P^gO78LyMi~4KTa@9xJ0x`yhn0KdO>zZenEktyr4R~ zvPZo|vrIchH%Q;c@SgDvQxx-EmYb|s*)Z9@v3GLhUybB+;8Nq}=E3FJx;AjV;zlxW zAfFY#mVm4vuMmSUkuXx^yXcfyr+Ae_rew5~uk;-mRass+DtV~3&M`b6myFAVeE~Kv5Zcw*#_hXL}&kJu5%74>TTHhWS2<34asO_;@1nD4HaOH&!dos}UDUihxH zVybet8m)%%{nc90I@Nl^54H_njqr~lO%IyGS{}8Aw?(u^c0_-Q>5Tat(-qSl-4oUO zxG%i_;Xue>(2&ot`-tnP+nCpQz?ZOzr<0je@21;lzRYgU0}Dipj7vAZN-nFcSgyWW z+gume2-s}+j@TC4@!2ieTRNaPR6BwnzdKnuqdwQZh(xsh+5ZYq8Q3-0ca$d7a5Nos zcJv*L_n42cw6UqNXK=D`o$*BQq4-S%4+&L?@QM0~pO9#h;*<7}MUpF0KqzV`U8tC- z#;-(COHyyrq|z$W?$f=bSEm2Y@QhKEaf&I3nVz|U#f;^g^*I|qTQ|E6`#HzctDILG zIdwRfxk9*ExW{>-ugPB9zn*);gcp~$kaoRa8avKrBmK zOB^9lC}|{xE>$UQB|{|hQPxe4Uant0RDoY%MKMK56Wn*yskp0hsxGO$ylJdXraq*R zps9U}_|~Y_3vDwUW}R=kWqSVl3I_NF6NYb$JdI^da7;!`Gj7|P@tU2Px7~@iFty~c zJhW=HerjW3%V&pTH)>zt0C&`N;<}4^ch9J=dJSrkOA?9Uleq7a)miU2$ znWx_qQIa^4O`kt`(Ux+S#*=ROGBM-xtMg3WESv07Fv~J;zF4q~y6V3UY-Vp;?MWR9pXi-GzwG}%d~la*0-7KIB!&aPrB6mX9{{3@ z0Duj2o{@vL=Pg_S&=moo3`zjxpc#OuO8i_zcGoH%?)Xr_5!E5!`-`q&x4d!#;*AWmE zq!WS&%?a0wJQH;klMu%fpOVOz^pcX2#*iM6c_&*TS1n(w(4g3&)T!L3GO9YGwsLbv z{Y(?%7MT{Swy@4kT`Rpn{pSV^hO5TJCNidOw=>N~?qFHSSO!?tSRdI6+XdJ+Ibu2K z-OYABa8-7D>AvMD?iJ-dep>@7vf$?DuP1O*_iFt^2$ODTk-W zS|>TDJLjSoaKy(S^T!|kPXzWq2OtD`Z45v!TQKkpCW76I_RAfF6M-kav(T zPyosSTKS>SGUx(m$KQlK1bs1Qpik)mN;fJ6sx4|28YY?{ef*hN? zhQgMTjIx93-W9GZ^VG>SnzR_S&2;zaWf{;IdKi=uR=nKqk_h_1SxwSJI6is5^s3F8Y>#@ni9 zUgodv^jSiz1g%|c@@<#xSsff5%bZS~m0XfsSKY-uf;=0&QG9OtCi^Y>iv+|5t^_N< z^Fr`K?>$%n=ac>j)yExC%F*4i+HrI7@TauTJ|@{d$9qweYMoB}vi((1reM}?PFb#Z zzIY*8(MUc#gJbq_vhG*Wz=Z_aP^Xczy4-Z|Qp-*dmubU<>5WrT3_ z)41N3uao}MBs1l6y7T9Yd0&lI@K-y(MQo^jC)gU>d9~+wAb12l?mJCAw?pv#+5a#A z4fMTU&H(J7uSpRw1bs_kpf9Nom;lE=BSaPS24zD=q1aG)aO5|`Fko7+4A?G;DoQRY zCaMSOESfGj+BMKeFsv|6Fq5!Eu)boyz>&t8!VSQq$LqxRCAdnkNSHxnNz6ffMAAX} zk}QDSghHByl%Hk?Xs=GIDsTXVF+`6mv zS?8*5l-@T3Rl@>fOcMvw4l`EsusdHZ<*eS=z-+DUS{zs%A33c$-*hQ;BX#%lnDdhN zF7c)C3%<7=UaOomoYD6?gTMn(bPxx{?oA z4YrL9O+?K$EmdtO?YBBoKP`Ud=yK?O(=*>k)vq-WHdryVFoHFDeN21Y<4f#B{$$J4 z$n^5e&g}U-WC48OF5fx=Kw(a`730)s(OV5q2IXJ+RHpXXz1&iA6?EK}p5J%Er!dm0v(mNLWNv zPF_J#Nm)fzM^{hZ0Cc-rS=-p!**iFTdU^Z!`rY$?@G$IAc*Nt#gs0CElaimmNXg8~ z&H=kEzo7hGMP*fW&HLKsme#iRj!&JR2Zx47M#sj#Ow2DVE`42ISzY_Kv%9x{aCmfl za(c-Z1YAphUVm`*4}1}Vd_hrAU?}L9d_kbT;0+^0L1nmsMkJ$!ZsAVM$Qyz|A{+m@ ztO=8ePkWox(qjONjG2F)W#^K$ADsR77z_O$arTR`zxbL2-Qv(67Yqu8p~7G=R5VoZ zLc;((s%U5!SQtMptUoWD9~a)`h5ze9f=D1B4ipp=bnrg`HYPT~|LY4m4Q^13kP`q7 zXz@Y`VT6DbaBh_u$$8MS=aw1C4*U;p*c1}5r8^NZe>i(6WN&`z_NcL3W8~Z!(Ji&> z(TLf&;nLr@KaUHyPA^=j$vQ6Emwd;Fp#Go$wz`b(#$JMsAggXh0;kmcuICgcNMOec z-aLA2js)Z$#UOzP*l+~TeX(zx*HlL;dOX^>brk9!A$px>Ob>Ut$|MK%s%nXHaWI6% z2^1V}K@>>-zW<2~(2@N=d)Ym}V6|}r^-SxVjLRq}yMBhL~CfpbGSt-}&;ztBp^$gi8~-q~_w00P$Uc z3%z>J#Sg@a+c6JyKBpAiOHlrN|M`U4J$VkIXc&(zgQ9Hmx>@O)v3vJJv0-Q+?b4U|&YfzI6Fu_ScTkbGApGr>xr`=14tDg5GOUA#e# z6AvR|)UNsL-Zl7KmQ)2xwjsV$ctzfDHH_QN9?ktFpJ}DLUcsKezoZIt{YaxpGL8g0 z3u=K!RO3_sYc(f!^Vixm$CVDtc5vv>#I?4y`{qZ>O3|V;J`CNwu{_6Mqvh#JTE`Vm zS7#8j=mCAZ#4&b}BxPHQ9>~2zzR5PPNpnorvhXHo45f_t!a^8wekLb?b9 z%0-+c%Nkv^RP;VRsT0*RUVPjRm-wRmfTegBrb%a)KK8Wm&#kKTmVIxZH1;O5ZI_%U zxEwI1kBk&enmzvDCHzj|yG*5B@%IGy{byPV0V@$CS_;6wx&tycT95!6=XNTheG?lA zXb_AYs!TM-G=2$3Xc){3UBpa~Bhna3H=b4o8j!%rB*RCo&0CW5Dzp>=o4(UgADg$r zF(p}Mj@K2BZ*Lzdjkumu9vVKGHZqxL@%0qDS#-ZbAzr6b>IU`Gj~`J+k-$UO1-lCZ zI2sa|vuQ*EjQS;o3$y5sg$qz5fGuw2B=mS8ltwY&Hh1xII(HPsW4~o>O5f`4>*K zXXoR_tHKP6zny+>tA)a=3l3e=KNU>PTN8BWilV71D5@?COKjSE@a_he$Hye*e3X|? z{dxbBMeN_P4(!1WyfqH>n6Nl&M?agJr4DaLKE6x5DE!KI+THm&V3ch4b^L{9S2;o@jV*)6)c9Rs}M_K}Phk}`>j!W8IaVKVH zSIZ4MG2?F5SG@K5;2<23Z%6C;<R{657q?Ezro}(uckZZ1;&=&ZL)gTs5?OdeDb$LGziPtVT1b_ab_6d&7$}b;x_qBZ>HC)N_}w% zimGX?wHikK9y)G(%fe}eReE$_VU~oeAGd5DwGK@?1QYF`zIh#-lrY__^xQc|IlQ}5 zw4_u1uJkkc?#_Yx;s!6zS&w}e;&6KAz6fmca_VIJIj(D@DKWb|nd994eUn35O!d<_bBQdgZzg`KW(RVna@@ zMzVggd-mI|D`+ZA?(dBZ-DFS*l(fv)wiiF1BEpM}%+`I>NZgK<6b6l=+Lvyd@Gmc1 zOMLus>IKtRm)6DDv3Z^c`F)DlxYZt|Gs_%MAl*Z+ z`B(GW-+2lE961Pf;9K#v#+9sK+c;6zlhxT5r9+7NIy&qFp{dz_%*tBtdK;vEB(z$D z|3}%Z-c*FY(6asM?gpJsP|qnR?9YU~H%Q=R%t?x5eI5GntY>iK$Db)b8!P2$`u}Yc zec5o^YkycXf~!(LtQnr>#z@WkN4~efK#4CualLlOf&@eSNM!lj`iM}BB?5mcL{&X8 zym-dAaO#^7ACYK%?`-$j=N;JL)97TYRbD?2Mdeen$T{@M9V9@fjRa=fbC7^063EDh zZ!H@11@Mh8gBDK6Uujy13?v}+qh!{XxaV7WCFmDYh+wc*V~o-%{QN=<3Bal1Y^ghf z6x^iNkig!-wTp8{sUak=^3DA0csSttzrq-PV^+%)|1UiINZ{l&8G#U>?G}kWjhuu3 z!UNAm0)4}cM>~0k7TvzX2C&}<`-`G?cvcOWHFUqw(EXxF;<+cy0qI91@C(mxOm4LN z&Dr05_T_JFJRbggoc%q6?BxADH~wF+p3xzP&ZXNZO0%WrUj*7A0U2!kvy*E`fGP_? zncNQFCwL34(g~m+v*4l{!GQ2Y0@Axu97w>d9Da%!HxoD;dBa>8-oks_hX^I3JK8lz z2q>NNU5iEns|*(4vd)487IopRQoZn1S{cL#Yb3BwOjm!>NMhOW1PMH{*~z#-;gZ@~ zYCLz0JGM2aL<0S?EeHg-BWMQ|C<2}aCWt?{@b3f>vP#|C3ubQ%Vn6~oU5iqu7>4lK zPWbT%-F9~a9};*K7JhM_j09q|kN^P^5CK!}p`RW+1u@(V-djG`iaeG3N2dNW*MIVe zf3VI5B6xnW(sP_ex*z_ZdHM&Q<<3_SAxm`Yqu@?R=EhlH>W(7k8vcJ~=^t1QKk2)G zeUch0%0Pr#9c2hDL>mnL6Mp_9zdQJQ8K>w^;H5@V7bqQDlCJ-)4wPD;Tantwr~kY2 zbpKId|5rLMjqYPT5@_B$_Lur*ISAh`xr(R>rb7Z9DM6ekX~!yO;(m4V$AxnrYy;NG zBU?;{N|>>B$v8;6U1T3nP<~uw4strRI))y!ep?yc{_Yvp zuF!?8rOs9yr%l8D$}6)$`t;WSAi(kO=o|X4c!D8^cTY{1LvFJ@;AgMbT*Sq0(fQP` zRA@diA@&M2(Js-73o`fQ3S;9iwJi?`hiavIW@>N*5)g2!xu=&;dRzc>?>#?ugnj56B7w~Qy7uh$}bxyjJ%B}5)lgDOh=&_Mnmo_?U zqKM?IkkA68N5x2B<7j(NGle`u^8;DcE^cpaw6?^Qm2yp^>vWOL=C}%hObt<267b-5 znr6GOY3|c?j|mFClRS|80#%fR#7?vYklJTdvaCm&U2jT(C+E!v8HY!LU1Gmx`>(CflR z$2>~;f%=|{H#?yfaTnp8l?|P&8LrrSddl@5LX?>kG((>IMH~wYMJo83i}SvG(*ZDN(@f-O4i_WZi6>8PfB?PT4o-U&9__Su!# z>_V+)cPEXjhYHIl<@QP<1G40oIb@V%RDyk@YF zKzx@B5-2@0zo4o-li3D6!s0_~=23|MDyK6;x%8-B=-7N2t`|htIPFfGcfc^16C$Tc zRZagEeJ?Lu_2nc&(h3O#!PDVFbp0LbhfeU5rHrFbSsS4DdaqMzD_&>7(6s--uUDln zpx&$`z-JkAGowP#f4#-M14EI0%t)X?K~sSoivQOuoozMfKT$yffsrpGc~E|PmF#gv z0^&~*C!`W2rWn88NP<#k5%<_GcCY%g*AV=CVLuaSJm1wkThiUva-;wGqV<#D{MF1k znV&DeQ?KyxZ{q)!{NHNx_kjI-w)taj|Nr(>$(i1u5W6;l26VvIZmWBW#+?VN9K#v( za697_BiV~pq>v-Kr<)B|9LZ9YTFtS(O*|}gb+RcK@8OSY&UV*`-Utc}Rd?q%I1PF} zm&6#RN;IKT`oR#~ac%o0D;8bt@T)+qcy3$~1CM7+era*(KfY(ot>+q{t~!@D0qiN- z^rfzbFCCSzEeIfiu)YTe5&ZEv9p3rtKE8JhZ}+%!l_`;~+9g`s86LjSdHAvG;iJdy{95gelB3q*q|zFkd)0Y4t65B?{wFEH1OqXm zUL)oq{1uKz&S#?uA4)b7>$l4GNds?|iYBtItqYbG_>`+n*E$H<_$VZ!? zDY2wQFM1Mb>h#zRCAm_yvE`t0dW5ir(>&R58KtkCoe-rd>EK41YoeaZr zG{Nl>-3@Sy)!5sZ`r-mFwkndn#G@IEUP6D}oSa$?m{nCV-EjM4E8guUS-v#dFO$({ z{bZeW@XL0A4sYoCy z>x^~m?1=7|SP0y0OH+C2+a0Qx9)17!Y4%Zny5#QArzFML`3XT4W(V{sI~?o;nG^Rh z>d~+N#R(MC&6t$gFHHg7T#k4r#k)pi6sDq5gd=_RN2A7l=OG zbg=OB%Hqb+n4{Cvwuc^&K1tCPQ%V=#RXJB*`Se2Sdm$hN(f)TI9_5YY#Uag|Zuq4W ztWrG@xoZh3+^=}6mX#8Crzg97Zl?JP_W%x;>TSRW`mj5eGQxLBhkk?IrnK3?V2r8YAQhV#5+b=j1TumzAEvkO#h#+t=*%~%K_h}%?Y|NHgxNaxa-LSYFcl_|) zwevIhF|j1L^gMdDjemYR3r67c8jm;Wwg+EAz$iRu>7N~tBLSMyhk02DCN$6UuJ8DN z*ZW&8|JM2^3%b- z6fkFgp0pL-czDA>>ePS~ZYqTjj=vts#FJ8Lcl~SpX>3srHE$9V;~M9_lQr8sNxS|y zht1d5a~Sl?&HnVuNsH zPfWdb_}nDN(Z6C~cAaQK#)&M|)Ag>FO>DbQV%ii3U7a+*zb567zdwuN_YzKUEV|s+ zVMaE5*DHK`!$3>@uxryOo`1Qjt~txZ^aUD=m%enlOPq(ZIR2w^mL1>uu(1{zpP`Qi z!K_c^w-4Xv%uX7aul092OB`&bw=!3bbhCfcM(<1Nc@RBPY%sUg1_t;XW|)pMioO^+ z1Pj-V?9-Si4H&QYR##PTpCw0*F0T=zIfZb4^p*Y;Hs-+KDR2E=2R_=kB)BO-o@NnWYY)(>7?3^oCWTNTrlyC2wOqKqO*JP91*?(}txONz|B}O8U(S`%VM%#dTv4c-!I~vPy5%dqo}rSjk$?Dk&|2fc_UtLE>TuBq zIfUf??CG)V1u=^<)wBP@G3DQV!8YIMc8a-a4D#(*Zs#3MTV zK;h9qlf(7+!*sK0{?xpRfUYk44d$di#sxJ$=2)RGeD}+FKegV!U&XnBPol73w2!@7 zPbW}ZRlbv0nRGyFV!y<8Whqur(JhP3-e$^gN;K|aaRZ6pgARTF+>OnJtip9#y2i0< zm9B(NDGxR8jwO9!N|>NveasNi$-O*=jo(Q^Kq5T#qL=$jF~fBPW#gIo%SQL_R8nnm z5y|G*0{E0yoGE#{(pA54lvFO}9~*yKi?>;*_4-hjV4pocP?)bD@z$e!=WXE5_TFLP z@z8?F@Mwuw2DZX{2F0u<{-Z6|%DPl_iJ8vP&uYpg7M%t{O-8w^45 zMfEm2FxhRF@I^Svq~i?hc2$kDfP|d(+gK;z!QL;+h{3YG27U563&ZY!=xdyu7MYCo z$R^KwNVL$bMrr4#Fgz+t{r6yZAVFPE9-#^ zvpCN=Kq+Y=oFCZRc1-t?j?jIsw`3mmYDD)#>rg)Sb&*xiZS%|x${Z!xK8L~@>|<#~ z)bpVN${L2$g?Fe96`6f{bhB)`t+>fwbKBZC?xK}}aRa}`eTcF53vdtciK+wf0n~$j zR24;`Nbg63o3GSNJ~_McFhfbxjS}t>KKpzzwS+re*e#$Lae7fzb{OEmZHzIYC#Gej zaU;4cU8RGb?y1zY1bXgq@0GeZd{YH0nCaBLC%lRu42wRE_gQqXyfWhtIkBsaqJKbd!T%d=eHOdZR{wrb!pBriQa5hjsk0k|%$X=NnqJ zc>W@imT1C6N+wv^j(+loi+fK8muIpTE*$YU2McQNmD_jI-Q5i({`%;KjdiE**W^-a zYQ0&MQC#lROQ_)Xp(X4g zDllnt6-c!IS>zF#xH+XSSbn>kqJv;+QgMO&ea9>649CcIt*UpG$bjBmnnuDFJP^T4W zg^JzI(8_mL>q#g}{C(Z^&Q+)J$8CNYn~-@;;^U)vjSq9K7;B=Sn`z;S5qR|R_{CIZ z<%a^(7G}8P=O(w_fg7l|=-JM?B46BfP@Vd`5_YbB+_9tfal-eZck&MCitsvfC7)@r zgS>zHK52vrYjFB@Q1zJxiT%Q3Y@GI2@0Ghk=L-h{b#|;;C1E?^_v?ul@GBjUPMdFk zxafWQYUV?9oyC*3uZcpES_Zdniyz);1SO~mYSOcG4XWY^s@v@#64fLG(KYdFf=o` z-&a(>T~r%*zvb&>k;2Uqo?y%FXwty4IuYX`RjpaS<-})<1fB>S zT?BN2Ct9e6ih7(7(qpp+Th|cx9WaJU_*$v<3>|%Ze3GkndgWBOh#y^^_6jhs)Wlt0px9K_gvL-^&}b>=nP9^ z;^Y(0WJVna#`W7VY20rXI(Zs2&)ldRVW|uKT5RW)FxUFTG^=|aPmfUWl})?bQuKj9 zOu*u8M;b1(I+kZq0sIPV^7pKxdO6OrRUo$E_gflo`F*X`?s6{bvdLv>t9rq&N(FzX z@$})Nu`a+R9BVS!jegg!iH$TJ{PL%=>)7)9nQC=%&-0o3gf9O6Y1Py;rT0EWXUPe< zE-FW?X%+rHMCOlIX)$(iJ0kc`N_f8CNzqFT&A!9@m_SUoi*}j4TSmA~<6zo=bZ%Nm zXQ;@?o8?N5;W(eh-lt$wQs>oF>5VL5<}oMv#Po=$+8WTFjQmdq`fK+f+~T%+;;-sm zB#Iqf^*CW{WlX{cZRQ2!hk~auMM(zq8&AB^ak8l&>5M=4BoPBJC-*A_kb>)4QwA1a zC3&IHt3KE;Lg2MwiheT7lca$6h>-v{rBuQG_t?#OS|0(Q1LmXRTA&L&L%p~K9^ozx zLjnUgMssY|z-{kQK76bhJec)-UHg~gK-_a7F2?1YDc?_j^5za+SkCmf+Grmn@MU7; z^Mp!)>_*wAByFnDi4!-u0Ck*>ve13hyt9t~=VIV^sB$(V8L zQRk8cMf_qd%=0R5QG>LS4T}y??BBRa$Xe~4Y5$ULyD@A_T)j}U&|xB>xV-%_ZbMXn zYo2Dqf@QqoZjmgzRvIO<`v94eW^BDo!THURzR1c#T+1W%k%J(!S;Kb@lC*y1YR?}% zA4r#MD`C>2z7-ao{gpA%r1yE4^U76hz0%u3{QOJmv==-0hgI8}_ZzrO{XCF>F76w9 zD)#zeZiWbfp((Tc_m5=hoD@ili|Z;{ca4`(AnA#kG-pzXA#>vMfJF(qmSFDf*%x@# z^P6m1d-KEmfinD?ZZ14z>@G8Q)$#Hc#11d8(pO)Hlr*;b3q7va+WFkquAk!j*wyPS zND^BwYQx|8O`J2zI?eEmb@JkwtfB)M0Gs*$3FU#9A8BSlPGrL)hSSVgHP{gYwLlu{92)Es)*iQ~_`oy>Rws$l~tHnem(ot0lweqGAq@Ha#d` zfKV7hxMv|F)W14*%Zv`|_^C|w?txg4_UG?2G-6uzOf`lqk^AGH)~oD4y7KY|eJor| z*}FzGe%#ez#<`>Mcza!@=0jD(4(-#zso8IbM^pk2x##B{*BwZb2`a|$-92p!SVO1h zm8UZTcncb{1BG@34x{qU)kn`g=Qjrjop+oJu(camWy~a6bF^)pG!RiHmrNEkbA&SS|}mnnMDGpIzepX&<*wl(uia7%_dfJ7$(KBxW8aMZhEOS$eKGv|Jat zEQReCQ&Hy~&2FC=+dimhz&U)ftKPXn$I*m>uQ41b_iA;l)+f2(o8Y0Ze|<6PGd|UP zmhQY5CT7)E@;i~;(w!e!8;q0Zt0Ulc!-Ms{+Y^IuQUzCsLvzw`#i)y{B90Wbq!I3R zJ+o7e<(G=#Oue!C3Sxt#r9mT=G>WH3%|fS2;A~O3QCdQ!7FG8~O=UmAY*f+cJSvRn z1!Yz9K%T+vrD{l+ErRr`&4qtd;a;6m)~IbI5}JVi9{!1p~z(`_B-cGlT00!_g=Y6bMfU-~zfz3Gn6pKc>$ zYaM@qC08O9sMs?r>5*gSQkjwK;;8fEf#!=Dc*h#cw$2H*=IaE_lq2qB17;}$Tt7M1_A^}w~syr6UhGBMQeBA zjnUS*Te|*wJDnv+wh;$GX6~0e-=6U*jsP2<@*6>x;G3#jCspe1hrWIdJzOQl_19@F zqeJ53%~qr~R^~D41tcpn@JneACFCc#^LJd*UccJydffe0yi)AZEc^NKNiEi6eU;ls z)zi7l+Hby`j4AkUb-+*NRs z=ksK12s(r3sjhzdPYc;U@jOcy{8tW|^SD54B#Bx{9+SHHmM+F=M478-lkZTODctvVB)Qa+La%@N@ut3FJ<=$};r!F@k23cIv_> z<8$_JDy&x+;N+ycyP2tMP(mmh_vsdD%0C&kSUn>HIfJE)(JpqO(!h7sH2p*p2o9fu zJ5didx)LRd2Zn%vZD+QFc3FZ6J56f-jeNG9Hnzjxb^nj3=x_Q@_aAisM_lyxaR>i> z%>4+){x$Bjepi4$VzIxCJEi~o+l5L9B&oROM1NOdJ2CVUvr-T~B~Y3-KA>V$e9Z*W z^8;`o+W-2m$Qaeu^4IDuX~lGJD+4s0I+25!_Zc49moOT=zO%YWA1j0QrsxZQ%vF6} zH5=GFZ&m?jgz)cr@ozb`Wg4<`bpYP1<@+8~UES103BBKf^uF5a9EakH+fNA7M^QlN z_B-Lt759NVZtM`y=?`$e7=|zIYPOtUtrh+PYg{-;z|7$X;NPr~Dglo_|~LgAZN zvX03LphcV}q@E!($amK0Ki|Om&5Rh_vErLm4#LYVK8)1MSoo1^)W7^@v=B)nE&i0N zWSw^Oh44+B_uqih=k`S-+`iny+(sq>(^F*jYlJo4(c;mBBxUVJsSsUXw)-NbL#f5C z8r5T!D*Ud5$HoEJG}^>gWUq_coETzeVQbgt)^3y?70YZW&%=cue8h!UZm7EW4on+#8)t{PM}bzy8E z&dJ$uDP{|96q~+SJgoAE8#^4)uAiwn`71><2p@xSiBg7PF54ss_2GBsu=6^<_$tw* z>p0m^JUro2%*@CF{{M%)?+k0I+tv+&qJkm_(g_`^G$rHP2B^b(|pNRwWJNRcie zARq*!cadJBROub0Luk?yqy$LfUGB5LcJAJ1@AKSy%02h{!NXc}tt4~JHRhb7yyG25 z>=_e!py>&vUmIQKsJLX@g$Y9|hlVi`PmMSP)%1UWXdPz_ z!#wWcTziVWZwm<&0^rEfntq;z&F|OK%V-4@biGY9q^+$j#~&|3afV1b#5dVAVM|0@n}Mmy>@s^yDByF#j6;~ zzy$_#vH;I{-QkTB3EX|0!S?a&l! zY-3Rf{sVO8XP;hRozdwx*u=*|2(9)A+_E%UB?yRZ;R5C~2kmp}%Nolnnu4~q%-`}X zaXu``yBGZM>kYmQBa%<0McunTxpcP~!t^|zcN%-=J1m>8iXH`<2N(0x!PS%8;t-Mj z6FU=^(R^VFoIWB6J8kaD$KTbP622HoA9re*M`??(ZOZl5uHPbCT0&-7DmRR9SH-HR znuUU?%QSkqt}iE&N2W%5;ieAG_v86ft%px+9SFQtrR6}h>~-%r!5i>|WpqP7Px}UC ztH`uH%BEw;ujhGhu%`m-Pb6jqI-QtN+s>{B{9D@{KR|yUGdY&(F$aXm89d6HnI5Ey z1P+naG}P|iua^1&g5TfbG1JponN*I!sPgxKbiOQ6W4Dl|@%@?r1`yKW^jB2oAMl#E z@y~NCe%$L`fmqyI>0{m^iM^bcq8J9+U{2i`r*k$E4a|(>5 z^T5+hKw9w0`4(_`|%pBA4)y! zXSpDBknI4YS<`yJ9oD?OAjlJ^;~#q}aw=0Zg+mc^d3`xa-pDZVqqhSpz)JxcHXGT_R4%@F(?xH>1l=ZW#qPBI& z)K=Kp9Qi==E~T;%8lo7Gs>v;2;W)p**eJR z|JNB?w-%v1-hWTp)>5uWGOC1t`O}CK1dM+ts1$YcT%mx4b0WFBZAgSqhOci>BJ`9$fh> zqz1U0>0Pt4MB4JJ>ih+Hmfmt>vxRIgLYUV%wt$sH{5@Zd3x< z4RKesoS0b7y(bA3g**|Yjp@6tP@sCm#d`nvzrMBJ=t=5L2 z?NqdamTSV*;7c^34XQB)+UGl#A7;HP)mjC!HSjGsT*wU(_K|$w_Fi&#j^b5D!ithr zb&Y7o50F}d6}inS8RbDyroL2sq_M2P^wDHknH{N7FYUR=p^tgpry0$o^gob~yt}x6 zteE51gQ7HJqc*go*?An@$`lgsDV0$Q8*I#y8fs@W3+vLTKI1Bwr6SPa*K@1z-5Wc< zti0KSZ+_3b-7*_}<4TDAOsxH3KH$vB)fPT&c#Z3gB~<0eV)%&+Z~SUdaWOnE7@ zU9MKFw*535K1ZrR4U^G*<>Ty&mbH^@_T$z=EYLOBIAp1&873L1PV(r~#AF0q$of+6 z%+B{t2dW=bO7Qeu=?i>Qizt=yfhhSpsW;K=~b2s1F z$$cNoAJZ*MEcZqVX+ceKRP%|!a@GqQH(X|YO-cIGTzUSJGNTMy`*t!(-kugZm2$s2@8w0tJ)bYgymX9 zRX3xB#5)Xb&l%m0(O=g=>j#Dn1Vvd+6U~FcJ$&rII4A}Ap~gR4N|R%EzXEF$x7c0fM6oDcK~35@__8!gfAk#D)+6AFYso|w`#Ds zd$sP~?YYiMc3oNDS9#C!_$AaVvjFZa@S3s;`-~h{C6Q9LHw}>iNU`LUV?DQpN>>wC z5NGpyv-W$z*V-k*rWgD$K3+5!>xN|`4pZ|ezflT~dob-=8h++`&Sv~LBUoqdoSS4}bcL7)m9VKI31 z+T#OX$UNuM?d~Lm!89I;!ps7yJ4N<@DW)pj6}uq55wdxIH+30tPrj<@W!$#9)k zr|me81Z9`@$Bbv^vT5zeOC`6Lk_h+drOU(IckFvzHS1B%ZGB=k=#eK`qxHtFny&U8 z06i&%i%o;jya@d_RPoY*yK6&Bn@zI<~{yI`6f6H8~j&7~saa1@Q zwmY0@Ao(?Tc9ufb9LQuc3!^*x%Ada=?-NjDmeikrlvek$`)FE#4q$S>_%#vh*F-^M z$zKn3FSKz+(rOvJMgSBvf7Lh?(s13FQnVimd;UaspaEQDD@89g=^2Ke(yU2l1bqyo zDS7o|KH!EtJPDVdzR|>l^TsTyV%buiv!QKv`H9u_LGwv>Ov)ZTx>Y20QCWqvfi3J+ zTOqtGGj=3x1|5dJCd~Q$z49aMQprAf{FfyQrx<9~caOr)$tnSI7iC&R~XsV8KocGt){Gfop>8`;nQvMl}NhBky}ewCy$Xib3RPcr;VD35U3fz_iB1uGEanu#-dCyZu;C_D%#NN_3e zC14%Af%jw!>Ss< z-#|5wYHidR+U6d_D@q}+L{v-b%-PpOO%g)C3uVS+sXQ_6jR)=O3iSGPD#2y!b?grC zJI8O^vWj93Lte-|27=BP@K-To#pu-A&Atj?s*NksGKLyrbH?2YS>LBR$R|?SAhWlF zRjf!J?#aGjM$mF&?jtFDv`amptul8fU5>RAV$5?Vjn#x&6(t!&{NK#n8}1ZHvKBnG zrF2W|fz#32J>`r1^1;<8U0gjeCn|drxerIYexs#iZ~BjReXr6_s3V~{D#YghM!dp? z1C|k<`h^`rgn=e8z70A~1x#bycg<{%iJWiy9|=k8cYdF{m(I%Xjldm66ZVO&Xz^hc zLnT_>n@|6N3iNw*=>L^ta&ffCIS+W-Sg1MLS9t14^_^Pty5O4w(s}xH!M<1{DE?~y z%f-@{5(qr~6arhf@2{4LG+4`wD%N=3Y$x3L&UJU44l1e2ds30K48~+CP$33VG662- zCP0_@$-#79eEyJdt`0(^*h1k(y*g-}034bv8nL?6^j%~#LIi&tJsk~%Z-W>y-o(He z@DI@GgSnqHP+CZG)HjX6A0P}Ah=8^ij@`%%gH$>}zVAXk5Ef4nt0R6(o{*p2o7?04 z2E0rWU^@a>rkW#g@;^Yg?V|xS%ZUR~(xj}7MT<}v3dC7sPg+j604-G^^N=$bnL7b< zi-8@xoU?N{6%=)Kgp)Js#S>GI{AqP(n4MdO@O%9?Zl(-=mCu}%9BZYv`xUw4V`2y| zfrsmV13BFK8J=YY6MX=S1_dM1l`4^nK|Z)3j&?(cgj}4~?{BR9mQMNmn`sfIK!?9C zQxQ%yF~we2Nx4qQRe=6oMeIx>f?ypij_FZ6=L-ieo>u#}$+G`}4L9=3iu$)apZ`qT zf4q0J>@BU!VfqgcKbpva3)pD(Bg4{%ZpND|sts?Kyw^R+o)1k`JmB#x%vS5OrJkwh z;@{7Fa51au-YTqC#Yd}=3VR-Zx)C>w^*Y`*oWR2hi{eDBsG%B^rpWCMX8x-O4?zVe zOm&kWVqmQp5X-LBpWeqkZojCc_{!GXfbz8qAw{SPQsHrl^N3r9i6dIIzDfuP@|Vvb z{^cWpBvW{!I|vt($BC3BfJ00duO4LyDB+jzh%ZRoTRAEMY4?uG9y#!7=EM=*???ao z1K|Jt8)+7k5CeB1;9aW!i(f#|NRB-(eQhV1=m$ia9DMWuZ`d%94)!_zr}wc?3d-as zqBo=DO&%%f7JG&Az2RC;L=55El9e)B&sj;aV;L)*VQLCI;GoRj3-~mLqrp?nHC32e z)u2Ms*z2&?FXUv=-lI=yMqN$}^R*Sed7||hs7wvRwr=zyq|e!>CY>yw@5-W6 z-5l)zQrymD{103>|KS2})Ca5-;8;KK7hR3tja)@ZA@T`GU&bT{`%hIBs`O;NfoD%Zih}`R$3i!KU`=}pR_*#Qx8I|aN-N(EnDvB@mBy2oFH@9tckFIlvPZ`Z?9Hd z{=8DW+%wn{&KUGWjr-Bk(=HaeGxc`j^YqP(5~)n$aPPdTd`sp?HIWAY-Ch{Nl_g-{ z)7RUAb&SuYqv{`+ed87Tgq&w9|lPO`Wjw zVxF+y(R~~?%Hd(p6EMqQ7ugUk5qsprU*%!mf8I&qDxL)gThO3tb4#|1Z)>VghZ*?g zFxc9;#Dq`P%&f(x)xf0>U!Un;FiYMM( z6JBoCS!;OJo%NIH@%2*S(vQUReuE|o!xhn&Yz+EC7b-ps`iQzoyjlqxlCMtKU@~|w z8floopm1*_biFBpfqQE^hbdBo_W4RmANB`_(oGNxu4Pe+q zHvDrJo(|LXizG(^^VvC}?pWsg4m6U92Ns+#zNjO1 zj}`66G8&%#?PL`*I_ZlH!CO!hyd4($qVMG*b0PikmYmwM{DziwNYU z)0t5>(l{AD=-i^sV+RLfshE>~fb6weObhRcIz?{vT6!96k8M}Z7%G?e=8`OYTz)gw zYJM$WO>Od^DW)-gXEmpP$x}L{=^QM1HKIYu8m)PHV-`GIQG8P*c5HIl-u}sH7p<4} zTjJBIA!a3?YJ6g8&A&F>JmJC1jLA`%yLvn2@n$-1am}en%xazbsYjM}dc8gJ(R z+L6bqSw}OdL1RIKVo|pZObtIyLt5Kb=Z#5=Kj`LYn%y{6(8@SFy={IIRN!CaW#Nv% zBzW8&|FpL7W!uHOBVaEwywK*f3Ant#v)23W1Jy~zAd787ds;t4>&=7b1)sHwZwM%U zn>6?=U6i#wI=W5J-bc8`Sk&J2BsAXW8%iD(n7G${H$JYsDs|J(Y`Rq_H(|z7EzrJ; zP410jE^{I~3tJ{Ti(8&^JAdyU1>D=|Ss-1|42iBjZIIcG7zJJMmI!$sy3oQ5ReH4x zd!P8Um|3IH72>CG4$;YqQ6ao=`2iyEMm65wD;31?{G0}#!3U=SF#KM!%)a;#s>i6C zu#$^It{^gNbx(>#Fr{CB+|NbX=6?iK{hxTfHdTcP;l@K=mn8psSQw1{3p0=^jXF)WBep2E3qq%l_$ z2G28?o}2RhIC)KL*}pcrH&XA4#zxmRi^X&CWP;Kd#0GM45_SxICHJ(5V;FxYa}v;( z%wZp2$cL>z`vJ165e%=@nI(%fyY+ksaUPkB67XV@9V*t);68@n5Df*+PKjchez7yS zQZ0oWIKx7ZkXAQ?3(IlqlU3zB@zYx8p3$gUvDqq$zvNl}T#MGR>+6mG#Qs#@=K(f1 zyg_!p_c_%osaZA~B(!nFUQ#xwPU=HS-q>Zi0k`kLjn(qg4u1AY_rDR z1U)X(bt7@;7PQW0^{dcsQC8zyM#w_(ZRaDU#_<60(n9pGNN`<0o`ZM=W84(Jm?|}_ zIy|mZoruDg;=o4{;X?Ouw0Tsq-~KLwEK#JvUP z7UP=O=}grQ2nAwUkx3i2MdTw`#<@%zd^kw$3!!CvdMUZt> zfEq~toDw(bkq*u_iq4#;P(yFIy;(f-M(2dYFy!5~!khS$7tR>Sf=Q;h$vTm_ys6>s zPO^KD`v|%`K{)9AbA}}k*G>bJSudJd3;2x(O1b6bs$-aKLippKXpeFZ>s$9Y{VS@nNTRQjMr41 zZF(QMu`ba215{RwSZ!P-o-smTyCAmxkl%q| z#1;X2R_kA#?lb%VT}RknqLPA7_&c|`YJ^<|(AGVm|5t&>XqY=;8Yg_A{B<V(Xje6Q=Uyc6wAQ>Qb-!#l zs7F5Qh~?Q9q8r~A3z&zG2mhJm-v8by17(dt&S|1REdfKoRx4El{7j_A;HO5b5r`$7 zQGhIF2tfdieMO*EM*Xa%#Bt(#mOwDC(R`Ik8k^fT7Xqddrs;1xUb;e0Q?egIC0MWa z$(-fhCdsDi=hcC6#RUi>PPc=}`k*6l|EjCN!#0Z6iOCk6{sYDbH(NkX{rB*uALF#J z$hK?Sa!Mc3yTp~{Rm0c2Im^1TddgTSdWMG#Brm?2HJTsDkM6_45pH#Man%!&0)~Ng zxBMQJwOc52jobjSW%7-T@7x@JS>ae~cMn@MW8nBWVY(RZQnxpIjPGxK9!*zhCVuu& zJa>NI0|7saz0tjm{Nu(#IMag{xf+EV)gNGES3XHp(~Aj;DxU*gap$NfzvzyK?#gMYmJ0`$><0-Z;_(cp^I_yLpl66PL=hbM~H(v*SvGvgA|QfiZ| z(WHb*OB!8kS$yZH1LT$Y4Pt-krxe=*h-;v^C1S&TG^KTxRllO%Jb&t(Yo*l(sHC_{ zUV!rT?B!f6o>rKQ+3F)$QY$_w&iAL>7|ik z5jpvJ5t6klyK6Gr$n@E7#~R1oq%&#iJoWo%`QtiyYiCH&$QDhyb%9Kr zd7FVrvEO>n2ZPx=64_5IUp+B%Bsai_P^X$8A`=aeFZWWF;dw4F3-7{{?wA~!dwIKp zena8Ui*niYb{D^&HT&GY(Cu?}$Vby|al@ad-rJ4@sdBAA|E^g@_1Q#a<}<y-Vf$v-=yk9}1mot;eZyvo#=YO0-(m(r*0FXur8nI+6Ks}XUz6N$sZOfce-Te90 zoAu2VnQV64vsFV@nhu@=;8%G30|eDY z9zPa(BF{e;2w6Ih*jNXw@q3mO=v#BuXtg->pzI@*O;c2x~ zg5_BboUJ9F=$~yp)O=iV`NiDNAZ5K4;hhgx9!~l3JeaSQX?{QgjwAL9waTW!a}C4a z8GEXIw0RSFf7>`@>5=a9H$zS+T?ZV3bHu^hMOT6HRBTfz-=E5sT-9(AZuXtCsiueQaKm~FeF}x+V^req^ZZ|B)=0LhGGVqbH{DoihPzG8!? zEr*g+(~V_15ync4?El zR;eLU=Qne2Nt0@ZycB7%1!sCU1%%Hhwm6AEu zePEscd)fv6-_fOyzv|auwWHNCS`Hm>GMWqTlM^UhB>M6Jo=T=V1uD95w5+~^%LU~w zk|gWu_)A{p8~~3*W%|%N!|e!BwYul(<)Yt;B(c096`tdRw+M^zV>fA!#mdO2x32-H zp;!+DF(6^?kN|0KM42nhz1T(Q=i&j3M$ZorHIVlM1eb9gtwSED7MTVj{YZ&^R%*JY zm~;$rFDzrx!isFW#dN>jIc;Np^%K=O9~QOky(8`sSMSQ*rN+0XpRy_LE-E$)-{Ol^ zTXzJp)dPV}z7RlGIMj_0LLr;jvMX1UvbkSrLwP}HNT((8=QkBN` z(B_m%-&343e|D%xmt$C3$>I7T%%rnv?HpR3^Z`~kWM71G*LA@=WEKJ zHyu6X3;QlFSidq?iuB|4NI4H;BzE(WPOlx6ssbs%aV>Luv;YhWwMLXcG^;J_9G^Et z%#-+jMQ+wc=*y5AsZzo9Mqc;v;XqAOK{)*-9G-Cp?*)=rw<@PRT=}eYG^_^;t?~ zuifXKlG{*V;Jtx?NBtc5=sygC+QURuR1KeSu>c8YOGX}K+%%yLw_i(yw0f8H^Vl3 zJ?o6DmFj3_M4;d;i0AYV&=mndqy5W3T>isAoSXWWfw&i#FerY!BxG-Sc%&E7!bU&P zz?!MF07%0mA*z`^;cmEhXK-7~;0nAxb{{XS;w@PpQjb8?`8-KooCEy*bx9GGEJ$jOb&MMk+b)A@U zaYp+U8}t=tTf2J8Dje^Bm&z-007eW*j8If}_$f9jcVoMN~z)O@q z?u7vFP|D`tzBzM3v;5@c27nn!^8GgPz6`a%4aBPnr-e{E$B0Pq@8?JK&#$E_8YWsE zW?F>-A%0-|0HyQylJwWd_$f;AZ%!aJ3gw!>TZ~K=U?$RNQUNpe(G(HD!Q%%1G7$jv z>>3dJM-1a_4jyk3=l|?+`=4VB#M%Coia%%GpKHaR>+zpE$S+&^pS$$0D(atl#jlFq ze~MH@+5W-kFM3^d&~iH2I_5bQ`_|K# z$y%ov+k}G2)CptNzDD#;CVp^4ONnj?dG8-&B>c+PqJXT%SO@KCn73Z`ux@7q+X?8D z*LLHRsAN>j^3YtexM=ib7k5P31RSRXD^)bHZJ)@+?j7wUuJ z+IfGeL(DqL-%r6o>2|oWy7R7(eofRa{qB%)Nv_2^F4H}Gl`iky8#~Z!qRg0`kKsJQ z{L^F~YN3=;GU`P-_#;mbwf@vhc)qZ(>B}$Q(=^Ij{W+6B+~&-okhdd`-wC6~u!i zkPEMaGdlouW4e;J<&u4bOp_1Om-6SOQzQLzKqt}$h;z~P3mJ-4fp+`=|cuo(U71?TD;beofN z?LxXOkPG<7rE}a&QAnZv?2>p%RA{BzgRD@&PVx3)pYiLb&z~bTb@ZG~XTpEpQTFWR z3w*#YJ=wif1lIQ%im$FeDqqvQV9Q2_(^^n3ef7{}at7BA5GN~Ut{ps2N>r|{nPI7x zri#^Z42or#2&dfkLDuWGNgI&2Aw$N}t|vaJ9LC!%80u|S3V7%1@QyxPAQ37twfX_l zcMN^CbU(o{BlrgSs)+{aUa@cdJ}Ni9)S;*I34H&1%^QGgz>M}E)LQs6uj^lU-Tz_A z!M`ibLZXHhCfB;3PCj`5`{l7{QF$AZy~jX9W{;);$d|SsXaL&%!Ajyl!|!j@ymO1{ z{cDz?fxqPCs%=Iel)i~q)DJ0O$HVJ+I&Kni^oI*C8Dju{=-`Pl7~jrK$p@_e}PDRTp6P%r3r{rmTe(SOt@C^u5nwIk?)Nah$8RNO(Mzx|HV+;KcG&@sT& zFe@53?eMGQt9&hntOghmLqxBjU(EzNS&7i%MOAI`1sTS z$$zS7{yGu(8+)@0+Rr!p??gCe*89Vi3xQB&KJ<7EObosX`el~T`i2b?Jyd?yS}#`u z>HPO=rZZU?8Z|%t^p<=34Xv3^l9}2-3~!{A-~zye@6dvN>;CWNp#FP*f&a=2;u(LC zhTqBTUGRo5WCO@B9k}v;AhKGWFslO1n4in>)*Z-k`7M?a-Z6~_0#4`6SGet17BpO- zzb!Sj%%p(QcM4JW1JqUT^&hq*{wjA@f03b|3viL(7Ri?vkewLaid}^s5Xmi15I|14 z^h8@2z>TxD5bM+dYn3m zd!ir}6}G=6T$AFPj6;}tHy8SU1IK6uC&5KDVGBJJgF=@9gSUpJJ(ep@1X%c^E1VX@`4N!PJ&XYfRJjat0D zx(WAvp9xC8+ZiPHRxF-CB%dS)dLs9;f&C$u{Mz%<4MT7Wtu7ENpjIHmivzWn5u`x1 zxZ%n(;jL%Wo=>ljJyaC_66mlzP0c&eI{h)GY-;J%(_m@5=ZU0`_)u}Yi)Gpw(pF&$ zrsdS0K%0S{!PC{3LL5W~?|=4u`3CWJ$#VbgBoP(7GT7YP9pjL@Sa!5OvJ!>Y{g(Iw zWwjG*B7j3Kf+=mUJfDOyu@94pm1I42jolrz+HF>&%+Y97ZHstm4?3^-WqGrS(nqQu zm&(`DGT&>tnS7hxpnTMC)FMVcuQuq=H;6Vt=h2f7?b})A+}QIn3gbtN%_(m@6Q;oD zwV>WWa#neNOaH6c)8U3#A3Lc`cTbtSWwuVY?{a8!^r(KkE_Bs#s<~=_QTqjB+(9rQ zwTT4}q_jAd;%+j@EBCFOcH+&Y{nUI%@N49ll-);KigM>m&$S&L*L5R!y1KG&Kh{tmv<5k8GC3{;F z=5YyM*$1PQveH!*qw%w&bELg`UnoCWvp>JC%1F+|`Qh9DN#bMSKb81+J~t215!6p` zMi9tGyMA{vaM}w{Q?J?U%Zl4TC?&6UsY8Y;}si_g^~_Q_Crt7nj6JTeIu?y3hQJ6lPlM< zVCfuMqi=)a)#lkgSykA83Woon)oAAe#*_n~H&7A%M@U{QMw)$ZX*!Q3eX)EA3jUe{?7vXWb0$egBiyQ`qoL^+S|tzJ|iJ{0*lgo-!v%$f;Dz3&~3+Ikve zXhYr_INp;gk>RRn>XLPSX&xT_e#RsEbKPM`kv`4plMi*3p;_GQo@k3lt*34Wcz)tz zjr95GcLgZ0cousl2n`OVSnxiwlLO~?xP61uyAKphf0c`}cx5=Hfa`QR3={28yv0a< z@D`US;t##e#xlG`6cP!e|BSMPW!Z6^C}x~!PQ8q{Z|B#0GLPJV_}hWYO4{6NtdJB40i^y@b4_x&UIxB_?$Spj75MIc*|bo&>W z?+q3gO-{}!4NMwlB`-`c%orIPwOtN)aW6}?riG?Qm6l{j;$K;(I=^Yb<2?vgA0WB2 z*^gtWVn%rO?tmmSit4RHF(*P)_+qu4gD1?1!<=m@#dGBD^{lN#Zfta}5M-p9;1UOH zr2sG9);UaWn~5N55O0?~y{^FSaM8Bz!Yp!O17=oPttM2-u+&)R<{oJsQ@oqUYZn7* zJG1%)wA;wH2yKHh`VGiL2jd|NJC|+7>g4=HRtm*8Mz>IE{)5LPR#ZTqk+-7rK zyQ9;!WGb&Ui*dROh}NC6w#OnJ3>9Cu@eXMC8e~Cen8s$@EhSG5PNvn>!v&Lg6UCl; zBZlnc!P*&9>`ri#dSdG#eKHz0_>yBk%syPB^5dGWXysBu*e+kZ;MR9h znl8mIw7(40A581xgzkNgxQKs*RY)Wcv$K;n#u?e{t{KEy)i8Y)Gs;^|^FaH!Q z{e|Q6Y50cBQTIYnX*)r)9fC>rIGB(~W!vuZ=E^o!qnI_6ugJ42c{5poA+LLUtwt%u zX5!3%s_n6q|M~Ba7g?Q&G>GyGOgkrF0yO0S=Dyv3+=q0ZD!IAQ=B4d9tH2J#&JU;* zL^e^VgJ>c5XT)s?3TKY01bOiQ@E|rAI{H;eb6wJKNkx17y%06Bw-xe8drHKAdahEUOntmNa3+v+L|Mv z$E{uu4?)D=?K9)oW^6xaA|Ks~pl*1&Fz0XJ5bi^VX0=B99Ou+#xAA6{YYqzwkxy+E zZws-Jvc_m^my)R5;g<_k)g}?RSbieBkqrI3L$6q5Te`SIUlm~~~-xT1)b@K^0S*tpQ&N+7V_-qwCK&bn0dFQR0&<%;~d+=5_)>H(oM9nu_=`)fzh;MFUw)>$% zVbKbs~i-Wpfks3}(-9hiaz> z%f?c_6yqX`U)p~%?}l+5G5WWovm#c>qHIV@ zO5klWZ3odg5_QIJ#>ZnV%~UgCr;s}e1CHdmerZ`Qm3_DrBF*VxgT)qmlx>L6a$PXZ z#d$C3+|qlX=;pdMVp(=kUGbYL=@_4nMKKjmqYvX88Oevs76;OjYv(AVFG(d=vvJ30 zjC^$vqP-g7M$T$DKAi3Hge0-p_A<=CvOV*3Z5`Zo*8D<6JgcLl*F|`@oq~wa{)moS zom{MjIGGYnl-fMvg10Crf=#iM3se1a$EBaP8{wR7IAzeWawL{n4&kHNO*9qD+S7`* ze?ziieuKG29^0$?+rl}TTnr;-qc*aT$BgMzsYEXPZNz!J{(ws_q?PGKP2Goj8V@%i zPQ$nRLa%$B7(X^%W1*hA7D(JSjErQssU&OCpu5oD3SbdtJ^F^OxkkV8V-M(m=&P{Z zccOxssjNurDy33g}#dw9uqgU=*YTBYuA z1bEk{6v9*G4E3{KWPUe|vU-;i86$gkahg$(&r^&#Iyl1`i_jawi+UeKUzu8movXv% zt=4sqt<~EKs*G^r3Hs>iRM5d4D>v9q_u%5ZJn1}rOLQ25%Euku>)v{-oHxeCUXy@T z7(_$2G_rs~iUpW2F`<0cF9N#sZ!2rx0G2yazIN1PM{8uBM|E?uLUxX=3Fj!^kc2Oj zM}_`g4dUZUyf8IyqE;~4F#YwkT%dAZPx`gpk(~VESrD6EX z^FbA1o@j6Vtl$NEpF%sGtL8nLNo0>eZYA@Ek{urE3%Ttx_ZA2BX-vgifE70d3#3x6d#^T?2>bo+$%Bf?oovGp05F8gNS8`iJF{~7*Phc7&Mj;b^p}i5ojb)yCo83p?oxNd_W9?D%&JzfEk6zb7r%5LyVO}TlN?S}RvkI+-9gZF$kLXLU; z#VU*MX^1>X*k#st;L!>UqqVj&AMi<^_ez^HBJIbCL&sdh^*P4(j*3b-Z%$(xoW5jX zD?Y5tP$Qk@Sg(|^_k(=QlDtm_i%0Ov?XSgdvI4U5>TJtYPA(%G-DJCfWW zmA{Ghhuml|$BHjr$EM zR{&!ix9*)qhsfi^5I?eh`Ho1lLAx0_Ssw)(YLcE08B~a=J10#?TlwO>0;m zQh0?~-=8({g#v9q8udaZ+FyZZ?NEjf&plq(J35->+;Na6v@i6)yEQZ?DC-u{C=6_V zN$i&VH_}BE8FBanK&*{eND?9P+Fr6z^H|jZKxHqX7>lt;*a7SVol9}Gf;Dp49M%r7 zFzANqt%mXiz3gD8EV@ZX{aR(LNj|(8d}(hdJdJrsPA*L}QE}LnJn_j$rQM@;W8Rgv zXUkJ853`D&Z;oHM)N=RjWNT`pUwb;h4v>DTVa^z9-)LT{2+R34uB&tDossGXRrOV( z=R5P|{cjyn@5Zxq(>9Yy(`rm#YDqqE zIr4k%laqnXd+(4RcSj$8gY2Eo&(wLM?Kb-fq=${$=%Azg&Aa4(1NurPy0uYevQIOF z$t^rjbsN0|m;U~hv*b*_P~|Lj$Dkf#go}$dq>&$60U}d)xozDOtdWPK`csnK$ysiz zx-(Lt10Rp9ZDY^gOs7)Bm7myDekL+cYVByoO5UxN;hZbg02SR{kHL$NI%|oYg}Q(yhbvES^ePeqZ=H zkny=s|CR*FGN2Fm3Hq1=D930#q!3pPg`AZW9yT_FJ)|JRUS6+G7b}=+v36zYUP%{% zQF4q_QGPrpbywj7?y@Hq{sbd^(9sUz6*3^Mz=}pwEM(>wtc zobl`^^Xma$sEiIt?r1glocDGBttB^QTgnF`EnQhhOTKKHMd?NkK4y%0Ft6qJY=8Zh zLgi2ATv0LnQJng4c0=%(Vds;loI#8eZ}-4gZ?NT7kAv37tp4^|>wk0Z4E(sS49+b> zL`udlsmP|$N8O}NlS*J!xh=jeyI2H3l^>z@hadz>U6BQHtYvTE3@*Ls!P2XRC+DA# z9=?rQ{jj&XHu5{y^{HMzOONjd@wj;+Ed~;nrFjl#sE*YP^c?*8+Hq7IAu+E(+(3WA*hGVS z@H5Q?|CxN{_|(+5r;Q2%DoA3`A`xH))B-gwCBq|NvZbYo7xQ{hsd4OuEHv0y=i#~N ztud^~+spoJVzqMboK3i>+KV6Um(p~j-J{H6_VpxKZ#qa2n7&TKsScbJkfJiOXRQPK zoDW9>pNo}I^t&!Z2R6x7VpLjHCHg7W>+Z^gVn%bKEsKpOXXoBZqQFYB+NZ| z&CISo{+qYtDHi71z^sA@ii!)+hZ>f66+q?DxV^hhYnY^~8tY`=ec(i?+R<%{izagc zeK+x4n2QFp0@I2DFNsT8q(EJ;^<%?s=bPtr=1fk^=-XaG*mOOOQswc^A98!OkSdqm z6`;uQWe*$#pl#)xFD7Af4X~83+!+rOhf6cIQiqQ?>iRwmGlU$ARh&^=A!XM&pUdGK zp;P?{Ibpbv+nh?#QkRgsV9W+(S#ykWDl}|aQ5~l=^oi-@FAPv@-zsp58S+=i{V9dN z{QWnQMmI|(;U)gOPCkFoHheky4Bp^nN7}V9NnC^Sn8{@F2D@`)Z8yC)xo0= zC)$I%cB}DxHB$@^x!8Y}oR6S2CV=FEm&9e6mr6Fr4F zgXM3}-W+Mg&ffL;lJq9s>Z;?z#nuemXn{#3`X}8_&m)DxGcR+6R*;#7%#lxteSE_! zd@4^VF-d)X#~-4UbvQf^Q^4eS%X$KGA8`gZr>b7c2&;B;duYPbHOH#lJhsam?rE}s zPqMt;z8TA?Bkiu@h`PZSJr1$(wVk~tIU%QB05vjJb4JVC3h`^P95!7IEQcM+_(*Fm zHGepYAafAQJZm?)OIiln6A3}k`nZ(gg$E>k6(tj~tgE40k`&!}TK1O4oN8_LA``8m zTwo!0v>f#SX|LyDh@YH~`!HSvGmdtM5XMX9t2K?yp+}Iu&>*iE=t7s0=b-}aYj%(i3jB4!AoS1#1QKd!@%NlF^Pc0G^`14e=KH=` z@2uY+S-BJPgeQ01``XvOcBu<#3bTm-WKWT$sEhy~TvOPsr~*38_(eR6@EfcIka8(| z4M6-xC*?=)u&0(u9Pg*O+ZY40X><==`exHBZ)YxreQ7Ri=fWs{yfROezGmaSFTJ z*4ZV1lM(u@SdIu{%z zt~9xAU5B2}E?97geC{7f=FXb%gS+_cn2;^YJ;ka@=hoXRnU#oeA(;>ux%90K9PO(g z!W%y_kdRxNrk56UYP<~ABA!!mE?34`s3ofrvpQ!pmC+|YbzWY~?=~LB$5yJ2R~c9) zKSr5+p4+d2VOF#OrMc zR~<;#ehSanvWeW7VUKv8(C25*nvRN}O^SGEBle=_8)>$1O0{Fa-MxTIlib@X57J9N zW>~pUe0jCU++Wder3K|-w#1iES2;;o>Oypx!cblbD1JJq-x*;WPc^nvo#%!t;efZT zlU2&IRBL-Wnp|6JTg^Zcg0|CJJw`S$m5YP!D&q$O(GHWF{m|8ls^s3f20hvLmhT3x zD>LpC`xFK}ns0WntE_OHGdXXpxyZq>JL0aOYvSxtbyW-G8zHOJi526YGL-LR4m!%Z zy0XO;T(>i?RBxDlln&HYxrR>sL7iC@QvVV6)rAE)4&V){jYnvd8IhYDUGR6qXmEln5AL4xVRN(2i7@(s!eNY^;tdW*p@7|NG63p@A8K54aaUHwpWXQ zqSh4IM>Q0-EMEE9w-sYCz9^0AI%Q8B1E_Oh8c^`Y% zyj5rI{!muqE))j-`pVkQ6>P^v8{W2(QN0Ae*#gEccV*Ha@OpQo9_21c2@Z5L0Chl; z(ix&k#s<6{Ff(7~J6_!Dk2*1EJ9&xyz96^Zl}z_C#m>Upk1t!QN}z{z93`COEsvM$ zN}gl!A^IyBr5jY^9=Foa!5Hiod~sSZLd$DL_HhJ9N$Wqf)VNG#a8jWc9?3v(!XY9T zh(Ik*!4S%@1CftJ2S60$KjC%)YSYCca4nT7ilP+~#DJUUgTV3@g5fo#Pf7$T;Cy3!7$yg16ANiE^u4MKgIZD+tIBz`#%3I2)w6H)M zJEVEBuh9EFIP!^42~R4M>_XNc>WbAOMLPZH>grjdRTH@tN_+pVvtVQQYjl&RE^T4w zqB)U+4pOQbBf{K$rK884FK^e!eHyo7+Zx=z?;@n7JgyYY1WS4!YHa4RJ+6j-lYyshO*|)Y|(kRF-3@lFlQj=QBw_XrZg>N?sU+{ ztHHw%W6(;SZ$f}P+PPfiH;?C@l(-o`sh9JuX`CfhOU;+w>uFHhOvy<+>b>4n`qD^K zeRK1CUOAw@ZF{Z+$e;rQX=A5$XZ+?+tJaKL7|~3W1d*|+v387_q)1_YmnUnr9r#xJlo#*k$t&U-Ki>OZNFTVFL3 z1!tw+KhBPG6Xo0yKfXdwxB5M2qB~_A+Sqlv5M7<(Iq0Ra|9~*=;|zsBY$Ls6Lbaj= zqMl_1!7oq2`poISsSvoYHnO?;Us4EcFWh9rEV=&#nJfUwe8O&jc`1Zv77;nDezMMg zaSB6c|IzwL@VuZ2@B%X20A3*w@FkS|^#v&DZ!U7E0wf^-PT3ZqME{L0XMYUmGXO{g zW}b7Ej9q4h_py_}RslAnYjeS+3rgyY%>5zrGvJGt6#r~KBp=cA0dngl0UsK!j-&Xs zjmP^xb`eAVDG=-`i-&!;Etw!P42*73CLLy10+<@KN5y8ouwgOSF0d;FgH+|^*YnT! zlW`X^Sj|6L8ds`xe)-hx{}&ekL;4HZP>1b3EiX>_0q`!*!ddjT-d~3AZ%6FEHO&95 ziyW%|?9yLnMrlc_!U9X^dP0sfEb2_->M0k$l+5}E_%SdE+GGE02C`;l{W+mHeraAZ z`X9MO;xF(pwf1GY^LWw>>54j>z`tN`SN#bG{@U9m_wiVJ`q=qoeqVk_)sM|j^dTmcZ#sZDvjoeMInEHCKic@Ov?~}Ts{mv+T%K>p zqLV+*E=s$nV%5FF{Op>qk7p`A-uS)D$(ko4_B;WNd)(mgN3#qZAy3DVRn7EEA%_1# zHo`wEoAN)Aq2L>O4mJ4+LWlxCSk0v9FE2qRzr%E?N*c-!E*F;UZkJNyV5LB=!X_*l zWItj!;*e@Rdi`Tlh@x}E7f$x?c%^h8uJqy4E%nn)*nu%Xc5}xyjNuwGFQ^Xi+# zAiQe!joT#q=xh13SZwifY_wLGBr6DW!x&ykT?PJImXForPw)BmtE`vVzxjs>9RfFZDL3}_qx}oOW9csT)atoVg&_=K2Ua?x;&Ra} zK>2xcW^sNu4)9%enc{5J(`C!Q z=EUeGh88d#+^zl-+5GM9{&`;7_qH*XK&FJ>7zz zZps`OX+c9*;YyPqJv=a(aZ z(TFHtrm2V|Dt z3Ljti0XFQWM9pPf?J+jKfI(=qHL=netEuu@b8y>IBE)&+}_aSUI?8Z zebHZrAs4xQxwCicP>)#RrsKXoAZtGX5A%pjTVgqluC6ZadZUMA59foF<&0~-oLK#u znh-y!!SG{*F~uX*n*&&{ex=glWyVQ`MmM z8Igg{t`Q2g*GmJj(Bk9S;pbcTBYL0snma}0QVD_DDxwKp+rAr;!7<^lUkJ@?Pt~jR z6%J3>rmoR28PdEP#v!N@)pL1#0xM1CfRMgrPUP4y(e!P8b7Ye)6**mXZ+1pbH)%*H z-p7#Hir(_^*VP2yMd#kCc|7c=ye+z}g*WH+`5Q-cxj@pWUnyl-PI!)-p1H7#1+ic~ zBU87lUSspNOK%F>cG=(sGNUVh%D`Skw#e8%>9eD#=7PB*9nXFj_1pMf{I3IK-ctlCd`CTnr7BLJvm!V_|1Q*or_hU{ z0{o=kH`DS2*mL%gCRtP|dn=WAUM-|}6M(Yw(*<`GT$`DH2_mAo30K9#;WRJSm%QapZmTuvN;O&lp5Dkb9UBfs_~{Oe%~2q z&6(y34tdDT^dZ!GK39Ine*wLVyJ@^YGYgb9mKLjyRBWsYX|ql1w0FAsi2jqap4Cd{ zt8mjV!Fo?#=mfneIk!Q1V)K_TxOg2}9o*)^-WaLe(8H|>%NhG=LipoHSU=#++s#_u znq|!78bLIEXC!UmeSUheR?i zT&j(P>>Ns|%VN?tlJ)ocH|UKZ@2kR|oY)gPMDmOUvpWvl&)aX#c4<_uIo|S%p0;NY zk-UGT5nK}7FsE2lmhHYY$Me)BQ$@)?O$%*&^1{$|9TcuS_qlNG`BN3DWvPh8EvowA36(4U}A(c9!`{xE-CJ92gD*nHD@Mew>+bCVjAUe5#8 z7p|tfh|`&WJD?Hl80Lp?jC#i|kSwh-RohUL=Hp24Hc?#!Y9uuKkcBud;dPf>xgBJX zb0)>z2|B(&*}@KWGBg8%NTZ_&^D!5G9=&eE^ld(;Z8gO7j?ohW+3phm-U*Sn`u0m- zlgw}81k8|7M`ehpLN$go>Tc@k0CRu9;vT*9QOH^jG-f+=f0 z1>`tLgKwLLWLslOXO%P*?=lLC-SvpmanX+|WV(q5inhT>BaJaXL4h{ly`1AsAAcF@ zmv=Tt>~Z9y9*#ujbh8eKRMVMZo-Z3oTNZ@FtfNi@JjE<-imTl!48tK7RS6^K6yuW0 zutNXGK!D-PgHPj37}9qmZQO&G-i(!ew&bG>f-fKy`wgNJ`kG!|gW5__KOH-`P}QoK z5E_{F4Z^BP^nH9Y2@Gdgu8|)J`ys?e11{dKQlr zn5q}3R6aQ-rEryS)_HjO`fJE#LS;fqk)i@)z2n*wCvEQ;_@b{cg{IP@f28K>^1uN8 zwD}%ZTgSND;Z=U7;^1gO=&0L(RA)j?+#p2-#a*TTnz_x^ZSEo0CRMcF zf@TZWXGx8&T>{9y7x`{J=yuHGY$I^Zrbb|!?U4}9WK5#&O8#SY0*82Ca~y$|z32qY zh%iGEJ5g$~NhMADtty4zpBG{)ti)%Vcw^_2t3$G&(R7`Jg^nQwf$c02Jtc^W1S8tH z5U%Qu8dPmNRY*nZzj_?`oj>=TsaZcSb5km}cceha7cm{~hF*rfd&T?u=BU`$r}|-s z0~gL?CKFZEla?_ITD*eLrI?euVC}&LaKi)jgs;KbZXcYNTva&Pn8G({0*y7l}Cjpn{S5p~zewzMcTvR#^% z+Y?1f-Ig_wJ7d<{=jd_?2~;}Wd$wP3U0TP^Kl)YsDq`AS5zXCUbg`Dr+frEcyoT<_ zi=Lv5Q~wRh-18S%omBGA=a%Ql!#=cPDw#kDf%2t(i?AU7$ETeLwzYYPVbzIMJigL= zdjO{ja@cl;AVzL(d4V$DR`x0P^G&02a!FSf z7iJaRhkR4Boh13sFSECRZU>cUSpnwK+uzhHDSxp5jhKb?&Ms5{cf$aFU^(_1J8SWs zvob|7aaXSEb*>-KVJN|nnXWC#t z?@%0(J&v(KG#mx7J#{pd4!E!8SGW{cHQ*PNiyQKftH;T846oIYJz}vF7lGqTGUiV~ zRmK$e4>tV4oJm6{d~>PJkCE@v=fGc$KO{&$N;cAYxuJ+OMPV zgO-x@CzEmH+%ps7R0~Gq+e`0yY=o8v!uh<~v*fPuKtcY^56WV-FEX2?{2THTA*dUU zPtlXruB?Mc;g0Tf24BZ2e8%s~A;=W(lUv7d#*r9rGRk%)aLO#a|OUm$sSO=lSZ?1NIUH2&pqrT~%{dmgej8gg z^T}2&mHT~Oa0HcQ>}Tv>bVy5>^+IR zfUjV;cU)eHGr@%XieEz(4)?^srq{NX*1LG`x0~IZ*zHb0HM48GyZE?^r`XrGh;Ti#WZ z!7}1cw5aOGza4Ehzjs(x%_vX`DJ@B*a9@?vUGet$#ufVTnzA!UQhqoFCp_yYuK4;# zl@$01!ueopYo?~LE)_K`-R1W7PG}$DP%YtRKiE+L%v)F1eXu}#E?t31TuU!jEHwM> z+Z|&=)e!Olle0m;NMLD`DrN~?aELF9?k^_3c|#8k@3=wTjyUxyg!l#c`B>PvTiP~d z4#&HCi<=Dal<3^L6DKIL{g43fVJo2w;`~yY-dOM6@O6I+%n;zsUC#`YG|ZVYdVc$U zMO|G@#E_v)Lv{T8Tv=d};`Ml*3g(-Xx2!+}{%iHsn9wfLTbqo8P0A<IBLGHhE7VPuf1iA6%md2rqVm_ z(C2hiy1oQ*nX5nhT zQY*0W_8_D*;Cwd0ZLYqhDV1uDknL?D2FM5~_0SeNf0;>1Wr&6QQo4~bgx_sYC^cSc ze2|!0P$HH$afPdthW4Sii?fc7Uw~l?g&FRfRi{3nE1D?pDV9djhQtqx z$=RNj@}$oElr{3RTK!6>{?SV`BKTUk-L=}1g^k+`Z%qvCYrO^fo+qo2u-~yXqel}8Tka__$$Uw!E_VDY&4p4{b~ zc;)g>uV@C{rSG7-Gf{>@weWZyarqzK=o9N3qn#y1j7+O9)|s9itTkxwO$v+%oz14W z!0rISUW2Q@;0V>uzd!|`>ao<5`Hm+Tsz}V~;Gqn#swy0P6)GN7+U}J=vTGZ^Q1wwZ zq&JSRKHICXb5lOizb+lhR__=~G-V2H=;(G~fkVbhc1o-s>h}wn_FaiFfXvm=P}>t< zBj}a9`N&B56!-ARu6LsAo!uBT3s8P@Q$LaM9EH81Pb?#RIm@6wxC9P8Rd zslb}E#4%MLX~f}fj5tko(wQN|Pp<)E9_HW350p9#m_5q0X;i9*anZ`TW%Z?$v8EH| zSlKUfxX3nQ89teBj;VQ;IqW^J6%U)R9idwSKaJluQB7#L{~&holI->Oawc}Rf}E1F z=%)%dzdrhqZ^}#kp*g z@WLNn6?0{o^!i%Grq|y|6rJZiacc{>Kg8YILSul9Y{!XWhN8={@yDGAkt1=nnPF&~ z)tTIY=i13lHs&DaiWgxIK+d+3h;k&<1c?onltWgZ|EM9G0^8eN8>tb4Rna_tbrdo* z=^9l|L&+N(e6U4&3m}38uQ-<4f(_X9xU7im)|{q5S8lD<{7A?Uh*_!e+I(VKlF^F| zT}mn~RVRHV&4w)_CEFN8N%Tr?>sG_WC)fNg`jbXCZ00#iti1`Gd$Z)*sb-F&yv1>) z7Zu*9R?l5&ej1`jC{4cy-?X1nZ;{oWF{TAY-iAa5yz5!FIsf55anPNN=I=-~#eH~M zUO4+bRd`{h>Vn)pOFW>o)pF#^)vzZ6x5!5n_P*Tdo&f9LgtrEeDBFC-Ell);vcbh8 zzneKRKD%E9e{M6ka*^L}UwJ2Xc)Bhw8qTX@)DVz4TlGy#Ew9`gG3<_zd}LF!Db9Kr z6AU0_)(h&lSVS#ZKeTT5yk~|bMjYbR4QnV;?yV-31Jy45Z(>%Gj1K2^a&sNLkMtU1 z@%o^Q@^mj#GKg;BEMprpi^Wy0fMo#`$64==9w= ziqsJ=`%FpfC~|l4>O@HC62J)^XKooiboGG%ggx`f$aLv$)n4aU=?eo19`e>?!3w0u z3RGprScm&x6!I|kfLInA?sU}|gZX2_ZtE3wfv?=l7Ew>M^ z&2pDAUyDlz7nfC(I*R8_vWP@ql7=_FJ#%R^2fQ0q7 zBzqAw)702cO0C-bfvG&psOq{9ri(L!mTWP2%EvXa^?Kks#Fz2SxtPyVF|CtJ^@VKb z)4h}{r{RJ9fdyddAL!OJ1wp}_l?>OwyL6_<1RmnZzXM8JYyaV({fFnP5-x|wu)}fK z_p0)n*fdI@;%k#1!1oC$Ets=U6)7aiE-+6M%Ru^lvRL8qYKNv+%h_i7r(L%tiV9To z^Q=8R`#0cLpKN(IG*vOyV$8asv2nCoif+-=z=4YVdReJWHv(yBO3U(COU~2U<^l63 zqN2KyRWl}I`1J9^$?9!t-G<4kZLRgE)ngumdTV}fJ~!4U|JY?m&JMqT%(yiwR)=xS zkPg2Jb-|2vW3b+a>OW>~m>Z7qS2-H{y{Fn7R%@nf9-RSQ+1%^Kkb5uog1BZ^3J&=0DTibd$x%(K1vsqAN4*j-E0TFtL%yx-z#Q9gZQN{?#0yYsv@5= z5XP9>m1V=OuzZIbu72)d!Il(p^((Gj^vXcW&o`e86O|!?+0MntNVT)CV7(D;RGpMX)A(_4S;)~__d)&D>dkLT7KNjLuN7;35 zTXkfJPw-`bM%Sd|Wq#i9_NMb}?gH2eANFP|AKiW0pCzm`k%J^T5ArF0f{|&5lVZP^ zlPedR%yr_}#{Lr??9epLxQ2CLCPP!*Ym>E@( z*C^^#ABd<>5g+e*s^M{$^e9PRI-dFx%j>c7RyYCso8)$knFHBuDS84{9X#YIG9EZ{ zRP(-2?`?U%PJVLb%5-hS3_7#J&z#VqAvxT|Gg`LOXtI!AL)ovOiA}CHup)*gexAcp zj`&9pL6W8Ft!_5aGxN#7ZAW^>j)ASM@`x6xn)I^ME^&2LLvdn zYuA*e)co=)rB=%lJYDmrrE}flDq`kX3{v%a2pRf|5;m2(eE35p$y~DiwI`Y^?2F7Q z5P^=7)X$^eCq1wVwt2`*9y)!~%$mDzIZp~+E`&OP1VAhXda<%y$f4?`-4Hs`7)gPm zO)9l4)q;6rV>5$UhrROYX_TMXF4J2Uuc`jsOg}5)FP8!%k=4852e2UhRN>$QWJ*gT zTvY#9Tz)5+hnq*sG$mCc$r4cH2n6UB*0<=&R(rP(8K=)Qo3Qq!Sg$kV2KeNz75t1Y zceN}1&9#m6-z;3LdCjk0Mb&{*dFRM{A?oTaEQ62W}tCC36RCdXsjJD_b&2 zYRp2r7RYv9-d%tWaW|_tmWrRLB$}OG=PR4PzIw(f%VMUG6HccL|EhC|+F*ucaGx9Z z%3mf!wfxHWWb%@TQ6srWspjH}U~k~v*9>}JtZ>oaye5*w5&&LO;|jRkLH9J&ZHomNkaJU_%&StK zu8=zeAl?c0bWWGiwGffg>8-_Vc#Medsm&Olrk_w5ay@9MbahNUZE2X6sR!Q_urI?C zn_;>Ugq^);q#s~|jT{tB)(ny)!OJBpOK0`?c=E{O+&3ZS1D=z1Q70cUeV!})4 zn!C|Fp5lqy{pEgewpc6aTrH?!chac`TsMGhZ#y&EnV+{w-zsmxp^tJdx^rLAmv7uz zgf5|GxH_QKl-b7MC^q3$u<-o3{A6_iJ8Et%H{ZehSyCI)AXB5I;kB~#)6_Di)CVaE zEWHT)V;>6w(+;*8Hmp2`<~v<_rJ+3nm>(agGCx?!azsQV--w zYziu~e$c;f-Xj%WQCp>(q?~luj(jGk#a^q`Mj6uG60+6hA4{>!q2I~*O_`f}#?*Jq z(bvcR%a`K^=J;mO1dp52CXg5KvgOUc3&-jYW~%%i{rgX)fe?Qb`}hxGwEt@O?O!0= zR(O%;a&nNo4+vXDW^dnz4d=i=z|Kv90QZ06FGb!mTct8vg+R#GMG*;zUuG)99{dDh z8wy>8I|iJn<`Un8f~Oy6#x)jNooZZbrc{3k5cVX2FfcqC2nJ}vHGqho0BoWAw}9TI z)qmMP<2n6;V3$NHHtnT3X~wOoPCgc!pT-f^{%`pmAfObmsXg#e$3^q*2xsq-`_v$ zXq$rn_}3n-U*MstU+0`@^ZL8StSC}JzW7^1hduwB=iGm~3IG3~4?w@7*!6}~yFP2P zD2~4UYcMEOg8KjVF8Q0ZqQ>sH%zBjhF$Ru}2(g3j4e$Kph}6L6wfPBRrk4TqA-<`3 zd#-zFnevBO+26q@#9lvPS-$v~eOR{qe|nDpch3I5zvkBvZ^ECqCfJ%(%Mz5+$B$od zvFr=*uYWV5{-7rQQ)lo+_p0tx?QDjvEO0*L`-K=MNwkSihI z3|MWIo@%Pk1&lXG(PYMsVu0&}6j0Z}HfF zJShLd81Pa&CWdX~0NlgkD2z8CffSl?#r`e^7A|zbwaSZJg_JpGMWB?Dy$9)^wk@zK zfgknJ(2w^kb64cLx7;4D8}y-ig+VNlhAoXn$3}U0HjGc+qRieD$#fupa&0PAI59RQ zp{ihbuyxSOtA%HDS9s2<^l|6)+V2CdS3-scG{|NWS;%~sG9tnsz(GjTZh5up=#Qhsq~Uvn(7B*Q?A1ZD>@aj<|C!(gS&ykK>Y0w zq7B#Ixi=bD8~#{4C5~#|itvfU8-zpKtnkq{Y@3ual8={Eq_(2&8J=q}9Opza$VU?!e{Z0+9URd+gxV?0ZW@4hw+^>W`~TY3ix*mH_ho@-u#XX?oKGiBILg`SH@+f(v~kO zGslt8ni{t0;Rli4O@421c&aCrU#UpJn{k2E11ccWFiJN z%5JE34~_scQFWYg15r|400}cR8udsXV2^9!WOaWXwJcSX9P*O=TpUxD>za*K>_mE1 z1~}xdgp6*A<>*}D3@GSKyb@^eg5a{`h@GoP{dbDrk_`VohFbqSHcJ^-uw`VMAQjz` z?e_>Fk_ZuL`5d-Ay`W$Goay3GTJE!?`v$`N{wwR(>3gu8{ zxH+kQmpMA9He3jU;(2wEdGsDPR#%2@G4pnw*@twy4hbk4u7zwLs7PlTZf>+E*vBM4M2`xzT-qw#yl)`xjd8X72ItQrQ)-?_D2> zJTwhdQ8J`0E&f~$=@pY&q}9T2Q*QLu&QcEw*g@4gZ%lPVKi>GNg}`I)91eYfEtDkX z53gFmT)y|{nR7O^#FR6^>dp}A`W@GJu`Y>D8FCyWRNJ8Xo1{8$Un=7+Uhg40&Q=ln zBwmGtUrA_!@FdBvQzX^wli(End%kb+S>4&J#`FATOYcs>N@lBZd=};?f=|eHz09UGXeOb z6^u!Fq(5vi6R+dyaJ29YFS$g#9<#UjV{2~2GfN^X<_8-Y&#hF>7;=BJxlB5s%WZv2 zua@-@PWm0ImjTWnIIOE|bmq~1tE9{CQ}Rv8w9(wT!MPZ?f!==cZZYTy^w?9R01g zJ8y?HQ?39|{@ZQcEAhS{@o#q&%YE<1IL3X!)CLRFc=#1FXo16o_qME9)LJA$qG_i! z5!`iL6>VZC>a_TTErRHd=lW(G#;Xvne&wvBMQ(_GkT&s0*LW&s{lI?5BLb}KYS&LYvqhD9*0muYc)qJ83x&N@}X zbhY&bL2hKO*aHRSKIeo9-{c;tr}h)%UuqsQEiRtXtphyW1!Alk?<$6`5R%6_8$_el zS$s2I_MFQgD$`*oT}-W@OJqR~A|4mymheSUS-Hmu^$Z)n=+_9*+8Z;es*99cI2xlE z;0)|68Dh|gzpi5yW%s&=QgU7rZCV?)j1K6owWF#PnM+a=CkmNu3}I$>?caN_VbsK6 zT(>7tdf-QM;gDEgpIEa{y6w`mwVx1lUo}HqU-%QYw!@6MX}rXPSAl3N`mW2}?K>~F ziQ#iE#BX0e4H6H+SGq36&Gl~9oF_3ea~|?E$GV)_6DODWXDWwo!!L;uD!;D{{rf;% zwr3?XbdPfEm-dTUEsha+%0m2~f7Ao|ucC(k@pJzIC}IT1e<1CT6?uOHH*!Zl^h(M0 z7|vT%aDb=yvR-_Ss&tkCi(64-&c)~(zMBQ^ zZ@u_8(zkP{kK7GrFMXS3R#+q_&<7ZPiq|T#(RtzI_GBe|GM|?P4C8nLyQ8V&-DGd{ z*wH%0jk^!ZXOxe2_8;q=WQsS%*)I?`$rr@lbeJ6ZPFLJ##Zi~0S@*6tu0$^;Io@`I z&AzER!j_h&j$_F%Aa-vgxDi*KNg1LhYKwe>jYvnSui`I13L6YgtPTz| ze;=C8^~v#iS19pL$$0rutJy94Srmd!+MkY;ssGRfg@EjeOZkbuiMT~|_A#AZh&d z1&u552wQ`{a zs~0e`eq|ivt9|bu=_HxCDjt5%J^Xxlen_{uvL?mzu-CPGNf@Y)np2kO^R;NNif3`8 zvN2(pzP#hyg!q7UU(yehWG#b-H3?+P=gu`dB6LCF92;!Pws8zC6~xUQ$D+z=E_n2wGe}$+hSI= zUJBY%L3ot2rm#Q#Mk`?Fo1EuIw^S^t_L*H5juiW`5-;f@R~MaaYuXwWI8A%SHcPp# zs#Yj(G~UH(1so02L66f>q&@!gYK)u9!&jt7hNm71Ej&(mN?-bzZ9+f(@_ zB{d4zySva&E)Sf&k8U$huBG=XwZ2%J9L5nu=|xxL9XtVNVW8f^`P+l7F!)`m3 zQ}yM3Fq!54%E}BS<0`b#x=ids{PFeLqzvV`-$$si3WhDWu%?tf%EK{QMmcWGTHDbp z8FDo$BGBUH0&y`nUT~*;D1-E;NgM^18z2=lVE7}dW*|ob3apkRVB5TroGFS!QiC4HD(f@HN z<^?CWA*cU^FmJQ5nK|r)QD#oIV7LfcDF-m(0f9ae)kSUwDW0+`TQ~2Nj4BIr*DYK^ zD~ow>`~)?g5C+okP&8Sgh_=;QSfN2@J+&_xThKxpEs0l41|ZkEKS!+cu~)xXus2Sb zTP9+%2u21z7!1%ZgL1cJu(niA_$z;$a;Wunor6ftm1qy(T@kVJp?J4)xs5(*bn7+& z+9ga_Rm$D`8-SF^K4qFQnMHO9eWQf5_AnP(ceveCAeDL!X>5L?=YZd{_RfK>LFI$EgWMwK1aRN z*vzG266|XnS?^)9!|W^8sCXni(Iv=xrerUZw@m3SUnciG&odVTwEAmF*&@R&UtF+7 zp@X>VHRRgbBxhb=vGX-C230n2T+ltAEq%Twv863Qs2b2OudbtOa-{qoe|^?eA+RWC z8vm2r;Z33_ zmq_WW6CS1t^QZ004-tHC;_7Tf_LMEEXGWf0UuU@f!?FG4&D?k96doJ9U4S}mLx6k} zC>if+iCe|sB#`>&Nir!hOtto~`C<9zAJPoa%PNp38!u_ccx7rP;(_WimBG@J<>>>` z6Stp1dhUE7dFng4jR-ve&lpR92St#60n$pjH8Dz>qXbMpK{}X18iiOa;bOUyCd2L) zHpZx!k@H-<5v%NSCcWjANzVEuW{!PayG!{#8Rxi>kMzjeRcY76wA)V?=E*7t0IpSL z6w?=JNvy#$g}vz2qlJ4Sd+_OmWmwAoI>^pjY-`Z_7*2A2xyTWNE!RR%rg@h>){H+j zeqgrx1ok4_P&KGI2D)tua1^2^2CG*msqwWv*th;LDO`Z4!KEy+o;>tMp5$x( zyP};pg%5g~u~tjo9Sc_-Md{XGAAlhwYddq0JY$M8A@c4hQ`I(FgOu@#&S0WIm7N~S z+>hAHt@Bjy`iZ9dOM?>1%}u=-eyU2(k~E$!H!o`#vuCKA*|+7or~^4|0?MXBULKnA zcdq`0sa~(M4Mzatp9oFB<{S-_ypQr69Lik=geI|sXXXv)oyZcSO;Peb8?nla&9(8? zJGI7fA&(yy1m=HcRb`Pq4K#Y2cwkBS*pPu8+e^!LJ9 z!(R+K(`1W7_Er2BxCI#tB_Azil0eH^H_SLjw}m6`wtc03tLRF#`hA9lxSk<~b5i;? z8kYotRSFFltACzJQ-!fn#P-#&Du+mYgv4^?KWj%nSk#IM7PHTf+tYvLX->CsWPZcn z(G#VnXxf6wNcTKCbIjMP@geWpS$zI1TJx^;^CKGyYGUssC%QF%3D?`7WZGmX=AfIq z<`YetFI`-m)*E6Bo-9l!v)KlLvU`o~!F`;!C%_d<{IAWOjj^!DRgvmJh^MtdQY@Bz zS`@l9SBb43gD$3~RL<)bmvgNQ{H4)UX@z~I8#wS7#FH~mRM4c$j_~Q&+f8dhu50|^ z^v**s28Y>-^kAXuu2ShuK*1<0l*{YmN-S)twuAH*6xJ=88k1YNsfW}-s+x2kMMGGI z655lBuJzQ!3Z7(cNt>rfyuJ1{+3Xf$rE_jxaul@ia2h4x{K((`sps91W&0cJF35h^ zdJ^eu`RA(PP~4RfVWq=Ta7QX6B$wju93SMzQiRPLP?o@5j%R_OOY1Z=g_*7MgbAI+ z%j{@e2J)1c?<2%g^ciHjbH@8(A-VjixVHA>F2Dj^B+-LZt`CO;WcWzO21J-NDO8!) zYEtr9g$XnZXa7h|y0`OfarzHMq;>eEna(;wn13sY`DU2j1C)H!j;;pYkQ?Z5*MzD9 zow?)^=E+$NFe@b#CWMLNiEBlT0;hVa*Zj+Pf zU}AMRJn)>1J)F8*3kp+*0F@1X8w;z|KgUAPwi;c$6dLZy>6u9ml~J5fx?({r!nts`F^jsV%{1;90M*$iY{ynqjEe z-u@!;==vlIxu^eptv&{_Ei?1ca?hmlJjW+Rchjma(?ptdT=HS9ugm$Jt>tVFk1T>o zBZEWNdifzQeEad<&nK+s9~4-3&E1et>NY*;J84}<(u{!bGmzeHjNP_W&7bRVe$V0l zfp}$KBQq36y3m=4eqS3>)lu$DdhyX|>C6n>DC;xhy))D8{=s!LY{0nX_#ED=72&#y z18Tgb*y+`x%cBo2?AngMbQBtIpYdfo(l3Y;Xvieqi+-JV@a%O9gwEqwo&O%S%0)1>4tlPP>P|e(Ca)swq~{ zy6YYq5u^7&jaM{2)+m8Uf^w?H4z{i&I+bSE8i(JumwR4t+mOU`24wU8kUe4kOJy@c z*RnhduIRqv66q~2om&ib;D0mP;abKYDvYSceYIxwsQt|Ca!ewb*RUt~0aNGSOqcHm z4?RA0X&qS%jDj`Tefjp3`GprkZe|Ecm^NwG!PRjjmQ;W_8W zspntJEz0QnC%L`e7qYkr6eYD;MIH1V=8l{bEtX!^YeXFIUREFTl#=yEI+vDOhWONq ztnIVN6HhxoRcB8abV&V;SU#08Te0oZOz#~52pe46%$$m~FWiWC)HXGh|1>+xZHi>e zzT&3Hl|Ynr5|&|^D9CLs`1-A5^hG*yPY5#?QqEdEUkpL1<~28bmiewdD0EYam~2_V zDLP*4X65HNgUSl4SgU5VOwb`Ox%rKS?{op(2|T3|(|wM&W~zqP6yA2~TX?w{)Cd|R zeAqWiWqb7r>+&>G5xth_l4sDC$u~dA5<=0}hYY(EmGKnc=>3NG+>OoBb$5qf5@Y_N zp>gSNv0;@d-06>>pt0Z2S3uy<<5ViMn=~ZZjQ9T|?>*z9Sl6^)6eLK_IYn^tfUh*NX-j|EO zKDdBAQrwZT)7Yc6q;TGGUtlLkZOOlo!&Q>^l>$c$sc2%&WBUcI)Js7~ZhHVrY?n_~ z2e@~u*}%=?(+v2yE{0=Ipxh}+yJm>JrPM8K;Y)l{BahBJPPx9ON>AexAm59~2$Si{ zscF(7K2_>r=;3Ihbvf3m>V#9BY+3#2Rt_Z|w@{zyozrzq;Q7zpAJ>_1gMm3XCHfV! zb#=(po$WjdB1uT{L-C~!D>p>$*g5I<4BE#Gx1*OX%MVxYM#-)9KG&5N7eKO@z!_Agw4rGN-XxX zpEM@097JQzGUX>$U;*;6yFNDND`^!pe+Q1EU7h@xMDD31GL-w(j$aHwlAUrqx4rmK zK8NvrSdT8x5)buV@z2$AG-rgcJnzL1&rVokHr&w@Sto9zKVl7m@07Tp8N1||(H`scNI%APdw=k6NgRo$EYm)XTd+1Z1&H7vq3E_+KcKuVMQN^)^$+Ci&bv z)cpbKsr z^fz&DKVo%K#zb6pXifwWZW;%^6LQBKl<^v^P6)UUc`h4w!otS7`SVf<$a8ivjPH6+)%@%2Aw9s%jsBJV~&rV#W=s?=aJxgpYUTAS|OH(Q_ zB>)!OYro-pfE+qG1lyT-n5c#c_}!xk&i5nIkNR`SKIj=Pz5+m?G9>Tf4ND;= zn~NS*`N|kBzq2eQdEgu#Kd*)s(!t$C5(Yvgqh{t6!M@C+qXT(W11@Lz+Sg5$jarvp z&Ei~_eRqyqV|EibxhP1YP7t#)0x=BIb0q4XLg2maCz=9?C|sW2SQHeH=aS`Fh8XGZ zf#mka!(|mSW!uA0HZ@K*&SIjQ5iiu@2yk>9E|5+g*S|zj@cndQ(hN@FnfkFjV3od@ zY9iizdLRcTO?c@anJ-`hT7WifxM!_SoN#iXvshl86ei8yt8gNNvoZxqtW!1Nr!XH zMBsyxiB+&n8yB@FHCr4(A2v(L!CI?DxSQQF-{&|p{_UJLf8X74-RY&$9LRl2|vxdmf;M3A|+{_Vc)JbLC~nWX4;MN+TKqS8_y7HOuFAWWhZHY;l>o--93UM3oJzg`tsCI% zzZUmB$MLzR#Bn6)*lV#Lp95{uF9TN3bAQuwpNTH+9}BIr0-3W4w0Hg`-Xgq0F|#s$ zz!M%;A0Ox~q>z!(V$fppFL=N=t^n)$>S0M54#b0@A}oD9y^C9u6*Zc_u;g7YfmIcn z3Sih39)a4{cP#qlFWF=NzkBPmArJuWeERdZMv&H(!=Tm~BY6B+sWbAd&j)8~d$Z*S zw)wxvA^+uJV8O0H?533FDZ-M{!x@j`JqQ-2M}76$u6(?IofA+z7g!F|)60QDsFct8 z$AIK5YiTYpi4(MKdizgy7BSM3ZQ6@7=S#s4FX~MyT?xGtR^GhH5^i!+ zp#1@8KKVXO1TODsb)4MXDEa%#dM6$#yPSxLx4(W*u;<$)P5h6-k^k!Uzl6X9E2ntz zi6eix;FtLq(Tgli4enDP7cbA{fgFQR#Oiz`ATf;xOfZTLejC+qpF4X4Axk0z z@r|~!d;p#Eul2QnYP#AZ@&sCTd;e+BJVFgj*k4(ar~EMD$+x}goONcSpqQ1LC--zN z$_`BYy_CoK%MKa@%Hd1p`Oah@{;D1-@2BN3C2F{`DINzeqm$})lbLceLI2n{8c{b< zhH}E@o0oKmh-IK$czz zpYK#O5xRpzlR{l(xR`^}VUtARWrXTV(T4HgCA`1u@~(=N3avYd|JFt}*F@_gyGAN5#si*@68tnEOSZFZm}T2Gkx=95gAb6(U&0RjP{)~M1hk}08EsK1_n^!$6~=S4<8DG*YNY$GjyyEZ>0 zY0(-Q2ZTmBZBJ^hI%DWVtr1iJr8E}zU^BetmJorl1J`Tp_K==84BVB zKI(wr{#yoMTW?24&Q#&RJcTkhhLZPr^!hO>1}ZuviU!}fBi!Cb)=<1qqIwqfpKGgW zCG?N<_ZAT9af;Vd6V&K<+3)n(SiZ($N&p-Q{d^fUXoKKG`rT~@u}J9;(5m##2&4q~ zxq;ViP!-SK{=Q|5eO{|1%2b>d4h7Vm%T?p1Djw2i?d&kmr%TqZbJ`KraddBkNFUz8 zF3aPH(kI>xZPx{-12Efb7;lsuWYw!NN?; z9p(`!E1)|t?^Mq5np7-8C1XqO?0U)O1MIZ%Q0?*cG{aks5o*sLB`6u_^d?-_evchT zhaCiwl*}C@zRCB#9v%D6VeW}Wi)%OTl<*PRu`o|#Z||PSVsr0`;|R6oQy|U|nxQ

    jO9FPdYOw1B;H_%PKo`zIhA4n51#`&%blo|$0w3CYl4qLW`iv!vJ%T$!5-1_?Wx8x5(Y4Hp%2+XedIKoGhef6YsaLE zq8;()BsfFbi(dBQ*UmT^nPqm3#eml%7vZ?=2xfy$8ae7IF;)V*#GxB&4cARBJ_HQT zai>UTTGyx18Q%5g2#Zaw+rj2GFv0W`*`2P2gwwteD^ol(HhMX}Bd|J7BoTB6{t}(q zqOT`h?6QW#=@Ny0IBCit+Y@z=8>^1?w?G0pRYPsTP)*z>5=%eIQUtF|yowP{oZCu+UR&O_6Fzx|T?oAWtenX$3>r@HBG0vg{( zx6D;->rxEUEy}4Su;U$@yAJ^xD`Pg`bA{nH;FYqhh&W z%g@I1oBCCyHO4(M&N41-3trJ`*7{qjU$;%mi_sG8NB0pQmd*$V{B@4bbQrAACZ@`J zM*WTj4Y*c1MgfMZU$ORxrDJ;Xyt?QsL@?fHt@cH-14kk4%Eq9%rxV*WDA0(EqZiX- z^$@#>ow+#gZob&m<+WJmEtq4ry<+>+>6@{<>HaVL`ad*QSmXKyiP)VN=--)0*klhVq{5V;;D!?z+3-C`-vVqHt-Rq2!Xg==z}62E#d z|D2R|(HNwIYAfBndDWD0WgI}SfvHH6-mNtkDq|X!M#%gg)MI=BHe>VDH#2qTG~yHy zHA~S~rX5sKimGUt&rF|_@HjlbDx3TScZ)-LAy+2Q!y(#rPhkpZG}5DUGjt?hHM&tQFXnh1c7`}2X*t!g!n z{i-@pZi0)44-z=lzg$uB>;5@k&EZeGaB&aZsL-nDMDLbwW_a{A^#4kA0*FK%UK&{n$*R()V zU)1gd7udzR!(2A+dK(BwYPCM*HG0FbQ+yJ>>;%a^Bth7gkD7A>1+l0pFL<7hLFBo7 z5k>^u1eg%+efH0C94f0P7RDv8-dhPbyw`Pm8fzU7j|>7{4o+z)wM)4l8gghx($OXT z3#+P@urqY)IG?Pas?@bPP9`3k6D)Ge1CJ?6chw7acwtAV=QjVN9J~8c+~P(-LOjU8 zXJH2haVT@-k0RvjWlLF#apDTOTf)SzCiDYqtxiU$%-(1FEn>5gdOftj=q91>be%W7 z0*<73&69LBPNGVOxA9RFoZ>N=f7KAWMf2Ng^=~)jtAAewssHJD^%X)I^VagaTY+I& z@KjCd&qPs%fOIRec~envtMXuZe4a~%;Lg`)mJL|1eFUgiTZu6l)<|#*SY=AIWQ6c1 z3yW%g3v{A6zK&orO=>xfo-;%>rsqcTrM^B99{o?~E)B%OaLjW0Amiomu||9l*E}tG zAGXx<>_-t@YWxb_KIo~C_sm?>>kK1Z7NL!_!E5N`?iO2@+>ZOk(4%AW!4NMO))acf zpzm1#fd3kIcBvMbA5h1g7HGcreVb*!+o!B6ZIhVg{Sgx1k@IEz0M}4w)kB%~vehEj zA?U~FHgEFXW+c~g(l3lEsDK*i&!zDt9zSK#A(gX-%<8iA2X0j0BEft<-m(V$IHlg_ zOXou&_v(c=%;ewsdAK2cGgMS2&!vkX;Ai70JS>Dugr)IXO_p7<(1gzAJBnCyNry~9 z54_W8EcS#u4gxQ5roGG`EVWS@fz2hSM1Ae@)S!gHwI4p-G4OWGt-oQd4_8bhE$SexY`#vnqv*b(SZREa zOnU>nA>r#*cLz(xP7+1m1wT;t>T((08O z)E}DpZo0gh$TG^NxJf+0pV2X|0;Y13sda>)%@{w5{J>W`$!EUpr}n&LF@#)VDt1bThORiBe|y$U7CBE1BS-1l9P z`7s3RMA3|Wl_Dl`62WZCd_y3xJiTZcVK;aQ&>l8~Tmwj(Ib$aIc~1n4(XiblRq9(0 zjp`hk?0UTfUsk9vB(Q->yNd*E|(A7yF(S1;>jz4BUF-=$7BI z$r#PEOZKQS{}b2aqmz}W=s7yPnO+Qh-dB(>miBGQL%-yg=mo)ea2&7~71`~LZ)&=x>9BQOnI zybDxa8?nqRE@dr$VO9JdLr`dh_r%NUOlfPJU8J>}{Ixn+hxAhxe7rL7w}0en$f6+! z0HduHnOM*)pk`O=CsmG7>`sfxUCJMK7Sqt=>#Wn~;k;|M5l+~ZXF{0n8E#YSslYj) z){^Cu5xs|%dw}!$O9@fT`)qBp8(7bYNMC3Vv}Lqiw`PQ%nPQFt$sk^)7;7YMO)0`gGQA^0EOwlyIk*lx_L$F+zQ4F71qLH z{b-RE6p&=-!gYji?{XNwc8~S_jnwMeGnpKv1j8flUciq$coWPr^FyJ}q?GwIM_JdE9FptN(<1PHcfvI9FWZfL z-DUcPHAAZN3u_F-_pSVQpN!&fKAGGJ_n*X;Pa4KNBq=tB_qapste*C9x?Tso$2fO6 z$#r!kG-;pcC-}#PhP-vIFt&S&A^p-A8tNn?yR@w{r|r$pGHT}J0GHfaewFP^za!qy zAo6o>XQ2V*3*N>4ae1>AV_8g!ujaMXf;+Y3%wOtYyk_Ei7Iuqlq0g4#UjL^4Gh6)O z=-bQZkNjPjTplneF}!{<|yoGoB@U;BkM*e_hI{Ui1rbQgal&jjPv zb-(bfkj2*&1lPpj9noh{-^fUOAvSWjsrbi;!Rte7YOA~{p+m$_YBpc)t&0NxAbF+* zIL39o{nWD%Ng%jY=2RA)D@tl>FEbg5ZQm3k?Ni)eNmQEqBjPEK(yU4UV(JMkx99HU zyvKhHNH6yoJ=7E8z6d8d)p z+N}Pm=E$%~*`Bg1sl6sDeDD4(r+mGPFy=^BlNCZO4t^Eo5Q7dDN;GYhJ3zgcYXzLnyBy;BQ+>`yhU%(=8n>qw4X3OdY;Bmu7dIbc|gRum`mZD-$T@H zlnk{$GQ+FOa|&2e)*Wg35;Zy8f~mrPf=sm7x2=+(1$QO9Bh-dP&NaTvht*|KiV4vp zHjY`?QAZJ?^d8K&*gP*M>;y6;8eoaB&;eWS-5U)!QU`Hd{>KVmHncu0rVshh@0FXI zr@$6p-YGE3QG0gRi0Up;z6p+P@^gH-Pf;<4FC*^I{d0P{)i14@XY(hDq;v}KkHf~6V;-D1s|3PvJ(C9fgL4z=~HrW4GqAPVX%|H zv5zODZ*dPfoJb6BB3oH8@?EV2n3y&?u~_XY-I@G(3v3PEU_^ z=rzuqX~t(w|Ew=LVLMreHWIg|g%npta3SNJ@`N&^0DS?u{?%uy0%=B~R_34spHiur zh|jly)k`cHBd9!{+lW**GS4c0k*h*(%j-9zdpgorYdkgh1~vrYY-38e7jo{5S$5Yn zD)l&t5+wV&e7<8-z5Go_?jmcR&Uz2*3(m(_AOpks#r)mv?oVFy&zNx%m#X9ILBTU~D(c(^tdA+EXvP6V+N$dx6PSY-thF&sGo?9-p zC|;6r0~Sq^@G?fQz{5Eo_<(O9(@l<(LfMGmtEav-@p1M+ZrQW^zz!7U zq}WePR+a_PIUj!jF~)g`ko3Ae18pQUT4(NQOIx}o7=nbU5zhA>zq{dC|N6vSfB&`# zm_2y8Bnk3aKKR(8<~yn`$75sn_PEZr!{QnL%#iCiu~K>Wi<@jxb^|8`&WW~C6?OHw zF-a4(Z5iDN*kxOpR-_y+gmC#mD>^kobo-vlw0s>)JG}35)az)@Q4WrjqF7+lu+<@I z%Kz~0<4R^&PHR`ynXi#aYe9VeQZ&&|LfUBSF9`DYJiH{Y)Pq!>-q#PgvwM)wOdak! zZ~PmX;xDThmMz{-3JdKi&h1f%qLi`PCP+0yo(1(w218tBof6&E^vvJy@1P#3B2&(;!E;X)F}Rj&dO9JZ)La$U`6k?QL(kWAb6)?d@OImcGt+ z2oqUH`-9`t@XAEtYM#Ha*gq!EX}Bd;qnW(!p9e6#Rci~nSJ>kRb9S(-xi;S|aGZdj zp)haB*ZzII*5y<%9xw;DkD({$Q}&cVfrT6752QKp^X$52UPUR>6&%iATjr1jPoL^A zdF3sPn{{SnjEuB}w&FFT=2>u1Yi~b+>*Qp>ZNZ52oQ1_+jiCZaJXawr;zTn&J+^}23 zX(-d^Sk3CxrIN*d0~(N!{KBehl{25UJCz7Ml*OIuQJZAg`Dsv{GN|HJG^=J!UHVd? zKwp3Ix7^xAV)p{HCZG@sQ8z*Y^Q$(Svh=40IHrd_&Y?^ z_2hIKu|oVVW383lKI5;M!9bAt*kxP!XXBDU;~l?Aw1_`rcbZCw#|R}v!mN2rbjW_m zi7iHIxe2zH;A_N7Dfts`!KR3GiRP5&%5`N8#;mD4d~l35~wJ@u8_&{cej-Syw4NLP%ve}mpo zl_~6(_W}*e-y8Rk)Xx19jBO7K5XoYjhXDK7q*7m|7b#jYnwoy4`SjeXQI%HcPV{#| zHU(1-8mw*hmb&Ti@}3K^-+~yH=<{HYZTncMYMrV43{f<-&N&b*ozO?)&d}noO|?8; z#b2G>Ys@)~9s6?|+3&!smxrbF%yD;^FjSC4B{WmzkJH-2n1(Wpk>HD#(bUJVh6wm2 zha11A0)b~KH{}4o`pu%R);cN+v-!x+6xtiWYGitzc)<{}j#TLwC*JL>`__DSTHN5i zMQ8;FtPXlZu)MUq+}P#j4gCEu3b9)O4pewW+sYULH zJkW!9yJZ00U+3DH=3h!gu~LyV%tT%(zC+N1$NI<~u9?zMFu%bNQ8QF(u-w*P)WWZ9dg1lv$jI`NPoQv&|5esr~V_gLbTW{oL>5fsDlXoeE2mLj zyD55J-f3XDf5UNTG8B8$w~SJ?Wz6QAlfzQtlX^gkJM(ETO@hvfC+hjz-r_?6A+5=+ z+v8#yc01dGv<~s=*~=aW)-vQ<;4M}v6}a-NLa^q*@K8y~d6wd;Wk<}OYtaHS*D)ov zE_B_Z)1ScIf&mk$`Au|g>BZ8q3Y2D9C-V-2#-n5u`oVpr%c>BZ_-#el&5v1)tqi=R zSQ!6lH}9#t>Kdwh31go;Px5SEiaZhN!G80l%u%IXj&{<~gOOQFqpk@y#i{0OnZo6s zvHVO4bdBz13B$F_H!Ar~Uvb30^*B2+bWy33Yh&r@X#<@*EW8JX>wc=}_x8`MGL{@o zS`O4N%N8=cJ#~4hSG8;Vcde4k%CmyQwzYQu7+!ugXPO(;n;ohli~9BBD>XF}<#0)y zM>49F?Ojn}oqprID=tC4-(ySk$eCxA2|s4Jy_S!o9>To+3M9ju?Ld(RrA3poKc@hbmsJ_Xk{?O2eX;3@sI-9-1D9()au*JC|0KfVO8@ns4s+NKH}$ zGoeo7ar;!CvM3*(2G0hX%_>Egg3SQacU??=)=7f*j)&d8GN*Qd4t_d^onB@KI*pqc zF9{kiYe}5CewE7%k^QmC?maZ|lv8_`EHo1)S0Z#NjUQQx zJYY>`bmWW53*GNrU~wmVEWAQB%o)i?6v%O2aOJ zOQaq?M)uk|42yD_$-O*Qs>=`I|51ZcPcQXRs*KCf1nVxaf(f(&1T95pRPu<_%ga7M$^!JRd9!A+FAv&|kF+j% zW2+P|HUf9Ivd;B>2mAi@PyL~iIPkynuRiA;r65h7f6dd63u2y~-Vy%M8G$vO1Au;Q z4FgA-1Ajxv1hdXgvF`7(UZC2ReiwNDv8i(85qf^s^9##Q2=n`)UD?*Y$awJ!OAc5A zED~P+uA2MPHv+Hh;J0J{XZCn~<_`%X%<#xlT#J$h7L_HU-B0pnhGf$1?0(0k|MD-a zR@(F5sl!*dFNZ4uj4=cV5)K9)(XbknbpQMv`I=Jsb%gxcQegXQLG5S23hD3Lv0Fb$ zPmW_RF&3y#gh_hxe{AMn-NSD>q^sM1{{OKAuh38QmAaDSQsxOEUqJZsY%30y8~Rsw z_`l}>{^^f=g^Qze^)%|%R8>RX*EU<7B*Z**C;8&}i8z8c>;LQ}@!R!(`f9_`c&;8UNgt20|F4E(CK)qTWh<-M3 zW6tTB?R7O3Zte?9FVSlOzjajpe~}lCl~YrzW)=FlIg_JyIYe3a$HN5TduQy^mp-Pf zXWr>Rap5;{XjT(6W{9IcNbT*(w~8Ur7<_MPRo+3BhrR|66mIDL350)@IQCi~%UE*5 zP>v&WXZpcJxdT9!Bb!r4_m6rb#h-Bs$GSRq%k3PFJdUYFAu7<8%bbm^$wloReEt%e zF@#M;T_MR#)qK%E0=Q z9?UG49R_DIiGs=YeJ^jt#uq6P4=sMM8&p1Fi@P79o1|x34pSX%wp=FG?Uc}39;FDwghK{XTeI@!~Rk@0QYs>-^W`lggq zLykw@YxrCrlAbq(B~!Y2Nb4EMVln9lV_%g7^UROaAVZDf!YWfyqTG z2f=Mp0h9W(vFuhfV_9%U#$?{!0(4L&!JPcUQL|{iEJYoI z;Q+#BOr7&$`xvA`VS=*5)!5jac3kjs{6188ApV}c&<7Ur)mhS!gl93$lNH^}-py{y z>ALwAqCQT&I*ii{X0;i4-2D+h)ZEFL5Rb>JtA$w}6P^e16dRet;Xp2+vd}gNhV%z1 z`T3s-0c$pMv}1KwIVM$ea`03xU1IjuWFWNSQ$vI>b!Sa1yFB-BKTTNQEj8@t=RK^? zCx@BJI|~2}p~ByqkvF|8{vKzckK)bfIsN%>VboL3;bK392m$I9z%Xpv^3f}ub~~|j zJ9&C5{wPM|6$vg#R?Jd;Z5=z!!Us((v^?@ojNVu}l3Dk$S}FI$mUU|l*nPs$F;0!o z#7R1mJAaDtTcd zk1fqZIYnqnWYrpLPgyoqe1Nz|%)6{rpxUC~+IIkq0>k#K# zS^RDSIxfzI{sgewOi@n6-!+!hS2e_cOh-l6yWP}Dyel}-wp|O9?U|g;c!G(afBK9W z6=WYdihP@wm^D|4YIxcI7Ni(ANMC&&*Rn2uR89nf*GXn(4w^1IGBLX?;8++>WH%*3 z|EzxD?Rz+_5%udkukhC*H(X{BJtdUN;IF%Fc0%}u?J%AK`{TH|nYqpTk#n>3xXF%g ztm*X4*QzUO*6fx^Hrs@sHUk)8igQ;~Y)Hkf<4|UPv9TSxOR(7gh21nwqq`ehGJ_|M z@Wm`iJ6C)>zRk@-(QVuQV~S}@c=es$3K}$bj}Sh@?P*ILSX1R0baafzLt|TRVjd0} z9SnK~T2Qq-t7d+u!NE&5c>UuP$GIhJv>A*Xx@VHU?I|9r5~)&G6FJz}lzB$~J9Z zo)V~L*P@3bzi(4-FI~=#i-F&WqD5QHx<1qzl1#ey+jt5#+^EE|t`J0}cFWU3dd$Wy zS>PM-hL{S~@BSl=SGie&lA^&8sWkX$0!+YV!RLKkRnnq?>T2>6ier@@X znq^qDpS%~E`)lA#hlaO}Ki{J?0*1BAF}yovT*q({IW%d*LbyW*mW45#C}qB6t|g$|#~MrAzRhmwtJkY9r06`c#&0 z?JO${A%U?iGv8pPw5guvAC4>n(-<^*)Xb`{Yv50dkD2s|F1r{}=f1*7K3DPig3&{J z0g2>j{Y0=A(t_0f2wv7aK5uB$;o>Ztt<)c>k?PGpK_fosMnwQUUx@gYe014XLNS>< zdk9!aRj>a^$!7Ye{*(gE>2vL@vF79MEV6?(oS_$m1Gc`U_Kg*3j-nU$$;Ac-uy74J zMA+G#%!YSLQn01i3@GKduPu@CJ-)A;3eX>YN@)$qXW@oY4bcuZWM=%My_S1vw7t() ztfFqOSrer+Cijnc{Sa1yz=B()Aktm%f-LJ7&PB$vKgGuuK-0%5WsV@9O5$<+sCSZf z(`(YBih@RjSemXX%M&cOru}Fwm;B|mq2uRjpGCFJ&1XgRr;pTZU4#=B`nVprM^(Hh z&v5N6Z4iam1!;KAoSKgIQ19)w%foROyUZC-C79~&OTr;{!WYGiw?j37LcPFQ*vhaX zbG<$eVqJXd>pmlg5)mC6p)JXk?POSl>{x_iU|M2&-R{v|V-^pEb(X6#w#aM3O3qK(lY5_JJIdH9;trjo zRauHgFexe;L915iMfA-ibROVqxzRb;jD=;ke)zdBLGi{kQ2aE zEtv#TLI$4HkGW?NW9$)9j=3$tJ2sOmRz$s=F_6oVMrE=`GBBHfR}ZwGz)eABv#cs- zqefHH_q1M6PsEAps4+Bzhs~ENtFz4FMWA;>5aO8NGDv9WsYR!(_<&lX25fxiJG3Ug zoD&vSKGJEyADl_W4lH|m7kt`D)#p*;TzupoJ@HgH6Hw4fq}65Qm?M4| zdmWW$<2;@^DzJX7DTK;SeuGc2IU~s&tBwNb7gq-F?Xf%5b< zU_dId#o$k_0znA(s*7E7r|mYLBI@=U^yh|VPVYz>&Rn@F|#(AR36JqiH#i>EmrI4L*>^m_nX22LZzab}_ zzEwRtJEuY1ohb7Sio(99!9LI3YnhZ36>=*zDx#LLiEw1{qGxPD6YFI&-?ByLTpLy_ zDTu-GFeT9&DP7D)d-~2&m= zQm)6Rd-k_r&J@2#Xp4w#v0YLO-j|>$X4_8oHLvCtCF5HK2l1 zcb2BPuHu9fFv8~h>Qs*E%RdS zDn{b?UwfUW>AlrQwG86p+R|jsV6PJCDcr;;7hSYmN zln|8OLv0G7|x?dM1lNTSeBr4K=yZ-5DT)lN-8~~&F zV2oIte(Gbqu4@bAw^03iev6Dj2ColX-8B_-!s>woo`c-*b^uTmZ+N7XK`k+QG=Qy|UNis?zN**M{6iYV4iZ@^{ z8lHb+Ib{qtjp<9*QoT^IvSN=!|EwYI;TNwZt233ajUAA;?WZ=-X|e@1kL#id3fDWW zx|!H0)Uk;0d){NZC0J@R9XsBCWWJ+U4oyWgXW3>OdHSkQ>pv^z-Z`}IJN3F>)1&S@ zU271b%Q0M-_k_w{9O(6;<)Z^+(WGy-p&w-A#qzY=IJYI>IUq$99OZ|fX;hC=x+ScZ zzfEVQuI_i~N8hxdY`s(mL{&eKXzg6hiOk+(;miZes)~3k%)qj*uNGOC%#i_wlA~DH z$IAB6^j88xwhEhL>Rh~2y#yx@hyu)$VaVM`79rGnXE7A4r>Uq`?Ko~|Jk#e^tmc#w zc~65}EkrF-H3z%@%VK@yP4HwE(MwD1G0#TRMK0%k89nJ!*n4AMWW zdQ>LMW?0*{9bR~ETl&?AF&y&v z-aNLuY*B9~^u3M*0ab#W_%E#E4f*!hlt8IH*6?EIcVcEPIxq#EU255_%?wT#3ff^RF|<=>Kh}J*otwek1IayBVuyW#t)4pHt-88mjOV) zdc79dZMFbBEle{IJ50 zrvkM)F=M<44nFDZ0zZ%M&bZv6=g$7+LSKpwI$K)mQu^0!WrvPi8d`=ZUo3R5bd;!t zc~OuApxJBFmyW}ryVO5hMObb+dN}QJHK+=CtbHh~mkgm-O3#^9WO8{EPM@D9**)=a z-eB_ln#KjllhJDt5N_#VxWBhWWZp!Jp4vtVJl)WqQ;*l8?jNwdQ5nxN+&_GmJ&rCa zF+4wwd6-5Sj9cn#gHBJ;3{p}Xql{MdgD=kd6Hm7|kw;Fw#oMt;fjG6=1Jr2-b z8B3SExd+)B1}R6HHsc=zcXl0(N3HAC*sm{8NN{#X^Y8~8QDM)418$&`vr)ETGOPko z@abSjuF8a|!IAjlZ0XuujH1J>@B%V-}0S0oS0F^;#Ge2Z0raTrFpu7^ez4x}94Q7HNWn zJ+L(cJlF5GL+2)_>Z8$C7C*`HoxGMQp@2DX#Rzk05L}by(z$L^>J^a-UZz+Cwar2} zKGq(1yGBK7Ev(6;m-BdEhE^XH+Qm%RWzII)$~ctQQW()X!da*TO3;*B!`GP`3cnRS zwM3*{OkUF!${I-AEfgNWrASfDCu-;yq@F3_5jeYS7}}G%NGZcr^wkzAE5a-&Kmp3sW$XZ9 zKkxwiGL$d!E~zqpyO-S|h!0;hj%gU7s`VQ_UkI%DHpB&XzijJ`V3q95^!co+F#lQO zj)UtpHi~=SzWd)W%!yF^TlJ4;F|f$ubc6OX$~eI~{*y=WIgIyVorELjE0;xc>cr`TP(a$%Hx+`n_yG3#3N)nZx;Et;}Q2TMp5s>XDn5`W#K?M!E!Lms*{$@XtAww8C|Z9#s{AjUA?N5^!zLAW@vJ; z@V`cf5gGdPd}A6r%(k08yf9^Kgek81OMjJTl3~s^JC{QV97VE3ud9nL=&uYNE!-dT zray113d>{+ed}WQzCS|2Y~w55q{l9Sy>Uf&Gi{lYYbx`yB{vgbd!Yh8E3FKoad=9$&s;&R+|NL&iK(6Yw()$#aYn z443MOD#*$ED7%8F$U5Rp10qqZovk!LT)Y2LNek~lH-mYFTUqH{6Glg-mX+HG6RH^D zR!NzR&zxATs}$6n$rUBiqth*SHhf8*oB_X3(l}^rNE;1M+jaB^5EG@a8wcG_&P*1} z;CIdcY!6WKa1uoI_n`4A4EX82@TVC&78QC+6`_F?d6RzR&dVIRa~tN@5L0^_W%o=i zR0Yh3*+*rx^Q*mGY1|ExXt1tR*|a9)_kNBlEe#e>0o2j2c{8psJN~fXC0$!ZNTFa+ z+-UvaSLsMC~0XKzb^%$z;N8(p)OdGoJ%<}(WdX+ZYHw8Ya9hE68y+-QzFW??pL;-d+)v&whAFzF~dZT5`ZmuS~? zn(hcBh6*TeUiag06l>XkH0(Db-fr^vixKXtVbVd`m|0}QBB`G+rV0C8?wiM1H0c@X z(nYUT+AKgb^d}N`oBgsT9>qyg%)YCzhsznaNyT@e4Uf|W@OINhYKtlWMEf@6-V$jS zA1e_=Vrem=9P0JWPrwW8&o!AlFE+nx%bi7ZojY1v&$@fVuieOi#W=ym#^PNTWm{zd zMw9sRy&s`VkxUuHJaGHbIM@4m*|5+TQLW3X1m{a(F@7yy3?|JFnss$Ri^Bj>x`9;+ zbNrQ+#$ys47<`~SDkvkrO!rRSu4$jGX?)C(2H~=*NGO1yq7Ccgy=z&S5mA3!Ciqpf zMST2mH2e`X_!iN84FEXJa*F{!LMy3{8m5-iZ{Epy|JRgXsEj5gBb0|!{Zb^Hk|oC*fWMNJ6^ zQCN6GjIXp5Kf0KQE0OBG)ZWVsMFk>nl&3DqhZ>B5v@sfA;nB6LE$5^>6HYHH6Nl=; z%LX;5p7dM?=^G#1` zv4C1W$8$y*O#4@*S(pRd#)^zf|F4^+ZjGvFg-Nm4?Y1hQ7;rKQeDO~o+&|Ca@f(5e zo_L)!)om@?%T;r9 zS%Z&cM43fO!J&<;uUq-;B`zt(TiF&tvALN0imwFuGd-IoZ9{GcEv$tvKZ0E|?PD() zXjH(u1^#iAziTk$s3f2li;GqXYUKd8p`szpzp$*-kZm{Zy=vy#A8)*Hv2^8ptvp7Z zpjxm;PuENSI$jkkyF79!>z#~RwkamHGvKbT(v*x|04!n7P&5|o5cicCs#>jDG$y6` zRyyf%)fc*_;3@h1JAmLdIh5PQ{;vwz-~R0Z~YgzmqX22Ai{> z+g>{fuunJ3jCZYA?3$Pi@C^ka@e;&r!)q91oTw}Nuj%AX|GC=QZTAx}dyOC~LRqQh zI3Sh=Z@W%IQXM^~jr|d+`E%j7E8iTPG;f)jzDL$4ZsXi={hT9)l~Xmmsn3dgu5tT= zpOgCn>7%BmNhn_x^*fjW-WFVQ#Y=>sd|eM@_BxQ~5q{AVLgud2%_qVdQQGt-PRA#| zuvE45Y#^kuaglJ^CD%UgsmYM1q5q!9?kt!iU|B)9>N&nPZLtNt3U6G#^ zgnl|>e$N2Pv_3Pt?}dH))U?sqj#FX8+z51^NO#UGzo~&^@J>I9xSwiO_3Lr7_Jy7A zyqBEkxE!mW_9#?Sx0A+r_#;AmT1>K*4+Fn_AINOHIai)p-apQ-!9etwHUMQaEa5)C9t0+Mr*&^AbJ zVk1hy{cHNR;^I$ zeV_Mvrne{`)qY1zCdvsv`mxtk|C&FJJj|5XqFCH>_v^RpUmz_TxlY>Lp0k6dIU1B! zC@QdxGV_P7MSaaji1X2#bu%&cFgyE+E(3MlKACcOgxZnbbq9b92m6(@%KUkjFb0yr+RDb#~ zdE*PjDr)==q-R?40A2M>PjqHD4>yQJ@>!5uw zyd5^>k^x7_)U6zZdPfkP9{Y3gq{z&j{&?&=U5c==J-=uiJE@q%9e|V*LwC}@S14#1 zoP}&s2H>T*-Tb^(=Ti5r@J)wgPH@X`OCQHTd1{*CVb$!1A6IcUW2^Rw=dLwXS`$9! zyTiQz1e_V?u|>4LjRh6SA`vsmSqT zeUW}qHP0T*S>JjMNv3&CVJ)v$LjC`Xt>VAFY%txF5ZwWa?&`Q!iN z^pye-kui8Y0juG?I*-z`KHO z2QXv!WB>?T+ZE#fKklO-BXgiA=+u?ey#wGWmQKlGZi$F%t(dlU<&u5nB6ZHavGUK- z)Yo6@tJ2zFMiVX7qnH#%r_qUHz47ac-@f<%d0P4(zS(GZ_xr71xKcM6#aoxsb9Tz@ zuUB00k2ulUf6AADs0mVj`=aYWp5Q!NsxkedR;%t$qBbDO|FymPAGYQOYUnZw}72{2BsE9w51 z87KB`_YxQ4VppT+j#OapjdJeL0%<#3U+V-rbzz+y1i)79@V+51V9|rXbe|do!1#f!D5X@{ z8>uy<)WtTe{r7zT3-rf%?D{~ijmH!}P&V|^bd_MxW+ zVQc5}Xms}JU;(U?@&aAA@(VP8X9EH?F1*C@(#uK^@MGg;h@MW%4^cP=fn`gM>;W~| zDdaTZ^kxLM(d3Jlf{yi`ZnE6n`lXt|bY(?Ks$neoAZHGd0Ja%lZe6->wLSNY^3l;jjS5i?Wd0 z8+S=iZd2Bff!ifev5O>IupD)kU_AKoUbcxlk5#u&uL|01m8=E$(#c6mehWtWql$Mjmx zp)^CIr6_ikjAZHI1uou$_IahD?ewzJvT(Bi@|SYN4qv9e1%0`tc@uQQm-DILpIkXY z#vA%l2V=%pK6O9Ut1zL|7u;pEf22O=C#M6`S!p`Ko9 zpwMxoAxDyR2jSK)a82`0nfw^v7BMjMba&n`dCL+;#V1 zovyYk$lQGBT_j%@aDEeU5+z@f-S>5TRb7tbN6W}P4?;bIo5uIiKkk)BA@si;X^sFj z$_(y3SXUs3wKc+p@!)dJED&;V#Y>64nwlx1dqb;iBa(6Gfm`tDoGtAS@|)|JQ&gKe z;K(z!0gS_{=unTycxRU>LTSql5uAZDv4&ZQ&n^Vd|JGI! zv*Akfvt6|4)9PsfO031~$4UFS3LIXIPV#g&tKje1wQ;g~V^`nrIArpIR?vJ^HmA(5 zMit+pwftUPemfLdsX9;*}hd?2^Ty4gV{4kXKg39V2TJ4V99nph_(qAhOMdj@^u3 z^}#C`XM~>jvBdE;A0x(fxAmV0sz7?k2t259h`1$+-#!Q-MNoUgD)SvAV|v5hJ*R9% zb0x+410&m8eQ0RFjF4li6plML>+$<4bWin|mtqFYs=4}BUje2(+9J{|%Rr*=t1VUf z$M~-O&YN#zv#ELFk1lZl2EA;g_p`=~B|5#ca&b>ok#5xpm)E1O>%5+eU@%`!las(V zdl%f$S5+}%y-m|NX`Npbg%)%czJb2G1=l~gR3ww+8mVQ-u<6Z&60_C&p><_Ox6+2h zy3!EPQfe`#xTiJw@8+3s8U#hHr@WslvZ)}DZI|PijtW%fD3n|^RKzP| z*4}V1OF!-K#qJ&s$s|(EUiWY=isL!Nl_EZ!ZhLGTEJy>X72Z2Pn8gup1V)Q%tiMue>$`!;8mwYvoKARRi?2Lj@BAW)+Pa%4%z>{FanQ(@IOq z!6U=Va4!`LhG?ZmrdpGId<8Y_i9*fs^9}F3NIfO(URNJ#Rg6pZVR4c)TaV9k)F_|W zoU>y$vJ+w1F=X2p3@8sv^xB8&z8}*TH{YsPnkIf-Y`CLW)Q*BIN+{}3%DsnBZ@_HE z1aT+qTyU4^tSb0sdN~O1Qe}C8o+*&k-LVBs!3(hi=ZU`u*PqR(e*vvJMA$eODK8a~ zLaT>c6M5fx-LbcD@iv>=KPoJz<12s^P`E`qma zC#(`(AT-&)_F_1C*50jbZC>}6Xr8s!v!J9}y$P2Fr%g?z!t_FOP0 zc3h}fjOvd{>9oR;C)-XxRoFz2iU4;P4K!=B=~$8trIp7U(y(Z@{p_ZSzvn|yQ02(<&()ary>zqAot?Qyx`MGd)ZWCH+4?K+l_9TXG)(| z{LZaDYrngESd1bI5Vv1Srfa2Tu0sj-kUmzP?uRy+Up()2Sv|Y=fXR=k_-&8~$nLfH zz+ugnl1uTSD*18d`S{v=i-f*j3LS=*GRi`dX?VIdKFWP6&lc@c&~tJT$DKLUU8|=6m3yM&Lti>tPD6Cw@oWTEVqeH;5wP{V^b<|x0jB+a zvC$V{ijCXIdc)E&afOA{cW7}>Zl9eK^`Uab3r<5hjil}SGW9O+9=Mt!PV`Uwafr>y z+pN4HD~^fNV;$pO_fz%W3Zmx2A%$p=!G!G`;b=MT>F!~jfswv#{5TmBx!T;W*lG7J zdA>W=S;m6UUzXrRmJ|?cvpZN^S!*dGUaw~!alw0LR2R~%dtrDvPC6A;TM?td*u*5@ zAnr&Ht&Nku@A&z>7QBK?vA*}JV{EN}N93fCtRs;uP|%xHv4PlVcEaXdy>28{Z-Y$F zwe>j*u*6sfCp=wV48B>&`Qh|thOMj7omhjB9o`?OF&l=mL*p-NQug&ZDWpli$5**C z&#rLP`WCm;;QPMn&_BcbS?F1QjnDW`BBy5mrpVwQ(XJdTf3k$22!e}^Pm?<82~KU# z!^aZRZKG@-`=6C2Y-d-K(mw5Y!x{{KE^Bkr^*z9(vJ-P?(?nwV#=sCN@hr6!WB1s5 zz@@-VX4I~{K%HhmME@T+VkBk3ADOv z-V9$8ob#fn-8%=<(hoYjp|D~lYF&qVznuE7rsym8a)gGuufn}is%7s>tfVzg73jZh zeoqP6I`Wh{BVRn1Li>TM1rLf^x;HnALgpkYsw!iwA%dLF{xp+tW(fc2k1wn^xO`?< zSPBx#o>`?1?%+&A107w-OvmWrh*@TxM6C`Snjg8b8}e<0+KAK*p@OQMb`gQk?5vqy zEXZxJ{@zIo9(Ma2CD8pJ46=;aa~BkG*$KL9Z*A?>eLjKjV@6C<7#{4tF@;ONBy`iR zLrF&OsT|0EuTN4JMgUW|Z9~peRu3601kHMKz(g!OavCquuKaINa$c?r5Q&*9d z868%+dgyNKR)kDT*jpCw_XnG0EiC4Scox>!G%R@6J4C7Qvo{`$3!cTJXg84(Ct+#T zBiS{>_Rcw)yI&C1HBiR*txQUJuVe)x0dKU~mwVOi6R!3N#)r6zSFH%6JA*td3Yr;Z zA69L=)~O-nPOJ%hkfqhG=m-Ml&tnwhc-`26nYz7-scGv6_4VI2x*sK&ajL{-A=68} zeGKt?G<2LUbIb6R5ESBEz67Sl%3d`Ws;6;>R4{_)u^U3WOtU@ssmGb!E%+Ke;5Qan z^xNisH<$sRIRBem=#0|a0awR{g`_L|%V9cd?mOBk-F?$FbehL!?in|+DYlK1;XcBZ zwG}AChy?FEE^Sxg`@J+jYtyHT(g=!~8B)UI0B7=ctbksIhV77{#MMBUirwL9 zeJ^EmNWMllwyDnXURN#J*LB^9$35m%qt+|ix*-_r6|6-py@si8eJSU0*{~J_y!>yI z-a^+(^ncUL6Kvpx?6RE|1D(W0A#G#s}O~f-QysZKh@NKF%2#8V?PXd6)NbKEjWjzqu$v_{Z>GZ-{OFT#`wFrtK5yg3c1m zcrI>;`_D}r3FgQUxBtt===b02sKyrPeDh;OFwY^k+_RCiVP0p>oSifvuF}zerL?l# zpq)9CL1{W@hW`cy=CYfR)P_E~`fuRbf`KG`3@g8%bOiO>KhLjrs(2#=rsGBnO)Bd{ zFYXLO0|Wx!C?6xuXDM&M2?EZFBjIJni$$T3opK4)XQ-t0c(qLXPh~+$XEt|j zL%D|iS;5_pvJUFf?Q4wsQ`maNNP7A~z=y8LB|l1HH79HHz{n;(U=^w8ZYsZ)a=h1S znX+nK!91<>ytQ8a%*WhUzL8Ekku9e_*p(UJa5wpvM^>+*YbXOeYyfURrq0orNB|cI zxABrh@dh{-_?>7C+jE=p6XmS-%lEfjs93}8kWc+Y@0~?=-OmU~_o%g00Qug=^l+8oew94!-T49l zyapi}`|oCjX0MM?!ZXctZQ_SE)HeB)DMnKE7f34Maxucemn&k1l-x;gNnUX*<(zu& z?JAwRL2{e2=jUx5H?^~0R;Rvp97D_j(LCg5!$@@1dPXBd zto|>NouKP(v4TIFd1x6pnZ5AfOzMiP$W1T;DJ)5RMEAnjB$<;O@lLj zP@vG7uG68(bnlZ3_Q84bZSGQRFDu-XrosP`%9(ey$`dZk|LHydH2HBXeIksNz!|p>BlGH4`y_vTj&iJ!xvGAU+s<5(BGHxiae#Fql5N#YDY}iH zq1)tc;%|iQZ5!?LqQIlq^EXdz6)egl81qOi-);XW*=Dtt6O(4brja8VQ+sY0&vD0g zr=J5*BI)LKYc+4Dl&s2uTIqYbl%=dG#Sk7RIdgT!$~X}Z6hG}zJH|GMqN3Kax@7Ce z;(cFG%Yca(P_S~H3e!uQiOnfYyFkoQ1z@ZzD@0X&rVS?!wj2f7l*-FYEa|%j9SF8w9zhVolXn zeq|R)G>;VuY0r0%=c~wtJXMLd?szv>&6f_%-*7O}awBfJ^f<_>DBrQJjjMlZw_SYr zTg>DSJZhZdpKKDKx9CTwo~8g(zL=Ksi<4(#0x$u+4N9l>*bFCMmSDK`O7N0*?u%++ zj{Jwxg4zHx)m;H&T;uhr%<}D{?OFf0-r&T2n5076%(@d-N%2difajglIxET)t{}f5n@M^Fi!<&yGei5^n>H=O0S0DR5aCb zLCO4KR`Yn!m)5Rt!5+Qn=*7ufZSW*FCu(@G;}@hODNFPxKAvyJKeR+&k&`DH`=(ID zYucz3AUH`qnl49)GPHMs5dqByI_+*Dj`+Bj%HR>@C313HPs5TzswPXJ*q-!y8o0Yl8e zc;OjlY}|w9;bduPciCtg?`qbrhA7Hd;LQN@z1hD_&Ok_k=~nbcvnq=F5o)xm@9e^>hujy3qn#z zShmhH+FB)+{wU~jfcatY2bp$PbH>tcx9#Ut*5CQ zrtUIGUp%t{i?nNp;ly+U9O9`+h;iG)+HjZr7BJ>Uo0939%ibgq$j@tRHpZ!)Z~j}K zGJ~LU1t%>{mKV<6YCJ5PFmJ={@q)DnawwM_ zZROpgdK#nq28K9tSgb1QOFJh^!k(aXjo-doQ=3|LrYvN^cXlC6#D`cZf+Ax>K5lIu#r|{F0qgH^VO&5h2dP{4~X;Tt^*<0(~m3i ztQO1ToIPr z-vDTgYcxoR>yg`_zkQGY{wDuR!uSK%u8p@eADE~bX*z6CT~jkuEi=X|Y(-qWjL+e;xL zF>`F)Uk=18<38W73T~pURAKAIfxKbrzEs^SYC&_ww#IB|3p+>!mt81Jy86k4HN(}F zx%eAhiAwT%R1{42i)fru^DdbYBld^eJ{_$9(F~G`N~SpeRk^3BgQr~;gI#*e?DldC zpCuy+N9#5{5$DA1FE^gi^b;Gu^C60CR$L4!61=?wKebJrYF>MsWGfB1&{ukuC$GK2 zq0v3L|7N<)?o@TLJp03up<-)%V*6Jl4Ok?h`qfWK#d%EqpYs66EV-U-e7?&9C9-Xb=`~9P`J(R2+pS-ZpOYov z>_gWhoeGJraWAdEcazi@fmzMUo-AfnEpBexZTtf1)kgdRZP~`hlfv&&Ww}M%zsr@w zY}*UBQJXAr+Fz7QgT7z%Qai;p-s|wss*2gv{=k?l_p+u&#su18Al~zS++;26{X3&h zk<~Dh3(8|#2P_Vauodpi-W6}!X=k};>R3F|<@7wQ27OzEPxcSGdp;Pp^;~1M#z;@k zC|(zK22!E3aveaKFM!m>GUdmrPUqWY4(fYYLU3kpibaVB-q%v0VOq&w@$ z`GfT8+Tsh*?cmH^<;IQ&CGA#%n}hz8MYG`r`wBkt<9KlOOfAi?o;C9og)2~VOZZ}v z@6PS>H)@wnMI@(93q=%AM3*rhcSf|FxeHcz!t(o*6MlXFsE;8^xw0`1VKLI=%j4Bn znF8qYUf&K?0xiLuo%*G0vH(q+YDWm`#3|bNgE3)}^eA^qze?4p-PS@$fLucYV|Z_J z4;dL=sH1^>l}YryJ2xHPzU8b0C_MlbZYTifoe#<{KP$7bV|lmbl~zOyIW{ioecM%T z+^>_O8FZF(gQM*Z$)Wtwx{ODhNc?^F>O{jlh_}E{-)7pyZr^#T z1e9zsJM<8CuM6pUu`*0^M8O>MgEOIMDW!E{dWunzxts7&Fl5MBAjgD1qhiVU=??K6 zp14QIKI+rtxUEJ-NcX^Q(}L+!o`)MdS1{G6jX#)Wa%Zpar8-^UKmSiqJ*BfrLVL4Z z0>qTapBGB=2kX3R0H&Hu8&F7r{m*7?WVVhIaDUf#)gq#{x5V+0-N}qx*E>@AJJj$e zX#N|lpS)pr35FuJ2Snt~{ksI%K#*lIFf9Mhn#lG~H7rTgw|B)eXNgVRqn)Et z+zO?B_mDs6QU9qs$hD6Cm#%Xy=fCm;TIkoUB{>D9v-VJ2EiP;s|8?H^d!OO}Q04z~ zLxALNKWrs+=3l0?0*(mHnGY|qQzsRi>lwo{KHMYOBivW$xOgJBY1lFK8bD$yz(fGi z_UfjPfwuf7k|HdD=*QsP|A2MvKYXEFhhvskF_Sz{fJ(^iQVsnNpfmp~=-_4X=ZB~@ zTAKP1(7#vx!+`cTLt0pFF{ZEU=ScIRjKAbuGqsWD=05y_udp<-Z*zDpu>V?&A7Pvp zeH8w1^p?k~kN^4=xA-()nMzZ~cH}G%|NJ{34&yrF3pmE&&%65&JIeitI>ej!L&FYfP}+t>BCf#VzGn(Fc( zJ5kBCOoeO8+`n^hWy78k{@5pQm`Vi@$WY+Hu--_`3H(myY&Vh!PQs~xBpCvF-Ey@g z3nZZVDSlu18?gMB%R%c(nwsPY3ii~U`)%Pr$w>_kJ2yD}hsD9)Y*SdP_gd>o z#+)~yNoI`pBi0Vvg%2G#_le~oory6>v;msL;swoY#u#$R_RPM!;4)sLe zn-20}hK4r#5RY^1ifcc{lbvDdE1vuDz%i^!xIcdRozsVc)V6awv z%x%y1xv~U<3YRXdD!C2HCz);mkfE7En1fH`VuRz%c7H$b7tIQo4jT^W` z^d5gdNFL01c>@%d%eRalH{>waAXFAk&|=kMjK6I`%Xgt!|AnEFa05|qoCL9Vp+-&J zs-9p`AkMi5T6`9fl(*Bx(+VTVtSP%cbz9(MA3*VEu=C$WGUy={LhnJlYd@r9M(PD4 z$VCNn1wIochIsx0B}_8!$xoZRm`U7z@G0K4NNg&jb6ECKa1^a$+RlCMIXKB6kkqeVy+gR6FGY~|I&Jnc+WV{hwPI3 zG;$F|?ZXWa_~I+LylSc+$r^nfW=q)5-V@8&!Q7)3daI41 z5W_*7I7#7sU{^T3vX@+*Fi538#9E1g7D&7#B&TDGnOCVu(GOC6@SK~Hn$7IhXRpA8 zyl~Z)Io661Zumi)a6RGc;j(FNx#p?z46Syk`KKh$AhXKE2Rg}2y+~!D);St=6-U1s z>mjw0s&jT2vj47)N9ejDAs(l1I<^u$J&}o3)aJnh>FC@q^T_Oc4Rq+t{s?bRlKmT;}m?@7a2|blGztr)1!)6Kz!B9Qws~*x26~ z>lsd)mMAU-i)@9B1V@ve*DBV?(+6It>JNXZDouG6y8V_rZa1b2r}&X6NegdZ-YSE= z)zxPhVz_0>KS>$yBw(Sw##{I$uEVNvXinm)!uy$S=9uRtFHjkgu{`|`A7Nny<+U%X zbWPH|P?OQDPTd+CnsK-1g=bdC3X7SSL@Xa?F!mo6iJqqBZBPn-V2M}!G;L@&yMBD< zv2QQIvH!AAmgZd?c-RZwCzuv@!?b16CFat@Un5uaMB@pc5cW9aFo{KK#fIH)G?J!K zSgPl9SeP~dA}Q=!eu2(i%L?;xt}gG7zk0js2*y*(ejR%m5cz?YSV~~LdO5=90A_C+ zTzMjJXa=f8bKvY3kL%)B>NfVwFYvA_26Lb4*MkZ1Xzki~6yYj#eq z5fg6q7IgCq2*gV}Mf? z(*FyTmHf2Yp2{XssCbdaToHx0xjv=Yo1f$MHWt^3_?GIYIh#eSnU$Km{KQge} z0`v}beYMpe%^ydFl&C(hwyt4UucC|c_^}46*i&vx zkszom9S)RZQzfFgU8DfrK2^h2Z#6x43y1V!1M}U@)yJiL&2iWp_U%>Nnf(g8rXyOe z=@!)ysZQAmnFum9aakSe4i0SfnskRBm3^9l^an-?3;pEa3M2l?Q+=dp!y z8ms2$8H6q4ng6E8hW*6wxQ;cjt5!Z9@m3ZrS_8+IOgUnp(0CLAfLG?+{i%< zQYh@^cs^(>(zrG07w8UDwe8$Bl3AFWHbZOa<-IAJJ%O=}IfKwQO;4gpnq~}$FuvPz zr&YZWj+L8SQz-ABulxmSOlUZ*KA5E|%w=@##FCGH(${7Yz}sOue}%YC*t z?8}AHq8b61xM-e{BdYm8vU5ZLgt#gM6?{SHZpL{P>I1oq` z=425-W>lwUr>hiOx8@17-R`t6>-8h3KR*zg5BUYcJe=-2+?MM|G%O#@k0dTu%+FPz z4ti0-pYZN(#=R%Yl*mi9eCYdjpPPFX?~uy;+#CmO=e@}_`cH?WkHxfwhl7bWaBVbt z{HC5;Sf9?^U={4T)C|CLYn6OlGJYgBoV`vuMFveX$V5?17o4@L+) z3RQdVYmJxpyYB5q)RRFQUOra+aH(%uV3hw_<5o(}+7Bl68<6539iZsgh@&}}1rPx4 z11umIz)lRg*@LD6NaMihM+2E7yMiJD-4_&1-h|S#Tp&5&3?Ogm^nsY+7i+e$!uAJfNv#; z>^LM2<@Yk7B>-WgqR`YU>Z9!chb_$Mapa|s!YPcwQ1I`E+IVe@0N=7+6ztd7Kf9>Y zv&KTlwzPy;S!Ix9$ZKT^0nj;nf`G-q&7WBogR#;C|2OO3YmH5O2)2BxQ8`NdyWPlE zL3UXPq(`X95mlR4Mw9LIG?1ByuL<;dYk4sCsfpmIA&#&t`DR2tvevVi?nXTY6lY`T zpxITp0;_FKJ`FuOVu{d-6$|!L3%uNEz`Ki##TQs_rH^}ey8q+CzDRsYV@O|s;>bj7}^m%2hBG0)Izj@7$*Wi&(eR&mP4>N+<=)XGwMggdjM^Ba&B zeL4vLJ#nH`Q&He!vY^=3bE7EJT0h>y)5 zO1vHaTpLN|k==67S(P&vmXS|QU{5O-YQkw5?(``coaVs}B417SWuX-_f(i^Lm9Jv9 zA*)s?(4@ue4_@X4P)}o&L;?^=$Fr|!R#MEzwU0^bBrB=yG9g5Y$aRX&!yM^Q?O&TQ zn9@Pv_P?9Dd+uMK3CXp+*UxfEcCud^J=5<4v16)6`04HtDVQTdECw(eAt5Vnbvxek#2ym{S6~~xqDmhu>I?U2RbqLCd{6qcLc}{@E?W6 zs4}oN*?)NSW2kqbj$*dz^<(cU=9G-&&%^o)sZCqv=zGb4zyH?Q{H0yBIi-RgzpIbp zFHnp~rdG|^%g~Ccx?{AldUiM~q6#(dD==YbQS)A{sxIcCR~}`A0F4C(!;@v59Ms8B_t~HFVp9ySB-qM z1xGbC&?a?;Wr2 zT(aMqt*OPBe{&wby$rrb@2|6C6-P!Ti{tCi?qHM@!dB?>`b3OK(OgWe1oE_bwaJd9 zOqfsnsr7ALGoDPhc6k#Dr#R+&1m?OaGQ?zdE=jZIP{SMf5(h<0~zg(-G1 zrRdJU&ASAL)TEnB1hlk<3hs+qr^!#iT%tgY7k->ZrK`gN)4^Wdq4Jil8~v2Umz`e- z9+aNm*=uhxszz~#hi?~L9c|hQV{z-NMX=i?oFveaR1pfPYO*8fc=+0^p^*!SmPk@? zyxwtDW-UT^PQFHdr_cmZOZp46;Xhido*_&n-Lb1yQmGL~UL=cd9c)-@Cb&3kSd=^F z2?sc9f$M&A)`l0@y{|8b6Wpe{aC=@eFt)#@tY6t<DD@IHa0jMb?( z9X$qg*tj}CE)Pl@ikHsGI02lxy$^k$DDKHB_1qJ|szJmTrK}~)I`$a=duO1>d0TC^GH*YsD zdpCFbn>;rF5jhoglq(M4^^<1#NfHcSiyKb>%28HBG1E4Vk&=gm+Q< zYX?`bSSUzKS=n1ygO%R`=DF_T;&w%EfHb@1U-;Plg|@J;{LRzC!tOWyhb~}A@Wl!a zUhd8o0Y4-EPu^UdeZczqc`<@_9DC1OI^Zt}Sa11GZfaLF4oEk;T54#5G!aODasV~@ zlb*2mxup-%SNS)ryyU^U1jxWH2UuGusDU&MNR#C65}^ILd=)X)4-4F_)(y+3J7 zPdA-E`9pnOoi(oN_lnOWdmEKsbf%4$qAr*Y$^iAXbx=|PX|Sh3D+BHI3_%){6WZ?U zV4wlgcp%;H<)nKh!xf*IKzsSC^q+Y=eRQs5W(L#uZ9SE)bOiIjC|tZi>L-5~kCnyG zcY%EYCgW|d2adI?vamZgUU#nK`6+|7je;UbgEGLZZCv&Llnn;G_n#@hN*Mlp;tJk%fk0pra0T;t{Vpf> z^QjHs3#MQEPW_`SH(>kosqfDcPQWtw1{V}66e$#Ol-uB41`PZtA}FH2%F*Nhk`ql4 zO#$r|ni3kvuN1%vl-d~#o`A#uCQS`|W&>*H3Eo|Q>F^JJsLQAWs0*kgsB@^}fC2FB zCzn4pHFpU2{3XF}&g#G%$nB3>u>ot$6#fYrjfVNF-`pE4``tR1`GZ`1i%qfVd>4!`o; zD7vwFrfe%0j&;|4ZBfuosFP4CHU>i6D&L9v7Is_L&455V3 zL0BMM5PpaVL<*t^xed{Q7(wnq>>#cXA4m}70VEcZ1WAXyh7>@`Aa#%rkk60-$T(yk zvI^OSoI+tx94HC&8k7~v3l)LNLe-#pP&23<)B_p_eF%+*ra`lz@1WJt56~{?2y_m* z4n2SYFl-nZi~+_C6M@OYG-1XtTbL&-1Qr8Jfn~!=VD(@-55eYO8?X};G!$YKdK7N3 zZ{9-DN3lZjKnX#KLrF);N2x|>M;StyN7+WXM8!p=LFGafLsdb&gKCHBhZ>2Rf|`q3 zh58X3H%q98XlQ6;Xl!W0;J7qGb40t37Kio{trV>VZ2)Z%?EoDeof4f3T@qar-2&Yk zJreyn`a5(4`XKre`Y{GJ1|0@Jh7yJ`hAT!mMhZqDMl;4B#tOz6CIKc3rWmFsrZr{& zW&-A0%zDf|%q7e-EJ7?cEJ-XqEJv&`tTe0=tdCezSbNym*o@es*xJ|**rC{I*zd7F zVb5cq;1J<(;>hEe;`rdizF}<9g%9;}+ny;m+V5;}PTW;HltQ z;8o)d;{CwK#Am^m#lMRmh@XOAf!~L}L4ZlXN+3^QK@dXlf}oCIjNpKfn2?W9 zlhB1QjnpI!6X0VNzJ0-tHE=z7h9!*|CK1hB< zK}{h;VM7r^QA#mFaY{)~sYvNWnMhefIZcH^#Yv@2(8qeF9_<_%3Z&A~O=Ys%N$uRXukc5Q=}j8=x$k@hKVGwmuJF`X2h1Km?P1l<}v zDZMPcGkqF;JN-5T4Z|%4ABNWqy$olJY>fJh;f$q>(@a=QB22bSPnlYowwdXe)tQ5s zi{(J-I$4fb*;ox(qgZQLzq3)WsjvmI6|qgRtozF+_K!h+(q2;JY+n#dBS;W zcz*CQ^BVIe@^axg)?O zU?Y$z@KumlP+c%euvPFvNLa{Is6=R0m|6IqaE9=h2#JW6NSw$gQB+YmQMhQM=!uw+ zn73HD*p@iAxRZFH_;(352^)#G5{r_Ik`|J$CFi8*rS3_+lA4odkhYM{mR^uylChS_ zm06MHkad)OC;LP0hMcEdmE4iMn0&B&ivmnRSs_NDSCL3jUol;AMu}0$PN_&~TUk)~ zzH-Yg)LUw|5^s&ETvM@9DNxx~6;=&aZCArl(^X4XTe!`6+w*q4I#gX%Jz0H9gGIwt zqec_ZRMAY1FZ)2U0WYpz?Ud#ER;m!LPP&#v#I-)eww zU}{icaAc@pm}EG2hxbnKoh~CPBL|~eV{~H!<6Pqd6Gf9}CQGJ*rje$jW^88uW}oj; z-F3d(WR7ocVP0_$^`7Cq!h7cynikm>2bL<98J62t@>Z!<>((;XPpwyNByEyxR%|70 zlWf1+N!lgbt=dc5r`T^e$UCGv>^Rs9pYss&c;>O~spgsM1@SWTs`VxT&75u@cAp5Jd0#2t7rw`S27VR(g#NDn z-2t2d(E%%gN`X1|QSMvaZw+Dy3JaPKmJNO#0tvAUX@xVvAHtVHl|%Exu)>_edctpn zCx!1nFnmz|@Y=)Bhl>%)5k--Bk)DxbQQ}cqk5C>tJnD_U8T~x^GR8XQOYDuWIjQA;`(GXQ93a{i7+WJX)#$nx%w&n)0n6G&&;2FP7z4S zO2ta`Nu5i(omTst`T3LQ=jrz8BQNA$lxEOmL}whmw0=35DU(@}buBA4>-3ewtFNz> zUsq?dW~aPCd*l0N`K`g*&K!}Pf?TTH*xZXe*SxuWo&5F!;evufn!O0eS z{lyB!wI$pouS>~FW8VYsecrE?-76a{S1WI=5UD7sWU0)kBCd+5hExYsZ`at@%+(sz z4%DgEwbqN*S2gf7w2*nL=RHE*44yVEw@uHD}I zQSIZW4yBH^PT5YxC&^EZpT$1ceG&Om(zL`-+*j+b-^ZQDcP4x%&L%^rP^V(138qtKXlAl! zIc7`egyx#&73RAabQdNUtrpk6d3`%ydbo_coU%fh9B2Q!B*hi6AI$CStUCn6`Er-r91 zXMX4C=V=!l7xkBFms3a=B+}i&)8eNs00Zw(ThPPZ%>w{jBLE=o2LLR*KYXvBIY3hx z0_Fi}0|*af9r_SlQTtFLQI*hOXkF-O7_OMNu{f~Nu{UrAacl7M@N)@D32TX3iMvSp zNxzcKl7FXIr`(}BrM|cZrA4R1qQ_+*VkBZBW2RssXQg1HVZX*f&q>e4c%7M>m4}V@ z`i&cWH~EEbiU~*yDhjCxtB5FxDv2qH%S*^gN=S)G3&`-uvdUePCsDvsKq~GjEh~@T z>Q-q~%~wml4Oe&6xTC44C8*7&L#<1ohoKKMfEYsWpcr8q6PQq%GMjPVL`m-x$Am|FnSoz~=jt z!9d7$xOwRFu*nCE58Wa@M4>%misp}zi`9*@eH<8{n2`UZC2=C@;3?rV?iAHj+q4JI zGt=u{3}$?Ld60$vit;sQw!|CFx0X5Hxe<9O`S}HPg2#0>Vb!69*sX9CropEB;r4S;B8bo5Xu0hol!|XXFMkQY= zf6z@U0c}A!A%0;75h4+!=nt_e@y`;~lG##m(ta}cWL4$(<*5{)3ag5}O7E2uZ+WTc zsS2r)tDW7RRd3TM)J)X6uWhTNt1GL=r_W$OY=~}ndS~5e%DCI4$+Xn$)!k(CsCz*c zo|X<)7S_f#dbZkj8un@qYL2&@#GQFu7+gu+u-&2V=N`wNCtepmsJ=vgO#Wg4dVyZ| zQ-T_Um*LohB*w+5}2vW~M}tULlN6t{hb)F%i2_1VOX*6* zMD>+AmPU$Z^V$pATeSOhne?~le=s~{6l0uX3TCEfZf3d5a?YB@CcxIsZo_`gk<7`( ziQv-ZTD~5}&BFbaCyrN+cmGBnp9w!MKjNml0E57wV7L&!(7bShh@{A-=nF9wu>zxz%>*1={Wci?)VI$_%3+7EOd>O~kunnl?>a*FnffyX|IOM09cUyxA!q%CnE zX(su{Gn5pLRMWI4&p)Q0W$?VT%zT#h<<)sM{~MdP={bFQDESfveubq)>&2WUj-`d~ zx5|YoLMywgDQlc-+w18X;EfB-w-JpW_*&n!bA2r9l>0RC#lM@br@!y1%)Y?=HK1s6p>r8gBNRWr3U4K_{rHDg*BZ84n* z=n)JsBrs|+5i$)ir?Qx^GO#YQy<_*{5aWb!e&$NNZUXksZJt5i#v8eON&F!<9Rzd* z#f0dDA;NPajiOJ*9K|Ii@Fb=r3#7cIrDZT=24pMbD&=bw>J^)n+LS-v>Qfn2ol#r4 zy`z4niJ?WN&8j1!dt1*+Kgb}>u=&n+V`39oQ+KoMyCe6oEMzV3Th&@0*^1cRxBuXX z<)rWY*5$zMmV2hhmY0Ngtj~;}fd7+#o%@DC9U+qN<}kJJ#fQ<6l8=Dsf!OztGZK;# zZzaQ?eoRSBvq_iFxSq-QiX~g%twyd#{)@t{VxUyGOryf6%DyJ3?pZ^5(;(uomA3s> zhxeyfUwXSQ`nU(ohT=zBz7kJZO%=~<%+oB2EXl0!t>UeXZN&fJ-TJU|Yqx!${~-PF z^jP~O=XB>>>;it-@^k+9qy34%_U8bELDa?&MA<@sr$7C9)eiR8Hg!8KfAt0pkGE z6te@12P+jDhV6kpkE4(C1y>%o8BYSQ3G`w=5oi<4fPN~H=qWJ|aSw?r=y}$XS&(Cs z*HYM0l2LY21yEn7o~KE@rb&xI+e#NoFUNq!(8HL*WWmhCe9qF%n#tzDuE;^nvCH{| z>&qW9y2Rzeiv z`C)kB0S{Kd`K14mYIJApt+?)ZorJkWcrxwNmK57GyyvwqtX~pmcDxGC7J9RrQ!PeN$t3Ag9p(E&V-|35UyUUw@wm%F& z1F_eu8Gs$cnv{S$Ahr|%Vo43a1UUW~A*vu6^cFG-#fB(M!FEwpQSwkR zQ9V&-(e%L4u7N&+VTEymnSv#XwS@f~M+RpK_dXsy-e-J20#1TO!Ym?7Vh-XXl1|c0 zvisyF6f%@tR20u|I&60Ap&ZXSt3bbdn}>jx|Arx7 z2>;ugeFA4f9KuE-Nuq<|BoaoFZ>6?mBxN7V%_`hfj8&SyC83g{x_etoy;u`R%US!2 zE~j3s{+glcokC+w69?1IyR7CB_m(W>t#WN(w$^rS4y=xmPTyT_yOz3>diZF_@h@i;bN5;`*F~~T*$9eImPjnMYlChpTJnKm1N{f5G z^};ZtDU&rT5uE$2-*o4Q=jP=T76cY9ztb&lEM*LyLKmf*LaU(Z+E}( zApB6_2<@o-7=9vtvU8eqW_*ryUVUM8iF;X&G`ebkFWZ~^SE~mA!I1;u#~CDYj}-vW zlK|i%5s5s@Mj|iXfX>Dg0JJ#&v9EKL84bk$Ur}FC1Md&6e*VpcYyk){pr)wFFbE?6 zC4|5TA;@-s4txhH2tI<>uiOwQ3lKE8hb0f7%5MnpzEijGN2e)=pWHSKwN_M5jk zV6znzmRD3(RoB$k)wi~_f9&Y|^!dx+(D2CU*w^ui`Gv)AOUozWhw7O8{Kkr;a}7N z9kTy-`<7NoTi}nEDqrME2`1njSF12>H;36zWWFuqd;Ej&8dLn#Em2LrDOV1wk`#tS=NVnz#dStpf7i}# z$=~jECVD2gWi&b3I~(nN60q1)HFCjQIu}g(E@Xo4eP2|NgU9xk#>LD1$GR=PI+Aak z_$I~$_q!-KRz9M;f`6`x3V4yXA!ed;m7X3J@)bv*Tl=- zWKJD067J5whrtv;LW4&1@SgCJ*L&YAd~dR2mNV?j{y^b}LAnkL9E}VM$IRuU0)s)( zHq|aXcfQ@;x4s7hjN}Wje$-m+4*A>3o{2WwK0EL`e&ahjHg=wn6Cu_|Nb!X$_4%aY zd3ja+vl7-ad&@dQQ2WVK!rS(JYWOu}rCl1nf@MW_g$+F8gIE zF2>QCt9JZavci3lz_#`l%pYy6C7t;$MdP;hQL;m{1$4a2ow*Te7)r0?PU`+qWiAlM zN4hGtvlLbKjIMLX>4Wc%k$==;Q}wglp6d#f#`JNnR!>*57zCoe!^nu2HiqJ zY(1id_t7lGyA<1mr_AGZZkgp1#*;Er!Fn~O$xau^dQmMkrt0p!-SCmRZTv%lW1sDY z!-bu^)&#Qehaoq&%eLP*8A}*fHTpRxst2H`HCd}?Iy;vuH{uy)Vv~~OB7tzHbzk_k z10(>Bdg?~E*WYQO>VfNKaMlHF@s=ZX&qQ^Wc6UX9Q^pVPn^)LC(ImnS2_!VrT)ajC zbFXFuci6&ad;7hmQK}QIyk*U+u2VfEYMj4g&85PH^69e-MW_mlQ{S*ceIr^Sr5R`$yx|z#e5mtbrFlF8ubJ*#t{GG%G)QK9C0YU&kXxy3 z{AdApIp|~Lyo0k*hRdBrZKldJcG9Sx^L85R%{kvb!SB`;O~%pUMas4l%{3zjYnRGG zZX^Y*YrVVQlbzID2E0$A6-f;HGcmLkNq~PZ7#{JNw@JdiNOvXlkpRyn{Pli@I_t(KTzc4K z*V;3@q_-cRt0RGI{JGh4oEjwXP4!2R%Az^;$AxK)OL$}md;Lh#%!+cdPQ~Ef%7nlJ z_jvt8wT>RDaz08}VqE%m!m)e^F%lS%Jbs1*f@hJyt{D&DSt_!Q#}ir3x5Yh)&O zT_Q+DGfbSg`Gh284TA>j5DQ?>j`=%)b+8msrOH1EKn)^`+3Xb|A;$r#f$b+QfW-ekgOcz5Yj$ z2hPn-ev^;+@*>gC!gSgzLuq(CRp_zCqUMo6G;y23A>H^|4WIw0x)o$$p{GhYtM`+$ zb<6nV%VTkmOmhpDxmO$FQr@!K?Jif1trROv zGVzenvu$E)%Vg?5H_4tjj%_n6TcdJWONsQ4*AHdUtfddfpeK+;fpWD=;Lp(!J5X&s z*zz%f&=^bHWhLfI65?xq4X3GYw}=*B!11i>RQe!NDt~M-zp30NMw@3*U=nMPWjyj@ zLFP-#2ftu}0pTyVs1w_)@_RARV}SiY_UuqBFi0Z@ey{hSEeErdCiD;I=BQ+^5`Q~n znlzeiM?j>ZVbwd+xc@GYJ;!1S97C2@1^?3lwDXSbK$EXoIR>#b+qW;39MwGAbpV!c zRydXU@7Rz3mz9Ab2f-$KFR_Yfo_+qN_r=-fN&1EOdRN(YmTqv*DHrUIq(7gpcfAi* zKN9}_4qwb|t7h4LFZc2+#5SRn=fi>U)a*a8k!ox}AD;CJiD~&W+aG04cQ@$%FJXP< zi#$w_x~eLtGwN-!qS9HpV!uMOUXOFHPqW?WC(R7`g`OrkprbMQx!_F7>7ZsUSX43K z^a269;50uw9^TqV0w<@bmzRP;eHD^FteUfH>3%2Cts;TF1Kx{sN69p=YX_t)NFWah z^bI49cJh&cCKAXhfNw2oZ?vUt<(HseNMDA4Z$dm)K82rOs38G3Re~)|XRxBX^lv`W zLr7p{?drw%Z!CizPuO4BTxKBwX&odm+wo>Rif>li6#pN5ev3rgEgF9sGY9|82mV{4 zLyK;|VMEwo*!)AH3cSBH`@7Bl?u}Q&^)CbD?{NmsM1Rj9f6tBohs=%QzgE~k*0XzV zG9Wzg9KKbZGaUdfp8VkAX?wNiB8SeUK{#>?Klwjx=>D@&eAy8~4ezWEMupRiT*RFV zfiLnt#oE2;@@7wx2H|_(^I|~l7Q$O+>|x-%B8e8{@9^)|0XlN{cav~!20IQ*w~54XwwdfALyC4?ig3H5AiyRt$uVUD zwSCN~Kt{efFJI9~LawiCFVR5wdUd$cmy^6Z_ICe_n-AG=BA=cOFXH5y|%V7CFTZNca7skbt#jUg}KAI{ic(?lQz43Em998+iOzZyq6N{u#VWM44XRCv>-971b&^WvsNOgwk<#}+K z`aQ%>+g!!!%n$2E$ir0 zL4Nj}{IAHHjZx4T|17JOu>X=*Z&=&?Z{h#0`M=b%_G5kj|7UV? zJ#_)Ccma&f64_;XF2f@u2$|Ah1nf9fqh?S-G*{!4-)PnME^fJtjGEiwI4|C7hX8JH z+v($igrNiKK_}GjcxgC7n8w9%c*B9L$A5438wzsiGxQNARsqn_QN&E9Y zW!~w`DbVyEx2@+_C z^DUC=AYe2by!@7gXim<^IG+{n*>^tmeue#1|E3itQOPPiNY-sur2{X-{Ke8KkEEFH z$G2+Co{`DkYL&Li^zm8zD>wmbvH}p>m^T+M-M*brFHbi32A%lXQJhWISWSu)sJ~Tb zPD)AkE~;Em2Jo^tSFrrofUEqu*Datd)4V@axXxBZKlkE!J^q*~*0K~t58=Cj$ROQ~1 z*3+lkID@mdHJjzs*!8CR!e^$RNLIu=nNYBH@KdQvb+}kxye48gN9TT1hAh8Ot`#WD zUG*URbg}=OZR$rCzEz@zkXDv3H}6*S(U$chqH8Y*u}!0eTF;qZ@le7OEtwAo=gT+3 z%l_#|sTI~Ymwh$6apFr8CcZ(des&j|yg!%A&57(!=3I=RF9-k>CU@>Kf?C>Vui;H9=5c3M#TVJzG{$drrwUKqMPiGl* zHVFFXmBF(^uqv}(-j_{_;)wNTft z@D48i!Ev^#NQb*}yNqR0PVu)s&(Y{7{G-hPlkCFa7`m;iy$ow4u#o>3F|Wo?-q+Wc z`-r1M%}dU|OZ|`5Mgcc}u?N{g7fqU3dl`_OnU|Rx%A>7l(BvE68$d9hB1C@{CPQXl z2>;6{Gyl6G|G(Ek|3yQR0EW^<@J@u5_`r*;bH#zujgj=|a z$|pY>$6<+e#I5m-eT&pWN&kNv2i1E6ngEq{3>a|E>owbn^|v8EMEi#IC-Nhjr*G_e zqIg_x)n_1jkN|Y`7@T`ReK;MEz|K5qjhlkYjV!5a;XlPgsk-xXrXsY5Gf^!yODB|6 zTXS{9_vuQH4QPuBB){c~^fJh|92`jxmUA_ykQ(nwtbOggudtTdZm-z~fsI#OpgK=D zlGS9bnJ-_i&W&a2CQb<9JuKp-kExrtJiHmnud){CL;5^t_M#pKaoRrLbb$n@hDxQh z9mX>=tkdhUxbWL26zY$nw)X7>xr%AkYK;XO%dFMXFzG^A6Pab&s=ryR;fB!oCoCX= z4z)=n5Orjn_o&e%+f=jg6Kh54nPFg}o74z5SxoFrcf7BSJK>%Yvfe#vGc|b&J)(46 zsRvbkGh$rx=HrVW5k#dDkR9{|p}dQxk~L$dY2(#;jbiZ+sK=ExYH7<+n^eKY?dsy6 zELj$9sQs_0?7`!t$pkftS7)SlN+0;VSjQFCK32LbLLfmRF zgFd*woZOz&=*iOjI{!_5hh;ij0v}t_$1Ha#dsLB?J?aneN}gKphPT^Con~r!!xHNA znuPu@bcS5#D`p+u<-8&sH<@B)RJhm0oc~1NRxE*gs3^KHb6q2N%uISfx~8!ZsHz%j2*GhR^+2C zy?E(%xX>-|2LAfR@e?>R{J;%jso5b%l3EMTd=s6`{ zNcS6zR4r9a{0KX;%KssawU?eknN#yb4cotDntdEVr`rPBmFI?k_|PQ zLjE|LvzOyJ*gU1{{i6a~Zqn-qCv+9VhF{?2osZ8Q7Nzm;YAzxHLdU?-@{~jVDOvb@ zT_wgw?lYP$65i|Du}^3Sj8rB_HK`**jD`+g-g9hb*L+kXO+`PvICc>6$UepRVY=H_ z#SMg&Q1=tDwDZSlqMdmZ#cbr1o=CtZE+i~+=J6R^*&{m^)wtt#p!HY8|7pA*#g6iikA=ts0CY_P2 zHhVe-3F6yt^F_4K$Ml69xDL%zX1Sv^j^2aQZsbpw^2)9Jr$DMRdEqmA;X`-I%{i@C z4XW=42Ib3GRiH*+5dV0)4hfWi$5URV|5Fq+yh+A<9#bic=u@(N)q>fih-iK0LeZWY zrI}%HeSDwrEoob>BCdO!}m`2j18h z^lV&yx6!A;uWp7)x(ufZQY<`{pF4^VGJG|Kt*)umf56pc6!Yf9>w^n(V)ZzTp$%|v zdC(uuHK(R#{^;)Y9rU)Y$MS~}J2Guo?n@Hit|~7dc{_MH%S`V6^s%iGJrd9| z79C^b)O$JnrpUp&W?}PWb#2T`nItLs{_M8OB_hk}fHvmXxU2oHc-67wPNyk6hAJzL zCy2%Fox}S+spnQXFSymzD+6qjCQL}=>2ba{y!cU10Em_*+3xTrEbP#=sq>jHYDKjh zjCqC`qQ~WMevbh zzb%db(cQX9b9^bRbME-gmioR}fmwp%n8lAbiZ0T7T(XC{D+G2rVN;(a@Zy6~e5jk9 ztui)?GU}|lFQiLr9~Cw5j9oVGEf{mno}15YJ>2%^9Qzo8P0PY~q$PCYbD^RI4bBd# zLn=Y{o~yo3oAYFH+zNfLQ9(#|CTazolp7Jw>xvd3z&CE!en|M@Tar2V%LiP zU0uNgJ$9U*nP(4bPTuG%A^~&hUAyHR(k=5!-nMD%c|^><3$JX&3r%%pr3ysmgwxxm z8&ewAc(D=|I*Mkm(6k>6yE}bwTpiXiRPuWKG7W@>tRw!#7aRZPYnI=dF1?hf}MhS0&g~8T}xV1r*#fdgs!mwn9v0D?8AO-gA6V?Ue}Ls+STSJlyT~Z@+p< z{Z^kPlqnQ*%go0!Q@DRiLV5oFG_|IE%EFxT`|eu_9E^ybO5%8NtiyR%o8SaA!|Eu$ zd2_P0z|1_jyn7Ej0A?ke#vO1>j+@si>jsNyB?x6&Ti57t>!YO0GRG&4?97nKDn|L{i;z~}1 z5QY!)EOm@a4eYsGd}6WIoC)N5tUR;4e~vfC)tNfBBZYPGvKi;N^U$Kd(Fe3BDVsh{ zr@Z#$vDiL}vZxtmny{>i>b>J4(1q?4*U{$8_cp}nvr#-=V=x3Q7z+jV(oZI;$-K05Dv-{Rqp--}6R`GcP!(3%5pJgl=E zTpKz|PhCz3laO3+QZs*u1Sno@v&JsE2!Et%&MH2RKEU--Y#7S9zsmhkOVNc%DdsNe ztt5)Ylki+64V4p(Q#$JA7j{;;4zr{T>L#tUtY#`fMgfA$Spj?l);AtmnndrgWq5`S zV15EzDd;Nqb)Ka=)z{38eH)w7=ZxpUKQX)T(cC}ROt^#{qb~^7v^yc9FWH9PdE+wf zwVrCk;#L)RO=;#!#!4jKohp*WPg*C*ypzDw#!SYb7#yZZnq%D9dx?m3+q07t3o4w+ z3Rl}T9|AqBa)E#8X60w?AOYbE&sZcN7g(cDd?~#Q_IGXgcTE{G&|L!x{?g6$uled; z3)4md+!VYAm(T8l3v&Xt+v&HgQ;b5f4J9>b+ojQax77r*SVhU=B`I$A@OV#cQo`%pLklpFZ{dT$F=Y4d2#mHnH=d zq`Hn5PvQ1p&$yx6GB^Z^OPNS_DkfTkFt+<9Y=c#$L!~4t1}eLXt+Yo3Uc3~V80}?E zcVHVP-Y7fI$HXdTx3g-^zwQnx)!4QTZzkOiiI|V*5QxP#;j2vIb0g~fz?>1()a#U! z{XVwbsR@BSxo4+PRds5<11_S>L1$+MtLc$dXTs--gWfMhtFXJ8sMbV^Hy0gjo{jtK zDWE=2xQFJn2mgo!@b(`_$7OGuw`}^gQQ?lhn1^`1k$Opxtm`i!S3Zpq(YPn~@fC2x zK`)el-f+2ef|K)Ju@rp0^d!EtNqy+DMsr`9r;&W#Ngb*gU+zylKO1vNx+<0uJ%4up zzKihfh$Lwb& zOs)J*0}g(ERL(aoeTz2*3CgZNq&n7V=?SWO2jl4CL6ZjVCfhATG}QOKz>#!`CnzD_!df2%Q*R;$(*+HxUnVh^3Raw<>Tz)Co={{S!DFHY|mv*f=+Mz`DZ z0Is=itbLsL3?BA%fs5B<#ATnGanGm$3Fz7of0;Q$bC>LsHGbB4Jk*vd#Whr1sh>#H zVUm`)PiA9R6ZeDtg|flDH=-1jTX(-0`br3Gl<05cKdN$pt7S?P%B0jcJ#5zRR%v~_ z#vB)_BEsH=&~mCTL08=*J;3*u#;@dNCCFq>jnLhW>pgMagN& z8}%7x9Uav{F=;$ig~7J*RKIT?7f!_`YHf+c0u{dclP4KSKy}@z^J9?n;dT~OD)6Fk zehfS#Vz)(k3~v*2o~SNZ;F5ha*@kuV$wWr1!?IAn?^`)trm}f`6$!&nGi=S<&CeGT z2>m0a(a+@@Q*h-KN4Qd)01xb(}h%aT~bB8 zZ(s;jY2Es|>!)=cGedYM9N~tjJ4u}D@oGnGf6V0FR?G{R&}NGlg#TT<4j&85h3XKR{Na5=HaMcPn8T(f4 z3T#cE@Y3XM%y^Z2ymJ_kp#+&T{Juo0dw;j+?riwbw-WFpvv5rtZWnk5`1NBv!aA73 zVenjI*!lXwSunN!4vDVAo_~t?@UW|;x==4$;-nUIept1nuqTro78Z8MO`rL_Bm^}Y%7X2G%|DOYJZPCSClJ`p}2W%q&g~1^6`NTJE!CW)SE`@DOCev$2ZeHHAZE5t1 zw+23=Y{GyLt_a49!q6kJX?J zXj1-Q+Qa^UT_nQ!B9!jtJ$DVK7 z=2H;e9lgXl>ekq1|3PZGWWe!gu72~8P{8SvgW#4HKYK6aUZ8*zXHNLEwO=7_Pn0*D%G#Who2 z)JWmeu}kcjajn;@I+9bVnU+p+yQKWM70Qx=Zl@oDE~g#3_2KoV$9Vd%p@Vy4u+Q;lzS`v?3Wg5K8I$o5Pv&31I~rCkpA|Fp z7C-Q7)Zou}G^v z2XasBi7-x<$GUDm{eQ;g`7fY)M&3q*Z#{GU!(Y7{Az@t87*OTzdKBF`{JxF5 zJ)GUpOW1LBs4Wq8_PGn+rt?6s%EivbzTuvF-P--Ejza(1oFB=W=&Tp>)nraKuJ7YD z4Wx2Qv=sw-rl&JAER)KyI5~dMS3TNn^Tn0{ZCtFNUHTcIA0!Vv4X6Cp^ z7-(3%TzpPx=`ms&E|)k(qeEG$XraE4fHOJ%Qfbk!BBo#U-c7-FC%SaJA=-tnGx*eA z89N3CxOU2eE;?s=&EdTha)sqRoE>p}M>4kbME3*x(Vmg^_`}-|#m;VTOuarUUX$*~H_TNd@nVSA$IB~wC)z0KymI5yz!_Z{Ty>vg zVWerXr|7EpOXWmTx-t{WH9T)H)X1cHL^q>x=RS{gL2;3jxRc@})TK{%>QYem<40Z) z2on|F!hK(1!sYYOGqCJH&@+as*Y(H7{vyeS(de><@!n?a=^kD_e+rYa? zb-3K{^<>@m!!9Mx-&|q^beTH(GFs4L^^3338f!K!EJr0uPIF|^h-arjkor1 ze^I?Tg-KmQz?ZQSld3T)@X~@M`Bqc-34<3+Bqo_wd?Tsl+xaN>fb16gtEKc`nSa01 z|8>P)t=e9vHRnO4XAe%&zjI}cAQqS4Q*_-UZ61F;KQ-`c9sZY&)USQ1fA#wt2KkSV z;jjE-ze-Jgx8tQFqdZlBN|nhL`@{|W+M+6*mWn%*DXG1z0^JYZWZ=KpS^wXIA}}tq zhT#nXb-6Qz_m?BXF2zep6Ma2*q=xtz_}Z464W#)(%{E(C*uu;+;M?U0d;DW3^G)ev zUGp6wB=C^#^BMX%vw``})A;#dSCa;44Ge8nHQ;X)D=p7(@Hn53WNi$I z!I-5SEv$FHKAUM2;ujIzUD?#|F_Z8&Y_FHho}OMMHtT{4MiehJ7GuV}4PV$DKcvW1 z8YjA?##qNmjC=6$f3f%0VNtg0`Y;Fz3WyTYA)z!#i!@Rq-8mv4F;dbwh|(pkAl*6A z%}95b4BZVwI@I_*zH6@~@7k;O`t9HT_V*p{9~{j6497gfb>Gi@U)On^*Lk_Y!W+pq zP(sxe^|hlmg|Etk=GDoapfDl*w#5M=n!BzQ zr6-`QVaU3V45L+bTYS+R>Mgg|!s zUJdAd+|`<7Pioa>#r25U@yiPP2sL5wlj{URIs#8dgg{`Sr}E7a+LBRWeM|PNlMGwj zm-|a`oJ^?W*r4XOK5yzB^NV^!CLrznRkL#!gqqskXWn>XBm1HZNalInav0!lCG54p zwZiQ2+S=n>+3jJG!g2`Mc5Yusn=`Mphl8O&H#V zY>wp@k+HG1m^@0=JacDyAGGCYBdOf=fL0d)J6D0`2_dFR#B4^+z?vQoV;tB|x~fvr zu5{bfp+P~0n`@5GOH7*8_RO56`qWk6BNj_6S4D`~i>g+?5KH%Z2asBnb|JURH!nynVY?}V> zhUm+ zk?o3JJkrm!Tu`-;48^r(+xvYw_`$5m;yL-Cz@gLBn6t0FJ66J?W`g$7S+ z82t_Aw=2u0oVKYJ=_v{~>+1aeI(oZ0{)ds=n4%O)m;j545*{N*xv#c@ii3NPa!ailrCpb{++2vT4LN?{{psoNPyJHEp+YPJu^BPU4@{ zmi;bFE*krV-T)lDp9!IX&AI&p*e?DmIJFp}1;CF$mevl!qm9?v3lJ$Pev9D%nSwu; z%&~4kZf}5acRXbguqOAEw}ll_i%8ze`i8hem2j_#2}O)ponp27eq^N2&2tM=LK|@r zjY0DwJUS!weBgy0%?fmDyUKWNfk(0YdCV$@1_tzK+s^goxYe|gU0s^m6=75Y;1o_( zX|JtR?|#(v=moEw;EZ9L3d2{IJB2F>4Ia+{898vE@I=k~7J8d+(`?+GrCiIoO+^gb z031>9A$A5 zk`0S2t$zKkw%itC4xG@=Je#7At-Ws`sQmoKQy6<>-5Zr^Y$@;Mo2m$}9da}VM~}dn!`hq%M;j=ZY5-Y4eQbYw4!Bk z4FD7ZE-nCX#0!cXx=b?$NGXpXb6^yoUNBnOl`${GLI*O?3;GTKuVGs0K5ReGu3Vt` z_34_qsW@W4hO$>af6R*MkNf?HegCmNrEPh6X8RGfo#}$@8ooU7N4XoXfiV35a<)cu z=#Dl5xF8r0+RwV!iiURSwR8sW7+k}~m@WFWd50J3>i4v!>qgiNP^(Owxx4_@Q!9P6>L7jv4GtMPjP~IV5c0hk^VO0}zef-)o5o^kyBZ$I3&3n$NOJUI`0Wk|pd+k#XoVL#8x)Gb19tCgN}suTRvnx6U$DN76S`MNQ6#cHEgRV9BGW4GrgJUE5^k z!>eB&&dlROn%55gj11V%dO0CXK1;H177(84rL0#5tBN8TDSGt<1~%2#_t}g*eV$hG z#O#fL=?-*2j}_baWpeSB(TsIYc8YT%d2Roki+4P5Y{3i%sv+f`Vt_tc7=V zm6apH#OIpA)!6^w)S~~W?m7eC4nu4P*`Ch$><66W=_Dd z2nYP&%z~Z6rg+((gJ3B0u(EUc6vDi8OX(u`R4BMc&4xSdJ8TJdf#1H&%rH_p4LjwS z8*5zJf%+t@1@I~dxXa`$;(?V%ULV2kY(^WkIUl%<=o(l?>h)07+udb-zD1ASNqY^) zbcgm#$Vv>KF9LnqHKqBiJv#H7gP8dXb#dVGYx*3 z-zUQ9d?(4}DUUQH;)LDNL0ql@dZQ>>D=qsjklsEdhV;RP53r;|k1pluicj9+o`pCOg;6%*!<|8fj}5v?#MH#smjC2O1?h)Z2BD zzSb-|Z86r`dy`#gajlbDDLKLIP`HNrLF=q_a~C1@$5`=#xTe=1@C(t+24O4H80+aA_cmM52L%qBJH|*L? z##_&rpGffwVjhMjA0LE%m_vSlUOpYZZHo&39cLl zC1=5}ItSHHkGR_+>I(t4(edr2)w9C6{Zo=lhv?HHG~KI^SN?Yw=eT=&E?(UFO*HHb zp?8T0!*%9wTXJ&jl%LD*?NLhGz7AsxcW0rU?uZa)U8T9RrI*r*_pJXho9J-7RNpYK zW$E3Fbv`ON{5pc;VEQgW6#ZAM(Iahv1-xs39H>o;MDmHE#P$;QtN6SV>fi<<0y&i% z;LKlO*)Qv=j>gfruc2xqF3~M8B!6xIzY0zqf1w3d3)P?ErHQmMe@1{bR|H)C9$5d+ zuK#=6sa9*9u6}vc&Cl)cYmXe>#!+_^>E$Q5w)uTIs1KD%sY9)GiyFBtW&Iu({I#$B zlS1F0|9(C|8dm;zs&hFCsYiY91qxDgdM5S@oD=~>-$F6yrY#Fwju}M?5J5_u-9oDY z@R%FKDHm={z?Lv^s+mx9Wpn-Y5F*0#7f?lMQdJ5SAR z#|izDk4|XrNmm4iG;;uC65ym5;-h@VUL|xEYJN0L>pWYc=^Vt!y^@??5_U5$+DxXd z9_FvtoT*z z2`-Z*qu*yAA>4Uq;=LFZERlt}6e2_2P83T?<(C=)V}fz#YPFA)aTZHW{jN>L{#U4` zSwJp0qU#6R)@MlH2J?T4$8HUvgy(@B0DO_(r}gts1;w@!exR}ZO6uQLzGcwFSYI>A z67!lM2barE23vHo(PI=vgNzU#*>()U zS7du{j}(c}n~?fV@p{xyuSGm)c28bOu-{fAWzB~K^oYeR_qQIb!b(>UWSOMoTnj_iQZPq!9 z)Y~2{E}~4eWsw(}Cf3Gp7@8RickHsb95ayN67)G$x_I%%eG7aRVsLBiN1`)LSOV zWx{f%HWhMNr>5KN-<)K0M&7EN2%}s+>YyY)1mRg2i6MNS*J8bQ{7AlLn@GPo!Sn3= z1`%&mbH6y%4ZA0|zQdU?k`Xfl!5oFl5MrGv9fKgQAn+3d=I6H+cOXW4e+>-O30>ZM z%_LF2(shgLjkN8BG{V;Bf;q#IzGap!L}%Rel+&d0vq3YNiSnb^ai+0reT}^6D~H5S z(_(cclASz=yLTKqEz%pe0W`8>f#xofnoEzf&{+kAoW5f#L!o_Bezl+|}_Zo?K_h}pSr z4gbErzt^_|Ev^=}uX|LiG=&{!05=J8$^hP`+6M4j&_&9{V}v5{F)9)sd+P;TK9E z)wphJNt}T%X*hXPmZ=?Bv4Yl6JNe6b%!gR3q|n#J@!B4qRi~#Sa(1QG+eOG7fDKwM zCXx%SXe9H*MM4&tIOg=rYicz2MOLE@la#1LDW2eH27a3E!b~<<6;G3y>D93BD$ZHN z`ilR4max8I(4@3pVZ+hOR;>)O!*7{k$RS`cyEqKSCR2MQNfbc4^F)EOPo+fFYU?M0 zi;{`JXMlU{Ag2yR0k4oX^Xp#|c>a3)@3EwAxDA(|=-&D2_v*=KYlBBrHivMW+ zM#HQlgYu1Ng?lhsDsLV7%1caY*)v$IH;{+sq;%Mjzl_h>juN}i-|IjNuYPm;O$+7W zmL5RVx}T$47};CG6h-_kl*mlO-cNAeVNe6~?aVy-#I{U!#b&PT<<3l~Icd9nJNQ{J zTBhR`f0TRzBlq(&ZqU<3Ex^EcRB%>)ysveFd za$Wi|BHK;u6<}AbopXMUnQ!g(q2`pY%5zh1$tsmuGJHx`XXq*UmfOR;glpfql$MRh zseFy`4(%NR6AJBRhUM6$aJR*Brc~U+tc~So*_d>1aNk*7EK~YUI}8Yqv?skPmE~?t zm(za9r5dZ+PPFuPKtkIh6?bmii>K>cU^3&N%678EdAFS>)I@NJk9njJF8{zHri**q znT5OCwT1GH;JVcg5qdIjgD`fCxR1Des5R(Abd+}Zoet3gp zKOlVgZ%rxOEAiP#`7_f<=dwEj#2dc$Q6l+|vMd)&By192KKWp6z%0CM-*l!GMuaZD z;f&SSi|zRX?Kp+y;u2-^cx}9}#g@4Cy`Lo0&n`gdgSgIlxxaa?w{75?@Fx}-Q5sqr zDiSZSX&w2*rT`~mtse4yun5@Gads*phqGem>#8SHVyAmFmq)C?Dri2pPPzCVfjT4d zsvJOhbO1p8t(kNmuEr_ARTBZq5F7nytO0K$8KCjcNmc>YueFg6=H=57C+KO3C54v3C_ z8C~?3!EJ`bNkPAi9`VcI`sFG&Nd98;42a!5) zWOuDrz`cMxq}70$`U}U9px%kQ3j7~m35d#eJ!rM(AeAE&W5VR>x44i&Kw5Tiq=)(T zu7ig`5HPT@npA_`9{N8BqgmtMZF_FhhjUYnZrg83Eg*s>JtL}rz1W(q8KzYK?J~DW?2gyK9`51!e6Mq1>+oLi!`t8ocVm+V z2KUIoE~2!EHGj4v&bw3VeYwc=NnUG(oyaK=#8ev0!0hDQ_1H0r;e(_?jLWUm;-!9n z=svhLO;XF{uw_#X1zp>w?`;BlBEbYL3cU+q z&~q2a1y+x<#g@P&1SqzOy14rt`nHh`snl`egE&Qu7C?>Wp2gMX1Xp+gp?a+w4R;rq zsAvV=_Qj2ffA=n>of}jZkrF}IfJn>Uih9y|4z!MqDbs!lBw@|>q8r<9d02ZkfC40;wsI917-IenGEffs4wM)8{ge;7I;NRCp*h?kxkSJgfGWBClwU)D zAMwZS{%gjRwI#BfRitFPD_q@A^ujcr?CY7z^|PM{94kwAcfW!lLlpMREFVKGW|WLP zLvY2_N%~{b{=7v0*DOiZsWwW1XxUqs${aj?q-2ckcA_!p-oNE$x=TyTqWW(#_zJj$ z$umkYL`KQe6#*w5j|r+C|jahUh&$W}vH@l4AI92fNa!11gE>`EyZ~0=PMt zGRrhy2e0R|r2Mw+$^N#>ssUAne{7xqiw}msJ*B~Dzlt9wB(6Al#S}rG995;Q#D8XA zugGcqvmD9ad;j0dov2?aHV1NOS4U6%u1BD$U^*xh*T2&J$P&IY38h64QSPjU7z_}TXL>B-9~I0 ztecK0kEQ9RD;rZDD3GzX-W}w zP7{5`2(MZrt8QwWatDB(=LXWdI$2wW~@Ys#og|8}y>aKmS_ zq@%Uz=?Z@4!f{p%JK*A!HI$*Xb#g6E?A8_vv^IQsGI}|m4)iF97q(y6yM7^7hv08m zv?X)xXy?CIwxySIf{G}-tkIODm$s(rWqStgCLmpQac28!`aw*z9Q%j@PeB)Ho!RG- z+x5_|LJS|QT`T*(V%^rUiv!ii*RWfJxyRbs&pxBwE%!y|^XtcY`8B3vM-_W>kmk*a zZ_FI7bJh@OQbpzVq6Tei_~>3W$ZKk!wF1~y*{w3#0D-ldJ{Ph@^*j%sq&?mSS zEphiYX}Iw94=l0~u%~w(+ahR|bl_pTgQAUMqz9$70Yh1B{nBPgPeiI zZ%>ybMM{4bVzC>+5rG4{%VNzQmw0yN7~#?eh#?QM7GmCG5y{~8At-#8kTQo`cJwT~ zy%OB_nbPpnX0z3^btWkJWqQSqN%I`K_kCn^%Y?0QzNP!^3>Jks^{5P(A}4wP089gYb;3z`@+FEQ{ccQkB0JYVAl{&1^TYqs%wPi1$;1VO9`QAV;LR$ccYJhXlDS)qyalrUsyf zVUiT+7}HP7LOkSV7zEVW7|NJfefgK;3;+gCMMFnWu_t4?Cl*3vApCfbXx(yAwxYTr zL_WAh@r{YPy>JNkX&=|4z|p%Oly<5a>>(3F~pS28pIWE=%WlYck2n}j5 zeWW!7LzLci*$RZ~=*C$uOI?#=H7svM1h+iM&&*)$HF!SqQUc8g6pImEDXny&dL^>LcHmO3?IuA^YfCeLk(sJ<)SKwYM>+ zUCNX&WL_c1^c}=O23lUzEZIKZE);3qlq2^fk zu60&LeHg9-Ti~fCOMo5Alnm*mI%27nnrC0^{Z2&+4N?Qiqx)%nFTk2;6~@J zO=@{WZ&GD=OU>D>wO9LuYxnliM0D1Uhyz?)*q7Tal?RVpwI@aui^(EnIVOWhZ{(({h2 z6zF5E*IElZq1Hq|C<VAMYHAR{(O3V!fATxxFQ9Avl5rf(#roa#V8Elh8iMBuK3e>0rLJ zm4qV*XOb3tt9bxW^$E-g%H!?^1@5hP{ZJ8uXi?1`}--cVo}?Fup+6t)C&e9i{#D3j`MAbOluYv}m+35Xc6(A>a& z?ecs_BFr)^N(<6N8liukk-0i%$*MZrg8k$k>S@;IS)*$Ae)1>o#h}~dThZ(<0LfPa zpkPaa@ApGqAk<=coFzwRnYo~1I{1NK*1_p|rnl)%xii(kp!O4iz!br%K=jQHvDCsR zbv3pRc%FH``$8S7)xhGa5nu1-WdFu?=G%I7t2P?yfWdet^5RgxQZK1uuR8z?5KfLS zM8G~d^yROqZjT#D5Uu%#=n*QDFdUB_ZL&Uj-f(XH#rb@z#mfsqJ_Hr|sY{vpn=a*= zExe=Eh!g?c-dhTDXp5kO>+A4HmKgMzGsM>gOx}G}<+`FavW*4C4Sg5e3GJS{x0!r5 zWdYy+hz8FUq-X8@#7lBQw|XD1F)hz3{Y>Q6oSMMB4{dqxY)bQF9^N-OpVcDTZPz3S zT?Q5&#SgUj#qdDYReNnD6v?@@E9Sh3Ra+VCT4ef(z_NvO@C)w3qw3sE`^e9Z&>q`w z(AKjmf6wbnbvsX5w4yiN?}aSXMKX3PrYU&G--|L3j(3=uHteXt;JG=b3R<=H;lera ze`j5c>}drOe4h4;5Ns>1xh>d~dpU_-RS1-Ki(OW+z9uHCA*s8Iw7k}z*3SfxO+e!o zwywe6fGSUpJ0?y+Mh+m(?L>PlHkObUh@#ip-X-yV)i&oMgaR2q&;J3%K0G@MpDEVr zMj5JDy_tJB#eqTc+6Khr<5R}J@5?0!Ew!?eic`FH`13?GzLH=^|LfQPEwws-(YLt8 zT89MBpW{;@8%J7%;-J()*SovhSLHGjZ}6JmBH)sLNQFQfc>GoP`F(c`B<2W%`YwH*6(Ut(%`9rR6I2(y5wM_gl!(g2BJ4l%6p07U~1K^!rB=)KT%7^>L z_a$J0pJZnT#91B&hH74HTjeSw#&@qRUnf4vh9dA=oKwn=t9)#Dr$T73ta^mU#d|jo zWNl4{9}x&fiDPz3Fv@p`yB7D0y-m5naZhK>7aK#0Gwvi|WoH^?8`n2J&E@P_iO3igbssWF6h#=DA)7 zXD%df zZ3SJS-B0`_nbVfzK$rT1-Wy%>)}=Dt5}59x;j;FTvkft>vWZ9vUHu*FqSqJl_IY$) z^;UaS-%B|W)ffn&lY1sf-48 zrb}oY7i3jf8;h*UfhxEI?#!g5zOdVp3BFA03vVyVE?KLKImO>M>?Oh(AMOilTmDIF zjodRJ*;AkTfvsO7r}Fhl{tReW=4_Tve5VpAa{XXvsRRcSNvNa>+-3A!H zbGLQ`{ow_mWYP)ks5u=ve}u$Y;%wHr&=X~LH6g zAeY&^qwD!(pRT7B&R@4+dmEXdqH|Qlqc;AadbDVpzARV(Qr_X_z{bvo0;82J+lS(s zFWJ6JxhX2<$%k|*TnA*h;)6Xo-8>c)U+Gp^eNdpF!q76INYKpuzE&)ZHuoG&h##}B3<6b9u3h4F}r#?o;$ zJ^d~6LYGBdb1jd_h{*?Wv$B?VZ=cN2UDF^|(`r0T4`yVY>Wr!KY7S<~BmGIR`CC7l zPXTt=DQqhSbVfK<`#S};pSq?hR|QVe$4nn>9Ddmf^){y&&l>rq)xpe%{rp7zX?;`; zjcT8vSdc+*&_NxwivcKt(+P+DHhs1s-{#sBu9A&=R$=E5Y8fH0ovkd0! z--}^mw`q$R8o=COj_A8JC|8P`z0%3(1%~TGHBXZC?2M!*)KG>)6_teeWAb}@t zk=v9%c*>J$$xA5d|9m%0g}c<3OPh8n1@yd_PyykeUb}5Xx6fbb1g?APx}!;}@A`rO zjmr1N8$+LV1;-_-M>AuifTx#}SCZDLt|CoE$t4yC$#NlXTfYs8c3h8I-xPRyQGsap%v0~pX0uUI?+&&1WS#I z%+i^v^fP(>@%T%2^R27~3gtJK8N-(xjY{7^PmZ?hXl_`-%1FXN3m3JT{fYAfxK`hj znTGiM%MmjnI^U#>GmRKf`buAdip`lw{UeE`s4}dgzYCz3qn$AqP`Hr&CkM$+M^RTQ?S!L_IxxX%0%Utgki zHhm{vuNc@mBRN?ZQBGNgm>adZeRr`vczY@oYA)h-rd_32Z069MbZS^9*132DC0AI) zC$PBIEaN|XFpQX<;-Xlpew(2d5n0VmAp81wUD`d%F4FaO`&5T)`-uaok&e;hRGb6h zh_|cnQer-&3Q*2d*9^EQ+3;(jDooYY6b~VK^y!H0_XY|iub!g-2o(zGf;LjV-;0|+ zLSwpc;~UeC2u4os8WS$dhM|VYZ67*d(r2B8^ z23~8_YrG8RxKOa9u7kP;K!WR)bGeb(XM71GJIR#s-FTU8L~p24Wvwxv8BV=2vs1VW zO5@e$)y!O(?OB-`+CDGhf4#NptS|vEO4uiok~e6GP+c%QVF|?d*10=<{Sif$)Rdpf z>)7w|O`X^pr5fdq!jlI_=ZZ_W!F1o3W_b*^;Ax;uZZ zw)%+egOchmqvlba`oa$4>x+^h9D`E#o2GMu&sKxqjAfreVxe0_mvYa#vM#|M?v6)- zoc<`%ee?Iiyu6&G$b4He!xrIeit|K^qGG%cAnC=|MP)g9HkGgsPaV1By$)zFCB%8V zQ@XXp*>qqTa&|nS&AQO3bZUbyel4OS+ECMt6dIO1epmFV+rthhCae|Yi{eL^HOAjA z@yNF%DbdweDj^2XF@}}gczM_G)wj;&utE$|6TZ{DeUcO7%T!_Wg*;&zuLVVx^VUZC z+6Xm|RSU+!^3EF}x1$g}Z1c01CC_g%Slg0`ujrJqe1Lr!)uzu*y4XQJN%{;p0=cupUqZhMc6SSY4WBV86LPf}hE7HQ2Y6KxFZuTa=j3uiYn(I?~2OmT44(E4ey zg34nw8%$TfJHxt9j1n5K^`s?ULv534FCt=LW`+VCqQr>Gf_cb2S8ZJcDkXbvS|PKm zU{=@Y(U)XNv23jw~Bh4RH5u5S;t3T`Z=1e4sSbdP9J#QI8J zoVNhGS)8_DXrJk4W4%x*&w_ahFkm3FA;QIAJtqsrv_75&5MJ z)3af<9h7B?>BVydmY>u6k&EZaEW%gWlAdU>JH3AK)ZdaoQD}qonaUl^(6qAf zPkg(~`%c@ubL7Yzx#|!NL{{9#A85vnqV!{!BZkjjxbEn|7mji}XLx8oXnG42Qp6T|NhS!{SUr@UX~7uI@0lJLF&S1&fScSHfqFwopb z89H!#5gk_rebjSI+G4}fwyx)FYsTVLe)-<_QvjfP0)V|tMWMcbsdW206(Rpt%eUX1 zvopURq1nS5;|A*t#d#>+e1+Wnfp+UFRHd-%$m3?033a>3=+e=KVR?y`R%DYtmW%6W zVg##4#7R}TR-poEn|(fh6f zY9)=MMaOc(bI(;7yFM9V5b!(KvE_%Ad~vSinrl{6u(WwX6-(Sa1*}5${z#|dFeAaj zZ6m>5ax+)*dogcmK2Zi2zb)mDQ^8)g@3Y!4;zF#JN6Y6J-MEJ+YJEGj$cjUv`G!IB ziG0`>uf~|!L|-92*0JeHp`T)@>=y;`?N)gaRx%Q7HGymZQqz?e( z(t%bS$wgyV;)cP0t#gdv4oJbmusD@0tmcK-dw|OFLOWN>^i1Uaa!G^<^``xqV=-K( zfK_h3=v`gC(yc7to4+Z+eVj0Aq$yF4GHeK<8N4;-3&$~=yoO0V1JsZYyH*VLlQM&5 zX-BrB+R^Wl{rrA;p|nuP=E|Dd_vxRdeDVFiXz;=4p%i_D|UsCsX9bti8JH~{~=KFyZG;)DR8G_ zT+1{iFUSFkFaJY(Ub7Z$!AXQ$ff*-t2FFn}xxExT(us==2mlr4l`Gs-n)m01)Y_lD zVXaN(RFFH|oIkEtx>uy9r|8BMd^bh?8@~G%q4*c6xLFhcJNgh85j_%5Hek9dYpe+f zJk}}-6T<3c!PZonIGA1}u)N~}K-3g(PRpHHSNA$`FMw4NxN0}Ua{?DD&rLQ4g?n!A zBpZVkrZG&!qzvGm@+I}d^?U`Em3?%szL#v&kM(=v#wDY8L+Iu&_RG!4T-O?ff($3! zyy+opNa|Q=H{O)H#}ozn6o&Zn`bFj%4WsNY-mWrVlg?2>bP1QfXVgYl8qAD)ks$)k zK{VDaDx6PUK5QcwI58WGi0R@b;5~79)Q$h>Sr^%KmYky*rkxuulfoGa2CWIpC%?kQ8W6z*0}_h!w+7{Dy9Wp zFvro{^(4-lv=Z_wF1k}SEDp|&;T2W;(p`4*T2is-5_$#feS#r}X83UMLK-r5-mSc# z!D4f$#nPC;ewr6p`|Qlu#2ztdI^C9o%QaEH3%6p022*2}h7T(gX}&ynv}QA2iq&}< zs?kFi(`&zr=@xYzm}{xpR^C?P`iS}Cp?v1?xoll>oYdDzFq#xLN;}aG;l~0D8db4U|*RrV4xE(&Tqqhsri-V+kCTe;X z|H`%hb2Rm@h!c)i(JAzIi%G(pjTECtO|KFn;5%7?Q^G~pda2}?%v7G)P}*RGS1b@9 z1r~2qEL;LrT(eD9DU%~QQ&#cL2Q!}vcQFsrr<+#qQn2J_JnL^NZAG8h&|}uukI0Hh z#(L+pW5{t#R<2M74ubN&fRuBl)g8DWfRqOnx*Z&m^@2^CPuVzxPsP-`=>i5Oo zIVs{RAN2M0O7-ZLt<=$DVI$Xzsw_qQ>#Ot--@}9<`9_LvsgP!o>m30Vc#ll0tNqQ- zrF$ebxZcivH?f3E4B*9r;#~$ERe-$?I%=6B1{NjTk7y-2r%p?M7;tYy4pu^-Agmr_ z-VkPjbH^{}PH|srwbo-5!gnDFJ2_#V`U_qra*554Hsa}}Ys>w0IoOw@6oO)yf@dPb zzbOqW$f=8Q_B3_W4n3`arCiV)VsC&U`jE&&wiLX2!wjU&VKccYex81ZlVzd)tVpZ< zj503|L$tm!CuXlRYSTK)-tT3dj8k+|!fuu=#ET=u$=co}7hp!uc@g)uR-Onbu!U~E zZw(ICw;Oiq zYQa35Gn&yb#@=&%QkbhA>_E!!W^>9Er|bT0{9f>MZZ@Dl`7Xn70P|fliVLwn?5Uh> zS>WZ70|K*(#3zx zG^=GW?{(9A=o&+PjU~#JAz7Tti^zaFO`1sUmr%o%Qswk3uk+*Pwg9!ct=u1ILzY^b zzp}po9Xc-;(&0C7`37={Id*mMC-3sA+af3yr1v0WkrUg%Qb>c&;}Zwl^nEiGE!K~j z4so=0`AScYC?|N9L@?TUtj0$z?has4 zw@K4XEEvxzK=h|ilc$=zxkovV!CNyNn}W6+yf=bui|4D8GD;dOZE&_57d*8yU4Ss2Gx_Ns~gfwZd9IMkN%jd|Q`S4cLKT7HUeUIg5 zVDYcWA&mUeOFY79nk%dF^`_}#K=D+BEXoG13_4yadWzhy9xAV69BmxnHZ%e&JDFoV zEs--0>5RST@zwAlQPy-&_?|)xSKw zgA;p0n0eJ-h(OzL=M<7~(Vt(<-0qpIeF{d&F6w9=xi2P65{BOK=*Z|}$Uss_Fd0$S+E-Lmz3dKoWz9Z9kjmxRc8hBRKZ zCD|a)tbCTxAGXL@A!Uu%wmh!ZC5SH->bSRPP5I` zahTfG;<_hJGlA|T2OPndHkY4ZCLrIGJHpoc=5qVU1TW6!p!&Zu|7b?L*pUO+#5b)VZ|JV*Duj&wi-wAHS?XJ4+^R|+#*`}$y?2%j|hacpLU zS+CZ@#P-zG9u@~boj|t|Pp@U$gR@N3QOef$M75qxB_-Ad7zK_0sH(Kf=lg$6A^0^$ zF1Z=L3{t53KrG(HaD?VQh{04G(Uy$AZ|-wEdGTn;n*30FoL!Ra^*wrK;k08@$44ralx-H4a={lWLMoEdvBktoTtY{0)5Az*vI|D z!A!*t;=m?}LEVm;0YvnwR!qe0DUy9$aI|3M){u>y%QFb-L9Xr zK=THOGC{c(seiopCxiV@+vSrrufuHr{@OLc4i@dY6I%8Etjh7n1pj||k^V8k|3BYp zqS~cncQc>QcMJLAPb+oYNY7&vJs$Yk5cb;O4Zpvek3&y^^TUotP?usq&gQmOfObiBk=c=aQ2FYJct z5PQuEI`vj3Mx;aR9G*B1*NYccQ-o2iuErTK&!GU7%k zR=pKgKuoFb<3WS!EreCCPlm{s)>Mo*29%Y9adK&EYCcpfUlX)m2ufh^8mikhV;S}& zk#^|7H}^;sn$W)vkpx<~!z_2`&KCk&+#ZYqB(-a4Y6UX_GwDZVw4No1U`niNnNWEQ0iH%168@MHI??m%Q;@U(LTCfr87Q#IWV-+g)OdguJXYxInTDc4)NA(fY9>XqXI$YzxSA@%q7wNG9FNQ)=?Qqrv-XxiXDpXyZ+1f0oP*mNLH((p8;Od3pxM-+OwvM6Y^*thU~T#bKwR8FANaT632TbadUVzXK1JS!WzRIrw|6$^HfPx3BvoK}Voly0W?8XkM-!T0eei zhTVRR%E3t1np2HrEHnbJccad5QL694g(6$2B(%WF9%AE$@9;3@=HyBTQ=DK`8L!OK z&}${{QTN4Zl)lZvH?_3R!a{w);M`%I&yJ>cWIE=flwv|CfCg7EiPXR?e zQhM*PHy1jHie2MGu)kVsQTFlu&Ek&g|PZ$LBAV^Vwuwi*Q$+VB{0( zcle;+l(bweBZFsR5xqZn*{wRdHBQ~~g+YTv>@CkXSKeWq5rH3es8V%4YNl&C@zLsgLgj6rEI{eM5c0Oh;pKM9pRoV@YBZ{F6P!QS{f5P{Cg6 z`_+-2hvj2s`B278=TG*hjB9Ml|QqF9&;oytiyw|n{F-O+;L zP`(Fs$|@950bX*=2FUnQs`OAuZLH|pu{K!#sb>#jnc&<(6LM$#?q3eEza{%-#VX_C zyTK`o@!0QrsjR#Lc!BXrIY6@pPL6`=C6a6~q}#AnO08Y7TkYSq-KBC#1XFb{6O$4( zh-$;Da4h>1oGc}8#2wH{J(TgeZsqnFXz-9;Z!IhTk15Jt$uHP8KKpROxy z-Zf=+D8}ZaE6%&t=wo;NtFIztiRv#bPsf2u3%_qJsBErDoBkynNj;Vo2An`ZWAfX-4}= zTAt{8JKy^FnBEPu-7=;uspGjP8|vmDWGGb6jzA117u6HHe1zJzSjF{#a6dYhDmLqh zRZ{O|17+Rw58Xc2?FF&&Mz&JK=4D#B6d#Xq&oW^w=n}0zo8r8OG5VIpufqw3r)3eP z9=vpOxlhpnn&xLMP#1q%=CX*HNin8sl7g3V;?j+P(Sy^%! zpH^GD;&vnbCmU&_C4NX3eM6wIY>dq6Gz25Ar_eIlXNgSSV3Uc{y;sOh2^{f?S z0D+5<;Q^=_7u12>$NV}79|ZfKCBHtAYIQ9F(Q1S^Q27$+z77g7B7^}^R_fw_L@#z7 zR4ed@MOt}-tCWeKIKNKAfj2u4HFy8W|4b&yV-e%~5I)=gal0M=y}r7|luAT$_WX8$ zAtwTHXrf1YtA4$MhQh;&mtHQx>CGM{+1ZHV@l{)P>}!cJ*sHD!BdDqNW%S?;4@V#~ zt}5oXPIqmhfy-lUC8yX8Cip?UP1$iP)D|(~P2>P+hS~)(CoOzUpe;0^x7Im7*KGfC zUggX?_B(2z2&nyKbVy~pPoj{#8A-|YH?4=!3%OW^5cn0R~Hx4 z81tR;ANB=-rfzNtT*`*6_90fs5evIBPx;Gng-1vp?te*fbBo~cFws24`p)#j-YdZl z7Sx4&$C;Nt^egcSrHI|y7Z2xfGGY$@gne*kS8iS_N}Wo>C%#t7>&TG&9kY9Jv}@h@ zZL)`!1Exx~tu46SGFE%Z!}X6nF0u8?U$xgwiR70Y<1S{~!sCm^l41OSR<8pfES0iV za(J9l1Muk3LSTe>KQfTkD-&w4MR9l&LxM+R(N)3Pcbu`ijYI-bua3IkD7@&N9B)Qf z#^(cPD-`Oh)dX0YqQh~k#!M77ZiW>GRQ^vzvXjKw^4@Y6mPaMPrw@KADUmwS_{P_L zl1d5WlD{Qw(s$IR8!P|(k!t;+FxyU0{uZ``qqkT)w9Hk-MntJF@17B342{Pv+oT9) z9oExS8YvHpa%fa%Evn;peCQcBNb^gV)%eU&{s@0WT1;MJx7XL+e<%mL3<#j|!q4h@ z*&rOv8lk0PB|MG>#N zh$7WT3M{>b7T>G*lnFno;nbpZ`_z`^gI`vz?W+(;e7BD0ZQ{)DneHoB0%T-Lau_Ot%5+KrP6>VHl5oA ztPE$ap>lEG=<6G79;|U?% z{LhWXe^+Y0YYtGd!gN*<8-H=8BTLE;dSf~1OOixDvmipcHr*_``DsrOR#fPS z>AutNk{gvOBZb(d3(#v~o??NM(Ry9;y;$c=O9Q9e?#cKewGYX$I=N50-Sr(5gJ)C= zqr9)sHzS$E2F*24sf{w$o-p&2!5Y*+bQw1F6)xJ8t>cB;ywXv!Nd7Z5+@MNXSW5%s z>n;LpcIj(P>~22~cbS-7GXd8-PcXfH7Thm4J+Lc4B)`;QCfvcFHhF~qZtSA4%96#b z{CJmCsq|31L=SJXv!_`*b)j)hRdK=dh6EjAdLt#5S;*WShbz41j}P(a=8yFA4VH9U zTe@bKY7)Xf&(S@*^NXPbawsEwyADx?^V04(z{W887aOP6_uj}kQRlCY9 zdJ@3Y{AjU&Y#a2nBUP<~`mnYp#m6jJrh^Q~2C%d(?#)EB6Yc&QUPoIcU5QXE*PXi; z+yQIY*^v!nIT?&n0$pGEe$BLf@4up6z|xOyBv`t<$rKd$nCiYOud?oC_8EZl9zCb^+u@A;bGla0ZJAu z=X{IF8W5z4Q%S&lJ2kwhwOi!-<@TMwuXgmZD6d-xUOfAh{Vo;z#oK2W!GI7xup0kh zTH)^BLOGHm!4mJ=@VT;lKb^BRu52%j+Ek1*G|lkhS-bz4mXFzG$YN{jRIdw~hR~jTaAcucJG{rqRH(dU=CMW@|H0jsF{Hm4bmS!&GbzKub%+q>U!HdS-Bk99VIX#~II>CGo2_;$zWK%3; z^aalU%|9;V+2ZEF~>CnXsrW$lq>nEiQM_7@k+9Qh9rKI4C zE(>j5?*YHqTNV$zpDKRrKFW}jpybJ!rs62{skD7M)ye#rXs=;qI$(E?c$Wg9s3kSA z9DLttLxehg%BE4Dt-<{tD%)(7eX{Wh3Pf%Y?0i|riYezasJ7|s>vSsHlXw((;<|*6vx9bBOUY6$ zS~#gl=e;$H%krIhW8*oLyGip~yrKYZ#Lu6;UxU~kIqGVCBP-cjIN9>D6Texw5|jRi zM6Qkg_Rn76wF|R-Wa*A^2;Kl=<;{+$EB4xj5cT49sQ^HqCaD&2j>NGH=wy6^kxIXl z+D4LBZ%qN-$FWlz`wYQnYhXTuAyE}ABSa|wmJGb@fO`y&vjO&39V>f_WWihVe{MMbS#2i+`41G`ns4alcR2`n$@sx|tqeZ@|hddnSqtNFNma zD*cz}zl~&lEPv*1{#na^NNu#0U`J+qhFd04E^4kVQUOl4UTVktmjyUI0Nzl@*#t4`Ei2(XLTLvGuYZI0%#PTuIA&a?K5yj zq&t&N{aR7!il5R5dH#Cg6;ZwhCvYr zJ&%>nDo19i$&_RoTjkOiet}Zw&??ItD~2m(=H6oC(!a1dLEpR!wyh>5jhaQk@7_>akv|mEd}`5)c^%|o5{pUl zdT9EsTcX&}Tw;kW8SjA~U|}47bVm=;yY^NL_rr&p<7( zpu`cc*p$2C@!p8oL*WulqR))8vHQA84&NU&4Im&nxj(XceJj&FK!%M1UJz}>xTfAj z5~7YcxY!^<+B3eRe~UT#n_2p&K02+UiJr(czm?eW?`z`wDuv^kt7VD0 zIS&vL1J^;^FW5_X<^zIAlmy(G7|>>!IL&=-yOj#?u=|VtuP>Q*dUrk8qfj)wgX#8% zHAne4de6Os7*b?8$0b6eMkk8SV4zOnJ<5x%rM5CXZiQ@SHfSKJ>wd3E{*+yr7FFf7 z+LP%};gY_&b&yypJlzgLMhs({dm&#iRGwf!7fS{L|5S7q2x55>ExwFB8d}7sa5HC! zc2I@U?uZKS)L8VP@P+ccH9?|4!EDYw{FlRAL36sXmLp*o+ICJch25tevTn1>_dj|R z%?oZ>2R*TmSA1-O__}bc&9g;1pIkmae>!O5tWD|{1O8x?7rWw`?3>)82OtUI=skM!qkz*(@NiT_rjNN@EhO`$uXf{vj@Ykaa`7rNepov+q) z+ZTUYN?F$aWWt`E-ceK8Sn9d3y~Zjc4|T9rBCq&DQJL||!b)jJ49>gnV*C_CYv03V zYUAO2RSnm8?5vXA&~5i4rM^@JSN-MH4{%hP?Se}gMpYhKeF*W+Nr^-+b~Zd_D+2^w z_Gc%ZFjf|Y-Ty_gO}Ea?d&jc6B&U$+B8+4;Y5lGS%88PlZR9=A;0j)jq~Y3}Qz6LT%? zQr>2gQY_ahv{?8OZO5(yDte<2p4FUUFgW_ftN#A#M#rvhx~KyX_iOqQgQC*jUy{mvyoKgt|M7eyFxTm9 z=%UcCw{M;JAd5~oWVK!3AnjSqb3K z@YoeCmmB1Bwwm)~Ed`99^U3XtI%&`QOu7b#t#vXZ)dBmTAK7By#5(A@K`&^<3|I(Gn?hOVkr}RWMM5cP$ zmDIa!*+E#`ZFPLLxvKu;V6R2XrB03#gA>ef3iMU)tJ>Ov;z63JnB9XD4bG%5=Xy)X z$3$Ak&+3xydn$R8*$X|gp(7%+VYb41^jGfBDMsAe3)d1ygE+5Y+mtL1_VAh?GcNc$ zCPYAW`Zs71Gz#@P@-%khy`!d3a*mgh<1mB08+VyZ2G-ot-s#l2y6%Ipc<1(-%LXdo zTilVQnv$6=(H92l-+(`t9QONa9Q%dM@z8yhAvpO){(eU2-XO5bRZ$51GfR)MeWlb| z6Vk$xBW}mRHAhWAzT~2|k#K*1f-fAv+ z>A~*B=L10iDRlAGA+cYlXj|0K~#2a)?-GIxRJOH3gq>hMLAk0uS} zc@uU;^8*9YA-96WAQlb5Yr!kpBTA$i;>*=%(}%aq|JU_!S`s-q_N$K@Uo%_-RH;A0 z6!VJ%yzoS)5o1x$y^NIae(t$2#VzK}O{?YxtODC+{O z9DW?i4heSam6xZAKCL7q%MVJhr*AJ*g9UtkJHV5Nr@wn^VU1p_K~0LV!+n3lMZ18D zbFH|0aWb+W1Nr$b>gQ;m>&F0w@FtsnUH~Xz-pxL<^UDTuJ*W>nbLDYM)F=#C8I7JB z?u9#Iizn}^ow7Qr7w(wrD{j#hV?xl)vSv_QQkR#41jj2cw0tdGiPcMzE%cklAK9C# zDcjf`VcmZ-y?Yga)V#t7Wa3I*_-tKZdaE63C9#pgO8=E~u}WeDFUl8`MGa!OE|K<9&}nm-cloW1;;sz^%r1(RO@JO-~4Z=1m+01@bHx2P8lOp3bd;?f$8!0kRFg_+dskn zzuyb|4A=UwOhg?(CM|?L&GG#%HDV-wKx{lIsMBYIva-HG&JTjj&_`}!jlXAH`CF`m z4%;KTp=8|~nOl_{Hg*>Ocoin@CoC(@&dXUJ^fJ^ceEM7s!W^U)@h(6`>aZe+J0zFa zl&6SwDsv=ppNiGom4etvHMWW32gPbs52eleo*LHAH{FU{xsDL`btN?sU%aFox1)DU zmd7jkm%m6FP_joeq*Q`C-vyE4<@i)3b?D`(Cm_#(*r`Lg{MBB^rRMj)XE|5Arqa_y zCt5h4JRs5pI}uqw=Wh47Ty+e*puXuR1YfzqtqPLZ^-g9T#KV@W3!rC1J3tPUp6t^} zapT*+**F%4u@HLu-j4QZ=A*pyFPGP&bNzkajbpr3Zs2(2-aiYOmCPPwv~pz=4@5~{ zY46WTe^U^B69?qo;b3_4Qg?XRM*^8pDvT3$t-YXr^mR;h!K!caR~EFkboTo-Q|^|5 z(^XZLoC>WNjp0_RR&RDZbIec~W4B3LikLxvj=p`>F)G?DDKM8`Uu$@?t*(cfnjy`l ztgNInr5r~Q8qB`P$&nck)Y`*D_Fx<~p_CuI+ zGi&mH-%vsBC(tY5X%uezFJ#LPn4WSiP-AkHi>I{}FSVt1mbfa{LS=uV7ofTW#>P^S z7j9SH4pb@S1@+tDR24D=!rx1kfM^&Us}oWpJG%jJvZ<%0>;CvD7nd0o@0w?bV9odP zjg=AW7Fl%$5p?VGo6gjtAc>TD3RF>a&x6WC`R7v}-Z=~j0Z^PY&TfVHejPMx4FuKH zS-%%}zR#n|o3(=|Y{3`(Ot>kxk^hPM`zEx|J`gVT2A4yt!(ZZ$|Nm!k>HZH**P-C- z$rCAp;jd+x7>6w=IZnq$)?)yKD|%&&YDZmMi$0M$XYgA1P>Yf}Qh*x0U7 z0Z!w;(c*;rnSJno({HC*|E@9o4bJ}6<6nTk+fDK>VoU!qO8!=V$99waNR#yZKkVK0 AtpET3 literal 0 HcmV?d00001 diff --git a/cmdb-ui/public/color.less b/cmdb-ui/public/color.less new file mode 100644 index 0000000..c7e6b1b --- /dev/null +++ b/cmdb-ui/public/color.less @@ -0,0 +1,7684 @@ +@primary-color: #1890ff; +/* stylelint-disable at-rule-empty-line-before,at-rule-name-space-after,at-rule-no-unknown */ +/* stylelint-disable no-duplicate-selectors */ +/* stylelint-disable */ +.bezierEasingMixin() { + @functions: ~`(function() { + var NEWTON_ITERATIONS = 4; + var NEWTON_MIN_SLOPE = 0.001; + var SUBDIVISION_PRECISION = 0.0000001; + var SUBDIVISION_MAX_ITERATIONS = 10; + + var kSplineTableSize = 11; + var kSampleStepSize = 1.0 / (kSplineTableSize - 1.0); + + var float32ArraySupported = typeof Float32Array === 'function'; + + function A (aA1, aA2) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; } + function B (aA1, aA2) { return 3.0 * aA2 - 6.0 * aA1; } + function C (aA1) { return 3.0 * aA1; } + + // Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2. + function calcBezier (aT, aA1, aA2) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; } + + // Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2. + function getSlope (aT, aA1, aA2) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); } + + function binarySubdivide (aX, aA, aB, mX1, mX2) { + var currentX, currentT, i = 0; + do { + currentT = aA + (aB - aA) / 2.0; + currentX = calcBezier(currentT, mX1, mX2) - aX; + if (currentX > 0.0) { + aB = currentT; + } else { + aA = currentT; + } + } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); + return currentT; + } + + function newtonRaphsonIterate (aX, aGuessT, mX1, mX2) { + for (var i = 0; i < NEWTON_ITERATIONS; ++i) { + var currentSlope = getSlope(aGuessT, mX1, mX2); + if (currentSlope === 0.0) { + return aGuessT; + } + var currentX = calcBezier(aGuessT, mX1, mX2) - aX; + aGuessT -= currentX / currentSlope; + } + return aGuessT; + } + + var BezierEasing = function (mX1, mY1, mX2, mY2) { + if (!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) { + throw new Error('bezier x values must be in [0, 1] range'); + } + + // Precompute samples table + var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); + if (mX1 !== mY1 || mX2 !== mY2) { + for (var i = 0; i < kSplineTableSize; ++i) { + sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); + } + } + + function getTForX (aX) { + var intervalStart = 0.0; + var currentSample = 1; + var lastSample = kSplineTableSize - 1; + + for (; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) { + intervalStart += kSampleStepSize; + } + --currentSample; + + // Interpolate to provide an initial guess for t + var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]); + var guessForT = intervalStart + dist * kSampleStepSize; + + var initialSlope = getSlope(guessForT, mX1, mX2); + if (initialSlope >= NEWTON_MIN_SLOPE) { + return newtonRaphsonIterate(aX, guessForT, mX1, mX2); + } else if (initialSlope === 0.0) { + return guessForT; + } else { + return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); + } + } + + return function BezierEasing (x) { + if (mX1 === mY1 && mX2 === mY2) { + return x; // linear + } + // Because JavaScript number are imprecise, we should guarantee the extremes are right. + if (x === 0) { + return 0; + } + if (x === 1) { + return 1; + } + return calcBezier(getTForX(x), mY1, mY2); + }; + }; + + this.colorEasing = BezierEasing(0.26, 0.09, 0.37, 0.18); + // less 3 requires a return + return ''; +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.bezierEasingMixin(); + +/* stylelint-disable declaration-bang-space-before,no-duplicate-selectors,string-no-newline */ +.tinyColorMixin() { + @functions: ~`(function() { +// TinyColor v1.4.1 +// https://github.com/bgrins/TinyColor +// 2016-07-07, Brian Grinstead, MIT License +var trimLeft = /^\s+/, + trimRight = /\s+$/, + tinyCounter = 0, + mathRound = Math.round, + mathMin = Math.min, + mathMax = Math.max, + mathRandom = Math.random; + +function tinycolor (color, opts) { + + color = (color) ? color : ''; + opts = opts || { }; + + // If input is already a tinycolor, return itself + if (color instanceof tinycolor) { + return color; + } + // If we are called as a function, call using new instead + if (!(this instanceof tinycolor)) { + return new tinycolor(color, opts); + } + + var rgb = inputToRGB(color); + this._originalInput = color, + this._r = rgb.r, + this._g = rgb.g, + this._b = rgb.b, + this._a = rgb.a, + this._roundA = mathRound(100*this._a) / 100, + this._format = opts.format || rgb.format; + this._gradientType = opts.gradientType; + + // Don't let the range of [0,255] come back in [0,1]. + // Potentially lose a little bit of precision here, but will fix issues where + // .5 gets interpreted as half of the total, instead of half of 1 + // If it was supposed to be 128, this was already taken care of by inputToRgb + if (this._r < 1) { this._r = mathRound(this._r); } + if (this._g < 1) { this._g = mathRound(this._g); } + if (this._b < 1) { this._b = mathRound(this._b); } + + this._ok = rgb.ok; + this._tc_id = tinyCounter++; +} + +tinycolor.prototype = { + isDark: function() { + return this.getBrightness() < 128; + }, + isLight: function() { + return !this.isDark(); + }, + isValid: function() { + return this._ok; + }, + getOriginalInput: function() { + return this._originalInput; + }, + getFormat: function() { + return this._format; + }, + getAlpha: function() { + return this._a; + }, + getBrightness: function() { + //http://www.w3.org/TR/AERT#color-contrast + var rgb = this.toRgb(); + return (rgb.r * 299 + rgb.g * 587 + rgb.b * 114) / 1000; + }, + getLuminance: function() { + //http://www.w3.org/TR/2008/REC-WCAG20-20081211/#relativeluminancedef + var rgb = this.toRgb(); + var RsRGB, GsRGB, BsRGB, R, G, B; + RsRGB = rgb.r/255; + GsRGB = rgb.g/255; + BsRGB = rgb.b/255; + + if (RsRGB <= 0.03928) {R = RsRGB / 12.92;} else {R = Math.pow(((RsRGB + 0.055) / 1.055), 2.4);} + if (GsRGB <= 0.03928) {G = GsRGB / 12.92;} else {G = Math.pow(((GsRGB + 0.055) / 1.055), 2.4);} + if (BsRGB <= 0.03928) {B = BsRGB / 12.92;} else {B = Math.pow(((BsRGB + 0.055) / 1.055), 2.4);} + return (0.2126 * R) + (0.7152 * G) + (0.0722 * B); + }, + setAlpha: function(value) { + this._a = boundAlpha(value); + this._roundA = mathRound(100*this._a) / 100; + return this; + }, + toHsv: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + return { h: hsv.h * 360, s: hsv.s, v: hsv.v, a: this._a }; + }, + toHsvString: function() { + var hsv = rgbToHsv(this._r, this._g, this._b); + var h = mathRound(hsv.h * 360), s = mathRound(hsv.s * 100), v = mathRound(hsv.v * 100); + return (this._a == 1) ? + "hsv(" + h + ", " + s + "%, " + v + "%)" : + "hsva(" + h + ", " + s + "%, " + v + "%, "+ this._roundA + ")"; + }, + toHsl: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + return { h: hsl.h * 360, s: hsl.s, l: hsl.l, a: this._a }; + }, + toHslString: function() { + var hsl = rgbToHsl(this._r, this._g, this._b); + var h = mathRound(hsl.h * 360), s = mathRound(hsl.s * 100), l = mathRound(hsl.l * 100); + return (this._a == 1) ? + "hsl(" + h + ", " + s + "%, " + l + "%)" : + "hsla(" + h + ", " + s + "%, " + l + "%, "+ this._roundA + ")"; + }, + toHex: function(allow3Char) { + return rgbToHex(this._r, this._g, this._b, allow3Char); + }, + toHexString: function(allow3Char) { + return '#' + this.toHex(allow3Char); + }, + toHex8: function(allow4Char) { + return rgbaToHex(this._r, this._g, this._b, this._a, allow4Char); + }, + toHex8String: function(allow4Char) { + return '#' + this.toHex8(allow4Char); + }, + toRgb: function() { + return { r: mathRound(this._r), g: mathRound(this._g), b: mathRound(this._b), a: this._a }; + }, + toRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ")" : + "rgba(" + mathRound(this._r) + ", " + mathRound(this._g) + ", " + mathRound(this._b) + ", " + this._roundA + ")"; + }, + toPercentageRgb: function() { + return { r: mathRound(bound01(this._r, 255) * 100) + "%", g: mathRound(bound01(this._g, 255) * 100) + "%", b: mathRound(bound01(this._b, 255) * 100) + "%", a: this._a }; + }, + toPercentageRgbString: function() { + return (this._a == 1) ? + "rgb(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%)" : + "rgba(" + mathRound(bound01(this._r, 255) * 100) + "%, " + mathRound(bound01(this._g, 255) * 100) + "%, " + mathRound(bound01(this._b, 255) * 100) + "%, " + this._roundA + ")"; + }, + toName: function() { + if (this._a === 0) { + return "transparent"; + } + + if (this._a < 1) { + return false; + } + + return hexNames[rgbToHex(this._r, this._g, this._b, true)] || false; + }, + toFilter: function(secondColor) { + var hex8String = '#' + rgbaToArgbHex(this._r, this._g, this._b, this._a); + var secondHex8String = hex8String; + var gradientType = this._gradientType ? "GradientType = 1, " : ""; + + if (secondColor) { + var s = tinycolor(secondColor); + secondHex8String = '#' + rgbaToArgbHex(s._r, s._g, s._b, s._a); + } + + return "progid:DXImageTransform.Microsoft.gradient("+gradientType+"startColorstr="+hex8String+",endColorstr="+secondHex8String+")"; + }, + toString: function(format) { + var formatSet = !!format; + format = format || this._format; + + var formattedString = false; + var hasAlpha = this._a < 1 && this._a >= 0; + var needsAlphaFormat = !formatSet && hasAlpha && (format === "hex" || format === "hex6" || format === "hex3" || format === "hex4" || format === "hex8" || format === "name"); + + if (needsAlphaFormat) { + // Special case for "transparent", all other non-alpha formats + // will return rgba when there is transparency. + if (format === "name" && this._a === 0) { + return this.toName(); + } + return this.toRgbString(); + } + if (format === "rgb") { + formattedString = this.toRgbString(); + } + if (format === "prgb") { + formattedString = this.toPercentageRgbString(); + } + if (format === "hex" || format === "hex6") { + formattedString = this.toHexString(); + } + if (format === "hex3") { + formattedString = this.toHexString(true); + } + if (format === "hex4") { + formattedString = this.toHex8String(true); + } + if (format === "hex8") { + formattedString = this.toHex8String(); + } + if (format === "name") { + formattedString = this.toName(); + } + if (format === "hsl") { + formattedString = this.toHslString(); + } + if (format === "hsv") { + formattedString = this.toHsvString(); + } + + return formattedString || this.toHexString(); + }, + clone: function() { + return tinycolor(this.toString()); + }, + + _applyModification: function(fn, args) { + var color = fn.apply(null, [this].concat([].slice.call(args))); + this._r = color._r; + this._g = color._g; + this._b = color._b; + this.setAlpha(color._a); + return this; + }, + lighten: function() { + return this._applyModification(lighten, arguments); + }, + brighten: function() { + return this._applyModification(brighten, arguments); + }, + darken: function() { + return this._applyModification(darken, arguments); + }, + desaturate: function() { + return this._applyModification(desaturate, arguments); + }, + saturate: function() { + return this._applyModification(saturate, arguments); + }, + greyscale: function() { + return this._applyModification(greyscale, arguments); + }, + spin: function() { + return this._applyModification(spin, arguments); + }, + + _applyCombination: function(fn, args) { + return fn.apply(null, [this].concat([].slice.call(args))); + }, + analogous: function() { + return this._applyCombination(analogous, arguments); + }, + complement: function() { + return this._applyCombination(complement, arguments); + }, + monochromatic: function() { + return this._applyCombination(monochromatic, arguments); + }, + splitcomplement: function() { + return this._applyCombination(splitcomplement, arguments); + }, + triad: function() { + return this._applyCombination(triad, arguments); + }, + tetrad: function() { + return this._applyCombination(tetrad, arguments); + } +}; + +// If input is an object, force 1 into "1.0" to handle ratios properly +// String input requires "1.0" as input, so 1 will be treated as 1 +tinycolor.fromRatio = function(color, opts) { + if (typeof color == "object") { + var newColor = {}; + for (var i in color) { + if (color.hasOwnProperty(i)) { + if (i === "a") { + newColor[i] = color[i]; + } + else { + newColor[i] = convertToPercentage(color[i]); + } + } + } + color = newColor; + } + + return tinycolor(color, opts); +}; + +// Given a string or object, convert that input to RGB +// Possible string inputs: +// +// "red" +// "#f00" or "f00" +// "#ff0000" or "ff0000" +// "#ff000000" or "ff000000" +// "rgb 255 0 0" or "rgb (255, 0, 0)" +// "rgb 1.0 0 0" or "rgb (1, 0, 0)" +// "rgba (255, 0, 0, 1)" or "rgba 255, 0, 0, 1" +// "rgba (1.0, 0, 0, 1)" or "rgba 1.0, 0, 0, 1" +// "hsl(0, 100%, 50%)" or "hsl 0 100% 50%" +// "hsla(0, 100%, 50%, 1)" or "hsla 0 100% 50%, 1" +// "hsv(0, 100%, 100%)" or "hsv 0 100% 100%" +// +function inputToRGB(color) { + + var rgb = { r: 0, g: 0, b: 0 }; + var a = 1; + var s = null; + var v = null; + var l = null; + var ok = false; + var format = false; + + if (typeof color == "string") { + color = stringInputToObject(color); + } + + if (typeof color == "object") { + if (isValidCSSUnit(color.r) && isValidCSSUnit(color.g) && isValidCSSUnit(color.b)) { + rgb = rgbToRgb(color.r, color.g, color.b); + ok = true; + format = String(color.r).substr(-1) === "%" ? "prgb" : "rgb"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.v)) { + s = convertToPercentage(color.s); + v = convertToPercentage(color.v); + rgb = hsvToRgb(color.h, s, v); + ok = true; + format = "hsv"; + } + else if (isValidCSSUnit(color.h) && isValidCSSUnit(color.s) && isValidCSSUnit(color.l)) { + s = convertToPercentage(color.s); + l = convertToPercentage(color.l); + rgb = hslToRgb(color.h, s, l); + ok = true; + format = "hsl"; + } + + if (color.hasOwnProperty("a")) { + a = color.a; + } + } + + a = boundAlpha(a); + + return { + ok: ok, + format: color.format || format, + r: mathMin(255, mathMax(rgb.r, 0)), + g: mathMin(255, mathMax(rgb.g, 0)), + b: mathMin(255, mathMax(rgb.b, 0)), + a: a + }; +} + +// Conversion Functions +// -------------------- + +// rgbToHsl, rgbToHsv, hslToRgb, hsvToRgb modified from: +// + +// rgbToRgb +// Handle bounds / percentage checking to conform to CSS color spec +// +// *Assumes:* r, g, b in [0, 255] or [0, 1] +// *Returns:* { r, g, b } in [0, 255] +function rgbToRgb(r, g, b){ + return { + r: bound01(r, 255) * 255, + g: bound01(g, 255) * 255, + b: bound01(b, 255) * 255 + }; +} + +// rgbToHsl +// Converts an RGB color value to HSL. +// *Assumes:* r, g, and b are contained in [0, 255] or [0, 1] +// *Returns:* { h, s, l } in [0,1] +function rgbToHsl(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, l = (max + min) / 2; + + if(max == min) { + h = s = 0; // achromatic + } + else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + + h /= 6; + } + + return { h: h, s: s, l: l }; +} + +// hslToRgb +// Converts an HSL color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and l are contained [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] +function hslToRgb(h, s, l) { + var r, g, b; + + h = bound01(h, 360); + s = bound01(s, 100); + l = bound01(l, 100); + + function hue2rgb(p, q, t) { + if(t < 0) t += 1; + if(t > 1) t -= 1; + if(t < 1/6) return p + (q - p) * 6 * t; + if(t < 1/2) return q; + if(t < 2/3) return p + (q - p) * (2/3 - t) * 6; + return p; + } + + if(s === 0) { + r = g = b = l; // achromatic + } + else { + var q = l < 0.5 ? l * (1 + s) : l + s - l * s; + var p = 2 * l - q; + r = hue2rgb(p, q, h + 1/3); + g = hue2rgb(p, q, h); + b = hue2rgb(p, q, h - 1/3); + } + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// rgbToHsv +// Converts an RGB color value to HSV +// *Assumes:* r, g, and b are contained in the set [0, 255] or [0, 1] +// *Returns:* { h, s, v } in [0,1] +function rgbToHsv(r, g, b) { + + r = bound01(r, 255); + g = bound01(g, 255); + b = bound01(b, 255); + + var max = mathMax(r, g, b), min = mathMin(r, g, b); + var h, s, v = max; + + var d = max - min; + s = max === 0 ? 0 : d / max; + + if(max == min) { + h = 0; // achromatic + } + else { + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return { h: h, s: s, v: v }; +} + +// hsvToRgb +// Converts an HSV color value to RGB. +// *Assumes:* h is contained in [0, 1] or [0, 360] and s and v are contained in [0, 1] or [0, 100] +// *Returns:* { r, g, b } in the set [0, 255] + function hsvToRgb(h, s, v) { + + h = bound01(h, 360) * 6; + s = bound01(s, 100); + v = bound01(v, 100); + + var i = Math.floor(h), + f = h - i, + p = v * (1 - s), + q = v * (1 - f * s), + t = v * (1 - (1 - f) * s), + mod = i % 6, + r = [v, q, p, p, t, v][mod], + g = [t, v, v, q, p, p][mod], + b = [p, p, t, v, v, q][mod]; + + return { r: r * 255, g: g * 255, b: b * 255 }; +} + +// rgbToHex +// Converts an RGB color to hex +// Assumes r, g, and b are contained in the set [0, 255] +// Returns a 3 or 6 character hex +function rgbToHex(r, g, b, allow3Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + // Return a 3 character hex if possible + if (allow3Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0); + } + + return hex.join(""); +} + +// rgbaToHex +// Converts an RGBA color plus alpha transparency to hex +// Assumes r, g, b are contained in the set [0, 255] and +// a in [0, 1]. Returns a 4 or 8 character rgba hex +function rgbaToHex(r, g, b, a, allow4Char) { + + var hex = [ + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)), + pad2(convertDecimalToHex(a)) + ]; + + // Return a 4 character hex if possible + if (allow4Char && hex[0].charAt(0) == hex[0].charAt(1) && hex[1].charAt(0) == hex[1].charAt(1) && hex[2].charAt(0) == hex[2].charAt(1) && hex[3].charAt(0) == hex[3].charAt(1)) { + return hex[0].charAt(0) + hex[1].charAt(0) + hex[2].charAt(0) + hex[3].charAt(0); + } + + return hex.join(""); +} + +// rgbaToArgbHex +// Converts an RGBA color to an ARGB Hex8 string +// Rarely used, but required for "toFilter()" +function rgbaToArgbHex(r, g, b, a) { + + var hex = [ + pad2(convertDecimalToHex(a)), + pad2(mathRound(r).toString(16)), + pad2(mathRound(g).toString(16)), + pad2(mathRound(b).toString(16)) + ]; + + return hex.join(""); +} + +// equals +// Can be called with any tinycolor input +tinycolor.equals = function (color1, color2) { + if (!color1 || !color2) { return false; } + return tinycolor(color1).toRgbString() == tinycolor(color2).toRgbString(); +}; + +tinycolor.random = function() { + return tinycolor.fromRatio({ + r: mathRandom(), + g: mathRandom(), + b: mathRandom() + }); +}; + +// Modification Functions +// ---------------------- +// Thanks to less.js for some of the basics here +// + +function desaturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s -= amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +} + +function saturate(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.s += amount / 100; + hsl.s = clamp01(hsl.s); + return tinycolor(hsl); +} + +function greyscale(color) { + return tinycolor(color).desaturate(100); +} + +function lighten (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l += amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +} + +function brighten(color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var rgb = tinycolor(color).toRgb(); + rgb.r = mathMax(0, mathMin(255, rgb.r - mathRound(255 * - (amount / 100)))); + rgb.g = mathMax(0, mathMin(255, rgb.g - mathRound(255 * - (amount / 100)))); + rgb.b = mathMax(0, mathMin(255, rgb.b - mathRound(255 * - (amount / 100)))); + return tinycolor(rgb); +} + +function darken (color, amount) { + amount = (amount === 0) ? 0 : (amount || 10); + var hsl = tinycolor(color).toHsl(); + hsl.l -= amount / 100; + hsl.l = clamp01(hsl.l); + return tinycolor(hsl); +} + +// Spin takes a positive or negative amount within [-360, 360] indicating the change of hue. +// Values outside of this range will be wrapped into this range. +function spin(color, amount) { + var hsl = tinycolor(color).toHsl(); + var hue = (hsl.h + amount) % 360; + hsl.h = hue < 0 ? 360 + hue : hue; + return tinycolor(hsl); +} + +// Combination Functions +// --------------------- +// Thanks to jQuery xColor for some of the ideas behind these +// + +function complement(color) { + var hsl = tinycolor(color).toHsl(); + hsl.h = (hsl.h + 180) % 360; + return tinycolor(hsl); +} + +function triad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 120) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 240) % 360, s: hsl.s, l: hsl.l }) + ]; +} + +function tetrad(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 90) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 180) % 360, s: hsl.s, l: hsl.l }), + tinycolor({ h: (h + 270) % 360, s: hsl.s, l: hsl.l }) + ]; +} + +function splitcomplement(color) { + var hsl = tinycolor(color).toHsl(); + var h = hsl.h; + return [ + tinycolor(color), + tinycolor({ h: (h + 72) % 360, s: hsl.s, l: hsl.l}), + tinycolor({ h: (h + 216) % 360, s: hsl.s, l: hsl.l}) + ]; +} + +function analogous(color, results, slices) { + results = results || 6; + slices = slices || 30; + + var hsl = tinycolor(color).toHsl(); + var part = 360 / slices; + var ret = [tinycolor(color)]; + + for (hsl.h = ((hsl.h - (part * results >> 1)) + 720) % 360; --results; ) { + hsl.h = (hsl.h + part) % 360; + ret.push(tinycolor(hsl)); + } + return ret; +} + +function monochromatic(color, results) { + results = results || 6; + var hsv = tinycolor(color).toHsv(); + var h = hsv.h, s = hsv.s, v = hsv.v; + var ret = []; + var modification = 1 / results; + + while (results--) { + ret.push(tinycolor({ h: h, s: s, v: v})); + v = (v + modification) % 1; + } + + return ret; +} + +// Utility Functions +// --------------------- + +tinycolor.mix = function(color1, color2, amount) { + amount = (amount === 0) ? 0 : (amount || 50); + + var rgb1 = tinycolor(color1).toRgb(); + var rgb2 = tinycolor(color2).toRgb(); + + var p = amount / 100; + + var rgba = { + r: ((rgb2.r - rgb1.r) * p) + rgb1.r, + g: ((rgb2.g - rgb1.g) * p) + rgb1.g, + b: ((rgb2.b - rgb1.b) * p) + rgb1.b, + a: ((rgb2.a - rgb1.a) * p) + rgb1.a + }; + + return tinycolor(rgba); +}; + +// Readability Functions +// --------------------- +// false +// tinycolor.isReadable("#000", "#111",{level:"AA",size:"large"}) => false +tinycolor.isReadable = function(color1, color2, wcag2) { + var readability = tinycolor.readability(color1, color2); + var wcag2Parms, out; + + out = false; + + wcag2Parms = validateWCAG2Parms(wcag2); + switch (wcag2Parms.level + wcag2Parms.size) { + case "AAsmall": + case "AAAlarge": + out = readability >= 4.5; + break; + case "AAlarge": + out = readability >= 3; + break; + case "AAAsmall": + out = readability >= 7; + break; + } + return out; + +}; + +// mostReadable +// Given a base color and a list of possible foreground or background +// colors for that base, returns the most readable color. +// Optionally returns Black or White if the most readable color is unreadable. +// *Example* +// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:false}).toHexString(); // "#112255" +// tinycolor.mostReadable(tinycolor.mostReadable("#123", ["#124", "#125"],{includeFallbackColors:true}).toHexString(); // "#ffffff" +// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"large"}).toHexString(); // "#faf3f3" +// tinycolor.mostReadable("#a8015a", ["#faf3f3"],{includeFallbackColors:true,level:"AAA",size:"small"}).toHexString(); // "#ffffff" +tinycolor.mostReadable = function(baseColor, colorList, args) { + var bestColor = null; + var bestScore = 0; + var readability; + var includeFallbackColors, level, size ; + args = args || {}; + includeFallbackColors = args.includeFallbackColors ; + level = args.level; + size = args.size; + + for (var i= 0; i < colorList.length ; i++) { + readability = tinycolor.readability(baseColor, colorList[i]); + if (readability > bestScore) { + bestScore = readability; + bestColor = tinycolor(colorList[i]); + } + } + + if (tinycolor.isReadable(baseColor, bestColor, {"level":level,"size":size}) || !includeFallbackColors) { + return bestColor; + } + else { + args.includeFallbackColors=false; + return tinycolor.mostReadable(baseColor,["#fff", "#000"],args); + } +}; + +// Big List of Colors +// ------------------ +// +var names = tinycolor.names = { + aliceblue: "f0f8ff", + antiquewhite: "faebd7", + aqua: "0ff", + aquamarine: "7fffd4", + azure: "f0ffff", + beige: "f5f5dc", + bisque: "ffe4c4", + black: "000", + blanchedalmond: "ffebcd", + blue: "00f", + blueviolet: "8a2be2", + brown: "a52a2a", + burlywood: "deb887", + burntsienna: "ea7e5d", + cadetblue: "5f9ea0", + chartreuse: "7fff00", + chocolate: "d2691e", + coral: "ff7f50", + cornflowerblue: "6495ed", + cornsilk: "fff8dc", + crimson: "dc143c", + cyan: "0ff", + darkblue: "00008b", + darkcyan: "008b8b", + darkgoldenrod: "b8860b", + darkgray: "a9a9a9", + darkgreen: "006400", + darkgrey: "a9a9a9", + darkkhaki: "bdb76b", + darkmagenta: "8b008b", + darkolivegreen: "556b2f", + darkorange: "ff8c00", + darkorchid: "9932cc", + darkred: "8b0000", + darksalmon: "e9967a", + darkseagreen: "8fbc8f", + darkslateblue: "483d8b", + darkslategray: "2f4f4f", + darkslategrey: "2f4f4f", + darkturquoise: "00ced1", + darkviolet: "9400d3", + deeppink: "ff1493", + deepskyblue: "00bfff", + dimgray: "696969", + dimgrey: "696969", + dodgerblue: "1e90ff", + firebrick: "b22222", + floralwhite: "fffaf0", + forestgreen: "228b22", + fuchsia: "f0f", + gainsboro: "dcdcdc", + ghostwhite: "f8f8ff", + gold: "ffd700", + goldenrod: "daa520", + gray: "808080", + green: "008000", + greenyellow: "adff2f", + grey: "808080", + honeydew: "f0fff0", + hotpink: "ff69b4", + indianred: "cd5c5c", + indigo: "4b0082", + ivory: "fffff0", + khaki: "f0e68c", + lavender: "e6e6fa", + lavenderblush: "fff0f5", + lawngreen: "7cfc00", + lemonchiffon: "fffacd", + lightblue: "add8e6", + lightcoral: "f08080", + lightcyan: "e0ffff", + lightgoldenrodyellow: "fafad2", + lightgray: "d3d3d3", + lightgreen: "90ee90", + lightgrey: "d3d3d3", + lightpink: "ffb6c1", + lightsalmon: "ffa07a", + lightseagreen: "20b2aa", + lightskyblue: "87cefa", + lightslategray: "789", + lightslategrey: "789", + lightsteelblue: "b0c4de", + lightyellow: "ffffe0", + lime: "0f0", + limegreen: "32cd32", + linen: "faf0e6", + magenta: "f0f", + maroon: "800000", + mediumaquamarine: "66cdaa", + mediumblue: "0000cd", + mediumorchid: "ba55d3", + mediumpurple: "9370db", + mediumseagreen: "3cb371", + mediumslateblue: "7b68ee", + mediumspringgreen: "00fa9a", + mediumturquoise: "48d1cc", + mediumvioletred: "c71585", + midnightblue: "191970", + mintcream: "f5fffa", + mistyrose: "ffe4e1", + moccasin: "ffe4b5", + navajowhite: "ffdead", + navy: "000080", + oldlace: "fdf5e6", + olive: "808000", + olivedrab: "6b8e23", + orange: "ffa500", + orangered: "ff4500", + orchid: "da70d6", + palegoldenrod: "eee8aa", + palegreen: "98fb98", + paleturquoise: "afeeee", + palevioletred: "db7093", + papayawhip: "ffefd5", + peachpuff: "ffdab9", + peru: "cd853f", + pink: "ffc0cb", + plum: "dda0dd", + powderblue: "b0e0e6", + purple: "800080", + rebeccapurple: "663399", + red: "f00", + rosybrown: "bc8f8f", + royalblue: "4169e1", + saddlebrown: "8b4513", + salmon: "fa8072", + sandybrown: "f4a460", + seagreen: "2e8b57", + seashell: "fff5ee", + sienna: "a0522d", + silver: "c0c0c0", + skyblue: "87ceeb", + slateblue: "6a5acd", + slategray: "708090", + slategrey: "708090", + snow: "fffafa", + springgreen: "00ff7f", + steelblue: "4682b4", + tan: "d2b48c", + teal: "008080", + thistle: "d8bfd8", + tomato: "ff6347", + turquoise: "40e0d0", + violet: "ee82ee", + wheat: "f5deb3", + white: "fff", + whitesmoke: "f5f5f5", + yellow: "ff0", + yellowgreen: "9acd32" +}; + +// Make it easy to access colors via hexNames[hex] +var hexNames = tinycolor.hexNames = flip(names); + +// Utilities +// --------- + +// { 'name1': 'val1' } becomes { 'val1': 'name1' } +function flip(o) { + var flipped = { }; + for (var i in o) { + if (o.hasOwnProperty(i)) { + flipped[o[i]] = i; + } + } + return flipped; +} + +// Return a valid alpha value [0,1] with all invalid values being set to 1 +function boundAlpha(a) { + a = parseFloat(a); + + if (isNaN(a) || a < 0 || a > 1) { + a = 1; + } + + return a; +} + +// Take input from [0, n] and return it as [0, 1] +function bound01(n, max) { + if (isOnePointZero(n)) { n = "100%"; } + + var processPercent = isPercentage(n); + n = mathMin(max, mathMax(0, parseFloat(n))); + + // Automatically convert percentage into number + if (processPercent) { + n = parseInt(n * max, 10) / 100; + } + + // Handle floating point rounding errors + if ((Math.abs(n - max) < 0.000001)) { + return 1; + } + + // Convert into [0, 1] range if it isn't already + return (n % max) / parseFloat(max); +} + +// Force a number between 0 and 1 +function clamp01(val) { + return mathMin(1, mathMax(0, val)); +} + +// Parse a base-16 hex value into a base-10 integer +function parseIntFromHex(val) { + return parseInt(val, 16); +} + +// Need to handle 1.0 as 100%, since once it is a number, there is no difference between it and 1 +// +function isOnePointZero(n) { + return typeof n == "string" && n.indexOf('.') != -1 && parseFloat(n) === 1; +} + +// Check to see if string passed in is a percentage +function isPercentage(n) { + return typeof n === "string" && n.indexOf('%') != -1; +} + +// Force a hex value to have 2 characters +function pad2(c) { + return c.length == 1 ? '0' + c : '' + c; +} + +// Replace a decimal with it's percentage value +function convertToPercentage(n) { + if (n <= 1) { + n = (n * 100) + "%"; + } + + return n; +} + +// Converts a decimal to a hex value +function convertDecimalToHex(d) { + return Math.round(parseFloat(d) * 255).toString(16); +} +// Converts a hex value to a decimal +function convertHexToDecimal(h) { + return (parseIntFromHex(h) / 255); +} + +var matchers = (function() { + + // + var CSS_INTEGER = "[-\\+]?\\d+%?"; + + // + var CSS_NUMBER = "[-\\+]?\\d*\\.\\d+%?"; + + // Allow positive/negative integer/number. Don't capture the either/or, just the entire outcome. + var CSS_UNIT = "(?:" + CSS_NUMBER + ")|(?:" + CSS_INTEGER + ")"; + + // Actual matching. + // Parentheses and commas are optional, but not required. + // Whitespace can take the place of commas or opening paren + var PERMISSIVE_MATCH3 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + var PERMISSIVE_MATCH4 = "[\\s|\\(]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")[,|\\s]+(" + CSS_UNIT + ")\\s*\\)?"; + + return { + CSS_UNIT: new RegExp(CSS_UNIT), + rgb: new RegExp("rgb" + PERMISSIVE_MATCH3), + rgba: new RegExp("rgba" + PERMISSIVE_MATCH4), + hsl: new RegExp("hsl" + PERMISSIVE_MATCH3), + hsla: new RegExp("hsla" + PERMISSIVE_MATCH4), + hsv: new RegExp("hsv" + PERMISSIVE_MATCH3), + hsva: new RegExp("hsva" + PERMISSIVE_MATCH4), + hex3: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex6: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/, + hex4: /^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/, + hex8: /^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/ + }; +})(); + +// isValidCSSUnit +// Take in a single string / number and check to see if it looks like a CSS unit +// (see matchers above for definition). +function isValidCSSUnit(color) { + return !!matchers.CSS_UNIT.exec(color); +} + +// stringInputToObject +// Permissive string parsing. Take in a number of formats, and output an object +// based on detected format. Returns { r, g, b } or { h, s, l } or { h, s, v} +function stringInputToObject(color) { + + color = color.replace(trimLeft, '').replace(trimRight, '').toLowerCase(); + var named = false; + if (names[color]) { + color = names[color]; + named = true; + } + else if (color == 'transparent') { + return { r: 0, g: 0, b: 0, a: 0, format: "name" }; + } + + // Try to match string input using regular expressions. + // Keep most of the number bounding out of this function - don't worry about [0,1] or [0,100] or [0,360] + // Just return an object and let the conversion functions handle that. + // This way the result will be the same whether the tinycolor is initialized with string or object. + var match; + if ((match = matchers.rgb.exec(color))) { + return { r: match[1], g: match[2], b: match[3] }; + } + if ((match = matchers.rgba.exec(color))) { + return { r: match[1], g: match[2], b: match[3], a: match[4] }; + } + if ((match = matchers.hsl.exec(color))) { + return { h: match[1], s: match[2], l: match[3] }; + } + if ((match = matchers.hsla.exec(color))) { + return { h: match[1], s: match[2], l: match[3], a: match[4] }; + } + if ((match = matchers.hsv.exec(color))) { + return { h: match[1], s: match[2], v: match[3] }; + } + if ((match = matchers.hsva.exec(color))) { + return { h: match[1], s: match[2], v: match[3], a: match[4] }; + } + if ((match = matchers.hex8.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + a: convertHexToDecimal(match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex6.exec(color))) { + return { + r: parseIntFromHex(match[1]), + g: parseIntFromHex(match[2]), + b: parseIntFromHex(match[3]), + format: named ? "name" : "hex" + }; + } + if ((match = matchers.hex4.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + a: convertHexToDecimal(match[4] + '' + match[4]), + format: named ? "name" : "hex8" + }; + } + if ((match = matchers.hex3.exec(color))) { + return { + r: parseIntFromHex(match[1] + '' + match[1]), + g: parseIntFromHex(match[2] + '' + match[2]), + b: parseIntFromHex(match[3] + '' + match[3]), + format: named ? "name" : "hex" + }; + } + + return false; +} + +function validateWCAG2Parms(parms) { + // return valid WCAG2 parms for isReadable. + // If input parms are invalid, return {"level":"AA", "size":"small"} + var level, size; + parms = parms || {"level":"AA", "size":"small"}; + level = (parms.level || "AA").toUpperCase(); + size = (parms.size || "small").toLowerCase(); + if (level !== "AA" && level !== "AAA") { + level = "AA"; + } + if (size !== "small" && size !== "large") { + size = "small"; + } + return {"level":level, "size":size}; +} + +this.tinycolor = tinycolor; + +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.tinyColorMixin(); + +// We create a very complex algorithm which take the place of original tint/shade color system +// to make sure no one can understand it 👻 +// and create an entire color palette magicly by inputing just a single primary color. +// We are using bezier-curve easing function and some color manipulations like tint/shade/darken/spin +.colorPaletteMixin() { + @functions: ~`(function() { + var hueStep = 2; + var saturationStep = 16; + var saturationStep2 = 5; + var brightnessStep1 = 5; + var brightnessStep2 = 15; + var lightColorCount = 5; + var darkColorCount = 4; + + var getHue = function(hsv, i, isLight) { + var hue; + if (hsv.h >= 60 && hsv.h <= 240) { + hue = isLight ? hsv.h - hueStep * i : hsv.h + hueStep * i; + } else { + hue = isLight ? hsv.h + hueStep * i : hsv.h - hueStep * i; + } + if (hue < 0) { + hue += 360; + } else if (hue >= 360) { + hue -= 360; + } + return Math.round(hue); + }; + var getSaturation = function(hsv, i, isLight) { + var saturation; + if (isLight) { + saturation = Math.round(hsv.s * 100) - saturationStep * i; + } else if (i == darkColorCount) { + saturation = Math.round(hsv.s * 100) + saturationStep; + } else { + saturation = Math.round(hsv.s * 100) + saturationStep2 * i; + } + if (saturation > 100) { + saturation = 100; + } + if (isLight && i === lightColorCount && saturation > 10) { + saturation = 10; + } + if (saturation < 6) { + saturation = 6; + } + return Math.round(saturation); + }; + var getValue = function(hsv, i, isLight) { + if (isLight) { + return Math.round(hsv.v * 100) + brightnessStep1 * i; + } + return Math.round(hsv.v * 100) - brightnessStep2 * i; + }; + + this.colorPalette = function(color, index) { + var isLight = index <= 6; + var hsv = tinycolor(color).toHsv(); + var i = isLight ? lightColorCount + 1 - index : index - lightColorCount - 1; + return tinycolor({ + h: getHue(hsv, i, isLight), + s: getSaturation(hsv, i, isLight), + v: getValue(hsv, i, isLight), + }).toHexString(); + }; +})()`; +} +// It is hacky way to make this function will be compiled preferentially by less +// resolve error: `ReferenceError: colorPalette is not defined` +// https://github.com/ant-design/ant-motion/issues/44 +.colorPaletteMixin(); + +// color palettes +@blue-1: color(~`colorPalette("@{blue-6}", 1)`); +@blue-2: color(~`colorPalette("@{blue-6}", 2)`); +@blue-3: color(~`colorPalette("@{blue-6}", 3)`); +@blue-4: color(~`colorPalette("@{blue-6}", 4)`); +@blue-5: color(~`colorPalette("@{blue-6}", 5)`); +@blue-6: #1890ff; +@blue-7: color(~`colorPalette("@{blue-6}", 7)`); +@blue-8: color(~`colorPalette("@{blue-6}", 8)`); +@blue-9: color(~`colorPalette("@{blue-6}", 9)`); +@blue-10: color(~`colorPalette("@{blue-6}", 10)`); + +@purple-1: color(~`colorPalette("@{purple-6}", 1)`); +@purple-2: color(~`colorPalette("@{purple-6}", 2)`); +@purple-3: color(~`colorPalette("@{purple-6}", 3)`); +@purple-4: color(~`colorPalette("@{purple-6}", 4)`); +@purple-5: color(~`colorPalette("@{purple-6}", 5)`); +@purple-6: #722ed1; +@purple-7: color(~`colorPalette("@{purple-6}", 7)`); +@purple-8: color(~`colorPalette("@{purple-6}", 8)`); +@purple-9: color(~`colorPalette("@{purple-6}", 9)`); +@purple-10: color(~`colorPalette("@{purple-6}", 10)`); + +@cyan-1: color(~`colorPalette("@{cyan-6}", 1)`); +@cyan-2: color(~`colorPalette("@{cyan-6}", 2)`); +@cyan-3: color(~`colorPalette("@{cyan-6}", 3)`); +@cyan-4: color(~`colorPalette("@{cyan-6}", 4)`); +@cyan-5: color(~`colorPalette("@{cyan-6}", 5)`); +@cyan-6: #13c2c2; +@cyan-7: color(~`colorPalette("@{cyan-6}", 7)`); +@cyan-8: color(~`colorPalette("@{cyan-6}", 8)`); +@cyan-9: color(~`colorPalette("@{cyan-6}", 9)`); +@cyan-10: color(~`colorPalette("@{cyan-6}", 10)`); + +@green-1: color(~`colorPalette("@{green-6}", 1)`); +@green-2: color(~`colorPalette("@{green-6}", 2)`); +@green-3: color(~`colorPalette("@{green-6}", 3)`); +@green-4: color(~`colorPalette("@{green-6}", 4)`); +@green-5: color(~`colorPalette("@{green-6}", 5)`); +@green-6: #52c41a; +@green-7: color(~`colorPalette("@{green-6}", 7)`); +@green-8: color(~`colorPalette("@{green-6}", 8)`); +@green-9: color(~`colorPalette("@{green-6}", 9)`); +@green-10: color(~`colorPalette("@{green-6}", 10)`); + +@magenta-1: color(~`colorPalette("@{magenta-6}", 1)`); +@magenta-2: color(~`colorPalette("@{magenta-6}", 2)`); +@magenta-3: color(~`colorPalette("@{magenta-6}", 3)`); +@magenta-4: color(~`colorPalette("@{magenta-6}", 4)`); +@magenta-5: color(~`colorPalette("@{magenta-6}", 5)`); +@magenta-6: #eb2f96; +@magenta-7: color(~`colorPalette("@{magenta-6}", 7)`); +@magenta-8: color(~`colorPalette("@{magenta-6}", 8)`); +@magenta-9: color(~`colorPalette("@{magenta-6}", 9)`); +@magenta-10: color(~`colorPalette("@{magenta-6}", 10)`); + +// alias of magenta +@pink-1: color(~`colorPalette("@{pink-6}", 1)`); +@pink-2: color(~`colorPalette("@{pink-6}", 2)`); +@pink-3: color(~`colorPalette("@{pink-6}", 3)`); +@pink-4: color(~`colorPalette("@{pink-6}", 4)`); +@pink-5: color(~`colorPalette("@{pink-6}", 5)`); +@pink-6: #eb2f96; +@pink-7: color(~`colorPalette("@{pink-6}", 7)`); +@pink-8: color(~`colorPalette("@{pink-6}", 8)`); +@pink-9: color(~`colorPalette("@{pink-6}", 9)`); +@pink-10: color(~`colorPalette("@{pink-6}", 10)`); + +@red-1: color(~`colorPalette("@{red-6}", 1)`); +@red-2: color(~`colorPalette("@{red-6}", 2)`); +@red-3: color(~`colorPalette("@{red-6}", 3)`); +@red-4: color(~`colorPalette("@{red-6}", 4)`); +@red-5: color(~`colorPalette("@{red-6}", 5)`); +@red-6: #f5222d; +@red-7: color(~`colorPalette("@{red-6}", 7)`); +@red-8: color(~`colorPalette("@{red-6}", 8)`); +@red-9: color(~`colorPalette("@{red-6}", 9)`); +@red-10: color(~`colorPalette("@{red-6}", 10)`); + +@orange-1: color(~`colorPalette("@{orange-6}", 1)`); +@orange-2: color(~`colorPalette("@{orange-6}", 2)`); +@orange-3: color(~`colorPalette("@{orange-6}", 3)`); +@orange-4: color(~`colorPalette("@{orange-6}", 4)`); +@orange-5: color(~`colorPalette("@{orange-6}", 5)`); +@orange-6: #fa8c16; +@orange-7: color(~`colorPalette("@{orange-6}", 7)`); +@orange-8: color(~`colorPalette("@{orange-6}", 8)`); +@orange-9: color(~`colorPalette("@{orange-6}", 9)`); +@orange-10: color(~`colorPalette("@{orange-6}", 10)`); + +@yellow-1: color(~`colorPalette("@{yellow-6}", 1)`); +@yellow-2: color(~`colorPalette("@{yellow-6}", 2)`); +@yellow-3: color(~`colorPalette("@{yellow-6}", 3)`); +@yellow-4: color(~`colorPalette("@{yellow-6}", 4)`); +@yellow-5: color(~`colorPalette("@{yellow-6}", 5)`); +@yellow-6: #fadb14; +@yellow-7: color(~`colorPalette("@{yellow-6}", 7)`); +@yellow-8: color(~`colorPalette("@{yellow-6}", 8)`); +@yellow-9: color(~`colorPalette("@{yellow-6}", 9)`); +@yellow-10: color(~`colorPalette("@{yellow-6}", 10)`); + +@volcano-1: color(~`colorPalette("@{volcano-6}", 1)`); +@volcano-2: color(~`colorPalette("@{volcano-6}", 2)`); +@volcano-3: color(~`colorPalette("@{volcano-6}", 3)`); +@volcano-4: color(~`colorPalette("@{volcano-6}", 4)`); +@volcano-5: color(~`colorPalette("@{volcano-6}", 5)`); +@volcano-6: #fa541c; +@volcano-7: color(~`colorPalette("@{volcano-6}", 7)`); +@volcano-8: color(~`colorPalette("@{volcano-6}", 8)`); +@volcano-9: color(~`colorPalette("@{volcano-6}", 9)`); +@volcano-10: color(~`colorPalette("@{volcano-6}", 10)`); + +@geekblue-1: color(~`colorPalette("@{geekblue-6}", 1)`); +@geekblue-2: color(~`colorPalette("@{geekblue-6}", 2)`); +@geekblue-3: color(~`colorPalette("@{geekblue-6}", 3)`); +@geekblue-4: color(~`colorPalette("@{geekblue-6}", 4)`); +@geekblue-5: color(~`colorPalette("@{geekblue-6}", 5)`); +@geekblue-6: #2f54eb; +@geekblue-7: color(~`colorPalette("@{geekblue-6}", 7)`); +@geekblue-8: color(~`colorPalette("@{geekblue-6}", 8)`); +@geekblue-9: color(~`colorPalette("@{geekblue-6}", 9)`); +@geekblue-10: color(~`colorPalette("@{geekblue-6}", 10)`); + +@lime-1: color(~`colorPalette("@{lime-6}", 1)`); +@lime-2: color(~`colorPalette("@{lime-6}", 2)`); +@lime-3: color(~`colorPalette("@{lime-6}", 3)`); +@lime-4: color(~`colorPalette("@{lime-6}", 4)`); +@lime-5: color(~`colorPalette("@{lime-6}", 5)`); +@lime-6: #a0d911; +@lime-7: color(~`colorPalette("@{lime-6}", 7)`); +@lime-8: color(~`colorPalette("@{lime-6}", 8)`); +@lime-9: color(~`colorPalette("@{lime-6}", 9)`); +@lime-10: color(~`colorPalette("@{lime-6}", 10)`); + +@gold-1: color(~`colorPalette("@{gold-6}", 1)`); +@gold-2: color(~`colorPalette("@{gold-6}", 2)`); +@gold-3: color(~`colorPalette("@{gold-6}", 3)`); +@gold-4: color(~`colorPalette("@{gold-6}", 4)`); +@gold-5: color(~`colorPalette("@{gold-6}", 5)`); +@gold-6: #faad14; +@gold-7: color(~`colorPalette("@{gold-6}", 7)`); +@gold-8: color(~`colorPalette("@{gold-6}", 8)`); +@gold-9: color(~`colorPalette("@{gold-6}", 9)`); +@gold-10: color(~`colorPalette("@{gold-6}", 10)`); + +// The prefix to use on all css classes from ant. +@ant-prefix : ant; + +// -------- Colors ----------- + +@info-color : @blue-6; +@success-color : @green-6; +@processing-color : @blue-6; +@error-color : @red-6; +@highlight-color : @red-6; +@warning-color : @gold-6; +@normal-color : #d9d9d9; + +// Color used by default to control hover and active backgrounds and for +// alert info backgrounds. +@primary-1: color(~`colorPalette("@{primary-color}", 1)`); // replace tint(@primary-color, 90%) +@primary-2: color(~`colorPalette("@{primary-color}", 2)`); // replace tint(@primary-color, 80%) +@primary-3: color(~`colorPalette("@{primary-color}", 3)`); // unused +@primary-4: color(~`colorPalette("@{primary-color}", 4)`); // unused +@primary-5: color(~`colorPalette("@{primary-color}", 5)`); // color used to control the text color in many active and hover states, replace tint(@primary-color, 20%) +@primary-6: @primary-color; // color used to control the text color of active buttons, don't use, use @primary-color +@primary-7: color(~`colorPalette("@{primary-color}", 7)`); // replace shade(@primary-color, 5%) +@primary-8: color(~`colorPalette("@{primary-color}", 8)`); // unused +@primary-9: color(~`colorPalette("@{primary-color}", 9)`); // unused +@primary-10: color(~`colorPalette("@{primary-color}", 10)`); // unused + +// Base Scaffolding Variables +// --- + +// Background color for `` +@body-background : #fff; +// Base background color for most components +@component-background : #fff; +@font-family : "Chinese Quote", -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Helvetica, Arial, sans-serif, +"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol"; +@code-family : "SFMono-Regular", Consolas, "Liberation Mono", Menlo, Courier, monospace; +@heading-color : fade(#000, 85%); +@text-color : fade(#000, 65%); +@text-color-secondary : fade(#000, 45%); +@heading-color-dark : fade(#fff, 100%); +@text-color-dark : fade(#fff, 85%); +@text-color-secondary-dark: fade(#fff, 65%); +@font-size-base : 14px; +@font-size-lg : @font-size-base + 2px; +@font-size-sm : 12px; +@line-height-base : 1.5; +@border-radius-base : 4px; +@border-radius-sm : 2px; + +// vertical paddings +@padding-lg : 24px; // containers +@padding-md : 16px; // small containers and buttons +@padding-sm : 12px; // Form controls and items +@padding-xs : 8px; // small items + +// vertical padding for all form controls +@control-padding-horizontal: @padding-sm; +@control-padding-horizontal-sm: @padding-xs; + +// The background colors for active and hover states for things like +// list items or table cells. +@item-active-bg : @primary-1; +@item-hover-bg : @primary-1; + +// ICONFONT +@iconfont-css-prefix : anticon; + +// LINK +@link-color : @primary-color; +@link-hover-color : color(~`colorPalette("@{link-color}", 5)`); +@link-active-color : color(~`colorPalette("@{link-color}", 7)`); +@link-decoration : none; +@link-hover-decoration : none; + +// Animation +@ease-base-out : cubic-bezier(0.7, 0.3, 0.1, 1); +@ease-base-in : cubic-bezier(0.9, 0, 0.3, 0.7); +@ease-out : cubic-bezier(0.215, 0.61, 0.355, 1); +@ease-in : cubic-bezier(0.55, 0.055, 0.675, 0.19); +@ease-in-out : cubic-bezier(0.645, 0.045, 0.355, 1); +@ease-out-back : cubic-bezier(0.12, 0.4, 0.29, 1.46); +@ease-in-back : cubic-bezier(0.71, -0.46, 0.88, 0.6); +@ease-in-out-back : cubic-bezier(0.71, -0.46, 0.29, 1.46); +@ease-out-circ : cubic-bezier(0.08, 0.82, 0.17, 1); +@ease-in-circ : cubic-bezier(0.6, 0.04, 0.98, 0.34); +@ease-in-out-circ : cubic-bezier(0.78, 0.14, 0.15, 0.86); +@ease-out-quint : cubic-bezier(0.23, 1, 0.32, 1); +@ease-in-quint : cubic-bezier(0.755, 0.05, 0.855, 0.06); +@ease-in-out-quint : cubic-bezier(0.86, 0, 0.07, 1); + +// Border color +@border-color-base : hsv(0, 0, 85%); // base border outline a component +@border-color-split : hsv(0, 0, 91%); // split border inside a component +@border-width-base : 1px; // width of the border for a component +@border-style-base : solid; // style of a components border + +// Outline +@outline-blur-size : 0; +@outline-width : 2px; +@outline-color : @primary-color; + +@background-color-light : hsv(0, 0, 98%); // background of header and selected item +@background-color-base : hsv(0, 0, 96%); // Default grey background color + +// Disabled states +@disabled-color : fade(#000, 25%); +@disabled-bg : @background-color-base; +@disabled-color-dark : fade(#fff, 35%); + +// Shadow +@shadow-color : rgba(0, 0, 0, .15); +@box-shadow-base : @shadow-1-down; +@shadow-1-up : 0 -2px 8px @shadow-color; +@shadow-1-down : 0 2px 8px @shadow-color; +@shadow-1-left : -2px 0 8px @shadow-color; +@shadow-1-right : 2px 0 8px @shadow-color; +@shadow-2 : 0 4px 12px @shadow-color; + +// Buttons +@btn-font-weight : 400; +@btn-border-radius-base : @border-radius-base; +@btn-border-radius-sm : @border-radius-base; + +@btn-primary-color : #fff; +@btn-primary-bg : @primary-color; + +@btn-default-color : @text-color; +@btn-default-bg : #fff; +@btn-default-border : @border-color-base; + +@btn-danger-color : @error-color; +@btn-danger-bg : @background-color-base; +@btn-danger-border : @border-color-base; + +@btn-disable-color : @disabled-color; +@btn-disable-bg : @disabled-bg; +@btn-disable-border : @border-color-base; + +@btn-padding-base : 0 @padding-md - 1px; +@btn-font-size-lg : @font-size-lg; +@btn-font-size-sm : @font-size-base; +@btn-padding-lg : @btn-padding-base; +@btn-padding-sm : 0 @padding-xs - 1px; + +@btn-height-base : 32px; +@btn-height-lg : 40px; +@btn-height-sm : 24px; + +@btn-circle-size : @btn-height-base; +@btn-circle-size-lg : @btn-height-lg; +@btn-circle-size-sm : @btn-height-sm; + +@btn-group-border : @primary-5; + +// Checkbox +@checkbox-size : 16px; +@checkbox-color : @primary-color; +@checkbox-check-color : #fff; + +// Radio +@radio-size : 16px; +@radio-dot-color : @primary-color; + +// Radio buttons +@radio-button-bg : @btn-default-bg; +@radio-button-color : @btn-default-color; +@radio-button-hover-color : @primary-5; +@radio-button-active-color : @primary-7; + +// Media queries breakpoints +// Extra small screen / phone +@screen-xs : 480px; +@screen-xs-min : @screen-xs; + +// Small screen / tablet +@screen-sm : 576px; +@screen-sm-min : @screen-sm; + +// Medium screen / desktop +@screen-md : 768px; +@screen-md-min : @screen-md; + +// Large screen / wide desktop +@screen-lg : 992px; +@screen-lg-min : @screen-lg; + +// Extra large screen / full hd +@screen-xl : 1200px; +@screen-xl-min : @screen-xl; + +// Extra extra large screen / large descktop +@screen-xxl : 1600px; +@screen-xxl-min : @screen-xxl; + +// provide a maximum +@screen-xs-max : (@screen-sm-min - 1px); +@screen-sm-max : (@screen-md-min - 1px); +@screen-md-max : (@screen-lg-min - 1px); +@screen-lg-max : (@screen-xl-min - 1px); +@screen-xl-max : (@screen-xxl-min - 1px); + +// Grid system +@grid-columns : 24; +@grid-gutter-width : 0; + +// Layout +@layout-body-background : #f0f2f5; +@layout-header-background : #001529; +@layout-footer-background : @layout-body-background; +@layout-header-height : 64px; +@layout-header-padding : 0 50px; +@layout-footer-padding : 24px 50px; +@layout-sider-background : @layout-header-background; +@layout-trigger-height : 48px; +@layout-trigger-background : #002140; +@layout-trigger-color : #fff; +@layout-zero-trigger-width : 36px; +@layout-zero-trigger-height : 42px; +// Layout light theme +@layout-sider-background-light : #fff; +@layout-trigger-background-light: #fff; +@layout-trigger-color-light : @text-color; + +// z-index list +@zindex-affix : 10; +@zindex-back-top : 10; +@zindex-modal-mask : 1000; +@zindex-modal : 1000; +@zindex-notification : 1010; +@zindex-message : 1010; +@zindex-popover : 1030; +@zindex-picker : 1050; +@zindex-dropdown : 1050; +@zindex-tooltip : 1060; + +// Animation +@animation-duration-slow: .3s; // Modal +@animation-duration-base: .2s; +@animation-duration-fast: .1s; // Tooltip + +// Form +// --- +@label-required-color : @highlight-color; +@label-color : @heading-color; +@form-item-margin-bottom : 24px; +@form-item-trailing-colon : true; +@form-vertical-label-padding : 0 0 8px; +@form-vertical-label-margin : 0; + +// Input +// --- +@input-height-base : 32px; +@input-height-lg : 40px; +@input-height-sm : 24px; +@input-padding-horizontal : @control-padding-horizontal - 1px; +@input-padding-horizontal-base: @input-padding-horizontal; +@input-padding-horizontal-sm : @control-padding-horizontal-sm - 1px; +@input-padding-horizontal-lg : @input-padding-horizontal; +@input-padding-vertical-base : 4px; +@input-padding-vertical-sm : 1px; +@input-padding-vertical-lg : 6px; +@input-placeholder-color : hsv(0, 0, 75%); +@input-color : @text-color; +@input-border-color : @border-color-base; +@input-bg : #fff; +@input-addon-bg : @background-color-light; +@input-hover-border-color : @primary-color; +@input-disabled-bg : @disabled-bg; +@input-outline-offset : 0 0; + +// Tooltip +// --- +//* Tooltip max width +@tooltip-max-width: 250px; +//** Tooltip text color +@tooltip-color: #fff; +//** Tooltip background color +@tooltip-bg: rgba(0, 0, 0, .75); +//** Tooltip arrow width +@tooltip-arrow-width: 5px; +//** Tooltip distance with trigger +@tooltip-distance: @tooltip-arrow-width - 1px + 4px; +//** Tooltip arrow color +@tooltip-arrow-color: @tooltip-bg; + +// Popover +// --- +//** Popover body background color +@popover-bg: #fff; +//** Popover text color +@popover-color: @text-color; +//** Popover maximum width +@popover-min-width: 177px; +//** Popover arrow width +@popover-arrow-width: 6px; +//** Popover arrow color +@popover-arrow-color: @popover-bg; +//** Popover outer arrow width +//** Popover outer arrow color +@popover-arrow-outer-color: @popover-bg; +//** Popover distance with trigger +@popover-distance: @popover-arrow-width + 4px; + +// Modal +// -- +@modal-mask-bg: rgba(0, 0, 0, 0.65); + +// Progress +// -- +@progress-default-color: @processing-color; +@progress-remaining-color: @background-color-base; +@progress-text-color: @text-color; + +// Menu +// --- +@menu-inline-toplevel-item-height: 40px; +@menu-item-height: 40px; +@menu-collapsed-width: 80px; +@menu-bg: @component-background; +@menu-item-color: @text-color; +@menu-highlight-color: @primary-color; +@menu-item-active-bg: @item-active-bg; +@menu-item-active-border-width: 3px; +@menu-item-group-title-color: @text-color-secondary; +// dark theme +@menu-dark-color: @text-color-secondary-dark; +@menu-dark-bg: @layout-header-background; +@menu-dark-arrow-color: #fff; +@menu-dark-submenu-bg: #000c17; +@menu-dark-highlight-color: #fff; +@menu-dark-item-active-bg: @primary-color; + +// Spin +// --- +@spin-dot-size-sm: 14px; +@spin-dot-size: 20px; +@spin-dot-size-lg: 32px; + +// Table +// -- +@table-header-bg: @background-color-light; +@table-header-color: @heading-color; +@table-header-sort-bg: @background-color-base; +@table-body-sort-bg: rgba(0, 0, 0, .01); +@table-row-hover-bg: @primary-1; +@table-selected-row-bg: #fafafa; +@table-expanded-row-bg: #fbfbfb; +@table-padding-vertical: 16px; +@table-padding-horizontal: 16px; + +// Tag +// -- +@tag-default-bg: @background-color-light; +@tag-default-color: @text-color; +@tag-font-size: @font-size-sm; + +// TimePicker +// --- +@time-picker-panel-column-width: 56px; +@time-picker-panel-width: @time-picker-panel-column-width * 3; +@time-picker-selected-bg: @background-color-base; + +// Carousel +// --- +@carousel-dot-width: 16px; +@carousel-dot-height: 3px; +@carousel-dot-active-width: 24px; + +// Badge +// --- +@badge-height: 20px; +@badge-dot-size: 6px; +@badge-font-size: @font-size-sm; +@badge-font-weight: normal; +@badge-status-size: 6px; + +// Rate +// --- +@rate-star-color: @yellow-6; +@rate-star-bg: @border-color-split; + +// Card +// --- +@card-head-color: @heading-color; +@card-head-background: transparent; +@card-head-padding: 16px; +@card-inner-head-padding: 12px; +@card-padding-base: 24px; +@card-padding-wider: 32px; +@card-actions-background: @background-color-light; +@card-shadow: 0 2px 8px rgba(0, 0, 0, .09); + +// Tabs +// --- +@tabs-card-head-background: @background-color-light; +@tabs-card-height: 40px; +@tabs-card-active-color: @primary-color; +@tabs-title-font-size: @font-size-base; +@tabs-title-font-size-lg: @font-size-lg; +@tabs-title-font-size-sm: @font-size-base; +@tabs-ink-bar-color: @primary-color; +@tabs-bar-margin: 0 0 16px 0; +@tabs-horizontal-margin: 0 32px 0 0; +@tabs-horizontal-padding: 12px 16px; +@tabs-vertical-padding: 8px 24px; +@tabs-vertical-margin: 0 0 16px 0; +@tabs-scrolling-size: 32px; +@tabs-highlight-color: @primary-color; +@tabs-hover-color: @primary-5; +@tabs-active-color: @primary-7; + +// BackTop +// --- +@back-top-color: #fff; +@back-top-bg: @text-color-secondary; +@back-top-hover-bg: @text-color; + +// Avatar +// --- +@avatar-size-base: 32px; +@avatar-size-lg: 40px; +@avatar-size-sm: 24px; +@avatar-font-size-base: 18px; +@avatar-font-size-lg: 24px; +@avatar-font-size-sm: 14px; +@avatar-bg: #ccc; +@avatar-color: #fff; +@avatar-border-radius: @border-radius-base; + +// Switch +// --- +@switch-height: 22px; +@switch-sm-height: 16px; +@switch-sm-checked-margin-left: -(@switch-sm-height - 3px); +@switch-disabled-opacity: 0.4; +@switch-color: @primary-color; + +// Pagination +// --- +@pagination-item-size: 32px; +@pagination-item-size-sm: 24px; +@pagination-font-family: Arial; +@pagination-font-weight-active: 500; + +// Breadcrumb +// --- +@breadcrumb-base-color: @text-color-secondary; +@breadcrumb-last-item-color: @text-color; +@breadcrumb-font-size: @font-size-base; +@breadcrumb-icon-font-size: @font-size-base; +@breadcrumb-link-color: @text-color-secondary; +@breadcrumb-link-color-hover: @primary-5; +@breadcrumb-separator-color: @text-color-secondary; +@breadcrumb-separator-margin: 0 @padding-xs; + +// Slider +// --- +@slider-margin: 14px 6px 10px; +@slider-rail-background-color: @background-color-base; +@slider-rail-background-color-hover: #e1e1e1; +@slider-track-background-color: @primary-3; +@slider-track-background-color-hover: @primary-4; +@slider-handle-color: @primary-3; +@slider-handle-color-hover: @primary-4; +@slider-handle-color-focus: tint(@primary-color, 20%); +@slider-handle-color-focus-shadow: tint(@primary-color, 50%); +@slider-handle-color-tooltip-open: @primary-color; +@slider-dot-border-color: @border-color-split; +@slider-dot-border-color-active: tint(@primary-color, 50%); +@slider-disabled-color: @disabled-color; +@slider-disabled-background-color: @component-background; + +// Tree +// --- +@tree-title-height: 24px; +@tree-child-padding: 18px; +@tree-directory-selected-color: #fff; +@tree-directory-selected-bg: @primary-color; + +// Collapse +// --- +@collapse-header-padding: 12px 0 12px 40px; +@collapse-header-bg: @background-color-light; +@collapse-content-padding: @padding-md; +@collapse-content-bg: @component-background; + +// Skeleton +// --- +@skeleton-color: #f2f2f2; + +// Transfer +// --- +@transfer-disabled-bg: @disabled-bg; + +// Message +// --- +@message-notice-content-padding: 10px 16px; + +// Motion +// --- +@wave-animation-width: 6px; + +// Alert +// --- +@alert-success-border-color: ~`colorPalette("@{success-color}", 3)`; +@alert-success-bg-color: ~`colorPalette("@{success-color}", 1)`; +@alert-success-icon-color: @success-color; +@alert-info-border-color: ~`colorPalette("@{info-color}", 3)`; +@alert-info-bg-color: ~`colorPalette("@{info-color}", 1)`; +@alert-info-icon-color: @info-color; +@alert-warning-border-color: ~`colorPalette("@{warning-color}", 3)`; +@alert-warning-bg-color: ~`colorPalette("@{warning-color}", 1)`; +@alert-warning-icon-color: @warning-color; +@alert-error-border-color: ~`colorPalette("@{error-color}", 3)`; +@alert-error-bg-color: ~`colorPalette("@{error-color}", 1)`; +@alert-error-icon-color: @error-color; + +// List +// --- +@list-empty-text-padding: @padding-md; +@list-item-padding: @padding-sm 0; +@list-item-content-margin: 0 0 @padding-md 0; +@list-item-meta-margin-bottom: @padding-md; +@list-item-meta-avatar-margin-right: @padding-md; +@list-item-meta-title-margin-bottom: @padding-sm; + +// Menu +@menu-dark-item-selected-bg: @menu-dark-item-active-bg; + +// Tabs +@tab-bar-margin: @tabs-bar-margin; +@tab-horizontal-margin: @tabs-horizontal-margin; +@tab-vertical-margin: @tabs-vertical-margin; +@tab-horizontal-padding: @tabs-horizontal-padding; +@tab-vertical-padding: @tabs-vertical-padding; +@tab-scrolling-size: @tabs-scrolling-size; +@tab-highlight-color: @tabs-highlight-color; +@tab-hover-color: @tabs-hover-color; +@tab-active-color: @tabs-active-color; +@tabs-ink-bar-bg-color: @tabs-ink-bar-color; + +.listContent .extra { + color: rgba(0, 0, 0, 0.45); +} +.listContent .extra > em { + color: rgba(0, 0, 0, 0.25); +} +.avatarItem :global .ant-avatar { + border: 1px solid #fff; +} +.chartCard .avatar img { + border-radius: 100%; +} +.chartCard .meta { + color: rgba(0, 0, 0, 0.45); +} +.chartCard .total { + color: rgba(0, 0, 0, 0.85); +} +.chartCard .footer { + border-top: 1px solid #e8e8e8; +} +.field span:last-child { + color: rgba(0, 0, 0, 0.85); +} +.miniProgress .progressWrap { + background-color: #f5f5f5; +} +.miniProgress .progress { + border-radius: 1px 0 0 1px; + background-color: @primary-color; +} +.miniProgress .target span { + border-radius: 100px; +} +.pie .dot { + border-radius: 8px; +} +.pie .line { + background-color: #e8e8e8; +} +.pie .legendTitle { + color: rgba(0, 0, 0, 0.65); +} +.pie .percent { + color: rgba(0, 0, 0, 0.45); +} +.pie .total > h4 { + color: rgba(0, 0, 0, 0.45); +} +.pie .total > p { + color: rgba(0, 0, 0, 0.85); +} +.radar .legend .legendItem { + color: rgba(0, 0, 0, 0.45); +} +.radar .legend .legendItem h6 { + color: rgba(0, 0, 0, 0.85); +} +.radar .legend .legendItem:after { + background-color: #e8e8e8; +} +.radar .legend .dot { + border-radius: 6px; +} + +.timelineChart { + background: #fff; +} +.waterWave .text span { + color: rgba(0, 0, 0, 0.45); +} +.waterWave .text h4 { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .title { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .term { + color: rgba(0, 0, 0, 0.85); +} +.descriptionList .detail { + color: rgba(0, 0, 0, 0.65); +} +.descriptionList.small .title { + color: rgba(0, 0, 0, 0.65); +} +.linkGroup > a { + color: rgba(0, 0, 0, 0.65); +} +.linkGroup > a:hover { + color: @primary-color; +} +.lines .shadow { + color: transparent; +} +.exception .imgEle { + background-repeat: no-repeat; + background-position: 50% 50%; + background-size: contain; +} +.exception .content h1 { + color: #434e59; +} +.exception .content .desc { + color: rgba(0, 0, 0, 0.45); +} +.toolbar { + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03); + background: #fff; + border-top: 1px solid #e8e8e8; +} +.globalFooter .links a { + color: rgba(0, 0, 0, 0.45); +} +.globalFooter .links a:hover { + color: rgba(0, 0, 0, 0.65); +} +.globalFooter .copyright { + color: rgba(0, 0, 0, 0.45); +} +.header { + background: #fff; + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); +} +i.trigger:hover { + background: rgba(0, 0, 0, 0.025); +} +.right .action > i { + color: rgba(0, 0, 0, 0.65); +} +.right .action:hover { + background: rgba(0, 0, 0, 0.025); +} +:global(.right .action.ant-popover-open) { + background: rgba(0, 0, 0, 0.025); +} +.right .search:hover { + background: transparent; +} +.right .account .avatar { + color: @primary-color; + background: rgba(255, 255, 255, 0.85); +} +.dark .action { + color: rgba(255, 255, 255, 0.85); +} +.dark .action > i { + color: rgba(255, 255, 255, 0.85); +} +.dark .action:hover, +.dark .action:global(.ant-popover-open) { + background: @primary-color; +} +.dark .action :global(.ant-badge) { + color: rgba(255, 255, 255, 0.85); +} +.headerSearch .input { + background: transparent; + border-radius: 0; +} +.headerSearch .input :global(.ant-select-selection) { + background: transparent; +} +.headerSearch .input input { + border: 0; + box-shadow: none !important; +} +.headerSearch .input, +.headerSearch .input:hover, +.headerSearch .input:focus { + border-bottom: 1px solid #d9d9d9; +} +.login :global .ant-tabs .ant-tabs-bar { + border-bottom: 0; +} +.login .icon { + color: rgba(0, 0, 0, 0.2); +} +.login .icon:hover { + color: @primary-color; +} +.login .prefixIcon { + color: rgba(0, 0, 0, 0.25); +} +.list .item .avatar { + background: #fff; +} +.list .item:last-child { + border-bottom: 0; +} +.list .item:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.list .item .extra { + color: rgba(0, 0, 0, 0.45); +} +.notFound { + color: rgba(0, 0, 0, 0.45); +} +.clear { + color: rgba(0, 0, 0, 0.65); + border-radius: 0 0 4px 4px; + border-top: 1px solid #e8e8e8; +} +.clear:hover { + color: rgba(0, 0, 0, 0.85); +} +.numberInfo .suffix { + color: rgba(0, 0, 0, 0.65); +} +.numberInfo .numberInfoTitle { + color: rgba(0, 0, 0, 0.65); +} +.numberInfo .numberInfoSubTitle { + color: rgba(0, 0, 0, 0.45); +} +.numberInfo .numberInfoValue > span { + color: rgba(0, 0, 0, 0.85); +} +.numberInfo .numberInfoValue .subTotal { + color: rgba(0, 0, 0, 0.45); +} +.numberInfo .numberInfoValue .subTotal :global .anticon-caret-up { + color: #f5222d; +} +.numberInfo .numberInfoValue .subTotal :global .anticon-caret-down { + color: #52c41a; +} +.numberInfolight .numberInfoValue > span { + color: rgba(0, 0, 0, 0.65); +} +.pageHeader { + background: #fff; + border-bottom: 1px solid #e8e8e8; +} +.pageHeader .tabs :global .ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.pageHeader .logo > img { + border-radius: 4px; +} +.pageHeader .title { + color: rgba(0, 0, 0, 0.85); +} +.result .icon > .success { + color: #52c41a; +} +.result .icon > .error { + color: #f5222d; +} +.result .title { + color: rgba(0, 0, 0, 0.85); +} +.result .description { + color: rgba(0, 0, 0, 0.45); +} +.result .extra { + background: #fafafa; + border-radius: 2px; +} +.blockChecbox .item { + border-radius: 4px; +} +.blockChecbox .selectIcon { + color: @primary-color; +} +.color_block { + border-radius: 4px; +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.handle { + background: @primary-color; + border-radius: 4px 0 0 4px; +} +.setting-drawer-index-handle { + /* 暂时不知道放哪解决 */ + background: @primary-color !important; +} +.themeColor .title { + color: rgba(0, 0, 0, 0.65); +} +.themeColor .colorBlock { + border-radius: 2px; + color: #fff; +} +.logo { +} +.logo h1 { + color: white; +} +.sider { + box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35); +} +.sider.light { + box-shadow: 2px 0 8px 0 rgba(29, 35, 41, 0.05); + background-color: white; +} +.sider.light .logo { + background: white; + box-shadow: 1px 1px 0 0 #e8e8e8; +} +.sider.light .logo h1 { + color: @primary-color; +} +.sider.light :global(.ant-menu-light) { + border-right-color: transparent; +} +:global .drawer .drawer-content { + background: #001529; +} +.standardFormRow { + border-bottom: 1px dashed #e8e8e8; +} +.standardFormRow :global .ant-form-item-label label { + color: rgba(0, 0, 0, 0.65); +} +.standardFormRow .label { + color: rgba(0, 0, 0, 0.85); +} +.standardFormRowLast { + border: none; +} + +.head { + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); +} +.head.light { + background-color: #fff; +} +.logo h1 { + color: #fff; +} +.light h1 { + color: #002140; +} +.trendItem .up { + color: #f5222d; +} +.trendItem .down { + color: #52c41a; +} +.trendItem.trendItemGrey .up, +.trendItem.trendItemGrey .down { + color: rgba(0, 0, 0, 0.65); +} +.trendItem.reverseColor .up { + color: #52c41a; +} +.trendItem.reverseColor .down { + color: #f5222d; +} +.container { + background: #f0f2f5; +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.desc { + color: rgba(0, 0, 0, 0.45); +} +a.listItemMetaTitle { + color: rgba(0, 0, 0, 0.85); +} +.baseView .right .avatar_title { + color: rgba(0, 0, 0, 0.85); +} +.main { + background-color: #fff; +} +.main .leftmenu { + border-right: 1px solid #e8e8e8; +} +.main .leftmenu :global .ant-menu-inline { + border: none; +} +.main .right .title { + color: rgba(0, 0, 0, 0.85); +} +.main :global .ant-list-split .ant-list-item:last-child { + border-bottom: 1px solid #e8e8e8; +} +:global .ant-list-item-meta .taobao { + color: #ff4000; + border-radius: 4px; +} +:global .ant-list-item-meta .dingding { + background-color: #2eabff; + color: #fff; + border-radius: 4px; +} +:global .ant-list-item-meta .alipay { + color: #2eabff; + border-radius: 4px; +} +:global font.strong { + color: #52c41a; +} +:global font.medium { + color: #faad14; +} +:global font.weak { + color: #f5222d; +} + + + + +.trigger { + background: 'red'; +} +.desc { + color: rgba(0, 0, 0, 0.45); +} +.desc h3 { + color: rgba(0, 0, 0, 0.45); +} +.desc h4 { + color: rgba(0, 0, 0, 0.45); +} +.information .label { + color: rgba(0, 0, 0, 0.85); +} +.errorIcon { + color: #f5222d; +} +.errorListItem { + border-bottom: 1px solid #e8e8e8; +} +.errorListItem:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.errorListItem:last-child { + border: 0; +} +.errorListItem .errorIcon { + color: #f5222d; +} +.errorListItem .errorField { + color: rgba(0, 0, 0, 0.45); +} +.optional { + color: rgba(0, 0, 0, 0.45); +} +a.listItemMetaTitle { + color: rgba(0, 0, 0, 0.85); +} +.noData { + color: rgba(0, 0, 0, 0.25); +} +.heading { + color: rgba(0, 0, 0, 0.85); +} +.textSecondary { + color: rgba(0, 0, 0, 0.45); +} +.title { + color: rgba(0, 0, 0, 0.85); +} +.main .icon { + color: rgba(0, 0, 0, 0.2); +} +.main .icon:hover { + color: @primary-color; +} +.success { + color: #52c41a; +} +.warning { + color: #faad14; +} +.error { + color: #f5222d; +} +.progress-pass > .progress :global .ant-progress-bg { + background-color: #faad14; +} +html { + -webkit-tap-highlight-color: rgba(0, 0, 0, 0); +} +body { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; +} +h1, +h2, +h3, +h4, +h5, +h6 { + color: rgba(0, 0, 0, 0.85); +} +abbr[title], +abbr[data-original-title] { + border-bottom: 0; +} +a { + color: @primary-color; + background-color: transparent; +} +a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +a:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +a[disabled] { + color: rgba(0, 0, 0, 0.25); +} +img { + border-style: none; +} +table { + border-collapse: collapse; +} +caption { + color: rgba(0, 0, 0, 0.45); +} +input, +button, +select, +optgroup, +textarea { + color: inherit; +} +button::-moz-focus-inner, +[type="button"]::-moz-focus-inner, +[type="reset"]::-moz-focus-inner, +[type="submit"]::-moz-focus-inner { + border-style: none; +} +fieldset { + border: 0; +} +legend { + color: inherit; +} +mark { + background-color: #feffe6; +} +::selection { + background: @primary-color; + color: #fff; +} +[ant-click-animating-without-extra-node]:after, +.ant-click-animating-node { + border-radius: inherit; + border: 0 solid @primary-color; +} +.ant-alert { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; +} +.ant-alert-success { + border: 1px solid #b7eb8f; + background-color: #f6ffed; +} +.ant-alert-success .ant-alert-icon { + color: #52c41a; +} +.ant-alert-info { + border: 1px solid color(~`colorPalette("@{primary-color}", 3)`); + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-alert-info .ant-alert-icon { + color: @primary-color; +} +.ant-alert-warning { + border: 1px solid #ffe58f; + background-color: #fffbe6; +} +.ant-alert-warning .ant-alert-icon { + color: #faad14; +} +.ant-alert-error { + border: 1px solid #ffa39e; + background-color: #fff1f0; +} +.ant-alert-error .ant-alert-icon { + color: #f5222d; +} +.ant-alert-close-icon .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-alert-close-icon .anticon-close:hover { + color: #404040; +} +.ant-alert-with-description { + border-radius: 4px; + color: rgba(0, 0, 0, 0.65); +} +.ant-alert-with-description .ant-alert-message { + color: rgba(0, 0, 0, 0.85); +} +.ant-alert-banner { + border-radius: 0; + border: 0; +} +.ant-anchor { + color: rgba(0, 0, 0, 0.65); +} +.ant-anchor-wrapper { + background-color: #fff; +} +.ant-anchor-ink:before { + background-color: #e8e8e8; +} +.ant-anchor-ink-ball { + border-radius: 8px; + border: 2px solid @primary-color; + background-color: #fff; +} +.ant-anchor-link-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-anchor-link-active > .ant-anchor-link-title { + color: @primary-color; +} +.ant-select-auto-complete { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-auto-complete.ant-select .ant-select-selection { + border: 0; + box-shadow: none; +} +.ant-select-auto-complete.ant-select .ant-input { + background: transparent; + border-width: 1px; +} +.ant-select-auto-complete.ant-select .ant-input:focus, +.ant-select-auto-complete.ant-select .ant-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-avatar { + color: rgba(0, 0, 0, 0.65); + background: #ccc; + color: #fff; + border-radius: 50%; +} +.ant-avatar-image { + background: transparent; +} +.ant-avatar-lg { + border-radius: 50%; +} +.ant-avatar-sm { + border-radius: 50%; +} +.ant-avatar-square { + border-radius: 4px; +} +.ant-back-top { + color: rgba(0, 0, 0, 0.65); +} +.ant-back-top-content { + border-radius: 20px; + background-color: rgba(0, 0, 0, 0.45); + color: #fff; +} +.ant-back-top-content:hover { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-back-top-icon { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACQAAAAoCAYAAACWwljjAAAABGdBTUEAALGPC/xhBQAAAbtJREFUWAntmMtKw0AUhhMvS5cuxILgQlRUpIggIoKIIoigG1eC+AA+jo+i6FIXBfeuXIgoeKVeitVWJX5HWhhDksnUpp3FDPyZk3Nm5nycmZKkXhAEOXSA3lG7muTeRzmfy6HneUvIhnYkQK+Q9NhAA0Opg0vBEhjBKHiyb8iGMyQMOYuK41BcBSypAL+MYXSKjtFAW7EAGEO3qN4uMQbbAkXiSfRQJ1H6a+yhlkKRcAoVFYiweYNjtCVQJJpBz2GCiPt7fBOZQpFgDpUikse5HgnkM4Fi4QX0Fpc5wf9EbLqpUCy4jMoJSXWhFwbMNgWKhVbRhy5jirhs9fy/oFhgHVVTJEs7RLZ8sSEoJm6iz7SZDMbJ+/OKERQTttCXQRLToRUmrKWCYuA2+jbN0MB4OQobYShfdTCgn/sL1K36M7TLrN3n+758aPy2rrpR6+/od5E8tf/A1uLS9aId5T7J3CNYihkQ4D9PiMdMC7mp4rjB9kjFjZp8BlnVHJBuO1yFXIV0FdDF3RlyFdJVQBdv5AxVdIsq8apiZ2PyYO1EVykesGfZEESsCkweyR8MUW+V8uJ1gkYipmpdP1pm2aJVPEGzAAAAAElFTkSuQmCC) 100%/100% no-repeat; +} +.ant-badge { + color: rgba(0, 0, 0, 0.65); + color: unset; +} +.ant-badge-count { + border-radius: 10px; + background: #f5222d; + color: #fff; + box-shadow: 0 0 0 1px #fff; +} +.ant-badge-count a, +.ant-badge-count a:hover { + color: #fff; +} +.ant-badge-dot { + border-radius: 100%; + background: #f5222d; + box-shadow: 0 0 0 1px #fff; +} +.ant-badge-status-dot { + border-radius: 50%; +} +.ant-badge-status-success { + background-color: #52c41a; +} +.ant-badge-status-processing { + background-color: @primary-color; +} +.ant-badge-status-processing:after { + border-radius: 50%; + border: 1px solid @primary-color; +} +.ant-badge-status-default { + background-color: #d9d9d9; +} +.ant-badge-status-error { + background-color: #f5222d; +} +.ant-badge-status-warning { + background-color: #faad14; +} +.ant-badge-status-text { + color: rgba(0, 0, 0, 0.65); +} +.ant-breadcrumb { + color: rgba(0, 0, 0, 0.65); + color: rgba(0, 0, 0, 0.45); +} +.ant-breadcrumb a { + color: rgba(0, 0, 0, 0.45); +} +.ant-breadcrumb a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-breadcrumb > span:last-child { + color: rgba(0, 0, 0, 0.65); +} +.ant-breadcrumb-separator { + color: rgba(0, 0, 0, 0.45); +} +.ant-btn { + background-image: none; + border: 1px solid transparent; + border-radius: 4px; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015); + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-color: #d9d9d9; +} +.ant-btn:not([disabled]):active { + box-shadow: none; +} +.ant-btn-lg { + border-radius: 4px; +} +.ant-btn-sm { + border-radius: 4px; +} +.ant-btn > a:only-child { + color: currentColor; +} +.ant-btn > a:only-child:after { + background: transparent; +} +.ant-btn:hover, +.ant-btn:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn:hover > a:only-child, +.ant-btn:focus > a:only-child { + color: currentColor; +} +.ant-btn:hover > a:only-child:after, +.ant-btn:focus > a:only-child:after { + background: transparent; +} +.ant-btn:active, +.ant-btn.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn:active > a:only-child, +.ant-btn.active > a:only-child { + color: currentColor; +} +.ant-btn:active > a:only-child:after, +.ant-btn.active > a:only-child:after { + background: transparent; +} +.ant-btn.disabled, +.ant-btn[disabled], +.ant-btn.disabled:hover, +.ant-btn[disabled]:hover, +.ant-btn.disabled:focus, +.ant-btn[disabled]:focus, +.ant-btn.disabled:active, +.ant-btn[disabled]:active, +.ant-btn.disabled.active, +.ant-btn[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn.disabled > a:only-child, +.ant-btn[disabled] > a:only-child, +.ant-btn.disabled:hover > a:only-child, +.ant-btn[disabled]:hover > a:only-child, +.ant-btn.disabled:focus > a:only-child, +.ant-btn[disabled]:focus > a:only-child, +.ant-btn.disabled:active > a:only-child, +.ant-btn[disabled]:active > a:only-child, +.ant-btn.disabled.active > a:only-child, +.ant-btn[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn.disabled > a:only-child:after, +.ant-btn[disabled] > a:only-child:after, +.ant-btn.disabled:hover > a:only-child:after, +.ant-btn[disabled]:hover > a:only-child:after, +.ant-btn.disabled:focus > a:only-child:after, +.ant-btn[disabled]:focus > a:only-child:after, +.ant-btn.disabled:active > a:only-child:after, +.ant-btn[disabled]:active > a:only-child:after, +.ant-btn.disabled.active > a:only-child:after, +.ant-btn[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn:hover, +.ant-btn:focus, +.ant-btn:active, +.ant-btn.active { + background: #fff; +} +.ant-btn-primary { + color: #fff; + background-color: @primary-color; + border-color: @primary-color; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.035); +} +.ant-btn-primary > a:only-child { + color: currentColor; +} +.ant-btn-primary > a:only-child:after { + background: transparent; +} +.ant-btn-primary:hover, +.ant-btn-primary:focus { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 5)`); + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-primary:hover > a:only-child, +.ant-btn-primary:focus > a:only-child { + color: currentColor; +} +.ant-btn-primary:hover > a:only-child:after, +.ant-btn-primary:focus > a:only-child:after { + background: transparent; +} +.ant-btn-primary:active, +.ant-btn-primary.active { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 7)`); + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-primary:active > a:only-child, +.ant-btn-primary.active > a:only-child { + color: currentColor; +} +.ant-btn-primary:active > a:only-child:after, +.ant-btn-primary.active > a:only-child:after { + background: transparent; +} +.ant-btn-primary.disabled, +.ant-btn-primary[disabled], +.ant-btn-primary.disabled:hover, +.ant-btn-primary[disabled]:hover, +.ant-btn-primary.disabled:focus, +.ant-btn-primary[disabled]:focus, +.ant-btn-primary.disabled:active, +.ant-btn-primary[disabled]:active, +.ant-btn-primary.disabled.active, +.ant-btn-primary[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-primary.disabled > a:only-child, +.ant-btn-primary[disabled] > a:only-child, +.ant-btn-primary.disabled:hover > a:only-child, +.ant-btn-primary[disabled]:hover > a:only-child, +.ant-btn-primary.disabled:focus > a:only-child, +.ant-btn-primary[disabled]:focus > a:only-child, +.ant-btn-primary.disabled:active > a:only-child, +.ant-btn-primary[disabled]:active > a:only-child, +.ant-btn-primary.disabled.active > a:only-child, +.ant-btn-primary[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-primary.disabled > a:only-child:after, +.ant-btn-primary[disabled] > a:only-child:after, +.ant-btn-primary.disabled:hover > a:only-child:after, +.ant-btn-primary[disabled]:hover > a:only-child:after, +.ant-btn-primary.disabled:focus > a:only-child:after, +.ant-btn-primary[disabled]:focus > a:only-child:after, +.ant-btn-primary.disabled:active > a:only-child:after, +.ant-btn-primary[disabled]:active > a:only-child:after, +.ant-btn-primary.disabled.active > a:only-child:after, +.ant-btn-primary[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child) { + border-right-color: color(~`colorPalette("@{primary-color}", 5)`); + border-left-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:not(:first-child):not(:last-child):disabled { + border-color: #d9d9d9; +} +.ant-btn-group .ant-btn-primary:first-child:not(:last-child) { + border-right-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:first-child:not(:last-child)[disabled] { + border-right-color: #d9d9d9; +} +.ant-btn-group .ant-btn-primary:last-child:not(:first-child), +.ant-btn-group .ant-btn-primary + .ant-btn-primary { + border-left-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-group .ant-btn-primary:last-child:not(:first-child)[disabled], +.ant-btn-group .ant-btn-primary + .ant-btn-primary[disabled] { + border-left-color: #d9d9d9; +} +.ant-btn-ghost { + color: rgba(0, 0, 0, 0.65); + background-color: transparent; + border-color: #d9d9d9; +} +.ant-btn-ghost > a:only-child { + color: currentColor; +} +.ant-btn-ghost > a:only-child:after { + background: transparent; +} +.ant-btn-ghost:hover, +.ant-btn-ghost:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-ghost:hover > a:only-child, +.ant-btn-ghost:focus > a:only-child { + color: currentColor; +} +.ant-btn-ghost:hover > a:only-child:after, +.ant-btn-ghost:focus > a:only-child:after { + background: transparent; +} +.ant-btn-ghost:active, +.ant-btn-ghost.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-ghost:active > a:only-child, +.ant-btn-ghost.active > a:only-child { + color: currentColor; +} +.ant-btn-ghost:active > a:only-child:after, +.ant-btn-ghost.active > a:only-child:after { + background: transparent; +} +.ant-btn-ghost.disabled, +.ant-btn-ghost[disabled], +.ant-btn-ghost.disabled:hover, +.ant-btn-ghost[disabled]:hover, +.ant-btn-ghost.disabled:focus, +.ant-btn-ghost[disabled]:focus, +.ant-btn-ghost.disabled:active, +.ant-btn-ghost[disabled]:active, +.ant-btn-ghost.disabled.active, +.ant-btn-ghost[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-ghost.disabled > a:only-child, +.ant-btn-ghost[disabled] > a:only-child, +.ant-btn-ghost.disabled:hover > a:only-child, +.ant-btn-ghost[disabled]:hover > a:only-child, +.ant-btn-ghost.disabled:focus > a:only-child, +.ant-btn-ghost[disabled]:focus > a:only-child, +.ant-btn-ghost.disabled:active > a:only-child, +.ant-btn-ghost[disabled]:active > a:only-child, +.ant-btn-ghost.disabled.active > a:only-child, +.ant-btn-ghost[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-ghost.disabled > a:only-child:after, +.ant-btn-ghost[disabled] > a:only-child:after, +.ant-btn-ghost.disabled:hover > a:only-child:after, +.ant-btn-ghost[disabled]:hover > a:only-child:after, +.ant-btn-ghost.disabled:focus > a:only-child:after, +.ant-btn-ghost[disabled]:focus > a:only-child:after, +.ant-btn-ghost.disabled:active > a:only-child:after, +.ant-btn-ghost[disabled]:active > a:only-child:after, +.ant-btn-ghost.disabled.active > a:only-child:after, +.ant-btn-ghost[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-dashed { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-color: #d9d9d9; + border-style: dashed; +} +.ant-btn-dashed > a:only-child { + color: currentColor; +} +.ant-btn-dashed > a:only-child:after { + background: transparent; +} +.ant-btn-dashed:hover, +.ant-btn-dashed:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-dashed:hover > a:only-child, +.ant-btn-dashed:focus > a:only-child { + color: currentColor; +} +.ant-btn-dashed:hover > a:only-child:after, +.ant-btn-dashed:focus > a:only-child:after { + background: transparent; +} +.ant-btn-dashed:active, +.ant-btn-dashed.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: #fff; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-dashed:active > a:only-child, +.ant-btn-dashed.active > a:only-child { + color: currentColor; +} +.ant-btn-dashed:active > a:only-child:after, +.ant-btn-dashed.active > a:only-child:after { + background: transparent; +} +.ant-btn-dashed.disabled, +.ant-btn-dashed[disabled], +.ant-btn-dashed.disabled:hover, +.ant-btn-dashed[disabled]:hover, +.ant-btn-dashed.disabled:focus, +.ant-btn-dashed[disabled]:focus, +.ant-btn-dashed.disabled:active, +.ant-btn-dashed[disabled]:active, +.ant-btn-dashed.disabled.active, +.ant-btn-dashed[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-dashed.disabled > a:only-child, +.ant-btn-dashed[disabled] > a:only-child, +.ant-btn-dashed.disabled:hover > a:only-child, +.ant-btn-dashed[disabled]:hover > a:only-child, +.ant-btn-dashed.disabled:focus > a:only-child, +.ant-btn-dashed[disabled]:focus > a:only-child, +.ant-btn-dashed.disabled:active > a:only-child, +.ant-btn-dashed[disabled]:active > a:only-child, +.ant-btn-dashed.disabled.active > a:only-child, +.ant-btn-dashed[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-dashed.disabled > a:only-child:after, +.ant-btn-dashed[disabled] > a:only-child:after, +.ant-btn-dashed.disabled:hover > a:only-child:after, +.ant-btn-dashed[disabled]:hover > a:only-child:after, +.ant-btn-dashed.disabled:focus > a:only-child:after, +.ant-btn-dashed[disabled]:focus > a:only-child:after, +.ant-btn-dashed.disabled:active > a:only-child:after, +.ant-btn-dashed[disabled]:active > a:only-child:after, +.ant-btn-dashed.disabled.active > a:only-child:after, +.ant-btn-dashed[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-danger { + color: #f5222d; + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-btn-danger > a:only-child { + color: currentColor; +} +.ant-btn-danger > a:only-child:after { + background: transparent; +} +.ant-btn-danger:hover { + color: #fff; + background-color: #ff4d4f; + border-color: #ff4d4f; +} +.ant-btn-danger:hover > a:only-child { + color: currentColor; +} +.ant-btn-danger:hover > a:only-child:after { + background: transparent; +} +.ant-btn-danger:focus { + color: #ff4d4f; + background-color: #fff; + border-color: #ff4d4f; +} +.ant-btn-danger:focus > a:only-child { + color: currentColor; +} +.ant-btn-danger:focus > a:only-child:after { + background: transparent; +} +.ant-btn-danger:active, +.ant-btn-danger.active { + color: #fff; + background-color: #cf1322; + border-color: #cf1322; +} +.ant-btn-danger:active > a:only-child, +.ant-btn-danger.active > a:only-child { + color: currentColor; +} +.ant-btn-danger:active > a:only-child:after, +.ant-btn-danger.active > a:only-child:after { + background: transparent; +} +.ant-btn-danger.disabled, +.ant-btn-danger[disabled], +.ant-btn-danger.disabled:hover, +.ant-btn-danger[disabled]:hover, +.ant-btn-danger.disabled:focus, +.ant-btn-danger[disabled]:focus, +.ant-btn-danger.disabled:active, +.ant-btn-danger[disabled]:active, +.ant-btn-danger.disabled.active, +.ant-btn-danger[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-danger.disabled > a:only-child, +.ant-btn-danger[disabled] > a:only-child, +.ant-btn-danger.disabled:hover > a:only-child, +.ant-btn-danger[disabled]:hover > a:only-child, +.ant-btn-danger.disabled:focus > a:only-child, +.ant-btn-danger[disabled]:focus > a:only-child, +.ant-btn-danger.disabled:active > a:only-child, +.ant-btn-danger[disabled]:active > a:only-child, +.ant-btn-danger.disabled.active > a:only-child, +.ant-btn-danger[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-danger.disabled > a:only-child:after, +.ant-btn-danger[disabled] > a:only-child:after, +.ant-btn-danger.disabled:hover > a:only-child:after, +.ant-btn-danger[disabled]:hover > a:only-child:after, +.ant-btn-danger.disabled:focus > a:only-child:after, +.ant-btn-danger[disabled]:focus > a:only-child:after, +.ant-btn-danger.disabled:active > a:only-child:after, +.ant-btn-danger[disabled]:active > a:only-child:after, +.ant-btn-danger.disabled.active > a:only-child:after, +.ant-btn-danger[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-circle, +.ant-btn-circle-outline { + border-radius: 50%; +} +.ant-btn-circle.ant-btn-lg, +.ant-btn-circle-outline.ant-btn-lg { + border-radius: 50%; +} +.ant-btn-circle.ant-btn-sm, +.ant-btn-circle-outline.ant-btn-sm { + border-radius: 50%; +} +.ant-btn:before { + background: #fff; + border-radius: inherit; +} +.ant-btn-group-lg > .ant-btn, +.ant-btn-group-lg > span > .ant-btn { + border-radius: 0; +} +.ant-btn-group-sm > .ant-btn, +.ant-btn-group-sm > span > .ant-btn { + border-radius: 0; +} +.ant-btn-group .ant-btn-primary + .ant-btn:not(.ant-btn-primary):not([disabled]) { + border-left-color: transparent; +} +.ant-btn-group .ant-btn { + border-radius: 0; +} +.ant-btn-group > .ant-btn:only-child { + border-radius: 4px; +} +.ant-btn-group > span:only-child > .ant-btn { + border-radius: 4px; +} +.ant-btn-group > .ant-btn:first-child:not(:last-child), +.ant-btn-group > span:first-child:not(:last-child) > .ant-btn { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.ant-btn-group > .ant-btn:last-child:not(:first-child), +.ant-btn-group > span:last-child:not(:first-child) > .ant-btn { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:only-child { + border-radius: 4px; +} +.ant-btn-group-sm > span:only-child > .ant-btn { + border-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:first-child:not(:last-child), +.ant-btn-group-sm > span:first-child:not(:last-child) > .ant-btn { + border-bottom-left-radius: 4px; + border-top-left-radius: 4px; +} +.ant-btn-group-sm > .ant-btn:last-child:not(:first-child), +.ant-btn-group-sm > span:last-child:not(:first-child) > .ant-btn { + border-bottom-right-radius: 4px; + border-top-right-radius: 4px; +} +.ant-btn-group > .ant-btn-group:not(:first-child):not(:last-child) > .ant-btn { + border-radius: 0; +} +.ant-btn-group > .ant-btn-group:first-child:not(:last-child) > .ant-btn:last-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-btn-group > .ant-btn-group:last-child:not(:first-child) > .ant-btn:first-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-btn-background-ghost { + background: transparent !important; + border-color: #fff; + color: #fff; +} +.ant-btn-background-ghost.ant-btn-primary { + color: @primary-color; + background-color: transparent; + border-color: @primary-color; +} +.ant-btn-background-ghost.ant-btn-primary > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary:hover, +.ant-btn-background-ghost.ant-btn-primary:focus { + color: color(~`colorPalette("@{primary-color}", 5)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary:focus > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary:active, +.ant-btn-background-ghost.ant-btn-primary.active { + color: color(~`colorPalette("@{primary-color}", 7)`); + background-color: transparent; + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-btn-background-ghost.ant-btn-primary:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-primary.disabled, +.ant-btn-background-ghost.ant-btn-primary[disabled], +.ant-btn-background-ghost.ant-btn-primary.disabled:hover, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus, +.ant-btn-background-ghost.ant-btn-primary.disabled:active, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active, +.ant-btn-background-ghost.ant-btn-primary.disabled.active, +.ant-btn-background-ghost.ant-btn-primary[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-background-ghost.ant-btn-primary.disabled > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary.disabled.active > a:only-child, +.ant-btn-background-ghost.ant-btn-primary[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-primary.disabled > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled] > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled]:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary.disabled.active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-primary[disabled].active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger { + color: #f5222d; + background-color: transparent; + border-color: #f5222d; +} +.ant-btn-background-ghost.ant-btn-danger > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger:hover, +.ant-btn-background-ghost.ant-btn-danger:focus { + color: #ff4d4f; + background-color: transparent; + border-color: #ff4d4f; +} +.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger:focus > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger:active, +.ant-btn-background-ghost.ant-btn-danger.active { + color: #cf1322; + background-color: transparent; + border-color: #cf1322; +} +.ant-btn-background-ghost.ant-btn-danger:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.active > a:only-child:after { + background: transparent; +} +.ant-btn-background-ghost.ant-btn-danger.disabled, +.ant-btn-background-ghost.ant-btn-danger[disabled], +.ant-btn-background-ghost.ant-btn-danger.disabled:hover, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus, +.ant-btn-background-ghost.ant-btn-danger.disabled:active, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active, +.ant-btn-background-ghost.ant-btn-danger.disabled.active, +.ant-btn-background-ghost.ant-btn-danger[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-btn-background-ghost.ant-btn-danger.disabled > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger.disabled.active > a:only-child, +.ant-btn-background-ghost.ant-btn-danger[disabled].active > a:only-child { + color: currentColor; +} +.ant-btn-background-ghost.ant-btn-danger.disabled > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled] > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:hover > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:focus > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled]:active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger.disabled.active > a:only-child:after, +.ant-btn-background-ghost.ant-btn-danger[disabled].active > a:only-child:after { + background: transparent; +} +.christmas.ant-btn-primary:before { + background: url(data:image/png;base64,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) no-repeat 50% 0; + background-size: 64px; +} +.christmas.ant-btn-primary.ant-btn-lg:before { + background-size: 72px; +} +.christmas.ant-btn-primary.ant-btn-sm:before { + background-size: 56px; +} +.ant-fullcalendar { + color: rgba(0, 0, 0, 0.65); + border-top: 1px solid #d9d9d9; +} +.ant-fullcalendar table { + border-collapse: collapse; + background-color: transparent; +} +.ant-fullcalendar table, +.ant-fullcalendar th, +.ant-fullcalendar td { + border: 0; +} +.ant-fullcalendar-calendar-table { + border-spacing: 0; +} +.ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.65); + border-radius: 2px; + background: transparent; +} +.ant-fullcalendar-value:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-value:active { + background: @primary-color; + color: #fff; +} +.ant-fullcalendar-today .ant-fullcalendar-value, +.ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value { + box-shadow: 0 0 0 1px @primary-color inset; +} +.ant-fullcalendar-selected-day .ant-fullcalendar-value, +.ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value { + background: @primary-color; + color: #fff; +} +.ant-fullcalendar-disabled-cell-first-of-row .ant-fullcalendar-value { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-fullcalendar-disabled-cell-last-of-row .ant-fullcalendar-value { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.ant-fullcalendar-last-month-cell .ant-fullcalendar-value, +.ant-fullcalendar-next-month-btn-day .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.25); +} +.ant-fullcalendar-month-panel-table { + border-collapse: separate; +} +.ant-fullcalendar-fullscreen { + border-top: 0; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date { + color: rgba(0, 0, 0, 0.65); + border-top: 2px solid #e8e8e8; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month:hover, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month:active, +.ant-fullcalendar-fullscreen .ant-fullcalendar-date:active { + background: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-value { + background: transparent; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.65); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-date { + border-top-color: @primary-color; + background: transparent; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-current-cell .ant-fullcalendar-value, +.ant-fullcalendar-fullscreen .ant-fullcalendar-today .ant-fullcalendar-value { + box-shadow: none; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-month, +.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-date { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-month-panel-selected-cell .ant-fullcalendar-value, +.ant-fullcalendar-fullscreen .ant-fullcalendar-selected-day .ant-fullcalendar-value { + color: @primary-color; +} +.ant-fullcalendar-fullscreen .ant-fullcalendar-last-month-cell .ant-fullcalendar-date, +.ant-fullcalendar-fullscreen .ant-fullcalendar-next-month-btn-day .ant-fullcalendar-date { + color: rgba(0, 0, 0, 0.25); +} +.ant-fullcalendar-disabled-cell:not(.ant-fullcalendar-today) .ant-fullcalendar-date, +.ant-fullcalendar-disabled-cell:not(.ant-fullcalendar-today) .ant-fullcalendar-date:hover { + background: transparent; +} +.ant-fullcalendar-disabled-cell .ant-fullcalendar-value { + color: rgba(0, 0, 0, 0.25); + border-radius: 0; +} +.ant-card { + color: rgba(0, 0, 0, 0.65); + background: #fff; + border-radius: 2px; +} +.ant-card-hoverable:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.09); + border-color: rgba(0, 0, 0, 0.09); +} +.ant-card-bordered { + border: 1px solid #e8e8e8; +} +.ant-card-head { + background: transparent; + border-bottom: 1px solid #e8e8e8; + border-radius: 2px 2px 0 0; + color: rgba(0, 0, 0, 0.85); +} +.ant-card-head .ant-tabs { + color: rgba(0, 0, 0, 0.65); +} +.ant-card-head .ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.ant-card-extra { + color: rgba(0, 0, 0, 0.65); +} +.ant-card-grid { + border-radius: 0; + border: 0; + box-shadow: 1px 0 0 0 #e8e8e8, 0 1px 0 0 #e8e8e8, 1px 1px 0 0 #e8e8e8, 1px 0 0 0 #e8e8e8 inset, 0 1px 0 0 #e8e8e8 inset; +} +.ant-card-grid:hover { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-card-cover img { + border-radius: 2px 2px 0 0; +} +.ant-card-actions { + border-top: 1px solid #e8e8e8; + background: #fafafa; +} +.ant-card-actions > li { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-actions > li > span:hover { + color: @primary-color; +} +.ant-card-actions > li > span a { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-actions > li > span a:hover { + color: @primary-color; +} +.ant-card-actions > li:not(:last-child) { + border-right: 1px solid #e8e8e8; +} +.ant-card-type-inner .ant-card-head { + background: #fafafa; +} +.ant-card-meta-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-card-meta-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-card-loading-block { + border-radius: 2px; + background: linear-gradient(90deg, rgba(207, 216, 220, 0.2), rgba(207, 216, 220, 0.4), rgba(207, 216, 220, 0.2)); + background-size: 600% 600%; +} +.ant-carousel { + color: rgba(0, 0, 0, 0.65); +} +.ant-carousel .slick-slider { + -webkit-tap-highlight-color: transparent; +} +.ant-carousel .slick-vertical .slick-slide { + border: 1px solid transparent; +} +.ant-carousel .slick-prev, +.ant-carousel .slick-next { + background: transparent; + color: transparent; + border: 0; +} +.ant-carousel .slick-prev:hover, +.ant-carousel .slick-next:hover, +.ant-carousel .slick-prev:focus, +.ant-carousel .slick-next:focus { + background: transparent; + color: transparent; +} +.ant-carousel .slick-dots li button { + border: 0; + background: #fff; + border-radius: 1px; + color: transparent; +} +.ant-carousel .slick-dots li.slick-active button { + background: #fff; +} +.ant-cascader { + color: rgba(0, 0, 0, 0.65); +} +.ant-cascader-input.ant-input { + background-color: transparent !important; +} +.ant-cascader-picker { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-radius: 4px; +} +.ant-cascader-picker-with-value .ant-cascader-picker-label { + color: transparent; +} +.ant-cascader-picker-disabled { + background: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker:focus .ant-cascader-input { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-cascader-picker-show-search.ant-cascader-picker-focused { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker-clear { + background: #fff; + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-picker-clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-cascader-picker-arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-menus { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-cascader-menu { + border-right: 1px solid #e8e8e8; +} +.ant-cascader-menu:first-child { + border-radius: 4px 0 0 4px; +} +.ant-cascader-menu:last-child { + border-right-color: transparent; + border-radius: 0 4px 4px 0; +} +.ant-cascader-menu:only-child { + border-radius: 4px; +} +.ant-cascader-menu-item:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-cascader-menu-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-cascader-menu-item-disabled:hover { + background: transparent; +} +.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled), +.ant-cascader-menu-item-active:not(.ant-cascader-menu-item-disabled):hover { + background: #f5f5f5; +} +.ant-cascader-menu-item-expand .ant-cascader-menu-item-expand-icon, +.ant-cascader-menu-item-expand .ant-cascader-menu-item-loading-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-cascader-menu-item .ant-cascader-menu-item-keyword { + color: #f5222d; +} +.ant-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-checkbox-wrapper:hover .ant-checkbox-inner, +.ant-checkbox:hover .ant-checkbox-inner, +.ant-checkbox-input:focus + .ant-checkbox-inner { + border-color: @primary-color; +} +.ant-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-checkbox-indeterminate .ant-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-checkbox-indeterminate.ant-checkbox-disabled .ant-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-checked .ant-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-checkbox-checked .ant-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-checkbox-disabled.ant-checkbox-checked .ant-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-disabled .ant-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-checkbox-disabled .ant-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-collapse { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border-radius: 4px; + border: 1px solid #d9d9d9; + border-bottom: 0; +} +.ant-collapse > .ant-collapse-item { + border-bottom: 1px solid #d9d9d9; +} +.ant-collapse > .ant-collapse-item:last-child, +.ant-collapse > .ant-collapse-item:last-child > .ant-collapse-header { + border-radius: 0 0 4px 4px; +} +.ant-collapse > .ant-collapse-item > .ant-collapse-header { + color: rgba(0, 0, 0, 0.85); +} +.ant-collapse-content { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + border-top: 1px solid #d9d9d9; +} +.ant-collapse-item:last-child > .ant-collapse-content { + border-radius: 0 0 4px 4px; +} +.ant-collapse-borderless { + background-color: #fff; + border: 0; +} +.ant-collapse-borderless > .ant-collapse-item { + border-bottom: 1px solid #d9d9d9; +} +.ant-collapse-borderless > .ant-collapse-item:last-child, +.ant-collapse-borderless > .ant-collapse-item:last-child .ant-collapse-header { + border-radius: 0; +} +.ant-collapse-borderless > .ant-collapse-item > .ant-collapse-content { + background-color: transparent; + border-top: 0; +} +.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header, +.ant-collapse .ant-collapse-item-disabled > .ant-collapse-header > .arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-picker-container { + color: rgba(0, 0, 0, 0.65); +} +.ant-calendar-picker { + color: rgba(0, 0, 0, 0.65); +} +.ant-calendar-picker:hover .ant-calendar-picker-input:not(.ant-input-disabled) { + border-color: @primary-color; +} +.ant-calendar-picker:focus .ant-calendar-picker-input:not(.ant-input-disabled) { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-calendar-picker-clear { + color: rgba(0, 0, 0, 0.25); + background: #fff; +} +.ant-calendar-picker-clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-picker-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar { + border: 1px solid #fff; + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-calendar-input-wrap { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-input { + border: 0; + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-calendar-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-header .ant-calendar-century-select, +.ant-calendar-header .ant-calendar-decade-select, +.ant-calendar-header .ant-calendar-year-select, +.ant-calendar-header .ant-calendar-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-header .ant-calendar-prev-century-btn, +.ant-calendar-header .ant-calendar-next-century-btn, +.ant-calendar-header .ant-calendar-prev-decade-btn, +.ant-calendar-header .ant-calendar-next-decade-btn, +.ant-calendar-header .ant-calendar-prev-month-btn, +.ant-calendar-header .ant-calendar-next-month-btn, +.ant-calendar-header .ant-calendar-prev-year-btn, +.ant-calendar-header .ant-calendar-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar table { + border-collapse: collapse; + background-color: transparent; +} +.ant-calendar table, +.ant-calendar th, +.ant-calendar td { + border: 0; +} +.ant-calendar-calendar-table { + border-spacing: 0; +} +.ant-calendar-date { + color: rgba(0, 0, 0, 0.65); + border-radius: 2px; + border: 1px solid transparent; + background: transparent; +} +.ant-calendar-date:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-date:active { + color: #fff; + background: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-today .ant-calendar-date { + border-color: @primary-color; + color: @primary-color; +} +.ant-calendar-last-month-cell .ant-calendar-date, +.ant-calendar-next-month-btn-day .ant-calendar-date { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-selected-day .ant-calendar-date { + background: #d1e9ff; +} +.ant-calendar-selected-date .ant-calendar-date, +.ant-calendar-selected-start-date .ant-calendar-date, +.ant-calendar-selected-end-date .ant-calendar-date { + background: @primary-color; + color: #fff; + border: 1px solid transparent; +} +.ant-calendar-selected-date .ant-calendar-date:hover, +.ant-calendar-selected-start-date .ant-calendar-date:hover, +.ant-calendar-selected-end-date .ant-calendar-date:hover { + background: @primary-color; +} +.ant-calendar-disabled-cell .ant-calendar-date { + color: #bcbcbc; + background: #f5f5f5; + border-radius: 0; + border: 1px solid transparent; +} +.ant-calendar-disabled-cell .ant-calendar-date:hover { + background: #f5f5f5; +} +.ant-calendar-disabled-cell.ant-calendar-today .ant-calendar-date:before { + border: 1px solid #bcbcbc; + border-radius: 2px; +} +.ant-calendar-disabled-cell-first-of-row .ant-calendar-date { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-calendar-disabled-cell-last-of-row .ant-calendar-date { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; +} +.ant-calendar-footer { + border-top: 1px solid #e8e8e8; +} +.ant-calendar-footer:empty { + border-top: 0; +} +.ant-calendar .ant-calendar-today-btn-disabled, +.ant-calendar .ant-calendar-clear-btn-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar .ant-calendar-clear-btn:after { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar .ant-calendar-clear-btn:hover:after { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar .ant-calendar-ok-btn { + background-image: none; + border: 1px solid transparent; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.015); + color: #fff; + background-color: @primary-color; + border-color: @primary-color; + box-shadow: 0 2px 0 rgba(0, 0, 0, 0.035); + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn:not([disabled]):active { + box-shadow: none; +} +.ant-calendar .ant-calendar-ok-btn-lg { + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn-sm { + border-radius: 4px; +} +.ant-calendar .ant-calendar-ok-btn > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn:hover, +.ant-calendar .ant-calendar-ok-btn:focus { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 5)`); + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar .ant-calendar-ok-btn:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn:focus > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn:focus > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn:active, +.ant-calendar .ant-calendar-ok-btn.active { + color: #fff; + background-color: color(~`colorPalette("@{primary-color}", 7)`); + border-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-calendar .ant-calendar-ok-btn:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn.active > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.active > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn.disabled, +.ant-calendar .ant-calendar-ok-btn[disabled], +.ant-calendar .ant-calendar-ok-btn.disabled:hover, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover, +.ant-calendar .ant-calendar-ok-btn.disabled:focus, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus, +.ant-calendar .ant-calendar-ok-btn.disabled:active, +.ant-calendar .ant-calendar-ok-btn[disabled]:active, +.ant-calendar .ant-calendar-ok-btn.disabled.active, +.ant-calendar .ant-calendar-ok-btn[disabled].active { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-calendar .ant-calendar-ok-btn.disabled > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled] > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:focus > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled]:active > a:only-child, +.ant-calendar .ant-calendar-ok-btn.disabled.active > a:only-child, +.ant-calendar .ant-calendar-ok-btn[disabled].active > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn.disabled > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled] > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:hover > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:focus > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:focus > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled]:active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn.disabled.active > a:only-child:after, +.ant-calendar .ant-calendar-ok-btn[disabled].active > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn-disabled { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-calendar .ant-calendar-ok-btn-disabled > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn-disabled > a:only-child:after { + background: transparent; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #f5f5f5; + border-color: #d9d9d9; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover > a:only-child { + color: currentColor; +} +.ant-calendar .ant-calendar-ok-btn-disabled:hover > a:only-child:after { + background: transparent; +} +.ant-calendar-range-picker-input { + background-color: transparent; + border: 0; +} +.ant-calendar-range-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range-picker-separator { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-range-left .ant-calendar-time-picker-inner { + border-right: 1px solid #e8e8e8; +} +.ant-calendar-range-right .ant-calendar-time-picker-inner { + border-left: 1px solid #e8e8e8; +} +.ant-calendar-range-middle { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-range .ant-calendar-input, +.ant-calendar-range .ant-calendar-time-picker-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; + border: 0; + box-shadow: none; +} +.ant-calendar-range .ant-calendar-input::-moz-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input:-ms-input-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input::-webkit-input-placeholder, +.ant-calendar-range .ant-calendar-time-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-calendar-range .ant-calendar-input:hover, +.ant-calendar-range .ant-calendar-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input:focus, +.ant-calendar-range .ant-calendar-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input-disabled, +.ant-calendar-range .ant-calendar-time-picker-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-range .ant-calendar-input-disabled:hover, +.ant-calendar-range .ant-calendar-time-picker-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-calendar-range .ant-calendar-input:focus, +.ant-calendar-range .ant-calendar-time-picker-input:focus { + box-shadow: none; +} +.ant-calendar-range .ant-calendar-in-range-cell { + border-radius: 0; +} +.ant-calendar-range .ant-calendar-in-range-cell:before { + background: color(~`colorPalette("@{primary-color}", 1)`); + border-radius: 0; + border: 0; +} +.ant-calendar-range .ant-calendar-header, +.ant-calendar-range .ant-calendar-month-panel-header, +.ant-calendar-range .ant-calendar-year-panel-header { + border-bottom: 0; +} +.ant-calendar-range .ant-calendar-body, +.ant-calendar-range .ant-calendar-month-panel-body, +.ant-calendar-range .ant-calendar-year-panel-body { + border-top: 1px solid #e8e8e8; +} +.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-inner { + background: none; +} +.ant-calendar-range.ant-calendar-time .ant-calendar-time-picker-combobox { + background-color: #fff; + border-top: 1px solid #e8e8e8; +} +.ant-calendar-range.ant-calendar-show-time-picker .ant-calendar-body { + border-top-color: transparent; +} +.ant-calendar-time-picker { + background-color: #fff; +} +.ant-calendar-time-picker-inner { + background-color: #fff; + background-clip: padding-box; +} +.ant-calendar-time-picker-select { + border-right: 1px solid #e8e8e8; +} +.ant-calendar-time-picker-select:first-child { + border-left: 0; +} +.ant-calendar-time-picker-select:last-child { + border-right: 0; +} +.ant-calendar-time-picker-select li:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +li.ant-calendar-time-picker-select-option-selected { + background: #f5f5f5; +} +li.ant-calendar-time-picker-select-option-disabled { + color: rgba(0, 0, 0, 0.25); +} +li.ant-calendar-time-picker-select-option-disabled:hover { + background: transparent; +} +.ant-calendar-time .ant-calendar-day-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-time .ant-calendar-footer .ant-calendar-time-picker-btn-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-month-panel { + border-radius: 4px; + background: #fff; +} +.ant-calendar-month-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-month-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-month-panel-header .ant-calendar-month-panel-century-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-decade-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-year-select, +.ant-calendar-month-panel-header .ant-calendar-month-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-century-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-century-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-decade-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-decade-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-month-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-month-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-prev-year-btn, +.ant-calendar-month-panel-header .ant-calendar-month-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-month-panel-table { + border-collapse: separate; +} +.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month { + background: @primary-color; + color: #fff; +} +.ant-calendar-month-panel-selected-cell .ant-calendar-month-panel-month:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-month-panel-cell-disabled .ant-calendar-month-panel-month, +.ant-calendar-month-panel-cell-disabled .ant-calendar-month-panel-month:hover { + color: #bcbcbc; + background: #f5f5f5; +} +.ant-calendar-month-panel-month { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-month-panel-month:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-year-panel { + border-radius: 4px; + background: #fff; +} +.ant-calendar-year-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-year-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-year-panel-header .ant-calendar-year-panel-century-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-decade-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-year-select, +.ant-calendar-year-panel-header .ant-calendar-year-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-century-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-century-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-decade-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-decade-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-month-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-month-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-prev-year-btn, +.ant-calendar-year-panel-header .ant-calendar-year-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-year-panel-table { + border-collapse: separate; +} +.ant-calendar-year-panel-year { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-year-panel-year:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year { + background: @primary-color; + color: #fff; +} +.ant-calendar-year-panel-selected-cell .ant-calendar-year-panel-year:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-year-panel-last-decade-cell .ant-calendar-year-panel-year, +.ant-calendar-year-panel-next-decade-cell .ant-calendar-year-panel-year { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-decade-panel { + background: #fff; + border-radius: 4px; +} +.ant-calendar-decade-panel-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-calendar-decade-panel-header a:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-century-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-decade-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-year-select, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-month-select { + color: rgba(0, 0, 0, 0.85); +} +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-century-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-century-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-decade-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-decade-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-month-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-month-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-prev-year-btn, +.ant-calendar-decade-panel-header .ant-calendar-decade-panel-next-year-btn { + color: rgba(0, 0, 0, 0.45); +} +.ant-calendar-decade-panel-table { + border-collapse: separate; +} +.ant-calendar-decade-panel-decade { + color: rgba(0, 0, 0, 0.65); + background: transparent; + border-radius: 2px; +} +.ant-calendar-decade-panel-decade:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade { + background: @primary-color; + color: #fff; +} +.ant-calendar-decade-panel-selected-cell .ant-calendar-decade-panel-decade:hover { + background: @primary-color; + color: #fff; +} +.ant-calendar-decade-panel-last-century-cell .ant-calendar-decade-panel-decade, +.ant-calendar-decade-panel-next-century-cell .ant-calendar-decade-panel-decade { + color: rgba(0, 0, 0, 0.25); +} +.ant-calendar-week-number .ant-calendar-body tr:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-calendar-week-number .ant-calendar-body tr.ant-calendar-active-week { + background: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-calendar-week-number .ant-calendar-body tr .ant-calendar-selected-day .ant-calendar-date, +.ant-calendar-week-number .ant-calendar-body tr .ant-calendar-selected-day:hover .ant-calendar-date { + background: transparent; + color: rgba(0, 0, 0, 0.65); +} +.ant-divider { + color: rgba(0, 0, 0, 0.65); + background: #e8e8e8; +} +.ant-divider-horizontal.ant-divider-with-text, +.ant-divider-horizontal.ant-divider-with-text-left, +.ant-divider-horizontal.ant-divider-with-text-right { + background: transparent; + color: rgba(0, 0, 0, 0.85); +} +.ant-divider-horizontal.ant-divider-with-text:before, +.ant-divider-horizontal.ant-divider-with-text-left:before, +.ant-divider-horizontal.ant-divider-with-text-right:before, +.ant-divider-horizontal.ant-divider-with-text:after, +.ant-divider-horizontal.ant-divider-with-text-left:after, +.ant-divider-horizontal.ant-divider-with-text-right:after { + border-top: 1px solid #e8e8e8; +} +.ant-divider-dashed { + background: none; + border-top: 1px dashed #e8e8e8; +} +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed { + border-top: 0; +} +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:before, +.ant-divider-horizontal.ant-divider-with-text.ant-divider-dashed:after, +.ant-divider-horizontal.ant-divider-with-text-left.ant-divider-dashed:after, +.ant-divider-horizontal.ant-divider-with-text-right.ant-divider-dashed:after { + border-style: dashed none none; +} +.ant-drawer-left.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 2px 0 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-right.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: -2px 0 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-top.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-bottom.ant-drawer-open .ant-drawer-content-wrapper { + box-shadow: 0 -2px 8px rgba(0, 0, 0, 0.15); +} +.ant-drawer-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-drawer-content { + background-color: #fff; + border: 0; + background-clip: padding-box; +} +.ant-drawer-close { + border: 0; + background: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-drawer-close:focus, +.ant-drawer-close:hover { + color: #444; +} +.ant-drawer-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-drawer-mask { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-drawer-open-content { + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} +.ant-dropdown { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu { + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-dropdown-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-dropdown-menu-item, +.ant-dropdown-menu-submenu-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu-item > a, +.ant-dropdown-menu-submenu-title > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-dropdown-menu-item-selected, +.ant-dropdown-menu-submenu-title-selected, +.ant-dropdown-menu-item-selected > a, +.ant-dropdown-menu-submenu-title-selected > a { + color: @primary-color; + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-dropdown-menu-item:hover, +.ant-dropdown-menu-submenu-title:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-dropdown-menu-item-disabled, +.ant-dropdown-menu-submenu-title-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-dropdown-menu-item-disabled:hover, +.ant-dropdown-menu-submenu-title-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-dropdown-menu-item-divider, +.ant-dropdown-menu-submenu-title-divider { + background-color: #e8e8e8; +} +.ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow-icon, +.ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title, +.ant-dropdown-menu-submenu.ant-dropdown-menu-submenu-disabled .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-dropdown-menu-dark, +.ant-dropdown-menu-dark .ant-dropdown-menu { + background: #001529; +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a { + color: rgba(255, 255, 255, 0.65); +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item .ant-dropdown-menu-submenu-arrow:after, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title .ant-dropdown-menu-submenu-arrow:after, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a .ant-dropdown-menu-submenu-arrow:after { + color: rgba(255, 255, 255, 0.65); +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-submenu-title:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-item > a:hover { + color: #fff; + background: transparent; +} +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected, +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected:hover, +.ant-dropdown-menu-dark .ant-dropdown-menu-item-selected > a { + background: @primary-color; + color: #fff; +} +.ant-form { + color: rgba(0, 0, 0, 0.65); +} +.ant-form legend { + color: rgba(0, 0, 0, 0.45); + border: 0; + border-bottom: 1px solid #d9d9d9; +} +.ant-form output { + color: rgba(0, 0, 0, 0.65); +} +.ant-form-item-required:before { + color: #f5222d; +} +.ant-form-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-form-item-label label { + color: rgba(0, 0, 0, 0.85); +} +.ant-form-explain, +.ant-form-extra { + color: rgba(0, 0, 0, 0.45); +} +form .ant-upload { + background: transparent; +} +.ant-input-group-wrap .ant-select-selection { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group-wrap .ant-select-selection:hover { + border-color: #d9d9d9; +} +.ant-input-group-wrap .ant-select-selection--single { + background-color: #eee; +} +.ant-input-group-wrap .ant-select-open .ant-select-selection { + border-color: #d9d9d9; + box-shadow: none; +} +.has-success.has-feedback .ant-form-item-children-icon { + color: #52c41a; +} +.has-warning .ant-form-explain, +.has-warning .ant-form-split { + color: #faad14; +} +.has-warning .ant-input, +.has-warning .ant-input:hover { + border-color: #faad14; +} +.has-warning .ant-input:focus { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input:not([disabled]):hover { + border-color: #faad14; +} +.has-warning .ant-calendar-picker-open .ant-calendar-picker-input { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input-prefix { + color: #faad14; +} +.has-warning .ant-input-group-addon { + color: #faad14; + border-color: #faad14; + background-color: #fff; +} +.has-warning .has-feedback { + color: #faad14; +} +.has-warning.has-feedback .ant-form-item-children-icon { + color: #faad14; +} +.has-warning .ant-select-selection { + border-color: #faad14; +} +.has-warning .ant-select-open .ant-select-selection, +.has-warning .ant-select-focused .ant-select-selection { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-calendar-picker-icon:after, +.has-warning .ant-time-picker-icon:after, +.has-warning .ant-picker-icon:after, +.has-warning .ant-select-arrow, +.has-warning .ant-cascader-picker-arrow { + color: #faad14; +} +.has-warning .ant-input-number, +.has-warning .ant-time-picker-input { + border-color: #faad14; +} +.has-warning .ant-input-number-focused, +.has-warning .ant-time-picker-input-focused, +.has-warning .ant-input-number:focus, +.has-warning .ant-time-picker-input:focus { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-warning .ant-input-number:not([disabled]):hover, +.has-warning .ant-time-picker-input:not([disabled]):hover { + border-color: #faad14; +} +.has-warning .ant-cascader-picker:focus .ant-cascader-input { + border-color: #ffc53d; + box-shadow: 0 0 0 2px rgba(250, 173, 20, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-form-explain, +.has-error .ant-form-split { + color: #f5222d; +} +.has-error .ant-input, +.has-error .ant-input:hover { + border-color: #f5222d; +} +.has-error .ant-input:focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-calendar-picker-open .ant-calendar-picker-input { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input-prefix { + color: #f5222d; +} +.has-error .ant-input-group-addon { + color: #f5222d; + border-color: #f5222d; + background-color: #fff; +} +.has-error .has-feedback { + color: #f5222d; +} +.has-error.has-feedback .ant-form-item-children-icon { + color: #f5222d; +} +.has-error .ant-select-selection { + border-color: #f5222d; +} +.has-error .ant-select-open .ant-select-selection, +.has-error .ant-select-focused .ant-select-selection { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-select.ant-select-auto-complete .ant-input:focus { + border-color: #f5222d; +} +.has-error .ant-input-group-addon .ant-select-selection { + border-color: transparent; + box-shadow: none; +} +.has-error .ant-calendar-picker-icon:after, +.has-error .ant-time-picker-icon:after, +.has-error .ant-picker-icon:after, +.has-error .ant-select-arrow, +.has-error .ant-cascader-picker-arrow { + color: #f5222d; +} +.has-error .ant-input-number, +.has-error .ant-time-picker-input { + border-color: #f5222d; +} +.has-error .ant-input-number-focused, +.has-error .ant-time-picker-input-focused, +.has-error .ant-input-number:focus, +.has-error .ant-time-picker-input:focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-input-number:not([disabled]):hover, +.has-error .ant-time-picker-input:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-mention-wrapper .ant-mention-editor, +.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):hover { + border-color: #f5222d; +} +.has-error .ant-mention-wrapper.ant-mention-active:not([disabled]) .ant-mention-editor, +.has-error .ant-mention-wrapper .ant-mention-editor:not([disabled]):focus { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.has-error .ant-cascader-picker:focus .ant-cascader-input { + border-color: #ff4d4f; + box-shadow: 0 0 0 2px rgba(245, 34, 45, 0.2); + border-right-width: 1px !important; +} +.is-validating.has-feedback .ant-form-item-children-icon { + color: @primary-color; +} +.ant-input-number { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input-number::-moz-placeholder { + color: #bfbfbf; +} +.ant-input-number:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input-number::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input-number:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-number:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-number-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-number-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-number-handler { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-number-handler:active { + background: #f4f4f4; +} +.ant-input-number-handler:hover .ant-input-number-handler-up-inner, +.ant-input-number-handler:hover .ant-input-number-handler-down-inner { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-input-number-handler-up-inner, +.ant-input-number-handler-down-inner { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-number:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-number-focused { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-number-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-number-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-number-input { + background-color: transparent; + border: 0; + border-radius: 4px; +} +.ant-input-number-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-input-number-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input-number-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input-number-handler-wrap { + border-left: 1px solid #d9d9d9; + background: #fff; + border-radius: 0 4px 4px 0; +} +.ant-input-number-handler-down { + border-top: 1px solid #d9d9d9; +} +.ant-input-number-handler-up-disabled:hover .ant-input-number-handler-up-inner, +.ant-input-number-handler-down-disabled:hover .ant-input-number-handler-down-inner { + color: rgba(0, 0, 0, 0.25); +} +.ant-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-input-group { + color: rgba(0, 0, 0, 0.65); + border-collapse: separate; + border-spacing: 0; +} +.ant-input-group-addon:not(:first-child):not(:last-child), +.ant-input-group-wrap:not(:first-child):not(:last-child), +.ant-input-group > .ant-input:not(:first-child):not(:last-child) { + border-radius: 0; +} +.ant-input-group .ant-input:focus { + border-right-width: 1px; +} +.ant-input-group .ant-input:hover { + border-right-width: 1px; +} +.ant-input-group-addon { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-input-group-addon .ant-select .ant-select-selection { + background-color: inherit; + border: 1px solid transparent; + box-shadow: none; +} +.ant-input-group-addon .ant-select-open .ant-select-selection, +.ant-input-group-addon .ant-select-focused .ant-select-selection { + color: @primary-color; +} +.ant-input-group > .ant-input:first-child, +.ant-input-group-addon:first-child { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group > .ant-input:first-child .ant-select .ant-select-selection, +.ant-input-group-addon:first-child .ant-select .ant-select-selection { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group > .ant-input-affix-wrapper:not(:first-child) .ant-input { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group > .ant-input-affix-wrapper:not(:last-child) .ant-input { + border-bottom-right-radius: 0; + border-top-right-radius: 0; +} +.ant-input-group-addon:first-child { + border-right: 0; +} +.ant-input-group-addon:last-child { + border-left: 0; +} +.ant-input-group > .ant-input:last-child, +.ant-input-group-addon:last-child { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group > .ant-input:last-child .ant-select .ant-select-selection, +.ant-input-group-addon:last-child .ant-select .ant-select-selection { + border-bottom-left-radius: 0; + border-top-left-radius: 0; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child), +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child), +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child) { + border-right-width: 1px; + border-right-color: transparent; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):hover, +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):hover, +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact-addon:not(:first-child):not(:last-child):focus, +.ant-input-group.ant-input-group-compact-wrap:not(:first-child):not(:last-child):focus, +.ant-input-group.ant-input-group-compact > .ant-input:not(:first-child):not(:last-child):focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > * { + border-radius: 0; + border-right-width: 0; +} +.ant-input-group.ant-input-group-compact > span:not(:last-child) > .ant-input { + border-right-width: 0; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input { + border-radius: 0; + border-right-width: 1px; + border-right-color: transparent; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection:hover, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor:hover, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > .ant-select > .ant-select-selection:focus, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper .ant-mention-editor:focus, +.ant-input-group.ant-input-group-compact > .ant-time-picker .ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:first-child, +.ant-input-group.ant-input-group-compact > .ant-select:first-child > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:first-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:first-child .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker:first-child .ant-time-picker-input { + border-top-left-radius: 4px; + border-bottom-left-radius: 4px; +} +.ant-input-group.ant-input-group-compact > *:last-child, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input { + border-top-right-radius: 4px; + border-bottom-right-radius: 4px; + border-right-width: 1px; + border-right-color: #d9d9d9; +} +.ant-input-group.ant-input-group-compact > *:last-child:hover, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:hover, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:hover, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:hover, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:last-child:focus, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:focus, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:focus, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:focus, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-group.ant-input-group-compact > *:last-child:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-select:last-child > .ant-select-selection:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-calendar-picker:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-select-auto-complete:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-cascader-picker-focused:last-child .ant-input:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-mention-wrapper:last-child .ant-mention-editor:focus .ant-cascader-input, +.ant-input-group.ant-input-group-compact > .ant-time-picker:last-child .ant-time-picker-input:focus .ant-cascader-input { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-input-affix-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-input-affix-wrapper:hover .ant-input:not(.ant-input-disabled) { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-input-affix-wrapper .ant-input-prefix, +.ant-input-affix-wrapper .ant-input-suffix { + color: rgba(0, 0, 0, 0.65); +} +.ant-input-search-icon { + color: rgba(0, 0, 0, 0.45); +} +.ant-input-search-icon:hover { + color: #333; +} +.ant-input-search > .ant-input-suffix > .ant-input-search-button { + border-top-left-radius: 0; + border-bottom-left-radius: 0; +} +.ant-layout { + background: #f0f2f5; +} +.ant-layout-header { + background: #001529; +} +.ant-layout-footer { + background: #f0f2f5; + color: rgba(0, 0, 0, 0.65); +} +.ant-layout-sider { + background: #001529; +} +.ant-layout-sider-trigger { + color: #fff; + background: #002140; +} +.ant-layout-sider-zero-width-trigger { + background: #001529; + color: #fff; + border-radius: 0 4px 4px 0; +} +.ant-layout-sider-zero-width-trigger:hover { + background: #192c3e; +} +.ant-layout-sider-light { + background: #fff; +} +.ant-layout-sider-light .ant-layout-sider-trigger { + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-layout-sider-light .ant-layout-sider-zero-width-trigger { + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-list { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-empty-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-meta-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-item-meta-title > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-item-meta-title > a:hover { + color: @primary-color; +} +.ant-list-item-meta-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-action > li { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-item-action-split { + background-color: #e8e8e8; +} +.ant-list-empty { + color: rgba(0, 0, 0, 0.45); +} +.ant-list-split .ant-list-item { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-split .ant-list-item:last-child { + border-bottom: none; +} +.ant-list-split .ant-list-header { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-something-after-last-item .ant-spin-container > .ant-list-item:last-child { + border-bottom: 1px solid #e8e8e8; +} +.ant-list-vertical .ant-list-item-meta-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-list-vertical .ant-list-item-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-list-grid .ant-list-item { + border-bottom: none; +} +.ant-list-bordered { + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-list-bordered .ant-list-item { + border-bottom: 1px solid #e8e8e8; +} +.ant-mention-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-wrapper .ant-mention-editor { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-mention-wrapper .ant-mention-editor::-moz-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-mention-wrapper .ant-mention-editor:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-mention-wrapper .ant-mention-editor:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-mention-wrapper .ant-mention-editor-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-wrapper .ant-mention-editor-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-mention-wrapper.ant-mention-active:not(.disabled) .ant-mention-editor { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-mention-wrapper.disabled .ant-mention-editor { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-wrapper.disabled .ant-mention-editor:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-mention-wrapper .public-DraftEditorPlaceholder-root .public-DraftEditorPlaceholder-inner { + color: #bfbfbf; +} +.ant-mention-dropdown { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + border-radius: 4px; +} +.ant-mention-dropdown-notfound.ant-mention-dropdown-item { + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-dropdown-notfound.ant-mention-dropdown-item .anticon-loading { + color: @primary-color; +} +.ant-mention-dropdown-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-dropdown-item:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-mention-dropdown-item.focus, +.ant-mention-dropdown-item-active { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-mention-dropdown-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-mention-dropdown-item-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-mention-dropdown-item-selected, +.ant-mention-dropdown-item-selected:hover { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.65); +} +.ant-mention-dropdown-item-divider { + background-color: #e8e8e8; +} +.ant-menu { + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + color: rgba(0, 0, 0, 0.65); + background: #fff; +} +.ant-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-menu-item:active, +.ant-menu-submenu-title:active { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-menu-item > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-menu-item > a:hover { + color: @primary-color; +} +.ant-menu-item > a:before { + background-color: transparent; +} +.ant-menu-item-divider { + background-color: #e8e8e8; +} +.ant-menu-item:hover, +.ant-menu-item-active, +.ant-menu:not(.ant-menu-inline) .ant-menu-submenu-open, +.ant-menu-submenu-active, +.ant-menu-submenu-title:hover { + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item:hover, +.ant-menu-horizontal > .ant-menu-item-active, +.ant-menu-horizontal > .ant-menu-submenu .ant-menu-submenu-title:hover { + background-color: transparent; +} +.ant-menu-item-selected { + color: @primary-color; +} +.ant-menu-item-selected > a, +.ant-menu-item-selected > a:hover { + color: @primary-color; +} +.ant-menu:not(.ant-menu-horizontal) .ant-menu-item-selected { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-menu-inline, +.ant-menu-vertical, +.ant-menu-vertical-left { + border-right: 1px solid #e8e8e8; +} +.ant-menu-vertical-right { + border-left: 1px solid #e8e8e8; +} +.ant-menu-vertical.ant-menu-sub, +.ant-menu-vertical-left.ant-menu-sub, +.ant-menu-vertical-right.ant-menu-sub { + border-right: 0; +} +.ant-menu-vertical.ant-menu-sub .ant-menu-item, +.ant-menu-vertical-left.ant-menu-sub .ant-menu-item, +.ant-menu-vertical-right.ant-menu-sub .ant-menu-item { + border-right: 0; +} +.ant-menu-vertical.ant-menu-sub .ant-menu-item:after, +.ant-menu-vertical-left.ant-menu-sub .ant-menu-item:after, +.ant-menu-vertical-right.ant-menu-sub .ant-menu-item:after { + border-right: 0; +} +.ant-menu > .ant-menu-item-divider { + background-color: #e8e8e8; +} +.ant-menu-submenu-popup { + border-radius: 4px; +} +.ant-menu-submenu > .ant-menu { + background-color: #fff; + border-radius: 4px; +} +.ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-submenu-inline > .ant-menu-submenu-title .ant-menu-submenu-arrow:after { + background: #fff; + background-image: linear-gradient(to right, rgba(0, 0, 0, 0.65), rgba(0, 0, 0, 0.65)); + border-radius: 2px; +} +.ant-menu-submenu-vertical > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-inline > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:after, +.ant-menu-submenu-vertical > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-left > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-vertical-right > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before, +.ant-menu-submenu-inline > .ant-menu-submenu-title:hover .ant-menu-submenu-arrow:before { + background: linear-gradient(to right, @primary-color, @primary-color); +} +.ant-menu-vertical .ant-menu-submenu-selected, +.ant-menu-vertical-left .ant-menu-submenu-selected, +.ant-menu-vertical-right .ant-menu-submenu-selected { + color: @primary-color; +} +.ant-menu-vertical .ant-menu-submenu-selected > a, +.ant-menu-vertical-left .ant-menu-submenu-selected > a, +.ant-menu-vertical-right .ant-menu-submenu-selected > a { + color: @primary-color; +} +.ant-menu-horizontal { + border: 0; + border-bottom: 1px solid #e8e8e8; + box-shadow: none; +} +.ant-menu-horizontal > .ant-menu-item, +.ant-menu-horizontal > .ant-menu-submenu { + border-bottom: 2px solid transparent; +} +.ant-menu-horizontal > .ant-menu-item:hover, +.ant-menu-horizontal > .ant-menu-submenu:hover, +.ant-menu-horizontal > .ant-menu-item-active, +.ant-menu-horizontal > .ant-menu-submenu-active, +.ant-menu-horizontal > .ant-menu-item-open, +.ant-menu-horizontal > .ant-menu-submenu-open, +.ant-menu-horizontal > .ant-menu-item-selected, +.ant-menu-horizontal > .ant-menu-submenu-selected { + border-bottom: 2px solid @primary-color; + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item > a { + color: rgba(0, 0, 0, 0.65); +} +.ant-menu-horizontal > .ant-menu-item > a:hover { + color: @primary-color; +} +.ant-menu-horizontal > .ant-menu-item-selected > a { + color: @primary-color; +} +.ant-menu-vertical .ant-menu-item:after, +.ant-menu-vertical-left .ant-menu-item:after, +.ant-menu-vertical-right .ant-menu-item:after, +.ant-menu-inline .ant-menu-item:after { + border-right: 3px solid @primary-color; +} +.ant-menu-inline-collapsed-tooltip a { + color: rgba(255, 255, 255, 0.85); +} +.ant-menu-root.ant-menu-vertical, +.ant-menu-root.ant-menu-vertical-left, +.ant-menu-root.ant-menu-vertical-right, +.ant-menu-root.ant-menu-inline { + box-shadow: none; +} +.ant-menu-sub.ant-menu-inline { + border: 0; + box-shadow: none; + border-radius: 0; +} +.ant-menu-item-disabled, +.ant-menu-submenu-disabled { + color: rgba(0, 0, 0, 0.25) !important; + background: none; + border-color: transparent !important; +} +.ant-menu-item-disabled > a, +.ant-menu-submenu-disabled > a { + color: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-item-disabled > .ant-menu-submenu-title, +.ant-menu-submenu-disabled > .ant-menu-submenu-title { + color: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after { + background: rgba(0, 0, 0, 0.25) !important; +} +.ant-menu-dark, +.ant-menu-dark .ant-menu-sub { + color: rgba(255, 255, 255, 0.65); + background: #001529; +} +.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-sub .ant-menu-submenu-title .ant-menu-submenu-arrow:before { + background: #fff; +} +.ant-menu-dark.ant-menu-submenu-popup { + background: transparent; +} +.ant-menu-dark .ant-menu-inline.ant-menu-sub { + background: #000c17; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.45) inset; +} +.ant-menu-dark.ant-menu-horizontal { + border-bottom: 0; +} +.ant-menu-dark.ant-menu-horizontal > .ant-menu-item, +.ant-menu-dark.ant-menu-horizontal > .ant-menu-submenu { + border-color: #001529; + border-bottom: 0; +} +.ant-menu-dark .ant-menu-item, +.ant-menu-dark .ant-menu-item-group-title, +.ant-menu-dark .ant-menu-item > a { + color: rgba(255, 255, 255, 0.65); +} +.ant-menu-dark.ant-menu-inline, +.ant-menu-dark.ant-menu-vertical, +.ant-menu-dark.ant-menu-vertical-left, +.ant-menu-dark.ant-menu-vertical-right { + border-right: 0; +} +.ant-menu-dark.ant-menu-inline .ant-menu-item, +.ant-menu-dark.ant-menu-vertical .ant-menu-item, +.ant-menu-dark.ant-menu-vertical-left .ant-menu-item, +.ant-menu-dark.ant-menu-vertical-right .ant-menu-item { + border-right: 0; +} +.ant-menu-dark.ant-menu-inline .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical-left .ant-menu-item:after, +.ant-menu-dark.ant-menu-vertical-right .ant-menu-item:after { + border-right: 0; +} +.ant-menu-dark .ant-menu-item:hover, +.ant-menu-dark .ant-menu-item-active, +.ant-menu-dark .ant-menu-submenu-active, +.ant-menu-dark .ant-menu-submenu-open, +.ant-menu-dark .ant-menu-submenu-selected, +.ant-menu-dark .ant-menu-submenu-title:hover { + background-color: transparent; + color: #fff; +} +.ant-menu-dark .ant-menu-item:hover > a, +.ant-menu-dark .ant-menu-item-active > a, +.ant-menu-dark .ant-menu-submenu-active > a, +.ant-menu-dark .ant-menu-submenu-open > a, +.ant-menu-dark .ant-menu-submenu-selected > a, +.ant-menu-dark .ant-menu-submenu-title:hover > a { + color: #fff; +} +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-active > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-open > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-selected > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-title:hover > .ant-menu-submenu-title:hover > .ant-menu-submenu-arrow:before { + background: #fff; +} +.ant-menu-dark .ant-menu-item-selected { + border-right: 0; + color: #fff; +} +.ant-menu-dark .ant-menu-item-selected:after { + border-right: 0; +} +.ant-menu-dark .ant-menu-item-selected > a, +.ant-menu-dark .ant-menu-item-selected > a:hover { + color: #fff; +} +.ant-menu.ant-menu-dark .ant-menu-item-selected, +.ant-menu-submenu-popup.ant-menu-dark .ant-menu-item-selected { + background-color: @primary-color; +} +.ant-menu-dark .ant-menu-item-disabled, +.ant-menu-dark .ant-menu-submenu-disabled, +.ant-menu-dark .ant-menu-item-disabled > a, +.ant-menu-dark .ant-menu-submenu-disabled > a { + color: rgba(255, 255, 255, 0.35) !important; +} +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title { + color: rgba(255, 255, 255, 0.35) !important; +} +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:before, +.ant-menu-dark .ant-menu-item-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after, +.ant-menu-dark .ant-menu-submenu-disabled > .ant-menu-submenu-title > .ant-menu-submenu-arrow:after { + background: rgba(255, 255, 255, 0.35) !important; +} +.ant-message { + color: rgba(0, 0, 0, 0.65); +} +.ant-message-notice-content { + border-radius: 4px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + background: #fff; +} +.ant-message-success .anticon { + color: #52c41a; +} +.ant-message-error .anticon { + color: #f5222d; +} +.ant-message-warning .anticon { + color: #faad14; +} +.ant-message-info .anticon, +.ant-message-loading .anticon { + color: @primary-color; +} +.ant-modal { + color: rgba(0, 0, 0, 0.65); +} +.ant-modal-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-modal-content { + background-color: #fff; + border: 0; + border-radius: 4px; + background-clip: padding-box; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); +} +.ant-modal-close { + border: 0; + background: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-modal-close:focus, +.ant-modal-close:hover { + color: #444; +} +.ant-modal-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-modal-footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +.ant-modal-mask { + background-color: rgba(0, 0, 0, 0.65); +} +.ant-confirm-body .ant-confirm-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-confirm-body .ant-confirm-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-confirm-error .ant-confirm-body > .anticon { + color: #f5222d; +} +.ant-confirm-warning .ant-confirm-body > .anticon, +.ant-confirm-confirm .ant-confirm-body > .anticon { + color: #faad14; +} +.ant-confirm-info .ant-confirm-body > .anticon { + color: @primary-color; +} +.ant-confirm-success .ant-confirm-body > .anticon { + color: #52c41a; +} +.ant-notification { + color: rgba(0, 0, 0, 0.65); +} +.ant-notification-notice { + border-radius: 4px; + box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + background: #fff; +} +.ant-notification-notice-message { + color: rgba(0, 0, 0, 0.85); +} +.ant-notification-notice-message-single-line-auto-margin { + background-color: transparent; +} +.ant-notification-notice-icon-success { + color: #52c41a; +} +.ant-notification-notice-icon-info { + color: @primary-color; +} +.ant-notification-notice-icon-warning { + color: #faad14; +} +.ant-notification-notice-icon-error { + color: #f5222d; +} +.ant-notification-notice-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-notification-notice-close:hover { + color: rgba(0, 0, 0, 0.67); +} +.ant-pagination { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-item { + border-radius: 4px; + border: 1px solid #d9d9d9; + background-color: #fff; +} +.ant-pagination-item a { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-item:focus, +.ant-pagination-item:hover { + border-color: @primary-color; +} +.ant-pagination-item:focus a, +.ant-pagination-item:hover a { + color: @primary-color; +} +.ant-pagination-item-active { + border-color: @primary-color; +} +.ant-pagination-item-active a { + color: @primary-color; +} +.ant-pagination-item-active:focus, +.ant-pagination-item-active:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-item-active:focus a, +.ant-pagination-item-active:hover a { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-link-icon, +.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-link-icon { + color: @primary-color; +} +.ant-pagination-jump-prev .ant-pagination-item-container .ant-pagination-item-ellipsis, +.ant-pagination-jump-next .ant-pagination-item-container .ant-pagination-item-ellipsis { + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-prev, +.ant-pagination-next, +.ant-pagination-jump-prev, +.ant-pagination-jump-next { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; +} +.ant-pagination-prev a, +.ant-pagination-next a { + color: rgba(0, 0, 0, 0.65); +} +.ant-pagination-prev:hover a, +.ant-pagination-next:hover a { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-pagination-prev .ant-pagination-item-link, +.ant-pagination-next .ant-pagination-item-link { + border: 1px solid #d9d9d9; + background-color: #fff; + border-radius: 4px; +} +.ant-pagination-prev:focus .ant-pagination-item-link, +.ant-pagination-next:focus .ant-pagination-item-link, +.ant-pagination-prev:hover .ant-pagination-item-link, +.ant-pagination-next:hover .ant-pagination-item-link { + border-color: @primary-color; + color: @primary-color; +} +.ant-pagination-disabled a, +.ant-pagination-disabled:hover a, +.ant-pagination-disabled:focus a, +.ant-pagination-disabled .ant-pagination-item-link, +.ant-pagination-disabled:hover .ant-pagination-item-link, +.ant-pagination-disabled:focus .ant-pagination-item-link { + border-color: #d9d9d9; + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-options-quick-jumper input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-pagination-options-quick-jumper input::-moz-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-pagination-options-quick-jumper input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-pagination-options-quick-jumper input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-pagination-options-quick-jumper input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-pagination-options-quick-jumper input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-pagination-simple .ant-pagination-prev .ant-pagination-item-link, +.ant-pagination-simple .ant-pagination-next .ant-pagination-item-link { + border: 0; +} +.ant-pagination-simple .ant-pagination-simple-pager input { + background-color: #fff; + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-pagination-simple .ant-pagination-simple-pager input:hover { + border-color: @primary-color; +} +.ant-pagination.mini .ant-pagination-item:not(.ant-pagination-item-active) { + background: transparent; + border-color: transparent; +} +.ant-pagination.mini .ant-pagination-prev .ant-pagination-item-link, +.ant-pagination.mini .ant-pagination-next .ant-pagination-item-link { + border-color: transparent; + background: transparent; +} +.ant-popover { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover:after { + background: rgba(255, 255, 255, 0.01); +} +.ant-popover-inner { + background-color: #fff; + background-clip: padding-box; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-popover-title { + border-bottom: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.85); +} +.ant-popover-inner-content { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover-message { + color: rgba(0, 0, 0, 0.65); +} +.ant-popover-message > .anticon { + color: #faad14; +} +.ant-popover-arrow { + background: #fff; + border-color: transparent; + border-style: solid; +} +.ant-popover-placement-top > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-topLeft > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-topRight > .ant-popover-content > .ant-popover-arrow { + box-shadow: 3px 3px 7px rgba(0, 0, 0, 0.07); +} +.ant-popover-placement-right > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-rightTop > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-rightBottom > .ant-popover-content > .ant-popover-arrow { + box-shadow: -3px 3px 7px rgba(0, 0, 0, 0.07); +} +.ant-popover-placement-bottom > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-bottomLeft > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-bottomRight > .ant-popover-content > .ant-popover-arrow { + box-shadow: -2px -2px 5px rgba(0, 0, 0, 0.06); +} +.ant-popover-placement-left > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-leftTop > .ant-popover-content > .ant-popover-arrow, +.ant-popover-placement-leftBottom > .ant-popover-content > .ant-popover-arrow { + box-shadow: 3px -3px 7px rgba(0, 0, 0, 0.07); +} +.ant-progress { + color: rgba(0, 0, 0, 0.65); +} +.ant-progress-inner { + background-color: #f5f5f5; + border-radius: 100px; +} +.ant-progress-success-bg, +.ant-progress-bg { + background-color: @primary-color; +} +.ant-progress-success-bg { + background-color: #52c41a; +} +.ant-progress-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-progress-status-active .ant-progress-bg:before { + background: #fff; + border-radius: 10px; +} +.ant-progress-status-exception .ant-progress-bg { + background-color: #f5222d; +} +.ant-progress-status-exception .ant-progress-text { + color: #f5222d; +} +.ant-progress-status-success .ant-progress-bg { + background-color: #52c41a; +} +.ant-progress-status-success .ant-progress-text { + color: #52c41a; +} +.ant-progress-circle .ant-progress-inner { + background-color: transparent; +} +.ant-progress-circle .ant-progress-text { + color: rgba(0, 0, 0, 0.65); +} +.ant-progress-circle.ant-progress-status-exception .ant-progress-text { + color: #f5222d; +} +.ant-progress-circle.ant-progress-status-success .ant-progress-text { + color: #52c41a; +} +.ant-radio-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-wrapper:hover .ant-radio .ant-radio-inner, +.ant-radio:hover .ant-radio-inner, +.ant-radio-focused .ant-radio-inner { + border-color: @primary-color; +} +.ant-radio-checked:after { + border-radius: 50%; + border: 1px solid @primary-color; +} +.ant-radio-inner { + border-width: 1px; + border-style: solid; + border-radius: 100px; + border-color: #d9d9d9; + background-color: #fff; +} +.ant-radio-inner:after { + border-radius: 8px; + border-top: 0; + border-left: 0; + background-color: @primary-color; +} +.ant-radio-checked .ant-radio-inner { + border-color: @primary-color; +} +.ant-radio-disabled .ant-radio-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-radio-disabled .ant-radio-inner:after { + background-color: #ccc; +} +.ant-radio-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper { + color: rgba(0, 0, 0, 0.65); + border: 1px solid #d9d9d9; + border-left: 0; + border-top-width: 1.02px; + background: #fff; +} +.ant-radio-button-wrapper a { + color: rgba(0, 0, 0, 0.65); +} +.ant-radio-button-wrapper:not(:first-child)::before { + background-color: #d9d9d9; +} +.ant-radio-button-wrapper:first-child { + border-radius: 4px 0 0 4px; + border-left: 1px solid #d9d9d9; +} +.ant-radio-button-wrapper:last-child { + border-radius: 0 4px 4px 0; +} +.ant-radio-button-wrapper:first-child:last-child { + border-radius: 4px; +} +.ant-radio-button-wrapper:hover, +.ant-radio-button-wrapper-focused { + color: @primary-color; +} +.ant-radio-button-wrapper-checked { + background: #fff; + border-color: @primary-color; + color: @primary-color; + box-shadow: -1px 0 0 0 @primary-color; +} +.ant-radio-button-wrapper-checked::before { + background-color: @primary-color !important; +} +.ant-radio-button-wrapper-checked:first-child { + border-color: @primary-color; + box-shadow: none !important; +} +.ant-radio-button-wrapper-checked:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: -1px 0 0 0 color(~`colorPalette("@{primary-color}", 5)`); + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-radio-button-wrapper-checked:active { + border-color: color(~`colorPalette("@{primary-color}", 7)`); + box-shadow: -1px 0 0 0 color(~`colorPalette("@{primary-color}", 7)`); + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled) { + background: @primary-color; + border-color: @primary-color; + color: #fff; +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + background: color(~`colorPalette("@{primary-color}", 5)`); + color: #fff; +} +.ant-radio-group-solid .ant-radio-button-wrapper-checked:not(.ant-radio-button-wrapper-disabled):active { + border-color: color(~`colorPalette("@{primary-color}", 7)`); + background: color(~`colorPalette("@{primary-color}", 7)`); + color: #fff; +} +.ant-radio-button-wrapper-disabled { + border-color: #d9d9d9; + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper-disabled:first-child, +.ant-radio-button-wrapper-disabled:hover { + border-color: #d9d9d9; + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-radio-button-wrapper-disabled:first-child { + border-left-color: #d9d9d9; +} +.ant-radio-button-wrapper-disabled.ant-radio-button-wrapper-checked { + color: #fff; + background-color: #e6e6e6; + border-color: #d9d9d9; + box-shadow: none; +} +.ant-rate { + color: rgba(0, 0, 0, 0.65); + color: #fadb14; +} +.ant-rate-star { + color: inherit; +} +.ant-rate-star-first, +.ant-rate-star-second { + color: #e8e8e8; +} +.ant-rate-star-half .ant-rate-star-first, +.ant-rate-star-full .ant-rate-star-second { + color: inherit; +} +.ant-select { + color: rgba(0, 0, 0, 0.65); +} +.ant-select > ul > li > a { + background-color: #fff; +} +.ant-select-arrow { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection { + background-color: #fff; + border-radius: 4px; + border: 1px solid #d9d9d9; + border-top-width: 1.02px; +} +.ant-select-selection:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-select-focused .ant-select-selection, +.ant-select-selection:focus, +.ant-select-selection:active { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-select-selection__clear { + background: #fff; + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection__clear:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-disabled .ant-select-selection { + background: #f5f5f5; +} +.ant-select-disabled .ant-select-selection:hover, +.ant-select-disabled .ant-select-selection:focus, +.ant-select-disabled .ant-select-selection:active { + border-color: #d9d9d9; + box-shadow: none; +} +.ant-select-disabled .ant-select-selection--multiple .ant-select-selection__choice { + background: #f5f5f5; + color: #aaa; +} +.ant-select-disabled .ant-select-selection__choice__remove { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-disabled .ant-select-selection__choice__remove:hover { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-selection__placeholder, +.ant-select-search__field__placeholder { + color: #bfbfbf; +} +.ant-select-search--inline .ant-select-search__field { + border-width: 0; + background: transparent; + border-radius: 4px; +} +.ant-select-selection--multiple .ant-select-selection__choice { + color: rgba(0, 0, 0, 0.65); + background-color: #fafafa; + border: 1px solid #e8e8e8; + border-radius: 2px; +} +.ant-select-selection--multiple .ant-select-selection__choice__remove { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-selection--multiple .ant-select-selection__choice__remove:hover { + color: #404040; +} +.ant-select-open .ant-select-selection { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-select-combobox .ant-select-search__field { + box-shadow: none; +} +.ant-select-dropdown { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + border-radius: 4px; +} +.ant-select-dropdown-menu-item-group-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:first-child:not(:last-child), +.ant-select-dropdown-menu-item-group:not(:last-child) .ant-select-dropdown-menu-item-group-list .ant-select-dropdown-menu-item:last-child { + border-radius: 0; +} +.ant-select-dropdown-menu-item { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-dropdown-menu-item:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-dropdown-menu-item:first-child { + border-radius: 4px 4px 0 0; +} +.ant-select-dropdown-menu-item:last-child { + border-radius: 0 0 4px 4px; +} +.ant-select-dropdown-menu-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-dropdown-menu-item-disabled:hover { + color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-select-dropdown-menu-item-selected, +.ant-select-dropdown-menu-item-selected:hover { + background-color: #fafafa; + color: rgba(0, 0, 0, 0.65); +} +.ant-select-dropdown-menu-item-active { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-dropdown-menu-item-divider { + background-color: #e8e8e8; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item .ant-select-selected-icon { + color: transparent; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item:hover .ant-select-selected-icon { + color: #ddd; +} +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected .ant-select-selected-icon, +.ant-select-dropdown.ant-select-dropdown--multiple .ant-select-dropdown-menu-item-selected:hover .ant-select-selected-icon { + color: @primary-color; +} +.ant-skeleton-header .ant-skeleton-avatar { + background: #f2f2f2; +} +.ant-skeleton-header .ant-skeleton-avatar.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-header .ant-skeleton-avatar-lg.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-header .ant-skeleton-avatar-sm.ant-skeleton-avatar-circle { + border-radius: 50%; +} +.ant-skeleton-content .ant-skeleton-title { + background: #f2f2f2; +} +.ant-skeleton-content .ant-skeleton-paragraph > li { + background: #f2f2f2; +} +.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-title, +.ant-skeleton.ant-skeleton-active .ant-skeleton-content .ant-skeleton-paragraph > li { + background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%); + background-size: 400% 100%; +} +.ant-skeleton.ant-skeleton-active .ant-skeleton-avatar { + background: linear-gradient(90deg, #f2f2f2 25%, #e6e6e6 37%, #f2f2f2 63%); + background-size: 400% 100%; +} +.ant-slider { + color: rgba(0, 0, 0, 0.65); +} +.ant-slider-rail { + border-radius: 2px; + background-color: #f5f5f5; +} +.ant-slider-track { + border-radius: 4px; + background-color: color(~`colorPalette("@{primary-color}", 3)`); +} +.ant-slider-handle { + border-radius: 50%; + border: solid 2px color(~`colorPalette("@{primary-color}", 3)`); + background-color: #fff; +} +.ant-slider-handle:focus { + border-color: #46a6ff; + box-shadow: 0 0 0 5px #8cc8ff; +} +.ant-slider-handle.ant-tooltip-open { + border-color: @primary-color; +} +.ant-slider:hover .ant-slider-rail { + background-color: #e1e1e1; +} +.ant-slider:hover .ant-slider-track { + background-color: color(~`colorPalette("@{primary-color}", 4)`); +} +.ant-slider:hover .ant-slider-handle:not(.ant-tooltip-open) { + border-color: color(~`colorPalette("@{primary-color}", 4)`); +} +.ant-slider-mark-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-slider-mark-text-active { + color: rgba(0, 0, 0, 0.65); +} +.ant-slider-step { + background: transparent; +} +.ant-slider-dot { + border: 2px solid #e8e8e8; + background-color: #fff; + border-radius: 50%; +} +.ant-slider-dot-active { + border-color: #8cc8ff; +} +.ant-slider-disabled .ant-slider-track { + background-color: rgba(0, 0, 0, 0.25) !important; +} +.ant-slider-disabled .ant-slider-handle, +.ant-slider-disabled .ant-slider-dot { + border-color: rgba(0, 0, 0, 0.25) !important; + background-color: #fff; + box-shadow: none; +} +.ant-spin { + color: rgba(0, 0, 0, 0.65); + color: @primary-color; +} +.ant-spin-blur:after { + background: #fff; +} +.ant-spin-tip { + color: rgba(0, 0, 0, 0.45); +} +.ant-spin-dot i { + border-radius: 100%; + background-color: @primary-color; +} +.ant-steps { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-icon { + border: 1px solid rgba(0, 0, 0, 0.25); + border-radius: 32px; +} +.ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-tail:after { + background: #e8e8e8; + border-radius: 1px; +} +.ant-steps-item-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-title:after { + background: #e8e8e8; +} +.ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait .ant-steps-item-icon { + border-color: rgba(0, 0, 0, 0.25); + background-color: #fff; +} +.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-steps-item-wait .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: rgba(0, 0, 0, 0.25); +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-wait > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-wait > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item-process .ant-steps-item-icon { + border-color: @primary-color; + background-color: #fff; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: @primary-color; +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.85); +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-process > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-process > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item-process .ant-steps-item-icon { + background: @primary-color; +} +.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: #fff; +} +.ant-steps-item-finish .ant-steps-item-icon { + border-color: @primary-color; + background-color: #fff; +} +.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-item-finish .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: @primary-color; +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-title { + color: rgba(0, 0, 0, 0.65); +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: @primary-color; +} +.ant-steps-item-finish > .ant-steps-item-content > .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-item-finish > .ant-steps-item-tail:after { + background-color: @primary-color; +} +.ant-steps-item-error .ant-steps-item-icon { + border-color: #f5222d; + background-color: #fff; +} +.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon { + color: #f5222d; +} +.ant-steps-item-error .ant-steps-item-icon > .ant-steps-icon .ant-steps-icon-dot { + background: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-title { + color: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-title:after { + background-color: #e8e8e8; +} +.ant-steps-item-error > .ant-steps-item-content > .ant-steps-item-description { + color: #f5222d; +} +.ant-steps-item-error > .ant-steps-item-tail:after { + background-color: #e8e8e8; +} +.ant-steps-item.ant-steps-next-error .ant-steps-item-title:after { + background: #f5222d; +} +.ant-steps-item-custom .ant-steps-item-icon { + background: none; + border: 0; +} +.ant-steps-item-custom.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon { + color: @primary-color; +} +.ant-steps-small .ant-steps-item-icon { + border-radius: 24px; +} +.ant-steps-small .ant-steps-item-description { + color: rgba(0, 0, 0, 0.45); +} +.ant-steps-small .ant-steps-item-custom .ant-steps-item-icon { + border-radius: 0; + border: 0; + background: none; +} +.ant-steps-dot .ant-steps-item-icon { + border: 0; + background: transparent; +} +.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot { + border-radius: 100px; +} +.ant-steps-dot .ant-steps-item-icon .ant-steps-icon-dot:after { + background: rgba(0, 0, 0, 0.001); +} +.ant-switch { + color: rgba(0, 0, 0, 0.65); + border-radius: 100px; + border: 1px solid transparent; + background-color: rgba(0, 0, 0, 0.25); +} +.ant-switch-inner { + color: #fff; +} +.ant-switch-loading-icon, +.ant-switch:after { + border-radius: 18px; + background-color: #fff; +} +.ant-switch:after { + box-shadow: 0 2px 4px 0 rgba(0, 35, 11, 0.2); +} +.ant-switch-loading-icon { + background: transparent; +} +.ant-switch-loading .ant-switch-loading-icon { + color: rgba(0, 0, 0, 0.65); +} +.ant-switch-checked.ant-switch-loading .ant-switch-loading-icon { + color: @primary-color; +} +.ant-switch:focus { + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); +} +.ant-switch:focus:hover { + box-shadow: none; +} +.ant-switch-checked { + background-color: @primary-color; +} +.ant-table { + color: rgba(0, 0, 0, 0.65); +} +.ant-table table { + border-collapse: collapse; + border-radius: 4px 4px 0 0; +} +.ant-table-thead > tr > th { + background: #fafafa; + color: rgba(0, 0, 0, 0.85); + border-bottom: 1px solid #e8e8e8; +} +.ant-table-thead > tr > th .anticon-filter, +.ant-table-thead > tr > th .ant-table-filter-icon { + color: #bfbfbf; +} +.ant-table-thead > tr > th .ant-table-filter-selected.anticon-filter { + color: @primary-color; +} +.ant-table-thead > tr > th .ant-table-column-sorter { + color: #bfbfbf; +} +.ant-table-thead > tr > th .ant-table-column-sorter-up.on, +.ant-table-thead > tr > th .ant-table-column-sorter-down.on { + color: @primary-color; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover { + background: #f5f5f5; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon { + background: #f5f5f5; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter:hover, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon:hover { + color: rgba(0, 0, 0, 0.45); + background: #ebebeb; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .anticon-filter:active, +.ant-table-thead > tr > th.ant-table-column-has-actions:hover .ant-table-filter-icon:active { + color: rgba(0, 0, 0, 0.65); +} +.ant-table-thead > tr > th.ant-table-column-has-actions .anticon-filter.ant-table-filter-open, +.ant-table-thead > tr > th.ant-table-column-has-actions .ant-table-filter-icon.ant-table-filter-open { + color: rgba(0, 0, 0, 0.45); + background: #ebebeb; +} +.ant-table-thead > tr > th.ant-table-column-has-actions:active .ant-table-column-sorter-up:not(.on), +.ant-table-thead > tr > th.ant-table-column-has-actions:active .ant-table-column-sorter-down:not(.on) { + color: rgba(0, 0, 0, 0.45); +} +.ant-table-thead > tr > th .ant-table-column-sorters:before { + background: transparent; +} +.ant-table-thead > tr > th .ant-table-column-sorters:hover:before { + background: rgba(0, 0, 0, 0.04); +} +.ant-table-thead > tr:first-child > th:first-child { + border-top-left-radius: 4px; +} +.ant-table-thead > tr:first-child > th:last-child { + border-top-right-radius: 4px; +} +.ant-table-thead > tr:not(:last-child) > th[colspan] { + border-bottom: 0; +} +.ant-table-tbody > tr > td { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-thead > tr.ant-table-row-hover > td, +.ant-table-tbody > tr.ant-table-row-hover > td, +.ant-table-thead > tr:hover > td, +.ant-table-tbody > tr:hover > td { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-table-thead > tr:hover { + background: none; +} +.ant-table-footer { + background: #fafafa; + border-radius: 0 0 4px 4px; + border-top: 1px solid #e8e8e8; +} +.ant-table-footer:before { + background: #fafafa; +} +.ant-table.ant-table-bordered .ant-table-footer { + border: 1px solid #e8e8e8; +} +.ant-table-title { + border-radius: 4px 4px 0 0; +} +.ant-table.ant-table-bordered .ant-table-title { + border: 1px solid #e8e8e8; +} +.ant-table-title + .ant-table-content { + border-radius: 4px 4px 0 0; +} +.ant-table-bordered .ant-table-title + .ant-table-content, +.ant-table-bordered .ant-table-title + .ant-table-content table, +.ant-table-bordered .ant-table-title + .ant-table-content .ant-table-thead > tr:first-child > th { + border-radius: 0; +} +.ant-table-without-column-header .ant-table-title + .ant-table-content, +.ant-table-without-column-header table { + border-radius: 0; +} +.ant-table-tbody > tr.ant-table-row-selected td { + background: #fafafa; +} +.ant-table-thead > tr > th.ant-table-column-sort { + background: #f5f5f5; +} +.ant-table-tbody > tr > td.ant-table-column-sort { + background: rgba(0, 0, 0, 0.01); +} +.ant-table-header { + background: #fafafa; +} +.ant-table-header table { + border-radius: 4px 4px 0 0; +} +.ant-table-loading .ant-table-body { + background: #fff; +} +.ant-table-bordered .ant-table-header > table, +.ant-table-bordered .ant-table-body > table, +.ant-table-bordered .ant-table-fixed-left table, +.ant-table-bordered .ant-table-fixed-right table { + border: 1px solid #e8e8e8; + border-right: 0; + border-bottom: 0; +} +.ant-table-bordered.ant-table-empty .ant-table-placeholder { + border-left: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-header > table { + border-bottom: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-body > table { + border-top: 0; + border-top-left-radius: 0; + border-top-right-radius: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-body-inner > table { + border-top: 0; +} +.ant-table-bordered.ant-table-fixed-header .ant-table-placeholder { + border: 0; +} +.ant-table-bordered .ant-table-thead > tr:not(:last-child) > th { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-bordered .ant-table-thead > tr > th, +.ant-table-bordered .ant-table-tbody > tr > td { + border-right: 1px solid #e8e8e8; +} +.ant-table-placeholder { + background: #fff; + border-bottom: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.45); +} +.ant-table-filter-dropdown { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-filter-dropdown .ant-dropdown-menu { + border: 0; + box-shadow: none; + border-radius: 4px 4px 0 0; +} +.ant-table-filter-dropdown .ant-dropdown-menu-sub { + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-filter-dropdown .ant-dropdown-menu .ant-dropdown-submenu-contain-selected .ant-dropdown-menu-submenu-title:after { + color: @primary-color; +} +.ant-table-filter-dropdown > .ant-dropdown-menu > .ant-dropdown-menu-item:last-child, +.ant-table-filter-dropdown > .ant-dropdown-menu > .ant-dropdown-menu-submenu:last-child .ant-dropdown-menu-submenu-title { + border-radius: 0; +} +.ant-table-filter-dropdown-btns { + border-top: 1px solid #e8e8e8; +} +.ant-table-filter-dropdown-link { + color: @primary-color; +} +.ant-table-filter-dropdown-link:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-table-filter-dropdown-link:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-table-selection .anticon-down { + color: #bfbfbf; +} +.ant-table-selection-menu { + background: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-table-selection-menu .ant-action-down { + color: #bfbfbf; +} +.ant-table-selection-down:hover .anticon-down { + color: #666; +} +.ant-table-row-expand-icon { + border: 1px solid #e8e8e8; + background: #fff; +} +tr.ant-table-expanded-row, +tr.ant-table-expanded-row:hover { + background: #fbfbfb; +} +.ant-table-fixed-header > .ant-table-content > .ant-table-scroll > .ant-table-body { + background: #fff; +} +.ant-table-fixed-left, +.ant-table-fixed-right { + border-radius: 0; +} +.ant-table-fixed-left table, +.ant-table-fixed-right table { + background: #fff; +} +.ant-table-fixed-header .ant-table-fixed-left .ant-table-body-outer .ant-table-fixed, +.ant-table-fixed-header .ant-table-fixed-right .ant-table-body-outer .ant-table-fixed { + border-radius: 0; +} +.ant-table-fixed-left { + box-shadow: 6px 0 6px -4px rgba(0, 0, 0, 0.15); +} +.ant-table-fixed-left, +.ant-table-fixed-left table { + border-radius: 4px 0 0 0; +} +.ant-table-fixed-left .ant-table-thead > tr > th:last-child { + border-top-right-radius: 0; +} +.ant-table-fixed-right { + box-shadow: -6px 0 6px -4px rgba(0, 0, 0, 0.15); +} +.ant-table-fixed-right, +.ant-table-fixed-right table { + border-radius: 0 4px 0 0; +} +.ant-table-fixed-right .ant-table-expanded-row { + color: transparent; +} +.ant-table-fixed-right .ant-table-thead > tr > th:first-child { + border-top-left-radius: 0; +} +.ant-table.ant-table-scroll-position-left .ant-table-fixed-left { + box-shadow: none; +} +.ant-table.ant-table-scroll-position-right .ant-table-fixed-right { + box-shadow: none; +} +.ant-table-small { + border: 1px solid #e8e8e8; + border-radius: 4px; +} +.ant-table-small > .ant-table-title { + border-bottom: 1px solid #e8e8e8; +} +.ant-table-small > .ant-table-content > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-body > table, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table { + border: 0; +} +.ant-table-small > .ant-table-content > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-body > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-scroll > .ant-table-body > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-header > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-left > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th, +.ant-table-small > .ant-table-content > .ant-table-fixed-right > .ant-table-body-outer > .ant-table-body-inner > table > .ant-table-thead > tr > th { + background: #fff; + border-bottom: 1px solid #e8e8e8; +} +.ant-table-small > .ant-table-content .ant-table-header { + background: #fff; +} +.ant-table-small > .ant-table-content .ant-table-placeholder, +.ant-table-small > .ant-table-content .ant-table-row:last-child td { + border-bottom: 0; +} +.ant-table-small.ant-table-bordered { + border-right: 0; +} +.ant-table-small.ant-table-bordered .ant-table-title { + border: 0; + border-bottom: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-content { + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-footer { + border: 0; + border-top: 1px solid #e8e8e8; + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-placeholder { + border-left: 0; + border-bottom: 0; +} +.ant-table-small.ant-table-bordered .ant-table-thead > tr > th:last-child, +.ant-table-small.ant-table-bordered .ant-table-tbody > tr > td:last-child { + border-right: none; +} +.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-thead > tr > th:last-child, +.ant-table-small.ant-table-bordered .ant-table-fixed-left .ant-table-tbody > tr > td:last-child { + border-right: 1px solid #e8e8e8; +} +.ant-table-small.ant-table-bordered .ant-table-fixed-right { + border-right: 1px solid #e8e8e8; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab { + border: 1px solid #e8e8e8; + border-bottom: 0; + border-radius: 4px 4px 0 0; + background: #fafafa; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab-active { + background: #fff; + border-color: #e8e8e8; + color: @primary-color; +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab .ant-tabs-close-x { + color: rgba(0, 0, 0, 0.45); +} +.ant-tabs.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab .ant-tabs-close-x:hover { + color: rgba(0, 0, 0, 0.85); +} +.ant-tabs-extra-content .ant-tabs-new-tab { + border-radius: 2px; + border: 1px solid #e8e8e8; + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-extra-content .ant-tabs-new-tab:hover { + color: @primary-color; + border-color: @primary-color; +} +.ant-tabs-vertical.ant-tabs-card > .ant-tabs-bar .ant-tabs-tab { + border-bottom: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-card.ant-tabs-left > .ant-tabs-bar .ant-tabs-tab { + border-right: 0; + border-radius: 4px 0 0 4px; +} +.ant-tabs-vertical.ant-tabs-card.ant-tabs-right > .ant-tabs-bar .ant-tabs-tab { + border-left: 0; + border-radius: 0 4px 4px 0; +} +.ant-tabs.ant-tabs-card.ant-tabs-bottom > .ant-tabs-bar .ant-tabs-tab { + border-bottom: 1px solid #e8e8e8; + border-top: 0; + border-radius: 0 0 4px 4px; +} +.ant-tabs.ant-tabs-card.ant-tabs-bottom > .ant-tabs-bar .ant-tabs-tab-active { + color: @primary-color; +} +.ant-tabs { + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-ink-bar { + background-color: @primary-color; +} +.ant-tabs-bar { + border-bottom: 1px solid #e8e8e8; +} +.ant-tabs-bottom .ant-tabs-bar { + border-bottom: none; + border-top: 1px solid #e8e8e8; +} +.ant-tabs-tab-prev, +.ant-tabs-tab-next { + border: 0; + background-color: transparent; + color: rgba(0, 0, 0, 0.45); +} +.ant-tabs-tab-prev:hover, +.ant-tabs-tab-next:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-tabs-tab-btn-disabled, +.ant-tabs-tab-btn-disabled:hover { + color: rgba(0, 0, 0, 0.25); +} +.ant-tabs-nav .ant-tabs-tab-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-tabs-nav .ant-tabs-tab:hover { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-tabs-nav .ant-tabs-tab:active { + color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-tabs-nav .ant-tabs-tab-active { + color: @primary-color; +} +.ant-tabs-vertical > .ant-tabs-bar { + border-bottom: 0; +} +.ant-tabs-vertical.ant-tabs-left > .ant-tabs-bar { + border-right: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-left > .ant-tabs-content { + border-left: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-right > .ant-tabs-bar { + border-left: 1px solid #e8e8e8; +} +.ant-tabs-vertical.ant-tabs-right > .ant-tabs-content { + border-right: 1px solid #e8e8e8; +} +.ant-tag { + color: rgba(0, 0, 0, 0.65); + border-radius: 4px; + border: 1px solid #d9d9d9; + background: #fafafa; +} +.ant-tag, +.ant-tag a, +.ant-tag a:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-tag .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-tag .anticon-close:hover { + color: rgba(0, 0, 0, 0.85); +} +.ant-tag-has-color { + border-color: transparent; +} +.ant-tag-has-color, +.ant-tag-has-color a, +.ant-tag-has-color a:hover, +.ant-tag-has-color .anticon-close, +.ant-tag-has-color .anticon-close:hover { + color: #fff; +} +.ant-tag-checkable { + background-color: transparent; + border-color: transparent; +} +.ant-tag-checkable:not(.ant-tag-checkable-checked):hover { + color: @primary-color; +} +.ant-tag-checkable:active, +.ant-tag-checkable-checked { + color: #fff; +} +.ant-tag-checkable-checked { + background-color: @primary-color; +} +.ant-tag-checkable:active { + background-color: color(~`colorPalette("@{primary-color}", 7)`); +} +.ant-tag-pink { + color: #eb2f96; + background: #fff0f6; + border-color: #ffadd2; +} +.ant-tag-pink-inverse { + background: #eb2f96; + border-color: #eb2f96; + color: #fff; +} +.ant-tag-magenta { + color: #eb2f96; + background: #fff0f6; + border-color: #ffadd2; +} +.ant-tag-magenta-inverse { + background: #eb2f96; + border-color: #eb2f96; + color: #fff; +} +.ant-tag-red { + color: #f5222d; + background: #fff1f0; + border-color: #ffa39e; +} +.ant-tag-red-inverse { + background: #f5222d; + border-color: #f5222d; + color: #fff; +} +.ant-tag-volcano { + color: #fa541c; + background: #fff2e8; + border-color: #ffbb96; +} +.ant-tag-volcano-inverse { + background: #fa541c; + border-color: #fa541c; + color: #fff; +} +.ant-tag-orange { + color: #fa8c16; + background: #fff7e6; + border-color: #ffd591; +} +.ant-tag-orange-inverse { + background: #fa8c16; + border-color: #fa8c16; + color: #fff; +} +.ant-tag-yellow { + color: #fadb14; + background: #feffe6; + border-color: #fffb8f; +} +.ant-tag-yellow-inverse { + background: #fadb14; + border-color: #fadb14; + color: #fff; +} +.ant-tag-gold { + color: #faad14; + background: #fffbe6; + border-color: #ffe58f; +} +.ant-tag-gold-inverse { + background: #faad14; + border-color: #faad14; + color: #fff; +} +.ant-tag-cyan { + color: #13c2c2; + background: #e6fffb; + border-color: #87e8de; +} +.ant-tag-cyan-inverse { + background: #13c2c2; + border-color: #13c2c2; + color: #fff; +} +.ant-tag-lime { + color: #a0d911; + background: #fcffe6; + border-color: #eaff8f; +} +.ant-tag-lime-inverse { + background: #a0d911; + border-color: #a0d911; + color: #fff; +} +.ant-tag-green { + color: #52c41a; + background: #f6ffed; + border-color: #b7eb8f; +} +.ant-tag-green-inverse { + background: #52c41a; + border-color: #52c41a; + color: #fff; +} +.ant-tag-blue { + color: @primary-color; + background: color(~`colorPalette("@{primary-color}", 1)`); + border-color: color(~`colorPalette("@{primary-color}", 3)`); +} +.ant-tag-blue-inverse { + background: @primary-color; + border-color: @primary-color; + color: #fff; +} +.ant-tag-geekblue { + color: #2f54eb; + background: #f0f5ff; + border-color: #adc6ff; +} +.ant-tag-geekblue-inverse { + background: #2f54eb; + border-color: #2f54eb; + color: #fff; +} +.ant-tag-purple { + color: #722ed1; + background: #f9f0ff; + border-color: #d3adf7; +} +.ant-tag-purple-inverse { + background: #722ed1; + border-color: #722ed1; + color: #fff; +} +.ant-time-picker-panel { + color: rgba(0, 0, 0, 0.65); +} +.ant-time-picker-panel-inner { + background-color: #fff; + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); + background-clip: padding-box; +} +.ant-time-picker-panel-input { + border: 0; +} +.ant-time-picker-panel-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-panel-input-wrap { + border-bottom: 1px solid #e8e8e8; +} +.ant-time-picker-panel-input-invalid { + border-color: red; +} +.ant-time-picker-panel-clear-btn-icon svg { + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-panel-clear-btn-icon svg:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-time-picker-panel-select { + border-left: 1px solid #e8e8e8; +} +.ant-time-picker-panel-select:first-child { + border-left: 0; +} +.ant-time-picker-panel-select:last-child { + border-right: 0; +} +.ant-time-picker-panel-select li:hover { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +li.ant-time-picker-panel-select-option-selected { + background: #f5f5f5; +} +li.ant-time-picker-panel-select-option-selected:hover { + background: #f5f5f5; +} +li.ant-time-picker-panel-select-option-disabled { + color: rgba(0, 0, 0, 0.25); +} +li.ant-time-picker-panel-select-option-disabled:hover { + background: transparent; +} +.ant-time-picker-panel-addon { + border-top: 1px solid #e8e8e8; +} +.ant-time-picker { + color: rgba(0, 0, 0, 0.65); +} +.ant-time-picker-input { + color: rgba(0, 0, 0, 0.65); + background-color: #fff; + background-image: none; + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-time-picker-input::-moz-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input:-ms-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input::-webkit-input-placeholder { + color: #bfbfbf; +} +.ant-time-picker-input:hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + border-right-width: 1px !important; +} +.ant-time-picker-input:focus { + border-color: color(~`colorPalette("@{primary-color}", 5)`); + box-shadow: 0 0 0 2px rgba(24, 144, 255, 0.2); + border-right-width: 1px !important; +} +.ant-time-picker-input-disabled { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-input-disabled:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-time-picker-input[disabled] { + background-color: #f5f5f5; + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-input[disabled]:hover { + border-color: #e6d8d8; + border-right-width: 1px !important; +} +.ant-time-picker-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-time-picker-icon .ant-time-picker-clock-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-timeline { + color: rgba(0, 0, 0, 0.65); +} +.ant-timeline-item-tail { + border-left: 2px solid #e8e8e8; +} +.ant-timeline-item-head { + background-color: #fff; + border-radius: 100px; + border: 2px solid transparent; +} +.ant-timeline-item-head-blue { + border-color: @primary-color; + color: @primary-color; +} +.ant-timeline-item-head-red { + border-color: #f5222d; + color: #f5222d; +} +.ant-timeline-item-head-green { + border-color: #52c41a; + color: #52c41a; +} +.ant-timeline-item-head-custom { + border: 0; + border-radius: 0; +} +.ant-timeline.ant-timeline-pending .ant-timeline-item-last .ant-timeline-item-tail { + border-left: 2px dotted #e8e8e8; +} +.ant-timeline.ant-timeline-reverse .ant-timeline-item-pending .ant-timeline-item-tail { + border-left: 2px dotted #e8e8e8; +} +.ant-tooltip { + color: rgba(0, 0, 0, 0.65); +} +.ant-tooltip-inner { + color: #fff; + background-color: rgba(0, 0, 0, 0.75); + border-radius: 4px; + box-shadow: 0 2px 8px rgba(0, 0, 0, 0.15); +} +.ant-tooltip-arrow { + border-color: transparent; + border-style: solid; +} +.ant-tooltip-placement-top .ant-tooltip-arrow, +.ant-tooltip-placement-topLeft .ant-tooltip-arrow, +.ant-tooltip-placement-topRight .ant-tooltip-arrow { + border-width: 5px 5px 0; + border-top-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-right .ant-tooltip-arrow, +.ant-tooltip-placement-rightTop .ant-tooltip-arrow, +.ant-tooltip-placement-rightBottom .ant-tooltip-arrow { + border-width: 5px 5px 5px 0; + border-right-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-left .ant-tooltip-arrow, +.ant-tooltip-placement-leftTop .ant-tooltip-arrow, +.ant-tooltip-placement-leftBottom .ant-tooltip-arrow { + border-width: 5px 0 5px 5px; + border-left-color: rgba(0, 0, 0, 0.75); +} +.ant-tooltip-placement-bottom .ant-tooltip-arrow, +.ant-tooltip-placement-bottomLeft .ant-tooltip-arrow, +.ant-tooltip-placement-bottomRight .ant-tooltip-arrow { + border-width: 0 5px 5px; + border-bottom-color: rgba(0, 0, 0, 0.75); +} +.ant-transfer { + color: rgba(0, 0, 0, 0.65); +} +.ant-transfer-disabled .ant-transfer-list { + background: #f5f5f5; +} +.ant-transfer-list { + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-transfer-list-search-action { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-search-action .anticon { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-search-action .anticon:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-transfer-list-header { + border-radius: 4px 4px 0 0; + background: #fff; + color: rgba(0, 0, 0, 0.65); + border-bottom: 1px solid #e8e8e8; +} +.ant-transfer-list-content-item:not(.ant-transfer-list-content-item-disabled):hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-transfer-list-content-item-disabled { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-body-not-found { + color: rgba(0, 0, 0, 0.25); +} +.ant-transfer-list-footer { + border-top: 1px solid #e8e8e8; + border-radius: 0 0 4px 4px; +} +.ant-select-tree-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-checkbox-wrapper:hover .ant-select-tree-checkbox-inner, +.ant-select-tree-checkbox:hover .ant-select-tree-checkbox-inner, +.ant-select-tree-checkbox-input:focus + .ant-select-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-select-tree-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-select-tree-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-select-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-select-tree-checkbox-indeterminate .ant-select-tree-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-select-tree-checkbox-indeterminate.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-select-tree-checkbox-disabled.ant-select-tree-checkbox-checked .ant-select-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-select-tree-checkbox-disabled .ant-select-tree-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-select-tree-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-select-tree-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper { + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-select-tree li .ant-select-tree-node-content-wrapper.ant-select-tree-node-selected { + background-color: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-select-tree li span.ant-select-tree-switcher, +.ant-select-tree li span.ant-select-tree-iconEle { + border: 0 none; +} +.ant-select-tree li span.ant-select-icon_loading .ant-select-switcher-loading-icon { + color: @primary-color; +} +.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_open .ant-select-switcher-loading-icon, +.ant-select-tree li span.ant-select-tree-switcher.ant-select-tree-switcher_close .ant-select-switcher-loading-icon { + color: @primary-color; +} +li.ant-select-tree-treenode-disabled > span:not(.ant-select-tree-switcher), +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper, +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper span { + color: rgba(0, 0, 0, 0.25); +} +li.ant-select-tree-treenode-disabled > .ant-select-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-select-tree-dropdown { + color: rgba(0, 0, 0, 0.65); +} +.ant-select-tree-dropdown .ant-select-dropdown-search .ant-select-search__field { + border: 1px solid #d9d9d9; + border-radius: 4px; +} +.ant-select-tree-dropdown .ant-select-not-found { + color: rgba(0, 0, 0, 0.25); +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper { + border-radius: 0; +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper:hover, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper:hover:before, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper:hover:before { + background: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-tree.ant-tree-directory > li span.ant-tree-node-content-wrapper.ant-tree-node-selected, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li span.ant-tree-node-content-wrapper.ant-tree-node-selected { + color: #fff; + background: transparent; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-switcher, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-switcher { + color: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox .ant-tree-checkbox-inner, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox .ant-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked:after, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked:after { + border-color: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner { + background: #fff; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-checkbox.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border-color: @primary-color; +} +.ant-tree.ant-tree-directory > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper:before, +.ant-tree.ant-tree-directory .ant-tree-child-tree > li.ant-tree-treenode-selected > span.ant-tree-node-content-wrapper:before { + background: @primary-color; +} +.ant-tree-checkbox { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree-checkbox-wrapper:hover .ant-tree-checkbox-inner, +.ant-tree-checkbox:hover .ant-tree-checkbox-inner, +.ant-tree-checkbox-input:focus + .ant-tree-checkbox-inner { + border-color: @primary-color; +} +.ant-tree-checkbox-checked:after { + border-radius: 2px; + border: 1px solid @primary-color; +} +.ant-tree-checkbox-inner { + border: 1px solid #d9d9d9; + border-radius: 2px; + background-color: #fff; +} +.ant-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-tree-checkbox-indeterminate .ant-tree-checkbox-inner:after { + border: 0; + background-color: @primary-color; +} +.ant-tree-checkbox-indeterminate.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border: 2px solid #fff; + border-top: 0; + border-left: 0; +} +.ant-tree-checkbox-checked .ant-tree-checkbox-inner { + background-color: @primary-color; + border-color: @primary-color; +} +.ant-tree-checkbox-disabled.ant-tree-checkbox-checked .ant-tree-checkbox-inner:after { + border-color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-disabled .ant-tree-checkbox-inner { + border-color: #d9d9d9 !important; + background-color: #f5f5f5; +} +.ant-tree-checkbox-disabled .ant-tree-checkbox-inner:after { + border-color: #f5f5f5; +} +.ant-tree-checkbox-disabled + span { + color: rgba(0, 0, 0, 0.25); +} +.ant-tree-checkbox-wrapper { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree-checkbox-group { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree { + color: rgba(0, 0, 0, 0.65); +} +.ant-tree li span[draggable], +.ant-tree li span[draggable="true"] { + border-top: 2px transparent solid; + border-bottom: 2px transparent solid; +} +.ant-tree li.drag-over > span[draggable] { + background-color: @primary-color; + color: white; +} +.ant-tree li.drag-over-gap-top > span[draggable] { + border-top-color: @primary-color; +} +.ant-tree li.drag-over-gap-bottom > span[draggable] { + border-bottom-color: @primary-color; +} +.ant-tree li.filter-node > span { + color: #f5222d !important; +} +.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_open .ant-tree-switcher-loading-icon, +.ant-tree li.ant-tree-treenode-loading span.ant-tree-switcher.ant-tree-switcher_close .ant-tree-switcher-loading-icon { + color: @primary-color; +} +.ant-tree li .ant-tree-node-content-wrapper { + border-radius: 2px; + color: rgba(0, 0, 0, 0.65); +} +.ant-tree li .ant-tree-node-content-wrapper:hover { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-tree li .ant-tree-node-content-wrapper.ant-tree-node-selected { + background-color: color(~`colorPalette("@{primary-color}", 2)`); +} +.ant-tree li span.ant-tree-switcher, +.ant-tree li span.ant-tree-iconEle { + border: 0 none; +} +li.ant-tree-treenode-disabled > span:not(.ant-tree-switcher), +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper, +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper span { + color: rgba(0, 0, 0, 0.25); +} +li.ant-tree-treenode-disabled > .ant-tree-node-content-wrapper:hover { + background: transparent; +} +.ant-tree.ant-tree-show-line li span.ant-tree-switcher { + background: #fff; + color: rgba(0, 0, 0, 0.45); +} +.ant-tree.ant-tree-show-line li:not(:last-child):before { + border-left: 1px solid #d9d9d9; +} +.ant-upload { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload.ant-upload-select-picture-card { + border: 1px dashed #d9d9d9; + border-radius: 4px; + background-color: #fafafa; +} +.ant-upload.ant-upload-select-picture-card:hover { + border-color: @primary-color; +} +.ant-upload.ant-upload-drag { + border: 1px dashed #d9d9d9; + border-radius: 4px; + background: #fafafa; +} +.ant-upload.ant-upload-drag.ant-upload-drag-hover:not(.ant-upload-disabled) { + border: 2px dashed color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag:not(.ant-upload-disabled):hover { + border-color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag p.ant-upload-drag-icon .anticon { + color: color(~`colorPalette("@{primary-color}", 5)`); +} +.ant-upload.ant-upload-drag p.ant-upload-text { + color: rgba(0, 0, 0, 0.85); +} +.ant-upload.ant-upload-drag p.ant-upload-hint { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload.ant-upload-drag .anticon-plus { + color: rgba(0, 0, 0, 0.25); +} +.ant-upload.ant-upload-drag .anticon-plus:hover { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload.ant-upload-drag:hover .anticon-plus { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload-list-item-info .anticon-loading, +.ant-upload-list-item-info .anticon-paper-clip { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-item .anticon-close { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-item .anticon-close:hover { + color: rgba(0, 0, 0, 0.65); +} +.ant-upload-list-item:hover .ant-upload-list-item-info { + background-color: color(~`colorPalette("@{primary-color}", 1)`); +} +.ant-upload-list-item-error, +.ant-upload-list-item-error .anticon-paper-clip, +.ant-upload-list-item-error .ant-upload-list-item-name { + color: #f5222d; +} +.ant-upload-list-item-error .anticon-close { + color: #f5222d !important; +} +.ant-upload-list-picture .ant-upload-list-item, +.ant-upload-list-picture-card .ant-upload-list-item { + border-radius: 4px; + border: 1px solid #d9d9d9; +} +.ant-upload-list-picture .ant-upload-list-item:hover, +.ant-upload-list-picture-card .ant-upload-list-item:hover { + background: transparent; +} +.ant-upload-list-picture .ant-upload-list-item-error, +.ant-upload-list-picture-card .ant-upload-list-item-error { + border-color: #f5222d; +} +.ant-upload-list-picture .ant-upload-list-item:hover .ant-upload-list-item-info, +.ant-upload-list-picture-card .ant-upload-list-item:hover .ant-upload-list-item-info { + background: transparent; +} +.ant-upload-list-picture .ant-upload-list-item-uploading, +.ant-upload-list-picture-card .ant-upload-list-item-uploading { + border-style: dashed; +} +.ant-upload-list-picture .ant-upload-list-item-icon, +.ant-upload-list-picture-card .ant-upload-list-item-icon { + color: rgba(0, 0, 0, 0.25); +} +.ant-upload-list-picture .ant-upload-list-item-thumbnail.anticon:before, +.ant-upload-list-picture-card .ant-upload-list-item-thumbnail.anticon:before { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list-picture-card .ant-upload-list-item-info:before { + background-color: rgba(0, 0, 0, 0.5); +} +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye-o, +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete { + color: rgba(255, 255, 255, 0.85); +} +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-eye-o:hover, +.ant-upload-list-picture-card .ant-upload-list-item-actions .anticon-delete:hover { + color: #fff; +} +.ant-upload-list-picture-card .ant-upload-list-item-uploading.ant-upload-list-item { + background-color: #fafafa; +} +.ant-upload-list-picture-card .ant-upload-list-item-uploading-text { + color: rgba(0, 0, 0, 0.45); +} +.ant-upload-list .ant-upload-success-icon { + color: #52c41a; +} + +.drawer .drawer-content { + background: #001529; +} + +.ant-list-item-meta .taobao { + color: #ff4000; + border-radius: 4px; +} +.ant-list-item-meta .dingding { + background-color: #2eabff; + color: #fff; + border-radius: 4px; +} +.ant-list-item-meta .alipay { + color: #2eabff; + border-radius: 4px; +} +font.strong { + color: #52c41a; +} +font.medium { + color: #faad14; +} +font.weak { + color: #f5222d; +} diff --git a/cmdb-ui/public/index.html b/cmdb-ui/public/index.html new file mode 100644 index 0000000..4b516a5 --- /dev/null +++ b/cmdb-ui/public/index.html @@ -0,0 +1,23 @@ + + + + + + + CMDB + + + + +

    +
    +
    + +
    +
    +
    + + + diff --git a/cmdb-ui/public/loading/loading.css b/cmdb-ui/public/loading/loading.css new file mode 100644 index 0000000..a899eac --- /dev/null +++ b/cmdb-ui/public/loading/loading.css @@ -0,0 +1 @@ +#preloadingAnimation{position:fixed;left:0;top:0;height:100%;width:100%;background:#ffffff;user-select:none;z-index: 9999;overflow: hidden}.lds-roller{display:inline-block;position:relative;left:50%;top:50%;transform:translate(-50%,-50%);width:64px;height:64px;}.lds-roller div{animation:lds-roller 1.2s cubic-bezier(0.5,0,0.5,1) infinite;transform-origin:32px 32px;}.lds-roller div:after{content:" ";display:block;position:absolute;width:6px;height:6px;border-radius:50%;background:#13c2c2;margin:-3px 0 0 -3px;}.lds-roller div:nth-child(1){animation-delay:-0.036s;}.lds-roller div:nth-child(1):after{top:50px;left:50px;}.lds-roller div:nth-child(2){animation-delay:-0.072s;}.lds-roller div:nth-child(2):after{top:54px;left:45px;}.lds-roller div:nth-child(3){animation-delay:-0.108s;}.lds-roller div:nth-child(3):after{top:57px;left:39px;}.lds-roller div:nth-child(4){animation-delay:-0.144s;}.lds-roller div:nth-child(4):after{top:58px;left:32px;}.lds-roller div:nth-child(5){animation-delay:-0.18s;}.lds-roller div:nth-child(5):after{top:57px;left:25px;}.lds-roller div:nth-child(6){animation-delay:-0.216s;}.lds-roller div:nth-child(6):after{top:54px;left:19px;}.lds-roller div:nth-child(7){animation-delay:-0.252s;}.lds-roller div:nth-child(7):after{top:50px;left:14px;}.lds-roller div:nth-child(8){animation-delay:-0.288s;}.lds-roller div:nth-child(8):after{top:45px;left:10px;}#preloadingAnimation .load-tips{color: #13c2c2;font-size:2rem;position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);margin-top:80px;text-align:center;width:400px;height:64px;} @keyframes lds-roller{0%{transform:rotate(0deg);} 100%{transform:rotate(360deg);}} \ No newline at end of file diff --git a/cmdb-ui/public/loading/loading.html b/cmdb-ui/public/loading/loading.html new file mode 100644 index 0000000..9b93196 --- /dev/null +++ b/cmdb-ui/public/loading/loading.html @@ -0,0 +1 @@ +
    Loading
    \ No newline at end of file diff --git a/cmdb-ui/public/loading/option2/html_code_segment.html b/cmdb-ui/public/loading/option2/html_code_segment.html new file mode 100644 index 0000000..df81b26 --- /dev/null +++ b/cmdb-ui/public/loading/option2/html_code_segment.html @@ -0,0 +1,5 @@ +
    +
    + +
    +
    \ No newline at end of file diff --git a/cmdb-ui/public/loading/option2/loading.css b/cmdb-ui/public/loading/option2/loading.css new file mode 100644 index 0000000..c35cd73 --- /dev/null +++ b/cmdb-ui/public/loading/option2/loading.css @@ -0,0 +1 @@ +.preloading-animate{background:#ffffff;width:100%;height:100%;position:fixed;left:0;top:0;z-index:299;}.preloading-animate .preloading-wrapper{position:absolute;width:5rem;height:5rem;left:50%;top:50%;transform:translate(-50%,-50%);}.preloading-animate .preloading-wrapper .preloading-balls{font-size:5rem;} \ No newline at end of file diff --git a/cmdb-ui/public/loading/option2/loading.svg b/cmdb-ui/public/loading/option2/loading.svg new file mode 100644 index 0000000..7ff7322 --- /dev/null +++ b/cmdb-ui/public/loading/option2/loading.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cmdb-ui/public/qr_code.jpg b/cmdb-ui/public/qr_code.jpg new file mode 100644 index 0000000000000000000000000000000000000000..742cdc4888a588a9c7fdcf931202ec530d89e3d1 GIT binary patch literal 10568 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 literal 0 HcmV?d00001 diff --git a/cmdb-ui/src/App.vue b/cmdb-ui/src/App.vue new file mode 100644 index 0000000..baa95ea --- /dev/null +++ b/cmdb-ui/src/App.vue @@ -0,0 +1,41 @@ + + + + diff --git a/cmdb-ui/src/EventBus.js b/cmdb-ui/src/EventBus.js new file mode 100644 index 0000000..8853b4d --- /dev/null +++ b/cmdb-ui/src/EventBus.js @@ -0,0 +1,3 @@ +import Vue from 'vue' + +export default new Vue() diff --git a/cmdb-ui/src/api/acl/app.js b/cmdb-ui/src/api/acl/app.js new file mode 100644 index 0000000..c134f36 --- /dev/null +++ b/cmdb-ui/src/api/acl/app.js @@ -0,0 +1,34 @@ +import { axios } from '@/utils/request' + +const urlPrefix = '/v1/acl' + +export function searchRole (params) { + return axios({ + url: urlPrefix + `/roles`, + method: 'GET', + params: params + }) +} + +export function addRole (params) { + return axios({ + url: urlPrefix + '/roles', + method: 'POST', + data: params + }) +} + +export function updateRoleById (id, params) { + return axios({ + url: urlPrefix + `/roles/${id}`, + method: 'PUT', + data: params + }) +} + +export function deleteRoleById (id) { + return axios({ + url: urlPrefix + `/roles/${id}`, + method: 'DELETE' + }) +} diff --git a/cmdb-ui/src/api/acl/permission.js b/cmdb-ui/src/api/acl/permission.js new file mode 100644 index 0000000..3d78a82 --- /dev/null +++ b/cmdb-ui/src/api/acl/permission.js @@ -0,0 +1,56 @@ +import { axios } from '@/utils/request' + +const urlPrefix = '/v1/acl' + +export function getResourcePerms (resourceID) { + return axios({ + url: urlPrefix + `/resources/${resourceID}/permissions`, + method: 'GET' + }) +} + +export function getResourceTypePerms (typeID) { + return axios({ + url: urlPrefix + `/resource_types/${typeID}/perms`, + method: 'GET' + }) +} + +export function getResourceGroupPerms (resourceGroupID) { + return axios({ + url: urlPrefix + `/resource_groups/${resourceGroupID}/permissions`, + method: 'GET' + }) +} + +export function setRoleResourcePerm (rid, resourceID, params) { + return axios({ + url: urlPrefix + `/roles/${rid}/resources/${resourceID}/grant`, + method: 'POST', + data: params + }) +} + +export function setRoleResourceGroupPerm (rid, resourceGroupID, params) { + return axios({ + url: urlPrefix + `/roles/${rid}/resource_groups/${resourceGroupID}/grant`, + method: 'POST', + data: params + }) +} + +export function deleteRoleResourcePerm (rid, resourceID, params) { + return axios({ + url: urlPrefix + `/roles/${rid}/resources/${resourceID}/revoke`, + method: 'POST', + data: params + }) +} + +export function deleteRoleResourceGroupPerm (rid, resourceGroupID, params) { + return axios({ + url: urlPrefix + `/roles/${rid}/resource_groups/${resourceGroupID}/revoke`, + method: 'POST', + data: params + }) +} diff --git a/cmdb-ui/src/api/acl/resource.js b/cmdb-ui/src/api/acl/resource.js new file mode 100644 index 0000000..d96eae8 --- /dev/null +++ b/cmdb-ui/src/api/acl/resource.js @@ -0,0 +1,65 @@ +import { axios } from '@/utils/request' + +const urlPrefix = '/v1/acl' + +export function searchResource (params) { + return axios({ + url: urlPrefix + `/resources`, + method: 'GET', + params: params + }) +} + +export function addResource (params) { + return axios({ + url: urlPrefix + '/resources', + method: 'POST', + data: params + }) +} + +export function updateResourceById (id, params) { + return axios({ + url: urlPrefix + `/resources/${id}`, + method: 'PUT', + data: params + }) +} + +export function deleteResourceById (id) { + return axios({ + url: urlPrefix + `/resources/${id}`, + method: 'DELETE' + }) +} + +export function searchResourceType (params) { + return axios({ + url: urlPrefix + `/resource_types`, + method: 'GET', + params: params + }) +} + +export function addResourceType (params) { + return axios({ + url: urlPrefix + '/resource_types', + method: 'POST', + data: params + }) +} + +export function updateResourceTypeById (id, params) { + return axios({ + url: urlPrefix + `/resource_types/${id}`, + method: 'PUT', + data: params + }) +} + +export function deleteResourceTypeById (id) { + return axios({ + url: urlPrefix + `/resource_types/${id}`, + method: 'DELETE' + }) +} diff --git a/cmdb-ui/src/api/acl/role.js b/cmdb-ui/src/api/acl/role.js new file mode 100644 index 0000000..312527b --- /dev/null +++ b/cmdb-ui/src/api/acl/role.js @@ -0,0 +1,66 @@ +import { axios } from '@/utils/request' + +const urlPrefix = '/v1/acl' + +export function searchRole (params) { + return axios({ + url: urlPrefix + `/roles`, + method: 'GET', + params: params + }) +} + +export function addRole (params) { + return axios({ + url: urlPrefix + '/roles', + method: 'POST', + data: params + }) +} + +export function updateRoleById (id, params) { + return axios({ + url: urlPrefix + `/roles/${id}`, + method: 'PUT', + data: params + }) +} + +export function deleteRoleById (id) { + return axios({ + url: urlPrefix + `/roles/${id}`, + method: 'DELETE' + }) +} + +export function addParentRole (id, otherID) { + return axios({ + url: urlPrefix + `/roles/${id}/parents`, + method: 'POST', + data: { parent_id: otherID } + }) +} + +export function addChildRole (id, otherID) { + return axios({ + url: urlPrefix + `/roles/${otherID}/parents`, + method: 'POST', + data: { parent_id: id } + }) +} + +export function delParentRole (cid, pid) { + return axios({ + url: urlPrefix + `/roles/${cid}/parents`, + method: 'DELETE', + data: { parent_id: pid } + }) +} + +export function delChildRole (pid, cid) { + return axios({ + url: urlPrefix + `/roles/${cid}/parents`, + method: 'DELETE', + data: { parent_id: pid } + }) +} diff --git a/cmdb-ui/src/api/acl/user.js b/cmdb-ui/src/api/acl/user.js new file mode 100644 index 0000000..5de6201 --- /dev/null +++ b/cmdb-ui/src/api/acl/user.js @@ -0,0 +1,41 @@ +import { axios } from '@/utils/request' + +const urlPrefix = '/v1/acl' + +export function currentUser () { + return axios({ + url: urlPrefix + `/users/info`, + method: 'GET' + }) +} + +export function searchUser (params) { + return axios({ + url: urlPrefix + `/users`, + method: 'GET', + params: params + }) +} + +export function addUser (params) { + return axios({ + url: urlPrefix + '/users', + method: 'POST', + data: params + }) +} + +export function updateUserById (id, params) { + return axios({ + url: urlPrefix + `/users/${id}`, + method: 'PUT', + data: params + }) +} + +export function deleteUserById (id) { + return axios({ + url: urlPrefix + `/users/${id}`, + method: 'DELETE' + }) +} diff --git a/cmdb-ui/src/api/cmdb/CIRelation.js b/cmdb-ui/src/api/cmdb/CIRelation.js new file mode 100644 index 0000000..7401173 --- /dev/null +++ b/cmdb-ui/src/api/cmdb/CIRelation.js @@ -0,0 +1,30 @@ +import { axios } from '@/utils/request' + +export function getFirstCIs (ciId) { + return axios({ + url: '/v0.1/ci_relations/' + ciId + '/first_cis', + method: 'GET' + }) +} + +export function getSecondCIs (ciId) { + return axios({ + url: '/v0.1/ci_relations/' + ciId + '/second_cis', + method: 'GET' + }) +} + +export function searchCIRelation (params) { + return axios({ + url: `/v0.1/ci_relations/s?${params}`, + method: 'GET' + }) +} + +export function statisticsCIRelation (params) { + return axios({ + url: '/v0.1/ci_relations/statistics', + method: 'GET', + params: params + }) +} diff --git a/cmdb-ui/src/api/cmdb/CIType.js b/cmdb-ui/src/api/cmdb/CIType.js new file mode 100644 index 0000000..ebf826e --- /dev/null +++ b/cmdb-ui/src/api/cmdb/CIType.js @@ -0,0 +1,123 @@ +import { axios } from '@/utils/request' + +/** + * 获取 所有的 ci_types + * @param parameter + * @returns {AxiosPromise} + */ +export function getCITypes (parameter) { + return axios({ + url: '/v0.1/ci_types', + method: 'GET', + params: parameter + }) +} + +/** + * 获取 某个 ci_types + * @param CITypeName + * @param parameter + * @returns {AxiosPromise} + */ +export function getCIType (CITypeName, parameter) { + return axios({ + url: `/v0.1/ci_types/${CITypeName}`, + method: 'GET', + params: parameter + }) +} + +/** + * 创建 ci_type + * @param data + * @returns {AxiosPromise} + */ +export function createCIType (data) { + return axios({ + url: '/v0.1/ci_types', + method: 'POST', + data: data + }) +} + +/** + * 更新 ci_type + * @param CITypeId + * @param data + * @returns {AxiosPromise} + */ +export function updateCIType (CITypeId, data) { + return axios({ + url: `/v0.1/ci_types/${CITypeId}`, + method: 'PUT', + data: data + }) +} + +/** + * 删除 ci_type + * @param CITypeId + * @returns {AxiosPromise} + */ +export function deleteCIType (CITypeId) { + return axios({ + url: `/v0.1/ci_types/${CITypeId}`, + method: 'DELETE' + }) +} + +/** + * 获取 某个 ci_type 的分组 + * @param CITypeId + * @param data + * @returns {AxiosPromise} + */ +export function getCITypeGroupById (CITypeId, data) { + return axios({ + url: `/v0.1/ci_types/${CITypeId}/attribute_groups`, + method: 'GET', + params: data + }) +} + +/** + * 保存 某个 ci_type 的分组 + * @param CITypeId + * @param data + * @returns {AxiosPromise} + */ +export function createCITypeGroupById (CITypeId, data) { + return axios({ + url: `/v0.1/ci_types/${CITypeId}/attribute_groups`, + method: 'POST', + data: data + }) +} + +/** + * 修改 某个 ci_type 的分组 + * @param groupId + * @param data + * @returns {AxiosPromise} + */ +export function updateCITypeGroupById (groupId, data) { + return axios({ + url: `/v0.1/ci_types/attribute_groups/${groupId}`, + method: 'PUT', + data: data + }) +} + +/** + * 删除 某个 ci_type 的分组 + * @param groupId + * @param data + * @returns {AxiosPromise} + */ +export function deleteCITypeGroupById (groupId, data) { + return axios({ + url: `/v0.1/ci_types/attribute_groups/${groupId}`, + method: 'delete', + data: data + }) +} diff --git a/cmdb-ui/src/api/cmdb/CITypeAttr.js b/cmdb-ui/src/api/cmdb/CITypeAttr.js new file mode 100644 index 0000000..f1dd0b1 --- /dev/null +++ b/cmdb-ui/src/api/cmdb/CITypeAttr.js @@ -0,0 +1,124 @@ +import { axios } from '@/utils/request' + +/** + * 获取 ci_type 的属性 + * @param CITypeName + * @param parameter + * @returns {AxiosPromise} + */ +export function getCITypeAttributesByName (CITypeName, parameter) { + return axios({ + + url: `/v0.1/ci_types/${CITypeName}/attributes`, + method: 'get', + params: parameter + }) +} + +/** + * 获取 ci_type 的属性 + * @param CITypeId + * @param parameter + * @returns {AxiosPromise} + */ +export function getCITypeAttributesById (CITypeId, parameter) { + return axios({ + url: `/v0.1/ci_types/${CITypeId}/attributes`, + method: 'get', + params: parameter + }) +} + +/** + * 更新属性 + * @param attrId + * @param data + * @returns {AxiosPromise} + */ +export function updateAttributeById (attrId, data) { + return axios({ + url: `/v0.1/attributes/${attrId}`, + method: 'put', + data: data + }) +} + +/** + * 添加属性 + * @param data + * @returns {AxiosPromise} + */ +export function createAttribute (data) { + return axios({ + url: `/v0.1/attributes`, + method: 'post', + data: data + }) +} + +/** + * 搜索属性/ 获取所有的属性 + * @param data + * @returns {AxiosPromise} + */ +export function searchAttributes (params) { + return axios({ + url: `/v0.1/attributes/s`, + method: 'get', + params: params + }) +} + +/** + * 删除属性 + * @param attrId + * @returns {AxiosPromise} + */ +export function deleteAttributesById (attrId) { + return axios({ + url: `/v0.1/attributes/${attrId}`, + method: 'delete' + }) +} + +/** + * 绑定ci_type 属性 + * @param CITypeId + * @param data + * @returns {AxiosPromise} + */ +export function createCITypeAttributes (CITypeId, data) { + return axios({ + url: `/v0.1/ci_types/${CITypeId}/attributes`, + method: 'post', + data: data + }) +} + +/** + * 更新ci_type 属性 + * @param CITypeId + * @param data + * @returns {AxiosPromise} + */ +export function updateCITypeAttributesById (CITypeId, data) { + return axios({ + url: `/v0.1/ci_types/${CITypeId}/attributes`, + method: 'put', + data: data + }) +} + +/** + * 删除ci_type 属性 + * @param CITypeId + * @param data + * @returns {AxiosPromise} + */ +export function deleteCITypeAttributesById (CITypeId, data) { + return axios({ + url: `/v0.1/ci_types/${CITypeId}/attributes`, + method: 'delete', + data: data + }) +} diff --git a/cmdb-ui/src/api/cmdb/CITypeRelation.js b/cmdb-ui/src/api/cmdb/CITypeRelation.js new file mode 100644 index 0000000..cc64572 --- /dev/null +++ b/cmdb-ui/src/api/cmdb/CITypeRelation.js @@ -0,0 +1,39 @@ +import { axios } from '@/utils/request' + +export function getCITypeChildren (CITypeID, parameter) { + return axios({ + url: '/v0.1/ci_type_relations/' + CITypeID + '/children', + method: 'GET', + params: parameter + }) +} + +export function getCITypeParent (CITypeID) { + return axios({ + url: '/v0.1/ci_type_relations/' + CITypeID + '/parents', + method: 'GET' + }) +} + +export function getCITypeRelations () { + return axios({ + url: '/v0.1/ci_type_relations', + method: 'GET' + }) +} + +export function createRelation (parentId, childrenId, relationTypeId) { + return axios({ + url: `/v0.1/ci_type_relations/${parentId}/${childrenId}`, + method: 'POST', + data: { relation_type_id: relationTypeId } + }) +} + +export function deleteRelation (parentId, childrenId) { + return axios({ + url: `/v0.1/ci_type_relations/${parentId}/${childrenId}`, + method: 'DELETE' + + }) +} diff --git a/cmdb-ui/src/api/cmdb/batch.js b/cmdb-ui/src/api/cmdb/batch.js new file mode 100644 index 0000000..3a88e13 --- /dev/null +++ b/cmdb-ui/src/api/cmdb/batch.js @@ -0,0 +1,67 @@ +import XLSX from 'xlsx' +import { axios } from '@/utils/request' + +export function processFile (fileObj) { + const promise = new Promise(function (resolve) { + const reader = new FileReader() + reader.readAsBinaryString(fileObj) + reader.onload = function (e) { + const data = e.target.result + const workbook = XLSX.read(data, { type: 'binary' }) + const sheet = workbook.Sheets[workbook.SheetNames[0]] + const lt = XLSX.utils.sheet_to_json(sheet, { header: 1 }) + resolve(lt) + } + }) + return promise +} + +export function uploadData (ciId, data) { + data.ci_type = ciId + return axios({ + url: '/v0.1/ci', + method: 'PUT', + data: data + }) +} + +export function writeCsv (columns) { + const { Parser } = require('json2csv') + const fields = columns + const opts = { fields } + const p = new Parser(opts) + return p.parse([]) +} + +export function writeExcel (columns, name) { + const worksheet = XLSX.utils.aoa_to_sheet([columns]) + const newWorkBoot = XLSX.utils.book_new() + XLSX.utils.book_append_sheet(newWorkBoot, worksheet, name) + const s = XLSX.write(newWorkBoot, { type: 'array' }) + console.log(s) + return s +} + +// 判断一个数组元素是否都为空的 +export function any (ArrayList) { + let flag = false + for (let i = 0; i < ArrayList.length; i++) { + if (ArrayList[i]) { + flag = true + return flag + } + } + return false +} + +// 去除一个二维数组 底下为空的部分 +export function filterNull (twoDimArray) { + console.log(twoDimArray) + const newArray = [] + for (let i = 0; i < twoDimArray.length; i++) { + if (any(twoDimArray[i])) { + newArray.push(twoDimArray[i]) + } + } + return newArray +} diff --git a/cmdb-ui/src/api/cmdb/ci.js b/cmdb-ui/src/api/cmdb/ci.js new file mode 100644 index 0000000..f06ee48 --- /dev/null +++ b/cmdb-ui/src/api/cmdb/ci.js @@ -0,0 +1,41 @@ +import { axios } from '@/utils/request' + +const urlPrefix = '/v0.1' + +export function searchCI (params) { + return axios({ + url: urlPrefix + `/ci/s?${params}`, + method: 'GET' + }) +} + +export function addCI (params) { + return axios({ + url: urlPrefix + '/ci', + method: 'POST', + data: params + }) +} + +export function updateCI (id, params) { + return axios({ + url: urlPrefix + `/ci/${id}`, + method: 'PUT', + data: params + }) +} + +export function deleteCI (ciId) { + return axios({ + url: urlPrefix + `/ci/${ciId}`, + method: 'DELETE' + }) +} + +// 获取单个ci实例 +export function getCIById (ciId) { + return axios({ + url: urlPrefix + `/ci/${ciId}`, + method: 'GET' + }) +} diff --git a/cmdb-ui/src/api/cmdb/history.js b/cmdb-ui/src/api/cmdb/history.js new file mode 100644 index 0000000..443f7c6 --- /dev/null +++ b/cmdb-ui/src/api/cmdb/history.js @@ -0,0 +1,8 @@ +import { axios } from '@/utils/request' + +export function getCIHistory (ciId) { + return axios({ + url: `/v0.1/history/ci/${ciId}`, + method: 'GET' + }) +} diff --git a/cmdb-ui/src/api/cmdb/preference.js b/cmdb-ui/src/api/cmdb/preference.js new file mode 100644 index 0000000..ba24c73 --- /dev/null +++ b/cmdb-ui/src/api/cmdb/preference.js @@ -0,0 +1,64 @@ +import { axios } from '@/utils/request' + +export function getPreference (instance = true, tree = null) { + return axios({ + url: '/v0.1/preference/ci_types', + method: 'GET', + params: { instance: instance, tree: tree } + }) +} + +export function getSubscribeAttributes (ciTypeId) { + return axios({ + url: `/v0.1/preference/ci_types/${ciTypeId}/attributes`, + method: 'GET' + }) +} + +export function getSubscribeTreeView () { + return axios({ + url: '/v0.1/preference/tree/view', + method: 'GET' + }) +} + +export function subscribeCIType (ciTypeId, attrs) { + return axios({ + url: `/v0.1/preference/ci_types/${ciTypeId}/attributes`, + method: 'POST', + data: { + attr: attrs + } + }) +} + +export function subscribeTreeView (ciTypeId, levels) { + return axios({ + url: `/v0.1/preference/tree/view`, + method: 'POST', + data: { type_id: ciTypeId, levels: levels } + }) +} + +export function getRelationView () { + return axios({ + url: `/v0.1/preference/relation/view`, + method: 'GET' + }) +} + +export function deleteRelationView (viewName) { + return axios({ + url: `/v0.1/preference/relation/view`, + method: 'DELETE', + data: { name: viewName } + }) +} + +export function subscribeRelationView (payload) { + return axios({ + url: `/v0.1/preference/relation/view`, + method: 'POST', + data: payload + }) +} diff --git a/cmdb-ui/src/api/cmdb/relationType.js b/cmdb-ui/src/api/cmdb/relationType.js new file mode 100644 index 0000000..831b0ae --- /dev/null +++ b/cmdb-ui/src/api/cmdb/relationType.js @@ -0,0 +1,31 @@ +import { axios } from '@/utils/request' + +export function getRelationTypes () { + return axios({ + url: '/v0.1/relation_types', + method: 'GET' + }) +} + +export function addRelationType (payload) { + return axios({ + url: `/v0.1/relation_types`, + method: 'POST', + data: payload + }) +} + +export function updateRelationType (rtId, payload) { + return axios({ + url: `/v0.1/relation_types/${rtId}`, + method: 'PUT', + data: payload + }) +} + +export function deleteRelationType (rtId) { + return axios({ + url: `/v0.1/relation_types/${rtId}`, + method: 'DELETE' + }) +} diff --git a/cmdb-ui/src/api/index.js b/cmdb-ui/src/api/index.js new file mode 100644 index 0000000..a0044ea --- /dev/null +++ b/cmdb-ui/src/api/index.js @@ -0,0 +1,14 @@ +import config from '@/config/defaultSettings' + +const api = { + Login: config.useSSO ? '/api/sso/login' : '/login', + Logout: config.useSSO ? '/api/sso/logout' : '/logout', + ForgePassword: '/auth/forge-password', + Register: '/auth/register', + twoStepCode: '/auth/2step-code', + SendSms: '/account/sms', + SendSmsErr: '/account/sms_err', + // get my info + UserInfo: '/v1/acl/users/info' +} +export default api diff --git a/cmdb-ui/src/api/login.js b/cmdb-ui/src/api/login.js new file mode 100644 index 0000000..215950b --- /dev/null +++ b/cmdb-ui/src/api/login.js @@ -0,0 +1,66 @@ +import api from './index' +import { axios } from '@/utils/request' +import config from '@/config/defaultSettings' +/** + * login func + * parameter: { + * username: '', + * password: '', + * remember_me: true, + * captcha: '12345' + * } + * @param parameter + * @returns {*} + */ +export function login (parameter) { + return axios({ + url: api.Login, + method: 'post', + data: parameter + }) +} + +export function getSmsCaptcha (parameter) { + return axios({ + url: api.SendSms, + method: 'post', + data: parameter + }) +} + +export function getInfo () { + return axios({ + url: api.UserInfo, + method: 'get', + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + }) +} + +export function logout () { + console.log('logout........') + if (config.useSSO) { + window.location.replace(api.Logout) + } else { + return axios({ + url: api.Logout, + method: 'post', + headers: { + 'Content-Type': 'application/json;charset=UTF-8' + } + }) + } +} + +/** + * get user 2step code open? + * @param parameter {*} + */ +export function get2step (parameter) { + return axios({ + url: api.twoStepCode, + method: 'post', + data: parameter + }) +} diff --git a/cmdb-ui/src/api/manage.js b/cmdb-ui/src/api/manage.js new file mode 100644 index 0000000..1c36a1e --- /dev/null +++ b/cmdb-ui/src/api/manage.js @@ -0,0 +1,62 @@ +import { axios } from '@/utils/request' + +const api = { + user: '/user', + role: '/role', + service: '/service', + permission: '/permission', + permissionNoPager: '/permission/no-pager', + orgTree: '/org/tree' +} + +export default api + +export function getUserList (parameter) { + return axios({ + url: api.user, + method: 'get', + params: parameter + }) +} + +export function getRoleList (parameter) { + return axios({ + url: api.role, + method: 'get', + params: parameter + }) +} + +export function getServiceList (parameter) { + return axios({ + url: api.service, + method: 'get', + params: parameter + }) +} + +export function getPermissions (parameter) { + return axios({ + url: api.permissionNoPager, + method: 'get', + params: parameter + }) +} + +export function getOrgTree (parameter) { + return axios({ + url: api.orgTree, + method: 'get', + params: parameter + }) +} + +// id == 0 add post +// id != 0 update put +export function saveService (parameter) { + return axios({ + url: api.service, + method: parameter.id === 0 ? 'post' : 'put', + data: parameter + }) +} diff --git a/cmdb-ui/src/assets/background.svg b/cmdb-ui/src/assets/background.svg new file mode 100644 index 0000000..89c2597 --- /dev/null +++ b/cmdb-ui/src/assets/background.svg @@ -0,0 +1,69 @@ + + + + Group 21 + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cmdb-ui/src/assets/icons/bx-analyse.svg b/cmdb-ui/src/assets/icons/bx-analyse.svg new file mode 100644 index 0000000..b02a8d6 --- /dev/null +++ b/cmdb-ui/src/assets/icons/bx-analyse.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/cmdb-ui/src/assets/logo.png b/cmdb-ui/src/assets/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..e887375c355c8045315ca9f39de93ec21d5e71d9 GIT binary patch literal 20228 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 + + + Vue + Created with Sketch. + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/cmdb-ui/src/components/ArticleListContent/ArticleListContent.vue b/cmdb-ui/src/components/ArticleListContent/ArticleListContent.vue new file mode 100644 index 0000000..8f39978 --- /dev/null +++ b/cmdb-ui/src/components/ArticleListContent/ArticleListContent.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/cmdb-ui/src/components/ArticleListContent/index.js b/cmdb-ui/src/components/ArticleListContent/index.js new file mode 100644 index 0000000..37d35c7 --- /dev/null +++ b/cmdb-ui/src/components/ArticleListContent/index.js @@ -0,0 +1,3 @@ +import ArticleListContent from './ArticleListContent' + +export default ArticleListContent diff --git a/cmdb-ui/src/components/AvatarList/Item.vue b/cmdb-ui/src/components/AvatarList/Item.vue new file mode 100644 index 0000000..26e149e --- /dev/null +++ b/cmdb-ui/src/components/AvatarList/Item.vue @@ -0,0 +1,46 @@ + + + diff --git a/cmdb-ui/src/components/AvatarList/List.vue b/cmdb-ui/src/components/AvatarList/List.vue new file mode 100644 index 0000000..446ceeb --- /dev/null +++ b/cmdb-ui/src/components/AvatarList/List.vue @@ -0,0 +1,99 @@ + + + diff --git a/cmdb-ui/src/components/AvatarList/index.js b/cmdb-ui/src/components/AvatarList/index.js new file mode 100644 index 0000000..dd6bb8b --- /dev/null +++ b/cmdb-ui/src/components/AvatarList/index.js @@ -0,0 +1,4 @@ +import AvatarList from './List' +import './index.less' + +export default AvatarList diff --git a/cmdb-ui/src/components/AvatarList/index.less b/cmdb-ui/src/components/AvatarList/index.less new file mode 100644 index 0000000..9ce073f --- /dev/null +++ b/cmdb-ui/src/components/AvatarList/index.less @@ -0,0 +1,60 @@ +@import "../index"; + +@avatar-list-prefix-cls: ~"@{ant-pro-prefix}-avatar-list"; +@avatar-list-item-prefix-cls: ~"@{ant-pro-prefix}-avatar-list-item"; + +.@{avatar-list-prefix-cls} { + display: inline-block; + + ul { + list-style: none; + display: inline-block; + padding: 0; + margin: 0 0 0 8px; + font-size: 0; + } +} + +.@{avatar-list-item-prefix-cls} { + display: inline-block; + font-size: @font-size-base; + margin-left: -8px; + width: @avatar-size-base; + height: @avatar-size-base; + + :global { + .ant-avatar { + border: 1px solid #fff; + cursor: pointer; + } + } + + &.large { + width: @avatar-size-lg; + height: @avatar-size-lg; + } + + &.small { + width: @avatar-size-sm; + height: @avatar-size-sm; + } + + &.mini { + width: 20px; + height: 20px; + + :global { + .ant-avatar { + width: 20px; + height: 20px; + line-height: 20px; + + .ant-avatar-string { + font-size: 12px; + line-height: 18px; + } + } + } + } +} + diff --git a/cmdb-ui/src/components/AvatarList/index.md b/cmdb-ui/src/components/AvatarList/index.md new file mode 100644 index 0000000..dc9c092 --- /dev/null +++ b/cmdb-ui/src/components/AvatarList/index.md @@ -0,0 +1,64 @@ +# AvatarList 用户头像列表 + + +一组用户头像,常用在项目/团队成员列表。可通过设置 `size` 属性来指定头像大小。 + + + +引用方式: + +```javascript +import AvatarList from '@/components/AvatarList' +const AvatarListItem = AvatarList.AvatarItem + +export default { + components: { + AvatarList, + AvatarListItem + } +} +``` + + + +## 代码演示 [demo](https://pro.loacg.com/test/home) + +```html + + + + + +``` +或 +```html + + + + + + + + + +``` + + + +## API + +### AvatarList + +| 参数 | 说明 | 类型 | 默认值 | +| ---------------- | -------- | ---------------------------------- | --------- | +| size | 头像大小 | `large`、`small` 、`mini`, `default` | `default` | +| maxLength | 要显示的最大项目 | number | - | +| excessItemsStyle | 多余的项目风格 | CSSProperties | - | + +### AvatarList.Item + +| 参数 | 说明 | 类型 | 默认值 | +| ---- | ------ | --------- | --- | +| tips | 头像展示文案 | string | - | +| src | 头像图片连接 | string | - | + diff --git a/cmdb-ui/src/components/Charts/Bar.vue b/cmdb-ui/src/components/Charts/Bar.vue new file mode 100644 index 0000000..4482845 --- /dev/null +++ b/cmdb-ui/src/components/Charts/Bar.vue @@ -0,0 +1,62 @@ + + + diff --git a/cmdb-ui/src/components/Charts/ChartCard.vue b/cmdb-ui/src/components/Charts/ChartCard.vue new file mode 100644 index 0000000..fc1f425 --- /dev/null +++ b/cmdb-ui/src/components/Charts/ChartCard.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/Liquid.vue b/cmdb-ui/src/components/Charts/Liquid.vue new file mode 100644 index 0000000..4019fb1 --- /dev/null +++ b/cmdb-ui/src/components/Charts/Liquid.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/MiniArea.vue b/cmdb-ui/src/components/Charts/MiniArea.vue new file mode 100644 index 0000000..58fe92c --- /dev/null +++ b/cmdb-ui/src/components/Charts/MiniArea.vue @@ -0,0 +1,56 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/MiniBar.vue b/cmdb-ui/src/components/Charts/MiniBar.vue new file mode 100644 index 0000000..beac404 --- /dev/null +++ b/cmdb-ui/src/components/Charts/MiniBar.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/MiniProgress.vue b/cmdb-ui/src/components/Charts/MiniProgress.vue new file mode 100644 index 0000000..e691363 --- /dev/null +++ b/cmdb-ui/src/components/Charts/MiniProgress.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/MiniSmoothArea.vue b/cmdb-ui/src/components/Charts/MiniSmoothArea.vue new file mode 100644 index 0000000..e5455c2 --- /dev/null +++ b/cmdb-ui/src/components/Charts/MiniSmoothArea.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/Radar.vue b/cmdb-ui/src/components/Charts/Radar.vue new file mode 100644 index 0000000..5ee88ad --- /dev/null +++ b/cmdb-ui/src/components/Charts/Radar.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/RankList.vue b/cmdb-ui/src/components/Charts/RankList.vue new file mode 100644 index 0000000..afb56a1 --- /dev/null +++ b/cmdb-ui/src/components/Charts/RankList.vue @@ -0,0 +1,77 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/TagCloud.vue b/cmdb-ui/src/components/Charts/TagCloud.vue new file mode 100644 index 0000000..74d1b3f --- /dev/null +++ b/cmdb-ui/src/components/Charts/TagCloud.vue @@ -0,0 +1,113 @@ + + + diff --git a/cmdb-ui/src/components/Charts/TransferBar.vue b/cmdb-ui/src/components/Charts/TransferBar.vue new file mode 100644 index 0000000..7f96f0b --- /dev/null +++ b/cmdb-ui/src/components/Charts/TransferBar.vue @@ -0,0 +1,64 @@ + + + diff --git a/cmdb-ui/src/components/Charts/Trend.vue b/cmdb-ui/src/components/Charts/Trend.vue new file mode 100644 index 0000000..2dce37e --- /dev/null +++ b/cmdb-ui/src/components/Charts/Trend.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/cmdb-ui/src/components/Charts/chart.less b/cmdb-ui/src/components/Charts/chart.less new file mode 100644 index 0000000..e04fa09 --- /dev/null +++ b/cmdb-ui/src/components/Charts/chart.less @@ -0,0 +1,13 @@ +.antv-chart-mini { + position: relative; + width: 100%; + + .chart-wrapper { + position: absolute; + bottom: -28px; + width: 100%; + +/* margin: 0 -5px; + overflow: hidden;*/ + } +} \ No newline at end of file diff --git a/cmdb-ui/src/components/Charts/smooth.area.less b/cmdb-ui/src/components/Charts/smooth.area.less new file mode 100644 index 0000000..eabdb75 --- /dev/null +++ b/cmdb-ui/src/components/Charts/smooth.area.less @@ -0,0 +1,14 @@ +@import "../index"; + +@smoothArea-prefix-cls: ~"@{ant-pro-prefix}-smooth-area"; + +.@{smoothArea-prefix-cls} { + position: relative; + width: 100%; + + .chart-wrapper { + position: absolute; + bottom: -28px; + width: 100%; + } +} \ No newline at end of file diff --git a/cmdb-ui/src/components/CountDown/CountDown.vue b/cmdb-ui/src/components/CountDown/CountDown.vue new file mode 100644 index 0000000..575dd4a --- /dev/null +++ b/cmdb-ui/src/components/CountDown/CountDown.vue @@ -0,0 +1,102 @@ + + + + + diff --git a/cmdb-ui/src/components/CountDown/index.js b/cmdb-ui/src/components/CountDown/index.js new file mode 100644 index 0000000..35e954f --- /dev/null +++ b/cmdb-ui/src/components/CountDown/index.js @@ -0,0 +1,3 @@ +import CountDown from './CountDown' + +export default CountDown diff --git a/cmdb-ui/src/components/CountDown/index.md b/cmdb-ui/src/components/CountDown/index.md new file mode 100644 index 0000000..fd46809 --- /dev/null +++ b/cmdb-ui/src/components/CountDown/index.md @@ -0,0 +1,34 @@ +# CountDown 倒计时 + +倒计时组件。 + + + +引用方式: + +```javascript +import CountDown from '@/components/CountDown/CountDown' + +export default { + components: { + CountDown + } +} +``` + + + +## 代码演示 [demo](https://pro.loacg.com/test/home) + +```html + +``` + + + +## API + +| 参数 | 说明 | 类型 | 默认值 | +|----------|------------------------------------------|-------------|-------| +| target | 目标时间 | Date | - | +| onEnd | 倒计时结束回调 | funtion | -| diff --git a/cmdb-ui/src/components/DescriptionList/DescriptionList.vue b/cmdb-ui/src/components/DescriptionList/DescriptionList.vue new file mode 100644 index 0000000..f504477 --- /dev/null +++ b/cmdb-ui/src/components/DescriptionList/DescriptionList.vue @@ -0,0 +1,153 @@ + + + + + diff --git a/cmdb-ui/src/components/DescriptionList/index.js b/cmdb-ui/src/components/DescriptionList/index.js new file mode 100644 index 0000000..7aed83d --- /dev/null +++ b/cmdb-ui/src/components/DescriptionList/index.js @@ -0,0 +1,2 @@ +import DescriptionList from './DescriptionList' +export default DescriptionList diff --git a/cmdb-ui/src/components/Editor/QuillEditor.vue b/cmdb-ui/src/components/Editor/QuillEditor.vue new file mode 100644 index 0000000..731701c --- /dev/null +++ b/cmdb-ui/src/components/Editor/QuillEditor.vue @@ -0,0 +1,82 @@ + + + + + diff --git a/cmdb-ui/src/components/Editor/WangEditor.vue b/cmdb-ui/src/components/Editor/WangEditor.vue new file mode 100644 index 0000000..d9c71c7 --- /dev/null +++ b/cmdb-ui/src/components/Editor/WangEditor.vue @@ -0,0 +1,57 @@ + + + + + diff --git a/cmdb-ui/src/components/Ellipsis/Ellipsis.vue b/cmdb-ui/src/components/Ellipsis/Ellipsis.vue new file mode 100644 index 0000000..5d59200 --- /dev/null +++ b/cmdb-ui/src/components/Ellipsis/Ellipsis.vue @@ -0,0 +1,64 @@ + diff --git a/cmdb-ui/src/components/Ellipsis/index.js b/cmdb-ui/src/components/Ellipsis/index.js new file mode 100644 index 0000000..91e3ff4 --- /dev/null +++ b/cmdb-ui/src/components/Ellipsis/index.js @@ -0,0 +1,3 @@ +import Ellipsis from './Ellipsis' + +export default Ellipsis diff --git a/cmdb-ui/src/components/Ellipsis/index.md b/cmdb-ui/src/components/Ellipsis/index.md new file mode 100644 index 0000000..f528ac7 --- /dev/null +++ b/cmdb-ui/src/components/Ellipsis/index.md @@ -0,0 +1,38 @@ +# Ellipsis 文本自动省略号 + +文本过长自动处理省略号,支持按照文本长度和最大行数两种方式截取。 + + + +引用方式: + +```javascript +import Ellipsis from '@/components/Ellipsis' + +export default { + components: { + Ellipsis + } +} +``` + + + +## 代码演示 [demo](https://pro.loacg.com/test/home) + +```html + + There were injuries alleged in three cases in 2015, and a + fourth incident in September, according to the safety recall report. After meeting with US regulators in October, the firm decided to issue a voluntary recall. + +``` + + + +## API + + +参数 | 说明 | 类型 | 默认值 +----|------|-----|------ +tooltip | 移动到文本展示完整内容的提示 | boolean | - +length | 在按照长度截取下的文本最大字符数,超过则截取省略 | number | - \ No newline at end of file diff --git a/cmdb-ui/src/components/Exception/ExceptionPage.vue b/cmdb-ui/src/components/Exception/ExceptionPage.vue new file mode 100644 index 0000000..cc10801 --- /dev/null +++ b/cmdb-ui/src/components/Exception/ExceptionPage.vue @@ -0,0 +1,130 @@ + + + + diff --git a/cmdb-ui/src/components/Exception/index.js b/cmdb-ui/src/components/Exception/index.js new file mode 100644 index 0000000..dda91be --- /dev/null +++ b/cmdb-ui/src/components/Exception/index.js @@ -0,0 +1,2 @@ +import ExceptionPage from './ExceptionPage.vue' +export default ExceptionPage diff --git a/cmdb-ui/src/components/Exception/type.js b/cmdb-ui/src/components/Exception/type.js new file mode 100644 index 0000000..8158f0f --- /dev/null +++ b/cmdb-ui/src/components/Exception/type.js @@ -0,0 +1,19 @@ +const types = { + 403: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/wZcnGqRDyhPOEYFcZDnb.svg', + title: '403', + desc: '抱歉,你无权访问该页面' + }, + 404: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/KpnpchXsobRgLElEozzI.svg', + title: '404', + desc: '抱歉,你访问的页面不存在或仍在开发中' + }, + 500: { + img: 'https://gw.alipayobjects.com/zos/rmsportal/RVRUAYdCGeYNBWoKiIwB.svg', + title: '500', + desc: '抱歉,服务器出错了' + } +} + +export default types diff --git a/cmdb-ui/src/components/FooterToolbar/FooterToolBar.vue b/cmdb-ui/src/components/FooterToolbar/FooterToolBar.vue new file mode 100644 index 0000000..f4056dc --- /dev/null +++ b/cmdb-ui/src/components/FooterToolbar/FooterToolBar.vue @@ -0,0 +1,30 @@ + + + + + diff --git a/cmdb-ui/src/components/FooterToolbar/index.js b/cmdb-ui/src/components/FooterToolbar/index.js new file mode 100644 index 0000000..a0bf145 --- /dev/null +++ b/cmdb-ui/src/components/FooterToolbar/index.js @@ -0,0 +1,4 @@ +import FooterToolBar from './FooterToolBar' +import './index.less' + +export default FooterToolBar diff --git a/cmdb-ui/src/components/FooterToolbar/index.less b/cmdb-ui/src/components/FooterToolbar/index.less new file mode 100644 index 0000000..f56273f --- /dev/null +++ b/cmdb-ui/src/components/FooterToolbar/index.less @@ -0,0 +1,23 @@ +@import "../index"; + +@footer-toolbar-prefix-cls: ~"@{ant-pro-prefix}-footer-toolbar"; + +.@{footer-toolbar-prefix-cls} { + position: fixed; + width: 100%; + bottom: 0; + right: 0; + height: 56px; + line-height: 56px; + box-shadow: 0 -1px 2px rgba(0, 0, 0, 0.03); + background: #fff; + border-top: 1px solid #e8e8e8; + padding: 0 24px; + z-index: 9; + + &:after { + content: ""; + display: block; + clear: both; + } +} \ No newline at end of file diff --git a/cmdb-ui/src/components/FooterToolbar/index.md b/cmdb-ui/src/components/FooterToolbar/index.md new file mode 100644 index 0000000..c1aec2c --- /dev/null +++ b/cmdb-ui/src/components/FooterToolbar/index.md @@ -0,0 +1,48 @@ +# FooterToolbar 底部工具栏 + +固定在底部的工具栏。 + + + +## 何时使用 + +固定在内容区域的底部,不随滚动条移动,常用于长页面的数据搜集和提交工作。 + + + +引用方式: + +```javascript +import FooterToolBar from '@/components/FooterToolbar' + +export default { + components: { + FooterToolBar + } +} +``` + + + +## 代码演示 + +```html + + 提交 + +``` +或 +```html + + 提交 + +``` + + +## API + +参数 | 说明 | 类型 | 默认值 +----|------|-----|------ +children (slot) | 工具栏内容,向右对齐 | - | - +extra | 额外信息,向左对齐 | String, Object | - + diff --git a/cmdb-ui/src/components/GlobalFooter/GlobalFooter.vue b/cmdb-ui/src/components/GlobalFooter/GlobalFooter.vue new file mode 100644 index 0000000..717a87a --- /dev/null +++ b/cmdb-ui/src/components/GlobalFooter/GlobalFooter.vue @@ -0,0 +1,42 @@ + + + + + diff --git a/cmdb-ui/src/components/GlobalFooter/index.js b/cmdb-ui/src/components/GlobalFooter/index.js new file mode 100644 index 0000000..832e0bd --- /dev/null +++ b/cmdb-ui/src/components/GlobalFooter/index.js @@ -0,0 +1,2 @@ +import GlobalFooter from './GlobalFooter' +export default GlobalFooter diff --git a/cmdb-ui/src/components/GlobalHeader/GlobalHeader.vue b/cmdb-ui/src/components/GlobalHeader/GlobalHeader.vue new file mode 100644 index 0000000..e865c0a --- /dev/null +++ b/cmdb-ui/src/components/GlobalHeader/GlobalHeader.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/cmdb-ui/src/components/GlobalHeader/index.js b/cmdb-ui/src/components/GlobalHeader/index.js new file mode 100644 index 0000000..0807c87 --- /dev/null +++ b/cmdb-ui/src/components/GlobalHeader/index.js @@ -0,0 +1,2 @@ +import GlobalHeader from './GlobalHeader' +export default GlobalHeader diff --git a/cmdb-ui/src/components/IconSelector/IconSelector.vue b/cmdb-ui/src/components/IconSelector/IconSelector.vue new file mode 100644 index 0000000..810d297 --- /dev/null +++ b/cmdb-ui/src/components/IconSelector/IconSelector.vue @@ -0,0 +1,86 @@ + + + + + diff --git a/cmdb-ui/src/components/IconSelector/README.md b/cmdb-ui/src/components/IconSelector/README.md new file mode 100644 index 0000000..503095d --- /dev/null +++ b/cmdb-ui/src/components/IconSelector/README.md @@ -0,0 +1,48 @@ +IconSelector +==== + +> 图标选择组件,常用于为某一个数据设定一个图标时使用 +> eg: 设定菜单列表时,为每个菜单设定一个图标 + +该组件由 [@Saraka](https://github.com/saraka-tsukai) 封装 + + + +### 使用方式 + +```vue + + + +``` + + + +### 事件 + + +| 名称 | 说明 | 类型 | 默认值 | +| ------ | -------------------------- | ------ | ------ | +| change | 当改变了 `icon` 选中项触发 | String | - | diff --git a/cmdb-ui/src/components/IconSelector/icons.js b/cmdb-ui/src/components/IconSelector/icons.js new file mode 100644 index 0000000..920f464 --- /dev/null +++ b/cmdb-ui/src/components/IconSelector/icons.js @@ -0,0 +1,36 @@ +/** + * 增加新的图标时,请遵循以下数据结构 + * Adding new icon please follow the data structure below + */ +export default [ + { + key: 'directional', + title: '方向性图标', + icons: ['step-backward', 'step-forward', 'fast-backward', 'fast-forward', 'shrink', 'arrows-alt', 'down', 'up', 'left', 'right', 'caret-up', 'caret-down', 'caret-left', 'caret-right', 'up-circle', 'down-circle', 'left-circle', 'right-circle', 'double-right', 'double-left', 'vertical-left', 'vertical-right', 'forward', 'backward', 'rollback', 'enter', 'retweet', 'swap', 'swap-left', 'swap-right', 'arrow-up', 'arrow-down', 'arrow-left', 'arrow-right', 'play-circle', 'up-square', 'down-square', 'left-square', 'right-square', 'login', 'logout', 'menu-fold', 'menu-unfold', 'border-bottom', 'border-horizontal', 'border-inner', 'border-left', 'border-right', 'border-top', 'border-verticle', 'pic-center', 'pic-left', 'pic-right', 'radius-bottomleft', 'radius-bottomright', 'radius-upleft', 'fullscreen', 'fullscreen-exit'] + }, + { + key: 'suggested', + title: '提示建议性图标', + icons: ['question', 'question-circle', 'plus', 'plus-circle', 'pause', 'pause-circle', 'minus', 'minus-circle', 'plus-square', 'minus-square', 'info', 'info-circle', 'exclamation', 'exclamation-circle', 'close', 'close-circle', 'close-square', 'check', 'check-circle', 'check-square', 'clock-circle', 'warning', 'issues-close', 'stop'] + }, + { + key: 'editor', + title: '编辑类图标', + icons: ['edit', 'form', 'copy', 'scissor', 'delete', 'snippets', 'diff', 'highlight', 'align-center', 'align-left', 'align-right', 'bg-colors', 'bold', 'italic', 'underline', 'strikethrough', 'redo', 'undo', 'zoom-in', 'zoom-out', 'font-colors', 'font-size', 'line-height', 'colum-height', 'dash', 'small-dash', 'sort-ascending', 'sort-descending', 'drag', 'ordered-list', 'radius-setting'] + }, + { + key: 'data', + title: '数据类图标', + icons: ['area-chart', 'pie-chart', 'bar-chart', 'dot-chart', 'line-chart', 'radar-chart', 'heat-map', 'fall', 'rise', 'stock', 'box-plot', 'fund', 'sliders'] + }, + { + key: 'brand_logo', + title: '网站通用图标', + icons: ['lock', 'unlock', 'bars', 'book', 'calendar', 'cloud', 'cloud-download', 'code', 'copy', 'credit-card', 'delete', 'desktop', 'download', 'ellipsis', 'file', 'file-text', 'file-unknown', 'file-pdf', 'file-word', 'file-excel', 'file-jpg', 'file-ppt', 'file-markdown', 'file-add', 'folder', 'folder-open', 'folder-add', 'hdd', 'frown', 'meh', 'smile', 'inbox', 'laptop', 'appstore', 'link', 'mail', 'mobile', 'notification', 'paper-clip', 'picture', 'poweroff', 'reload', 'search', 'setting', 'share-alt', 'shopping-cart', 'tablet', 'tag', 'tags', 'to-top', 'upload', 'user', 'video-camera', 'home', 'loading', 'loading-3-quarters', 'cloud-upload', 'star', 'heart', 'environment', 'eye', 'camera', 'save', 'team', 'solution', 'phone', 'filter', 'exception', 'export', 'customer-service', 'qrcode', 'scan', 'like', 'dislike', 'message', 'pay-circle', 'calculator', 'pushpin', 'bulb', 'select', 'switcher', 'rocket', 'bell', 'disconnect', 'database', 'compass', 'barcode', 'hourglass', 'key', 'flag', 'layout', 'printer', 'sound', 'usb', 'skin', 'tool', 'sync', 'wifi', 'car', 'schedule', 'user-add', 'user-delete', 'usergroup-add', 'usergroup-delete', 'man', 'woman', 'shop', 'gift', 'idcard', 'medicine-box', 'red-envelope', 'coffee', 'copyright', 'trademark', 'safety', 'wallet', 'bank', 'trophy', 'contacts', 'global', 'shake', 'api', 'fork', 'dashboard', 'table', 'profile', 'alert', 'audit', 'branches', 'build', 'border', 'crown', 'experiment', 'fire', 'money-collect', 'property-safety', 'read', 'reconciliation', 'rest', 'security-scan', 'insurance', 'interation', 'safety-certificate', 'project', 'thunderbolt', 'block', 'cluster', 'deployment-unit', 'dollar', 'euro', 'pound', 'file-done', 'file-exclamation', 'file-protect', 'file-search', 'file-sync', 'gateway', 'gold', 'robot', 'shopping'] + }, + { + key: 'application', + title: '品牌和标识', + icons: ['android', 'apple', 'windows', 'ie', 'chrome', 'github', 'aliwangwang', 'dingding', 'weibo-square', 'weibo-circle', 'taobao-circle', 'html5', 'weibo', 'twitter', 'wechat', 'youtube', 'alipay-circle', 'taobao', 'skype', 'qq', 'medium-workmark', 'gitlab', 'medium', 'linkedin', 'google-plus', 'dropbox', 'facebook', 'codepen', 'code-sandbox', 'amazon', 'google', 'codepen-circle', 'alipay', 'ant-design', 'aliyun', 'zhihu', 'slack', 'slack-square', 'behance', 'behance-square', 'dribbble', 'dribbble-square', 'instagram', 'yuque', 'alibaba', 'yahoo'] + } +] diff --git a/cmdb-ui/src/components/IconSelector/index.js b/cmdb-ui/src/components/IconSelector/index.js new file mode 100644 index 0000000..2d27d70 --- /dev/null +++ b/cmdb-ui/src/components/IconSelector/index.js @@ -0,0 +1,2 @@ +import IconSelector from './IconSelector' +export default IconSelector diff --git a/cmdb-ui/src/components/Menu/SideMenu.vue b/cmdb-ui/src/components/Menu/SideMenu.vue new file mode 100644 index 0000000..1616d3b --- /dev/null +++ b/cmdb-ui/src/components/Menu/SideMenu.vue @@ -0,0 +1,63 @@ + + + diff --git a/cmdb-ui/src/components/Menu/index.js b/cmdb-ui/src/components/Menu/index.js new file mode 100644 index 0000000..4348509 --- /dev/null +++ b/cmdb-ui/src/components/Menu/index.js @@ -0,0 +1,2 @@ +import SMenu from './menu' +export default SMenu diff --git a/cmdb-ui/src/components/Menu/menu.js b/cmdb-ui/src/components/Menu/menu.js new file mode 100644 index 0000000..6d959cb --- /dev/null +++ b/cmdb-ui/src/components/Menu/menu.js @@ -0,0 +1,184 @@ +import Menu from 'ant-design-vue/es/menu' +import Icon from 'ant-design-vue/es/icon' + +const { Item, SubMenu } = Menu + +export default { + name: 'SMenu', + props: { + menu: { + type: Array, + required: true + }, + theme: { + type: String, + required: false, + default: 'dark' + }, + mode: { + type: String, + required: false, + default: 'inline' + }, + collapsed: { + type: Boolean, + required: false, + default: false + } + }, + data () { + return { + openKeys: [], + selectedKeys: [], + cachedOpenKeys: [] + } + }, + computed: { + rootSubmenuKeys: vm => { + const keys = [] + vm.menu.forEach(item => keys.push(item.path)) + return keys + } + }, + created () { + + }, + mounted () { + this.updateMenu() + }, + watch: { + collapsed (val) { + if (val) { + this.cachedOpenKeys = this.openKeys.concat() + this.openKeys = [] + } else { + this.openKeys = this.cachedOpenKeys + } + }, + $route: function () { + this.updateMenu() + } + + }, + methods: { + // select menu item + onOpenChange (openKeys) { + // 在水平模式下时执行,并且不再执行后续 + if (this.mode === 'horizontal') { + this.openKeys = openKeys + return + } + // 非水平模式时 + const latestOpenKey = openKeys.find(key => !this.openKeys.includes(key)) + if (!this.rootSubmenuKeys.includes(latestOpenKey)) { + this.openKeys = openKeys + } else { + this.openKeys = latestOpenKey ? [latestOpenKey] : [] + } + }, + updateMenu () { + const routes = this.$route.matched.concat() + + const { hidden } = this.$route.meta + if (routes.length >= 3 && hidden) { + routes.pop() + this.selectedKeys = [routes[routes.length - 1].path] + } else { + this.selectedKeys = [routes.pop().path] + } + const openKeys = [] + if (this.mode === 'inline') { + routes.forEach(item => { + openKeys.push(item.path) + }) + } + + this.collapsed ? (this.cachedOpenKeys = openKeys) : (this.openKeys = openKeys) + }, + // render + renderItem (menu) { + if (!menu.hidden) { + return menu.children && !menu.hideChildrenInMenu ? this.renderSubMenu(menu) : this.renderMenuItem(menu) + } + return null + }, + renderMenuItem (menu) { + const target = menu.meta.target || null + const tag = target && 'a' || 'router-link' + const props = { to: { name: menu.name } } + const attrs = { href: menu.path, target: menu.meta.target } + + if (menu.children && menu.hideChildrenInMenu) { + // 把有子菜单的 并且 父菜单是要隐藏子菜单的 + // 都给子菜单增加一个 hidden 属性 + // 用来给刷新页面时, selectedKeys 做控制用 + menu.children.forEach(item => { + item.meta = Object.assign(item.meta, { hidden: true }) + }) + } + + return ( + + + {this.renderIcon(menu.meta.icon)} + {menu.meta.title} + + + ) + }, + renderSubMenu (menu) { + const itemArr = [] + if (!menu.hideChildrenInMenu) { + menu.children.forEach(item => itemArr.push(this.renderItem(item))) + } + return ( + + + {this.renderIcon(menu.meta.icon)} + {menu.meta.title} + + {itemArr} + + ) + }, + renderIcon (icon) { + if (icon === 'none' || icon === undefined) { + return null + } + const props = {} + typeof (icon) === 'object' ? props.component = icon : props.type = icon + return ( + + ) + } + }, + + render () { + const { mode, theme, menu } = this + const props = { + mode: mode, + theme: theme, + openKeys: this.openKeys + } + const on = { + select: obj => { + this.selectedKeys = obj.selectedKeys + this.$emit('select', obj) + }, + openChange: this.onOpenChange + } + + const menuTree = menu.map(item => { + if (item.hidden) { + return null + } + return this.renderItem(item) + }) + // {...{ props, on: on }} + return ( +

    + {menuTree} + + ) + } +} diff --git a/cmdb-ui/src/components/MultiTab/MultiTab.vue b/cmdb-ui/src/components/MultiTab/MultiTab.vue new file mode 100644 index 0000000..9add79e --- /dev/null +++ b/cmdb-ui/src/components/MultiTab/MultiTab.vue @@ -0,0 +1,173 @@ + + + diff --git a/cmdb-ui/src/components/MultiTab/index.js b/cmdb-ui/src/components/MultiTab/index.js new file mode 100644 index 0000000..ca2a216 --- /dev/null +++ b/cmdb-ui/src/components/MultiTab/index.js @@ -0,0 +1,4 @@ +import MultiTab from './MultiTab' +import './index.less' + +export default MultiTab diff --git a/cmdb-ui/src/components/MultiTab/index.less b/cmdb-ui/src/components/MultiTab/index.less new file mode 100644 index 0000000..773e3af --- /dev/null +++ b/cmdb-ui/src/components/MultiTab/index.less @@ -0,0 +1,25 @@ +@import '../index'; + +@multi-tab-prefix-cls: ~"@{ant-pro-prefix}-multi-tab"; +@multi-tab-wrapper-prefix-cls: ~"@{ant-pro-prefix}-multi-tab-wrapper"; + +/* +.topmenu .@{multi-tab-prefix-cls} { + max-width: 1200px; + margin: -23px auto 24px auto; +} +*/ +.@{multi-tab-prefix-cls} { + margin: -23px -24px 24px -24px; + background: #fff; +} + +.topmenu .@{multi-tab-wrapper-prefix-cls} { + max-width: 1200px; + margin: 0 auto; +} + +.topmenu.content-width-Fluid .@{multi-tab-wrapper-prefix-cls} { + max-width: 100%; + margin: 0 auto; +} diff --git a/cmdb-ui/src/components/NoticeIcon/NoticeIcon.vue b/cmdb-ui/src/components/NoticeIcon/NoticeIcon.vue new file mode 100644 index 0000000..f484ce0 --- /dev/null +++ b/cmdb-ui/src/components/NoticeIcon/NoticeIcon.vue @@ -0,0 +1,90 @@ + + + + + + diff --git a/cmdb-ui/src/components/NoticeIcon/index.js b/cmdb-ui/src/components/NoticeIcon/index.js new file mode 100644 index 0000000..659b9ec --- /dev/null +++ b/cmdb-ui/src/components/NoticeIcon/index.js @@ -0,0 +1,2 @@ +import NoticeIcon from './NoticeIcon' +export default NoticeIcon diff --git a/cmdb-ui/src/components/NumberInfo/NumberInfo.vue b/cmdb-ui/src/components/NumberInfo/NumberInfo.vue new file mode 100644 index 0000000..bdde3e0 --- /dev/null +++ b/cmdb-ui/src/components/NumberInfo/NumberInfo.vue @@ -0,0 +1,54 @@ + + + + + diff --git a/cmdb-ui/src/components/NumberInfo/index.js b/cmdb-ui/src/components/NumberInfo/index.js new file mode 100644 index 0000000..659a2f3 --- /dev/null +++ b/cmdb-ui/src/components/NumberInfo/index.js @@ -0,0 +1,3 @@ +import NumberInfo from './NumberInfo' + +export default NumberInfo diff --git a/cmdb-ui/src/components/NumberInfo/index.less b/cmdb-ui/src/components/NumberInfo/index.less new file mode 100644 index 0000000..719113d --- /dev/null +++ b/cmdb-ui/src/components/NumberInfo/index.less @@ -0,0 +1,55 @@ +@import "../index"; + +@numberInfo-prefix-cls: ~"@{ant-pro-prefix}-number-info"; + +.@{numberInfo-prefix-cls} { + + .ant-pro-number-info-subtitle { + color: @text-color-secondary; + font-size: @font-size-base; + height: 22px; + line-height: 22px; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + white-space: nowrap; + } + + .number-info-value { + margin-top: 4px; + font-size: 0; + overflow: hidden; + text-overflow: ellipsis; + word-break: break-all; + white-space: nowrap; + + & > span { + color: @heading-color; + display: inline-block; + line-height: 32px; + height: 32px; + font-size: 24px; + margin-right: 32px; + } + + .sub-total { + color: @text-color-secondary; + font-size: @font-size-lg; + vertical-align: top; + margin-right: 0; + i { + font-size: 12px; + transform: scale(0.82); + margin-left: 4px; + } + :global { + .anticon-caret-up { + color: @red-6; + } + .anticon-caret-down { + color: @green-6; + } + } + } + } +} \ No newline at end of file diff --git a/cmdb-ui/src/components/NumberInfo/index.md b/cmdb-ui/src/components/NumberInfo/index.md new file mode 100644 index 0000000..147adc4 --- /dev/null +++ b/cmdb-ui/src/components/NumberInfo/index.md @@ -0,0 +1,43 @@ +# NumberInfo 数据文本 + +常用在数据卡片中,用于突出展示某个业务数据。 + + + +引用方式: + +```javascript +import NumberInfo from '@/components/NumberInfo' + +export default { + components: { + NumberInfo + } +} +``` + + + +## 代码演示 [demo](https://pro.loacg.com/test/home) + +```html + +``` + + + +## API + +参数 | 说明 | 类型 | 默认值 +----|------|-----|------ +title | 标题 | ReactNode\|string | - +subTitle | 子标题 | ReactNode\|string | - +total | 总量 | ReactNode\|string | - +subTotal | 子总量 | ReactNode\|string | - +status | 增加状态 | 'up \| down' | - +theme | 状态样式 | string | 'light' +gap | 设置数字和描述之间的间距(像素)| number | 8 diff --git a/cmdb-ui/src/components/PageHeader/PageHeader.vue b/cmdb-ui/src/components/PageHeader/PageHeader.vue new file mode 100644 index 0000000..80e686e --- /dev/null +++ b/cmdb-ui/src/components/PageHeader/PageHeader.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/cmdb-ui/src/components/PageHeader/index.js b/cmdb-ui/src/components/PageHeader/index.js new file mode 100644 index 0000000..ec1078c --- /dev/null +++ b/cmdb-ui/src/components/PageHeader/index.js @@ -0,0 +1,2 @@ +import PageHeader from './PageHeader' +export default PageHeader diff --git a/cmdb-ui/src/components/PageLoading/index.jsx b/cmdb-ui/src/components/PageLoading/index.jsx new file mode 100644 index 0000000..2886844 --- /dev/null +++ b/cmdb-ui/src/components/PageLoading/index.jsx @@ -0,0 +1,10 @@ +import { Spin } from 'ant-design-vue' + +export default { + name: 'PageLoading', + render () { + return (
    + +
    ) + } +} diff --git a/cmdb-ui/src/components/Result/Result.vue b/cmdb-ui/src/components/Result/Result.vue new file mode 100644 index 0000000..99f7f19 --- /dev/null +++ b/cmdb-ui/src/components/Result/Result.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/cmdb-ui/src/components/Result/index.js b/cmdb-ui/src/components/Result/index.js new file mode 100644 index 0000000..51cb3b2 --- /dev/null +++ b/cmdb-ui/src/components/Result/index.js @@ -0,0 +1,2 @@ +import Result from './Result.vue' +export default Result diff --git a/cmdb-ui/src/components/SettingDrawer/SettingDrawer.vue b/cmdb-ui/src/components/SettingDrawer/SettingDrawer.vue new file mode 100644 index 0000000..52ed726 --- /dev/null +++ b/cmdb-ui/src/components/SettingDrawer/SettingDrawer.vue @@ -0,0 +1,354 @@ + + + + + diff --git a/cmdb-ui/src/components/SettingDrawer/SettingItem.vue b/cmdb-ui/src/components/SettingDrawer/SettingItem.vue new file mode 100644 index 0000000..2b3b553 --- /dev/null +++ b/cmdb-ui/src/components/SettingDrawer/SettingItem.vue @@ -0,0 +1,38 @@ + + + + + diff --git a/cmdb-ui/src/components/SettingDrawer/index.js b/cmdb-ui/src/components/SettingDrawer/index.js new file mode 100644 index 0000000..8260f2d --- /dev/null +++ b/cmdb-ui/src/components/SettingDrawer/index.js @@ -0,0 +1,2 @@ +import SettingDrawer from './SettingDrawer' +export default SettingDrawer diff --git a/cmdb-ui/src/components/SettingDrawer/settingConfig.js b/cmdb-ui/src/components/SettingDrawer/settingConfig.js new file mode 100644 index 0000000..4d9a2b0 --- /dev/null +++ b/cmdb-ui/src/components/SettingDrawer/settingConfig.js @@ -0,0 +1,105 @@ +import { message } from 'ant-design-vue/es' +// import defaultSettings from '../defaultSettings'; +import themeColor from './themeColor.js' + +// let lessNodesAppended + +const colorList = [ + { + key: '薄暮', color: '#F5222D' + }, + { + key: '火山', color: '#FA541C' + }, + { + key: '日暮', color: '#FAAD14' + }, + { + key: '明青', color: '#13C2C2' + }, + { + key: '极光绿', color: '#52C41A' + }, + { + key: '拂晓蓝(默认)', color: '#1890FF' + }, + { + key: '极客蓝', color: '#2F54EB' + }, + { + key: '酱紫', color: '#722ED1' + } +] + +const updateTheme = newPrimaryColor => { + const hideMessage = message.loading('正在切换主题!', 0) + themeColor.changeColor(newPrimaryColor).finally(t => { + hideMessage() + }) +} + +/* +const updateTheme = primaryColor => { + // Don't compile less in production! + /* if (process.env.NODE_ENV === 'production') { + return; + } * / + // Determine if the component is remounted + if (!primaryColor) { + return + } + const hideMessage = message.loading('正在编译主题!', 0) + function buildIt () { + if (!window.less) { + return + } + setTimeout(() => { + window.less + .modifyVars({ + '@primary-color': primaryColor + }) + .then(() => { + hideMessage() + }) + .catch(() => { + message.error('Failed to update theme') + hideMessage() + }) + }, 200) + } + if (!lessNodesAppended) { + // insert less.js and color.less + const lessStyleNode = document.createElement('link') + const lessConfigNode = document.createElement('script') + const lessScriptNode = document.createElement('script') + lessStyleNode.setAttribute('rel', 'stylesheet/less') + lessStyleNode.setAttribute('href', '/color.less') + lessConfigNode.innerHTML = ` + window.less = { + async: true, + env: 'production', + javascriptEnabled: true + }; + ` + lessScriptNode.src = 'https://gw.alipayobjects.com/os/lib/less.js/3.8.1/less.min.js' + lessScriptNode.async = true + lessScriptNode.onload = () => { + buildIt() + lessScriptNode.onload = null + } + document.body.appendChild(lessStyleNode) + document.body.appendChild(lessConfigNode) + document.body.appendChild(lessScriptNode) + lessNodesAppended = true + } else { + buildIt() + } +} +*/ + +const updateColorWeak = colorWeak => { + // document.body.className = colorWeak ? 'colorWeak' : ''; + colorWeak ? document.body.classList.add('colorWeak') : document.body.classList.remove('colorWeak') +} + +export { updateTheme, colorList, updateColorWeak } diff --git a/cmdb-ui/src/components/SettingDrawer/themeColor.js b/cmdb-ui/src/components/SettingDrawer/themeColor.js new file mode 100644 index 0000000..6e7b480 --- /dev/null +++ b/cmdb-ui/src/components/SettingDrawer/themeColor.js @@ -0,0 +1,23 @@ +import client from 'webpack-theme-color-replacer/client' +import generate from '@ant-design/colors/lib/generate' + +export default { + getAntdSerials (color) { + // 淡化(即less的tint) + const lightens = new Array(9).fill().map((t, i) => { + return client.varyColor.lighten(color, i / 10) + }) + // colorPalette变换得到颜色值 + const colorPalettes = generate(color) + return lightens.concat(colorPalettes) + }, + changeColor (newColor) { + var options = { + newColors: this.getAntdSerials(newColor), // new colors array, one-to-one corresponde with `matchColors` + changeUrl (cssUrl) { + return `/${cssUrl}` // while router is not `hash` mode, it needs absolute path + } + } + return client.changer.changeColor(options, Promise) + } +} diff --git a/cmdb-ui/src/components/StandardFormRow/StandardFormRow.vue b/cmdb-ui/src/components/StandardFormRow/StandardFormRow.vue new file mode 100644 index 0000000..a4e261b --- /dev/null +++ b/cmdb-ui/src/components/StandardFormRow/StandardFormRow.vue @@ -0,0 +1,122 @@ + + + + + diff --git a/cmdb-ui/src/components/StandardFormRow/index.js b/cmdb-ui/src/components/StandardFormRow/index.js new file mode 100644 index 0000000..8155cc7 --- /dev/null +++ b/cmdb-ui/src/components/StandardFormRow/index.js @@ -0,0 +1,3 @@ +import StandardFormRow from './StandardFormRow' + +export default StandardFormRow diff --git a/cmdb-ui/src/components/Table/README.md b/cmdb-ui/src/components/Table/README.md new file mode 100644 index 0000000..1d2c9d0 --- /dev/null +++ b/cmdb-ui/src/components/Table/README.md @@ -0,0 +1,341 @@ +Table 重封装组件说明 +==== + + +封装说明 +---- + +> 基础的使用方式与 API 与 [官方版(Table)](https://vuecomponent.github.io/ant-design-vue/components/table-cn/) 本一致,在其基础上,封装了加载数据的方法。 +> +> 你无需在你是用表格的页面进行分页逻辑处理,仅需向 Table 组件传递绑定 `:data="Promise"` 对象即可 + +该 `table` 由 [@Saraka](https://github.com/saraka-tsukai) 完成封装 + + +例子1 +---- +(基础使用) + +```vue + + + + + +``` + + + +例子2 +---- + +(简单的表格,最后一列是各种操作) + +```vue + + + +``` + + + +内置方法 +---- + +通过 `this.$refs.table` 调用 + +`this.$refs.table.refresh(true)` 刷新列表 (用户新增/修改数据后,重载列表数据) + +> 注意:要调用 `refresh(bool)` 需要给表格组件设定 `ref` 值 +> +> `refresh()` 方法可以传一个 `bool` 值,当有传值 或值为 `true` 时,则刷新时会强制刷新到第一页(常用户页面 搜索 按钮进行搜索时,结果从第一页开始分页) + + +内置属性 +---- +> 除去 `a-table` 自带属性外,还而外提供了一些额外属性属性 + + +| 属性 | 说明 | 类型 | 默认值 | +| -------------- | ----------------------------------------------- | ----------------- | ------ | +| alert | 设置是否显示表格信息栏 | [object, boolean] | null | +| showPagination | 显示分页选择器,可传 'auto' \| boolean | [string, boolean] | 'auto' | +| data | 加载数据方法 必须为 `Promise` 对象 **必须绑定** | Promise | - | + + +`alert` 属性对象: + +```javascript +alert: { + show: Boolean, + clear: [Function, Boolean] +} +``` + +注意事项 +---- + +> 你可能需要为了与后端提供的接口返回结果一致而去修改以下代码: +> (需要注意的是,这里的修改是全局性的,意味着整个项目所有使用该 table 组件都需要遵守这个返回结果定义的字段。) +> +> 文档中的结构有可能由于组件 bug 进行修正而改动。实际修改请以当时最新版本为准 + +修改 `@/components/table/index.js` 第 156 行起 + + + +```javascript +result.then(r => { + this.localPagination = this.showPagination && Object.assign({}, this.localPagination, { + current: r.pageNo, // 返回结果中的当前分页数 + total: r.totalCount, // 返回结果中的总记录数 + showSizeChanger: this.showSizeChanger, + pageSize: (pagination && pagination.pageSize) || + this.localPagination.pageSize + }) || false + // 为防止删除数据后导致页面当前页面数据长度为 0 ,自动翻页到上一页 + if (r.data.length === 0 && this.showPagination && this.localPagination.current > 1) { + this.localPagination.current-- + this.loadData() + return + } + + // 这里用于判断接口是否有返回 r.totalCount 且 this.showPagination = true 且 pageNo 和 pageSize 存在 且 totalCount 小于等于 pageNo * pageSize 的大小 + // 当情况满足时,表示数据不满足分页大小,关闭 table 分页功能 + try { + if ((['auto', true].includes(this.showPagination) && r.totalCount <= (r.pageNo * this.localPagination.pageSize))) { + this.localPagination.hideOnSinglePage = true + } + } catch (e) { + this.localPagination = false + } + console.log('loadData -> this.localPagination', this.localPagination) + this.localDataSource = r.data // 返回结果中的数组数据 + this.localLoading = false + }) +``` +返回 JSON 例子: +```json +{ + "message": "", + "result": { + "data": [{ + id: 1, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/WdGqmHpayyMjiEhcKoVE.png', + title: 'Alipay', + description: '那是一种内在的东西, 他们到达不了,也无法触及的', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 2, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/zOsKZmFRdUtvpqCImOVY.png', + title: 'Angular', + description: '希望是一个好东西,也许是最好的,好东西是不会消亡的', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 3, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/dURIMkkrRFpPgTuzkwnB.png', + title: 'Ant Design', + description: '城镇中有那么多的酒馆,她却偏偏走进了我的酒馆', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 4, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/sfjbOqnsXXJgNCjCzDBL.png', + title: 'Ant Design Pro', + description: '那时候我只会想自己想要什么,从不想自己拥有什么', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 5, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/siCrBXXhmvTQGWPNLBow.png', + title: 'Bootstrap', + description: '凛冬将至', + status: 1, + updatedAt: '2018-07-26 00:00:00' + }, + { + id: 6, + cover: 'https://gw.alipayobjects.com/zos/rmsportal/ComBAopevLwENQdKWiIn.png', + title: 'Vue', + description: '生命就像一盒巧克力,结果往往出人意料', + status: 1, + updatedAt: '2018-07-26 00:00:00' + } + ], + "pageSize": 10, + "pageNo": 0, + "totalPage": 6, + "totalCount": 57 + }, + "status": 200, + "timestamp": 1534955098193 +} +``` + + + +更新时间 +---- + +该文档最后更新于: 2019-06-23 PM 17:19 \ No newline at end of file diff --git a/cmdb-ui/src/components/Table/index.js b/cmdb-ui/src/components/Table/index.js new file mode 100644 index 0000000..0f1a5d6 --- /dev/null +++ b/cmdb-ui/src/components/Table/index.js @@ -0,0 +1,315 @@ +import T from 'ant-design-vue/es/table/Table' +import get from 'lodash.get' + +export default { + data () { + return { + needTotalList: [], + + selectedRows: [], + selectedRowKeys: [], + + localLoading: false, + localDataSource: [], + localPagination: Object.assign({}, this.pagination) + } + }, + props: Object.assign({}, T.props, { + rowKey: { + type: [String, Function], + default: 'key' + }, + data: { + type: Function, + required: true + }, + pageNum: { + type: Number, + default: 1 + }, + pageSize: { + type: Number, + default: 10 + }, + showSizeChanger: { + type: Boolean, + default: true + }, + size: { + type: String, + default: 'default' + }, + alert: { + type: [Object, Boolean], + default: null + }, + rowSelection: { + type: Object, + default: null + }, + /** @Deprecated */ + showAlertInfo: { + type: Boolean, + default: false + }, + showPagination: { + type: String | Boolean, + default: 'auto' + }, + /** + * enable page URI mode + * + * e.g: + * /users/1 + * /users/2 + * /users/3?queryParam=test + * ... + */ + pageURI: { + type: Boolean, + default: false + } + }), + watch: { + 'localPagination.current' (val) { + this.pageURI && this.$router.push({ + ...this.$route, + name: this.$route.name, + params: Object.assign({}, this.$route.params, { + pageNo: val + }) + }) + }, + pageNum (val) { + Object.assign(this.localPagination, { + current: val + }) + }, + pageSize (val) { + Object.assign(this.localPagination, { + pageSize: val + }) + }, + showSizeChanger (val) { + Object.assign(this.localPagination, { + showSizeChanger: val + }) + }, + '$route.path': function (newPath, oldPath) { + if (oldPath.indexOf(newPath) === -1) { + this.refresh(true) + } + } + }, + created () { + const { pageNo } = this.$route.params + const localPageNum = this.pageURI && (pageNo && parseInt(pageNo)) || this.pageNum + this.localPagination = ['auto', true].includes(this.showPagination) && Object.assign({}, this.localPagination, { + current: localPageNum, + pageSize: this.pageSize, + showSizeChanger: this.showSizeChanger + }) || false + console.log('this.localPagination', this.localPagination) + this.needTotalList = this.initTotalList(this.columns) + this.loadData() + }, + methods: { + /** + * 表格重新加载方法 + * 如果参数为 true, 则强制刷新到第一页 + * @param Boolean bool + */ + refresh (bool = false) { + bool && (this.localPagination = Object.assign({}, { + current: 1, pageSize: this.pageSize + })) + this.loadData() + }, + /** + * 加载数据方法 + * @param {Object} pagination 分页选项器 + * @param {Object} filters 过滤条件 + * @param {Object} sorter 排序条件 + */ + loadData (pagination, filters, sorter) { + this.localLoading = true + const parameter = Object.assign({ + pageNo: (pagination && pagination.current) || + this.showPagination && this.localPagination.current || this.pageNum, + pageSize: (pagination && pagination.pageSize) || + this.showPagination && this.localPagination.pageSize || this.pageSize + }, + (sorter && sorter.field && { + sortField: sorter.field + }) || {}, + (sorter && sorter.order && { + sortOrder: sorter.order + }) || {}, { + ...filters + } + ) + const result = this.data(parameter) + // 对接自己的通用数据接口需要修改下方代码中的 r.pageNo, r.totalCount, r.data + // eslint-disable-next-line + if ((typeof result === 'object' || typeof result === 'function') && typeof result.then === 'function') { + result.then(r => { + this.localPagination = this.showPagination && Object.assign({}, this.localPagination, { + current: r.pageNo, // 返回结果中的当前分页数 + total: r.totalCount, // 返回结果中的总记录数 + showSizeChanger: this.showSizeChanger, + pageSize: (pagination && pagination.pageSize) || + this.localPagination.pageSize + }) || false + // 为防止删除数据后导致页面当前页面数据长度为 0 ,自动翻页到上一页 + if (r.data.length === 0 && this.showPagination && this.localPagination.current > 1) { + this.localPagination.current-- + this.loadData() + return + } + + // 这里用于判断接口是否有返回 r.totalCount 且 this.showPagination = true 且 pageNo 和 pageSize 存在 且 totalCount 小于等于 pageNo * pageSize 的大小 + // 当情况满足时,表示数据不满足分页大小,关闭 table 分页功能 + try { + if ((['auto', true].includes(this.showPagination) && r.totalCount <= (r.pageNo * this.localPagination.pageSize))) { + this.localPagination.hideOnSinglePage = false + } + } catch (e) { + this.localPagination = false + } + this.localDataSource = r.data // 返回结果中的数组数据 + this.localLoading = false + }) + } + }, + initTotalList (columns) { + const totalList = [] + columns && columns instanceof Array && columns.forEach(column => { + if (column.needTotal) { + totalList.push({ + ...column, + total: 0 + }) + } + }) + return totalList + }, + /** + * 用于更新已选中的列表数据 total 统计 + * @param selectedRowKeys + * @param selectedRows + */ + updateSelect (selectedRowKeys, selectedRows) { + this.selectedRows = selectedRows + this.selectedRowKeys = selectedRowKeys + const list = this.needTotalList + this.needTotalList = list.map(item => { + return { + ...item, + total: selectedRows.reduce((sum, val) => { + const total = sum + parseInt(get(val, item.dataIndex)) + return isNaN(total) ? 0 : total + }, 0) + } + }) + }, + /** + * 清空 table 已选中项 + */ + clearSelected () { + if (this.rowSelection) { + this.rowSelection.onChange([], []) + this.updateSelect([], []) + } + }, + /** + * 处理交给 table 使用者去处理 clear 事件时,内部选中统计同时调用 + * @param callback + * @returns {*} + */ + renderClear (callback) { + if (this.selectedRowKeys.length <= 0) return null + return ( +
    { + callback() + this.clearSelected() + }}>清空 + ) + }, + renderAlert () { + // 绘制统计列数据 + const needTotalItems = this.needTotalList.map((item) => { + return ( + {item.title}总计 {!item.customRender ? item.total : item.customRender(item.total)} + ) + }) + + // 绘制 清空 按钮 + const clearItem = (typeof this.alert.clear === 'boolean' && this.alert.clear) ? ( + this.renderClear(this.clearSelected) + ) : (this.alert !== null && typeof this.alert.clear === 'function') ? ( + this.renderClear(this.alert.clear) + ) : null + + // 绘制 alert 组件 + return ( + + + + ) + } + }, + + render () { + const props = {} + const localKeys = Object.keys(this.$data) + const showAlert = (typeof this.alert === 'object' && this.alert !== null && this.alert.show) && typeof this.rowSelection.selectedRowKeys !== 'undefined' || this.alert + + Object.keys(T.props).forEach(k => { + const localKey = `local${k.substring(0, 1).toUpperCase()}${k.substring(1)}` + if (localKeys.includes(localKey)) { + props[k] = this[localKey] + return props[k] + } + + if (k === 'rowSelection') { + if (showAlert && this.rowSelection) { + // 如果需要使用alert,则重新绑定 rowSelection 事件 + props[k] = { + ...this.rowSelection, + selectedRows: this.selectedRows, + selectedRowKeys: this.selectedRowKeys, + onChange: (selectedRowKeys, selectedRows) => { + this.updateSelect(selectedRowKeys, selectedRows) + typeof this[k].onChange !== 'undefined' && this[k].onChange(selectedRowKeys, selectedRows) + } + } + return props[k] + } else if (!this.rowSelection) { + // 如果没打算开启 rowSelection 则清空默认的选择项 + props[k] = null + return props[k] + } + } + this[k] && (props[k] = this[k]) + return props[k] + }) + + console.log('re-render table', new Date()) + const table = ( + + { Object.keys(this.$slots).map(name => ()) } + + ) + + return ( +
    + { showAlert ? this.renderAlert() : null } + { table } +
    + ) + } +} diff --git a/cmdb-ui/src/components/TagSelect/TagSelectOption.jsx b/cmdb-ui/src/components/TagSelect/TagSelectOption.jsx new file mode 100644 index 0000000..b5ae799 --- /dev/null +++ b/cmdb-ui/src/components/TagSelect/TagSelectOption.jsx @@ -0,0 +1,45 @@ +import { Tag } from 'ant-design-vue' +const { CheckableTag } = Tag + +export default { + name: 'TagSelectOption', + props: { + prefixCls: { + type: String, + default: 'ant-pro-tag-select-option' + }, + value: { + type: [String, Number, Object], + default: '' + }, + checked: { + type: Boolean, + default: false + } + }, + data () { + return { + localChecked: this.checked || false + } + }, + watch: { + 'checked' (val) { + this.localChecked = val + }, + '$parent.items': { + handler: function (val) { + this.value && val.hasOwnProperty(this.value) && (this.localChecked = val[this.value]) + }, + deep: true + } + }, + render () { + const { $slots, value } = this + const onChange = (checked) => { + this.$emit('change', { value, checked }) + } + return ( + {$slots.default} + ) + } +} diff --git a/cmdb-ui/src/components/TagSelect/index.jsx b/cmdb-ui/src/components/TagSelect/index.jsx new file mode 100644 index 0000000..c12c94e --- /dev/null +++ b/cmdb-ui/src/components/TagSelect/index.jsx @@ -0,0 +1,103 @@ +import PropTypes from 'ant-design-vue/es/_util/vue-types' +import Option from './TagSelectOption.jsx' +import { filterEmpty } from '@/components/_util/util' + +export default { + Option, + name: 'TagSelect', + model: { + prop: 'checked', + event: 'change' + }, + props: { + prefixCls: { + type: String, + default: 'ant-pro-tag-select' + }, + defaultValue: { + type: PropTypes.array, + default: null + }, + value: { + type: PropTypes.array, + default: null + }, + expandable: { + type: Boolean, + default: false + }, + hideCheckAll: { + type: Boolean, + default: false + } + }, + data () { + return { + expand: false, + localCheckAll: false, + items: this.getItemsKey(filterEmpty(this.$slots.default)), + val: this.value || this.defaultValue || [] + } + }, + methods: { + onChange (checked) { + const key = Object.keys(this.items).filter(key => key === checked.value) + this.items[key] = checked.checked + const bool = Object.values(this.items).lastIndexOf(false) + if (bool === -1) { + this.localCheckAll = true + } else { + this.localCheckAll = false + } + }, + onCheckAll (checked) { + Object.keys(this.items).forEach(v => { + this.items[v] = checked.checked + }) + this.localCheckAll = checked.checked + }, + getItemsKey (items) { + const totalItem = {} + items.forEach(item => { + totalItem[item.componentOptions.propsData && item.componentOptions.propsData.value] = false + }) + return totalItem + }, + // CheckAll Button + renderCheckAll () { + return !this.hideCheckAll && () || null + }, + // expandable + renderExpandable () { + + }, + // render option + renderTags (items) { + const listeners = { + change: (checked) => { + this.onChange(checked) + this.$emit('change', checked) + } + } + + return items.map(vnode => { + const options = vnode.componentOptions + options.listeners = listeners + return vnode + }) + } + }, + render () { + const { $props: { prefixCls } } = this + const classString = { + [`${prefixCls}`]: true + } + const tagItems = filterEmpty(this.$slots.default) + return ( +
    + {this.renderCheckAll()} + {this.renderTags(tagItems)} +
    + ) + } +} diff --git a/cmdb-ui/src/components/Tree/Tree.jsx b/cmdb-ui/src/components/Tree/Tree.jsx new file mode 100644 index 0000000..e5a2a11 --- /dev/null +++ b/cmdb-ui/src/components/Tree/Tree.jsx @@ -0,0 +1,124 @@ +import { Menu, Icon, Input } from 'ant-design-vue' + +const { Item, ItemGroup, SubMenu } = Menu +const { Search } = Input + +export default { + name: 'Tree', + props: { + dataSource: { + type: Array, + required: true + }, + openKeys: { + type: Array, + default: () => [] + }, + search: { + type: Boolean, + default: false + } + }, + created () { + this.localOpenKeys = this.openKeys.slice(0) + }, + data () { + return { + localOpenKeys: [] + } + }, + methods: { + handlePlus (item) { + this.$emit('add', item) + }, + handleTitleClick (...args) { + this.$emit('titleClick', { args }) + }, + + renderSearch () { + return ( + + ) + }, + renderIcon (icon) { + return icon && () || null + }, + renderMenuItem (item) { + return ( + + { this.renderIcon(item.icon) } + { item.title } + this.handlePlus(item) } }}> + + ) + }, + renderItem (item) { + return item.children ? this.renderSubItem(item, item.key) : this.renderMenuItem(item, item.key) + }, + renderItemGroup (item) { + const childrenItems = item.children.map(o => { + return this.renderItem(o, o.key) + }) + + return ( + + + { childrenItems } + + ) + }, + renderSubItem (item, key) { + const childrenItems = item.children && item.children.map(o => { + return this.renderItem(o, o.key) + }) + + const title = ( + + { this.renderIcon(item.icon) } + { item.title } + + ) + + if (item.group) { + return this.renderItemGroup(item) + } + // titleClick={this.handleTitleClick(item)} + return ( + + { title } + { childrenItems } + + ) + } + }, + render () { + const { dataSource, search } = this.$props + + // this.localOpenKeys = openKeys.slice(0) + const list = dataSource.map(item => { + return this.renderItem(item) + }) + + return ( +
    + { search ? this.renderSearch() : null } + this.$emit('click', item), 'update:openKeys': val => { this.localOpenKeys = val } } }} openKeys={this.localOpenKeys}> + { list } + +
    + ) + } +} diff --git a/cmdb-ui/src/components/Trend/Trend.vue b/cmdb-ui/src/components/Trend/Trend.vue new file mode 100644 index 0000000..526e1cc --- /dev/null +++ b/cmdb-ui/src/components/Trend/Trend.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/cmdb-ui/src/components/Trend/index.js b/cmdb-ui/src/components/Trend/index.js new file mode 100644 index 0000000..9f14228 --- /dev/null +++ b/cmdb-ui/src/components/Trend/index.js @@ -0,0 +1,3 @@ +import Trend from './Trend.vue' + +export default Trend diff --git a/cmdb-ui/src/components/Trend/index.less b/cmdb-ui/src/components/Trend/index.less new file mode 100644 index 0000000..8a3d24c --- /dev/null +++ b/cmdb-ui/src/components/Trend/index.less @@ -0,0 +1,42 @@ +@import "../index"; + +@trend-prefix-cls: ~"@{ant-pro-prefix}-trend"; + +.@{trend-prefix-cls} { + display: inline-block; + font-size: @font-size-base; + line-height: 22px; + + .up, + .down { + margin-left: 4px; + position: relative; + top: 1px; + + i { + font-size: 12px; + transform: scale(0.83); + } + } + + .item-text { + display: inline-block; + margin-left: 8px; + color: rgba(0,0,0,.85); + } + + .up { + color: @red-6; + } + .down { + color: @green-6; + top: -1px; + } + + &.reverse-color .up { + color: @green-6; + } + &.reverse-color .down { + color: @red-6; + } +} \ No newline at end of file diff --git a/cmdb-ui/src/components/Trend/index.md b/cmdb-ui/src/components/Trend/index.md new file mode 100644 index 0000000..8881f0e --- /dev/null +++ b/cmdb-ui/src/components/Trend/index.md @@ -0,0 +1,45 @@ +# Trend 趋势标记 + +趋势符号,标记上升和下降趋势。通常用绿色代表“好”,红色代表“不好”,股票涨跌场景除外。 + + + +引用方式: + +```javascript +import Trend from '@/components/Trend' + +export default { + components: { + Trend + } +} +``` + + + +## 代码演示 [demo](https://pro.loacg.com/test/home) + +```html +5% +``` +或 +```html + + 工资 + 5% + +``` +或 +```html +5% +``` + + +## API + +| 参数 | 说明 | 类型 | 默认值 | +|----------|------------------------------------------|-------------|-------| +| flag | 上升下降标识:`up|down` | string | - | +| reverseColor | 颜色反转 | Boolean | false | + diff --git a/cmdb-ui/src/components/_util/util.js b/cmdb-ui/src/components/_util/util.js new file mode 100644 index 0000000..dd33231 --- /dev/null +++ b/cmdb-ui/src/components/_util/util.js @@ -0,0 +1,46 @@ +/** + * components util + */ + +/** + * 清理空值,对象 + * @param children + * @returns {*[]} + */ +export function filterEmpty (children = []) { + return children.filter(c => c.tag || (c.text && c.text.trim() !== '')) +} + +/** + * 获取字符串长度,英文字符 长度1,中文字符长度2 + * @param {*} str + */ +export const getStrFullLength = (str = '') => + str.split('').reduce((pre, cur) => { + const charCode = cur.charCodeAt(0) + if (charCode >= 0 && charCode <= 128) { + return pre + 1 + } + return pre + 2 + }, 0) + +/** + * 截取字符串,根据 maxLength 截取后返回 + * @param {*} str + * @param {*} maxLength + */ +export const cutStrByFullLength = (str = '', maxLength) => { + let showLength = 0 + return str.split('').reduce((pre, cur) => { + const charCode = cur.charCodeAt(0) + if (charCode >= 0 && charCode <= 128) { + showLength += 1 + } else { + showLength += 2 + } + if (showLength <= maxLength) { + return pre + cur + } + return pre + }, '') +} diff --git a/cmdb-ui/src/components/global.less b/cmdb-ui/src/components/global.less new file mode 100644 index 0000000..f21907e --- /dev/null +++ b/cmdb-ui/src/components/global.less @@ -0,0 +1,491 @@ +@import './index.less'; + +body { + + &.colorWeak { + filter: invert(80%); + } + &.userLayout { + overflow: auto; + } +} + +.layout.ant-layout { + height: auto; + overflow-x: hidden; + + &.mobile, + &.tablet { + .ant-layout-content { + .content { + margin: 24px 0 0; + } + } + + /** + * ant-table-wrapper + * 覆盖的表格手机模式样式,如果想修改在手机上表格最低宽度,可以在这里改动 + */ + .ant-table-wrapper { + .ant-table-content { + overflow-y: auto; + } + .ant-table-body { + min-width: 800px; + } + } + .topmenu { + /* 必须为 topmenu 才能启用流式布局 */ + &.content-width-Fluid { + .header-index-wide { + margin-left: 0; + } + } + } + } + + &.mobile { + .sidemenu { + .ant-header-fixedHeader { + &.ant-header-side-opened, + &.ant-header-side-closed { + width: 100%; + } + } + } + } + + &.ant-layout-has-sider { + flex-direction: row; + } + + .trigger { + font-size: 20px; + line-height: 64px; + padding: 0 24px; + cursor: pointer; + transition: color 0.3s; + &:hover { + background: rgba(0, 0, 0, 0.025); + } + } + + .topmenu { + .ant-header-fixedHeader { + position: fixed; + top: 0; + right: 0; + z-index: 9; + width: 100%; + transition: width 0.2s; + + &.ant-header-side-opened { + width: 100%; + } + + &.ant-header-side-closed { + width: 100%; + } + } + /* 必须为 topmenu 才能启用流式布局 */ + &.content-width-Fluid { + .header-index-wide { + max-width: unset; + margin-left: 24px; + } + + .page-header-index-wide { + max-width: unset; + } + } + } + + .sidemenu { + .ant-header-fixedHeader { + position: fixed; + top: 0; + right: 0; + z-index: 9; + width: 100%; + transition: width 0.2s; + + &.ant-header-side-opened { + width: calc(100% - 256px); + } + + &.ant-header-side-closed { + width: calc(100% - 80px); + } + } + } + + .header { + height: 64px; + padding: 0 12px 0 0; + background: #fff; + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); + position: relative; + } + + .header, + .top-nav-header-index { + .user-wrapper { + float: right; + height: 100%; + + .action { + cursor: pointer; + padding: 0 12px; + display: inline-block; + transition: all 0.3s; + height: 100%; + color: rgba(0, 0, 0, 0.65); + + &:hover { + background: rgba(0, 0, 0, 0.025); + } + + .avatar { + margin: 20px 8px 20px 0; + color: #1890ff; + background: hsla(0, 0%, 100%, 0.85); + vertical-align: middle; + } + + .icon { + font-size: 16px; + padding: 4px; + } + } + } + + &.dark { + .user-wrapper { + .action { + color: rgba(255, 255, 255, 0.85); + a { + color: rgba(255, 255, 255, 0.85); + } + + &:hover { + background: rgba(255, 255, 255, 0.16); + } + } + } + } + } + + &.mobile, + &.tablet { + .top-nav-header-index { + .header-index-wide { + .header-index-left { + .trigger { + color: rgba(255, 255, 255, 0.85); + padding: 0 12px; + } + + .logo.top-nav-header { + flex: 0 0 56px; + text-align: center; + line-height: 58px; + h1 { + display: none; + } + } + } + } + + &.light { + .header-index-wide { + .header-index-left { + .trigger { + color: rgba(0, 0, 0, 0.65); + } + } + } + // + } + } + } + + &.tablet { + // overflow: hidden; text-overflow:ellipsis; white-space: nowrap; + .top-nav-header-index { + .header-index-wide { + .header-index-left { + .logo > a { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + } + .ant-menu.ant-menu-horizontal { + flex: 0 1 auto; + white-space: normal; + } + } + } + } + + .top-nav-header-index { + box-shadow: 0 1px 4px rgba(0, 21, 41, 0.08); + position: relative; + transition: background 0.3s, width 0.2s; + + .header-index-wide { + max-width: 1200px; + margin: auto; + padding-left: 0; + display: flex; + height: 64px; + + .ant-menu.ant-menu-horizontal { + max-width: 835px; + flex: 0 1 835px; + border: none; + height: 64px; + line-height: 64px; + } + + .header-index-left { + flex: 0 1 1000px; + display: flex; + + .logo.top-nav-header { + flex: 0 0 165px; + width: 165px; + height: 64px; + position: relative; + line-height: 64px; + transition: all 0.3s; + overflow: hidden; + + img, + svg { + display: inline-block; + vertical-align: middle; + height: 32px; + width: 32px; + } + + h1 { + color: #fff; + display: inline-block; + vertical-align: top; + font-size: 16px; + margin: 0 0 0 12px; + font-weight: 400; + } + } + } + + .header-index-right { + flex: 1 0 auto; + height: 64px; + overflow: hidden; + + .content-box { + float: right; + } + } + } + + &.light { + background-color: #fff; + + .header-index-wide { + .header-index-left { + .logo { + h1 { + color: #002140; + } + } + } + } + } + } + + // 内容区 + .layout-content { + margin: 24px 24px 0px; + height: 100%; + height: 64px; + padding: 0 12px 0 0; + } + + // footer + .ant-layout-footer { + padding: 0; + } +} + +.topmenu { + .page-header-index-wide { + max-width: 1200px; + margin: 0 auto; + } +} + +// drawer-sider 自定义 +.ant-drawer.drawer-sider { + .sider { + box-shadow: none; + } + + &.dark { + .ant-drawer-content { + background-color: rgb(0, 21, 41); + } + } + &.light { + box-shadow: none; + .ant-drawer-content { + background-color: #fff; + } + } + + .ant-drawer-body { + padding: 0; + } +} + +// 菜单样式 +.sider { + box-shadow: 2px 0 6px rgba(0, 21, 41, 0.35); + position: relative; + z-index: 10; + min-height: 100vh; + + .ant-layout-sider-children { + overflow-y: hidden; + max-height: 100vh; + + &:hover { + overflow-y: auto; + } + } + + &.ant-fixed-sidemenu { + position: fixed; + height: 100%; + } + + .logo { + position: relative; + height: 64px; + padding-left: 24px; + overflow: hidden; + line-height: 64px; + background: #002140; + transition: all .3s; + + img, + svg, + h1 { + display: inline-block; + vertical-align: middle; + } + + img, + svg { + height: 32px; + width: 32px; + } + + h1 { + color: #fff; + font-size: 20px; + margin: 0 0 0 12px; + font-family: Avenir, Helvetica Neue, Arial, Helvetica, sans-serif; + font-weight: 600; + vertical-align: middle; + } + } + + &.light { + background-color: #fff; + box-shadow: 2px 0px 8px 0px rgba(29, 35, 41, 0.05); + + .logo { + background: #fff; + box-shadow: 1px 1px 0px 0px #e8e8e8; + + h1 { + color: unset; + } + } + + .ant-menu-light { + border-right-color: transparent; + } + } +} + +// 外置的样式控制 +.user-dropdown-menu { + span { + user-select: none; + } +} +.user-dropdown-menu-wrapper.ant-dropdown-menu { + padding: 4px 0; + + .ant-dropdown-menu-item { + width: 160px; + } + + .ant-dropdown-menu-item > .anticon:first-child, + .ant-dropdown-menu-item > a > .anticon:first-child, + .ant-dropdown-menu-submenu-title > .anticon:first-child .ant-dropdown-menu-submenu-title > a > .anticon:first-child { + min-width: 12px; + margin-right: 8px; + } +} + +// 数据列表 样式 +.table-alert { + margin-bottom: 16px; +} + +.table-page-search-wrapper { + .ant-form-inline { + .ant-form-item { + display: flex; + margin-bottom: 24px; + margin-right: 0; + + .ant-form-item-control-wrapper { + flex: 1 1; + display: inline-block; + vertical-align: middle; + } + + > .ant-form-item-label { + line-height: 32px; + padding-right: 8px; + width: auto; + } + .ant-form-item-control { + height: 32px; + line-height: 32px; + } + } + } + + .table-page-search-submitButtons { + display: block; + margin-bottom: 24px; + white-space: nowrap; + } +} + +.content { + .table-operator { + margin-bottom: 18px; + + button { + margin-right: 8px; + } + } +} diff --git a/cmdb-ui/src/components/index.js b/cmdb-ui/src/components/index.js new file mode 100644 index 0000000..6004742 --- /dev/null +++ b/cmdb-ui/src/components/index.js @@ -0,0 +1,62 @@ +// chart +import Bar from '@/components/Charts/Bar' +import ChartCard from '@/components/Charts/ChartCard' +import Liquid from '@/components/Charts/Liquid' +import MiniArea from '@/components/Charts/MiniArea' +import MiniSmoothArea from '@/components/Charts/MiniSmoothArea' +import MiniBar from '@/components/Charts/MiniBar' +import MiniProgress from '@/components/Charts/MiniProgress' +import Radar from '@/components/Charts/Radar' +import RankList from '@/components/Charts/RankList' +import TransferBar from '@/components/Charts/TransferBar' +import TagCloud from '@/components/Charts/TagCloud' + +// pro components +import AvatarList from '@/components/AvatarList' +import CountDown from '@/components/CountDown' +import Ellipsis from '@/components/Ellipsis' +import FooterToolbar from '@/components/FooterToolbar' +import NumberInfo from '@/components/NumberInfo' +import DescriptionList from '@/components/DescriptionList' +import Tree from '@/components/Tree/Tree' +import Trend from '@/components/Trend' +import STable from '@/components/Table' +import MultiTab from '@/components/MultiTab' +import Result from '@/components/Result' +import IconSelector from '@/components/IconSelector' +import TagSelect from '@/components/TagSelect' +import ExceptionPage from '@/components/Exception' +import StandardFormRow from '@/components/StandardFormRow' +import ArticleListContent from '@/components/ArticleListContent' + +export { + AvatarList, + Bar, + ChartCard, + Liquid, + MiniArea, + MiniSmoothArea, + MiniBar, + MiniProgress, + Radar, + TagCloud, + RankList, + TransferBar, + Trend, + CountDown, + Ellipsis, + FooterToolbar, + NumberInfo, + DescriptionList, + // 兼容写法,请勿继续使用 + DescriptionList as DetailList, + Tree, + STable, + MultiTab, + Result, + ExceptionPage, + IconSelector, + TagSelect, + StandardFormRow, + ArticleListContent +} diff --git a/cmdb-ui/src/components/index.less b/cmdb-ui/src/components/index.less new file mode 100644 index 0000000..2d8d57e --- /dev/null +++ b/cmdb-ui/src/components/index.less @@ -0,0 +1,5 @@ +@import "~ant-design-vue/lib/style/index"; + +// The prefix to use on all css classes from ant-pro. +@ant-pro-prefix : ant-pro; +@ant-global-header-zindex : 105; \ No newline at end of file diff --git a/cmdb-ui/src/components/tools/Breadcrumb.vue b/cmdb-ui/src/components/tools/Breadcrumb.vue new file mode 100644 index 0000000..9bc141c --- /dev/null +++ b/cmdb-ui/src/components/tools/Breadcrumb.vue @@ -0,0 +1,45 @@ + + + + + diff --git a/cmdb-ui/src/components/tools/DetailList.vue b/cmdb-ui/src/components/tools/DetailList.vue new file mode 100644 index 0000000..6745a08 --- /dev/null +++ b/cmdb-ui/src/components/tools/DetailList.vue @@ -0,0 +1,5 @@ + diff --git a/cmdb-ui/src/components/tools/HeadInfo.vue b/cmdb-ui/src/components/tools/HeadInfo.vue new file mode 100644 index 0000000..7fbc692 --- /dev/null +++ b/cmdb-ui/src/components/tools/HeadInfo.vue @@ -0,0 +1,67 @@ + + + + + diff --git a/cmdb-ui/src/components/tools/Logo.vue b/cmdb-ui/src/components/tools/Logo.vue new file mode 100644 index 0000000..748aa13 --- /dev/null +++ b/cmdb-ui/src/components/tools/Logo.vue @@ -0,0 +1,30 @@ + + + diff --git a/cmdb-ui/src/components/tools/TopMenu.vue b/cmdb-ui/src/components/tools/TopMenu.vue new file mode 100644 index 0000000..f59307a --- /dev/null +++ b/cmdb-ui/src/components/tools/TopMenu.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/cmdb-ui/src/components/tools/TwoStepCaptcha.vue b/cmdb-ui/src/components/tools/TwoStepCaptcha.vue new file mode 100644 index 0000000..01302b4 --- /dev/null +++ b/cmdb-ui/src/components/tools/TwoStepCaptcha.vue @@ -0,0 +1,89 @@ + + + + diff --git a/cmdb-ui/src/components/tools/UserMenu.vue b/cmdb-ui/src/components/tools/UserMenu.vue new file mode 100644 index 0000000..03c0951 --- /dev/null +++ b/cmdb-ui/src/components/tools/UserMenu.vue @@ -0,0 +1,73 @@ + + + diff --git a/cmdb-ui/src/components/tools/index.js b/cmdb-ui/src/components/tools/index.js new file mode 100644 index 0000000..e69de29 diff --git a/cmdb-ui/src/config/defaultSettings.js b/cmdb-ui/src/config/defaultSettings.js new file mode 100644 index 0000000..a7136e2 --- /dev/null +++ b/cmdb-ui/src/config/defaultSettings.js @@ -0,0 +1,34 @@ +/** + * 项目默认配置项 + * primaryColor - 默认主题色, 如果修改颜色不生效,请清理 localStorage + * navTheme - sidebar theme ['dark', 'light'] 两种主题 + * colorWeak - 色盲模式 + * layout - 整体布局方式 ['sidemenu', 'topmenu'] 两种布局 + * fixedHeader - 固定 Header : boolean + * fixSiderbar - 固定左侧菜单栏 : boolean + * autoHideHeader - 向下滚动时,隐藏 Header : boolean + * contentWidth - 内容区布局: 流式 | 固定 + * + * storageOptions: {} - Vue-ls 插件配置项 (localStorage/sessionStorage) + * + */ + +export default { + useSSO: false, + primaryColor: '#1890ff', // primary color of ant design + navTheme: 'dark', // theme for nav menu + layout: 'sidemenu', // nav menu position: sidemenu or topmenu + contentWidth: 'Fixed', // layout of content: Fluid or Fixed, only works when layout is topmenu + fixedHeader: true, // sticky header + fixSiderbar: true, // sticky siderbar + autoHideHeader: true, // auto hide header + colorWeak: false, + multiTab: false, + production: process.env.NODE_ENV === 'production' && process.env.VUE_APP_PREVIEW !== 'true', + // vue-ls options + storageOptions: { + namespace: 'pro__', // key prefix + name: 'ls', // name variable Vue.[ls] or this.[$ls], + storage: 'local' // storage name session, local, memory + } +} diff --git a/cmdb-ui/src/config/router.config.js b/cmdb-ui/src/config/router.config.js new file mode 100644 index 0000000..386dbeb --- /dev/null +++ b/cmdb-ui/src/config/router.config.js @@ -0,0 +1,219 @@ +// eslint-disable-next-line +import store from '@/store' + +import { UserLayout, BasicLayout, RouteView } from '@/layouts' +import { getPreference } from '@/api/cmdb/preference' + +const cmdbRouter = [ + // preference + { + path: '/preference', + component: () => import('@/views/cmdb/preference'), + name: 'cmdb_preference', + meta: { title: '我的订阅', icon: 'book', keepAlive: true } + }, + // relation views + { + path: '/relation_views', + component: () => import('@/views/cmdb/relation_views'), + name: 'cmdb_relation_views', + meta: { title: '关系视图', icon: 'link', keepAlive: true }, + hideChildrenInMenu: true, + children: [ + { + path: '/relation_views/:viewId', + name: 'cmdb_relation_views_item', + component: () => import('@/views/cmdb/relation_views'), + meta: { title: '关系视图', keepAlive: true }, + hidden: true + }] + }, + // tree views + { + path: '/tree_views', + component: () => import('@/views/cmdb/tree_views'), + name: 'cmdb_tree_views', + meta: { title: '树形视图', icon: 'share-alt', keepAlive: true }, + hideChildrenInMenu: true, + children: [ + { + path: '/tree_views/:typeId', + name: 'cmdb_tree_views_item', + component: () => import('@/views/cmdb/tree_views'), + meta: { title: '树形视图', keepAlive: true }, + hidden: true + }] + }, + // batch + { + path: '/batch', + component: () => import('@/views/cmdb/batch'), + name: 'cmdb_batch', + meta: { 'title': '批量导入', icon: 'upload', keepAlive: true } + }, + { + path: '/config//ci_types', + name: 'cmdb_ci_type', + component: RouteView, + redirect: '/ci_types', + meta: { title: '模型配置', icon: 'setting', permission: ['admin'] }, + children: [ + { + path: '/config/ci_types', + name: 'ci_type', + hideChildrenInMenu: true, + component: () => import('@/views/cmdb/modeling/ci_type/list'), + meta: { title: '模型管理', keepAlive: true } + }, + { + path: '/config/ci_types/:CITypeName/detail/:CITypeId', + name: 'ci_type_detail', + hideChildrenInMenu: true, + component: () => import('@/views/cmdb/modeling/ci_type/detail'), + meta: { title: '模型管理', keepAlive: true, hidden: true }, + hidden: true + }, + { + path: '/config/attributes', + name: 'attributes', + hideChildrenInMenu: true, + component: () => import('@/views/cmdb/modeling/attributes/index'), + meta: { title: '属性库', keepAlive: true } + }, + { + path: '/config/relation_type', + name: 'relation_type', + hideChildrenInMenu: true, + component: () => import('@/views/cmdb/modeling/relation_type/index'), + meta: { title: '关系类型', keepAlive: true } + }, + { + path: '/config/preference_relation', + name: 'preference_relation', + hideChildrenInMenu: true, + component: () => import('@/views/cmdb/modeling/preference_relation/index'), + meta: { title: '关系视图定义', keepAlive: true } + } + ] + }, + { + path: '/acl', + name: 'cmdb_acl', + component: RouteView, + redirect: '/acl/users', + meta: { title: '权限管理', icon: 'safety-certificate', permission: ['admin'] }, + children: [ + { + path: '/acl/users', + name: 'cmdb_acl_users', + hideChildrenInMenu: true, + component: () => import('@/views/acl/users'), + meta: { title: '用户管理', keepAlive: true } + }, + { + path: '/acl/roles', + name: 'cmdb_acl_roles', + hideChildrenInMenu: true, + component: () => import('@/views/acl/roles'), + meta: { title: '角色管理', keepAlive: true } + }, + { + path: '/acl/resources', + name: 'cmdb_acl_resources', + hideChildrenInMenu: true, + component: () => import('@/views/acl/resources'), + meta: { title: '资源管理', keepAlive: true } + }, + { + path: '/acl/resource_types', + name: 'cmdb_acl_resource_types', + hideChildrenInMenu: true, + component: () => import('@/views/acl/resource_types'), + meta: { title: '资源类型', keepAlive: true } + } + ] + } +] + +function copyArray (arr) { + return arr.map((e) => { + if (typeof e === 'object') { + return Object.assign({}, e) + } else { + return e + } + }) +} + +export const generatorDynamicRouter = () => { + return new Promise((resolve, reject) => { + // cmdb 订阅的模型 + getPreference().then(res => { + const routers = copyArray(asyncRouterMap) + routers[0].children = copyArray(cmdbRouter) + for (let i = 0; i < res.length; i++) { + const item = res[i] + routers[0].children.unshift({ + path: `/instances/types/${item.id}`, + component: () => import(`@/views/cmdb/ci/index`), + name: `cmdb_${item.id}`, + meta: { title: item.alias, icon: 'table', keepAlive: true, typeId: item.id }, + hideChildrenInMenu: true + }) + } + + resolve(routers) + }) + }) +} + +const asyncRouterMap = [ + { + path: '/', + name: 'cmdb', + component: BasicLayout, + meta: { title: 'CMDB', keepAlive: true }, + redirect: () => { + return store.getters.addRouters[0].children.find(item => !item.hidden) + } + }, + { + path: '*', redirect: '/404', hidden: true + } +] + +/** + * 基础路由 + * @type { *[] } + */ +export const constantRouterMap = [ + { + path: '/user', + component: UserLayout, + redirect: '/user/login', + hidden: true, + children: [ + { + path: 'login', + name: 'login', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/Login') + }, + { + path: 'register', + name: 'register', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/Register') + }, + { + path: 'register-result', + name: 'registerResult', + component: () => import(/* webpackChunkName: "user" */ '@/views/user/RegisterResult') + } + ] + }, + + { + path: '/404', + component: () => import(/* webpackChunkName: "fail" */ '@/views/exception/404') + } + +] diff --git a/cmdb-ui/src/core/bootstrap.js b/cmdb-ui/src/core/bootstrap.js new file mode 100644 index 0000000..155a9cc --- /dev/null +++ b/cmdb-ui/src/core/bootstrap.js @@ -0,0 +1,34 @@ +import Vue from 'vue' +import store from '@/store/' +import { + ACCESS_TOKEN, + DEFAULT_COLOR, + DEFAULT_THEME, + DEFAULT_LAYOUT_MODE, + DEFAULT_COLOR_WEAK, + SIDEBAR_TYPE, + DEFAULT_FIXED_HEADER, + DEFAULT_FIXED_HEADER_HIDDEN, + DEFAULT_FIXED_SIDEMENU, + DEFAULT_CONTENT_WIDTH_TYPE, + DEFAULT_MULTI_TAB +} from '@/store/mutation-types' +import config from '@/config/defaultSettings' + +export default function Initializer () { + console.log(`API_URL: ${process.env.VUE_APP_API_BASE_URL}`) + + store.commit('SET_SIDEBAR_TYPE', Vue.ls.get(SIDEBAR_TYPE, true)) + store.commit('TOGGLE_THEME', Vue.ls.get(DEFAULT_THEME, config.navTheme)) + store.commit('TOGGLE_LAYOUT_MODE', Vue.ls.get(DEFAULT_LAYOUT_MODE, config.layout)) + store.commit('TOGGLE_FIXED_HEADER', Vue.ls.get(DEFAULT_FIXED_HEADER, config.fixedHeader)) + store.commit('TOGGLE_FIXED_SIDERBAR', Vue.ls.get(DEFAULT_FIXED_SIDEMENU, config.fixSiderbar)) + store.commit('TOGGLE_CONTENT_WIDTH', Vue.ls.get(DEFAULT_CONTENT_WIDTH_TYPE, config.contentWidth)) + store.commit('TOGGLE_FIXED_HEADER_HIDDEN', Vue.ls.get(DEFAULT_FIXED_HEADER_HIDDEN, config.autoHideHeader)) + store.commit('TOGGLE_WEAK', Vue.ls.get(DEFAULT_COLOR_WEAK, config.colorWeak)) + store.commit('TOGGLE_COLOR', Vue.ls.get(DEFAULT_COLOR, config.primaryColor)) + store.commit('TOGGLE_MULTI_TAB', Vue.ls.get(DEFAULT_MULTI_TAB, config.multiTab)) + store.commit('SET_TOKEN', Vue.ls.get(ACCESS_TOKEN)) + + // last step +} diff --git a/cmdb-ui/src/core/directives/action.js b/cmdb-ui/src/core/directives/action.js new file mode 100644 index 0000000..bdc9ec0 --- /dev/null +++ b/cmdb-ui/src/core/directives/action.js @@ -0,0 +1,34 @@ +import Vue from 'vue' +import store from '@/store' + +/** + * Action 权限指令 + * 指令用法: + * - 在需要控制 action 级别权限的组件上使用 v-action:[method] , 如下: + * 添加用户 + * 删除用户 + * 修改 + * + * - 当前用户没有权限时,组件上使用了该指令则会被隐藏 + * - 当后台权限跟 pro 提供的模式不同时,只需要针对这里的权限过滤进行修改即可 + * + * @see https://github.com/sendya/ant-design-pro-vue/pull/53 + */ +const action = Vue.directive('action', { + inserted: function (el, binding, vnode) { + const actionName = binding.arg + const roles = store.getters.roles + const elVal = vnode.context.$route.meta.permission + const permissionId = elVal instanceof String && [elVal] || elVal + roles.permissions.forEach(p => { + if (!permissionId.includes(p.permissionId)) { + return + } + if (p.actionList && !p.actionList.includes(actionName)) { + el.parentNode && el.parentNode.removeChild(el) || (el.style.display = 'none') + } + }) + } +}) + +export default action diff --git a/cmdb-ui/src/core/icons.js b/cmdb-ui/src/core/icons.js new file mode 100644 index 0000000..46b7261 --- /dev/null +++ b/cmdb-ui/src/core/icons.js @@ -0,0 +1,11 @@ +/** + * Custom icon list + * All icons are loaded here for easy management + * @see https://vue.ant.design/components/icon/#Custom-Font-Icon + * + * 自定义图标加载表 + * 所有图标均从这里加载,方便管理 + */ +import bxAnaalyse from '@/assets/icons/bx-analyse.svg?inline' // path to your '*.svg?inline' file. + +export { bxAnaalyse } diff --git a/cmdb-ui/src/core/lazy_lib/components_use.js b/cmdb-ui/src/core/lazy_lib/components_use.js new file mode 100644 index 0000000..c7c28c3 --- /dev/null +++ b/cmdb-ui/src/core/lazy_lib/components_use.js @@ -0,0 +1,99 @@ + +/* eslint-disable */ +/** + * 该文件是为了按需加载,剔除掉了一些不需要的框架组件。 + * 减少了编译支持库包大小 + * + * 当需要更多组件依赖时,在该文件加入即可 + */ +import Vue from 'vue' +import { + LocaleProvider, + Layout, + Input, + InputNumber, + Button, + Switch, + Radio, + Checkbox, + Select, + Card, + Form, + Row, + Col, + Modal, + Table, + Tabs, + Icon, + Badge, + Popover, + Dropdown, + List, + Avatar, + Breadcrumb, + Steps, + Spin, + Menu, + Drawer, + Tooltip, + Alert, + Tag, + Divider, + DatePicker, + TimePicker, + Upload, + Progress, + Skeleton, + Popconfirm, + message, + notification +} from 'ant-design-vue' +// import VueCropper from 'vue-cropper' + +Vue.use(LocaleProvider) +Vue.use(Layout) +Vue.use(Input) +Vue.use(InputNumber) +Vue.use(Button) +Vue.use(Switch) +Vue.use(Radio) +Vue.use(Checkbox) +Vue.use(Select) +Vue.use(Card) +Vue.use(Form) +Vue.use(Row) +Vue.use(Col) +Vue.use(Modal) +Vue.use(Table) +Vue.use(Tabs) +Vue.use(Icon) +Vue.use(Badge) +Vue.use(Popover) +Vue.use(Dropdown) +Vue.use(List) +Vue.use(Avatar) +Vue.use(Breadcrumb) +Vue.use(Steps) +Vue.use(Spin) +Vue.use(Menu) +Vue.use(Drawer) +Vue.use(Tooltip) +Vue.use(Alert) +Vue.use(Tag) +Vue.use(Divider) +Vue.use(DatePicker) +Vue.use(TimePicker) +Vue.use(Upload) +Vue.use(Progress) +Vue.use(Skeleton) +Vue.use(Popconfirm) +// Vue.use(VueCropper) +Vue.use(notification) + +Vue.prototype.$confirm = Modal.confirm +Vue.prototype.$message = message +Vue.prototype.$notification = notification +Vue.prototype.$info = Modal.info +Vue.prototype.$success = Modal.success +Vue.prototype.$error = Modal.error +Vue.prototype.$warning = Modal.warning \ No newline at end of file diff --git a/cmdb-ui/src/core/lazy_use.js b/cmdb-ui/src/core/lazy_use.js new file mode 100644 index 0000000..24d50dc --- /dev/null +++ b/cmdb-ui/src/core/lazy_use.js @@ -0,0 +1,20 @@ +import Vue from 'vue' +import VueStorage from 'vue-ls' +import config from '@/config/defaultSettings' + +// base library +import '@/core/lazy_lib/components_use' +import Viser from 'viser-vue' + +// ext library +import VueClipboard from 'vue-clipboard2' +import PermissionHelper from '@/utils/helper/permission' +import './directives/action' + +VueClipboard.config.autoSetContainer = true + +Vue.use(Viser) + +Vue.use(VueStorage, config.storageOptions) +Vue.use(VueClipboard) +Vue.use(PermissionHelper) diff --git a/cmdb-ui/src/core/use.js b/cmdb-ui/src/core/use.js new file mode 100644 index 0000000..9f051c7 --- /dev/null +++ b/cmdb-ui/src/core/use.js @@ -0,0 +1,25 @@ +import Vue from 'vue' +import VueStorage from 'vue-ls' +import config from '@/config/defaultSettings' + +// base library +import Antd from 'ant-design-vue' +import Viser from 'viser-vue' +import VueCropper from 'vue-cropper' +import 'ant-design-vue/dist/antd.less' + +// ext library +import VueClipboard from 'vue-clipboard2' +import PermissionHelper from '@/utils/helper/permission' +// import '@/components/use' +import './directives/action' + +VueClipboard.config.autoSetContainer = true + +Vue.use(Antd) +Vue.use(Viser) + +Vue.use(VueStorage, config.storageOptions) +Vue.use(VueClipboard) +Vue.use(PermissionHelper) +Vue.use(VueCropper) diff --git a/cmdb-ui/src/layouts/BasicLayout.vue b/cmdb-ui/src/layouts/BasicLayout.vue new file mode 100644 index 0000000..355ecea --- /dev/null +++ b/cmdb-ui/src/layouts/BasicLayout.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/cmdb-ui/src/layouts/BlankLayout.vue b/cmdb-ui/src/layouts/BlankLayout.vue new file mode 100644 index 0000000..1bfbfbf --- /dev/null +++ b/cmdb-ui/src/layouts/BlankLayout.vue @@ -0,0 +1,16 @@ + + + + + diff --git a/cmdb-ui/src/layouts/PageView.vue b/cmdb-ui/src/layouts/PageView.vue new file mode 100644 index 0000000..4857405 --- /dev/null +++ b/cmdb-ui/src/layouts/PageView.vue @@ -0,0 +1,181 @@ + + + + + diff --git a/cmdb-ui/src/layouts/RouteView.vue b/cmdb-ui/src/layouts/RouteView.vue new file mode 100644 index 0000000..58fa742 --- /dev/null +++ b/cmdb-ui/src/layouts/RouteView.vue @@ -0,0 +1,32 @@ + diff --git a/cmdb-ui/src/layouts/UserLayout.vue b/cmdb-ui/src/layouts/UserLayout.vue new file mode 100644 index 0000000..66dc239 --- /dev/null +++ b/cmdb-ui/src/layouts/UserLayout.vue @@ -0,0 +1,139 @@ + + + + + diff --git a/cmdb-ui/src/layouts/index.js b/cmdb-ui/src/layouts/index.js new file mode 100644 index 0000000..1d62d6c --- /dev/null +++ b/cmdb-ui/src/layouts/index.js @@ -0,0 +1,7 @@ +import UserLayout from './UserLayout' +import BlankLayout from './BlankLayout' +import BasicLayout from './BasicLayout' +import RouteView from './RouteView' +import PageView from './PageView' + +export { UserLayout, BasicLayout, BlankLayout, RouteView, PageView } diff --git a/cmdb-ui/src/main.js b/cmdb-ui/src/main.js new file mode 100644 index 0000000..bc8debb --- /dev/null +++ b/cmdb-ui/src/main.js @@ -0,0 +1,27 @@ +// ie polyfill +import '@babel/polyfill' + +import Vue from 'vue' +import EventBus from './EventBus' +import App from './App.vue' +import router from './router' +import store from './store/' +import { VueAxios } from './utils/request' + +import bootstrap from './core/bootstrap' +import './core/use' +import './permission' // permission control +import './utils/filter' // global filter +Vue.config.productionTip = false + +Vue.prototype.$bus = EventBus + +// mount axios Vue.$http and this.$http +Vue.use(VueAxios) + +new Vue({ + router, + store, + created: bootstrap, + render: h => h(App) +}).$mount('#app') diff --git a/cmdb-ui/src/permission.js b/cmdb-ui/src/permission.js new file mode 100644 index 0000000..5dea6e6 --- /dev/null +++ b/cmdb-ui/src/permission.js @@ -0,0 +1,60 @@ +import Vue from 'vue' +import router from './router' +import store from './store' + +import NProgress from 'nprogress' // progress bar +import 'nprogress/nprogress.css' // progress bar style +import notification from 'ant-design-vue/es/notification' +import { setDocumentTitle, domTitle } from '@/utils/domUtil' +import config from '@/config/defaultSettings' +import { ACCESS_TOKEN } from './store/mutation-types' + +NProgress.configure({ showSpinner: false }) // NProgress Configuration + +router.beforeEach((to, from, next) => { + NProgress.start() // start progress bar + to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${to.meta.title} - ${domTitle}`)) + if ((config.useSSO || (!config.useSSO && Vue.ls.get(ACCESS_TOKEN))) && store.getters.roles.length === 0) { + store + .dispatch('GetInfo') + .then(res => { + const roles = res.result && res.result.role + store.dispatch('GenerateRoutes', { roles }).then(() => { + // 根据roles权限生成可访问的路由表 + // 动态添加可访问路由表 + router.addRoutes(store.getters.addRouters) + + const redirect = decodeURIComponent(from.query.redirect || to.path) + if (to.path === redirect) { + // hack方法 确保addRoutes已完成 ,set the replace: true so the navigation will not leave a history record + next({ ...to, replace: true }) + } else { + // 跳转到目的路由 + next({ path: redirect }) + } + }) + }) + .catch((e) => { + console.log(e) + notification.error({ + message: '错误', + description: '请求用户信息失败,请重试' + }) + setTimeout(() => { + store.dispatch('Logout') + }, 3000) + }) + } else if (to.path === '/user/login' && !config.useSSO && store.getters.roles.length !== 0) { + next({ path: '/' }) + NProgress.done() + } else if (!config.useSSO && !Vue.ls.get(ACCESS_TOKEN) && to.path !== '/user/login') { + next({ path: '/user/login', query: { redirect: to.fullPath } }) + NProgress.done() + } else { + next() + } +}) + +router.afterEach(() => { + NProgress.done() // finish progress bar +}) diff --git a/cmdb-ui/src/router/README.md b/cmdb-ui/src/router/README.md new file mode 100644 index 0000000..6618270 --- /dev/null +++ b/cmdb-ui/src/router/README.md @@ -0,0 +1,145 @@ +路由/菜单说明 +==== + + + +配置文件路径 +---- + +`@/config/router.config.js` + + + +格式和说明 +---- + +```javascript +/** + * 路由配置说明: + * 建议:sider menu 请不要超过三级菜单,若超过三级菜单,则应该设计为顶部主菜单 配合左侧次级菜单 + * + **/ + { + redirect: noredirect, + name: 'router-name', + hidden: true, + meta: { + title: 'title', + icon: 'a-icon', + keepAlive: true, + hiddenHeaderContent: true, + } +} +``` + + + +`{ Route }` 对象 + +| 参数 | 说明 | 类型 | 默认值 | +| -------- | ----------------------------------------- | ------- | ------ | +| hidden | 控制路由是否显示在 sidebar | boolean | false | +| redirect | 重定向地址, 访问这个路由时,自定进行重定向 | string | - | +| name | 路由名称, 必须设置,且不能重名 | string | - | +| meta | 路由元信息(路由附带扩展信息) | object | {} | +| hideChildrenInMenu | 强制菜单显示为Item而不是SubItem(配合 meta.hidden) | boolean | - | + + +`{ Meta }` 路由元信息对象 + +| 参数 | 说明 | 类型 | 默认值 | +| ------------------- | ------------------------------------------------------------ | ------- | ------ | +| title | 路由标题, 用于显示面包屑, 页面标题 *推荐设置 | string | - | +| icon | 路由在 menu 上显示的图标 | [string,svg] | - | +| keepAlive | 缓存该路由 | boolean | false | +| hidden | 配合`hideChildrenInMenu`使用,用于隐藏菜单时,提供递归到父菜单显示 选中菜单项_(可参考 个人页 配置方式)_ | boolean | false | +| hiddenHeaderContent | *特殊 隐藏 [PageHeader](https://github.com/sendya/ant-design-pro-vue/blob/master/src/components/layout/PageHeader.vue#L14) 组件中的页面带的 面包屑和页面标题栏 | boolean | false | +| permission | 与项目提供的权限拦截匹配的权限,如果不匹配,则会被禁止访问该路由页面 | array | [] | + +> 路由自定义 `Icon` 请引入自定义 `svg` Icon 文件,然后传递给路由的 `meta.icon` 参数即可 + +路由例子 +---- + +```ecmascript 6 +const asyncRouterMap = [ + { + path: '/', + name: 'index', + component: BasicLayout, + meta: { title: '首页' }, + redirect: '/dashboard/analysis', + children: [ + { + path: '/dashboard', + component: RouteView, + name: 'dashboard', + redirect: '/dashboard/workplace', + meta: {title: '仪表盘', icon: 'dashboard', permission: ['dashboard']}, + children: [ + { + path: '/dashboard/analysis', + name: 'Analysis', + component: () => import('@/views/dashboard/Analysis'), + meta: {title: '分析页', permission: ['dashboard']} + }, + { + path: '/dashboard/monitor', + name: 'Monitor', + hidden: true, + component: () => import('@/views/dashboard/Monitor'), + meta: {title: '监控页', permission: ['dashboard']} + }, + { + path: '/dashboard/workplace', + name: 'Workplace', + component: () => import('@/views/dashboard/Workplace'), + meta: {title: '工作台', permission: ['dashboard']} + } + ] + }, + + // result + { + path: '/result', + name: 'result', + component: PageView, + redirect: '/result/success', + meta: { title: '结果页', icon: 'check-circle-o', permission: [ 'result' ] }, + children: [ + { + path: '/result/success', + name: 'ResultSuccess', + component: () => import(/* webpackChunkName: "result" */ '@/views/result/Success'), + // 该页面隐藏面包屑和页面标题栏 + meta: { title: '成功', hiddenHeaderContent: true, permission: [ 'result' ] } + }, + { + path: '/result/fail', + name: 'ResultFail', + component: () => import(/* webpackChunkName: "result" */ '@/views/result/Error'), + // 该页面隐藏面包屑和页面标题栏 + meta: { title: '失败', hiddenHeaderContent: true, permission: [ 'result' ] } + } + ] + }, + ... + ] + }, +] +``` + +> 1. 请注意 `component: () => import('..') ` 方式引入路由的页面组件为 懒加载模式。具体可以看 [Vue 官方文档](https://router.vuejs.org/zh/guide/advanced/lazy-loading.html) +> 2. 增加新的路由应该增加在 '/' (index) 路由的 `children` 内 +> 3. 子路由的父级路由必须有 `router-view` 才能让子路由渲染出来,请仔细查阅 vue-router 文档 +> 4. `permission` 可以进行自定义修改,只需要对这个模块进行自定义修改即可 [src/store/modules/permission.js#L10](https://github.com/sendya/ant-design-pro-vue/blob/master/src/store/modules/permission.js#L10) + + + +附权限路由结构: + +![权限结构](https://static-2.loacg.com/open/static/github/permissions.png) + + + +第二种前端路由由后端动态生成的设计,可以前往官网文档 https://pro.loacg.com/docs/authority-management 参考 \ No newline at end of file diff --git a/cmdb-ui/src/router/index.js b/cmdb-ui/src/router/index.js new file mode 100644 index 0000000..f3d4bd2 --- /dev/null +++ b/cmdb-ui/src/router/index.js @@ -0,0 +1,28 @@ +import Vue from 'vue' +import Router from 'vue-router' +import { constantRouterMap } from '@/config/router.config' + +Vue.use(Router) + +// export default new Router({ +// mode: 'history', +// base: process.env.BASE_URL, +// scrollBehavior: () => ({ y: 0 }), +// routes: constantRouterMap +// }) + +const createRouter = () => new Router({ + mode: 'history', + base: process.env.BASE_URL, + scrollBehavior: () => ({ y: 0 }), + routes: constantRouterMap +}) + +const router = createRouter() + +export function resetRouter () { + const newRouter = createRouter() + router.matcher = newRouter.matcher // reset router +} + +export default router diff --git a/cmdb-ui/src/store/getters.js b/cmdb-ui/src/store/getters.js new file mode 100644 index 0000000..8805d33 --- /dev/null +++ b/cmdb-ui/src/store/getters.js @@ -0,0 +1,15 @@ +const getters = { + device: state => state.app.device, + theme: state => state.app.theme, + color: state => state.app.color, + token: state => state.user.token, + avatar: state => state.user.avatar, + nickname: state => state.user.name, + welcome: state => state.user.welcome, + roles: state => state.user.roles, + userInfo: state => state.user.info, + addRouters: state => state.permission.addRouters, + multiTab: state => state.app.multiTab +} + +export default getters diff --git a/cmdb-ui/src/store/index.js b/cmdb-ui/src/store/index.js new file mode 100644 index 0000000..4e8529a --- /dev/null +++ b/cmdb-ui/src/store/index.js @@ -0,0 +1,27 @@ +import Vue from 'vue' +import Vuex from 'vuex' + +import app from './modules/app' +import user from './modules/user' +import permission from './modules/permission' +import getters from './getters' + +Vue.use(Vuex) + +export default new Vuex.Store({ + modules: { + app, + user, + permission + }, + state: { + + }, + mutations: { + + }, + actions: { + + }, + getters +}) diff --git a/cmdb-ui/src/store/modules/app.js b/cmdb-ui/src/store/modules/app.js new file mode 100644 index 0000000..9cc8d4e --- /dev/null +++ b/cmdb-ui/src/store/modules/app.js @@ -0,0 +1,123 @@ +import Vue from 'vue' +import { + SIDEBAR_TYPE, + DEFAULT_THEME, + DEFAULT_LAYOUT_MODE, + DEFAULT_COLOR, + DEFAULT_COLOR_WEAK, + DEFAULT_FIXED_HEADER, + DEFAULT_FIXED_SIDEMENU, + DEFAULT_FIXED_HEADER_HIDDEN, + DEFAULT_CONTENT_WIDTH_TYPE, + DEFAULT_MULTI_TAB +} from '@/store/mutation-types' + +const app = { + state: { + name: 'cmdb', + sidebar: true, + device: 'desktop', + theme: '', + layout: '', + contentWidth: '', + fixedHeader: true, + fixSiderbar: true, + autoHideHeader: true, + color: null, + weak: false, + multiTab: false + }, + mutations: { + SET_SIDEBAR_TYPE: (state, type) => { + state.sidebar = type + Vue.ls.set(SIDEBAR_TYPE, type) + }, + CLOSE_SIDEBAR: (state) => { + Vue.ls.set(SIDEBAR_TYPE, true) + state.sidebar = false + }, + TOGGLE_DEVICE: (state, device) => { + state.device = device + }, + TOGGLE_THEME: (state, theme) => { + // setStore('_DEFAULT_THEME', theme) + Vue.ls.set(DEFAULT_THEME, theme) + state.theme = theme + }, + TOGGLE_LAYOUT_MODE: (state, layout) => { + Vue.ls.set(DEFAULT_LAYOUT_MODE, layout) + state.layout = layout + }, + TOGGLE_FIXED_HEADER: (state, fixed) => { + Vue.ls.set(DEFAULT_FIXED_HEADER, fixed) + state.fixedHeader = fixed + }, + TOGGLE_FIXED_SIDERBAR: (state, fixed) => { + Vue.ls.set(DEFAULT_FIXED_SIDEMENU, fixed) + state.fixSiderbar = fixed + }, + TOGGLE_FIXED_HEADER_HIDDEN: (state, show) => { + Vue.ls.set(DEFAULT_FIXED_HEADER_HIDDEN, show) + state.autoHideHeader = show + }, + TOGGLE_CONTENT_WIDTH: (state, type) => { + Vue.ls.set(DEFAULT_CONTENT_WIDTH_TYPE, type) + state.contentWidth = type + }, + TOGGLE_COLOR: (state, color) => { + Vue.ls.set(DEFAULT_COLOR, color) + state.color = color + }, + TOGGLE_WEAK: (state, flag) => { + Vue.ls.set(DEFAULT_COLOR_WEAK, flag) + state.weak = flag + }, + TOGGLE_MULTI_TAB: (state, bool) => { + Vue.ls.set(DEFAULT_MULTI_TAB, bool) + state.multiTab = bool + } + }, + actions: { + setSidebar ({ commit }, type) { + commit('SET_SIDEBAR_TYPE', type) + }, + CloseSidebar ({ commit }) { + commit('CLOSE_SIDEBAR') + }, + ToggleDevice ({ commit }, device) { + commit('TOGGLE_DEVICE', device) + }, + ToggleTheme ({ commit }, theme) { + commit('TOGGLE_THEME', theme) + }, + ToggleLayoutMode ({ commit }, mode) { + commit('TOGGLE_LAYOUT_MODE', mode) + }, + ToggleFixedHeader ({ commit }, fixedHeader) { + if (!fixedHeader) { + commit('TOGGLE_FIXED_HEADER_HIDDEN', false) + } + commit('TOGGLE_FIXED_HEADER', fixedHeader) + }, + ToggleFixSiderbar ({ commit }, fixSiderbar) { + commit('TOGGLE_FIXED_SIDERBAR', fixSiderbar) + }, + ToggleFixedHeaderHidden ({ commit }, show) { + commit('TOGGLE_FIXED_HEADER_HIDDEN', show) + }, + ToggleContentWidth ({ commit }, type) { + commit('TOGGLE_CONTENT_WIDTH', type) + }, + ToggleColor ({ commit }, color) { + commit('TOGGLE_COLOR', color) + }, + ToggleWeak ({ commit }, weakFlag) { + commit('TOGGLE_WEAK', weakFlag) + }, + ToggleMultiTab ({ commit }, bool) { + commit('TOGGLE_MULTI_TAB', bool) + } + } +} + +export default app diff --git a/cmdb-ui/src/store/modules/permission.js b/cmdb-ui/src/store/modules/permission.js new file mode 100644 index 0000000..5139d27 --- /dev/null +++ b/cmdb-ui/src/store/modules/permission.js @@ -0,0 +1,62 @@ +import { generatorDynamicRouter, constantRouterMap } from '@/config/router.config' + +/** + * 过滤账户是否拥有某一个权限,并将菜单从加载列表移除 + * + * @param permission + * @param route + * @returns {boolean} + */ +function hasPermission (permission, route) { + if (route.meta && route.meta.permission) { + let flag = false + for (let i = 0, len = permission.length; i < len; i++) { + flag = route.meta.permission.includes(permission[i]) + if (flag) { + return true + } + } + return false + } + return true +} + +function filterAsyncRouter (routerMap, roles) { + const accessedRouters = routerMap.filter(route => { + if (hasPermission(roles.permissions, route)) { + if (route.children && route.children.length) { + route.children = filterAsyncRouter(route.children, roles) + } + return true + } + return false + }) + return accessedRouters +} + +const permission = { + state: { + routers: constantRouterMap, + addRouters: [] + }, + mutations: { + SET_ROUTERS: (state, routers) => { + state.addRouters = routers + state.routers = constantRouterMap.concat(routers) + } + }, + actions: { + GenerateRoutes ({ commit }, data) { + return new Promise(resolve => { + const { roles } = data + generatorDynamicRouter(roles).then(routers => { + const accessedRouters = filterAsyncRouter(routers, roles) + commit('SET_ROUTERS', accessedRouters) + resolve() + }) + }) + } + } +} + +export default permission diff --git a/cmdb-ui/src/store/modules/user.js b/cmdb-ui/src/store/modules/user.js new file mode 100644 index 0000000..746c6ef --- /dev/null +++ b/cmdb-ui/src/store/modules/user.js @@ -0,0 +1,95 @@ +import Vue from 'vue' +import { login, getInfo, logout } from '@/api/login' +import { ACCESS_TOKEN } from '@/store/mutation-types' +import { welcome } from '@/utils/util' + +const user = { + state: { + token: '', + name: '', + welcome: '', + avatar: '', + roles: [], + info: {} + }, + + mutations: { + SET_TOKEN: (state, token) => { + state.token = token + }, + SET_NAME: (state, { name, welcome }) => { + state.name = name + state.welcome = welcome + }, + SET_AVATAR: (state, avatar) => { + state.avatar = avatar + }, + SET_ROLES: (state, roles) => { + state.roles = roles + }, + SET_INFO: (state, info) => { + state.info = info + } + }, + + actions: { + // 登录 + Login ({ commit }, userInfo) { + return new Promise((resolve, reject) => { + login(userInfo).then(response => { + Vue.ls.set(ACCESS_TOKEN, response.token, 7 * 24 * 60 * 60 * 1000) + commit('SET_TOKEN', response.token) + resolve() + }).catch(error => { + reject(error) + }) + }) + }, + + // 获取用户信息 + GetInfo ({ commit }) { + return new Promise((resolve, reject) => { + getInfo().then(response => { + const result = response.result + + const role = result.role + role.permissions = result.role.permissions + role.permissions.map(per => { + if (per.actionEntitySet != null && per.actionEntitySet.length > 0) { + const action = per.actionEntitySet.map(action => { return action.action }) + per.actionList = action + } + }) + role.permissionList = role.permissions.map(permission => { return permission }) + commit('SET_ROLES', result.role) + commit('SET_INFO', result) + commit('SET_NAME', { name: result.name, welcome: welcome() }) + commit('SET_AVATAR', result.avatar) + + resolve(response) + }).catch(error => { + reject(error) + }) + }) + }, + + // 登出 + Logout ({ commit, state }) { + return new Promise((resolve) => { + commit('SET_TOKEN', '') + commit('SET_ROLES', []) + Vue.ls.remove(ACCESS_TOKEN) + + logout(state.token).then(() => { + window.location.reload() + resolve() + }).catch(() => { + resolve() + }) + }) + } + + } +} + +export default user diff --git a/cmdb-ui/src/store/mutation-types.js b/cmdb-ui/src/store/mutation-types.js new file mode 100644 index 0000000..2cf2dbb --- /dev/null +++ b/cmdb-ui/src/store/mutation-types.js @@ -0,0 +1,16 @@ +export const ACCESS_TOKEN = 'Access-Token' +export const SIDEBAR_TYPE = 'SIDEBAR_TYPE' +export const DEFAULT_THEME = 'DEFAULT_THEME' +export const DEFAULT_LAYOUT_MODE = 'DEFAULT_LAYOUT_MODE' +export const DEFAULT_COLOR = 'DEFAULT_COLOR' +export const DEFAULT_COLOR_WEAK = 'DEFAULT_COLOR_WEAK' +export const DEFAULT_FIXED_HEADER = 'DEFAULT_FIXED_HEADER' +export const DEFAULT_FIXED_SIDEMENU = 'DEFAULT_FIXED_SIDEMENU' +export const DEFAULT_FIXED_HEADER_HIDDEN = 'DEFAULT_FIXED_HEADER_HIDDEN' +export const DEFAULT_CONTENT_WIDTH_TYPE = 'DEFAULT_CONTENT_WIDTH_TYPE' +export const DEFAULT_MULTI_TAB = 'DEFAULT_MULTI_TAB' + +export const CONTENT_WIDTH_TYPE = { + Fluid: 'Fluid', + Fixed: 'Fixed' +} diff --git a/cmdb-ui/src/utils/axios.js b/cmdb-ui/src/utils/axios.js new file mode 100644 index 0000000..3b91f6b --- /dev/null +++ b/cmdb-ui/src/utils/axios.js @@ -0,0 +1,35 @@ +const VueAxios = { + vm: {}, + // eslint-disable-next-line no-unused-vars + install (Vue, instance) { + if (this.installed) { + return + } + this.installed = true + + if (!instance) { + // eslint-disable-next-line no-console + console.error('You have to install axios') + return + } + + Vue.axios = instance + + Object.defineProperties(Vue.prototype, { + axios: { + get: function get () { + return instance + } + }, + $http: { + get: function get () { + return instance + } + } + }) + } +} + +export { + VueAxios +} diff --git a/cmdb-ui/src/utils/device.js b/cmdb-ui/src/utils/device.js new file mode 100644 index 0000000..0f350f3 --- /dev/null +++ b/cmdb-ui/src/utils/device.js @@ -0,0 +1,33 @@ +import enquireJs from 'enquire.js' + +export const DEVICE_TYPE = { + DESKTOP: 'desktop', + TABLET: 'tablet', + MOBILE: 'mobile' +} + +export const deviceEnquire = function (callback) { + const matchDesktop = { + match: () => { + callback && callback(DEVICE_TYPE.DESKTOP) + } + } + + const matchLablet = { + match: () => { + callback && callback(DEVICE_TYPE.TABLET) + } + } + + const matchMobile = { + match: () => { + callback && callback(DEVICE_TYPE.MOBILE) + } + } + + // screen and (max-width: 1087.99px) + enquireJs + .register('screen and (max-width: 576px)', matchMobile) + .register('screen and (min-width: 576px) and (max-width: 1199px)', matchLablet) + .register('screen and (min-width: 1200px)', matchDesktop) +} diff --git a/cmdb-ui/src/utils/domUtil.js b/cmdb-ui/src/utils/domUtil.js new file mode 100644 index 0000000..58db9a8 --- /dev/null +++ b/cmdb-ui/src/utils/domUtil.js @@ -0,0 +1,19 @@ +export const setDocumentTitle = function (title) { + document.title = title + const ua = navigator.userAgent + // eslint-disable-next-line + const regex = /\bMicroMessenger\/([\d\.]+)/ + if (regex.test(ua) && /ip(hone|od|ad)/i.test(ua)) { + const i = document.createElement('iframe') + i.src = '/favicon.ico' + i.style.display = 'none' + i.onload = function () { + setTimeout(function () { + i.remove() + }, 9) + } + document.body.appendChild(i) + } +} + +export const domTitle = 'CMDB' diff --git a/cmdb-ui/src/utils/filter.js b/cmdb-ui/src/utils/filter.js new file mode 100644 index 0000000..45702c6 --- /dev/null +++ b/cmdb-ui/src/utils/filter.js @@ -0,0 +1,20 @@ +import Vue from 'vue' +import moment from 'moment' +import 'moment/locale/zh-cn' +moment.locale('zh-cn') + +Vue.filter('NumberFormat', function (value) { + if (!value) { + return '0' + } + const intPartFormat = value.toString().replace(/(\d)(?=(?:\d{3})+$)/g, '$1,') // 将整数部分逢三一断 + return intPartFormat +}) + +Vue.filter('dayjs', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return moment(dataStr).format(pattern) +}) + +Vue.filter('moment', function (dataStr, pattern = 'YYYY-MM-DD HH:mm:ss') { + return moment(dataStr).format(pattern) +}) diff --git a/cmdb-ui/src/utils/helper/permission.js b/cmdb-ui/src/utils/helper/permission.js new file mode 100644 index 0000000..a964324 --- /dev/null +++ b/cmdb-ui/src/utils/helper/permission.js @@ -0,0 +1,51 @@ +const PERMISSION_ENUM = { + 'add': { key: 'add', label: '新增' }, + 'delete': { key: 'delete', label: '删除' }, + 'edit': { key: 'edit', label: '修改' }, + 'query': { key: 'query', label: '查询' }, + 'get': { key: 'get', label: '详情' }, + 'enable': { key: 'enable', label: '启用' }, + 'disable': { key: 'disable', label: '禁用' }, + 'import': { key: 'import', label: '导入' }, + 'export': { key: 'export', label: '导出' } +} + +function plugin (Vue) { + if (plugin.installed) { + return + } + + !Vue.prototype.$auth && Object.defineProperties(Vue.prototype, { + $auth: { + get () { + const _this = this + return (permissions) => { + const [permission, action] = permissions.split('.') + const permissionList = _this.$store.getters.roles.permissions + return permissionList.find((val) => { + return val.permissionId === permission + }).actionList.findIndex((val) => { + return val === action + }) > -1 + } + } + } + }) + + !Vue.prototype.$enum && Object.defineProperties(Vue.prototype, { + $enum: { + get () { + // const _this = this; + return (val) => { + let result = PERMISSION_ENUM + val && val.split('.').forEach(v => { + result = result && result[v] || null + }) + return result + } + } + } + }) +} + +export default plugin diff --git a/cmdb-ui/src/utils/mixin.js b/cmdb-ui/src/utils/mixin.js new file mode 100644 index 0000000..217732d --- /dev/null +++ b/cmdb-ui/src/utils/mixin.js @@ -0,0 +1,76 @@ +// import Vue from 'vue' +import { deviceEnquire, DEVICE_TYPE } from '@/utils/device' +import { mapState } from 'vuex' + +// const mixinsComputed = Vue.config.optionMergeStrategies.computed +// const mixinsMethods = Vue.config.optionMergeStrategies.methods + +const mixin = { + computed: { + ...mapState({ + layoutMode: state => state.app.layout, + navTheme: state => state.app.theme, + primaryColor: state => state.app.color, + colorWeak: state => state.app.weak, + fixedHeader: state => state.app.fixedHeader, + fixSiderbar: state => state.app.fixSiderbar, + fixSidebar: state => state.app.fixSiderbar, + contentWidth: state => state.app.contentWidth, + autoHideHeader: state => state.app.autoHideHeader, + sidebarOpened: state => state.app.sidebar, + multiTab: state => state.app.multiTab + }) + }, + methods: { + isTopMenu () { + return this.layoutMode === 'topmenu' + }, + isSideMenu () { + return !this.isTopMenu() + } + } +} + +const mixinDevice = { + computed: { + ...mapState({ + device: state => state.app.device + }) + }, + methods: { + isMobile () { + return this.device === DEVICE_TYPE.MOBILE + }, + isDesktop () { + return this.device === DEVICE_TYPE.DESKTOP + }, + isTablet () { + return this.device === DEVICE_TYPE.TABLET + } + } +} + +const AppDeviceEnquire = { + mounted () { + const { $store } = this + deviceEnquire(deviceType => { + switch (deviceType) { + case DEVICE_TYPE.DESKTOP: + $store.commit('TOGGLE_DEVICE', 'desktop') + $store.dispatch('setSidebar', true) + break + case DEVICE_TYPE.TABLET: + $store.commit('TOGGLE_DEVICE', 'tablet') + $store.dispatch('setSidebar', false) + break + case DEVICE_TYPE.MOBILE: + default: + $store.commit('TOGGLE_DEVICE', 'mobile') + $store.dispatch('setSidebar', true) + break + } + }) + } +} + +export { mixin, AppDeviceEnquire, mixinDevice } diff --git a/cmdb-ui/src/utils/permissions.js b/cmdb-ui/src/utils/permissions.js new file mode 100644 index 0000000..f8668bb --- /dev/null +++ b/cmdb-ui/src/utils/permissions.js @@ -0,0 +1,8 @@ +export function actionToObject (json) { + try { + return JSON.parse(json) + } catch (e) { + console.log('err', e.message) + } + return [] +} diff --git a/cmdb-ui/src/utils/request.js b/cmdb-ui/src/utils/request.js new file mode 100644 index 0000000..2c485c6 --- /dev/null +++ b/cmdb-ui/src/utils/request.js @@ -0,0 +1,48 @@ +import Vue from 'vue' +import axios from 'axios' +import store from '@/store' +import { VueAxios } from './axios' +import { ACCESS_TOKEN } from '@/store/mutation-types' + +// 创建 axios 实例 +const service = axios.create({ + baseURL: process.env.VUE_APP_API_BASE_URL, // api base_url + timeout: 6000, // 请求超时时间 + withCredentials: true, + crossDomain: true +}) + +const err = (error) => { + if (error.response) { + if (error.response.status === 401) { + store.dispatch('Logout') + } + } + return Promise.reject(error) +} + +// request interceptor +service.interceptors.request.use(config => { + const token = Vue.ls.get(ACCESS_TOKEN) + if (token) { + config.headers['Access-Token'] = token // 让每个请求携带自定义 token 请根据实际情况自行修改 + } + return config +}, err) + +// response interceptor +service.interceptors.response.use((response) => { + return response.data +}, err) + +const installer = { + vm: {}, + install (Vue) { + Vue.use(VueAxios, service) + } +} + +export { + installer as VueAxios, + service as axios +} diff --git a/cmdb-ui/src/utils/util.js b/cmdb-ui/src/utils/util.js new file mode 100644 index 0000000..82f5dbf --- /dev/null +++ b/cmdb-ui/src/utils/util.js @@ -0,0 +1,60 @@ +export function timeFix () { + const time = new Date() + const hour = time.getHours() + return hour < 9 ? '早上好' : hour <= 11 ? '上午好' : hour <= 13 ? '中午好' : hour < 20 ? '下午好' : '晚上好' +} + +export function welcome () { + const arr = ['休息一会儿吧', '准备吃什么呢?', '要不要打一把 DOTA', '我猜你可能累了'] + const index = Math.floor(Math.random() * arr.length) + return arr[index] +} + +/** + * 触发 window.resize + */ +export function triggerWindowResizeEvent () { + const event = document.createEvent('HTMLEvents') + event.initEvent('resize', true, true) + event.eventType = 'message' + window.dispatchEvent(event) +} + +export function handleScrollHeader (callback) { + let timer = 0 + + let beforeScrollTop = window.pageYOffset + callback = callback || function () {} + window.addEventListener( + 'scroll', + event => { + clearTimeout(timer) + timer = setTimeout(() => { + let direction = 'up' + const afterScrollTop = window.pageYOffset + const delta = afterScrollTop - beforeScrollTop + if (delta === 0) { + return false + } + direction = delta > 0 ? 'down' : 'up' + callback(direction) + beforeScrollTop = afterScrollTop + }, 50) + }, + false + ) +} + +/** + * Remove loading animate + * @param id parent element id or class + * @param timeout + */ +export function removeLoadingAnimate (id = '', timeout = 1500) { + if (id === '') { + return + } + setTimeout(() => { + document.body.removeChild(document.getElementById(id)) + }, timeout) +} diff --git a/cmdb-ui/src/utils/utils.less b/cmdb-ui/src/utils/utils.less new file mode 100644 index 0000000..ba75a67 --- /dev/null +++ b/cmdb-ui/src/utils/utils.less @@ -0,0 +1,50 @@ +.textOverflow() { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + word-break: break-all; +} + +.textOverflowMulti(@line: 3, @bg: #fff) { + position: relative; + max-height: @line * 1.5em; + margin-right: -1em; + padding-right: 1em; + overflow: hidden; + line-height: 1.5em; + text-align: justify; + &::before { + position: absolute; + right: 14px; + bottom: 0; + padding: 0 1px; + background: @bg; + content: '...'; + } + &::after { + position: absolute; + right: 14px; + width: 1em; + height: 1em; + margin-top: 0.2em; + background: white; + content: ''; + } +} + +// mixins for clearfix +// ------------------------ +.clearfix() { + zoom: 1; + &::before, + &::after { + display: table; + content: ' '; + } + &::after { + clear: both; + height: 0; + font-size: 0; + visibility: hidden; + } +} \ No newline at end of file diff --git a/cmdb-ui/src/views/404.vue b/cmdb-ui/src/views/404.vue new file mode 100644 index 0000000..8c1d8a1 --- /dev/null +++ b/cmdb-ui/src/views/404.vue @@ -0,0 +1,15 @@ + + + + + diff --git a/cmdb-ui/src/views/account/center/Index.vue b/cmdb-ui/src/views/account/center/Index.vue new file mode 100644 index 0000000..afa4fe2 --- /dev/null +++ b/cmdb-ui/src/views/account/center/Index.vue @@ -0,0 +1,288 @@ + + + + + diff --git a/cmdb-ui/src/views/account/center/page/App.vue b/cmdb-ui/src/views/account/center/page/App.vue new file mode 100644 index 0000000..853aeab --- /dev/null +++ b/cmdb-ui/src/views/account/center/page/App.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/cmdb-ui/src/views/account/center/page/Article.vue b/cmdb-ui/src/views/account/center/page/Article.vue new file mode 100644 index 0000000..724c07c --- /dev/null +++ b/cmdb-ui/src/views/account/center/page/Article.vue @@ -0,0 +1,75 @@ + + + + + diff --git a/cmdb-ui/src/views/account/center/page/Project.vue b/cmdb-ui/src/views/account/center/page/Project.vue new file mode 100644 index 0000000..145232f --- /dev/null +++ b/cmdb-ui/src/views/account/center/page/Project.vue @@ -0,0 +1,109 @@ + + + + + diff --git a/cmdb-ui/src/views/account/center/page/index.js b/cmdb-ui/src/views/account/center/page/index.js new file mode 100644 index 0000000..b579b6a --- /dev/null +++ b/cmdb-ui/src/views/account/center/page/index.js @@ -0,0 +1,5 @@ +import AppPage from './App' +import ArticlePage from './Article' +import ProjectPage from './Project' + +export { AppPage, ArticlePage, ProjectPage } diff --git a/cmdb-ui/src/views/account/settings/AvatarModal.vue b/cmdb-ui/src/views/account/settings/AvatarModal.vue new file mode 100644 index 0000000..0ad9c41 --- /dev/null +++ b/cmdb-ui/src/views/account/settings/AvatarModal.vue @@ -0,0 +1,109 @@ + + + + diff --git a/cmdb-ui/src/views/account/settings/BaseSetting.vue b/cmdb-ui/src/views/account/settings/BaseSetting.vue new file mode 100644 index 0000000..6278aa1 --- /dev/null +++ b/cmdb-ui/src/views/account/settings/BaseSetting.vue @@ -0,0 +1,161 @@ + + + + + diff --git a/cmdb-ui/src/views/account/settings/Binding.vue b/cmdb-ui/src/views/account/settings/Binding.vue new file mode 100644 index 0000000..cbea7fc --- /dev/null +++ b/cmdb-ui/src/views/account/settings/Binding.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/cmdb-ui/src/views/account/settings/Custom.vue b/cmdb-ui/src/views/account/settings/Custom.vue new file mode 100644 index 0000000..02c3bc1 --- /dev/null +++ b/cmdb-ui/src/views/account/settings/Custom.vue @@ -0,0 +1,75 @@ + + + diff --git a/cmdb-ui/src/views/account/settings/Index.vue b/cmdb-ui/src/views/account/settings/Index.vue new file mode 100644 index 0000000..dd17a81 --- /dev/null +++ b/cmdb-ui/src/views/account/settings/Index.vue @@ -0,0 +1,155 @@ + + + + + diff --git a/cmdb-ui/src/views/account/settings/Notification.vue b/cmdb-ui/src/views/account/settings/Notification.vue new file mode 100644 index 0000000..cbea7fc --- /dev/null +++ b/cmdb-ui/src/views/account/settings/Notification.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/cmdb-ui/src/views/account/settings/Security.vue b/cmdb-ui/src/views/account/settings/Security.vue new file mode 100644 index 0000000..e806918 --- /dev/null +++ b/cmdb-ui/src/views/account/settings/Security.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/module/addRoleRelationForm.vue b/cmdb-ui/src/views/acl/module/addRoleRelationForm.vue new file mode 100644 index 0000000..f2d0265 --- /dev/null +++ b/cmdb-ui/src/views/acl/module/addRoleRelationForm.vue @@ -0,0 +1,202 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/module/permissionForm.vue b/cmdb-ui/src/views/acl/module/permissionForm.vue new file mode 100644 index 0000000..b473175 --- /dev/null +++ b/cmdb-ui/src/views/acl/module/permissionForm.vue @@ -0,0 +1,235 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/module/resourceForm.vue b/cmdb-ui/src/views/acl/module/resourceForm.vue new file mode 100644 index 0000000..9f92fd5 --- /dev/null +++ b/cmdb-ui/src/views/acl/module/resourceForm.vue @@ -0,0 +1,191 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/module/resourcePermForm.vue b/cmdb-ui/src/views/acl/module/resourcePermForm.vue new file mode 100644 index 0000000..8741c82 --- /dev/null +++ b/cmdb-ui/src/views/acl/module/resourcePermForm.vue @@ -0,0 +1,123 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/module/resourcePermManageForm.vue b/cmdb-ui/src/views/acl/module/resourcePermManageForm.vue new file mode 100644 index 0000000..dc6c907 --- /dev/null +++ b/cmdb-ui/src/views/acl/module/resourcePermManageForm.vue @@ -0,0 +1,120 @@ + + + diff --git a/cmdb-ui/src/views/acl/module/resourceTypeForm.vue b/cmdb-ui/src/views/acl/module/resourceTypeForm.vue new file mode 100644 index 0000000..e2b2c8d --- /dev/null +++ b/cmdb-ui/src/views/acl/module/resourceTypeForm.vue @@ -0,0 +1,217 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/module/roleForm.vue b/cmdb-ui/src/views/acl/module/roleForm.vue new file mode 100644 index 0000000..ce92473 --- /dev/null +++ b/cmdb-ui/src/views/acl/module/roleForm.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/module/userForm.vue b/cmdb-ui/src/views/acl/module/userForm.vue new file mode 100644 index 0000000..2612fc5 --- /dev/null +++ b/cmdb-ui/src/views/acl/module/userForm.vue @@ -0,0 +1,293 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/permissions.vue b/cmdb-ui/src/views/acl/permissions.vue new file mode 100644 index 0000000..f55affe --- /dev/null +++ b/cmdb-ui/src/views/acl/permissions.vue @@ -0,0 +1,309 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/resource_types.vue b/cmdb-ui/src/views/acl/resource_types.vue new file mode 100644 index 0000000..d663e74 --- /dev/null +++ b/cmdb-ui/src/views/acl/resource_types.vue @@ -0,0 +1,317 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/resources.vue b/cmdb-ui/src/views/acl/resources.vue new file mode 100644 index 0000000..effc9e5 --- /dev/null +++ b/cmdb-ui/src/views/acl/resources.vue @@ -0,0 +1,339 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/roles.vue b/cmdb-ui/src/views/acl/roles.vue new file mode 100644 index 0000000..00a4602 --- /dev/null +++ b/cmdb-ui/src/views/acl/roles.vue @@ -0,0 +1,310 @@ + + + + + diff --git a/cmdb-ui/src/views/acl/users.vue b/cmdb-ui/src/views/acl/users.vue new file mode 100644 index 0000000..255654d --- /dev/null +++ b/cmdb-ui/src/views/acl/users.vue @@ -0,0 +1,361 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/batch/index.vue b/cmdb-ui/src/views/cmdb/batch/index.vue new file mode 100644 index 0000000..af44731 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/batch/index.vue @@ -0,0 +1,85 @@ + + + diff --git a/cmdb-ui/src/views/cmdb/batch/modules/CiTable.vue b/cmdb-ui/src/views/cmdb/batch/modules/CiTable.vue new file mode 100644 index 0000000..ba51fc2 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/batch/modules/CiTable.vue @@ -0,0 +1,95 @@ + + + + diff --git a/cmdb-ui/src/views/cmdb/batch/modules/CiTypeChoice.vue b/cmdb-ui/src/views/cmdb/batch/modules/CiTypeChoice.vue new file mode 100644 index 0000000..7af6c7b --- /dev/null +++ b/cmdb-ui/src/views/cmdb/batch/modules/CiTypeChoice.vue @@ -0,0 +1,113 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/batch/modules/UploadFileForm.vue b/cmdb-ui/src/views/cmdb/batch/modules/UploadFileForm.vue new file mode 100644 index 0000000..e140c6c --- /dev/null +++ b/cmdb-ui/src/views/cmdb/batch/modules/UploadFileForm.vue @@ -0,0 +1,61 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/batch/modules/UploadResult.vue b/cmdb-ui/src/views/cmdb/batch/modules/UploadResult.vue new file mode 100644 index 0000000..64df7e0 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/batch/modules/UploadResult.vue @@ -0,0 +1,95 @@ + + + + diff --git a/cmdb-ui/src/views/cmdb/ci/index.vue b/cmdb-ui/src/views/cmdb/ci/index.vue new file mode 100644 index 0000000..9b7d70f --- /dev/null +++ b/cmdb-ui/src/views/cmdb/ci/index.vue @@ -0,0 +1,461 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/ci/modules/CiDetail.vue b/cmdb-ui/src/views/cmdb/ci/modules/CiDetail.vue new file mode 100644 index 0000000..dc9b5a9 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/ci/modules/CiDetail.vue @@ -0,0 +1,369 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/ci/modules/CreateInstanceForm.vue b/cmdb-ui/src/views/cmdb/ci/modules/CreateInstanceForm.vue new file mode 100644 index 0000000..0a46b20 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/ci/modules/CreateInstanceForm.vue @@ -0,0 +1,163 @@ + + + diff --git a/cmdb-ui/src/views/cmdb/ci/modules/EditableCell.vue b/cmdb-ui/src/views/cmdb/ci/modules/EditableCell.vue new file mode 100644 index 0000000..59b1ced --- /dev/null +++ b/cmdb-ui/src/views/cmdb/ci/modules/EditableCell.vue @@ -0,0 +1,78 @@ + + + + diff --git a/cmdb-ui/src/views/cmdb/ci/modules/SearchForm.vue b/cmdb-ui/src/views/cmdb/ci/modules/SearchForm.vue new file mode 100644 index 0000000..c780476 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/ci/modules/SearchForm.vue @@ -0,0 +1,131 @@ + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/attributes/index.vue b/cmdb-ui/src/views/cmdb/modeling/attributes/index.vue new file mode 100644 index 0000000..a3fa4b7 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/attributes/index.vue @@ -0,0 +1,391 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/attributes/module/attributeForm.vue b/cmdb-ui/src/views/cmdb/modeling/attributes/module/attributeForm.vue new file mode 100644 index 0000000..9c26691 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/attributes/module/attributeForm.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/attributes/module/const.js b/cmdb-ui/src/views/cmdb/modeling/attributes/module/const.js new file mode 100644 index 0000000..2f43d48 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/attributes/module/const.js @@ -0,0 +1,8 @@ +export const valueTypeMap = { + '0': '整数', + '1': '浮点数', + '2': '文本', + '3': 'datetime', + '4': 'date', + '5': 'time' +} diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/attributesTable.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/attributesTable.vue new file mode 100644 index 0000000..8284105 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/attributesTable.vue @@ -0,0 +1,561 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/checkTable.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/checkTable.vue new file mode 100644 index 0000000..cf201b9 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/checkTable.vue @@ -0,0 +1,349 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/defaultShowTable.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/defaultShowTable.vue new file mode 100644 index 0000000..ac24abf --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/defaultShowTable.vue @@ -0,0 +1,355 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/detail.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/detail.vue new file mode 100644 index 0000000..6ba6f21 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/detail.vue @@ -0,0 +1,89 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/group.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/group.vue new file mode 100644 index 0000000..24bf748 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/group.vue @@ -0,0 +1,591 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/list.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/list.vue new file mode 100644 index 0000000..9b5339b --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/list.vue @@ -0,0 +1,312 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/ci_type/relationTable.vue b/cmdb-ui/src/views/cmdb/modeling/ci_type/relationTable.vue new file mode 100644 index 0000000..451593f --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/ci_type/relationTable.vue @@ -0,0 +1,338 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/preference_relation/index.vue b/cmdb-ui/src/views/cmdb/modeling/preference_relation/index.vue new file mode 100644 index 0000000..fcc333f --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/preference_relation/index.vue @@ -0,0 +1,346 @@ + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/preference_relation/modules/RelationViewForm.vue b/cmdb-ui/src/views/cmdb/modeling/preference_relation/modules/RelationViewForm.vue new file mode 100644 index 0000000..8afc488 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/preference_relation/modules/RelationViewForm.vue @@ -0,0 +1,160 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/relation_type/index.vue b/cmdb-ui/src/views/cmdb/modeling/relation_type/index.vue new file mode 100644 index 0000000..3b66b7e --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/relation_type/index.vue @@ -0,0 +1,280 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/modeling/relation_type/modules/relationTypeForm.vue b/cmdb-ui/src/views/cmdb/modeling/relation_type/modules/relationTypeForm.vue new file mode 100644 index 0000000..dc8ff59 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/modeling/relation_type/modules/relationTypeForm.vue @@ -0,0 +1,192 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/preference/index.vue b/cmdb-ui/src/views/cmdb/preference/index.vue new file mode 100644 index 0000000..fa9bd77 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/preference/index.vue @@ -0,0 +1,366 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/relation_views/index.vue b/cmdb-ui/src/views/cmdb/relation_views/index.vue new file mode 100644 index 0000000..025ae25 --- /dev/null +++ b/cmdb-ui/src/views/cmdb/relation_views/index.vue @@ -0,0 +1,441 @@ + + + + + diff --git a/cmdb-ui/src/views/cmdb/tree_views/index.vue b/cmdb-ui/src/views/cmdb/tree_views/index.vue new file mode 100644 index 0000000..046f2fc --- /dev/null +++ b/cmdb-ui/src/views/cmdb/tree_views/index.vue @@ -0,0 +1,258 @@ + + + + + diff --git a/cmdb-ui/src/views/exception/403.vue b/cmdb-ui/src/views/exception/403.vue new file mode 100644 index 0000000..ffc3799 --- /dev/null +++ b/cmdb-ui/src/views/exception/403.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/cmdb-ui/src/views/exception/404.vue b/cmdb-ui/src/views/exception/404.vue new file mode 100644 index 0000000..16f767f --- /dev/null +++ b/cmdb-ui/src/views/exception/404.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/cmdb-ui/src/views/exception/500.vue b/cmdb-ui/src/views/exception/500.vue new file mode 100644 index 0000000..cc5d7ab --- /dev/null +++ b/cmdb-ui/src/views/exception/500.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/cmdb-ui/src/views/user/Login.vue b/cmdb-ui/src/views/user/Login.vue new file mode 100644 index 0000000..c9545c2 --- /dev/null +++ b/cmdb-ui/src/views/user/Login.vue @@ -0,0 +1,210 @@ + + + + + diff --git a/cmdb-ui/src/views/user/Register.vue b/cmdb-ui/src/views/user/Register.vue new file mode 100644 index 0000000..79be00c --- /dev/null +++ b/cmdb-ui/src/views/user/Register.vue @@ -0,0 +1,322 @@ + + + + + diff --git a/cmdb-ui/src/views/user/RegisterResult.vue b/cmdb-ui/src/views/user/RegisterResult.vue new file mode 100644 index 0000000..5a807e0 --- /dev/null +++ b/cmdb-ui/src/views/user/RegisterResult.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/cmdb-ui/src/views/welcome/index.vue b/cmdb-ui/src/views/welcome/index.vue new file mode 100644 index 0000000..9ff288c --- /dev/null +++ b/cmdb-ui/src/views/welcome/index.vue @@ -0,0 +1,34 @@ + + + + + diff --git a/cmdb-ui/src/views/welcome/welcome.vue b/cmdb-ui/src/views/welcome/welcome.vue new file mode 100644 index 0000000..e69de29 diff --git a/cmdb-ui/tests/unit/.eslintrc.js b/cmdb-ui/tests/unit/.eslintrc.js new file mode 100644 index 0000000..958d51b --- /dev/null +++ b/cmdb-ui/tests/unit/.eslintrc.js @@ -0,0 +1,5 @@ +module.exports = { + env: { + jest: true + } +} diff --git a/cmdb-ui/vue.config.js b/cmdb-ui/vue.config.js new file mode 100644 index 0000000..80013c9 --- /dev/null +++ b/cmdb-ui/vue.config.js @@ -0,0 +1,126 @@ +const path = require('path') +const webpack = require('webpack') +const ThemeColorReplacer = require('webpack-theme-color-replacer') +const generate = require('@ant-design/colors/lib/generate').default + +function resolve (dir) { + return path.join(__dirname, dir) +} + +// vue.config.js +module.exports = { + configureWebpack: { + plugins: [ + // Ignore all locale files of moment.js + new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/), + // 生成仅包含颜色的替换样式(主题色等) + // TODO 需要增加根据环境不开启主题需求 + new ThemeColorReplacer({ + fileName: 'css/theme-colors-[contenthash:8].css', + matchColors: getAntdSerials('#1890ff'), // 主色系列 + // 改变样式选择器,解决样式覆盖问题 + changeSelector (selector) { + switch (selector) { + case '.ant-calendar-today .ant-calendar-date': + return ':not(.ant-calendar-selected-date):not(.ant-calendar-selected-day)' + selector + case '.ant-btn:focus,.ant-btn:hover': + return '.ant-btn:focus:not(.ant-btn-primary),.ant-btn:hover:not(.ant-btn-primary)' + case '.ant-steps-item-process .ant-steps-item-icon > .ant-steps-icon': + return ':not(.ant-steps-item-process)' + selector + case '.ant-btn.active,.ant-btn:active': + return '.ant-btn.active:not(.ant-btn-primary),.ant-btn:active:not(.ant-btn-primary)' + case '.ant-menu-horizontal>.ant-menu-item-active,.ant-menu-horizontal>.ant-menu-item-open,.ant-menu-horizontal>.ant-menu-item-selected,.ant-menu-horizontal>.ant-menu-item:hover,.ant-menu-horizontal>.ant-menu-submenu-active,.ant-menu-horizontal>.ant-menu-submenu-open,.ant-menu-horizontal>.ant-menu-submenu-selected,.ant-menu-horizontal>.ant-menu-submenu:hover': + case '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal > .ant-menu-submenu-selected,.ant-menu-horizontal > .ant-menu-submenu:hover': + return '.ant-menu-horizontal > .ant-menu-item-active,.ant-menu-horizontal > .ant-menu-item-open,.ant-menu-horizontal > .ant-menu-item-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-item:hover,.ant-menu-horizontal > .ant-menu-submenu-active,.ant-menu-horizontal > .ant-menu-submenu-open,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu-selected,.ant-menu-horizontal:not(.ant-menu-dark) > .ant-menu-submenu:hover' + case '.ant-menu-horizontal > .ant-menu-item-selected > a': + return ':not(.ant-menu-horizontal)' + selector + case '.ant-menu-horizontal > .ant-menu-item > a:hover': + return ':not(.ant-menu-horizontal)' + selector + default : + return selector + } + } + }) + ] + }, + + chainWebpack: (config) => { + config.resolve.alias + .set('@$', resolve('src')) + + const svgRule = config.module.rule('svg') + svgRule.uses.clear() + svgRule + .oneOf('inline') + .resourceQuery(/inline/) + .use('vue-svg-icon-loader') + .loader('vue-svg-icon-loader') + .end() + .end() + .oneOf('external') + .use('file-loader') + .loader('file-loader') + .options({ + name: 'assets/[name].[hash:8].[ext]' + }) + /* svgRule.oneOf('inline') + .resourceQuery(/inline/) + .use('vue-svg-loader') + .loader('vue-svg-loader') + .end() + .end() + .oneOf('external') + .use('file-loader') + .loader('file-loader') + .options({ + name: 'assets/[name].[hash:8].[ext]' + }) + */ + }, + + css: { + loaderOptions: { + less: { + modifyVars: { + /* less 变量覆盖,用于自定义 ant design 主题 */ + + /* + 'primary-color': '#F5222D', + 'link-color': '#F5222D', + 'border-radius-base': '4px', + */ + }, + javascriptEnabled: true + } + } + }, + + devServer: { + // development server port 8000 + disableHostCheck: true, + port: 8000 + // proxy: { + // '/api': { + // // target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', + // target: 'https://mock.ihx.me/mock/5baf3052f7da7e07e04a5116/antd-pro', + // ws: false, + // changeOrigin: true + // } + // } + }, + + // disable source map in production + productionSourceMap: false, + lintOnSave: undefined, + // babel-loader no-ignore node_modules/* + transpileDependencies: [] +} + +function getAntdSerials (color) { + // 淡化(即less的tint) + const lightens = new Array(9).fill().map((t, i) => { + return ThemeColorReplacer.varyColor.lighten(color, i / 10) + }) + const colorPalettes = generate(color) + return lightens.concat(colorPalettes) +} diff --git a/cmdb-ui/webstorm.config.js b/cmdb-ui/webstorm.config.js new file mode 100644 index 0000000..cb1fc8c --- /dev/null +++ b/cmdb-ui/webstorm.config.js @@ -0,0 +1,16 @@ +'use strict' +const path = require('path') + +function resolve (dir) { + return path.join(__dirname, '.', dir) +} + +module.exports = { + context: path.resolve(__dirname, './'), + resolve: { + extensions: ['.js', '.vue', '.json'], + alias: { + '@': resolve('src') + } + } +} diff --git a/docker-compose.yml b/docker-compose.yml index b854fb9..7ca77a4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -65,9 +65,9 @@ services: - /bin/sh - -c - | - sed -i "s#USE_ES = False#USE_ES = True#g" api/settings.py - sed -i "s#USE_ACL = False#USE_ACL = True#g" api/settings.py - sed -i "s#ES_HOST = '127.0.0.1'#ES_HOST = 'cmdb-search'#g" api/settings.py + sed -i "s#USE_ES = False#USE_ES = True#g" settings.py + sed -i "s#USE_ACL = False#USE_ACL = True#g" settings.py + sed -i "s#ES_HOST = '127.0.0.1'#ES_HOST = 'cmdb-search'#g" settings.py sleep 15 gunicorn --workers=3 autoapp:app -b 0.0.0.0:5000 -D flask init-cache