From b6b368abc2d8882704f1ec17d132ca87636f95ec Mon Sep 17 00:00:00 2001 From: zhanghao <774378400@qq.com> Date: Thu, 18 Jun 2026 14:49:21 +0800 Subject: [PATCH] first commit --- .env.development | 14 + .env.production | 20 + .env.staging | 13 + .gitignore | 26 + Dockerfile | 10 + Dockerfile.frontend | 17 + LICENSE | 20 + README.md | 35 + html/ie.html | 46 + index.html | 215 ++ package.json | 66 + public/bot.svg | 54 + public/favicon.ico | Bin 0 -> 5663 bytes src/App.vue | 123 ++ src/api/device/arm.js | 18 + src/api/device/dexHand.js | 19 + src/api/device/flow.js | 63 + src/api/device/microphone.js | 46 + src/api/device/profile.js | 45 + src/api/device/register.js | 146 ++ src/api/device/robot.js | 44 + src/api/device/speaker.js | 72 + src/api/device/terminal.js | 86 + src/api/evaluate/indicator.js | 68 + src/api/inspection/map.js | 33 + src/api/inspection/point.js | 32 + src/api/inspection/robot.js | 57 + src/api/inspection/runTask.js | 75 + src/api/inspection/task.js | 47 + src/api/is/func/index.js | 63 + src/api/is/im/index.js | 32 + src/api/is/project/index.js | 76 + src/api/login.js | 60 + src/api/menu.js | 9 + src/api/monitor/cache.js | 57 + src/api/monitor/job.js | 71 + src/api/monitor/jobLog.js | 26 + src/api/monitor/logininfor.js | 34 + src/api/monitor/online.js | 18 + src/api/monitor/operlog.js | 26 + src/api/monitor/server.js | 9 + src/api/system/config.js | 60 + src/api/system/dept.js | 52 + src/api/system/dict/data.js | 52 + src/api/system/dict/type.js | 60 + src/api/system/file.js | 44 + src/api/system/group.js | 44 + src/api/system/menu.js | 60 + src/api/system/notice.js | 44 + src/api/system/post.js | 44 + src/api/system/role.js | 119 ++ src/api/system/user.js | 136 ++ src/api/system/vehOper.js | 44 + src/api/test/config.js | 78 + src/api/test/detect.js | 44 + src/api/test/log.js | 72 + src/api/test/params.js | 60 + src/api/tool/gen.js | 85 + src/api/touch_interaction.js | 14 + src/api/vi/corpus.js | 77 + src/api/vi/plan.js | 44 + src/api/vi/project.js | 83 + src/assets/401_images/401.gif | Bin 0 -> 164227 bytes src/assets/404_images/404.png | Bin 0 -> 98071 bytes src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes src/assets/icons/svg/404.svg | 1 + src/assets/icons/svg/bot.svg | 54 + src/assets/icons/svg/bug.svg | 1 + src/assets/icons/svg/build.svg | 1 + src/assets/icons/svg/button.svg | 1 + src/assets/icons/svg/cascader.svg | 1 + src/assets/icons/svg/chart.svg | 1 + src/assets/icons/svg/checkbox.svg | 1 + src/assets/icons/svg/chevron-down.svg | 4 + src/assets/icons/svg/chevron-left.svg | 4 + src/assets/icons/svg/chevron-right.svg | 4 + src/assets/icons/svg/chevron-stop.svg | 16 + src/assets/icons/svg/chevron-up.svg | 4 + src/assets/icons/svg/clipboard.svg | 1 + src/assets/icons/svg/code.svg | 1 + src/assets/icons/svg/color.svg | 1 + src/assets/icons/svg/component.svg | 1 + src/assets/icons/svg/cpu.svg | 17 + src/assets/icons/svg/dashboard.svg | 1 + src/assets/icons/svg/date-range.svg | 1 + src/assets/icons/svg/date.svg | 1 + src/assets/icons/svg/dict.svg | 1 + src/assets/icons/svg/documentation.svg | 1 + src/assets/icons/svg/download.svg | 1 + src/assets/icons/svg/drag.svg | 1 + src/assets/icons/svg/druid.svg | 1 + src/assets/icons/svg/edit.svg | 1 + src/assets/icons/svg/education.svg | 1 + src/assets/icons/svg/email.svg | 1 + src/assets/icons/svg/example.svg | 1 + src/assets/icons/svg/excel.svg | 1 + src/assets/icons/svg/exit-fullscreen.svg | 1 + src/assets/icons/svg/eye-open.svg | 1 + src/assets/icons/svg/eye.svg | 1 + src/assets/icons/svg/form.svg | 1 + src/assets/icons/svg/fullscreen.svg | 1 + src/assets/icons/svg/gamepad.svg | 8 + src/assets/icons/svg/github.svg | 1 + src/assets/icons/svg/guide.svg | 1 + src/assets/icons/svg/icon.svg | 1 + src/assets/icons/svg/input.svg | 1 + src/assets/icons/svg/international.svg | 1 + src/assets/icons/svg/job.svg | 1 + src/assets/icons/svg/language.svg | 1 + src/assets/icons/svg/link.svg | 1 + src/assets/icons/svg/list.svg | 1 + src/assets/icons/svg/locate-fixed.svg | 9 + src/assets/icons/svg/lock.svg | 1 + src/assets/icons/svg/log.svg | 1 + src/assets/icons/svg/logininfor.svg | 1 + src/assets/icons/svg/map.svg | 6 + src/assets/icons/svg/message.svg | 1 + src/assets/icons/svg/money.svg | 1 + src/assets/icons/svg/monitor.svg | 2 + src/assets/icons/svg/moon.svg | 1 + src/assets/icons/svg/navigation.svg | 4 + src/assets/icons/svg/nested.svg | 1 + src/assets/icons/svg/number.svg | 1 + src/assets/icons/svg/online.svg | 1 + src/assets/icons/svg/password.svg | 1 + src/assets/icons/svg/pause.svg | 6 + src/assets/icons/svg/pdf.svg | 1 + src/assets/icons/svg/people.svg | 1 + src/assets/icons/svg/peoples.svg | 1 + src/assets/icons/svg/phone.svg | 1 + src/assets/icons/svg/post.svg | 1 + src/assets/icons/svg/qq.svg | 1 + src/assets/icons/svg/question.svg | 1 + src/assets/icons/svg/radio.svg | 1 + src/assets/icons/svg/rate.svg | 1 + src/assets/icons/svg/redis-list.svg | 2 + src/assets/icons/svg/redis.svg | 1 + src/assets/icons/svg/remove.svg | 1 + src/assets/icons/svg/row.svg | 1 + src/assets/icons/svg/search.svg | 1 + src/assets/icons/svg/select.svg | 1 + src/assets/icons/svg/server.svg | 1 + src/assets/icons/svg/shopping.svg | 1 + src/assets/icons/svg/size.svg | 1 + src/assets/icons/svg/skill.svg | 1 + src/assets/icons/svg/slider.svg | 1 + src/assets/icons/svg/star.svg | 1 + src/assets/icons/svg/start.svg | 6 + src/assets/icons/svg/stop.svg | 6 + src/assets/icons/svg/sunny.svg | 1 + src/assets/icons/svg/swagger.svg | 1 + src/assets/icons/svg/switch.svg | 1 + src/assets/icons/svg/system.svg | 2 + src/assets/icons/svg/tab.svg | 1 + src/assets/icons/svg/table.svg | 1 + src/assets/icons/svg/textarea.svg | 1 + src/assets/icons/svg/theme.svg | 1 + src/assets/icons/svg/time-range.svg | 1 + src/assets/icons/svg/time.svg | 1 + src/assets/icons/svg/tool.svg | 1 + src/assets/icons/svg/tree-table.svg | 1 + src/assets/icons/svg/tree.svg | 1 + src/assets/icons/svg/upload.svg | 1 + src/assets/icons/svg/user.svg | 1 + src/assets/icons/svg/validCode.svg | 1 + src/assets/icons/svg/wechat.svg | 1 + src/assets/icons/svg/zip.svg | 1 + src/assets/icons/svg/zoom-in.svg | 7 + src/assets/icons/svg/zoom-out.svg | 6 + src/assets/images/arm.png | Bin 0 -> 34989 bytes src/assets/images/dark.svg | 39 + src/assets/images/hand.png | Bin 0 -> 756499 bytes src/assets/images/hand2.png | Bin 0 -> 32423 bytes src/assets/images/index-background.jpg | Bin 0 -> 321822 bytes src/assets/images/light.svg | 39 + src/assets/images/login-background-back.jpg | Bin 0 -> 521275 bytes src/assets/images/login-background.jpg | Bin 0 -> 220025 bytes src/assets/images/pay.png | Bin 0 -> 140720 bytes src/assets/images/profile.jpg | Bin 0 -> 81131 bytes src/assets/images/robot.png | Bin 0 -> 276439 bytes src/assets/logo/logo.png | Bin 0 -> 5663 bytes src/assets/styles/btn.scss | 99 + src/assets/styles/element-ui.scss | 96 + src/assets/styles/index.scss | 187 ++ src/assets/styles/mixin.scss | 66 + src/assets/styles/ruoyi.scss | 301 +++ src/assets/styles/sidebar.scss | 236 +++ src/assets/styles/transition.scss | 49 + src/assets/styles/variables.module.scss | 286 +++ src/components/Breadcrumb/index.vue | 98 + src/components/Crontab/day.vue | 174 ++ src/components/Crontab/hour.vue | 133 ++ src/components/Crontab/index.vue | 309 +++ src/components/Crontab/min.vue | 126 ++ src/components/Crontab/month.vue | 141 ++ src/components/Crontab/result.vue | 540 +++++ src/components/Crontab/second.vue | 128 ++ src/components/Crontab/week.vue | 197 ++ src/components/Crontab/year.vue | 149 ++ src/components/DictTag/index.vue | 82 + src/components/EditTable/index.vue | 299 +++ src/components/Editor/index.vue | 251 +++ src/components/FileUpload/index.vue | 213 ++ src/components/Hamburger/index.vue | 42 + src/components/HeaderSearch/index.vue | 187 ++ src/components/IconSelect/index.vue | 111 + src/components/IconSelect/requireIcons.js | 8 + src/components/ImagePreview/index.vue | 92 + src/components/ImageUpload/index.vue | 216 ++ src/components/Pagination/index.vue | 105 + src/components/ParentView/index.vue | 3 + src/components/RightToolbar/index.vue | 134 ++ src/components/RuoYi/Doc/index.vue | 13 + src/components/RuoYi/Git/index.vue | 13 + src/components/Screenfull/index.vue | 22 + src/components/SizeSelect/index.vue | 45 + src/components/SvgIcon/index.vue | 42 + src/components/SvgIcon/svgicon.js | 10 + src/components/TableSearch/index.vue | 69 + src/components/TableTags/index.vue | 24 + src/components/TopNav/index.vue | 216 ++ src/components/Video/index.vue | 27 + src/components/iFrame/index.vue | 31 + src/directive/common/copyText.js | 66 + src/directive/index.js | 9 + src/directive/permission/hasPermi.js | 28 + src/directive/permission/hasRole.js | 28 + src/enum/index.js | 110 + src/hooks/tableHeight.ts | 21 + src/hooks/usePlayAudio.ts | 38 + src/layout/components/AppMain.vue | 88 + src/layout/components/IframeToggle/index.vue | 25 + src/layout/components/InnerLink/index.vue | 24 + src/layout/components/Navbar.vue | 205 ++ src/layout/components/Settings/index.vue | 204 ++ src/layout/components/Sidebar/Link.vue | 63 + src/layout/components/Sidebar/Logo.vue | 99 + src/layout/components/Sidebar/SidebarItem.vue | 100 + src/layout/components/Sidebar/index.vue | 104 + src/layout/components/TagsView/ScrollPane.vue | 107 + src/layout/components/TagsView/index.vue | 365 ++++ src/layout/components/index.js | 4 + src/layout/index.vue | 114 ++ src/main.js | 95 + src/permission.js | 75 + src/plugins/auth.js | 60 + src/plugins/cache.js | 79 + src/plugins/download.js | 79 + src/plugins/index.js | 18 + src/plugins/modal.js | 82 + src/plugins/tab.js | 69 + src/plugins/websocket.js | 183 ++ src/router/index.js | 316 +++ src/settings.js | 47 + src/store/index.js | 3 + src/store/modules/app.js | 46 + src/store/modules/dict.js | 57 + src/store/modules/flow.js | 22 + src/store/modules/inspection.js | 37 + src/store/modules/permission.js | 142 ++ src/store/modules/settings.js | 48 + src/store/modules/tagsView.js | 182 ++ src/store/modules/user.js | 75 + src/style/variable.scss | 71 + src/utils/auth.js | 15 + src/utils/convertNodeRedToLogicFlow.js | 105 + src/utils/dict.js | 24 + src/utils/dynamicTitle.js | 15 + src/utils/errorCode.js | 6 + src/utils/eventBus.js | 3 + src/utils/flow.js | 370 ++++ src/utils/fn.js | 94 + src/utils/generator/config.js | 452 +++++ src/utils/generator/css.js | 18 + src/utils/generator/drawingDefalut.js | 29 + src/utils/generator/html.js | 359 ++++ src/utils/generator/icon.json | 1 + src/utils/generator/js.js | 370 ++++ src/utils/generator/render.js | 156 ++ src/utils/index.js | 407 ++++ src/utils/jsencrypt.js | 30 + src/utils/permission.js | 51 + src/utils/request.js | 152 ++ src/utils/requestController.js | 94 + src/utils/ruoyi.js | 246 +++ src/utils/scroll-to.js | 58 + src/utils/theme.js | 49 + src/utils/validate.js | 114 ++ src/views/error/401.vue | 82 + src/views/error/404.vue | 227 +++ src/views/flow/components/Aside.vue | 76 + .../flow/components/FormItemRecursive.vue | 221 ++ src/views/flow/components/NodeState.vue | 176 ++ src/views/flow/components/NodeTitle.vue | 272 +++ src/views/flow/components/OuterNode.vue | 43 + src/views/flow/components/ParamsDrawer.vue | 1800 +++++++++++++++++ src/views/flow/components/TestRun.vue | 146 ++ src/views/flow/config.js | 700 +++++++ src/views/flow/icon/audio.svg | 1 + src/views/flow/icon/awaken.svg | 1 + src/views/flow/icon/camera.svg | 1 + src/views/flow/icon/dialogue.svg | 1 + src/views/flow/icon/end.svg | 1 + src/views/flow/icon/expression.svg | 1 + src/views/flow/icon/group.svg | 3 + src/views/flow/icon/loop.svg | 1 + src/views/flow/icon/microphone.svg | 4 + src/views/flow/icon/plan.svg | 1 + src/views/flow/icon/sleep.svg | 1 + src/views/flow/icon/start.svg | 6 + src/views/flow/icon/stopLoop.svg | 1 + src/views/flow/icon/switch.svg | 7 + src/views/flow/icon/touch.svg | 1 + src/views/flow/icon/video.svg | 3 + src/views/flow/index.vue | 939 +++++++++ src/views/flow/nodes/common/endNode.js | 196 ++ src/views/flow/nodes/common/endNode.vue | 246 +++ src/views/flow/nodes/common/index.js | 11 + src/views/flow/nodes/common/selectAreaNode.js | 102 + .../flow/nodes/common/selectAreaNode.vue | 59 + src/views/flow/nodes/common/serviceNode.js | 213 ++ src/views/flow/nodes/common/serviceNode.vue | 144 ++ src/views/flow/nodes/common/startNode.js | 204 ++ src/views/flow/nodes/common/startNode.vue | 157 ++ src/views/flow/nodes/function/codeNode.js | 213 ++ src/views/flow/nodes/function/codeNode.vue | 139 ++ src/views/flow/nodes/function/currentLoop.vue | 256 +++ .../flow/nodes/function/currentLoopNode.js | 219 ++ src/views/flow/nodes/function/httpNode.js | 213 ++ src/views/flow/nodes/function/httpNode.vue | 141 ++ src/views/flow/nodes/function/index.js | 23 + src/views/flow/nodes/function/loop.js | 286 +++ src/views/flow/nodes/function/loop.vue | 116 ++ src/views/flow/nodes/function/sdAgent.js | 213 ++ src/views/flow/nodes/function/sdAgent.vue | 124 ++ src/views/flow/nodes/function/sleep.js | 213 ++ src/views/flow/nodes/function/sleep.vue | 125 ++ src/views/flow/nodes/function/stopLoop.js | 191 ++ src/views/flow/nodes/function/stopLoop.vue | 197 ++ src/views/flow/nodes/function/subEnd.js | 186 ++ src/views/flow/nodes/function/subEnd.vue | 145 ++ src/views/flow/nodes/function/subStart.js | 185 ++ src/views/flow/nodes/function/subStart.vue | 106 + src/views/flow/nodes/function/switch.js | 318 +++ src/views/flow/nodes/function/switch.vue | 642 ++++++ src/views/index.vue | 40 + src/views/inspection/alarm/index.vue | 3 + src/views/inspection/cockpit/canvasUtils.js | 619 ++++++ .../inspection/cockpit/components/Header.vue | 161 ++ .../cockpit/components/ManualTakeover.vue | 643 ++++++ .../cockpit/components/MapCanvas.vue | 456 +++++ .../cockpit/components/MapOverview.vue | 403 ++++ .../inspection/cockpit/components/Monitor.vue | 120 ++ .../cockpit/components/UrdfView.vue | 588 ++++++ src/views/inspection/cockpit/index.vue | 47 + src/views/inspection/map/index.vue | 580 ++++++ src/views/inspection/point/index.vue | 399 ++++ src/views/inspection/robot/index.vue | 335 +++ src/views/inspection/runTask/index.vue | 626 ++++++ src/views/inspection/runTask/task-log.vue | 73 + src/views/inspection/runTask/task-steps.vue | 88 + src/views/inspection/task/index.vue | 385 ++++ src/views/login.vue | 236 +++ src/views/monitor/cache/index.vue | 132 ++ src/views/monitor/cache/list.vue | 246 +++ src/views/monitor/druid/index.vue | 13 + src/views/monitor/job/index.vue | 501 +++++ src/views/monitor/job/log.vue | 283 +++ src/views/monitor/logininfor/index.vue | 233 +++ src/views/monitor/online/index.vue | 109 + src/views/monitor/operlog/index.vue | 310 +++ src/views/monitor/server/index.vue | 187 ++ src/views/redirect/index.vue | 14 + src/views/register.vue | 219 ++ src/views/system/config/index.vue | 316 +++ src/views/system/dept/index.vue | 283 +++ src/views/system/dict/data.vue | 362 ++++ src/views/system/dict/index.vue | 420 ++++ src/views/system/file/index.vue | 350 ++++ src/views/system/group/index.vue | 289 +++ src/views/system/menu/index.vue | 461 +++++ src/views/system/notice/index.vue | 292 +++ src/views/system/post/index.vue | 287 +++ src/views/system/role/authUser.vue | 179 ++ src/views/system/role/index.vue | 593 ++++++ src/views/system/role/selectUser.vue | 144 ++ src/views/system/user/authRole.vue | 116 ++ src/views/system/user/index.vue | 547 +++++ src/views/system/user/profile/index.vue | 87 + src/views/system/user/profile/resetPwd.vue | 59 + src/views/system/user/profile/userAvatar.vue | 180 ++ src/views/system/user/profile/userInfo.vue | 67 + src/views/system/vehOper/index.vue | 349 ++++ src/views/test/configs/Run.vue | 172 ++ src/views/test/configs/index.vue | 696 +++++++ src/views/test/detect/index.vue | 477 +++++ src/views/test/log/index.vue | 450 +++++ src/views/test/params/index.vue | 431 ++++ src/views/tool/build/CodeTypeDialog.vue | 71 + src/views/tool/build/DraggableItem.vue | 68 + src/views/tool/build/IconsDialog.vue | 115 ++ src/views/tool/build/RightPanel.vue | 918 +++++++++ src/views/tool/build/TreeNodeDialog.vue | 93 + src/views/tool/build/index.vue | 653 ++++++ src/views/tool/gen/basicInfoForm.vue | 48 + src/views/tool/gen/createTable.vue | 46 + src/views/tool/gen/editTable.vue | 200 ++ src/views/tool/gen/genInfoForm.vue | 306 +++ src/views/tool/gen/importTable.vue | 126 ++ src/views/tool/gen/index.vue | 310 +++ src/views/tool/swagger/index.vue | 9 + vite.config.js | 92 + vite/plugins/auto-import.js | 12 + vite/plugins/compression.js | 28 + vite/plugins/index.js | 26 + vite/plugins/setup-extend.js | 5 + vite/plugins/svg-icon.js | 10 + 417 files changed, 45104 insertions(+) create mode 100644 .env.development create mode 100644 .env.production create mode 100644 .env.staging create mode 100644 .gitignore create mode 100644 Dockerfile create mode 100644 Dockerfile.frontend create mode 100644 LICENSE create mode 100644 README.md create mode 100644 html/ie.html create mode 100644 index.html create mode 100644 package.json create mode 100644 public/bot.svg create mode 100644 public/favicon.ico create mode 100644 src/App.vue create mode 100644 src/api/device/arm.js create mode 100644 src/api/device/dexHand.js create mode 100644 src/api/device/flow.js create mode 100644 src/api/device/microphone.js create mode 100644 src/api/device/profile.js create mode 100644 src/api/device/register.js create mode 100644 src/api/device/robot.js create mode 100644 src/api/device/speaker.js create mode 100644 src/api/device/terminal.js create mode 100644 src/api/evaluate/indicator.js create mode 100644 src/api/inspection/map.js create mode 100644 src/api/inspection/point.js create mode 100644 src/api/inspection/robot.js create mode 100644 src/api/inspection/runTask.js create mode 100644 src/api/inspection/task.js create mode 100644 src/api/is/func/index.js create mode 100644 src/api/is/im/index.js create mode 100644 src/api/is/project/index.js create mode 100644 src/api/login.js create mode 100644 src/api/menu.js create mode 100644 src/api/monitor/cache.js create mode 100644 src/api/monitor/job.js create mode 100644 src/api/monitor/jobLog.js create mode 100644 src/api/monitor/logininfor.js create mode 100644 src/api/monitor/online.js create mode 100644 src/api/monitor/operlog.js create mode 100644 src/api/monitor/server.js create mode 100644 src/api/system/config.js create mode 100644 src/api/system/dept.js create mode 100644 src/api/system/dict/data.js create mode 100644 src/api/system/dict/type.js create mode 100644 src/api/system/file.js create mode 100644 src/api/system/group.js create mode 100644 src/api/system/menu.js create mode 100644 src/api/system/notice.js create mode 100644 src/api/system/post.js create mode 100644 src/api/system/role.js create mode 100644 src/api/system/user.js create mode 100644 src/api/system/vehOper.js create mode 100644 src/api/test/config.js create mode 100644 src/api/test/detect.js create mode 100644 src/api/test/log.js create mode 100644 src/api/test/params.js create mode 100644 src/api/tool/gen.js create mode 100644 src/api/touch_interaction.js create mode 100644 src/api/vi/corpus.js create mode 100644 src/api/vi/plan.js create mode 100644 src/api/vi/project.js create mode 100644 src/assets/401_images/401.gif create mode 100644 src/assets/404_images/404.png create mode 100644 src/assets/404_images/404_cloud.png create mode 100644 src/assets/icons/svg/404.svg create mode 100644 src/assets/icons/svg/bot.svg create mode 100644 src/assets/icons/svg/bug.svg create mode 100644 src/assets/icons/svg/build.svg create mode 100644 src/assets/icons/svg/button.svg create mode 100644 src/assets/icons/svg/cascader.svg create mode 100644 src/assets/icons/svg/chart.svg create mode 100644 src/assets/icons/svg/checkbox.svg create mode 100644 src/assets/icons/svg/chevron-down.svg create mode 100644 src/assets/icons/svg/chevron-left.svg create mode 100644 src/assets/icons/svg/chevron-right.svg create mode 100644 src/assets/icons/svg/chevron-stop.svg create mode 100644 src/assets/icons/svg/chevron-up.svg create mode 100644 src/assets/icons/svg/clipboard.svg create mode 100644 src/assets/icons/svg/code.svg create mode 100644 src/assets/icons/svg/color.svg create mode 100644 src/assets/icons/svg/component.svg create mode 100644 src/assets/icons/svg/cpu.svg create mode 100644 src/assets/icons/svg/dashboard.svg create mode 100644 src/assets/icons/svg/date-range.svg create mode 100644 src/assets/icons/svg/date.svg create mode 100644 src/assets/icons/svg/dict.svg create mode 100644 src/assets/icons/svg/documentation.svg create mode 100644 src/assets/icons/svg/download.svg create mode 100644 src/assets/icons/svg/drag.svg create mode 100644 src/assets/icons/svg/druid.svg create mode 100644 src/assets/icons/svg/edit.svg create mode 100644 src/assets/icons/svg/education.svg create mode 100644 src/assets/icons/svg/email.svg create mode 100644 src/assets/icons/svg/example.svg create mode 100644 src/assets/icons/svg/excel.svg create mode 100644 src/assets/icons/svg/exit-fullscreen.svg create mode 100644 src/assets/icons/svg/eye-open.svg create mode 100644 src/assets/icons/svg/eye.svg create mode 100644 src/assets/icons/svg/form.svg create mode 100644 src/assets/icons/svg/fullscreen.svg create mode 100644 src/assets/icons/svg/gamepad.svg create mode 100644 src/assets/icons/svg/github.svg create mode 100644 src/assets/icons/svg/guide.svg create mode 100644 src/assets/icons/svg/icon.svg create mode 100644 src/assets/icons/svg/input.svg create mode 100644 src/assets/icons/svg/international.svg create mode 100644 src/assets/icons/svg/job.svg create mode 100644 src/assets/icons/svg/language.svg create mode 100644 src/assets/icons/svg/link.svg create mode 100644 src/assets/icons/svg/list.svg create mode 100644 src/assets/icons/svg/locate-fixed.svg create mode 100644 src/assets/icons/svg/lock.svg create mode 100644 src/assets/icons/svg/log.svg create mode 100644 src/assets/icons/svg/logininfor.svg create mode 100644 src/assets/icons/svg/map.svg create mode 100644 src/assets/icons/svg/message.svg create mode 100644 src/assets/icons/svg/money.svg create mode 100644 src/assets/icons/svg/monitor.svg create mode 100644 src/assets/icons/svg/moon.svg create mode 100644 src/assets/icons/svg/navigation.svg create mode 100644 src/assets/icons/svg/nested.svg create mode 100644 src/assets/icons/svg/number.svg create mode 100644 src/assets/icons/svg/online.svg create mode 100644 src/assets/icons/svg/password.svg create mode 100644 src/assets/icons/svg/pause.svg create mode 100644 src/assets/icons/svg/pdf.svg create mode 100644 src/assets/icons/svg/people.svg create mode 100644 src/assets/icons/svg/peoples.svg create mode 100644 src/assets/icons/svg/phone.svg create mode 100644 src/assets/icons/svg/post.svg create mode 100644 src/assets/icons/svg/qq.svg create mode 100644 src/assets/icons/svg/question.svg create mode 100644 src/assets/icons/svg/radio.svg create mode 100644 src/assets/icons/svg/rate.svg create mode 100644 src/assets/icons/svg/redis-list.svg create mode 100644 src/assets/icons/svg/redis.svg create mode 100644 src/assets/icons/svg/remove.svg create mode 100644 src/assets/icons/svg/row.svg create mode 100644 src/assets/icons/svg/search.svg create mode 100644 src/assets/icons/svg/select.svg create mode 100644 src/assets/icons/svg/server.svg create mode 100644 src/assets/icons/svg/shopping.svg create mode 100644 src/assets/icons/svg/size.svg create mode 100644 src/assets/icons/svg/skill.svg create mode 100644 src/assets/icons/svg/slider.svg create mode 100644 src/assets/icons/svg/star.svg create mode 100644 src/assets/icons/svg/start.svg create mode 100644 src/assets/icons/svg/stop.svg create mode 100644 src/assets/icons/svg/sunny.svg create mode 100644 src/assets/icons/svg/swagger.svg create mode 100644 src/assets/icons/svg/switch.svg create mode 100644 src/assets/icons/svg/system.svg create mode 100644 src/assets/icons/svg/tab.svg create mode 100644 src/assets/icons/svg/table.svg create mode 100644 src/assets/icons/svg/textarea.svg create mode 100644 src/assets/icons/svg/theme.svg create mode 100644 src/assets/icons/svg/time-range.svg create mode 100644 src/assets/icons/svg/time.svg create mode 100644 src/assets/icons/svg/tool.svg create mode 100644 src/assets/icons/svg/tree-table.svg create mode 100644 src/assets/icons/svg/tree.svg create mode 100644 src/assets/icons/svg/upload.svg create mode 100644 src/assets/icons/svg/user.svg create mode 100644 src/assets/icons/svg/validCode.svg create mode 100644 src/assets/icons/svg/wechat.svg create mode 100644 src/assets/icons/svg/zip.svg create mode 100644 src/assets/icons/svg/zoom-in.svg create mode 100644 src/assets/icons/svg/zoom-out.svg create mode 100644 src/assets/images/arm.png create mode 100644 src/assets/images/dark.svg create mode 100644 src/assets/images/hand.png create mode 100644 src/assets/images/hand2.png create mode 100644 src/assets/images/index-background.jpg create mode 100644 src/assets/images/light.svg create mode 100644 src/assets/images/login-background-back.jpg create mode 100644 src/assets/images/login-background.jpg create mode 100644 src/assets/images/pay.png create mode 100644 src/assets/images/profile.jpg create mode 100644 src/assets/images/robot.png create mode 100644 src/assets/logo/logo.png create mode 100644 src/assets/styles/btn.scss create mode 100644 src/assets/styles/element-ui.scss create mode 100644 src/assets/styles/index.scss create mode 100644 src/assets/styles/mixin.scss create mode 100644 src/assets/styles/ruoyi.scss create mode 100644 src/assets/styles/sidebar.scss create mode 100644 src/assets/styles/transition.scss create mode 100644 src/assets/styles/variables.module.scss create mode 100644 src/components/Breadcrumb/index.vue create mode 100644 src/components/Crontab/day.vue create mode 100644 src/components/Crontab/hour.vue create mode 100644 src/components/Crontab/index.vue create mode 100644 src/components/Crontab/min.vue create mode 100644 src/components/Crontab/month.vue create mode 100644 src/components/Crontab/result.vue create mode 100644 src/components/Crontab/second.vue create mode 100644 src/components/Crontab/week.vue create mode 100644 src/components/Crontab/year.vue create mode 100644 src/components/DictTag/index.vue create mode 100644 src/components/EditTable/index.vue create mode 100644 src/components/Editor/index.vue create mode 100644 src/components/FileUpload/index.vue create mode 100644 src/components/Hamburger/index.vue create mode 100644 src/components/HeaderSearch/index.vue create mode 100644 src/components/IconSelect/index.vue create mode 100644 src/components/IconSelect/requireIcons.js create mode 100644 src/components/ImagePreview/index.vue create mode 100644 src/components/ImageUpload/index.vue create mode 100644 src/components/Pagination/index.vue create mode 100644 src/components/ParentView/index.vue create mode 100644 src/components/RightToolbar/index.vue create mode 100644 src/components/RuoYi/Doc/index.vue create mode 100644 src/components/RuoYi/Git/index.vue create mode 100644 src/components/Screenfull/index.vue create mode 100644 src/components/SizeSelect/index.vue create mode 100644 src/components/SvgIcon/index.vue create mode 100644 src/components/SvgIcon/svgicon.js create mode 100644 src/components/TableSearch/index.vue create mode 100644 src/components/TableTags/index.vue create mode 100644 src/components/TopNav/index.vue create mode 100644 src/components/Video/index.vue create mode 100644 src/components/iFrame/index.vue create mode 100644 src/directive/common/copyText.js create mode 100644 src/directive/index.js create mode 100644 src/directive/permission/hasPermi.js create mode 100644 src/directive/permission/hasRole.js create mode 100644 src/enum/index.js create mode 100644 src/hooks/tableHeight.ts create mode 100644 src/hooks/usePlayAudio.ts create mode 100644 src/layout/components/AppMain.vue create mode 100644 src/layout/components/IframeToggle/index.vue create mode 100644 src/layout/components/InnerLink/index.vue create mode 100644 src/layout/components/Navbar.vue create mode 100644 src/layout/components/Settings/index.vue create mode 100644 src/layout/components/Sidebar/Link.vue create mode 100644 src/layout/components/Sidebar/Logo.vue create mode 100644 src/layout/components/Sidebar/SidebarItem.vue create mode 100644 src/layout/components/Sidebar/index.vue create mode 100644 src/layout/components/TagsView/ScrollPane.vue create mode 100644 src/layout/components/TagsView/index.vue create mode 100644 src/layout/components/index.js create mode 100644 src/layout/index.vue create mode 100644 src/main.js create mode 100644 src/permission.js create mode 100644 src/plugins/auth.js create mode 100644 src/plugins/cache.js create mode 100644 src/plugins/download.js create mode 100644 src/plugins/index.js create mode 100644 src/plugins/modal.js create mode 100644 src/plugins/tab.js create mode 100644 src/plugins/websocket.js create mode 100644 src/router/index.js create mode 100644 src/settings.js create mode 100644 src/store/index.js create mode 100644 src/store/modules/app.js create mode 100644 src/store/modules/dict.js create mode 100644 src/store/modules/flow.js create mode 100644 src/store/modules/inspection.js create mode 100644 src/store/modules/permission.js create mode 100644 src/store/modules/settings.js create mode 100644 src/store/modules/tagsView.js create mode 100644 src/store/modules/user.js create mode 100644 src/style/variable.scss create mode 100644 src/utils/auth.js create mode 100644 src/utils/convertNodeRedToLogicFlow.js create mode 100644 src/utils/dict.js create mode 100644 src/utils/dynamicTitle.js create mode 100644 src/utils/errorCode.js create mode 100644 src/utils/eventBus.js create mode 100644 src/utils/flow.js create mode 100644 src/utils/fn.js create mode 100644 src/utils/generator/config.js create mode 100644 src/utils/generator/css.js create mode 100644 src/utils/generator/drawingDefalut.js create mode 100644 src/utils/generator/html.js create mode 100644 src/utils/generator/icon.json create mode 100644 src/utils/generator/js.js create mode 100644 src/utils/generator/render.js create mode 100644 src/utils/index.js create mode 100644 src/utils/jsencrypt.js create mode 100644 src/utils/permission.js create mode 100644 src/utils/request.js create mode 100644 src/utils/requestController.js create mode 100644 src/utils/ruoyi.js create mode 100644 src/utils/scroll-to.js create mode 100644 src/utils/theme.js create mode 100644 src/utils/validate.js create mode 100644 src/views/error/401.vue create mode 100644 src/views/error/404.vue create mode 100644 src/views/flow/components/Aside.vue create mode 100644 src/views/flow/components/FormItemRecursive.vue create mode 100644 src/views/flow/components/NodeState.vue create mode 100644 src/views/flow/components/NodeTitle.vue create mode 100644 src/views/flow/components/OuterNode.vue create mode 100644 src/views/flow/components/ParamsDrawer.vue create mode 100644 src/views/flow/components/TestRun.vue create mode 100644 src/views/flow/config.js create mode 100644 src/views/flow/icon/audio.svg create mode 100644 src/views/flow/icon/awaken.svg create mode 100644 src/views/flow/icon/camera.svg create mode 100644 src/views/flow/icon/dialogue.svg create mode 100644 src/views/flow/icon/end.svg create mode 100644 src/views/flow/icon/expression.svg create mode 100644 src/views/flow/icon/group.svg create mode 100644 src/views/flow/icon/loop.svg create mode 100644 src/views/flow/icon/microphone.svg create mode 100644 src/views/flow/icon/plan.svg create mode 100644 src/views/flow/icon/sleep.svg create mode 100644 src/views/flow/icon/start.svg create mode 100644 src/views/flow/icon/stopLoop.svg create mode 100644 src/views/flow/icon/switch.svg create mode 100644 src/views/flow/icon/touch.svg create mode 100644 src/views/flow/icon/video.svg create mode 100644 src/views/flow/index.vue create mode 100644 src/views/flow/nodes/common/endNode.js create mode 100644 src/views/flow/nodes/common/endNode.vue create mode 100644 src/views/flow/nodes/common/index.js create mode 100644 src/views/flow/nodes/common/selectAreaNode.js create mode 100644 src/views/flow/nodes/common/selectAreaNode.vue create mode 100644 src/views/flow/nodes/common/serviceNode.js create mode 100644 src/views/flow/nodes/common/serviceNode.vue create mode 100644 src/views/flow/nodes/common/startNode.js create mode 100644 src/views/flow/nodes/common/startNode.vue create mode 100644 src/views/flow/nodes/function/codeNode.js create mode 100644 src/views/flow/nodes/function/codeNode.vue create mode 100644 src/views/flow/nodes/function/currentLoop.vue create mode 100644 src/views/flow/nodes/function/currentLoopNode.js create mode 100644 src/views/flow/nodes/function/httpNode.js create mode 100644 src/views/flow/nodes/function/httpNode.vue create mode 100644 src/views/flow/nodes/function/index.js create mode 100644 src/views/flow/nodes/function/loop.js create mode 100644 src/views/flow/nodes/function/loop.vue create mode 100644 src/views/flow/nodes/function/sdAgent.js create mode 100644 src/views/flow/nodes/function/sdAgent.vue create mode 100644 src/views/flow/nodes/function/sleep.js create mode 100644 src/views/flow/nodes/function/sleep.vue create mode 100644 src/views/flow/nodes/function/stopLoop.js create mode 100644 src/views/flow/nodes/function/stopLoop.vue create mode 100644 src/views/flow/nodes/function/subEnd.js create mode 100644 src/views/flow/nodes/function/subEnd.vue create mode 100644 src/views/flow/nodes/function/subStart.js create mode 100644 src/views/flow/nodes/function/subStart.vue create mode 100644 src/views/flow/nodes/function/switch.js create mode 100644 src/views/flow/nodes/function/switch.vue create mode 100644 src/views/index.vue create mode 100644 src/views/inspection/alarm/index.vue create mode 100644 src/views/inspection/cockpit/canvasUtils.js create mode 100644 src/views/inspection/cockpit/components/Header.vue create mode 100644 src/views/inspection/cockpit/components/ManualTakeover.vue create mode 100644 src/views/inspection/cockpit/components/MapCanvas.vue create mode 100644 src/views/inspection/cockpit/components/MapOverview.vue create mode 100644 src/views/inspection/cockpit/components/Monitor.vue create mode 100644 src/views/inspection/cockpit/components/UrdfView.vue create mode 100644 src/views/inspection/cockpit/index.vue create mode 100644 src/views/inspection/map/index.vue create mode 100644 src/views/inspection/point/index.vue create mode 100644 src/views/inspection/robot/index.vue create mode 100644 src/views/inspection/runTask/index.vue create mode 100644 src/views/inspection/runTask/task-log.vue create mode 100644 src/views/inspection/runTask/task-steps.vue create mode 100644 src/views/inspection/task/index.vue create mode 100644 src/views/login.vue create mode 100644 src/views/monitor/cache/index.vue create mode 100644 src/views/monitor/cache/list.vue create mode 100644 src/views/monitor/druid/index.vue create mode 100644 src/views/monitor/job/index.vue create mode 100644 src/views/monitor/job/log.vue create mode 100644 src/views/monitor/logininfor/index.vue create mode 100644 src/views/monitor/online/index.vue create mode 100644 src/views/monitor/operlog/index.vue create mode 100644 src/views/monitor/server/index.vue create mode 100644 src/views/redirect/index.vue create mode 100644 src/views/register.vue create mode 100644 src/views/system/config/index.vue create mode 100644 src/views/system/dept/index.vue create mode 100644 src/views/system/dict/data.vue create mode 100644 src/views/system/dict/index.vue create mode 100644 src/views/system/file/index.vue create mode 100644 src/views/system/group/index.vue create mode 100644 src/views/system/menu/index.vue create mode 100644 src/views/system/notice/index.vue create mode 100644 src/views/system/post/index.vue create mode 100644 src/views/system/role/authUser.vue create mode 100644 src/views/system/role/index.vue create mode 100644 src/views/system/role/selectUser.vue create mode 100644 src/views/system/user/authRole.vue create mode 100644 src/views/system/user/index.vue create mode 100644 src/views/system/user/profile/index.vue create mode 100644 src/views/system/user/profile/resetPwd.vue create mode 100644 src/views/system/user/profile/userAvatar.vue create mode 100644 src/views/system/user/profile/userInfo.vue create mode 100644 src/views/system/vehOper/index.vue create mode 100644 src/views/test/configs/Run.vue create mode 100644 src/views/test/configs/index.vue create mode 100644 src/views/test/detect/index.vue create mode 100644 src/views/test/log/index.vue create mode 100644 src/views/test/params/index.vue create mode 100644 src/views/tool/build/CodeTypeDialog.vue create mode 100644 src/views/tool/build/DraggableItem.vue create mode 100644 src/views/tool/build/IconsDialog.vue create mode 100644 src/views/tool/build/RightPanel.vue create mode 100644 src/views/tool/build/TreeNodeDialog.vue create mode 100644 src/views/tool/build/index.vue create mode 100644 src/views/tool/gen/basicInfoForm.vue create mode 100644 src/views/tool/gen/createTable.vue create mode 100644 src/views/tool/gen/editTable.vue create mode 100644 src/views/tool/gen/genInfoForm.vue create mode 100644 src/views/tool/gen/importTable.vue create mode 100644 src/views/tool/gen/index.vue create mode 100644 src/views/tool/swagger/index.vue create mode 100644 vite.config.js create mode 100644 vite/plugins/auto-import.js create mode 100644 vite/plugins/compression.js create mode 100644 vite/plugins/index.js create mode 100644 vite/plugins/setup-extend.js create mode 100644 vite/plugins/svg-icon.js diff --git a/.env.development b/.env.development new file mode 100644 index 0000000..aca0341 --- /dev/null +++ b/.env.development @@ -0,0 +1,14 @@ +# 页面标题 +VITE_APP_TITLE = 招商车研AI测评机器人模拟测试平台 + +# 开发环境配置 +VITE_APP_ENV = 'development' + +# 招商车研物联网平台/开发环境 +VITE_APP_BASE_API = '/dev-api' + +VITE_API_URL = http://192.168.28.10:13080 +VITE_WS_URL = ws://192.168.0.201:13080/ws + +# explanation +VITE_INSPECTION_TYPE = "inspection" \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 0000000..4c5aa50 --- /dev/null +++ b/.env.production @@ -0,0 +1,20 @@ +# 页面标题 +VITE_APP_TITLE = 智能座舱测评AI机器人 + +# 生产环境配置 +VITE_APP_ENV = 'production' + +# 招商车研物联网平台/生产环境 +VITE_APP_BASE_API = '/prod-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip + +#node-red 服务地址 +VITE_NODE_RED_URL = 'http://10.148.108.59:13080' + +VITE_API_URL = http://192.168.28.10:13080 +VITE_WS_URL = ws://192.168.0.201:13080/ws + +# explanation +VITE_INSPECTION_TYPE = "inspection" \ No newline at end of file diff --git a/.env.staging b/.env.staging new file mode 100644 index 0000000..66d8d56 --- /dev/null +++ b/.env.staging @@ -0,0 +1,13 @@ +# 页面标题 +VITE_APP_TITLE = 招商车研物联网平台管理系统 + +# 生产环境配置 +VITE_APP_ENV = 'staging' + +# 招商车研物联网平台管理系统/生产环境 +VITE_APP_BASE_API = '/stage-api' + +# 是否在打包时开启压缩,支持 gzip 和 brotli +VITE_BUILD_COMPRESS = gzip +VITE_API_URL = http://10.148.121.100:13080 +VITE_WS_URL = ws://192.168.0.201:13080/ws \ No newline at end of file diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..57a04df --- /dev/null +++ b/.gitignore @@ -0,0 +1,26 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +**/*.log + +tests/**/coverage/ +tests/e2e/reports +selenium-debug.log + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.local +.history + +package-lock.json +yarn.lock +bin/ +pnpm-lock.yaml diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..4219e85 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM node:18 + +WORKDIR /app + +COPY package*.json ./ + +RUN npm install + + +COPY . . diff --git a/Dockerfile.frontend b/Dockerfile.frontend new file mode 100644 index 0000000..28e0423 --- /dev/null +++ b/Dockerfile.frontend @@ -0,0 +1,17 @@ +# 使用官方的 Node.js 镜像作为基础镜像 +FROM node:18 + +# 设置工作目录 +WORKDIR /app + +# 复制 package.json 和 package-lock.json(如果存在)到工作目录 +COPY package*.json ./ + +# 安装项目依赖 +RUN npm install + +# 复制项目文件到工作目录 +COPY . . + +# 构建项目 +RUN npm run build diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..8564f29 --- /dev/null +++ b/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2018 RuoYi + +Permission is hereby granted, free of charge, to any person obtaining a copy of +this software and associated documentation files (the "Software"), to deal in +the Software without restriction, including without limitation the rights to +use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of +the Software, and to permit persons to whom the Software is furnished to do so, +subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS +FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR +COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER +IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5e715c1 --- /dev/null +++ b/README.md @@ -0,0 +1,35 @@ + +## 前端运行 + +```bash +# 安装依赖 +yarn --registry=https://registry.npmmirror.com + +# 启动服务 +yarn dev + +# 构建测试环境 yarn build:stage +# 构建生产环境 yarn build:prod +# 前端访问地址 http://localhost:80 +``` + +## 内置功能 + +1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 +2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 +3. 岗位管理:配置系统用户所属担任职务。 +4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 +5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 +6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 +7. 参数管理:对系统动态配置常用参数。 +8. 通知公告:系统通知公告信息发布维护。 +9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 +10. 登录日志:系统登录日志记录查询包含登录异常。 +11. 在线用户:当前系统中活跃用户状态监控。 +12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 +13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 +14. 系统接口:根据业务代码自动生成相关的api接口文档。 +15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 +16. 缓存监控:对系统的缓存信息查询,命令统计等。 +17. 在线构建器:拖动表单元素生成相应的HTML代码。 +18. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 diff --git a/html/ie.html b/html/ie.html new file mode 100644 index 0000000..052ffcd --- /dev/null +++ b/html/ie.html @@ -0,0 +1,46 @@ + + + +
+ +您正在使用 Internet Explorer 的早期版本(IE11以下版本或使用该内核的浏览器)。这意味着在升级浏览器前,您将无法访问此网站。
+自 2016 年 1 月 12 日起,Microsoft 不再为 IE 11 以下版本提供相应支持和更新。没有关键的浏览器安全更新,您的电脑可能易受有害病毒、间谍软件和其他恶意软件的攻击,它们可以窃取或损害您的业务数据和信息。请参阅 微软对 Internet Explorer 早期版本的支持将于 2016 年 1 月 12 日结束的说明 。
+推荐使用以下浏览器的最新版本。如果您的电脑已有以下浏览器的最新版本则直接使用该浏览器访问即可。
+ +oj3)-fTE0aU{sB@5$EFHtjC(<5xetF&*)v&r1y;=_LN zC3CBZF%TgVmz%@NK1d~fFm4FUMlAm5X5?J%)&4a{#dJCIP!g!P_mCcNO8F{zK09 z_ij4l`q!$CQ4`?pVZ`HK{d~B~4cx(LfY0yl*S;G!h5me)#^JUte1k%KalD6buQs$I zUs3)3@&=eePjH~U9-w)coC!Cz%&4e|Jlt+?py@2V$(zA@&-@@*-~J}Q6GDJQ3&1z_ zKYiux-|xe+sl}%Ih9~9ihX+o8r8lV +@Oqul{oWUAiJZWz(}2e}1MhJL%{&Vv7YiJG5XAK=NE{t>y6R2W9rVWC$E?}u z^gNjSRj?SD|84ProQ `iUyeM;zO=iw8MaEeKRq;rNX)w{@AhB=k^;hMst5pUc!eXN^ RF+ z NqR)!`>AyH(&CE4Lqu+}^Nr{bCsf*h2 z2)i+%Cbi;u7XY2=3J1=Fv-!n*uZsaL+)-?AsQ59bh;S1>3{t@pp8D3AHAWPOU72~i zi4ddoj2%jj9UF+fACHcbi-q2b6V>IT6Mr`L1;hapASfm0ZsFqz^A 6?5*Zw&jf@UQ8GOV_w`$><~;$eCDCz z`R412H#{e?MevScD#Dn{!`m{^c_o$)o#gHu?N*aSKau2po^;wI?YsqcRbfwnCOV(^ zI*TWj4q%Y)A+ljfdQd8lOJ5LK5Uw}{YMMO%AQ_=T8*7y^(u8sDP2^_6SY9SOOr~bh zMC3ddrF{;$QJSa#OAVSugV4_Shk+!Psa=J^me1oQYLc!HaqGqDKYP+OY0_&;qkANL z`$~C>B>XhF=&>ysBU}2BGzodBl+!Ai8|Py0R3HRo39~hs-@;;LN+Hj!;$p(6ZAz2Z ztX#wEvTDua(!=iTU1qJ*q)8dajfX|u56hOm6vL@MhtNIGKD*2Y!o8EGv$-ZxRyNZg zIAz1i-q7TT>svq;+2c 2e! zE}vH#cWa*i29Oq{$Kh`(lV(be2Qo@ToX*^ZsHW%y Q!ZCi$$4_x$r6o1sFCJEcL;z54 IKUF_NJ&qe#iN&@vtf~~y?`N1LmMP&K%&uOU*B|ssl(geNIWHGP?N;axY z9-WpU r0`Ji|DUPartv)m0qPC=1Qw^!n38BI*_uewDMNHvKp`Z zb;G4xX~NBA<$b8K_PKJMC%pC642BXB@2@HvUg>s*^N ewB#v> zSm&z*yqnXj{8eNusQ9i6AGE|>DWy=kUiPl`zPY&zPuG2UvSA9t+0Y}}s?;xFmim%8 zZNtqU??mq#?9rB}^j7`WtHfP_mqg`-IP8}>3Pk$#oBa*h6RMunRFV9wnY6?&P+=cb zp<^JbMU;bX>{z%9a&o5EGM3B8S93I!CFwxw5a}g4)f|4cRUa ny}?u;WLbU%yQzx^dj7|YKzC|1y4V?FHM_0qRDt+<7#)-VDiD;G(E;V z-R)I6#_Gjun-{TmJB_a>6B%in=nfn2S~basG>Mls@eed FTJr1KNWQkQpP{f{t9pn`G|JlEr@tFWH~wCR z_;9C6!%g>)wj&AE;rqDbvs&rQU9q{gj*z(y^OKIn7bSsT^~OI`ue~U}n{J}gFSOm( z89&!aw*HLhZr6L&E;5dnM-g2?WnDPfStoR*t8crNpTi){#;KIZ7+k>%Yj1hh|MbQ$ z2cit)UXkv7oo-l?wsA!F2R92uJs 3l~834~*{Mj+Ze zkf+}76)^9gNR{Y}yq8#f&tLuiB{81aFR+DozYL}yS>10N`91*k-kiAK>07@`#d|mJ z0cTrp*NXl(BLk?#eqLa}-y0G*0uJ^b6u}JMtsab&f<#w uD`$LnWE` }$uzO7 zKEYu;@jY^aJ!fKOWP)vRVw!l8m1%NJeUim^awu|=A!qXauhEhAv9riACi+np>8WtN zsn6b1h&>S9-sEw`)Yp+I#P2C#=_yf?ab69u1h3f9uVHBe(R=TPlo756MSelgnRThRWfsGpKc2E_7jqKdd++K=kBNN_D|0YKIsmBGRXYIq48PL z?(>}Br`X-kLxG>2GZBuXgRj4X+}{p*c6{;w_Jx(VU;uxH0sX=uZG`1qgAsq`HlY6H zVi %QasWHAJHOoLYJ0|5HBn?pF%|MJ*@wDo+DrOn@=d3bg4|b F@I-qUf8D1?l;QIC2PPW&j^l#XGod=TKp;iOXjftY%UJYdWyY z&vpzon`^dz1aQZ 7R8EpLK>lChM$?$mMlU!*!{w zmBW5IO2-YqtPRU789y0rbk?R#<*NE0%8;=YOx9+^7~*a8#u%6&nPF4aa8tu+Gn;fP zHJS^T{%3t>d8;sMBlpiOI2q_2=@$1qTWRMy+-0ZEex1m%6Uw~P#<007#C>#gvw@T? zhGDl|W@8E19nRVqU|=&^bpL3$=X1WxYrpsTPs^Jz {Xrf=vk&3pYtZCd zH9m(#j7Q`#2OaYi%GE2kvacCqw+cy_gx Nt{+U%pAB(8j2X{f-a9ihI ^oJKLm25%_Gf&$Kki_m3e4m z1QOr-VU&Rh1eQw u%@q%~O>%57OLFXElwgJBd($d=WafhxX&M z^?E_>>>n1+Md@h?P*{Y=TSt<+ddnrG8!%8LzXqUb8HMhYIc@+=K~bd$0~{KbTGc4X zMH){Y+tg`85fmQM^_~@88s5;~$w1oEMlsSkSX4J%H8znjG?T&bJ-v0lu)C^nHGv_z z60^0vba1R(^6|uf{OlZk*+lshJu`bnSRIXhhDTJ^vi^{nJ{Ure{H6n!l@EJ`aIOs% zi0ap%lXRweMU<(``@;~2PyM=fEfiogV3BBkls3X6Ac4>CIjt=6nE&?aNL+5_Xzl}T zdp#}+t~g>)Qmc#VL-~&?>ZKOBjv|v|`Fb%-n{Wh>U9E?SEi|QMnJduQtGByyv(Xo^ zV4rwrBZi&hak aMS*dHpbd^w63OXu W|y7$(YB_81#AEjqh@>a(aK=_U8Aw~mXnQ%e6?)N zj@BPLGj%o#V;ybh2aCNCj1N28FHbh7%Z E@CwargPg|3SkOHEQhisSuTemib|Hl zc^aXH0my#DN~G}T& t8s_ z$}g_u+5QL4*vfSiR(?`MybQWa8#8F8UbxB3Mviucqgm)E6P-WodEMuZV1;8;*h%-? zNA1&7QW2Hg)U5{|h2bpsbhsEi{R0Hmq2@0DC_FGK+L*!HhWvR ^39 zloFf)NAGgnc`bS8>f7>^Hjt*!u_|QEYo#5p*<@L}8N4x7!kPQ>so>L>)9;KbZ^9iZ zc+$(=2UW>leU7N9mwMm$`#6c@xwp$#1YnW;Dzn||#@4CxIp1O`K;ZDm=HgHt79M-Z zv*uA@R+|{5lqKipViA^N;(GQgb#ZgLK&{+xw6)>?Pn;=JFGizN*|C(U+v1 7l&E*LGzvIkuB}#nV(m&|F7BxKtMZi^Xlb+aWHCDNQ z&^YWq$JT1R76aa@1D3W)N w)uqcQ$jZ`zol9Uzkq l{L(}j_7;?n@)KUB^-}FN)arkbfexg`?@ZqCaiMmNGVMY zx2h`?x&Ik Gf^iwy!ixzKW^P&lL1dUh`bxZB)P>PVv{76gP#(0iG1cOFv{nm8J z 1ELe~<6X%W!4$Mf>CN&0hwSdxcs6032yRk_xU&9b&sQ=ZRI8zfryytlZ9 zYs-@~abv5$;M#IO-iLsDGbfPJdNVhaqii!TQgnMWAKMMvDoA*l_sYeC<>tTnX> lMb*z@XI%-RU4 zo)-+S_8L7? mHBo6gxM&|X=Mtm$^7FUTCMADp;T8}Psp?JYtc8wBNEG(=F#<@# zld`f?Vhz(Xvx_24Q>_b%-vuBs?f^w)gGY6UJBYlnvD1Kovc&@w-!<^CI?oQE92{3? zaP)7R_>3~`_X5>@nHTBq_4~B2##J5pZESs)tu!iq@0hXs!`J1Ld1QUm_T}2<)%%~t z4?$qnZ}m65MF|#i075D~8{M!B#bEeul#9pYXX>bP)Jwe7fjng+#=AIYDbMhi_d (Bu+XqGr0Pn z;vBe9+~s`g3%#cGxTjN=79@Q~TC2pSt a7I{Ujx`-R4N-)dvlAxhJyqK&qx(a?#RC%;s zTG(9}?e=zGRgTZ$R-(zo)fT$FvZ;)=? x6ELnV zC|AFQzeD7-Z1@BOI}ik6n;NQ#?&DL*9{P1!Jk `JTlcx?2VEBFkX|B_TW=?~tjt zhjx0BF>St~T3B)kmn)CO;zvCJTo~>}XbIoZ@Rh|*8}m;n56M5!IG|O)sr;ZKh#Von zdeY_m_+sR$QO^Vs>JehFRtrC)dPU?c%&I12*YnK?p#ome`qrU5Z;sOln`Kp(4qXgr zr>~pNY9{ociX@VEYvQW!fPPL<;5nmJb&vMPeTpJOwn7tc^mxues%2dm-c{vX(3?EY zLvI<7kx3H8pH#Q)x)*c~;xoO;l_WtkR`nimk8~=HQBW=5pKu-i_JWO7$x6e&l;^f^ zMsIXV!)DvE o$ z@CzRgdKL-M$$K+%g8#cht`(QdgjPy74oG;_tn)EieOO^(%N7F=S27#Z^E2BLV}rhy zVw}luf$$8QX(+GBJo{o1>Zr_05S;^NufPL6#K_a$#^6cO1(Irz_1&hA#e*xeFc6&e z-4qs3oOmopVKoTmuFL`JSE%Ec>4I?~L9uu+G8&o(Iq17nmZ3ry$#)Vl=+JjJ4X1ui zl0To|hm6D$yw+c&ckt++B6h@ZmH=DF;@}jyMer{n5E&6H9WV0e7EdzaiqUlkD4LKXxAm1(>_qnPgYUSycx*wv y-eoTukEtVxI(+W}js7l$8O(|Wbojm-p2=$}%l8Ng{vFfKXy&q+|qh&fx z!=Ea>ev})Nl zC?R{vp+xq?_0}tA&p=X`F+PTk_hYq(`ucO;S>DQWp0_XbH? zWge+f-|pbz?g<2T^qE#b-xOuPA9;lQFhtWf`cYB`I|NL8`j*D j^I-1yP>ZPI|3onQr>+xSj4CXkx%PO zCLpMAVu`Y=Vu1qXM{FQmmTeMwTx;Tpo`2wT;{5(7VNcJ&P4ZV`&&f49QwL5swTR@^ z=!MIsS!LbS6=n-Ig}7Cp1k>pivOkVNmAsHsky50v)m1lGDN*py*;Q<)8ENe3+g{N! zcWKd9roEpDY4POaYQ}%2v-q46!S%ycw-~?e$-033ZgZqrW5QEAG8c)HSx?3bFHP}> z6PD$L55Ee%WfdX%T=u40=8>11?No!o!u)9ZbM$D3uRkfnb`v$w7^Yx-2)ams U>^S_}tJT5v-> zZ*dj=APr*{B V$k;Ij)YggmwrtO&)4fk?a^@SM({G2%m&l_Ieu-RlB=veY-lg3{Fga2!c>e@JBqq zY$#urhS6>);FI;GVF}Un+Hy?nXq$)rDlZogp_l%({6vSE>bGL*lC)}!gNRF<81N$b zooQffks)24haSgwq>^kyL02+)&eQ>h5g{Wacj9D6;RmrxAIw&VPZ$^(dz^ha$ujd` z4|YJHi69>O2bG!;em|In6?(7?kKC!kd{MoVKUj?poB&VrgAupSCK>NeS#M$Y2tar< z^kScs(_cU!-aAe;3*2mWgQM#Nl_7*yw|xA+#Sk0z13atm9?WR$n268WYZ*e;&Cpq% zI691iwqJ*thhfXDq_0e^Fs~D|I73{>5en9no`ZrZZrD51q1E1FyGM5CPd54$=-Wsi z7ccvLs&C(agBTrmMhQ%b#beh?5r7=utdP)8_Ale)GJG(+stNp(;<#T2^=w*i#m39Q zSEnH(2Rwg*5u~i31DA{&sA?%GGO`y`cT>2DtE;DPYe~YH7!V&h!T6dm9?Hl-5SFEz z?sYZZnxx_t#Va&n*?Is+GXP&=x`%t46G&y|2S1vSr>r &9ntRA7#-0&6^(B5=<^yEgFQlNrn6>xbUI75>0CB_$WQhf%~GcRNP1 zBJ!EtLX~a}I(R>#&Y~JOLo-A(2impE(J$#j&ekSjgwrfkkG1X#jvd9Y$ #J!AqH`8@9%Tr&^<(Hi@WFt8zu5Pp-Q#frGZ=&Nhy@hIUC zZBmIe+15_~#s=c=RT* d{TadFkXUlvsQQ34NyYy}3tv z@cM#aG<0@TsI$*T^5 &C)Z{hggx#ahM z lis_`FAe5I+1c0Zo9ytNguElDP^IGu|fYOcP z&NY`DL R KCTc#rNg{eR^g%%;moyCgZeZe@NZ~tsf>T(-6Rlu{@+obmN3*rXdhd=S +CL{8M0fZH2vo`R-zKVgsA3o*9eyJaV%CqLY9ddJ9`xQUPX z==5nQkyqh$@$4)ChnHl?r#rHzYZFCFiA8cK5&4fC%2jTEQz;z*?|y?5to?ijY3L=1 zRNNtf5sHlOkMafKYBFlXV%{6?lnp>B7IhA^gziWMzS;1x{B^>1OGaH+Gb`ruL<$vZ zydX37=0c)2BE_&v5`HM^;cnz>gombchU_zC AnS;dspxptN<(oM4z66cj K$eR-$q;3fvLCd)olF=>JAl_Z+A0q;$oQ96$RE!QRkcP} zTi2wY4inXcO1}r(mgvwNx8V9fH;(X&j@HLIPB!db(e^BDbg`hmF#!Lf^m?DEhyEvR zwIEv#ugMN26&uIVSX&t37OlK2=UB^~2OY7{bpp_0EKI3qxqoS|^LPKvrLIq~aA ((k=mymXo6WoDg&0))xU>-Rp0%Nw;0*B z?8=Fm*7ksfq&rKP^xJC6<2DMYF`oJh*7nUp9{2hqHd!$YVOvXx-_W)91%_>Rt3UXJ zf?9o{KR*|cElM5@PLqp5h@lKH2pOBBlnYE;^7oxj@j&;FcDYLQiMK4!0G%2imIY%b ze0t8_*B&&$i5-2vUhJHh0H5wQ-!t9e$hfBj-hSZ+o=9dp8kGf2#v3*5Ke$Kn1dX<> zrH4^WwBK;N@s_Ma7V?;^OHIHy;O+z!o`x15EN$^k>&rV_r^V%fj6>ifmt5vw$x`I{ zK%j}NG07vc#%YnI=kSc%SN1b_a6QKmaWocR-2-grcOy)Qi3!jDf&5Lpo8h`6d6Z3q z?~z_d5yr&%)C0=>IKi}|NK5s6+Ao9sqOC_!j* 4U8yq~Q@kN(CD?p@f>;XTg}Jj8Av%WQSCJ&|!n&>}-28fd<<{DS~9{Oi#By z+^8mx7`Ns4qDZM^PO2TRhM*JeP*%6vo=oSI<+#%XyXKOK$U ()A-gUDj& z;BzIn;m7z}?Hf#cDg*l4kE1{TDwZWwo$wE?NjBXrlA{`)2u7Xel0}s$a;i>->-~*O zXdq>e_*h8l^G!xxF}xpA@)>6OZ_x(fb+qyGe`g5(e= oIe%oIRfzqgA zln0mSRj~vf4PEP8QpxNJ9bDMW`qn%50cQ}f++O+h;BIoyk!C-=tA~Gpr56RcCW!pS zb$&tBi!}6MI65XdMOen$2uQk)HdtccW@hJ=M5h-T`TCVsyCLIjoG5CVZIB^u;gl^{ zBN?bW2;|Z|q|sK<05lCxqF%;(gip }%`WiBeDeRYxX$@<^gS@YvCmi+-QRbx zk6ih7@ngno`}6Kk>|U$ch#c18h+$MRWfWi9bB$W5?E!yYpBV*gyDju?{ ?{k587WY{@qm$Egj~ zdnF&MJ|?#`F3%YIBSCB%@baN2O}_KD!d0#z)hK){Pt-BFX-1p1%#uWX-(=An>-mhU z#qBRSFaDm#ss!tDw(_cC3BRiYbc-az=MJ2N90?rrgBMO5y~#q1tG`;}V4sU`m1WUu zhTQ0F5EBE@J-9erF3m ADn;_HRjE^7A35b11wKgajwz9^PQAHZhr z;~?VH%?xi@#Y>pz@P?U~VW4o#QlP4>E;v9{c7`!T cp$9Hp{}07nbqk+FJ8RT`VZWroq;;V{aU`B)A*pnzB bG)v84SP+K2lk9pZRW%0)0WoZ$K?Y?7Srq5_ <83~EgFkhP ~^M^;6JcVjKLyCw@jQ0<_+!F_HX;zzd#n97Gc%d@Jhsj9&l!C1zH*u!XOI=?d& zLM*SU4YqMLILz1kYjDJ)Jza>F`Ud&QyHZzmSDxFFQ-_mmJl{jXOhUXp6Ry8A6eptD z-l}|jXl&sBB}(@l DR{Dm`%bqYd~MQ+aLZtVjus|{x=?}d z+G0!YJJmuT<-i1NSQIsE#^ =-! z(lYq*qUVpgN6+nveaP(;LlV*%`RJ%c@Sv({udZ${!_{GkEO8!Lh;knb?NO+*dLDW5 zU>^tSC`>CdkD^%lJ-6ObxNiHy5hlk@o}`=zLv=qwHfp8$+ZmOSmS!Nxn1??FcdW0K zI*2-cv7e=%FIo$mPwY|hfcor+-0akZ9v2!SL0%im+Q&*ai5V29J&y5XV`Ka&t|F~d z` -d)JgzAPg*8#1yYiyvFtF((h@HW|Eo*8?U=( zpE|rOvbB$uCzE1?KyWfiXoih1Sw+!2Pax52myOitviH$^PRhuL1#M>O-*m2r1svjj z;v-IJCmBuh9H=itf77`RBa5XrRK~sLPO>gWie=89$D}-ukNXvv2jqkW{CiM94?uyz z|A)!H7MQC4p4yN)@cO&J6ayt(Gfn-G^_ReOyCb+iZA$yv eISaN>g{C_EITolLa4&K4PtjN>#!o36~NTD#!7pw)AZXSg672@;}vc z?U)Q_N a7GzT&q|b>Kbh3tIX{>uF@lV<{n={H|Ee6 cYn=pHCARUqN;!YdOIsnQv~{@e#f}XL!8` z9B_7r6r&EiJrW@ji8o%(|GJ2VeJpes-q%+R*_{*eJ3zMf;_WOQp{q!PS`SYHKi3@y z$SJyB*shK*Ov(lN{Br;GfPpkCgV5NUi`Wu^^EjY~_WL3bgYv-dC?GfBu|74k7e~b_ zreGt>6s8cikI#DEGVL>=;Ve@V;~`v{lg2RKTH`#JQ2(GpG#jQF{D6GB84~kH&S?dv z2!Ae*$6b-a*=H6|TL5X$Chw9zf-Vm0#%a(^#yLqdCTecIi z$U6j59MI;=*U+$Llfj6P`mL-(Br~pT(vEGjF}JcUhE5#}3Y1;sWyY_|t>(DGr&DTw zG&FF?dM6%TMM3>aU3Fkoj{KPQ=7#wZEvJGyFP!v2&%p $#O4nCv&my^%YGDmn0;^rjc=YJ5_N|E@3sco~r5 zX)NeR&($!Ex^O%bg8blc^ff+Xf(>enekaY7KL28%DlI>s3P@ipM?U`EJ-;F!ZA3`+ zM5}u`U)@FmFQ#`^?mMHSPbH4^wyR9h4C52vf*!VM?Z0W@ws-|g*@#6ivL{5Z?;<{q zDJ>W$=b%@oxc*%KNx`%+aKOcnX?M1BDHpp yVt^XzUg5jb}3$(h&hYu^s!r3~4KGHkl ze_rteQ)9a}r1`xWClZg4gWaTFhXG8)xzGp7J>+SJfe7_n__M(t%GSdm{>WV7SIWJ# zbBDna&EE)|#KG%Fhaplk%w!Mv+c|YHPBL^aN6RpZH$`g*gIP`R$vEZMD;GnHoEIqq zFR=JJ0)YTt9+gAM`)Q UgepHukS6;HTTzgs6Zul8h%k56_t5+00n)b}*^3>(mAp6y)A@A5wj8sFf@x%MQ0w z8L>F4O`Y&w63SQ6Fn;>C)P_LaKT{jU;se(L)1RQEb#+dX#Ou^X|9)CmAG75BP&G?} zli+jLVrcBp|6u1Y{+nyRyU}s@^&cs0y9!;35H00PgjxGvu07I}l2D!nq+11SD=+O{ z+j)Z#IsE#OxNAHAC%POJSg29;^%+0hn+g!$NBi0FlUk^PKvw<{kq;Rtp~32J??)vi z3-Ngwy(QI8xpwW-!ZUob^GYKMY%)vAs$Kag3#}`!U3)$_^mSNbOSeH FX1Te~+~?15y0_zU)3i;NPLli0(Inmd*fM3DAv{bl zWf;x#VtM!#Y*HmP=lHv;#m!e0R+3RaPE)5KK{@ZhW=yDQ1r>+Gl<+*2nCvIIvgNAP z?jptDf()|69h69Zj*D519`N-(&zJh-5}gFH+xBA(w;#^(qI5PJI&?iJYi6mcOQai7 zG-D0STmYT}RfsilKZn^+H==3Jg~r8#4 EXa(F@tJ~&lvE#@uj%9tkSe61lHdmwj7-w z5PG;w6I;cs;^l?fd1W^6XFmDhg7vV9pAYQ)TSs&=L|$z4_l6<>{>GGpgU!eCXZ!U` zR%gIA K_a6sM((s#dQ0gmfY8BiqAJP_16LOTekvL3ZYI(06KDFLEj&>XBE zq}%Etn-6Sm-OmX(v@E5KwYZW4qPPX*A}sxf2TQW@m=N^&ZrjU6rH1|`+(5I}Q+zXe z$HHrQhaU`SUiP;EtELEaSIlCp#qc(g3{JLJ0PCHF 5v5B) zx`kor9+2+t?sfoaL_lvrL>amp0RiPV?!C`B_ukKWp6mBF%yq5Ln%8@+^)(acVj!7z zVW%h<8yu=HK{v2NOO2I56gR0F$2ghCBf2F6C--?c)*Vo9Q=GR4hEwrkKV>#M9|5{e zQczESuN8Gde`i_JgNjf!Hu$rUaqMmf8bUVw@uqid@E0xYxc+Ay?bsInm;Ioi*$QVz z&==>MfF{A4Gu5E)dHgI|ME9f3y`ZRL(iZ;L!LHu7WUkjeMO{+Q&%u%4M?Mo-3rfhf z>~PVJYkL-MQzR&_)x{TF{x%iW9b$1L{;}GAMrnmjG9VmioFB*gjT@=kN!1pO#U2dN zIw_C2)7()e8U}-}pdHdmRV@O>@Yl|>m3i3t&+!r}jUJ*pXb>s?gWyfL`-i^6s4cR4 zAJ#Il?p1rwIJ?G(SJ)r~AGID|Ti)t0*^MPz5W (- zQ`pVM)DDuKRaBhglpj}I8UH5P%#OUGs>%CKl8aq%bC=8O+A^xf?stz^>8N~xK*+#^ zD~vH@tn )euC*X>aklXsqXB5lL^uMk=PR>b-O01YPu8$ 95} z)n)kGYxLnX9~!F6?R>HaZJ!wF42>4ZU3wPZvbwpQ(RcA odb*{~E z`+K(v(ow6+4tjpjseyv_8j|smuVM-R8etQ$*;@hp*vKd`*$?UxJ5`u#-G)pq2LISk z=!+gY1k3uWZ_Rv_xdvYNDIBhTbiVGr{3Z68s7@*1;{83)>+5zU+% (cgPbmMzoh;%UEg0H()RQRj^?WV{xq?FU z928b4s9s^4=WcW{2u#y~3b0ZGCi%j0>H5lTXrCnBE$~%32&$aGzC;6UnVZVUNk1jp zlV?xd>;)FLAh!iOkJij;g-FLVh(>$x=%(uBQ5DDgdz{ Uv#8dKH8Ur%sU=`tvkx3`03=dr zaAF0kG>9=1+G^Ghn5mLRb|ocZUJVsvpQ*R82eP|zP?KaJM??LesrQ>JFprE-ja-qA zn^YN(4#nffK|n=nm18bZc{4W(0`~hVljqZY4UO9I7)ffqSA92Q)n;6Ocs(__=|1AS z!E8N~$$)t&dzY_GYBsFu*JA&}Mv=35_nBWxVDDPA*F3`#nGz8#66?~+rtcgC^r`*Q z`-KaMm1cmCBl?IUUwu&;h53tw0i8IU)|LbimonEB)}_dw>oJ9SD4Y|rZg!=x@XQ^` zt(MRMi~IWPC3S6X9u{ZKi}NJu&jjGl>goagMA-h3pMvRLI~Tl_Lp94MVfqieHhm*% zIw7<1^}fdo!GV6%<%uQ%P$+4o0y+J7k0RM{Zea7p@p|p`@2j(Yd|aLspD _8w2AQoyw~}iNISyj_$C+iq ;Ntl@fP<5ZKQ9=CnREGFUeq@xZ7`aavfE*T` zl&pt%WQCXOHz~P!LI{XmW_EsAxse*9TS-nueN=3GaaLVJyN4)Ev#VcvN1v@IT_`Ht zrGM;+7^KHNylwoGO4m>j_OGwXg;AMQALo|^XQJm;Hdk3ctY>W<@D9u_L>!)p#wBl@ z9f($6I{i2 4<0mLQ8rsGsHR VdH51td+Wkjjc!rWB-R?`K$C~IorxwbYCpat>4pSz&Eh#u2s+0~&-)gd>%==WR zln>(fmHI28RHfe|`^L@8;re<^fP50%(Wqh=@Wdn2Kxx{ 6`5{gv<)-24)z4%ob>4&Pdm!0ld@9Ix zp{6Osi_@p#jhF3G7kqPirt#ICfB{0vv(*o!@p4@e7Z<-0(SEnzohiKnrc9x(DG2v4 zxe#LBw0j})l4T&tEseA t__9XoX>jd)6=JF@vqhdHbNc9mC90G zSmi7W0t -4n0RlA4XjR}OeM{3sRWD^6ex)jT;i?dafb= 8jIsiA2aIGcOjS=Dz;_DM< zXPtR?%qUJG;a1CK>45maha_zhl>Z>%4h8EaO41S3=}H(W2ZEG%9uz)o=F#eRKr!C0 zbZzbnL?XllpUxb5P)LU_xe1dR<6kqIKqPWbsVduGs{CDd?6>x$?wIdosv_f`8vMy* zx-D)ldvzXiv&%@a3fHL5@J*6I78reE`xY-JMt@Ej=#gJsZxp3E$=e*-uGL0Bl!- zXM^6s9PVp?s0^_eRgIZ>ot);WdDy+Gj@RgwCo(xQQ20BYoI`$nQ@ b7=2n9 z{8K0V&Zi(uj4hl6JYY*Kb3qZSoX52}mqsk;I}&4n<*NG3@Qw=JK 0H6S+|POI4~Fx<947Lly+|=W8@vN>waw;6v+e6^lw?nbWoDUi@_ng% zLUl+`OPEbliO|%|FirSPU=24IsW9&NkSbVb1?RHseY`iF+O4_<2@!Ztb>oe{po5iE zHFn(5;ARG&{~CGO&)x@`H ?Z6)|cAT;Ox<+YHQjhDO+xf3cf%EI07ArJte z!@mSN`s5+H04jg{OCXY#5ucr3TE !-3VKlWugKRXy0LS*dqXLtnn%LVt4ZPFz^K%?e4v)U5AucWeV0XZF_`mYSMR zufztDch0*Dj~=|Z8FZ$gJIohud^=?H;OQ36B8RG(*raxd ze1j3 &YHokY{*C6 GL4`s@~s59wX*AKSz2H^;8)6t8cU5KMe#2Ux~;E; z!Di$NR|R`I*gMh>pts`zEUIlb6t+F&o48HBmx#WAIDB@zbb;x&6mS70WGAh3?E|^@ zFpv5$ncXz_Ata9=m?!UyJ+!g9ZV?7ZL~w*F9F+Ej3yg 7(yO?D0TuzM+amM}8JNMG#z>4O!>qv?af_{Y4F$|)iM zcp=$MPl3K<(;D^?@`?13zBhIyb!+5~9p&gmmmK6O)MG9Zl<3n_&l9UeET^0h5NB49 z4~`KS$l*Ss=P!7ujo^ qOmR^~#&EGP z!W4y{j=_xEN`{OY5q0!E3aa8pz=Z|-sh;iB=N)Vjx+Q_As@X=uT$Qfb)EflDYF!y{ zJ4_48pR!vNLWJ%$TRk6fWFADjiWqN+f`ZyjyO@UFtf1>fnZI{@Rr4a$r#cY$6=42~ z`KO{LqT7Udeh6EN)Yj-tk*V5&9HY^D16)m)(EfYqD ;>L5bi5H?ljK@DqAQo8s}w1)A5<1G7z6QPXYu&f6k4NlqFN($No_ zZ_AT#NsWyf@4o-Ut^C}T|LNP7A79$wILWWhLwKVP_dIA}_FQ;w1tvDu1rk90AN3Lu z&sIBt#l5Q3L6Ol|)MCX^EC?4MsiO??eG}0Jo3Rd1SrA0xWUoUrXD)g-1R2;*p#{`h zo+LBoH3Wq1)4DSCW%3iCFKY%E`OuiR=069tg T&OL^ZaSD)pC__ z{nGi!)6bbT{dKio*LR8JuSI|V+$gR6eX-NJ|NHV_NbLIRWaicNuk*hf{c9R$ATh$! z7g&@9c#0(~dM@fXb&Nc>MJfE^s3V$>ULbU Uwl@QCesg6Y;_Q3xFO6I(@t^HK>4uZrZ-1v= zfZyG|e@Lbr^Obf8&@1RDPWm_o$JWPidyw~5Zw#}ZIoYQTKI*~V2nYLoYU0TO(e^_! zhm$wVna*m5e^C+1RAV-cCK#vRDsLlizx3Q=fRl!|+l(sqRvP_Y{}&Y^fC6j3a! zC7^6_LyxE;D;E(j8~l8bB5nNNOAAE9qf{rZ_|ihD%&(LC=N@lTq`Qg%`LYw22~}A~ z7JWkY@W1uZSO6sdhqMcCcITMOO8%0~U26W Ah?;DZ_q nsk*Zv-+{V@ICU zzw<@=j7~j+p )CJg@FQMziXUs@O+M6f3IJK39^ZU&Uiti+hFkuTpWY~ED`n>NJ^u7my1d04 z@tl^rQiy`4!j%m7ar={Tm~KY3luA{ZjeVfwY~2v0N|1}zRP&sWSY5X 9|9gJys2h)PnZ6&1(nymynbzezTn7VuoK zC561v&adG$4>BCk5p-CC9&tSQW=QU@8*nvqz(K93`f9H$;uU3kxts6rU ~jbjubgXi2B?D6U_7-vu#orh&qFV{AEL!ZkQf3aW;@rRcF= z2rd#}QUn*BI4kyRoXGj`a=bzv!?HJ08_At0n^Ctyp;v E|NQeeKJ$EQ6Eb@Z6B7gB1p9 zNX7;Pcu*c%81JjR84qZCS}x$_R6#_bYHTzL1hUT&luhLs5%OkObG?KyxL+uN;QIF> zLBtUJz*qIDUIhcx_#mpf$ZCU;q_+d4#73yVuiO~HjTC0%=mS3-oLF5)sOKHwZJ& zKhHD-eRD-uHuKq5Ce&r?UxsCFJ$i?1f77-d);63Be?>XpA{1HWZyX`U_RG~=jEz8V zT8NoQ&lSN;lKGc&cTNG~72mpnF{m@!zp@^(lG1lLL_FzduSZaasbk`DTT&W(4KThp zTAJiP+JvlfAOcE)r;cHA1krA6D)AhR6iNhche8yFy~n @HVmjU zCSvZ%-bHm!_FIH8(Y^JcD8u=nAufKD>=Htc^=J5tn<(>ZM*a@Rw$j4NJfAItykSo$ zseg^x3Jig%gogy;TA&z1VNZ&^hPb}%;g|Ek!^A9|qdottnpWWW+eQBcV(tCGFJ&t5 zZraaar#>Qg6OPU^xG}2x3>#G^3mq=}zf1f7FdUq`f-ca^aUVsCFrKH{2>KzQO9W5L zgHC|&5XICI(#^9G;QxFs?uvydpPS-zWe906s$Z)hIDXL}``GFZUQ4{|1IU!s@0oFg z(`)wvSZAdfa>@dbpU~eX*Mn|QErtag=Q9{TDdrjZFF4Pel-Zmy^Ne)pKSv%_ZHv zISypPD=X4I#@< MUP4B*a%pR}6U_q$?P^Y1hxWCAy z!uBggU3>=-ar?>20=Gtp%I{YIldG>RBXt@V)h>|qtFNqqNDZviG)zI*l#e4F{cEQ- zsnpzx#MGzvA+Zid@d?jw2aR4~e~Ab;VN?EPwJ~a% U5d}?=zw?|v&W6su3w&L5wcPTwPvmXQ#~G-tpT!*^pzlg z3-14~a=+Cb#WPkg{r#W&+ZCxp$}TeS#3HH$%BK$4Kl|I7CaU3t09_(gNcg~?{q5U3 z4+}^D+~#Hb3qhD#1P_C-xux _FNg jr&?ddsZ!>@+j1LvP3@6y+ObEYE$PZVp_H}{mv zCAiI#xN?sqbw0fn!r$2bUeVkq1uUmlC03Z3fA691z~-mN4{F04?_zh#TkUcw4>+VT z0BU#oqSpBj?M3ymf93HpP*}U9i+c8v_LjBK7?Z=$e2XY zP{ldpLKamIABHmDI>%8kCf1on*klcZBDm@zmMBD{CRs^<+-ZGiu?$l#5$f@@Wg5i_ zxJBTd0&z 9{@CwhP2KY+SJDEtUlxKs5R;l`cnfYYX23J73)zN_! zIW;ofn(47l{Ys_?Gscq9ep+KS%Qq2jBl_CF4V7v48~P~ky*2=l5g{sJ`|`~%=hCNt zg7)B41Kn7#0QbR)vXAGxP4bXYJe2p}%Ci$;WdLM{6j$JLnT69z$d@$@OF^Y)$ g}jD63v$BY5T~0kJ)I)LLP2sU z@0D2}gnTdvyNu5 z9N<=*#`#!&n`Gg0`Miw -Afs Vmn1XQ6JGUXqNw zP| c^w#2u zt(V;VY657T7j^MP|5F01izybi(HJwDJ4$IAU-g2OkKsht6FzCd#d3!#H8ejwPBs2s zOfGO+EC26hT~@p;|3BFKRyX3mh>Jtj6MTIB+{Is5>>o1`nc^h)_ +mxXV}%Stt5h_ez9FG@Vvn4)tUbcw; X zlUgQDuOB$tB5Mbe+t3QSTlV~u+NzQ7UTln64zdl#{A4~lKCe%`m#~N@E?FLl7H^Z; zrD6Wik452b@hg*6Bh&r$QE;E54Dd<8 f>Odbf4UV8k?^ z%UhVqt}=e`aUcapoO}(`=R}(eLli=bN%yMAm`;is#{~CP3jNi7J`cWy5bFv#yRj$F zFf%<+3HO`&$>6#&c;DUH+y3W4sVt#9b$=HZGNq}&FQJEnueswd5u?r=tF^|>FWOFS zi!YU1vlcpBY))NqDCeiW+01FqS&xr+sd=$ZqMxJXjCPFEcY=MXnQ2l3O2V-m0(~?Ejjon#zR`fQDoJ__S^EuBpz-^Khg@qUXcG z!tCB?cPiH@Qy7hP8ra5LpEfs~U%xJ&jO+lz2BS<&Qzqn79uD&oC5Cg6u#_N|BScR< zmmvajhpc3>r?y-$B~i3W^z9tyBB;g@92<4N#mgc|PP?5TR%$T9idp|VmM8K-)PYrU zSCS7e8Gtm>T7s;`4)W$zpI2^Hm^OAf^VX8ASvLQUPiQ8p v04GL$B5L3aBcT5z ziXzK(MgS>Goe!wCY8v+WNdhP9g&9+44u?qQI!A`bxiQW?8EsnR5g2{rzJV|Xcta4; zoAINGM-Ru3KOn&(CzGmvvq3<7Nmzmvj&BOTf6RN3GUkOmpd--job7#YkHGapAH3~! zhtfM#y&L5<#x#dp 2kMi{eN`&T9hrC!~{f;x3$v=f^H}vRvK^S25&T~ P8uye=Mc~fuTddxDEjx>D zO1HOG-4=gsM~HF!?p)`p`gLOgEYeOtf9?PJ;PB2=z~oPS4t_-n%Q75eJFq>snKu*) z=-Cc@?roCKK1>7!jRt`fScsE#kvfhTFkKZjQ7*hs`djUjQmwojI{Z!KYdF-PN)U;k zbYFJ U$* RlXMBRNDcl uvK=%2(E!lm{PPC^@&gfN^aQz`v(3|$yoJ^%p|U3_(FEoNxW;5zk}*QmP)h}mO2 zEU^rVj VVg7S)@Ot);BsEUTzDi2_7V|xrf zAsNsLN$%+PFb-`2l)W3XYDR_kjZYf}M`J(ErgsemPJUUqBi0jx?=ux5=05=H@d&&q zwe{Bi4=%Cl*w&w?d-hvF yLTnE!WAhc&(JwtfMq%~HMk-RA9_6B+;(>{AB &1L=IBp8m6_ZZM)#G2{m!vHn%-bw3f z8FHB=FVEp+`cH|I=MFt-?ew2Xb(&ih{`L4_eSc!o-Nsk!Mvs|5tP&TVpTpX|v3FEw z!uAb}{Ud)$WeOu2d$ZQ|q)2Bz<*UXNa}2tYOf3yJ@G?D$Va&AVxZLm*{rOaNleHBT zGeL`MvYV_heCEPJh;*Q9(wa|vUECWquSi~X`=OlFzA%~MmFUf@w&Io1p#3ywY`f^j zRK0s$K=wOV6*gY=^*wNB#J);JVB3Agq@Tyjk0oE3{3i5e|C;=f{zt&OU+hb}V9mha z1757q9jI;iwXgiujB)^2P$nk$DBUzK1PPx7h4O2g_W3iAbD&_PDT`(i`&s84QCX8f z&gjI+{3WPZUt52KKoTS*j+fBZf`T4(OBDeB9Welk9xqcy->c}uH=AxjS?Qz{1y(7v z$sevHKeIDrN>w(hFQ#~k9#KwLjEO8xx1<81GG5h<5M(gDe8`pRE?Uk_M}H%o5B6%b z{6QvK$AafsXh8aggjdGYda|?V);uuq!l$fAg;2K7ic@M-nTXpMTh33 piA&NnL9hNI|eg31`|SV+4@XKD=@0TucRM;XMx3fnoFpm(Bu!dx9; z=7QHOlcN&5oP(Oh`NC5LQ;z)5PxZSYDKR9P?H>G>L+xp0T0&6j5c%+~RAc%5lFNxl zj&I8mfI8u!IY|J?L6o@|-E~x-6CKz-Q>! TmLX^st!5ps~*y>(W40*Rw&RLdGl;!M~#32hUsOeS0;NhQ!>OQZlY< zO>zgL8;2!7_M*PZWy*Qn@TPD?;tY~TrAaWydC1i_1XC_+SzdcT*Ym 0-d4z%G?R=X@s|IV~_noz_e(^Hj2z+7XOkGY1Vgukq4sP@K4dduV@K`A4q gsai{K=0WNo#&JcVxQvUie zfW3MnJS+nGJ`m1zgK+iiHj*E10O9T<62FU-W6;%Ml4M&TEDPQJ6%#_k%mGzy3#J$q z2zZ)?`(}jgqx_`%h*wzUly?YuqXpx}B1{03kf~+obtaS_{|43FxJjRb43o9sgcr@; zWPtVh#mNWL2BoNQ;vnv~X_Ohl@2Psz>bm%Q=yAe2(mKWB_F@DXEOv2_PKk?{SOu)b z`bry!k9<7tiC!T)Sb*?0Ixa3m0Z8|%bwE{c3KJJo#LcIn@wvVJAL|J$n?v{U>j}pl zmOS!bWK}!Jqv{LO1fI33f0d&0l#y84ZRuD0!eg3TMX&->{u{;kBgP~DA;!Yn-I~He zY~TJxG0O22BmWP@Pz`aW5xJH3=PP2x2reoNj1Zs|wfcu*^enohUurU2{7I(x($EmL zu6wF(qk_ t7m{@l)8Y;gC(}1|tG(C)ip~;_esYs?xPC;oIH|C9XNqKF0 zXqK%>bX{vOqS4jFrR}XN0uuCsDiAwtAVyy09yv1kxFM!_>hqnk_Z}}GLo*Aabe-=2 zEx2{TFL56>c0*wOsX(fpy;IhNw3^ei@eAPLd2=VV^S3Tv&|5M_wfpGy5ZJNR9Qg2t zqT?q#+=5I5zm2>hD|mHYn>TF9Dt=AA ?3=|9mVo9^5?=FvwPM@Cg%Aa*LbP3~vBZVobPZhkwr zN0>+FR6*w2D&EXQk4bg)PgpG;xOq_BYt=<~Zppx4E)>Wp?U^ d&aGic zaf9=ORMQ4JDMRxn%meTPI`h1%D#bNVe-+SJ{z>#E@Qh-h!p-E%{gPn2#q Iu&@ --0pFp!sUgCGcGkdSi?BbG>04u+CT=LI}heL@*R7Y9({ntnZL7RJMX?MM61 z>#{}2V7v*?vRQ4QF#d`%WrCS{09TaUu)1=rjQ RGO=HYRC5`;#S5=Hd<~@y+{zj&Pl-LjeVTo_!uxA7AKKc zUi3BsrUeROmWwEO?0q98sw$ CQ7Cfye|Mfc2nv-eY_LbW3CvZ z*>z-1<&wo3t`I)RTdIs45op~x8bb^TH@dNKV;dN6E$rBUd(3Y{e1IYIj?-Drwei%K z{W*G) &B7MAHE8p#X}z|8K9 zvxKNH3M!!x!{NLxh&qT0)a#2Oz>(|o*Ajonq50TRq$<(?nj9SqNy(>hH_Y3&`HOxM zDg_kA>auJX*hp~|cG|EsiDM1?*Qgp7DUxJvikzY%o3wx=9EPf{)VhaOHVVDuD&V_A zE(u=Q_RFw38CiinT DkGv|{qG=tT{B?+7-d^5b@s?8xhzoJ|e-75PlY9L8?*YMo%JAvGd1414UuWjd zf91dVg=o}>m6!!gyZ;n{_AF^a2mvyW??A%){y>VBv_6h Pt%jiDC$j;LX4%34P$t6c8*YLuy$xxZb?bLNl|H4 za=B?`b;D}}jg^B ShbE{)}SKkW+xj&}3fAqF fCM^h!B7BH8d-E5{Z zCvP 1M2R{PdYEQ=(S1{QJJREf%tlI-R8pkN8;~>*YGVuPs#b@rr~8BBb8&g8Gqq z5&SIgo%an*~$H|8Pi (d^ z!uh-f(Cyy_R|(Dwf#j6RIN{$
xzupWw)8joLzha$Tu?A-tqz zW+c#^!G5%`w@d+q-KeF2UgUz0lWDmdVjeAnOY4gf3-CtANdY32!*16A@-e??NA983 zZ={Dr-AbG+O3coawu(?a!tf;XBE5K^Qei{Iu!+}Sh?BTj53JIN 7QIl-M_#rE8|GEQc+*_OaydOIN@Ynt*F{m1StLr}Bg)>eGnH={Q-kK_hX0@X`A zl~hejL}hGns;_E|_8QUj*Uj17Bq_}Src7nRLl+k!(7s2HobtNjm_7<*?%`eUJlbW? z=!3EqvbHp&Q?*M2e&9rY-M1Z9k>M&x_O@?Beuou;Uj*<6_8%Wa|ClhZOQdZz$5wp5 zD?HJ4e)zSn!_iy&XoSDC>S$E>j|{h1jfahM^I=gSTI3{n0zMg210^+{SB(r#+`gH` zLi1X=Qw#DO4OENYbce#Uja5L*g4rN~hi p^ZxQ?HiOFd zVH2)_NJ%D_nP0$Rxs9ooIrr^@mhZRx@1HM5@YUc8pVI#?8E%6$X<;`@L}ffzS&OQb zaT%?O4bU3B3G5C(94o!d%AljN8|!y)2J2xHy_&?Z?W-QT666x@MD9=Y1A@1AfqQbK zxe_PFq?og@nGad#XWF{)ZKraGT-S3)(?HiBFVaXGkDp^|8!nir;(n8#zv&9RxL8)X z{`BK5GpVyNcm?>&pase2yl-_Xw6LWcCU&bW-jaUu0TV2Z@7zNSy{*+tL}aZXE$M7U zd({V#mqvj{MS^%S3lN!e5r(KbLLt>JP!A-4V)T8e<|J+jpPSn39giS(pC^39j^gPM z4sE=_LgLUS%f=cP_TUXO?R|FD;oV6h^-o{vpCSfrI)GEe&tsS=4eRc8Kb<0a=5J1w zb>4nc^N_% CPKT2lYRs*!$%32f5~tZAUb8dXbxf5 ze#e*GGv{3v%f5OA!c&JLe}$QbKmesQ_wU+EhPS{!{!@E%l=0zg*`(Ef@rd)thZ2e0 zrtMeiS&;BJ^*`ZkwsAB@(h$JUqlLG?qG{omyFl(+e-3$lG;wtZ08;yp1?GB5_u#QV zISg-stzOdj8u$mqrKBo(`B(yhRDo&v1$rC2iBnX OdXEgugkhXnOKrmDF zbBA;BqJg+my!KYzn&ui#9yB`ggEktf2GH0ab^LTHm`H=!N+_S-w4TTZMenJ~HswCb z40Bd&j$D6UReq~ciZ;q4IrW}l=jj|mzxc@uCVUgmkIwO4u48ohngl zdbUo#sfkb`b~DrV;MyVy|1_}*=@=&Yd#V~KmNt=r2SFA;U7N?{<-Q$M`Os|86lj3) zXFCAhjLoA;y1tGd$%s;$@CwJy(V*`gHiyKl^DE9vDgpF19?b0&v(za!?*N%1T-T>r zr05@hQ#;wIyydW7(@x;+^zFIv9TSn;(fd2#Ser$~yG_vc ta;;)CfOhBg< z6DWW#g7`X6nfqKR09K)^1l!K fUQY%l( zf<;uM#B@|VX)xmCVXt~ou$c-qM(_)z{_cpXEP!jR*7V(ovg3y_$g5VTkRnJL{CYcr zubW41aP9JU-?|5AL9A+$5H2M?5fve&X|EEemC1DE+DzQo>uej;+V9qnfr<89oo?g5 zoCy{_z+QQp0tiSM>S}4xyj_SSmh&4BLQer_(d4}vt ` zT`dpHU)yrjP4{wpgt~L52*^xOaPXF9tR6D{MVTFc@}%-d=h1s3o2HaV-=BQ^*CEgG z$6rrus(*Yo_S*e1V;U}UI%}Egc>2Y*^mQ$mey6GhLeCATh7gYXc}$3s0-B~o#A2lg z+*<3TKN!G~jZ+eL{MxXQ)Rf+Dbx6d$8(0-sRhNIyWs5DOXz3iR+;L!XzFu{=&DkBb zbywuyK$6yZw-n6;$?gQzDe`=GosC)Du`J8s*?)T8 P?>293_?f+8V?nM=f7oD&uq;`h1wD1lU?(?h2-21KS^AKAfEKGBqBqN zg7ar}ZU42eVm@<&|DXFR|6Je_V*y9%5fuDoysAQ1pRF15@GC84FP#{#XZ3v@;}ELX ze~-Aa0`T*6fd8 QJzZwT5X*KN4po|Y=RZ9b K;D z60M^G@w7nDhsrLepsZY#)z`hWqAoSTv$nnkB~Je4WmHP*+m}Y2T>w|?khOSmQ1kFa z1}k|mKGYoZVOC)@);agff=FoGr_Z=GA;j1`pl5wgjFqMz^=W$ltnxwpr>*n#%{1J( zTdECfBj7u+xsWC1g;Xfc)Vbpw#gcSnx}cHqM*c!i7?TBX93oLvkpR@X&QJ|aEErAB zH;SW%P%{joqF&C$oF*FTWVePajss2%V{%I1bYyc0obQV{3uS*ml6i!RvO%+zFs%|5 zPh&@^MT1?VC;Ci-Ky~k1kByX8##?Bc7k60#9M%i0476)rba(-iF8#)w9zk~@UnR0= z>z6EIst>fT+7NUv(Z3ABXwxaOsxz}a)`Gq~*r;$O&h_NT)5A;&l)ZjRrhm&(AIv+y z2J>sZ`>pYHKk1~BjBeH7uOB*!a9KBDup*%v^{=0KpS^g6TXU*qpzHIFkNLzE{WFfn z$2(Q-pu2sAW-T&(KirSFJUszBnk+sK2w;W1qmOVBvOQx%fwt;Qu3={^Wed;AjiyW~ zJ~kswLkb9;7s*M?pA3b`Yj2o&as?Ec;XkPY8KecfmlaTO_C&xU3{iYsFmauP 6i7>Fr-hkU+T^}*U&n5hf|U7 -aeO6j+Mo6S>7_Y&d~Voq9o{^ afS< zg019JLi~YoPqsyRGo&4EHP+0jgF0c++C*oV4CDGy1N+_U=2`2?-IjUJ?cLT^d~>_e z9chZK{2WjLXn)Co*-qNX!R){%bKqiSJ8`;7JqE}Fr-bR0gY_;R%grEi(yKA9w =j=9w5f{R987{u|dAmmxOwD}rYBRzRsWXX=01R6H#>9+#YPIDRj)UUfX7 z@ZacG_3ILlVBL59Iab^cS4)!7z7qr-Du8>8=on`A0SJS4ltvZc&QfhK+iHRlmQ=?9 zfbE@~pf3uf2jXq4{G^2QGoH5zXYpCXcK~gn%OB+wm$&cY@{eAJeyi+p90G*Bn!9zw zx7MhgHYPYjme$*3^PJ`F%S$}lcYEfCU`M(6$!$bDYrj~2L-M`7Hlb7Ta^bs^;=r!n zix;7LhJpbD0Onx9tGR^>MWO>k!E3Lb&vbVPj}2SML*{YHCZWf9pMMklu okPFpHK_yagaspZ}7P!rv$*OKD4wTBP}RYWlzEpuMlN z@PGYXhY0=IXX3ZwPx(itAeoi@VF8R#l{|XsAAi^RiIl3JQ>x>4JFKH90nY)b?=Ac1 zS0ffKNj^X-h=y-ymOC9pwjXBl&wvSKA^$cU(J*U5j`uB~*&*8F% z!rT}a*ZpAMuv8rz8>~?Yqx<`;%i#uVKh__ RnQik zA&gXm0m_e?B3``!#4@EmPqHMk95&;+eVw7uE@agcBOKYz4Zg`M7RtafXZ#qm(wg0L z#pnQT;$e=zj%vtA4=;F>GjT-uT5ha=DiWCZ=y`L*{D d-lm3%F_pFDoTI-|>?G zhc7Y39a-OVDgK^5QmEktbj};HnJ(7*8qqx#<@mM1Ytl)=OnL8VXS(}2*;Taa5^;Oe z?>c7LQk `h>Oru5s<}oe`Hkit=EwPk_3}-DTNQlWPv-DOK$kY05gzo~!0P zz1g=Pf_tKVT@ekN5XmKh@411dk+^Fz$c ;rUQvm<<7nCef4w#z;49 z8vfW=MmeG*0g@KUmX}80D=2DR5FM(`unb|#@#YejZ5i(Olds_i#VXYtaU_Im11w_b zI0c~L+@en{J-Br2c;s%qu$u%TU&=;#zYwiAr7*n+ofC$W5?hfI8=LB-zEyHA;U)DJ z;1i-{IG_P$6fu@S$x?j6GYeNV=(8L@mDA^j=`)UGg>mPB3*8wJYeo?*4|$4x;iHkc z-ZHS1(o9r^enfhUlHlWVy1q@0%9os*xhcP8Ns4?KE=mgu(<-d0+~=YyAJsk@5E8)d zApimcI-nqM6Z6-5jmW<=&95uDb)SJ+w4Ze5w0!Z_;%qCL_hD;WiRuG1wL~om1&$S9 zceztx>W&?|Yn`;f!>#|ajD+-8s$eJs!k!8Cq0$QUqoRHfLMo$R1*Qzd2vh7w>55~0 zHA%|{l)~ow=vXo_4KR{zdsl9e^{>5krv47jtc(k!gM&bPf0I@6dj9T&GKEoJnh<^U z$+Wig?*H2|QWB6+q#l5GqN F$;k1eG&>>)U&OYn^?a z^EbTL?|$#+dF~)DBRcTi6hqUP&0C#&)UE3hBE<&X>S>O*^Z-QmyJ9e(f|LB)2yy5z zIlDOd_|3it`Ip xWZesS+5Hgf`tnyM~K4UH@|VZsM#hwCc@_cR&-s( zx)Zpxf|@_ASI~Yh`EVX2%>8tOb*ESG+1*O7; XjRCJtE@^gk5Br};J{_Zbb^i`+%`gJ?$o10|M!vQrPh0)U za4u7B`aD!K{SE0TOUWa%mxfvyDO7(4O(=#up8tK$RzUoTFEt8>7P#4dyG5hy<*55f zh42CP+VU_`y?>dYRc8ph4sZZa92Z5NbbswIm8)l(z1z*6wt-sBU#fbfFxEE?0VuJ$ zKCvjq`sPSO2G!L75*vmmCaFcbnIP lH7|vpom^Puu1V4#S=(VN-89%e zVu}3tx$E0EzJ}zji|;L2h?}FSO)ETDCLtnmj#RK1uqqr(Q1&sV2&^MxMe z0VHrGSAm|)ows`+Z?(kYGm&7d^(Gb{d@?#eWr8xrJLL+8X;Y9Z;7R=LWd zX#88VIr@&TS4Jl{WXDsTagh5G;uL^{J|=S>86a$ungw#qa#1{JFzCP-~XjfI)Mz z&<;O!da7Yxjv@ucw=eTA5~m%_z7!gHG)*nZfI>nJ@87eh*9{ ewzw-x^;Q&+(?iU{q%tk>E%U} zpCtnrt$la-B`W(C>5nrF^w-zL%i%rEIbIHk)wxTDf6quHAV5`o$M8|Iwa6NT&d9~+ zE_-G3%Ww$*-5M!Ns~jjIXI2w>-?Y7G9V}9+ydLfK3&s@NNX@sdBNsQ7|4