From 113743a0656d31b394a68dc8be40cf86462d3ffb Mon Sep 17 00:00:00 2001 From: lin <648540858@qq.com> Date: Mon, 28 Apr 2025 15:04:06 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=96=B0=E7=89=88=E6=9C=ACwe?= =?UTF-8?q?b=E9=A1=B5=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- install.sh | 57 + .../gb28181/controller/MediaController.java | 3 +- src/main/resources/application.yml | 2 +- web/.editorconfig | 14 + web/.env.development | 5 + web/.env.production | 6 + web/.env.staging | 8 + web/.eslintignore | 4 + web/.eslintrc.js | 198 + web/.gitignore | 16 + web/.travis.yml | 5 + web/LICENSE | 21 + web/README-zh.md | 111 + web/README.md | 99 + web/babel.config.js | 14 + web/build/index.js | 35 + web/jest.config.js | 24 + web/jsconfig.json | 9 + web/mock/index.js | 57 + web/mock/mock-server.js | 81 + web/mock/table.js | 29 + web/mock/user.js | 84 + web/mock/utils.js | 25 + web/package.json | 74 + web/postcss.config.js | 8 + web/public/favicon.ico | Bin 0 -> 1150 bytes web/public/index.html | 22 + web/public/libDecoder.wasm | Bin 0 -> 2386957 bytes web/public/static/images/abl-logo.jpg | Bin 0 -> 19328 bytes web/public/static/images/arrow.png | Bin 0 -> 5053 bytes web/public/static/images/bg13.png | Bin 0 -> 1423508 bytes web/public/static/images/bg14.png | Bin 0 -> 1362916 bytes web/public/static/images/bg17.png | Bin 0 -> 896851 bytes web/public/static/images/bg18.png | Bin 0 -> 1327602 bytes web/public/static/images/bg19.png | Bin 0 -> 3155872 bytes .../static/images/gis/camera-offline.png | Bin 0 -> 8891 bytes web/public/static/images/gis/camera.png | Bin 0 -> 10315 bytes .../static/images/gis/camera1-offline.png | Bin 0 -> 10463 bytes web/public/static/images/gis/camera1.png | Bin 0 -> 13055 bytes .../static/images/gis/camera2-offline.png | Bin 0 -> 10061 bytes web/public/static/images/gis/camera2.png | Bin 0 -> 12553 bytes .../static/images/gis/camera3-offline.png | Bin 0 -> 10460 bytes web/public/static/images/gis/camera3.png | Bin 0 -> 13009 bytes web/public/static/images/zlm-logo.png | Bin 0 -> 49027 bytes web/public/static/js/ZLMRTCClient.js | 8222 +++++++++++++++++ web/public/static/js/config.js | 22 + .../static/js/h265web/h265webjs-v20221106.js | 428 + web/public/static/js/h265web/index.d.ts | 97 + web/public/static/js/h265web/index.js | 32 + .../static/js/h265web/missile-v20221120.wasm | Bin 0 -> 2108891 bytes web/public/static/js/h265web/missile.js | 7062 ++++++++++++++ web/public/static/js/jessibuca/decoder.js | 1 + web/public/static/js/jessibuca/decoder.wasm | Bin 0 -> 1050314 bytes web/public/static/js/jessibuca/jessibuca.d.ts | 637 ++ web/public/static/js/jessibuca/jessibuca.js | 1 + web/src/App.vue | 11 + web/src/api/cloudRecord.js | 130 + web/src/api/commonChannel.js | 244 + web/src/api/device.js | 221 + web/src/api/frontEnd.js | 218 + web/src/api/gbRecord.js | 33 + web/src/api/group.js | 50 + web/src/api/log.js | 15 + web/src/api/platform.js | 142 + web/src/api/play.js | 28 + web/src/api/playback.js | 34 + web/src/api/recordPlan.js | 85 + web/src/api/region.js | 84 + web/src/api/role.js | 11 + web/src/api/server.js | 117 + web/src/api/streamProxy.js | 85 + web/src/api/streamPush.js | 80 + web/src/api/table.js | 9 + web/src/api/user.js | 91 + web/src/api/userApiKey.js | 69 + web/src/assets/404_images/404.png | Bin 0 -> 98071 bytes web/src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes web/src/assets/abl-logo.jpg | Bin 0 -> 19328 bytes web/src/assets/bg.jpg | Bin 0 -> 799853 bytes web/src/assets/icons.png | Bin 0 -> 11567 bytes web/src/assets/loading.png | Bin 0 -> 2763 bytes web/src/assets/login-bg.jpg | Bin 0 -> 4068 bytes web/src/assets/login-cloud.png | Bin 0 -> 3388 bytes web/src/assets/logo.png | Bin 0 -> 67082 bytes web/src/assets/play.png | Bin 0 -> 546 bytes web/src/assets/zlm-logo.png | Bin 0 -> 49027 bytes web/src/components/Breadcrumb/index.vue | 78 + web/src/components/Hamburger/index.vue | 44 + web/src/components/SvgIcon/index.vue | 62 + web/src/directive/el-drag-dialog/drag.js | 77 + web/src/directive/el-drag-dialog/index.js | 13 + web/src/icons/index.js | 9 + web/src/icons/svg/channelManger.svg | 1 + web/src/icons/svg/cloudRecord.svg | 1 + web/src/icons/svg/dashboard.svg | 4 + web/src/icons/svg/device.svg | 1 + web/src/icons/svg/example.svg | 1 + web/src/icons/svg/eye-open.svg | 1 + web/src/icons/svg/eye.svg | 1 + web/src/icons/svg/form.svg | 1 + web/src/icons/svg/group.svg | 1 + web/src/icons/svg/historyLog.svg | 1 + web/src/icons/svg/link.svg | 1 + web/src/icons/svg/live.svg | 1 + web/src/icons/svg/mediaServerList.svg | 1 + web/src/icons/svg/nested.svg | 1 + web/src/icons/svg/operations.svg | 1 + web/src/icons/svg/password.svg | 1 + web/src/icons/svg/platform.svg | 1 + web/src/icons/svg/realLog.svg | 1 + web/src/icons/svg/recordPlan.svg | 1 + web/src/icons/svg/region.svg | 1 + web/src/icons/svg/setting.svg | 1 + web/src/icons/svg/streamProxy.svg | 1 + web/src/icons/svg/streamPush.svg | 1 + web/src/icons/svg/systemInfo.svg | 1 + web/src/icons/svg/table.svg | 1 + web/src/icons/svg/tree.svg | 1 + web/src/icons/svg/user.svg | 1 + web/src/icons/svgo.yml | 22 + web/src/layout/components/AppMain.vue | 45 + web/src/layout/components/Navbar.vue | 138 + .../layout/components/Sidebar/FixiOSBug.js | 26 + web/src/layout/components/Sidebar/Item.vue | 41 + web/src/layout/components/Sidebar/Link.vue | 43 + web/src/layout/components/Sidebar/Logo.vue | 82 + .../layout/components/Sidebar/SidebarItem.vue | 99 + web/src/layout/components/Sidebar/index.vue | 56 + .../layout/components/TagsView/ScrollPane.vue | 94 + web/src/layout/components/TagsView/index.vue | 292 + .../components/dialog/changePassword.vue | 119 + web/src/layout/components/index.js | 4 + web/src/layout/index.vue | 95 + web/src/layout/mixin/ResizeHandler.js | 45 + web/src/main.js | 51 + web/src/permission.js | 52 + web/src/router/index.js | 265 + web/src/settings.js | 18 + web/src/store/getters.js | 10 + web/src/store/index.js | 53 + web/src/store/modules/app.js | 48 + web/src/store/modules/cloudRecord.js | 109 + web/src/store/modules/commonChanel.js | 248 + web/src/store/modules/device.js | 235 + web/src/store/modules/frontEnd.js | 218 + web/src/store/modules/gbRecord.js | 51 + web/src/store/modules/group.js | 64 + web/src/store/modules/log.js | 20 + web/src/store/modules/platform.js | 150 + web/src/store/modules/play.js | 50 + web/src/store/modules/playback.js | 60 + web/src/store/modules/recordPlan.js | 80 + web/src/store/modules/region.js | 99 + web/src/store/modules/role.js | 20 + web/src/store/modules/server.js | 146 + web/src/store/modules/settings.js | 33 + web/src/store/modules/streamProxy.js | 90 + web/src/store/modules/streamPush.js | 90 + web/src/store/modules/tagsView.js | 160 + web/src/store/modules/user.js | 180 + web/src/store/modules/userApiKeys.js | 80 + web/src/styles/element-ui.scss | 49 + web/src/styles/iconfont.css | 2049 ++++ web/src/styles/iconfont.woff2 | Bin 0 -> 56076 bytes web/src/styles/index.scss | 66 + web/src/styles/mixin.scss | 28 + web/src/styles/sidebar.scss | 226 + web/src/styles/transition.scss | 48 + web/src/styles/variables.scss | 25 + web/src/utils/auth.js | 42 + web/src/utils/get-page-title.js | 10 + web/src/utils/index.js | 117 + web/src/utils/request.js | 80 + web/src/utils/validate.js | 19 + web/src/views/404.vue | 228 + web/src/views/channel/group/index.vue | 316 + web/src/views/channel/region/index.vue | 303 + web/src/views/cloudRecord/detail.vue | 576 ++ web/src/views/cloudRecord/index.vue | 315 + web/src/views/common/CommonChannelEdit.vue | 364 + web/src/views/common/DeviceTree.vue | 74 + web/src/views/common/GroupTree.vue | 384 + web/src/views/common/MapComponent.vue | 255 + web/src/views/common/RegionTree.vue | 392 + .../common/VideoTimeLine/WindowListItem.vue | 195 + .../views/common/VideoTimeLine/constant.js | 89 + web/src/views/common/VideoTimeLine/index.vue | 1048 +++ web/src/views/common/h265web.vue | 315 + web/src/views/common/jessibuca.vue | 325 + web/src/views/common/mediaInfo.vue | 97 + web/src/views/common/ptzCruising.vue | 328 + web/src/views/common/ptzPreset.vue | 152 + web/src/views/common/ptzScan.vue | 212 + web/src/views/common/ptzSwitch.vue | 76 + web/src/views/common/ptzWiper.vue | 58 + web/src/views/common/weekTimePicker.vue | 481 + .../views/dashboard/console/ConsoleCPU.vue | 111 + .../views/dashboard/console/ConsoleDisk.vue | 83 + .../views/dashboard/console/ConsoleMEM.vue | 106 + .../dashboard/console/ConsoleMediaServer.vue | 88 + .../views/dashboard/console/ConsoleNet.vue | 135 + .../dashboard/console/ConsoleNodeLoad.vue | 65 + .../dashboard/console/ConsoleResource.vue | 89 + web/src/views/dashboard/index.vue | 134 + web/src/views/device/channel/edit.vue | 30 + web/src/views/device/channel/index.vue | 558 ++ web/src/views/device/channel/record.vue | 625 ++ web/src/views/device/index.vue | 32 + web/src/views/device/list.vue | 427 + web/src/views/dialog/GbChannelSelect.vue | 199 + web/src/views/dialog/GbDeviceSelect.vue | 163 + web/src/views/dialog/MediaServerEdit.vue | 317 + web/src/views/dialog/SyncChannelProgress.vue | 113 + .../dialog/UnusualGroupChannelSelect.vue | 255 + .../dialog/UnusualRegionChannelSelect.vue | 267 + web/src/views/dialog/addUser.vue | 143 + web/src/views/dialog/addUserApiKey.vue | 139 + web/src/views/dialog/catalogEdit.vue | 161 + .../views/dialog/changePasswordForAdmin.vue | 119 + web/src/views/dialog/changePushKey.vue | 100 + web/src/views/dialog/channelCode.vue | 330 + web/src/views/dialog/channelMapInfobox.vue | 65 + web/src/views/dialog/chooseCivilCode.vue | 75 + web/src/views/dialog/chooseGroup.vue | 81 + web/src/views/dialog/chooseTimeRange.vue | 74 + web/src/views/dialog/configInfo.vue | 58 + web/src/views/dialog/deviceEdit.vue | 128 + web/src/views/dialog/devicePlayer.vue | 900 ++ web/src/views/dialog/editRecordPlan.vue | 222 + web/src/views/dialog/groupEdit.vue | 138 + web/src/views/dialog/importChannel.vue | 107 + .../dialog/importChannelShowErrorData.vue | 68 + web/src/views/dialog/linkChannelRecord.vue | 304 + web/src/views/dialog/pushStreamEdit.vue | 133 + web/src/views/dialog/queryTrace.vue | 109 + web/src/views/dialog/recordDownload.vue | 177 + web/src/views/dialog/regionCode.vue | 266 + web/src/views/dialog/regionEdit.vue | 316 + web/src/views/dialog/remarkUserApiKey.vue | 94 + web/src/views/dialog/rtcPlayer.vue | 111 + web/src/views/dialog/shareChannel.vue | 45 + web/src/views/dialog/shareChannelAdd.vue | 417 + web/src/views/form/index.vue | 85 + web/src/views/live/index.vue | 362 + web/src/views/login/index.vue | 250 + web/src/views/mediaServer/index.vue | 161 + web/src/views/operations/historyLog.vue | 258 + web/src/views/operations/realLog.vue | 40 + web/src/views/operations/showLog.vue | 180 + web/src/views/operations/systemInfo.vue | 45 + web/src/views/platform/edit.vue | 281 + web/src/views/platform/index.vue | 325 + web/src/views/recordPlan/index.vue | 169 + web/src/views/streamProxy/edit.vue | 216 + web/src/views/streamProxy/index.vue | 286 + web/src/views/streamPush/edit.vue | 100 + web/src/views/streamPush/index.vue | 294 + web/src/views/user/apiKeyManager.vue | 324 + web/src/views/user/index.vue | 183 + web/tests/unit/.eslintrc.js | 5 + web/tests/unit/components/Breadcrumb.spec.js | 98 + web/tests/unit/components/Hamburger.spec.js | 18 + web/tests/unit/components/SvgIcon.spec.js | 22 + web/tests/unit/utils/formatTime.spec.js | 30 + web/tests/unit/utils/param2Obj.spec.js | 14 + web/tests/unit/utils/parseTime.spec.js | 35 + web/tests/unit/utils/validate.spec.js | 17 + web/vue.config.js | 141 + 268 files changed, 45419 insertions(+), 3 deletions(-) create mode 100644 install.sh create mode 100644 web/.editorconfig create mode 100644 web/.env.development create mode 100644 web/.env.production create mode 100644 web/.env.staging create mode 100644 web/.eslintignore create mode 100644 web/.eslintrc.js create mode 100644 web/.gitignore create mode 100644 web/.travis.yml create mode 100644 web/LICENSE create mode 100644 web/README-zh.md create mode 100644 web/README.md create mode 100644 web/babel.config.js create mode 100644 web/build/index.js create mode 100644 web/jest.config.js create mode 100644 web/jsconfig.json create mode 100644 web/mock/index.js create mode 100644 web/mock/mock-server.js create mode 100644 web/mock/table.js create mode 100644 web/mock/user.js create mode 100644 web/mock/utils.js create mode 100644 web/package.json create mode 100644 web/postcss.config.js create mode 100644 web/public/favicon.ico create mode 100644 web/public/index.html create mode 100644 web/public/libDecoder.wasm create mode 100644 web/public/static/images/abl-logo.jpg create mode 100644 web/public/static/images/arrow.png create mode 100644 web/public/static/images/bg13.png create mode 100644 web/public/static/images/bg14.png create mode 100644 web/public/static/images/bg17.png create mode 100644 web/public/static/images/bg18.png create mode 100644 web/public/static/images/bg19.png create mode 100644 web/public/static/images/gis/camera-offline.png create mode 100644 web/public/static/images/gis/camera.png create mode 100644 web/public/static/images/gis/camera1-offline.png create mode 100644 web/public/static/images/gis/camera1.png create mode 100644 web/public/static/images/gis/camera2-offline.png create mode 100644 web/public/static/images/gis/camera2.png create mode 100644 web/public/static/images/gis/camera3-offline.png create mode 100644 web/public/static/images/gis/camera3.png create mode 100644 web/public/static/images/zlm-logo.png create mode 100644 web/public/static/js/ZLMRTCClient.js create mode 100644 web/public/static/js/config.js create mode 100644 web/public/static/js/h265web/h265webjs-v20221106.js create mode 100644 web/public/static/js/h265web/index.d.ts create mode 100644 web/public/static/js/h265web/index.js create mode 100644 web/public/static/js/h265web/missile-v20221120.wasm create mode 100644 web/public/static/js/h265web/missile.js create mode 100644 web/public/static/js/jessibuca/decoder.js create mode 100755 web/public/static/js/jessibuca/decoder.wasm create mode 100644 web/public/static/js/jessibuca/jessibuca.d.ts create mode 100644 web/public/static/js/jessibuca/jessibuca.js create mode 100644 web/src/App.vue create mode 100644 web/src/api/cloudRecord.js create mode 100644 web/src/api/commonChannel.js create mode 100644 web/src/api/device.js create mode 100644 web/src/api/frontEnd.js create mode 100644 web/src/api/gbRecord.js create mode 100644 web/src/api/group.js create mode 100644 web/src/api/log.js create mode 100644 web/src/api/platform.js create mode 100644 web/src/api/play.js create mode 100644 web/src/api/playback.js create mode 100644 web/src/api/recordPlan.js create mode 100644 web/src/api/region.js create mode 100644 web/src/api/role.js create mode 100644 web/src/api/server.js create mode 100644 web/src/api/streamProxy.js create mode 100644 web/src/api/streamPush.js create mode 100644 web/src/api/table.js create mode 100644 web/src/api/user.js create mode 100644 web/src/api/userApiKey.js create mode 100644 web/src/assets/404_images/404.png create mode 100644 web/src/assets/404_images/404_cloud.png create mode 100644 web/src/assets/abl-logo.jpg create mode 100644 web/src/assets/bg.jpg create mode 100755 web/src/assets/icons.png create mode 100755 web/src/assets/loading.png create mode 100755 web/src/assets/login-bg.jpg create mode 100755 web/src/assets/login-cloud.png create mode 100755 web/src/assets/logo.png create mode 100755 web/src/assets/play.png create mode 100755 web/src/assets/zlm-logo.png create mode 100644 web/src/components/Breadcrumb/index.vue create mode 100644 web/src/components/Hamburger/index.vue create mode 100644 web/src/components/SvgIcon/index.vue create mode 100644 web/src/directive/el-drag-dialog/drag.js create mode 100644 web/src/directive/el-drag-dialog/index.js create mode 100644 web/src/icons/index.js create mode 100644 web/src/icons/svg/channelManger.svg create mode 100644 web/src/icons/svg/cloudRecord.svg create mode 100644 web/src/icons/svg/dashboard.svg create mode 100644 web/src/icons/svg/device.svg create mode 100644 web/src/icons/svg/example.svg create mode 100644 web/src/icons/svg/eye-open.svg create mode 100644 web/src/icons/svg/eye.svg create mode 100644 web/src/icons/svg/form.svg create mode 100644 web/src/icons/svg/group.svg create mode 100644 web/src/icons/svg/historyLog.svg create mode 100644 web/src/icons/svg/link.svg create mode 100644 web/src/icons/svg/live.svg create mode 100644 web/src/icons/svg/mediaServerList.svg create mode 100644 web/src/icons/svg/nested.svg create mode 100644 web/src/icons/svg/operations.svg create mode 100644 web/src/icons/svg/password.svg create mode 100644 web/src/icons/svg/platform.svg create mode 100644 web/src/icons/svg/realLog.svg create mode 100644 web/src/icons/svg/recordPlan.svg create mode 100644 web/src/icons/svg/region.svg create mode 100644 web/src/icons/svg/setting.svg create mode 100644 web/src/icons/svg/streamProxy.svg create mode 100644 web/src/icons/svg/streamPush.svg create mode 100644 web/src/icons/svg/systemInfo.svg create mode 100644 web/src/icons/svg/table.svg create mode 100644 web/src/icons/svg/tree.svg create mode 100644 web/src/icons/svg/user.svg create mode 100644 web/src/icons/svgo.yml create mode 100644 web/src/layout/components/AppMain.vue create mode 100644 web/src/layout/components/Navbar.vue create mode 100644 web/src/layout/components/Sidebar/FixiOSBug.js create mode 100644 web/src/layout/components/Sidebar/Item.vue create mode 100644 web/src/layout/components/Sidebar/Link.vue create mode 100644 web/src/layout/components/Sidebar/Logo.vue create mode 100644 web/src/layout/components/Sidebar/SidebarItem.vue create mode 100644 web/src/layout/components/Sidebar/index.vue create mode 100644 web/src/layout/components/TagsView/ScrollPane.vue create mode 100644 web/src/layout/components/TagsView/index.vue create mode 100755 web/src/layout/components/dialog/changePassword.vue create mode 100644 web/src/layout/components/index.js create mode 100644 web/src/layout/index.vue create mode 100644 web/src/layout/mixin/ResizeHandler.js create mode 100644 web/src/main.js create mode 100644 web/src/permission.js create mode 100644 web/src/router/index.js create mode 100644 web/src/settings.js create mode 100644 web/src/store/getters.js create mode 100644 web/src/store/index.js create mode 100644 web/src/store/modules/app.js create mode 100644 web/src/store/modules/cloudRecord.js create mode 100644 web/src/store/modules/commonChanel.js create mode 100644 web/src/store/modules/device.js create mode 100644 web/src/store/modules/frontEnd.js create mode 100644 web/src/store/modules/gbRecord.js create mode 100644 web/src/store/modules/group.js create mode 100644 web/src/store/modules/log.js create mode 100644 web/src/store/modules/platform.js create mode 100644 web/src/store/modules/play.js create mode 100644 web/src/store/modules/playback.js create mode 100644 web/src/store/modules/recordPlan.js create mode 100644 web/src/store/modules/region.js create mode 100644 web/src/store/modules/role.js create mode 100644 web/src/store/modules/server.js create mode 100644 web/src/store/modules/settings.js create mode 100644 web/src/store/modules/streamProxy.js create mode 100644 web/src/store/modules/streamPush.js create mode 100644 web/src/store/modules/tagsView.js create mode 100644 web/src/store/modules/user.js create mode 100644 web/src/store/modules/userApiKeys.js create mode 100644 web/src/styles/element-ui.scss create mode 100644 web/src/styles/iconfont.css create mode 100644 web/src/styles/iconfont.woff2 create mode 100644 web/src/styles/index.scss create mode 100644 web/src/styles/mixin.scss create mode 100644 web/src/styles/sidebar.scss create mode 100644 web/src/styles/transition.scss create mode 100644 web/src/styles/variables.scss create mode 100644 web/src/utils/auth.js create mode 100644 web/src/utils/get-page-title.js create mode 100644 web/src/utils/index.js create mode 100644 web/src/utils/request.js create mode 100644 web/src/utils/validate.js create mode 100644 web/src/views/404.vue create mode 100755 web/src/views/channel/group/index.vue create mode 100755 web/src/views/channel/region/index.vue create mode 100755 web/src/views/cloudRecord/detail.vue create mode 100755 web/src/views/cloudRecord/index.vue create mode 100644 web/src/views/common/CommonChannelEdit.vue create mode 100755 web/src/views/common/DeviceTree.vue create mode 100755 web/src/views/common/GroupTree.vue create mode 100755 web/src/views/common/MapComponent.vue create mode 100755 web/src/views/common/RegionTree.vue create mode 100644 web/src/views/common/VideoTimeLine/WindowListItem.vue create mode 100644 web/src/views/common/VideoTimeLine/constant.js create mode 100644 web/src/views/common/VideoTimeLine/index.vue create mode 100644 web/src/views/common/h265web.vue create mode 100755 web/src/views/common/jessibuca.vue create mode 100644 web/src/views/common/mediaInfo.vue create mode 100644 web/src/views/common/ptzCruising.vue create mode 100644 web/src/views/common/ptzPreset.vue create mode 100644 web/src/views/common/ptzScan.vue create mode 100644 web/src/views/common/ptzSwitch.vue create mode 100644 web/src/views/common/ptzWiper.vue create mode 100644 web/src/views/common/weekTimePicker.vue create mode 100755 web/src/views/dashboard/console/ConsoleCPU.vue create mode 100755 web/src/views/dashboard/console/ConsoleDisk.vue create mode 100755 web/src/views/dashboard/console/ConsoleMEM.vue create mode 100755 web/src/views/dashboard/console/ConsoleMediaServer.vue create mode 100755 web/src/views/dashboard/console/ConsoleNet.vue create mode 100755 web/src/views/dashboard/console/ConsoleNodeLoad.vue create mode 100755 web/src/views/dashboard/console/ConsoleResource.vue create mode 100755 web/src/views/dashboard/index.vue create mode 100644 web/src/views/device/channel/edit.vue create mode 100755 web/src/views/device/channel/index.vue create mode 100755 web/src/views/device/channel/record.vue create mode 100755 web/src/views/device/index.vue create mode 100755 web/src/views/device/list.vue create mode 100644 web/src/views/dialog/GbChannelSelect.vue create mode 100644 web/src/views/dialog/GbDeviceSelect.vue create mode 100755 web/src/views/dialog/MediaServerEdit.vue create mode 100755 web/src/views/dialog/SyncChannelProgress.vue create mode 100644 web/src/views/dialog/UnusualGroupChannelSelect.vue create mode 100644 web/src/views/dialog/UnusualRegionChannelSelect.vue create mode 100644 web/src/views/dialog/addUser.vue create mode 100644 web/src/views/dialog/addUserApiKey.vue create mode 100755 web/src/views/dialog/catalogEdit.vue create mode 100755 web/src/views/dialog/changePasswordForAdmin.vue create mode 100755 web/src/views/dialog/changePushKey.vue create mode 100644 web/src/views/dialog/channelCode.vue create mode 100755 web/src/views/dialog/channelMapInfobox.vue create mode 100644 web/src/views/dialog/chooseCivilCode.vue create mode 100644 web/src/views/dialog/chooseGroup.vue create mode 100644 web/src/views/dialog/chooseTimeRange.vue create mode 100755 web/src/views/dialog/configInfo.vue create mode 100755 web/src/views/dialog/deviceEdit.vue create mode 100755 web/src/views/dialog/devicePlayer.vue create mode 100644 web/src/views/dialog/editRecordPlan.vue create mode 100755 web/src/views/dialog/groupEdit.vue create mode 100755 web/src/views/dialog/importChannel.vue create mode 100755 web/src/views/dialog/importChannelShowErrorData.vue create mode 100755 web/src/views/dialog/linkChannelRecord.vue create mode 100755 web/src/views/dialog/pushStreamEdit.vue create mode 100755 web/src/views/dialog/queryTrace.vue create mode 100755 web/src/views/dialog/recordDownload.vue create mode 100644 web/src/views/dialog/regionCode.vue create mode 100644 web/src/views/dialog/regionEdit.vue create mode 100644 web/src/views/dialog/remarkUserApiKey.vue create mode 100755 web/src/views/dialog/rtcPlayer.vue create mode 100755 web/src/views/dialog/shareChannel.vue create mode 100755 web/src/views/dialog/shareChannelAdd.vue create mode 100644 web/src/views/form/index.vue create mode 100755 web/src/views/live/index.vue create mode 100644 web/src/views/login/index.vue create mode 100755 web/src/views/mediaServer/index.vue create mode 100755 web/src/views/operations/historyLog.vue create mode 100755 web/src/views/operations/realLog.vue create mode 100755 web/src/views/operations/showLog.vue create mode 100755 web/src/views/operations/systemInfo.vue create mode 100644 web/src/views/platform/edit.vue create mode 100755 web/src/views/platform/index.vue create mode 100755 web/src/views/recordPlan/index.vue create mode 100644 web/src/views/streamProxy/edit.vue create mode 100755 web/src/views/streamProxy/index.vue create mode 100644 web/src/views/streamPush/edit.vue create mode 100755 web/src/views/streamPush/index.vue create mode 100644 web/src/views/user/apiKeyManager.vue create mode 100755 web/src/views/user/index.vue create mode 100644 web/tests/unit/.eslintrc.js create mode 100644 web/tests/unit/components/Breadcrumb.spec.js create mode 100644 web/tests/unit/components/Hamburger.spec.js create mode 100644 web/tests/unit/components/SvgIcon.spec.js create mode 100644 web/tests/unit/utils/formatTime.spec.js create mode 100644 web/tests/unit/utils/param2Obj.spec.js create mode 100644 web/tests/unit/utils/parseTime.spec.js create mode 100644 web/tests/unit/utils/validate.spec.js create mode 100644 web/vue.config.js diff --git a/install.sh b/install.sh new file mode 100644 index 000000000..3d76cf1d7 --- /dev/null +++ b/install.sh @@ -0,0 +1,57 @@ +#! /bin/sh + +WORD_DIR=$(cd $(dirname $0); pwd) +SERVICE_NAME="wvp" + +# 检查是否为 root 用户 +if [ "$(id -u)" -ne 0 ]; then + echo "提示: 建议使用 root 用户执行此脚本,否则可能权限不足!" + read -p "继续?(y/n) " -n 1 -r + if [[ ! $REPLY =~ ^[Yy]$ ]]; then + exit 1 + fi + echo +fi + +# 当前目录直接搜索(不含子目录) +jar_files=(*.jar) + +if [ ${#jar_files[@]} -eq 0 ]; then + echo "当前目录无 JAR 文件!" + exit 1 +fi + +# 遍历结果 +for jar in "${jar_files[@]}"; do + echo "找到 JAR 文件: $jar" +done + +# 写文件 +# 生成 Systemd 服务文件内容 +SERVICE_FILE="/etc/systemd/system/${SERVICE_NAME}.service" +cat << EOF | sudo tee "$SERVICE_FILE" > /dev/null +[Unit] +Description=${SERVICE_NAME} +After=syslog.target + +[Service] +User=$USER +WorkingDirectory=${WORD_DIR} +ExecStart=java -jar ${jar_files} +SuccessExitStatus=143 +Restart=on-failure +RestartSec=10s +Environment=SPRING_PROFILES_ACTIVE=prod + +[Install] +WantedBy=multi-user.target +EOF + +# 重载 Systemd 并启动服务 +sudo systemctl daemon-reload +sudo systemctl enable "$SERVICE_NAME" +sudo systemctl start "$SERVICE_NAME" + +# 验证服务状态 +echo "服务已安装!执行以下命令查看状态:" +echo "sudo systemctl status $SERVICE_NAME" diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/MediaController.java b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/MediaController.java index 2de6bdd4a..af2062b59 100755 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/controller/MediaController.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/controller/MediaController.java @@ -17,7 +17,6 @@ import io.swagger.v3.oas.annotations.security.SecurityRequirement; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -89,7 +88,7 @@ public class MediaController { } if (streamInfo != null){ - return new StreamContent(streamInfo); + return new StreamContent(streamInfo); }else { //获取流失败,重启拉流后重试一次 streamProxyService.stopByAppAndStream(app,stream); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 80de5efb4..2164909c6 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -2,4 +2,4 @@ spring: application: name: wvp profiles: - active: dev \ No newline at end of file + active: 273 diff --git a/web/.editorconfig b/web/.editorconfig new file mode 100644 index 000000000..ea6e20f5b --- /dev/null +++ b/web/.editorconfig @@ -0,0 +1,14 @@ +# http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +insert_final_newline = false +trim_trailing_whitespace = false diff --git a/web/.env.development b/web/.env.development new file mode 100644 index 000000000..de583d094 --- /dev/null +++ b/web/.env.development @@ -0,0 +1,5 @@ +# just a flag +ENV = 'development' + +# base api +VUE_APP_BASE_API = '/dev-api' diff --git a/web/.env.production b/web/.env.production new file mode 100644 index 000000000..8994f6943 --- /dev/null +++ b/web/.env.production @@ -0,0 +1,6 @@ +# just a flag +ENV = 'production' + +# base api +VUE_APP_BASE_API = '' + diff --git a/web/.env.staging b/web/.env.staging new file mode 100644 index 000000000..a8793a098 --- /dev/null +++ b/web/.env.staging @@ -0,0 +1,8 @@ +NODE_ENV = production + +# just a flag +ENV = 'staging' + +# base api +VUE_APP_BASE_API = '/stage-api' + diff --git a/web/.eslintignore b/web/.eslintignore new file mode 100644 index 000000000..e6529fc09 --- /dev/null +++ b/web/.eslintignore @@ -0,0 +1,4 @@ +build/*.js +src/assets +public +dist diff --git a/web/.eslintrc.js b/web/.eslintrc.js new file mode 100644 index 000000000..c97750547 --- /dev/null +++ b/web/.eslintrc.js @@ -0,0 +1,198 @@ +module.exports = { + root: true, + parserOptions: { + parser: 'babel-eslint', + sourceType: 'module' + }, + env: { + browser: true, + node: true, + es6: true, + }, + extends: ['plugin:vue/recommended', 'eslint:recommended'], + + // add your custom rules here + //it is base on https://github.com/vuejs/eslint-config-vue + rules: { + "vue/max-attributes-per-line": [2, { + "singleline": 10, + "multiline": { + "max": 1, + "allowFirstLine": false + } + }], + "vue/singleline-html-element-content-newline": "off", + "vue/multiline-html-element-content-newline":"off", + "vue/name-property-casing": ["error", "PascalCase"], + "vue/no-v-html": "off", + 'accessor-pairs': 2, + 'arrow-spacing': [2, { + 'before': true, + 'after': true + }], + 'block-spacing': [2, 'always'], + 'brace-style': [2, '1tbs', { + 'allowSingleLine': true + }], + 'camelcase': [0, { + 'properties': 'always' + }], + 'comma-dangle': [2, 'never'], + 'comma-spacing': [2, { + 'before': false, + 'after': true + }], + 'comma-style': [2, 'last'], + 'constructor-super': 2, + 'curly': [2, 'multi-line'], + 'dot-location': [2, 'property'], + 'eol-last': 2, + 'eqeqeq': ["error", "always", {"null": "ignore"}], + 'generator-star-spacing': [2, { + 'before': true, + 'after': true + }], + 'handle-callback-err': [2, '^(err|error)$'], + 'indent': [2, 2, { + 'SwitchCase': 1 + }], + 'jsx-quotes': [2, 'prefer-single'], + 'key-spacing': [2, { + 'beforeColon': false, + 'afterColon': true + }], + 'keyword-spacing': [2, { + 'before': true, + 'after': true + }], + 'new-cap': [2, { + 'newIsCap': true, + 'capIsNew': false + }], + 'new-parens': 2, + 'no-array-constructor': 2, + 'no-caller': 2, + 'no-console': 'off', + 'no-class-assign': 2, + 'no-cond-assign': 2, + 'no-const-assign': 2, + 'no-control-regex': 0, + 'no-delete-var': 2, + 'no-dupe-args': 2, + 'no-dupe-class-members': 2, + 'no-dupe-keys': 2, + 'no-duplicate-case': 2, + 'no-empty-character-class': 2, + 'no-empty-pattern': 2, + 'no-eval': 2, + 'no-ex-assign': 2, + 'no-extend-native': 2, + 'no-extra-bind': 2, + 'no-extra-boolean-cast': 2, + 'no-extra-parens': [2, 'functions'], + 'no-fallthrough': 2, + 'no-floating-decimal': 2, + 'no-func-assign': 2, + 'no-implied-eval': 2, + 'no-inner-declarations': [2, 'functions'], + 'no-invalid-regexp': 2, + 'no-irregular-whitespace': 2, + 'no-iterator': 2, + 'no-label-var': 2, + 'no-labels': [2, { + 'allowLoop': false, + 'allowSwitch': false + }], + 'no-lone-blocks': 2, + 'no-mixed-spaces-and-tabs': 2, + 'no-multi-spaces': 2, + 'no-multi-str': 2, + 'no-multiple-empty-lines': [2, { + 'max': 1 + }], + 'no-native-reassign': 2, + 'no-negated-in-lhs': 2, + 'no-new-object': 2, + 'no-new-require': 2, + 'no-new-symbol': 2, + 'no-new-wrappers': 2, + 'no-obj-calls': 2, + 'no-octal': 2, + 'no-octal-escape': 2, + 'no-path-concat': 2, + 'no-proto': 2, + 'no-redeclare': 2, + 'no-regex-spaces': 2, + 'no-return-assign': [2, 'except-parens'], + 'no-self-assign': 2, + 'no-self-compare': 2, + 'no-sequences': 2, + 'no-shadow-restricted-names': 2, + 'no-spaced-func': 2, + 'no-sparse-arrays': 2, + 'no-this-before-super': 2, + 'no-throw-literal': 2, + 'no-trailing-spaces': 2, + 'no-undef': 2, + 'no-undef-init': 2, + 'no-unexpected-multiline': 2, + 'no-unmodified-loop-condition': 2, + 'no-unneeded-ternary': [2, { + 'defaultAssignment': false + }], + 'no-unreachable': 2, + 'no-unsafe-finally': 2, + 'no-unused-vars': [2, { + 'vars': 'all', + 'args': 'none' + }], + 'no-useless-call': 2, + 'no-useless-computed-key': 2, + 'no-useless-constructor': 2, + 'no-useless-escape': 0, + 'no-whitespace-before-property': 2, + 'no-with': 2, + 'one-var': [2, { + 'initialized': 'never' + }], + 'operator-linebreak': [2, 'after', { + 'overrides': { + '?': 'before', + ':': 'before' + } + }], + 'padded-blocks': [2, 'never'], + 'quotes': [2, 'single', { + 'avoidEscape': true, + 'allowTemplateLiterals': true + }], + 'semi': [2, 'never'], + 'semi-spacing': [2, { + 'before': false, + 'after': true + }], + 'space-before-blocks': [2, 'always'], + 'space-before-function-paren': [2, 'never'], + 'space-in-parens': [2, 'never'], + 'space-infix-ops': 2, + 'space-unary-ops': [2, { + 'words': true, + 'nonwords': false + }], + 'spaced-comment': [2, 'always', { + 'markers': ['global', 'globals', 'eslint', 'eslint-disable', '*package', '!', ','] + }], + 'template-curly-spacing': [2, 'never'], + 'use-isnan': 2, + 'valid-typeof': 2, + 'wrap-iife': [2, 'any'], + 'yield-star-spacing': [2, 'both'], + 'yoda': [2, 'never'], + 'prefer-const': 2, + 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0, + 'object-curly-spacing': [2, 'always', { + objectsInObjects: false + }], + 'array-bracket-spacing': [2, 'never'] + } +} diff --git a/web/.gitignore b/web/.gitignore new file mode 100644 index 000000000..9ad28d23d --- /dev/null +++ b/web/.gitignore @@ -0,0 +1,16 @@ +.DS_Store +node_modules/ +dist/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +package-lock.json +tests/**/coverage/ + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln diff --git a/web/.travis.yml b/web/.travis.yml new file mode 100644 index 000000000..f4be7a085 --- /dev/null +++ b/web/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: 10 +script: npm run test +notifications: + email: false diff --git a/web/LICENSE b/web/LICENSE new file mode 100644 index 000000000..61515750d --- /dev/null +++ b/web/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2017-present PanJiaChen + +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. diff --git a/web/README-zh.md b/web/README-zh.md new file mode 100644 index 000000000..1beec9b08 --- /dev/null +++ b/web/README-zh.md @@ -0,0 +1,111 @@ +# vue-admin-template + +> 这是一个极简的 vue admin 管理后台。它只包含了 Element UI & axios & iconfont & permission control & lint,这些搭建后台必要的东西。 + +[线上地址](http://panjiachen.github.io/vue-admin-template) + +[国内访问](https://panjiachen.gitee.io/vue-admin-template) + +目前版本为 `v4.0+` 基于 `vue-cli` 进行构建,若你想使用旧版本,可以切换分支到[tag/3.11.0](https://github.com/PanJiaChen/vue-admin-template/tree/tag/3.11.0),它不依赖 `vue-cli`。 + +
+ SPONSORED BY +
+
+
+
+
+
+ SPONSORED BY +
+
+
+
+
+
}cc2Q6r8Rd(4EVA3frCqknhAv40%#+cEzxS(H{zq>UdvVa$Jw z9&yy@k;h7MV-Xgzjv0T<(IY^gWHzSdqBMe@&{Ylx1RgmGOlcRXRB*lO|4Y=<7y-s{ zRV7N-MvM?IjfD|Ue?NXq`)Dacx%!C8f~UtEF|vL1h|zyIV)U`?V~#mmuslV)6hRF& zKW6+N6=|A5fN5?a`B>?hocdhlnM#W#S+J!o`0GbMEiH0$-|r5mKg%=^lVubC1*Re^ z2r2O&Kom)8{%a{CA#OkEFr`Ilk%w5#^i*0*YZxpv{(?hy3;*QieMibtUa^{gY+ABB zOqPEB^ZaOOsHvF4|IxJekR_!&%-Y|~{H-*wxmg~DKPl7vBWVEWlg<23%)jYh-uv+3 zEy`iqKmBM(v-J-^B56a1T9z!080yQiJiMi4STjIlA{FVd=AZ2^Tlp4c=+I$`WM;l+ znx-_A{!Fvl!Vm-%{SQdyL`zF^v!V=B2wmb&@P~ivWhlrh56wvZq~^Z41HWr!c6Fq( zGHlpza7 dx_`x`tn5-y6%NeTUk7VgbdHLYLG!OX4=CUPQ zmLnf3Wm-V2CJohEGV;*BQ!Gn4%(9xB{|am~2S}3n|4G9^eM^gZDB7qW8qZWfPjj<` zQYD9oM_(xqYr%ib!&;PKEf&JfrffPbphq!>W-^wBvNB+dIn)~3Z03U&Mf%wx^3XsY z)G{PEpxGQcIG_LF{-D0Egr@r&$!d{@;@`e $Fw9(YRTHpaOKdUl61sA zMTo#(4;VJAuS~3vEz>fUVWy&de=iM0TFre;Q!|x4GT-^@zJEof_m#jbR1Jb<4L@x7 zVa@zw*TAgup)Iy#qXA72j+Qo?o0^)3S{XTGDH&^M1|mSMApS$Wn@K3Q^VbrlcbPRx zM4n6?k2JI%?m3h|nh2uu_-htogqDGbHFuP;=H{UZiE9osw}_{J=U>Lukh7VH?oEuM zA=mIQ=b_?BQ78-;1d)m|oJwdRH57l%RumcrwSa)*56LZu9(pJli$f7R3^l|54Uyf) zS)DUNNJZq(2 HnN*t{s~Fl`_<^53>}l z+%hcF_m{&>S(5wW&+6MeN;ZcNM-^LS=qyyL`4{ @ z4zgG=x=aFT6pZ3vn|5Jt@(&v$@!G67__J*^XA6ZKj!q~-ls9L~xx?^RmRR4KVQ)+& zlPQC6`kz~FSkx}Pc?x}qe+jqv8yW=;J8W1zs7dv3BDz_`5=(OQgFnPDrH36RId-=G zU#|X=qv$XRwhRA>Y!sIGUBre7;16<(-(iWD2!)fWqaIc-QK^^R(q)F0E;FcERD2lf z&UK;s(Ek!wjDIMC{;Z*cw7<7xO)3o?TBP0$512t{&S4$@m*w9M8^*n>0F8cyLWghE z^z#2gAJQ!MB{4S9QCOMgq3Bm2+9rv1%W&B`4FAI>L)`b=6B?ly1{zV;^XAa+Hlv&9 zi` AFw?&+|y}AW1I%NG%Y9s6!7UDa>XMI}}9`qo~IP*P0dB20*(lG4!Ek9lALNKMe93 zf-|%LSDHicI&>Y_k)yH?1Iie n5hLz;fT5W@30Ath)b1 z)zYspf0P?B0wc8Fji5o;h$GsM89zaKx03reMEzv+5yy-gJ$}TGj~abMoAge_OGf_e z=rQfmIq7^d?kA(iQ0$GFN;3AB$BsVw$48Ak`smSPrI*Zp$)ukheeA^c1IJGKm-g|a zNB&Ma&Fr5{J!mwg2`YXvvVEj 7CMp ziKE8E>33=k=>m)~95{X?#!hcnx=3dXBK_n_pCp+-rr~bHfXmCN-;Eq|wDeF(`yG$a zq>-s3$B!N@_47uI7(IUc(Z|pbZzK=brdisNM~ H3VFjF7I&xY0YK0itW`s6~`? zO~#5cp)l#{`YRQDRUL&OWsI~clTQFdh_CEKA)v3QQ^@(Gm6=LsSdnyDrr1@Iv?Akm zjF&FWlsd)rFwdZEcm#&6K0U!(5}rj2VUhr3>m*wvK6)&Pl$G zk UK~vnlgdW^QJVyv=;we9e5-TyMT&zHGi=K5sr}K5IT> zK5af_K50H-K5m|zT5H~B-fFHkZ!w=!?lbN+?l(5c2Y(>{>}K;O^G5Rq^E&fd^BVJN z^D1+dd8K)UxzfDcTwz{nKBGLV++*Br%t|dcmzgJ~PE1{5UTn@vJ*V7d+-a;e-jfe} zUp{E5xx`##E;KJPFElSO&o|FA&o$36&o<98&os|47ciDPj5WpysrlwSb4F@L>U49i zc>=JkHf}L)HQteb@~-^TQ_WM%Ip)dcZ1W^@mU*H%(>%ePVNN%XH;*%?ncEDaX+lQ6BQP{Npc;FN`h5=f-Eor^YA7$Hqs-hsI{( z17nl%zVV*%E@QdQxYpRFzGJ*?Y*n|a8;!T{_K>m8c+_~z*ew72L-~*m#+$|)#_Psw z#;e9F#>>V_#*4-a#`DH=# 2+f>Qly(##icB>J!G}csn |v7Rw$P$%avuyB}yZ)k1B%D6OEb12_S7okEBgEjt61K8PgJkZPT~v5n l@?`^i6u5OYiIN#l*a;zY`Mk zw!Tq+OW&ZsnIz_oUJ~=V{+j+Oh*{qwF|X(^gP51}7ZSuguRj+P^Q`_%NX*mvQ~Hzo z6Z+#xVjk;6%sTy1{Sp0P{UQB9{Q>=c{XYF3{ce4&ewTiyeuutBzg@pgzg53QzgfRY zzfr$Izh1vizgE9Szgl0VU#VZAf2yw3FV`>ASLm1O%k@vxi}j`Y5`D4$u{uXxq%YJj z(l5}@*U!_>)z8t-*3Z(<)X&iWalSrJKV6@zpQfLxpQ6vvPu6GaC+V~FnfeL(41KzO zygp6erft=}(Z1Hc(!SKb(6(rwYoBVLXdi1IX&-8vwGXsS+WXpj+B@3Y+D7dyZG-lv z_J;Pl_L}ypwqAQhds%x)dr^BqdtQ4^dscf!ds=%+ds2Hsdt7@=Tc FSo3)#?8?_s>>$GdNYqYDitF%?xmD&~B zO6_uOg?6d7TwA7HqFt;l)s|?BwME)O?IP_$?E>w5?L6&V?HuiF?JVsKZGkplo2Q+w z&DBoR?kcV+-dZJwJh3>lctUYTaeDFi; SnD8Dd&QU1dG z1^M&x=jPAJzm!{^ekC_8zb*HA?zP;jx%Igha?j_U%RQTWCiisisoayf$8(S6*5w|} zJ(8QFJe+$dce3(eZnkoga)0i=+`YMba(Cy}=I+YPQtrsD$=#m2Eq7~fb?%nj&AFR$ zH|DO-U6(s9vmkdyZhB@#?$X@y+_Kyyxr=j4b4zlIatm`8 IPVQsx zS@}b6iTZiwv&@#v3z-))pJral%#&xx&t_K38@)HZH@w%pSG~8q_1-Jq%ic@gi{1;~ z SVFLPJ8m%7W{W$wl9Qg?~F*j?l dn*}sm0kv*@a>FqU?p)3$o{D z&&!^hJtup1_N?rg*)y{9v-7g2XXj>5%buD&B|9g3a&~rhR`$f~% jwp7XBrj Ac~* z?!4x_>a2HOab9v>bY5_tcb;>eb)IpacAj#cbRKsebJjVJI*&LHI}bSzIuAJaJNGzu zJ8PZ0oI9O6oHfqv&TY=E&MnT(&P~pZ&JE7>&UMbU&Na@}&MN0h=L%<~bGdVwv% vUQp>w@@0scSVIS;?*I_EfNJ7+m(I%hZwocYc?=X7VT zbDDFibBZ&^IoX-*oaD@MPIP8ECpa^l>CW-aan3Yno4wWk#{Sy=%Kp;+!ro$kZhvNf zYJXyXY=2~bXm7SZus7N7+wa-$*l*h#?Kkb$?N{wr?3e5p?dR-g?Pu(#?WgP~?Z@rM z>__cK><#u?_QUo=_Jj64_TBbc`!4%V`wn}JeVcu&z1qITzS+LXzR|wHzTUphzQ(@V zzRF%@Uuj=que2|>FSA$J%kBH@W%ecZ#r9HriM`lfWG}R5*wgLf?c?le_BLy)^|ket z^`-TNwZ;0}`po*&`o#L!`pEjw+H8GbZL;3C-m~7d-mx}XZ&@3xH?23U)9tzT$@Xmf zB>P1BH2YNh6nl<+fj!SY!#>A8%Rb*e+g@N_WS?uFX`g4mZoOu`YOS|kv1Z!KtV^tm zt) #h<~SO=U1*M-&&fZ zomW{|UR^p_JGXLK`Igdb?VQSr^3A1_w6iOhmTxM}($1 yK{`Y64%e0q6t>BICl<+ $x0Gj>&ns=Ld|p1Od~WHj%4g+S<#S3KDxa25ET3I^v+_y#gz{OX zH!2^OXOzz@y 9xv-<>Si>O0QNnmyavYFRib9P@YzvS9+zgsl2Updg 50ng<&R4zlpe3VR{p3oqx4wi)$)g>>7{j* z_2tc_<4ccLUMYW2I m6G(zMdUm6yuzm$nv9QpLZADleAbD}7UZu<}Cr-O|^^ z2P)5(-zj}nyub2X`R&q|#rrDHmN%BZDBfFnru 6PLYl{MvcrI(8 }jPoLIOoe^+5<;okh6g%b+* {B8M%3v&yPx}mA^HAL*dK(>iqSEFY>qKUsmbgb%oFKH|MV{ ze3rj4e@)@j{0;fL3$qIM=dUh&lD|HGRpI0Ob@^3=kMh^%*A!+H?#^FX_%MG>{))op z{MGrDg%9#q j_oZ@a`pw)mxmCF< zb64ap&rQp1^R{|dc$a$1y=C4d-o@ThZ;7|qTjVYDF7ht)&iBsqK1-eJo#UPDo#mbB zoq@Ln-h6MKce*#%JI(tvb*guYH^)2KJIR}cxA)x-QXix?xbL~|xEtL!-FMx$-M8E~ z+}GXL+*jT8?kn!g?n~~A?)~=5*0a`Q)&tgy*7Md=))UsF*2C6));-os)-%>R>wfD6 z>pAO5>v8K5>mlo2>uzhUb*puQwaU8Fy4||Py2-lMy4t$Jy4K^a-Zft z$$gyrDEDFRgWRUvNx50M*|`&QGjlU?({sn?j>|pl&9hFnW?3g%Gptjs)2!*%@zy=5 zMe0+TCo+#`9?MX8VR~VDUFQDGgPBJ%i_`})4`m+CWY%3VU4EuA4Qm2Zcb5XMt(F=f zDT96Kr>Vhy%2x*|wk=z}G*FSM=`g}i|J0HE^gzW9j=%6e`Cz=rfk6+%c{P<%C0}g? zj4!uVWh>aY$i+)d1x`fyik||oujX1L%TEPfD>jBqPs!?3UkRqIk$xFv^D_N>$wleD z(ppuCDqo%usN+BzUX(ySm~vJXrclJkuT@1w7GK^=l71i&fkX+xwAK_~{iQ=;b(|w% z7sg;;4JMDPrGhom&p oJw<5mLCW4Dw9g=A9}(Jb zkg}f${cw=-LsV>V8&_;_8!DFm1=R@2Db%omdO1i52Be4qDOA)Vwy8ntXLTlm53RM7 zFD0VD-Udc8OXVL()QVuP@&ic`A@v863ThfkiKtP5umMYl<~WF{maMWYPlc>W5^5v` z(jaO$ub=fX7E-Xq5DldW*-~0-YB06c2OW}+JoG?wQtPR~lw`b&h(9GGKy9FljFXe` zD&kFwN4dV#2HB{AQ&gjE^0?r*<7XISYch!eGWw}D78r064D&fUC7=O7a={M>O7Mp; zSqa+XjD5Ly%GgI_EQ*IG9+0Kr*cfbV96BlvjfzlF^NkDojIX88_<>J&<(0Mc5Pznh zo&kMTeQFMHUiQ=bs(r-66Awc?01@~?G7hKu>;|!i1W8tFY!T$pA`o*(jkyuf{v0OR zm%Iv?f_I}Pp;?FlQXr#INn`99fINnzA3N7fMcS=i#ln+y|7Azkr=oQwZe8#Ue3!sk zDnJhYFs>%GR?|p_)IekLfC+#CtG>!4v_Tkdy!&3J4T3F0B495_6jqDagCOAw+VK~7 z0>prbLs}-GwrYE@4tZJ+>PNPXh?Nga4Gxwgj(>nZnBptHABUE=RTwL3H5;6R9WZPK z`ZG}JQ`JBl69aH6i%}Uhg~|h0?0%$?A)rElvM@SDFq~?TLZwu&B7O^?0LX-fQ>wb3 z0uz#1iECB1MjnA$z7AEvPAgvnS0YmSqjpMr@a(;)T@B_|LcIj}V4x!hms1t#r(+eh zzzd4LMs21Z*c3{d{8I;&m3@t6maM!2bdZ72;31lMQ6%AzMFQJDB#@aw$3V4E#|0|H zB3OlTeKx9TwB{6W7c3*08BZZFqm@%(`XR$GA`!fdc9&2?IZ&t*@YBH>Q3Gl;3Q~t9 z1=k|PKd76J>T^kT{B^l-R3?Sl$HKxPDmD@wLQGO55EI=D(KX^E;Uu>xyDG>PvPWGe z8V(N IksChy{(@6 M#IuA#1&CRZghF&X3tz%~KwV;q zWtr?jW??!*OCvS5FC<}VWK*D Wu% z1azoFq434Y` z94S<$y{2>J$i%?z=v+D2Y^oz{rKm{Q1>%itBFL74zQ8I^YQyht2R5|}GY4y^45nU; z3|Wd5>p)l;CD>(Bl^!zXBZW$hYpv-JQ>bT6X3Iz=QNJ1%2-ToIH!2Y5&}E54c6QNo zlL??a$QrWTu!8$Y@#%-G<^s!W%*p^l3-+jCM5B*ZR2e6rO}; zRmUOJXVUobAX^{TjyCoQNw1;c3XOvl0_)^)<5AqUZR#O4BS^K^%)l7$o4^i~s&6z= zCKOjwo49O9huRdZdfsZ?OM-!w(FLOc)PtLlS;sFNG!jyh%)s}NtdnFWiAzzHQi&=d z999WQR3#=3+>`@dj0j-yz
qcC|A3y$C%Oe_8=;2fDil$Huv!K#FT22lcX zHO{AnIH-zJJ1|7-MX*mhl^+p=cOoc7+#;5=P8x4P3as-qxk|dH2J%F>U?himDswD_ z3Y;)yT&>6nB_w1xp^T8pp$bB&_G%wIbdKnYkj5eSBSD%&O$e#&RnoR8;|TFC2%$VQ zGpFy0SETQThXC*q5=g2D3B)x>sO* &YfMhTE8KhIgL*5Ln)ZLPUM zdScD?-C(zg!PE)CHb}G`OiTT&X@42o0{Vf`XOoY-t&qr!z^VH{P6#Z4!0HCUF0H *oj%`HA;wKPv#! z1PH-T0BQ-q8gY5|R^Org1gHWHvq&XCxM2yvbPNbbjK&TUJtW_w(X|&CJe)ftEvKfk zYLL*<@JgOYAqAocA^N_oL6s(xEYJ(wSrQ^4FW;BRm`{P<%5mT~Gn}iSH&h{6cOWo) zf*@2t0HiTKl+}O=%0-oe>5auMsucCQ$Sg#dLJXUVQDNM~m?NrsKt--BGGn|DR*+#s zaX=iG0nEKX#ftZR8G0JljbS4N3(ElJUZBF@jIh8MhIM25LcKy9mm#!^+1^71GXhnf zP;uQD){c3_We8Q<9x7X)DiSKL8^eaeh&V0-n0rw{GG;1^r5FclB$iqzmUpCOpXQnL zvDF+N+E|!uvYgcd9!h%^J|PTiwS)(RwG08yjICDiFvr4BqepJ9_QeC>{qO)dx;z5! zj|aea!2{sC2Iv*qs=LtxcxrxIwW9rLBmE+MClpM9G?{h4f_T4xnj2LVui@(n{)WTyMybdv? zqLB51qs?~Hh^&bo*-bNqG)a$4-%LQ3Tm6i%xF%WL&<<&ly$;PK%qAc+c+|@*wZexm z8mz6bdPGKOqJ6g51|D^|VykaASX#K7EGPsQnpl`xl&9lShbxekh0ROVt*j6*2#a70 zTU!l$r~~E6P C83vwr9^Afi_GmFsvjojkOpTpMY0hqPS^v0K9tx YQE5&eXObz1)*6pBy zD^3`6`r-O8Tx82b{J^>$G;GKBl31&_K1^5GHAnax?0A=zN(*Y>1BHBGx}xqN#1E|7 zp@t2>UJ{JtUJ}=b=?Wbb#4-McuAob5P kB627K6S!TMfgxuq*n23?WRWKxEL>@jDv`BW{+!HO zWdv7>5Jf^A A61pmn!yYkpG!wi96%T+KUzL>-pjI82e z9Ks=AkVJejI`W11LF~bRY$|a- lgM_CHTo+aLO#%cfC?Dl?JXn{p JqUI=N@dlmDM9~9m?UkZMJ03|$h=GVJ|KMGHGKCKlB(=b z%(6NVtx&26d7`i`M#Dl>E0Y46g~(uD7sP(|=i}g1nC;^su5&l|t$V_Ap^8Ahg44yj zs0+-A61*Wn^-#JJoR3}#x nkv)$TNffjN~)m_fr7h9agg3`|czML4cL zg<-ToKX}q2_#5A7tC}=LZw3x2okeraN|h)4(OASISc$5Inkm#VbL*fnS$TDuBm<<} zKE7&F8=FCv3}y%jHM6Liga8VdKwu^j1pNsbM$n+uFp&}KQCw2pf&e$kKqoUID1iiI zTbTy1+YCIcmIij!2zC`z?Lvl+ #ENYX-pTd|N_O|nwn-RJf~&yIz9mUa6B-?zIL3w4dC22xX4?d^M2H26 z0eA~|bYAj!WMBZASb~bQ2AI5|2~ro0h7^UEK)RZt=CD|r;UFahsJEs!lxM63HV84B zUC
c&IATEJ87{4$Q|n%VcuDgO`3}Xrtwfwg9I6x z)PzKyi!+<3D-dxV1)1m*f}F8HQ1+il=<0N!Q6YNZwP;85SM7eT-k3RVOhkko3Eu0y zwvS26Nv%{}7hu&q$rOrkNqaLvS5kGu>zh9PKelH1d9-Lo$X07G?eNxW-s(scbwz@x z-qN$XpMh}YF)5AKCmBK!ELAK^s6Gn`#0fJ=84?nj07t*QS@hc&zF>xj^z{&0RfG7m z1o0e3K;}#Lv#44p2PjJ&{(=qM;U^`nx0bVMQqUiM2}ogQhtWOx{ =Zki@cO7SY@E~J4VPi{9;L-7`+z~@SPEQ(Qo*>9oisvf1sddN2a#f=NlqGu z=j5aj$|@$YnOMw$`c`WdOY^pGkv9N-LTaZ@z(i!kR~B@GV8KTr>1G=mjT~3ZRHBck zg>UKSSe~H8?6^g+(*fgIjYS1>$Ue;L#D*p!JB)oka`#Q7cWffP_f^;bJDW(~*(TCE zH4#?m!zR+V(?m%|H#AnA>134~+l (HRqi~B=kFstwD)cFB_D|ASK#Sq@faFfuW-kL3wB%s%nrDu`5MN zgr%HFiHMWjF7QBDiHNJ{6R1JZL%{bSB}z6(q8(`66Y#X^B!K-;mnH!V3?jD<(2*ud zU24+*4Xu;VpKsSXLVuF26Y39IhgNmEZJo~iZD=Z?Ld5INEk-)QDg^hFT96lP;U-|% zLB_N9m?I$|?|@9GkO#P$5TpnjOF;u^L{kGK`SnDH+yRo-;_IfEaYW`kVId-O&P1TA zXH-%rRG}zG2&g|uLc&`GSEiyfz$QyEYIVbL>%J=XYhhHd SrhT9a{e+XpBti71*H_P=dx1XdSxu zYoG**g}^#!?^i(y6w9D>P)yQW{_ee52PIIf8AhNztb|_tU%nFBi37YI_bt~#8!EQ5 ztDz0ZcpiNx) }L5--_5cc zn{@x%Tl5YHcF>-8fZic%4p WNe0!VS0l^O1><-X7WU~Pan;nzBLpB?*u-P$e?`<{!VY6ev-rH;d z!e+;Sy|>u_gv|~C|3__hhq~{K%}!KmXKi)@)y~@N1gf32*$GrTYqJxmcGhMmQ0=VE zPN3@1X0MR3eM_9Rl`)xug;!on3^s>{WP`(7aRSr9lp!V!C9Hv9vp-_I^Kfj74%E>K zIVO-84kr`>pBCQeL|q^w4=q)5Hr%!iyfjHAa)wVnXd%j^WnhI4pkQH#! 7O4Uhd{!@?FiWx`WN$d_vMR-m|GpH{Cg9yq2ZabQpJ-d{X^C?39e z3~oaf2`2--PEl#rtujgp&Q`s@snN0HfRFqVS5SSNZpGn3%8c|rH3>&v)OAphA=9G2 zsr#yHIz}AZA;VD}-v0oMIGXVW!2$lh2;SRQX+abY&urUmU-efA9*<)DebrTzL)llo zk)9x7Ii7SH2NYVL_EXc?E2T{qZK~2~$>?9mxnR#jM0-Z@y? *6rW ) zd?z)SAVRuO`Mps+oHDNCFwcoF1V=!p%oViaO+xnvt0n~|B*;9t2_eV<=9Zg6wt@a~ z9c|bOv{b{CCkPIaOPCqHl?9H3Zksec66`J8qJs0Mi=WQ>; z1zlwDbZ`Va%pyj2u7z)2)CJsjSQc|{WLNcyQ-6zw M2F~*8QU#;LPuw*qe_QCz@mB_+aJM9h@TX*2Vroq zS-M+EL88@DBKA0pLLP2~1VNETVa^jdz!_}h7=>LWzIg=mHKrUqg9amkV^D!319?Jf za?F{Chno+GqoT~H;^-#kEH?in5Js39SP|<9EpGe9qQwgnYF(xCWIi#ok2vW_=)65@ zJ!onbdt80vA5 }U_W$^ZI4ns=jw30(3g%^qWDPmxp*N)|Ltfc%%j@don|%eFeTaH) zxY&w-Ga;Kd@4pzzgQXv2VHt-Aaj?<$W3eio5I!vZfHW4{H1BM|p*rxf2S#9p%*47T zaUcbYhyQ=xR87(LS+yOT$caffV(}eSs^V-Cb&$+(?t-c@tp`*yDtbn2@gr_xHB|{V z>ewSiz6Y~8-RdhhhzgT9LRFV6uCa&5m}>Uog{Yq$i`YmwMBv459engeU?6&M>Hy{2 zppK9Vnqu}~vA3#3%)1@B$7Xli2ivN46r5Uh>KRO?SP8buv>Sz~q>X-bC&Ze^oz}f1 z>Bg|9S%1vnC1@&C<|hw7M1SucfQ-jYX}!T)DpRw780_#zr54wWbD (SQfQuEn=o5jfMuo4+B3&i4YY4c?5Hfs!c%kyriw1*EymwFN&zb zB$_cxDd$ho!jVyecs7ws8MfCn<3J~cDhdh8Q~_EwNc>PXNU;`%h}IvlxMq^z!jz1} zf;sZhBd$ihK&l265K)h{`FbK#lSo7}o7iX6p~pN 4pC8Td!Z0gFp0#ndI&z55j$}`g@`e2SsZGEduHgka39`SDgJY11atXP$&;`P zk8P~E -EOiRS;vy?CQE`Ar<*LJ>sZk1 zf;gyETq_6$Viw2mwCT||m&EVrdhot5ekUo5U-YOESO{qYXUt-D{W6Ij0m9K`SKza> zL-mNq*y+gKB@uaBieg}W +h#S46VJ_kxCToIz}a5!eF#b-llrv^je z^mqt@Jbd0W1Od84Zt#KLu{|=(&B@^bBgDbVGcX D83BU+Vc&c-Ml*GAl^f9E7O9@Z3 zA&$|62RHYp1FV!0M cV@j0r;Y_IluuDdyk?7*kJOR}_PACF{I5bbk=f$CUIzEp>^K^DzoNcG$^BNz8r{nYD3_Km5$4N~( zn<);>)A39kn#Xl3oO2g=gGk>M4*{?nLIR18kU(5j(eL4OJ8f~RAynoNPL1LeC&gh~ zJWg>^2)iF~ijzWgJ5)aop~-NHlj73oZxkGwM;JRqr(qla?szZKJERatawq|fOOL2| zv0DtRqZpVQY;LAdcw{~sWa!9zR-94nbYva}2jK$I6*g27cIVRmW QhVIVH z_ishFjT=D#jzjYrZATSH$%Q~*Lmm^*-Jy9*cw;vd9X$^v8*U9BYGaHU0`C6QJm$OU zls>$l@OYg{SfD-(tPwDsOXU-7Ty;!Z$F~Jw!rP(E8+7eeNU}HxT1yjP_ov@^wwsU5 zhsWqrbZ!-;!rKL4*9XNVG%IGiEx(pH=bAV+4?tXrksy^=DwY*!(>D|(JT~8OxbqZK z-bI)-wr3DQ=pG&OBufQ%lU_I`JS>k_+K-5xY#LI<;la>~(J4cUBoO2QoZt#VK$pnP zR*Vi4QY8Iwa(HMHuMlMhPFOKIJ4uoB!^vulo6&@4GeavzM=+6*iQweOLWXDnEO4_G z+e?C742j@ULQy~*qlqmfTQNHD7!kqAkv$F3ga;}^D@Nxgk(-I&Qo;sD9HWWt>GrIc zDo&8|5%4^knNN_b*!hVQ7lmkdql~w0C5?gdOTbHjwO{%l3{8n6P(bz=XY{ z`#)gs`r{$Y(k=)IQ?)BXk@;eK=d;BU_NNNFA?y#VH5SicLD*vL!XdI)yK)Fkh*RN| zN*2rKkg!;6+d_*)_Kz(bSuB?_L5bO7MO_Sb2Zk049h0z-wNB^Ep%abg%vG{a!c@W5 zU@#-ZD88Vhe$X7CT^uwQW(o#Fi$K%ZL&~aKKWProPAAP}WJ{VT(S5O%sUI~5ARYFM z&SXn4+AvRc!aU)^DK0HEPvWF4o2kZQ<2Y;XkfDGubTUl>h)q=EdF<${IXX}QlrT#I zh|N<9Vo)cM&zi$7#YgYu=&ZRcY!Ui5)Jw)A0*cL%OlQrr)LCc4v*s6=@@_qNSuTo( z$kPl2 VRMv$uZAJxMYl$A23(%kWgY15PgnRwILIO6%r5wB3#TZMszhKa_)Xn0 z0$+28fuZ12R-vINv eyShzc;xLznWMxkrh(N7}KhW)WH zEH3PcPaYn(MdaLd@{|Y^hP_TStRH)4u|KLp9hl!L@jKxw5h%DDf#S$Y!dnW}MqDxk zZ|N`QNm!r1m?wB!|JRu(Z1jS4iZ?EP3**!Q!;YG!4&Xaxm;emB6jQ%rW(mN_&7QqC zN&rl5_Uye$0w63>Om6QD5&&V3Lcku((PJ6DTneS^^qiC)&oTwGS53vVO5`K?ltPXO zy3p<>rb3V%nVkwjc4Uew1lf^!st{yHCaXe_9htETK|+_WSJPG@NEf3%jodV? SQAxNyN`yz3G6_OD<=84PsAt|U)kp<@>W zv4cd@-*tjucVi^5ySw`tfdm6;I?Bzy8GE)d5}mxP3~X*4NhW~=_LuI5U`ljC61HG8 z0S6rbd}8tqHA(Img&9uM2$!3J*b(2t_TCa`P)8pR&@icC72*MC=W8T?jLmY&V7~ZY z#VR2tsNgBe^hne78t5=-EG5wcl1lSniX&rx9Q<=X-BzVz?$$4Gl|92$v8pF<@JA|e zuQFz&ffo2=nvcVSK3^esM2nlyF>?)6xcb6cT;IQ^43L13_QTPI%iD0J*3rI1_mwNW zsV~~nm*OpbzC5-jJ}?1lBwkZRi_^Y7USOq-eJa*u0*Thc8G%j4B=AvoKSW@LBHG}G z!4Q9zBg$pf=tg6LqWw{*@pM~prYdxQ*XGx7fma5R&>sx66|fS#3SP448xL3s{f=Vn ztIon8>^m5h6(L2~)rQxMU))!nhG#GhbNL>gbMed(X_??6>@55Po^Rk=6zzCEb1#67 z#U4E=cnIEouvx;9QBR_kYx+ke@+Dg^nV5pYB?+xn8(hyp(^cGaKz!xPrfMc#K8S_6 zpMy3t@DIU#1(3;u@i13bi@=198v-Z7cA#Qc9W}FWVAPCx8Cr@}6-h>;TXdpTr&Tr` z14r5~N!=!quS0gMnvOXIYY1+po$2c<{|!rONC F+<28_M-$6681gjBOM5Q6|? z2ujNrw2+t^q)fv_CQ$|O!Gb}`3`k yPxE z1BY6H)*`L8AT^OQgI>%CPO92eRjvo#P&z?VC{Nc+<$aqTx@a_9JAlBxqMoLR1IjQC z+tx7I<=ek- 8a9bXhynOnk2xJC<109trgZZg8lwq~ewL!F|Z$l-R zB)&y~L&%Ltn{G>rWQp_ymt2x?qJ3z_j8+Y*E(s4ldBOE2nJ1=%l0tSUZnjVu!q&!} zI3TN&Zo=MRqYCRM&FDq?Nf%8B{nY5rv%&P82?<@5jI-m&&1!1<8mXx!)YMF MkACVfXewwC%8@3i@j`UgKX44bCV`MjRN zjs{!;Krdwaj|!&Jjyvj%WR?#BI7Iqqv^AVTzz&&u!er`$DOakdwp~69N$7O^)H2w? zqlhx@YmOpu=e~_HR@wL>Bb6S);xjvP>*bU8RsTSx!(3AL4l~P)$CrhmoQkzl#_sUM zc6sp;1erTn+QVkofRyx(K0E`XDYAkB#33R;PEH36;nVnK(@!mwA#)zYQ>m04|KYMR ze2oOwA$%u>)eC`op%B!a%0s)-UQuEdz(vn1S*sO6u1}w10z>)RPyDF~q8QyCn1b%R z7)bvFwjtDq2op~OeFMB>@d9rg*>GPyO--Y1s0ZaVk$?%%VBrZaO?^gKn0eU2J#id9 zw!pctVV>(OP(_g-KJ+-k^r%`?u&5Rd0PrS|gd7UVN)$W}tVOKX)-DR h bTZm&RfEkrs 0T50hI?SgSUxq zeWdB~yWqHKlUoCLw9qU1>Y6(#Dx$3&Uv&dk8jr~1tR 8nF> zvu2=wQs`q;@(>>{4pPK+%LAs@vO`?T^tXto^~ux;iLGwatGJL7@N`3W9l`<<_$a9% zd(T>i`pDy|IxG|xr{ahj?!#&gzTuDUpxJR%O)Dm1Wb}`81mRaPG7uq6ui0UVYw-3P zKl%30V#{Ng?$4-Z$R6W7NJPItpfn&zz6k`W1Oi{h7oC6v%RULH6K24$vR mUpaXhhKS=@z2Exj@2Jf+G}lZD{i+tVzG%R}L-$?9 z7CB4=M2P>DMmTBoe5h8I|IhxaW&km+7-GamjQHT1LXrc-gKM$)GzuIG4mP{AL6a?9 zpyqNh?sOPrISR^CYA(djoe3sx-G(%LF(FE`r=WiW^;kxN(%}UkMflB12&p}#hE;vv ziZWVAEBIdYitLE+&`r9(SxL1Al36n**I)*HYf24w$@_T}mzq&?kxzvqm&Fqo+xt02 zp-<-)HD=TZPYxI+*D8~tsPG3dHP8x`#K=ig;5P!YMm-B5!bA>JhqlKXO!jY9P6qCR zUqZC!7w}4%Y>LKxK2zuy IM(o2e8 z6l9QR!eqecAuxkBo8ubxZ9I_dN+obN+7#rFuuVI_qCCDh6Ks>{18ns14|wz7qW2&^ ztrK9LgXTqn3^Ps|Nh@4F&cH96D6)P>-J9fWKWM|RS5nBQA8!U(G6V+FPajZ5PYKfp zc+eHGksb+I+qUh1>2QmO>^*Y^bQuclJ7hw+%R~QWVqC@0}^DsKZriN^! z=D#L;!JmhN1BmW(h&;Ux!mgLteV^GE2R72;#wP2|dcXRu<}8%KkUEJ aD_li?fLFoW^WbPIJc! zB>1cjnpmQla2&ctL#AkgoJJ$)@_6 x9z#q)f#?tj#X#(*vBPBp^oiC0s z(7Y9*_vVRq3H>1?SZnoB0)z!~?O}HM1d+&zla7o4T~`=0AdZQ!?Gs`HG-JbjJ=2Sk zVF(*x>l4RB*apTi5w`t8Y`78+6=m8On+@!uD!|6n_K#zLjbrwVW9W qa^DMC2lsf7+el^ ziBLP?z@TX&_G80VB3d1b{UOBby(BbboSQx@7Do4JWfU+eutEwL0=I^;qw!LdLSN5; z-XjJ#XooRC$uapj2G}^JUx*FRj7<$mMdNkA28MUQ24M(eB5eIbY$`RDpp7ez#-o7^ zL{&7zUQ#xW0c~iSy`*v+BN}usX;;R^yziz#P9p{P(eDdQ#kJuyMkjVdsi30jV6+Gr zg^eBj?MxISVG01MMkzI3(_)R5YAWtSg#K;&=BwYgjti#Y)2DwRWTcaDx_IQk<_Cc6 zNP=6885U6G$qw0<+N@(^34y^uz1UYq^=PY(Lgpex@US2-*^HB3$o(Y8SBwh0FL_{; z!r&r|GI)?j#sU@u*{i@D$=N@kz`({CVj6Pt8Dh{84&D($NmMkR5?X{_K{Un4)}|Cd zNqS*>z$MT|?W3Znz&)tw2g%HkP{h;kv_CIb!<(p4LFmnYeV-Q`KPA!I07mK2qxS+g^82J%J{ z=cB1f@E~ijc37Rk3qI;fkG|pVe|*n40l=Ouk0bx*W1wj(Kn=NP^j_P4XzEg z
iM1leMqCmY*4N3(x7|G$(HTJIIk-|1}Y{{!-NU>zhMq(^VU-$xMd`MUY<^ha3 z4a~Hy1e0!v+ehH-Bk=AQkw*vz)}TjFDMD(&7P4N!OC{RTyYQrER03$H641@Cfu@;w z*fav)Q((5y8w-5>vD}3CAJ#Bsh$_&O0zP<+iZUl~qvk}+qcVf`jIiNq>HY{~ZWlOs zc+TpJfdn#xKRCq*hS5ec4H&!AGtz(3GtNPsHf|Q5hyex2!u78BWTOD5EuM*OW(^yq zaAc5Hgy>ibwQGj3U`?%!%k3Eu_u*?}(Ujr{3MP035N-2Jl$O{a1#;O>p++a4kC=rv zBi?z`9#}b|+IEKkcH3780W*nZ0W;R{ptlD`Ov1E=G9DckZAPH^inJiMI}L&7Le;`> zB&t?-IZ5A8E!KqrLM8U>LgsuSb6mmhP+@BsRgmhBW<<^Spk-Xa?!ma-X#9mGed1vE zIk{G}aI~HJlZ8O7FnK;u*$4Poyb~I_pU}{~g@$sW07$mG6dMvzD-5HlR`dmMp~ 5Yw(2@ZvaPz#k!-7kB%&1P1ec;&@0fq-TmS6()(%3sV?8T?le_(T+pl&4+kUSK zkoqn^2-ptxsR{7j_oxj(z3Wc_QrD^;decO{o$E^zh 3Asja%sk>pI*Ig)LK%0&((N`W$PDSzoZ z|18I)9fWen`c43&?~H}0w|!?Pu u2nts zor!!q*LNlm^}g?H0P3OdY{=I`-`S9l8|Pd0oj??ui(dDg4M08goelYV=sO$o{kQd< z_{b&t&iJZ cQyd^(04ZE>!I$hR|nClJNv zqSt+A15girXG6Xo`p$-Y-?r~ONzB=PPY%~h#pVOGzFvy8Wz2sHJ4scIFPh-lQLNH; zm5LtK$N#*1-x)Tv(zq3-D_9k<(UR!@ *HtyZO@|5Bx2bDt4*o4 z{c(es?9;-WxS0&s(ju-O;sDIcp;%iAJZzxFodB(YhZ~u~0_fYY$kQiW7%~7xi;1|f zi57XV8;F;C(ul^w14>Av1gt$kC=Idyg`jOgdH*EkMS(aKQl1f)w+X^%fsyNgy=jR$ z&`K#{fY(L{c*_DW?nDWx%?hNuCaA?#8(mS$w+1n_yay4~(hetb3293QiuJH*Cdf_1 zi5-M+Egm?IOHGJJ;0{*)pqz;%q;TO73`pJ-1C2oh;Zq3}Hp)$;6=qzJ5-*LVLnUs! zmqwvIJ0J jNnu@ `U0oB(?$ZcMN0? z*Zg}G%i2BOuq0!{5}J{A4`6xL_MWbUyV
iBFRqHr`6Rl>$C z?0%!8aNG@|Je)w|t)RZ*mHUY+v?pNaS5+0;!+e>}9jbIAuh JG>~b*fWMQQ9~FL6?G7>e2ot>)7B)24=4%|sRD|&e5yE-hTI?$ zH*z8)XT$Cn+OvXG9228`T|ae{FcV`-;!>!1-fv2%e5I;#POy-1(B~*XvqTRvYA6Jy z6Iwz)u1b(-eE}1aM>Rv{M0Ih17<5>dsl20(m^x5d3X_KeI0QLRSqSB(`-f`Sf=1ir zaO|otO0!$N<)}A4S0Q%V2{?S~7p*EWSs-#L@p7Tk${)4ZA`>LOgAqQbA)el6gwI*w zb58i28$K6^=RoEBBw1&NWC2B;fb$h507%aU5PeDGSv*0f6nqk5+Y&y%4xe*Xrh>>H z%tx{K8ys{(>(BKg99H-HQSmvFw;`I|+E|BAs_Ss4or&QwGqGhEt!2aLkV4n+!&)q1 z3sOpfvd}wz4ALVAB0?P3=H08)_T@NTC?!}aGPQcEb&_%3v}m12r1;V@>@h@(O$we` z@zjd+xHfFkR3-)2Y rEz&r=8uW^%$I%C1e1R?b%kW#p z0hyh|)oKlwqqB5%dnou5@`U*VfhYb%^(Fpblco0odE{i-yiF f=h zJ`#WkKh*D# )hWRd*pL!@x`NDTLn=DJ zh)z?GweE!kSz3~;Or0#;5I~onAzASe4dO6LBjT{>R|9be!(az=C<`~z5n4KM%#}`H zuc4eY;SX5>kwWds;Og~)i0?4fl#S@Dp|_4%gIKg3mrh7fI*#&4%$o5&FvET5GLdik zw{Dc-q$O1RZ)()G*$BXrQy8^O%r@K&FbI+^|1Q)g-W-O*L6>*h9(&dBJ8i-g!%^ z#R`KTBiBr|G{|(Zpb0n #>@r=kr#gQEYp~B5c00X? zBH?Hnz0#2YIsgEFM%zP4RXrbxscONO=#k?*X@Gz}0O7EXN{^C{%u=m9uU47AA5 aXgWXjeSG~h-AvCc$NnodF6B`q}r%cErZUQyMXD%c_ixI z>0o&pJtfu0TYw6oVCvZg4s1?OQA(c$I7x(1s@8YG{93 ;juxXK81Q)Le-noCw0hr7ZS)2UJGRYujisIrPoqRPZN@Tgv8s{el2cneP*P1vD^ z{o@* ls7jTF zU~u*fQs^b5tfo*_XlI&4J90vvqwG+Q Y2GOKs>S8!q3Z;|G0wvd53p7R0p#mlpl+6aL8wpg7q_3`i zg;@Pk3H8gf`e6!%RT!I?$yU{hq<-97CFoFWc3{LI&wd58VcTzHADp`Gl3{=y$|u#5 z;<&E3<&^5``h^9kBPl0IDvEObQloO>#3ph^91!*hARU=tBS&|N3hJPURELletcF~r z0<29^4T%MHHRP(Z8g{O_$5kgy#BssM9yC;#l#+}CR~YjYy{fPZHc(EkFbEe`rHcxa zg^Sdb>enaH(5#14G){=7g1R1x+V!Sk`*7_@6 pLe*lq#e`R{sz$O)Ik{>O z&VbEH7gg(z9I=v;f@<(h>Pp%Nq6b$k@cBFt`VshiSE~4yA9;=F%#|S~JW+XUTQv>8 zM~u=`a@9~9ETdvz)^SP-&fYkjv7Iu+V?g*0G=hUGgX|f25SI1huEyTvOTbSkdWX`Z zk9hQ_2d1NWC?-4sF?hCC7v!e!h6o*_e1Oc7t8^z8J0Uuz4OEU@iz5=jg105QUIC{) zk#C_~!(}A{t66YiR+vzxdu#ToVuwCF6?~Dv2 CXP_+7!m?)K=m$EYLg=XVa rnC>48dIlo J;9n`ZetH?N2AeexO%Sida&saCf6@ar$Dh
5yMo~<%v&KZrdR~#0WoGU9>yRb zB}&tILQLyUga?b`sdV87#sqZvG2}j2SfF+a`Hzty4dO^g*B5E|1aIC}Dxw?}F;EnN z0{LL$KrVvy6zJ-RB!Chep-_N=X3&`E-Z6-HLxu>G_aTEoEgxY?G6<)!z#ubN$b5mS zE#wcUG%`qTWKe_|^TWg-dAkf+A2EnTEy18QB^2EygSdz~gQ$oG1~H ;Nt0ppAZT@fajmyRWh?yiU=t%*|6si5B;s62TTT@^4;S$7om8^p&98GG(9 zq#EuU@?ipypCz%n3r`?N7PW>iz(70t(U)M_$fzUVeOMIut3Wy^w9WMT*Lbz?A)7p{ z{p2V5P<6Ojbhrq2!T0x3p5)`YuP_yJ1$}W>-flk1=22=rK7%V8OLZi+4>udVlp3sh z6;{Ys1}l8!9xMnHI7JWKUqLHBlUs*U99>lqy}+v{68i*eP+%38a6#7F;a+OA6x4 (abGGDH!CG}Jt{DX_R1M7H+NdiY@LTDT2hn&G z{Qmfg1-fz{hP_&1YVj#sBD1fc)=N^`H%Tq-2ocmSd;#m$;2FpT0c1t@sc9H+;|9Bk zZoJZpQk`y(NbcK-?*3d?oHztc#E5CvqG2pJT4aX{ (b$kh}u-n*c{A z5`*KLCv fuRdn5}xW%6*NC=ir=GS52NQdQO z@>8sn@O7(bZZg~{cCz1AWH^E<7)w0mqx~FGz+Gk}To!0Nctl)8CrJ#AIEblSeA%Ox z;yAjMo+#m3pgT%Xf@{BH4p3Y81VN~P07zqeD60V#GZPAwKt-R9p>HaM&CHD+(FuGp zDlA(v=7_2uP{CWH%r-;N55tC6>f)8l5CT$f;;yMe1<*KE85o(>SV@J_g{*$xkS)HJ zw$K01-n+nAcGY#hd+&3q&Z#=*RGsRo?ym0Yr1#mAdu?L^(ZM7FV|q88kPr;P;iYoD z%nT}1)hPW)n~_d;L7Esf_Zkys2GOgX1`T2&5xv4^c%(rPWOOcr*O~YcH4Z-bD5Dug zZ+y}B`}?o8_UoMLt|H-z_hTCBoU`|O{@4G#{_DT+fy7rvOQ_F$41qcWxH9TPp29~M z8Ys&(OTtfnXxmu%b@|=}wX__1$|2tZ=WNk|li^Q&%O6zhuc99K?7mQVQLpdd3a_DF zpO0`qjCVXzkF26X^ddE|zqEp7_IF*tDyd9js9I%mc^Ia{=PjMEhHp2h_z@Qy(GF|N zfFb6%3+~6qb_bn>0G)wB=ie02nR3vH3xeiCCxgx%2Az^J3d6Gw9o9&T!;XT+2uT(o zk}e)VTiz+eEQ!Y|W=UF3k+NMxGyytA9ECcq22*fkSY1KOTL#Q-2bdiWFxvuPEXXAP zo&qq_4lqdtFtY|2yG~5I_!mYSC<}J+4+${bOe~Dq=>W4B05fkG^ZEiX9S4|J1u#7W z%qhbdcG^5({5>$~K#Mov!_fs~nuqi*BJ;@@Q(n46Wz^3CW1 9cuZg_Fm)Mc=$1SK1fGjKo?_g*ion)FThS`^ zjmk7wv_&L9t(lF9PX&z)S~FHJ2m;+O=UNS;*`OH{0=iO8rS-?^dFdG1_czly;XIL1 zDtuu>uKiojgloHf(B5T{^vv;pK>hPExySN%eDq@|lDgLjcXSS?y }u=c`>Fg9KjJRQl+(D) S!-s)3&r}!^C1s4o2lb@m-IAgq@oE^)K+$z-RdJL3#;Gkb0>}8 zaq-(vzg3yOW-V8sn{}%>Ys+|2n>U3uZ^#qB2>XKuKSl${{mhBS!)0vHPyiy@P5~0t z#ZqQTx>_Oa4Z5C3asGY>8 *_~w8jTV_U@%w~3l=a4u_Tlv;HE=m%gzUR z^hwSM_#Cck&HAdG 2R=A18fyzW0WeV_;-7ifpA?<)V-dL|KGeAm6kinJB{= zjUpxA jvBw>GaBo(J|=g`82KwFBSrr9+7(xf8{a8%)H?O z9jIN4;eKz7os af%WF&Jm*lbzj=514u^b!aER z7#_AX;Fdf*Fh Vf4%$$sDnuOf0t&s9u3C2~vz zw554*AG6quo6!xnp`P*9u|Ba$wP?Lr8}^L?h@qmAFj-JGrU>MXe~N;B-ZLf!LRgdi zbb|saQGQMh>yLp$1G3JgO*r;i45QLyG}6;&BF&(-^ *BqZ-GXdF&?mdmj(q)>E=O%klzfMA1q>O?|^)CV!j~ z8g7d|AM@Xd@4*~S5rBl;rbG`ibG3vX1Gx;^VhzPSRq?aD97Qd|65Wd062_QAR=FH+ zChfoQ2TT$@;qCYjG3apWhJiM|@lZ2dgP3$Ka6;MuFk1t%C@w7C+F>%LDqAiimK)pB zO5Hq|Dh3}_1}`H5*+z6E-UvcM2db$aS>oq&O#oNjqaCe@fQy!36gDP}lKxowRqiT4 z3W)4Rak8HkB17u5A})(cLK)@|g{7hc+FA1>&Z00(ke|l$Qx-_b;Bd8d00KpMyj%Bk z=;dGv_5`PD+e@+w;`6cRiG#f@0He#53y@*?!&tg!A+fPLutvH)!p0SYV+@ZEW(&ic z%J;3J(e!MU!%_=Yk`9#pv|D_kwZ4kLBil3DXsu~ks|MErUbu^N{{>&&D&t@eq7Fzf zgft@MJZ(!ilMWDRvQhpyb)}4LhC}uu|G3ELl%D;HzImF^@6S`(5WBUX5t}M!N+Qtk zx)G)L@oDOTc=}-`ZA4a9P|wlpbp8sHe1Ih 69vgNVNb zCZn|hqKHY&0|5F#n6qo*Af$B_P;V2LSwcG{u#UGvzr>TPs5txsp0;?AA*owLccTVG zuUSd #Eg91ameGK$sH$gc~c%OIxB_2T1(`VMC znZPWyC5Ru08;O{q*saqbYp?^L1~%;}Io%!}ROqj&C@D~?o DdWlo<4#SjJ~6 36`$)_pX6@D0Vzb{QW~L& zKA`2Uu%%Nf&^l=$1)9!-0!U z;$o4c(uW1f;AfhhGu@>9vvej`fGIO^Q#5Ux9?-VNr)J>mGH7{no8E|g%#yd-4{ zO&V~}u9cz!YISDHU@R13A-G)ufCxdC`S9@KL;1ot!I(9yamGvlMWM7!WXzga{uSDm zGltvFzsXqrYW`yA9MI|L0=|eOUlFz>`4dQ(uS^Vfj!)W;u07{ CAxlj#&3Zwy9^|Q5>dA*Y#ScFIqkFFTvPaR#wSQrBz z-aViXLs!H@%OOq6u(n+_`xryOTA)_N+KFbL;c;p9!6<^+mjts DDsFdi40%7&H(%H?ApLAkg})guOzD0s!Q zbO@CI@&fqA&{KKW9Atr@XX!W-PNva!A6Cj*Q+g`wye)RF(djlosUnV@JByH}SVMQi ziq?vi@(vY>>xE*s?FFMs@_ETN=utC+O?w(AmLKdBy*QDs^)A!~zR7w3SFAL^^|oIS z%_ftv@}3gAw-uX6KMckZ4qT%2m(clE2uE(^ioay4B%G;0IOtpBgySi 4Ly}QI)|4Im5u;B`!57KMWn&~Gk77YGrYks-5v^!38zdv7a3o{+ zZ(yw8KQ&69CG1Be6AMcTY>W7yZVgMJC2+>nFwZFimd-jX^*G7_VN?$G;=Rh@xT@hO zVK*8kE#oXRl=C=BnV@pW^#z`J9JLn=rsZ&yIn;5K4YVeX3Q85fD~htmQDl?1QVMS? zB@6s4TpxH_Sw|NyQYs`^!nTqXg@lDM4G PJ8I2a&iv*EDf3c)a SfZf(l80JBV3#Wh9b_jeGYQ&3l73qb1k z=oQaRe&?UD+R|nI>QDH>VEFf;{|-j@>-eTP9qCWs5$f>w9!;Vw^z$&iSTPJN6r1i_ ziziV71eBBw*gpGaBT7`8kdm_YmSRd&TOMvd_zOgp{Ey^I9aW;S5LOb#0u4TexDquc zQDhT?UeuUHeb_e~Xj_RasWk?ktM(TiTT*L`fo!}_`MX~R*iDvGkh{qLyj9$$I;dS# z-x6k17sM{=ZV9ic3tIcS7r^Q-eXJBC0jY~wJQbX#DNx#)da4**Y3ixsbET;-du%4} zAlO_a)7&aHQypwBs&5IKsS7q2b+?4g)CHS;-M?3CW+Y&9F^i{y%`^ozTT@RJn=4H{ zRcx*_bwO-?eQ}a$ECT_`37U))7(OCQ5YzKzINzecU-OvshhJ-^w7pv+I{cWvRjx_G zK#{8kz0Pdz_DC9%S8&&KKnrE-3VB*cX`%1?MlCcy^(Kv;c#cEt3U|%6us(}tQlDks z_#%-qi%3C3fwPk(sXUi%= lbm$kpnJGOA!sBRQ6w;RtWG5jVKRG6tko1_&grs{BS_)UsmSx=N;;Qxp%vBL1X z7#?CA2m0`J`g$*kHWY!g{ucX!2lD$z=$6A*=-C;bS*b_t3oq{*_00b;sl!&;Yw=ztc(W@+|NlDNm~Pt z*_Zm99@pNAtNcVL_vD0fXBk<-$o_XfGHZ|wPw|kroqT;}b$FD|bM}eR^TrX^Y8%jI zS6zvoKI!|;QQmcLIO6DQ4}5L=tks_Lwdcob-!;n9;VX*q*eHOgjUs%OqabsMl^}D8 zeU_t81_bwP%Gb8f+9=p+@?|={jD6P1oF3&v#`Bp@yz`Fy?Qa}$hH})&A97!2+2mwo zX>@tAKa2HoW7fJaWAF3w GpdFVwGBDvCjNEJu)E$v4RIe%J6zblCg;ti=o9uNTz0QFRou!N&>gKR#ZifQZYJ z*T`L=FR#w
^!{vyXSegLpZ4y{ zde HD*3e!iNYi+0kL>YU0La)_RbSDEE~8QBnYIDY$mIy=owvu*cfv77v>D9n}# zlfR5_iZY^noAwU!vy~2bk@5`}2j2kZ<;jv@dO6264NO-FO!_@!!t>Aj^Y+(X_hz=? z=19%pe+>K-!taE`8{5JU;KX#4szIw6Q_oLFI}$WVr!1=mlFkUE4iu~~HD1RH!~;d1 z#kV%aL5-LfFR>azf~)L>irA|4-O#UaLx)@QnxV4`#%2OvZp^0M%y|&Ly)f%?bX#{n z_4TC3p>EBC#=#NBX~WUdYB}*E(*vu>IEi*vg()hKTS2uu)Mnj47mBmu0y4#~;2YSh zrPY{0S8DfovCm$pNM9q_ )H0(Hmf}3VpLq(s-8|W-42Z5>tC{eF33IVpItafp zW78es2ZX8V(zh_7Wi$ZrjHKwB?1UnCg60Rbo^>gw#o(YnqYw`IQGj-gf?i^yb#Xwg z&8*S-9=_pZ6=k9xI1Ka%Nh`tyM_B#d$7YiDskUw 4N+IQE5v*xq9pO{D(8oU#Vr^!2s>0uCh zb*ub#%p*;BCQqu0rSZ#v+sw;A^Vt`#WStexZHc{fR#+DY`0MUO#L$$Um3O@(eR}1^ z@6%F_35g=`MNwP&|I9{LlfQ=MxT^V8qgkS|-Bsio2wgL@vd@?(;FAg=bT^*+(Q=JE zgZwubGVWsXj$KSnL!C87M6 W+(@bacn zpL?rYJT)5W5}gK^I4jNd)I=j4ASUX7`JMgk=%~Kzx37h3t8t?Hd#$;rn>GD*XW% zU)j1*tMTyZ9wQ3(aBC2Nhwii`&Rz7UUhXvfJ78tpjd%xR0)_9$+ b4Y2tT?S0qd&aweCI*-;5t*dz~ E*7NQHlhWjL+OZ43Ptb>^2Tf7@hLtQ1_opj938v}x4chMJZWMM*ng6mg zo|6w=M$`~CCTDuaq1<=P=yU*wk>mXCHxR6ahQyK8cgCEDy!H@oLCT!_87s5OQCXei z{p7>`Cy8qFos{U+2d@?Z4yV+?PDIp13TLn28;1BUyp{{JKM<0dVYtSdvJC)%*zt zaAkyfL3-7+$2SBSsRYQ;+d90O-}8rEz0J0*kzZip7`i4=U*sF(()pv=Tz=2z?6ope zpgg3Dhu8SKO@Z!&u~6fl&$#M6P4)bFt}JF0T@H27fj*;r=Gc+^4dfBY33eoMGHo4Y zmp# |%n@cyJ45E9tq(T8BpGM&d;Yui_77<)IG?!I(`Gav z?Fy6N_e_4B?UMKj=GSS0DhUxl03Ah`l4K5}-!J7%O6b!7@C-J)euD|?H?Z{^Oj^Ie z)3ttsjn;1_o&Se4h3dMsi*-wTS~th4u(t*X%z&i5u!g-65f#v*w!2_5`Qtz5k+z+` z_cw_2?&oj7y6b2cshvNfC;BcqTP^M0^dUT*Mc>Y$dJqE-&__P*Zp|LeNOV~5AdArn zTt=j9Ok^hii$^@!OC^hhHk}D%Pr~I$WDln_vPVcA%{q0m=j0<~-&Qk_y&?|-`DPrf zc{<1*NPsqm`R?9w_&c#KxwOQ2u>hvFhR{@Bt^l@MgUPHKml^TG^OBkT-k&uP==2Fw zXO{S{h_*SNr$?9$-#D~=bQLj+aMr|32tlE5De5ioYu){VA_d%;JQ+pFet<7-H6w=> zO6WL0U6QMeE(ad4ls%el4}i^P97lzq0qrcTx(#S?fwT+I&OSY$W!XfL+m$ h=lDciCBj2Ne9dHz2Cc1tyn0ZlvIRX^u;Ww`6NK%yVP*9BekrI{mZb6B5 z2{R*0%j^44)=BFztmr1X!Vh}Pnj}9cps)7}U1~#oj#fct;m=klQsBspVMf|ItPoxq zL;(kBKY|F3vRa4Gt416wA;}GWA*1r?<09z}-S!I}@sC7W*988NNKF az$W_NnGy%O7 DP#cJ(e!s z20Z2ij7Rg9b$=<3@;hMI+hq0aT*(&Klw@eTe>%(4l`OSqOYFG;&gIn?=+ps4_&G?^ z)fWz8R6qK=_cyRN(dy!3Yn;Xho}GMqz8#40W4rz=Q=Z{;l?ln053m-LB`dLwd#ow< zYEZwIUTUBtDO|L`v~_?Kb&jkQN@C&HNh#y>)`q}BV-Cb9Gc*kLfIC3a0q@@T81UF( z6dKSO>k!?-rW^^9IQ7b8K%iU5x`qXJWVF~zcNdTpu1GO#0d@8q02bf2g_g73`MPV{ z)?s)4w_%x>_o}itrHf|q;j!%CK-@`702{aT!Z$mW*1=A1JNZmLgYB`D?iF&7N<&G3 zO0XH~3ee1tQ8il&U^OJxsFjvGv`AwO@arTVY3Wu;JGH|he$l24jx1E*p{>Dm{wWfJ z*U ?Ie)P(#k04nx^S+60EmJaibkdlH6j+bV`SnBDtJ z7r{_?p~uj{k R3Z7{UO%fI!j!!a5#l#GMv zKp2{UckFhhyEed3y><8`;@l$)B{g^*LlF)Ro!zLKt%bKZ@f;5(*3vLkEl!VPDDEk8 ztop*PF^8H|e_}e<87#O3v}l-x5Rm5!sU&$qezii5)TId8{W&SASqo0KvhXe1<+6br z{?mrkd_ 1_!U~?Ucq@9(ienON=6dhgn$^&1~sWQ6f0N& zwfG IUSqdvBpcXu#4@Le k&0!o{ey>w*~`6Hm%QQU%n@(^_3x~QDOma54qkVdSY zO$j4 kiRIQ+A>R4$|+%2kW&n`w>pwj&C4llLr6^u#w0nVw~l6&({@>0fc-IX z0ldB*dgF4c)|#+XQY_FM$etJ%P>b@RhIU*zg>mmF3cH~>F2F9XCwzSo`GKAg9utT5 zMLYN6*q}%!-G#JOq0djt#t%9mjqyxGM@7huilSQ%1Y06tZ1gv~FWXg}O9q16b+x!n zBb58mvYd#ls)lYa)zD#3L&>ik8gokM{OV{Iv*%+2C3KzzS`eG=p~v+{bIu!9(l6YQ zk qZDF%fu9s;T?geZrsk^(*JQW7b5G89BggyjzB;I!SrE)Gxj7DaW_P^y56i>;wi zs>rO-6*{ex*R#+)bxNQ$DRokl8n(#Q)M|}CD5`3f78@%tA}@nb*-e)9)h3IE#;%C% znvMybLc2`sNLwhF7!X2Qs2ZfzRUhz<)nLkG+Z@t*r3N~X?qf)65SKMaKG;=!&K`G{ zByLRA^Wuh~n##%X9H^}0QFU5S9j;^xhQK%h4XqslZ?|Vk<;hAcdYPkxH}I+Lb(upj zNRT;N4;e+Ay@ToMk5WKSMqpJEPK|K0_pmUP8WmrtY-vEzFp3O;k?~Aqa|rBUR#iDC zA~5pKBk;lz<*apU3d1)9?i>P@SrjL1tV!0W)HONAUg(-gnOO|Hz{JGla48EJby0&y z;JLa3334j(rfiJYAo_^pVY?Kx;h4QOmTG9+ zqjsr|+3*5K$6~VI{i`@S7Qbjm$5LHIZ8|!Zq-dL?16gH@3}Y6GWCPq3LKQgycvE^m zB*J+BVrM&o*dg*n&qTyz4L0wG`AMLc!p*^rE$E!e(7%D31HTF6m`V97#m};#WyQ@Q zhp^lnO67}7q~hjq#^NPL#>+}d8x+R6o5S0Vw4?Q26a||wm%@0dQy7_w+#Dv9JSp$E z4Rf{|cmr96MbR}Qa>q*6HR??~MbDc^+H23uufZ)Oo}y)9VP5R5Q#5zt1d3kdt0>xx zNRs(Vi`=#WMXQogG&*R{#Jn!o>7|z#=oXzLBe*&6aG(tp6z$)Fn8nPsh_H{s-qV$> z20>g-RUxvg5F$&3N1`i5Vg`={_j#b!$UmP?A0}w4AwpDO5mM20P6_@PmaD)~wU`gmeMb3YUZ>8UxjYWet}E*9U@u<~^&s zB&Z{_qFc#_I(DrH#>-m8hJ0`~NfVoP*08B-*tDm_rk#a?W7ssG?%4u1EyMRG%ZEBP z3F{m-IfqTJj!ov0D6z@E1=iqq=|Uiox-MBP^Dwo zq#WGBCc^9L{9Fa(;#vUd6BHh>Nr||_{7l7aU{k%VfK9<8fFP25aP3u_^4L^&9|(=y znAA>iALw>3hXr-_flEQo8>jS%Msw$cF5Cw&kaV}41PaokBot|FV6X@G0U7frzrjeT z_N+oxew+*M>A%;`+T{$m}hiH+O`a~r!4sw4DGXhGyTxPbehJK25EDa;Rv zh|+z~Da;Q8D{cm9a`>rX)!u#36_r-q2X$#+V!*o(K=hjXV5jKSZZar^fMfi@eIOQ} zZClB97+D4d&$$nF*)ww=Y)8p<{%zCjaD~-L6*1Ig{N_F|eQrC(WI$z>!XvVAm%#YZ zU3%!RiY6E1cZ{q-sxbbl`=B6IhhJbkTGtdD+nWs@eva{Tq^od6%V!i!e4WpN&LPzu zj`7Q>raPCUL5Ng|QLU4z3Ix*Xm|9NH<^0AOf3q#2l0eX~@kOe#@yn)MIobGwqOgt4 zjR{~;LP{;cY2L;+=Ng#PwDET{2NiNQzKzjHQqRoBHS5cgLJl~Uoj>;ChJLr8wA}`Wj#sz3 z1*Pq<=Z?}O1}|Xfd*Y%E*^@?Gbwj`Eo7>JEKc-dHh--V$st8RqJE>!G&>8whT%}f} zyj1YaF++bcagh;NS`{ZVCK~#M90Zr8RSiuNNl}uW)F3YUts44G;({k1!X7c=ng?Lc zCSR;j6;iICDvYiLXOo*crHc>QhtxKYrz#FE)Tv4ZdM2>uS!?s4a}1@JnCa^^0oZIy zh@}ES++csn!k2Z(0g_5nuAE)hQ51G#voURGig&_B4~`ONayu=)6BH}#Pd$hDVBk8* z0*P;Aikprl3$dzd&4_iI@hwGOw}v>wyrF85a0_ W?M)nTTR$U~)*LuW`4dLFzjpCjWis@>Q z%KoIG*kYl$`?nR-868WZK{cxxE?(@=Eb=n!&|o!Vm?>@CycoAOuf@2*Q;%W Py#I 8Jw#wX(+Sp&g$Q6fhj4(ZH*8c|JG+PpK!w7HfDi`h z$kF3y(cIO6dAUuP6J?Zuna>s~pv#OVGkR58Rq8eFAR;`QCEOrFfNNx`Ony>?fUSDr z&2^gQMZLKbBLobPA``hBq3KG50OKXbBpBtF)}+X#g%sIc80D2PfoV*Y$xhubCQP8w zTA=WT5OIMA6T$?5cY-F2O-}4WAarZfWQm0dI7}|2hdkj ~9ZfYYhi6fyq~;XOj$!trC<4y1(}GtJE#hj4OeY0(19VV@zOupqjUU24c`n+?0r zL4>U4^;t|W^~gG?AghZA)?HxC-Fa_q=fN;`7mRN*vO4cA$cjTlmN`-Te(PbjE-o6D zxqoZo;v+tsrH-uQ!2%OKx3I`YumHiBh22aTjgS>n!UqcwetL|UBEKlvj*2{*1*$ g3^u3VM_w qM@@v%1NT-p3XoZ#Fjh+ZguEh=FN~3(y T0gegC>wA(2~vi3^EA zsv>e=MQ#CFXhaSa#E12u$N}z=RK>}W0~Y&c96>FK-ZqLH2pX$}p9 K zwlRH`C98WJion &2;qJ85P}d`;0V}x7A(qd8tufn?JS~T!w`as!fEk-7Dupa zYy(@cGze?Frf`aYzq~>SytYZS-=Yg4fXN&qTSf3$tkks4l|tLxSvc)|9DzCQC6ODH zR#Ab1+kVCz9Okv?Je4?tAf3JQ!Zk~a4OL2_e0x=tZy}DLj=W_YfpcECI0DcSmA2u) zSQytyjeQ6o&`HgeAts4Vx|wi-{SaLU90=hAbsw}t=4I1KEq;KIcGF4C1Fi5}!|c(v z%7TQ5f{IRR!35@pzF0&70*U?Y5KVv$4wW~A(UzkL9MrZDO|b3AXj{c45~L89vq~+M zbHid{tX)p-mCg~urVC{huQu+|4j|qp=LjjA5djubunlAqU~#lG+#@RDWRS8hY$2qe z(WH1p%@G$u3e+q?3Kzy@Ys`B|{@bPH*$EVD_pjn5!3_FRot+@&z(NXw%poSgLJGLN z++1GSlFm?cQa)Ijz!tl@++5}zG|+I6%s597hD&+iV%8m=*f^>HU| +uCUHncfa$>bG*I@9oKl1lgpRb5 Ga;Ao1v{At>5MZ!?{E`Q|2rv*5$sEx+5#zlT<8ZvKK!^nn3u2+Y zYEurj?gTxdbc-m9p^h73)0vS3SGc_0!I?20U;x5tAG020P>(K{*#OZ@0otL-Hk{w6 z)DsZPX*>b3T%5s5>3Q4Xof$sLV8sg#OQv5Smh*puSi%2Y2CfhWQo!Ap=R< Lh5eirH)gu~=}i`oizvVhy%eSUuq>1*^yJ z;I~?qg;=u;LU)f7MGIn1+`v=;xgK0>fGI87B?*XSI!FVt>TLzY3fqW;GdRSOH>}!} zM=TDyVos@+^MmhX0NVc1li+w@Z!N&4c2r?2u?F%bg-*=z079hO6otS!>d9|xv$E`2 zg~l8Y7mqclcC02gay(3qH5ePAZ$b+)=6FzH2JMe3%rzYk5&~6I#o25+z@UJ$(o~U< z2uBqhjrv#vLpCg`LOyu4&pRGy={D`r9HOn#@lZI>cWBS58g77CaFId5@nEMF7FRMC z8AMR9ZDJ+nestjm=6E25l_OHbDc -dQCZCj)xgJ9ypCyU^A=XaarVA$N}3C zRR%kS{e^IYNwS~}eJ*5yLos;>6y)hn6i5hYRpy)n$7yHPV+HKK7P0{CY!+WVe9Xdw zggx52LOt~)n;3ai)LIn?TURr-&q(*>B*$ezvn`>N;1KwFL9)0zX}fI7m6I%}2?43j zMzTTIVZ0Qza|H|L9dOYr;B4U?sK*=>t_G_p3PHNbJK$q@#=HYtj5+8!1 9Ek#8W9P*9UqdOHnUm(K=XWoGqFP0L3zHw?He!J{_t4X!Je9f z&&L};XT;62bpm3bQx G(t*%$O9cM; f6E-=*;$_Eb@R5{Y}x?3^s?OGw0xI(3x!uZ%k+Gk{`nV4%oa*)GnVvOTPFb zsHZDmyysE~TNHD}- ad8N(jPI&4O>n9x#6}&0FvmPgg`C z7$6#o7{(>=4Hmo|i0ZFo?!Z~%*}98Ds95j|oH{Ese2z$YMXb67N~lKQ>_HJT3*G_| z -DXiSYN7pP(R_74z(Bfyq;p4Olz!u_*rlA37Cb+MW1!2uL6*fl?dAB)~H? z aZaM{ t|k z@C}>wJtQKb77_$MU_9CEn%m@I9bDc5a}fJY-lk`=JSs*WC}h^i6fN!WxTu7^2Ev9@ zZOc&!4u}`s+9}VNxx57yyxxpT*nSA#uo+xSnysSfo%Xi3B3x$4IuL{l7l09kPt;D> z+L3U@bm z>{lA{0hcc=B?|dJOqd8J6Cx6dtOa;~w@Y@g;U{V=A`(nXnG}(*WU9)tmlE5hs_b6L zhNh|nBzEZPA`+Hm0}P9;48z_fViIcTiprz~?2r*l0>lKm{6ot!2@Gd<;Yn#ok0S7& z H1$^Znjzjq+By?Cs@ zvCxDKJp^X^xC^c}3QZX6Sp8Hy1ZD+YIGMrN2z?Vm=8Jd;zUa^d$+X}hkmq?zp$W=j z;5-Cks_=xugKUSimPLkMpDa8C!E!MV0hWuCUcqnR*g?f|DMJ%{K7)qk!oI4gW1%U% z%zQCl!Gr@ug@evZuSR^ro(-i}QSoVyPuMW2LEr@(!mROvT6{v)1wp>YLWsc<@EVFG z`1k~Q$fgk|8?l72HzWeyB_ZZB8 1^m zVuxXshg5y&u+-NgQo)@(g@<1-QemNpRB#@LAles#ermZXR>>eHQ&G|#@?I@GesxcT zsi;bE;5`wkjkQow$7DQ_3X?q%lad`c@ot`oGE%|f4;Px^UE1jU1Z~vl+2Rg&RSb3@ zDO4=H3RP`%+T0NvCMjvSBPPWgnIcw*cL%SFYNPOyNf{5ya0RxnM97Pprs55qk7G|w z4c${vFn)jbYB1SSAFd!n$>%88h>TUl>7wp%t?8l~7kdstF=~?Wq$UF`k13>TmfQ?Q zV{RD~u274QWqcQQc9dxk>KI&xD+DKqFj&CCPAkt^EY=(yhQX$h$#yJ46&xZLp$c}~ zqUus(?9kqABv6-MEjT(XRDt7iF7rV+F6X3E&CwD3YDKU@O<5)7u9msqR94Gi1*LTf zYvQrF$YS7?RiFNV9KtB815`Abrw!Z6u(_x>Q99MJ*}-lL0SgNg(jO2ur^6FcRy9pI zd#&9K0~XkKCDYC{fVT5pl^h5<3hISYBVeJ-fuL|#6k-V_T<90gfzW7j44Xs1f|{Ki zuu#Kh#^(bTzHe_CuwYTw<|8YQbxh8IuoO72(`T20RWAihV}sGi0eqoj9c2!LAcT~{ z5sQZ7+odd$M}@3rbC75=qoayZ+$n1&A4@?*`fv@S=11|N3qJ4TgtHyqkAh1_>rxM0 za9-ewA7$gv1!sU3c^_v2r~rsX$a{ycMZuDI${V6P8cL^~>o9Y5V%P#Xn_YTMpQa~- z%9~+IsJ!!`C*EAGhAo(=nkn|Giok^$t#71>n$Yrz5z2jiPwRz3S=B_9{n16rPR#$< z2wo^8mxTj|I7=72u)`UU+odAwAcpgBRu5uy$Y~H<9vsB*vc~-BxY`*;n*iSpgBMi5 z1utxek6FsbYQ({qkQr+$5M|gl^5Lu`GpD_3Qx0B5b_BVaLLE0mr!|%d8!N#JVT(qo zMvIde4&{o|DfyEjC7@g!MOp*`7tH6;M76QVO-DIl8?=d9^#lpkgQ136I}4wO4_#;+ z3@uU1oaO+=9o;KYYuDJ`UKxepq8D5c_D-y87rx*;Lk+L_2H^|NM=@LTQQ$u(I#IlT zLD(htgbR(Sx+kg;4A>$*%bL%YpcrUjmpq7yVCdNrR(xtI;361^#0iHd$~{aIXcbFj zysdy;!6jZ`m)he9c|-ClRd+3dVHrK=q7e+_mXv=2>#X48buM1Zmf(+01eMBs94=de zS^smTe?svQ FhGB29bfInQBUOhTdcC02U{)r_^kU$0c zqzMcrwO32FI5tAxgmp#XTDAlgX3#!@VZIr`KwJSmlqO6)f}u2FFn_I_6hLjJa=_mu zTQqMQ(f5U@a0#74ieMkXfT)0Ylq}f%6NNov2@|SnpgirhomGpxCW66fd-VtgxBX@I z%#N_T1xcFsvXO6bBk#J|GZx0M13N_!tYihAXwT?yyz{P4JU?Mlp{Q8X0NsX{g)vyN zHBPv>Fa{4ym$zzAu|POhR7iy~jKLz0*fax2HyOr&)e}-Dl#?8n3LAwnG@J;Mi3(#V zoAOctC&C=`%rCjXZETKiLnr{xJi)MAs6!5R&}lP=9Lg|;ZRSMqnM}vR7%V-a`7GQJ z9C3|15me5c2u^MDW3Fg#-je`Z)X@^Iv{Dh<4I?dq)85Q9H(zC`y^(oa1*N?e0S&u? zp1pw^p&8I1hff*mR|YgFPt7W-m}pP}vzAAp?nbb%Kax0vct2--6=Y{_glZ~ c0n+r=uCF(1&-*d^G=jbQs(KA%F `GaTnk{i7 zqM=(e^g~3$lI=18N5F0R4AccHije~4g7+eREWH2&U _s(@*&L9209TACBj`?GSTfD1~15wfO d3mb4FOMCOSj24XUqWk z& tl&?ZWp^OT#Ol(8sBA;PEWZ`hbV%MHH$XnoW zSYeOKwE%`D?t;e+VcPY$z?tzg39yR_L)H;R&woAEYAiN#-C{9=>?EG6Ak;|J@b z875(B^t54WRG}x)e$*VSMJJW?R16mUDi1F-vL {8EUS z-=~yaZXYx7fU20{l2kjlpjd^K%&CaR1Lo6ho(Bk*@u)S#6jAhnoz}$EKw?1mw+e0* zgP-*XlETCk%vkYBN|Put =_(T*AW! z?xhu1A=hPULt2&8RUd2+S`!Al1y*p8!B$y;gw_} S2$^bqBqUdlOX7c@spBO%;^$YF#R$-Ouwu ze#J)UfehP137wS^TF<>`=uy!(6=0y-Cj;TS*rDKE=bln`jhFVfjlktE*vU*0*Nj3R z(*@x|x~oA8C&0h5%Tq=XN#V2z3s0-Fw{e MSU>yFv1e@&C%bl@ zR?Ss_aa5Pr3*)rf7MYrtKzVI1LaP=$G>6?pL(uBP^W?TYTkQ2zoO6)2$!ovC(*5 zqEaqQB2tC#o3f^Cic;1#Ghzl>5UEbT<4&s+>4vA?{U{sMSsi8d@NS_}eo>=z5&o#^ zuo6+{OgTynhbdz4Yf442`!#m6g2UEg8%V*wU}f+;6gxp4TRZ06BA`uZs!PZXX$zu4 zULkD^Y5gW*=0m*Qwo!R#r-`&QfsJ*UJcV6OXxW3n*Zz!)E7naPe^FWxx&KG1m~8 zqo;MuRVo0F2SLi%KBFOnj;LM)bJ5 =eja!hP?l;d)x80Cd9 zxA${dJoDw~!w~v}6B^_>mp6kCc{BKEcr%ttK~iM+y{I=sCsLEbo8gq43Em75t|ewD zycsT{Z8w#nQjpgNt!X22)l$I37!zoeAt_I7Yp8A%n&UzajjB>ef?vzShn7y<+%UL@ z{0>pb`m3{dA$~Pzk5z|;zmF?84oz_!yBh`RsNI;kHAl-3qVo}0R&8@_DEhxa$c5!c zpbb2|>D6$K>Pgor6cy9rIt6XeRYedX ^M5s59NSIs1f< -ebZ2ly i2N|(7E8~s4#|Y&6~bpU6N)=Q<}}mpfYK;K%8eo znkB)B?WI}6`7zM}dQs X7qr+usv&yoywhUkTjN(Fh(a6bO^3*KteS8c z#bk%bbm0&o9FAT>uB7S0A>xRd)EOq !xWm96f9b^GsJ^rrmB*701dJ$&G*yG~F`k8eNx@PYKM)1$VEM!joVio|VS z(;`U-iqmCL?|G5N_+wdgFpAEdKY#vr@>gHarl5Z6zsEoHuk!fl${@mP_ru{?{;xo+ z=$-SVBvBW=?}}TeiV5U*KmNhr`W|D8q*z0X)0T8A@2?KIRVLQtxn;edP4O*%HRFn} zjP~X0@nK$29#mz`x~smcC$7tx(eT5uc#0cw+U}ih#nZmS_GMABUo#+>IBRKGG(O_s z44}pt)XtZOUy;REC-NP{ypGe>)kF`+`R`2gQ2kw KmJiCd`Jk+ZOix2SXyp+tOBA<-0)!oBi5ri_g%a<)Fk?%q5$gTYLLBw7 zgt|5Z;YGfr(W+}jM@JbgvQt8);~~L`s?!B4Pp#@HIHm|9^3U^30nz-iBK?I|@Hp=l zLr+9M)|`N1^DGDLpcSV)_s|e#IN*SL%!q}zp7U7!GCRYYH0ix9PTHs96FHTSWklh; zcGMD(^E-&7Ik LQ`@drd(&1(-R7s-` z97ykeFbC7mlYJn`|K=Cpe!le$EK~wApZl}cO+Y^&e-!1>@Gt03t7`AhcV475O``|g zLk2bci53bJEhV&~m86p-kJsjsIMLX@3X z4kFn!>b)qAOM)XT4kYU5pM5}4S`O)QxpzcoVBIT4yZLhdvp -}*%nLjmkG6iBfNY~2exKa-rEt_5a zr*TA74(pnek4tJ4`T#F__JZ?EyqG=2X(gWZ?HN8Np5dbH>e;}aF?s%p|C8H?78%S* z_eqB*57QxU=Jn)+)utE4!gGXLk4_v&_}|?J-mrdp{oeI+(aCH #F8(3Jd-VG*r8B=^s z>ven>d$o8BB+1%C8B+501X8$FY&MNwZUPFP_#k}nHJ~ 2wwQ?J#R(@EBTZ5r!kB% 45<|%bT0|~?+ z9h@TfCfQ8;RN8{~YGCjdB3BTN5iQI}NZX(?@n7*54XZ2W?TV-ELmHrUHJTP s$>`@^~b{3v9*r zS^z!Cf1FW5Vfi2Zq(moQ-uEfK07?G+#ar>B54R8Ln-^y&DYvziB#UwW(0`?*0_c26 z*r_Z0&)}y_+(fWRhBW!kH2wzG=Lut~`K!?Ml$tHRNyF!ReEsV1eKxvQ? f%NR%?%Hfo7YkWRR`0*W@sufTcgF~v_kTWK&F$w$(68R| znr!A+e(ESuBFSNnAWU5u{h!GZpeywZ%FN$OafZcFL2}Gr8U4I_*>x|^@e=Id?8y;{ zN8Z23;+x0@bhxJ?BtBWq@thvJf!CeuRpJ*CT0bm_Kb3!6jr)#1V&5TK <#T%ZJPZ`;Xsf zsI}klVU=EX^;r@9O4C>${?}E#o8v^1I64b=;SXFgjnAG< (3rM z_J^PNZ+{hC{^*&r%s)Q(?!WoY?;9?>;kvU2zx$#8_>z~t^rLzaojLOhQkr~Q(ZM%- zYya=Cbsjx?FtY!ixbBSa=HP*6PyOycf9X$LcUDhg>K^>pxBkiF2k!qX`ud7X=Rf !aV)sC_=pxt}@LBD1jD=mN|$hv3ccEO;i<2 zQ#RjP(=4S#s+&Tqv@*Ra3LJ`C(!CNiZu5cz*u#;mdo&m-mM+Z`tjN z{HXuD*MGj*f4;+iKIA{o_|Lcd&&U1e-R^T=a{KVju`v9E|6Gsli*R|J7sA5Z8QYt~ z(ER6P{`1rBbNKV(wYz)0-`|xCP9-wqADLOpI?~dyNafa5i>Eom1f3ywo)F`)hfue@ zlX4X0Pks#!uIB>|0vJGomXojfd!L1Q1D9}8CCQ@~4x-lnWIu(bC`6qrBi*aON0bo> z0r%sX`-uv$`s@gm%lhV+76%LoAJZcu&cHC1jvS+_*%aqRKouMv`5&EbVI#aL&L8=^ zv%miO(X>-3=D)JF-l`Dqi%oHvqTMqv$|zs&YEp>l2zkfgWC$Q>RGW{kz9#$O3t`YR zS4M~)dWA9a9T6$sN7=NyGJv6th|t0fhr@4G7|XAtBPH~RR}~lJ#+>Q^4N`u@A p08G(e;A8`VUW%qMyBT6KsYQ*xKni?T@8eWG!VWs5G?`yt {?x0SB7vXqJvR7{nuWG+XIN1`-eH1ZZ5( z*VYRTkGP;~q_nTV<*);ISHs1h5@T_5XzSV0J9Tz$>e i{nk@k02RX7(mR}@Gr?ZiIIF(7 z;63GwU)8At=g_ZlpXEQzg}H!MW8|T6d4{<_}mW98Ag+10eywQRLe1T^Y5jZR=>duQ!#> zS)=KU8k1oOo@w`CWFQ3*1^TT{yftCoZqQF*+KC$dQq0;-*Cr3lnQ&zI>lPNJgoTxE z5`maubqs=%^%_z42vp9>J7NYY#c2Ghr&A*yXyqYQJ+H5J1r0*eEWEq7P5h8!gT=y6 zyZ)>lEmdvZZOx~PHRqdO^ZGjbshVjImE)y{z7!@4ruV^fwzru+%Pkh|5Rs`?@Z51- zW-GqyCJaLM0R)u C$X>Y{l~g$3MJ`j=*>0iRpBK z=ZtA%JO{xcp0p=C_h8T&HC8+}(Nd7ItvI W^lcC_nsi1VC$(0I+hTT^t8MODHdV$LXbbQbh+Kd2Z<$ci$4$Uo`>ghffvf zQ#C3CFBqNXBDCKM%KQ0OQQo9l-=hO_X7Ro35`)7?E6E+%;2S_?lGJyC=D@n+z+&M) zT}ZBX6_QIbi~B3!BG_Yc=>*vbC2^4@N{dixye~)=i7)j`ebF;Q?SLcwjig1ht2**p zXJ}lT?#%IVb@o6pub-&R3k@@9U2Ft&MJ|c-D|kN4u@D+l3NpkgH=W-bud?gpp{mC? zXL;~4(Hx&RbUA|km92YCD)OXD OCJwaiKvIysv}FitLU;3GE0oUKjMWTfE`8{ElH zV?n&L2ar(fFd}$64R}yHY)^xnD*D`)d=4kp=ag?qin<3sTal-MxL}do&|@4ahQ-&& zJ%=pfEc31MG_Y%VP3uWKdr|&=tO)k5uu1ZBeC0XWg7xInIAQXS^GKdQbHT`J8NR#a zhK0(5>MnNh$c!9t)4dEILDeVrBAgMR`1L81d0z~T^m@-LTn;U&Y;kYG??*gC-K5%v zGsRYZKj*pt+UEVk9r4>}1}j%5`1N}Kwao^k46e7g@%EeP^-vp7CWjaoHY;!5(PoS4 zl=h0^8&_Dg=*AT`3k<^1h#Tjqg<}anq`dg-d8F|RR??OgQ`~{=TeTo+nu;=ZC_mY@ z%?#W_sg!c2c?(Stg#N-60UxhQ{s}bp;daJO@%Nh}bt>O>*Z@W=@8{?dlK#}uRouz% zZ|8^D=jgHVHI-j>m GWBSy%~ptOBhB;s8@Eup@&8AeSh@?Y4puE~SuAo30XCkxK`y7An; zzg?CGp0SJ)@XK0tt&~rvj?h=xxG$W?dMxUKpgq*DjNS{vYopjLKth*zk!=BJ^^CTZ zRrLK+?(-q0B-c8TAY#O>WB$I~PJMCa=!BM41et#!K8$I8gGyDv)%%$kL}ZTarFW$$ z1fR|0r_PQ9pEukNdhzZ?jbtPvdaTIb$#wR3J8xXc-}pK ?wv%T$X&0Y_Fb=e0XO>*yQ>2HKHph=_`tL7dh~4X@`%{UQ~6c-Blrl}$s{Yz z@ME($-zC_uk~i2qpd!;1fGbSp$qmj;Y|v^Czxw*#dcxL7+s7oxR~vr-Ur+Gmt)IG+ zyFE`Lp5zp=|Drpyc6fjLiSYbS&quGIhxUQz-leVh1MRy*nf2$M5Fm;=Po9synUYhk z 5%FoZ5Jq9{dhiW zSV;oRQ?|TmT5$x{N)%ycxTBK=wq$p@~r?KiY_znR{jz8$>_VadPQV{n$0fxPo~@pFDlmKOnMR% zBsmQJ^Nf=tEiXkFZ;Y76z2$ep7zj*knSq4X8I}UQiazrFYmz!jJX!6>KW>R@87SZK z6=(>pH9|!8-j<(_j)K sV_*pAT<4^0N!T_7s0 zvRZ#mjAYku7?K~0y>1ny?JbpEX^M$-<)GzqCooI|M(%8hVxHZ;`ixk~cc${!**BJx z@2}B!pgWcC*Ee*&{1x^{TE(sQt>^liVnb79g}67`x4!k9ud^9Ht<^ep6y;=AC!?ng zeI$$_F70y>Sq``K11EQ;hHMr4zG7b$bzn?*=PPRSnu?tM6#4ktXk2COp0C|gZ8?3b zwOeHMRJYKvki>Rl-3W9TwHSdS m~NB0N1PSr@-|>`*v|~A$xFwOZI5o|1iLHQgbtK9k*`=u4&W{Vb^!s z#09P!^iAOUR(m9Hz0AH9;QDs^DRA9l-=<3Z82Du#XqgB2Zrm~>v~#p+Pn=U5VOPu7 zZmG6{x&o3!7s0LzR5a}3$jfBxGTsd_M(R <0Jy4DG{9s zmxcG~0f>Mqz}_+ZdK)KroOVC~NSy15jwpZt>C>io%jsOI)e6n9yK^j0j*QF<{sJvY z(!g4e*xr5qp3nTrU%X!G4f5!Ty)Rhl{my)=%Qjy3gx9;DxK0jX{gVznD@~K&GwHkv z9!zH+%%+c+>hXcBr $EAibX>Xy?XG`+ z8 ~tq!HQ*17Df%l@H>#hG${$YD>lVAf~2RjWl{2#tJqp z|Fu i-Pu!~LomP>LH8;#qHFWvtXwW0LA<5sc zzW#%4K}cWE{kVOFJkLLBajBvBDgVX5$0$pn)ZYlO4EqbddOA4xqqjwOKlk^pIeE7H z#?x>5^Cv&N_d9 =$XtQ{Ho_~|9`GKi%Jk3Jor2R z%agsIdCAwGwUzS)AHPn&{Etr(l<`vg@7J$8bM}F=2fy&fulhC`c=YU |JwgH#wq=eAfqA%6me})-FXYlZe z1;XKOV+iZ($q|rc8y<}H^%UDbz3b6zc=iEG%u{aefd>FvHh-3?eZeF$U<@B{L+^S^as!X^mqN{FTD0Q z^|kd+_1|asdM2BzF2dQ2iy+m5jvj|4?4CQ5E;5QUS-)CVlX`sSV}AlF%mI~i4l0^p zI(*=PgMZh0_NVPF?fgajElZC-^Xor&_KX(&Ogi N zLZLf^fC3bT5uM4zz8|#ZbzIyy(`noOv9Evgdeo~U^2B Ud`@2@e!Dy zlzUQ)KVN^#FP?^%8bkT)`~L<##nrU(-=^{r<%Lb@01_85o4{y`) NXr}h64`>MjZ9& z70_@z_j%9w13)fKSMzz`;GcfoUw`3%p23s9?$A5>|KgP?fTpr=#r;#fmH&6}lW+gv zk$-*7w-f&KKh{3=(fkAN`ydE$#c%&l?^=D?f^g&h4}5UPp$~ogqkR2(quY=2^npz9 z_h=lQJ0tEIrGp1}u5p|_!#E=QkI<_u^0F1IUcw13fL-@OW1GqFt>!bEZO~QktnFFB ztR`|Odp?21^>%B5@$kKEY*@Zt8Sx9n L@lj6M zDEAyETTx%$X!_}+I}L3IR&uz~RhtV=0GfIMUYQ-jK|z+!71s^NQSyg>5!OB2-X|aL z#k+2+>vZur2F8r$tG#bcyPNiI_Dzo1;7N(9d=?*sab5))4D;{*B@TS$R}nF+ex^pa zy3#p(FLvSci_mpu)8QIH(xWzT!)}qk2buH4*J8U#Yvt>eq~z0A_R9!wNVORl9P66K znGd;XD4?3f!PsiE;o0RfPPn?%ebxpo$GnI`pf!;0wXC+tdTlQ}mh8%Zk{}-K$`S0W zXd+wXWmXx1u6Dp=e4{qbDH~@;<7BNzwty7l!IgRdQ<_JQF+{|{vNku5Z@Bm`ieva9 z8+9*)aas D9!_q z;`|nh4-9#B^6;dhEb`AkvO^;!TfaW$Tvq{wSl#7gtaPB8Bl_;! zj^)`xvqFyb**bS@owd3hRu}WqR##@0TU}d*E{LU-1y%VNj^_M=bFJfk7}f%y+Ug?I z7rWC~W!Iw7^cdi`w#s-li&bWiM3_`xWp{bjMyuQr>Jq{01^f|x_o&OO0(Cc9WiCGu zO;=ahBr-0)UAE4<;QTiaq}7!qsViIZCq6MolFrerrJ8X|Wmq7wxJwHvdH7Sm3IZSu z>DSg#{s^d?_2;KBKrz8#Y57zj0bBN_byTF77&!b^c^FDT=7<~nO~gH#GU+2t%L$X= zs7)2ivmhHBks@h1%k DOxltvh%tT4>Uhb>K#r5 z!+MAk3epNTwlBHWr73*{Fp;YS$J7+yHXSa54|ah~xp;h)b~d(x%6M@szx25DIeb*t z(hE_orCLQ0NVVO8+P%0+qYDa;<-3nFB0GXb)EfTw)n~%mltHDCy1HI!kaG}jY~)>1 z2L#09tH#a)kA3_W_BpY;a-74IS3^SsloC8Z)=f73A`okAE~toQPo}piM5pLy0}a;A zX3z1flUvbXpc(X0DBmx&RB0FmGh`l0Bg>`$jF}_YtU!J(8kP|u?5*rb{BwfbcUZ9^ zVXP@3{{%j=91sBN*F-&WZ`Ig5Hq*SaGat(}4_!*Ka06>WCJ&{N?J^_e>}Ww)Hip39 zt_E{y18;3(l#Hs^n=dNjJ+UmqN4>4kQYeN<1T97EGcywM=7-1wu1bRtiL8k^$ivp7 zjf~eQIe#xVrsx4e(iT$%DPb2C(c#tnO)R8?FUW2O3KhhQKK!XqO)25;RQ^f6XkZ;^ z)S{h^ 0OX~Xoj3S!a03Sh< Fhc)UrI;-2JMI^X&>t_I x7ENnOReeRW)dR zryU#!68q4Q_S{?_eU5rWy-mUZNlaYp79aoss^gcTLK3eESb>Gy4h+c7YirV=jrsvo znb^gKPlN-E^s#4wO2$xs^ >P)31eK zjPI@pMlvMW?-%%$mP7ELV*C