From 2841620be623be15c1832a783136a2b73c2b4424 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=96=AF=E7=8B=82=E7=9A=84=E7=8B=AE=E5=AD=90li?= <15040126243@163.com> Date: Thu, 13 Feb 2020 10:48:51 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 20 + README.md | 84 ++ ruoyi-ui/.editorconfig | 22 + ruoyi-ui/.env.development | 8 + ruoyi-ui/.env.production | 5 + ruoyi-ui/.env.staging | 7 + ruoyi-ui/.eslintignore | 10 + ruoyi-ui/.eslintrc.js | 199 ++++ ruoyi-ui/.gitignore | 23 + ruoyi-ui/README.md | 30 + ruoyi-ui/babel.config.js | 5 + ruoyi-ui/bin/package.bat | 12 + ruoyi-ui/bin/run-web.bat | 12 + ruoyi-ui/build/index.js | 35 + ruoyi-ui/package.json | 103 ++ ruoyi-ui/public/favicon.ico | Bin 0 -> 5663 bytes ruoyi-ui/public/index.html | 207 ++++ ruoyi-ui/src/App.vue | 11 + ruoyi-ui/src/api/login.js | 40 + ruoyi-ui/src/api/menu.js | 9 + ruoyi-ui/src/api/monitor/logininfor.js | 35 + ruoyi-ui/src/api/monitor/online.js | 18 + ruoyi-ui/src/api/monitor/operlog.js | 35 + ruoyi-ui/src/api/monitor/server.js | 9 + ruoyi-ui/src/api/system/config.js | 61 ++ ruoyi-ui/src/api/system/dept.js | 60 ++ ruoyi-ui/src/api/system/dict/data.js | 61 ++ ruoyi-ui/src/api/system/dict/type.js | 61 ++ ruoyi-ui/src/api/system/menu.js | 60 ++ ruoyi-ui/src/api/system/notice.js | 44 + ruoyi-ui/src/api/system/post.js | 53 + ruoyi-ui/src/api/system/role.js | 75 ++ ruoyi-ui/src/api/system/user.js | 127 +++ ruoyi-ui/src/api/tool/gen.js | 59 ++ ruoyi-ui/src/assets/401_images/401.gif | Bin 0 -> 164227 bytes ruoyi-ui/src/assets/404_images/404.png | Bin 0 -> 98071 bytes ruoyi-ui/src/assets/404_images/404_cloud.png | Bin 0 -> 4766 bytes ruoyi-ui/src/assets/icons/index.js | 9 + ruoyi-ui/src/assets/icons/svg/404.svg | 1 + ruoyi-ui/src/assets/icons/svg/bug.svg | 1 + ruoyi-ui/src/assets/icons/svg/build.svg | 1 + ruoyi-ui/src/assets/icons/svg/chart.svg | 1 + ruoyi-ui/src/assets/icons/svg/clipboard.svg | 1 + ruoyi-ui/src/assets/icons/svg/code.svg | 1 + ruoyi-ui/src/assets/icons/svg/component.svg | 1 + ruoyi-ui/src/assets/icons/svg/dashboard.svg | 1 + ruoyi-ui/src/assets/icons/svg/date.svg | 1 + ruoyi-ui/src/assets/icons/svg/dict.svg | 1 + .../src/assets/icons/svg/documentation.svg | 1 + ruoyi-ui/src/assets/icons/svg/download.svg | 1 + ruoyi-ui/src/assets/icons/svg/drag.svg | 1 + ruoyi-ui/src/assets/icons/svg/druid.svg | 1 + ruoyi-ui/src/assets/icons/svg/edit.svg | 1 + ruoyi-ui/src/assets/icons/svg/education.svg | 1 + ruoyi-ui/src/assets/icons/svg/email.svg | 1 + ruoyi-ui/src/assets/icons/svg/example.svg | 1 + ruoyi-ui/src/assets/icons/svg/excel.svg | 1 + .../src/assets/icons/svg/exit-fullscreen.svg | 1 + ruoyi-ui/src/assets/icons/svg/eye-open.svg | 1 + ruoyi-ui/src/assets/icons/svg/eye.svg | 1 + ruoyi-ui/src/assets/icons/svg/form.svg | 1 + ruoyi-ui/src/assets/icons/svg/fullscreen.svg | 1 + ruoyi-ui/src/assets/icons/svg/guide.svg | 1 + ruoyi-ui/src/assets/icons/svg/icon.svg | 1 + .../src/assets/icons/svg/international.svg | 1 + ruoyi-ui/src/assets/icons/svg/job.svg | 1 + ruoyi-ui/src/assets/icons/svg/language.svg | 1 + ruoyi-ui/src/assets/icons/svg/link.svg | 1 + ruoyi-ui/src/assets/icons/svg/list.svg | 1 + ruoyi-ui/src/assets/icons/svg/lock.svg | 1 + ruoyi-ui/src/assets/icons/svg/log.svg | 1 + ruoyi-ui/src/assets/icons/svg/logininfor.svg | 1 + ruoyi-ui/src/assets/icons/svg/message.svg | 1 + ruoyi-ui/src/assets/icons/svg/money.svg | 1 + ruoyi-ui/src/assets/icons/svg/monitor.svg | 2 + ruoyi-ui/src/assets/icons/svg/nested.svg | 1 + ruoyi-ui/src/assets/icons/svg/online.svg | 1 + ruoyi-ui/src/assets/icons/svg/password.svg | 1 + ruoyi-ui/src/assets/icons/svg/pdf.svg | 1 + ruoyi-ui/src/assets/icons/svg/people.svg | 1 + ruoyi-ui/src/assets/icons/svg/peoples.svg | 1 + ruoyi-ui/src/assets/icons/svg/phone.svg | 1 + ruoyi-ui/src/assets/icons/svg/post.svg | 1 + ruoyi-ui/src/assets/icons/svg/qq.svg | 1 + ruoyi-ui/src/assets/icons/svg/search.svg | 1 + ruoyi-ui/src/assets/icons/svg/server.svg | 1 + ruoyi-ui/src/assets/icons/svg/shopping.svg | 1 + ruoyi-ui/src/assets/icons/svg/size.svg | 1 + ruoyi-ui/src/assets/icons/svg/skill.svg | 1 + ruoyi-ui/src/assets/icons/svg/star.svg | 1 + ruoyi-ui/src/assets/icons/svg/swagger.svg | 1 + ruoyi-ui/src/assets/icons/svg/system.svg | 2 + ruoyi-ui/src/assets/icons/svg/tab.svg | 1 + ruoyi-ui/src/assets/icons/svg/table.svg | 1 + ruoyi-ui/src/assets/icons/svg/theme.svg | 1 + ruoyi-ui/src/assets/icons/svg/tool.svg | 1 + ruoyi-ui/src/assets/icons/svg/tree-table.svg | 1 + ruoyi-ui/src/assets/icons/svg/tree.svg | 1 + ruoyi-ui/src/assets/icons/svg/user.svg | 1 + ruoyi-ui/src/assets/icons/svg/validCode.svg | 1 + ruoyi-ui/src/assets/icons/svg/wechat.svg | 1 + ruoyi-ui/src/assets/icons/svg/zip.svg | 1 + ruoyi-ui/src/assets/icons/svgo.yml | 22 + .../src/assets/image/login-background.jpg | Bin 0 -> 521275 bytes ruoyi-ui/src/assets/image/profile.jpg | Bin 0 -> 81131 bytes ruoyi-ui/src/assets/logo/logo.png | Bin 0 -> 5663 bytes ruoyi-ui/src/assets/styles/btn.scss | 99 ++ ruoyi-ui/src/assets/styles/element-ui.scss | 79 ++ .../src/assets/styles/element-variables.scss | 31 + ruoyi-ui/src/assets/styles/index.scss | 191 ++++ ruoyi-ui/src/assets/styles/mixin.scss | 66 ++ ruoyi-ui/src/assets/styles/ruoyi.scss | 190 ++++ ruoyi-ui/src/assets/styles/sidebar.scss | 209 ++++ ruoyi-ui/src/assets/styles/transition.scss | 48 + ruoyi-ui/src/assets/styles/variables.scss | 35 + ruoyi-ui/src/components/Breadcrumb/index.vue | 81 ++ ruoyi-ui/src/components/Editor/index.vue | 226 ++++ ruoyi-ui/src/components/Hamburger/index.vue | 44 + .../src/components/HeaderSearch/index.vue | 180 ++++ ruoyi-ui/src/components/IconSelect/index.vue | 69 ++ .../src/components/IconSelect/requireIcons.js | 11 + ruoyi-ui/src/components/Pagination/index.vue | 101 ++ ruoyi-ui/src/components/PanThumb/index.vue | 142 +++ ruoyi-ui/src/components/RightPanel/index.vue | 149 +++ ruoyi-ui/src/components/RuoYi/index.vue | 21 + ruoyi-ui/src/components/Screenfull/index.vue | 60 ++ ruoyi-ui/src/components/SizeSelect/index.vue | 57 + ruoyi-ui/src/components/SvgIcon/index.vue | 61 ++ ruoyi-ui/src/components/ThemePicker/index.vue | 175 +++ ruoyi-ui/src/directive/permission/hasPermi.js | 28 + ruoyi-ui/src/directive/permission/hasRole.js | 28 + ruoyi-ui/src/directive/permission/index.js | 15 + ruoyi-ui/src/layout/components/AppMain.vue | 57 + ruoyi-ui/src/layout/components/Navbar.vue | 181 ++++ .../src/layout/components/Settings/index.vue | 108 ++ .../layout/components/Sidebar/FixiOSBug.js | 25 + .../src/layout/components/Sidebar/Item.vue | 29 + .../src/layout/components/Sidebar/Link.vue | 36 + .../src/layout/components/Sidebar/Logo.vue | 84 ++ .../layout/components/Sidebar/SidebarItem.vue | 93 ++ .../src/layout/components/Sidebar/index.vue | 54 + .../layout/components/TagsView/ScrollPane.vue | 85 ++ .../src/layout/components/TagsView/index.vue | 286 +++++ ruoyi-ui/src/layout/components/index.js | 5 + ruoyi-ui/src/layout/index.vue | 102 ++ ruoyi-ui/src/layout/mixin/ResizeHandler.js | 45 + ruoyi-ui/src/main.js | 70 ++ ruoyi-ui/src/permission.js | 64 ++ ruoyi-ui/src/router/index.js | 114 ++ ruoyi-ui/src/settings.js | 31 + ruoyi-ui/src/store/getters.js | 15 + ruoyi-ui/src/store/index.js | 23 + ruoyi-ui/src/store/modules/app.js | 56 + ruoyi-ui/src/store/modules/permission.js | 54 + ruoyi-ui/src/store/modules/settings.js | 34 + ruoyi-ui/src/store/modules/tagsView.js | 165 +++ ruoyi-ui/src/store/modules/user.js | 96 ++ ruoyi-ui/src/utils/auth.js | 15 + ruoyi-ui/src/utils/index.js | 317 ++++++ ruoyi-ui/src/utils/jsencrypt.js | 30 + ruoyi-ui/src/utils/permission.js | 24 + ruoyi-ui/src/utils/request.js | 65 ++ ruoyi-ui/src/utils/ruoyi.js | 103 ++ ruoyi-ui/src/utils/scroll-to.js | 58 + ruoyi-ui/src/utils/validate.js | 83 ++ ruoyi-ui/src/utils/zipdownload.js | 40 + .../views/components/icons/element-icons.js | 74 ++ ruoyi-ui/src/views/components/icons/index.vue | 87 ++ .../src/views/components/icons/svg-icons.js | 10 + ruoyi-ui/src/views/dashboard/BarChart.vue | 102 ++ ruoyi-ui/src/views/dashboard/LineChart.vue | 135 +++ ruoyi-ui/src/views/dashboard/PanelGroup.vue | 181 ++++ ruoyi-ui/src/views/dashboard/PieChart.vue | 79 ++ ruoyi-ui/src/views/dashboard/RaddarChart.vue | 116 ++ ruoyi-ui/src/views/dashboard/mixins/resize.js | 52 + ruoyi-ui/src/views/error/401.vue | 88 ++ ruoyi-ui/src/views/error/404.vue | 233 ++++ ruoyi-ui/src/views/index.vue | 98 ++ ruoyi-ui/src/views/login.vue | 203 ++++ ruoyi-ui/src/views/login/auth-redirect.vue | 15 + .../views/login/components/SocialSignin.vue | 72 ++ ruoyi-ui/src/views/monitor/druid/index.vue | 26 + ruoyi-ui/src/views/monitor/job/index.vue | 5 + .../src/views/monitor/logininfor/index.vue | 227 ++++ ruoyi-ui/src/views/monitor/online/index.vue | 128 +++ ruoyi-ui/src/views/monitor/operlog/index.vue | 315 ++++++ ruoyi-ui/src/views/monitor/server/index.vue | 210 ++++ ruoyi-ui/src/views/redirect.vue | 12 + ruoyi-ui/src/views/system/config/index.vue | 346 ++++++ ruoyi-ui/src/views/system/dept/index.vue | 308 ++++++ ruoyi-ui/src/views/system/dict/data.vue | 355 +++++++ ruoyi-ui/src/views/system/dict/index.vue | 350 ++++++ ruoyi-ui/src/views/system/log/index.vue | 3 + ruoyi-ui/src/views/system/menu/index.vue | 337 ++++++ ruoyi-ui/src/views/system/notice/index.vue | 345 ++++++ ruoyi-ui/src/views/system/post/index.vue | 327 ++++++ ruoyi-ui/src/views/system/role/index.vue | 548 ++++++++++ ruoyi-ui/src/views/system/user/index.vue | 663 ++++++++++++ .../src/views/system/user/profile/index.vue | 91 ++ .../views/system/user/profile/resetPwd.vue | 76 ++ .../views/system/user/profile/userAvatar.vue | 138 +++ .../views/system/user/profile/userInfo.vue | 80 ++ ruoyi-ui/src/views/tool/build/index.vue | 5 + ruoyi-ui/src/views/tool/gen/basicInfoForm.vue | 61 ++ ruoyi-ui/src/views/tool/gen/editTable.vue | 204 ++++ ruoyi-ui/src/views/tool/gen/genInfoForm.vue | 154 +++ ruoyi-ui/src/views/tool/gen/importTable.vue | 114 ++ ruoyi-ui/src/views/tool/gen/index.vue | 287 +++++ ruoyi-ui/src/views/tool/swagger/index.vue | 26 + ruoyi-ui/vue.config.js | 130 +++ ruoyi/.gitignore | 43 + ruoyi/bin/clean.bat | 12 + ruoyi/bin/package.bat | 12 + ruoyi/bin/run-tomcat.bat | 14 + ruoyi/pom.xml | 282 +++++ ruoyi/ry.sh | 86 ++ ruoyi/sql/ry_20191202.sql | 675 ++++++++++++ .../main/java/com/ruoyi/RuoYiApplication.java | 30 + .../com/ruoyi/RuoYiServletInitializer.java | 18 + .../com/ruoyi/common/constant/Constants.java | 101 ++ .../ruoyi/common/constant/GenConstants.java | 94 ++ .../com/ruoyi/common/constant/HttpStatus.java | 89 ++ .../ruoyi/common/constant/UserConstants.java | 39 + .../java/com/ruoyi/common/core/lang/UUID.java | 481 +++++++++ .../ruoyi/common/core/text/CharsetKit.java | 86 ++ .../com/ruoyi/common/core/text/Convert.java | 999 ++++++++++++++++++ .../ruoyi/common/core/text/StrFormatter.java | 92 ++ .../com/ruoyi/common/enums/HttpMethod.java | 36 + .../com/ruoyi/common/enums/UserStatus.java | 30 + .../ruoyi/common/exception/BaseException.java | 97 ++ .../common/exception/CustomException.java | 43 + .../common/exception/DemoModeException.java | 15 + .../ruoyi/common/exception/UtilException.java | 26 + .../common/exception/file/FileException.java | 19 + .../FileNameLengthLimitExceededException.java | 16 + .../file/FileSizeLimitExceededException.java | 16 + .../file/InvalidExtensionException.java | 71 ++ .../exception/user/CaptchaException.java | 16 + .../user/CaptchaExpireException.java | 16 + .../common/exception/user/UserException.java | 18 + .../user/UserPasswordNotMatchException.java | 16 + .../java/com/ruoyi/common/utils/Arith.java | 114 ++ .../com/ruoyi/common/utils/DateUtils.java | 155 +++ .../java/com/ruoyi/common/utils/IdUtils.java | 51 + .../java/com/ruoyi/common/utils/LogUtils.java | 18 + .../com/ruoyi/common/utils/MessageUtils.java | 26 + .../com/ruoyi/common/utils/SecurityUtils.java | 90 ++ .../com/ruoyi/common/utils/ServletUtils.java | 136 +++ .../com/ruoyi/common/utils/StringUtils.java | 453 ++++++++ .../java/com/ruoyi/common/utils/Threads.java | 99 ++ .../ruoyi/common/utils/VerifyCodeUtils.java | 226 ++++ .../common/utils/file/FileUploadUtils.java | 243 +++++ .../ruoyi/common/utils/file/FileUtils.java | 142 +++ .../common/utils/file/MimeTypeUtils.java | 55 + .../ruoyi/common/utils/html/EscapeUtil.java | 152 +++ .../ruoyi/common/utils/html/HTMLFilter.java | 569 ++++++++++ .../ruoyi/common/utils/http/HttpUtils.java | 248 +++++ .../ruoyi/common/utils/ip/AddressUtils.java | 41 + .../com/ruoyi/common/utils/ip/IpUtils.java | 189 ++++ .../com/ruoyi/common/utils/poi/ExcelUtil.java | 872 +++++++++++++++ .../common/utils/reflect/ReflectUtils.java | 406 +++++++ .../ruoyi/common/utils/security/Md5Utils.java | 66 ++ .../com/ruoyi/common/utils/sign/Base64.java | 291 +++++ .../common/utils/spring/SpringUtils.java | 114 ++ .../com/ruoyi/common/utils/sql/SqlUtil.java | 36 + .../ruoyi/common/utils/text/CharsetKit.java | 87 ++ .../com/ruoyi/common/utils/text/Convert.java | 999 ++++++++++++++++++ .../ruoyi/common/utils/text/StrFormatter.java | 93 ++ .../java/com/ruoyi/common/xss/XssFilter.java | 97 ++ .../xss/XssHttpServletRequestWrapper.java | 105 ++ .../framework/aspectj/DataScopeAspect.java | 160 +++ .../framework/aspectj/DataSourceAspect.java | 76 ++ .../ruoyi/framework/aspectj/LogAspect.java | 217 ++++ .../aspectj/lang/annotation/DataScope.java | 28 + .../aspectj/lang/annotation/DataSource.java | 26 + .../aspectj/lang/annotation/Excel.java | 113 ++ .../aspectj/lang/annotation/Excels.java | 18 + .../aspectj/lang/annotation/Log.java | 41 + .../aspectj/lang/enums/BusinessStatus.java | 20 + .../aspectj/lang/enums/BusinessType.java | 59 ++ .../aspectj/lang/enums/DataSourceType.java | 19 + .../aspectj/lang/enums/OperatorType.java | 24 + .../framework/config/ApplicationConfig.java | 30 + .../ruoyi/framework/config/DruidConfig.java | 126 +++ .../config/FastJson2JsonRedisSerializer.java | 69 ++ .../ruoyi/framework/config/FilterConfig.java | 46 + .../com/ruoyi/framework/config/GenConfig.java | 66 ++ .../ruoyi/framework/config/MyBatisConfig.java | 105 ++ .../ruoyi/framework/config/RedisConfig.java | 43 + .../framework/config/ResourcesConfig.java | 41 + .../ruoyi/framework/config/RuoYiConfig.java | 116 ++ .../framework/config/SecurityConfig.java | 134 +++ .../ruoyi/framework/config/ServerConfig.java | 32 + .../ruoyi/framework/config/SwaggerConfig.java | 113 ++ .../framework/config/ThreadPoolConfig.java | 62 ++ .../config/properties/DruidProperties.java | 77 ++ .../datasource/DynamicDataSource.java | 26 + .../DynamicDataSourceContextHolder.java | 45 + .../interceptor/RepeatSubmitInterceptor.java | 55 + .../interceptor/annotation/RepeatSubmit.java | 23 + .../impl/SameUrlDataInterceptor.java | 94 ++ .../ruoyi/framework/manager/AsyncManager.java | 55 + .../framework/manager/ShutdownManager.java | 39 + .../manager/factory/AsyncFactory.java | 101 ++ .../com/ruoyi/framework/redis/RedisCache.java | 207 ++++ .../ruoyi/framework/security/LoginUser.java | 228 ++++ .../filter/JwtAuthenticationTokenFilter.java | 44 + .../handle/AuthenticationEntryPointImpl.java | 34 + .../handle/LogoutSuccessHandlerImpl.java | 53 + .../security/service/PermissionService.java | 169 +++ .../security/service/SysLoginService.java | 88 ++ .../service/SysPermissionService.java | 66 ++ .../security/service/TokenService.java | 220 ++++ .../service/UserDetailsServiceImpl.java | 60 ++ .../web/controller/BaseController.java | 85 ++ .../framework/web/domain/AjaxResult.java | 148 +++ .../framework/web/domain/BaseEntity.java | 156 +++ .../ruoyi/framework/web/domain/Server.java | 241 +++++ .../framework/web/domain/TreeSelect.java | 77 ++ .../framework/web/domain/server/Cpu.java | 101 ++ .../framework/web/domain/server/Jvm.java | 122 +++ .../framework/web/domain/server/Mem.java | 61 ++ .../framework/web/domain/server/Sys.java | 84 ++ .../framework/web/domain/server/SysFile.java | 114 ++ .../web/exception/GlobalExceptionHandler.java | 117 ++ .../ruoyi/framework/web/page/PageDomain.java | 69 ++ .../framework/web/page/TableDataInfo.java | 85 ++ .../framework/web/page/TableSupport.java | 49 + .../project/common/CaptchaController.java | 62 ++ .../project/common/CommonController.java | 89 ++ .../monitor/controller/ServerController.java | 28 + .../controller/SysLogininforController.java | 67 ++ .../controller/SysOperlogController.java | 66 ++ .../controller/SysUserOnlineController.java | 92 ++ .../project/monitor/domain/SysLogininfor.java | 142 +++ .../project/monitor/domain/SysOperLog.java | 253 +++++ .../project/monitor/domain/SysUserOnline.java | 113 ++ .../monitor/mapper/SysLogininforMapper.java | 42 + .../monitor/mapper/SysOperLogMapper.java | 48 + .../service/ISysLogininforService.java | 40 + .../monitor/service/ISysOperLogService.java | 48 + .../impl/SysLogininforServiceImpl.java | 65 ++ .../service/impl/SysOperLogServiceImpl.java | 75 ++ .../controller/SysConfigController.java | 121 +++ .../system/controller/SysDeptController.java | 134 +++ .../controller/SysDictDataController.java | 109 ++ .../controller/SysDictTypeController.java | 119 +++ .../system/controller/SysLoginController.java | 94 ++ .../system/controller/SysMenuController.java | 141 +++ .../controller/SysNoticeController.java | 92 ++ .../system/controller/SysPostController.java | 130 +++ .../controller/SysProfileController.java | 127 +++ .../system/controller/SysRoleController.java | 154 +++ .../system/controller/SysUserController.java | 198 ++++ .../project/system/domain/SysConfig.java | 111 ++ .../ruoyi/project/system/domain/SysDept.java | 202 ++++ .../project/system/domain/SysDictData.java | 176 +++ .../project/system/domain/SysDictType.java | 94 ++ .../ruoyi/project/system/domain/SysMenu.java | 217 ++++ .../project/system/domain/SysNotice.java | 100 ++ .../ruoyi/project/system/domain/SysPost.java | 123 +++ .../ruoyi/project/system/domain/SysRole.java | 197 ++++ .../project/system/domain/SysRoleDept.java | 46 + .../project/system/domain/SysRoleMenu.java | 46 + .../ruoyi/project/system/domain/SysUser.java | 324 ++++++ .../project/system/domain/SysUserPost.java | 46 + .../project/system/domain/SysUserRole.java | 46 + .../project/system/domain/vo/MetaVo.java | 49 + .../project/system/domain/vo/RouterVo.java | 133 +++ .../system/mapper/SysConfigMapper.java | 68 ++ .../project/system/mapper/SysDeptMapper.java | 109 ++ .../system/mapper/SysDictDataMapper.java | 95 ++ .../system/mapper/SysDictTypeMapper.java | 85 ++ .../project/system/mapper/SysMenuMapper.java | 116 ++ .../system/mapper/SysNoticeMapper.java | 60 ++ .../project/system/mapper/SysPostMapper.java | 99 ++ .../system/mapper/SysRoleDeptMapper.java | 44 + .../project/system/mapper/SysRoleMapper.java | 107 ++ .../system/mapper/SysRoleMenuMapper.java | 36 + .../project/system/mapper/SysUserMapper.java | 113 ++ .../system/mapper/SysUserPostMapper.java | 44 + .../system/mapper/SysUserRoleMapper.java | 62 ++ .../system/service/ISysConfigService.java | 76 ++ .../system/service/ISysDeptService.java | 101 ++ .../system/service/ISysDictDataService.java | 77 ++ .../system/service/ISysDictTypeService.java | 83 ++ .../system/service/ISysMenuService.java | 136 +++ .../system/service/ISysNoticeService.java | 60 ++ .../system/service/ISysPostService.java | 100 ++ .../system/service/ISysRoleService.java | 131 +++ .../system/service/ISysUserOnlineService.java | 48 + .../system/service/ISysUserService.java | 167 +++ .../service/impl/SysConfigServiceImpl.java | 129 +++ .../service/impl/SysDeptServiceImpl.java | 294 ++++++ .../service/impl/SysDictDataServiceImpl.java | 116 ++ .../service/impl/SysDictTypeServiceImpl.java | 141 +++ .../service/impl/SysMenuServiceImpl.java | 381 +++++++ .../service/impl/SysNoticeServiceImpl.java | 91 ++ .../service/impl/SysPostServiceImpl.java | 177 ++++ .../service/impl/SysRoleServiceImpl.java | 311 ++++++ .../impl/SysUserOnlineServiceImpl.java | 95 ++ .../service/impl/SysUserServiceImpl.java | 455 ++++++++ .../tool/gen/controller/GenController.java | 185 ++++ .../project/tool/gen/domain/GenTable.java | 269 +++++ .../tool/gen/domain/GenTableColumn.java | 368 +++++++ .../tool/gen/mapper/GenTableColumnMapper.java | 52 + .../tool/gen/mapper/GenTableMapper.java | 76 ++ .../service/GenTableColumnServiceImpl.java | 68 ++ .../tool/gen/service/GenTableServiceImpl.java | 341 ++++++ .../gen/service/IGenTableColumnService.java | 44 + .../tool/gen/service/IGenTableService.java | 99 ++ .../ruoyi/project/tool/gen/util/GenUtils.java | 238 +++++ .../tool/gen/util/VelocityInitializer.java | 35 + .../project/tool/gen/util/VelocityUtils.java | 281 +++++ .../project/tool/swagger/TestController.java | 175 +++ .../src/main/resources/application-druid.yml | 57 + ruoyi/src/main/resources/application.yml | 122 +++ ruoyi/src/main/resources/banner.txt | 24 + .../main/resources/i18n/messages.properties | 36 + ruoyi/src/main/resources/logback.xml | 93 ++ .../mybatis/monitor/SysLogininforMapper.xml | 56 + .../mybatis/monitor/SysOperLogMapper.xml | 82 ++ .../main/resources/mybatis/mybatis-config.xml | 15 + .../mybatis/system/SysConfigMapper.xml | 112 ++ .../mybatis/system/SysDeptMapper.xml | 151 +++ .../mybatis/system/SysDictDataMapper.xml | 123 +++ .../mybatis/system/SysDictTypeMapper.xml | 105 ++ .../mybatis/system/SysMenuMapper.xml | 174 +++ .../mybatis/system/SysNoticeMapper.xml | 89 ++ .../mybatis/system/SysPostMapper.xml | 122 +++ .../mybatis/system/SysRoleDeptMapper.xml | 34 + .../mybatis/system/SysRoleMapper.xml | 144 +++ .../mybatis/system/SysRoleMenuMapper.xml | 27 + .../mybatis/system/SysUserMapper.xml | 182 ++++ .../mybatis/system/SysUserPostMapper.xml | 34 + .../mybatis/system/SysUserRoleMapper.xml | 44 + .../mybatis/tool/GenTableColumnMapper.xml | 120 +++ .../resources/mybatis/tool/GenTableMapper.xml | 181 ++++ .../main/resources/vm/java/controller.java.vm | 103 ++ .../src/main/resources/vm/java/domain.java.vm | 76 ++ .../src/main/resources/vm/java/mapper.java.vm | 61 ++ .../main/resources/vm/java/service.java.vm | 61 ++ .../resources/vm/java/serviceImpl.java.vm | 109 ++ ruoyi/src/main/resources/vm/js/api.js.vm | 53 + ruoyi/src/main/resources/vm/sql/sql.vm | 22 + ruoyi/src/main/resources/vm/vue/index.vue.vm | 439 ++++++++ ruoyi/src/main/resources/vm/xml/mapper.xml.vm | 95 ++ 447 files changed, 43037 insertions(+) create mode 100644 LICENSE create mode 100644 README.md create mode 100644 ruoyi-ui/.editorconfig create mode 100644 ruoyi-ui/.env.development create mode 100644 ruoyi-ui/.env.production create mode 100644 ruoyi-ui/.env.staging create mode 100644 ruoyi-ui/.eslintignore create mode 100644 ruoyi-ui/.eslintrc.js create mode 100644 ruoyi-ui/.gitignore create mode 100644 ruoyi-ui/README.md create mode 100644 ruoyi-ui/babel.config.js create mode 100644 ruoyi-ui/bin/package.bat create mode 100644 ruoyi-ui/bin/run-web.bat create mode 100644 ruoyi-ui/build/index.js create mode 100644 ruoyi-ui/package.json create mode 100644 ruoyi-ui/public/favicon.ico create mode 100644 ruoyi-ui/public/index.html create mode 100644 ruoyi-ui/src/App.vue create mode 100644 ruoyi-ui/src/api/login.js create mode 100644 ruoyi-ui/src/api/menu.js create mode 100644 ruoyi-ui/src/api/monitor/logininfor.js create mode 100644 ruoyi-ui/src/api/monitor/online.js create mode 100644 ruoyi-ui/src/api/monitor/operlog.js create mode 100644 ruoyi-ui/src/api/monitor/server.js create mode 100644 ruoyi-ui/src/api/system/config.js create mode 100644 ruoyi-ui/src/api/system/dept.js create mode 100644 ruoyi-ui/src/api/system/dict/data.js create mode 100644 ruoyi-ui/src/api/system/dict/type.js create mode 100644 ruoyi-ui/src/api/system/menu.js create mode 100644 ruoyi-ui/src/api/system/notice.js create mode 100644 ruoyi-ui/src/api/system/post.js create mode 100644 ruoyi-ui/src/api/system/role.js create mode 100644 ruoyi-ui/src/api/system/user.js create mode 100644 ruoyi-ui/src/api/tool/gen.js create mode 100644 ruoyi-ui/src/assets/401_images/401.gif create mode 100644 ruoyi-ui/src/assets/404_images/404.png create mode 100644 ruoyi-ui/src/assets/404_images/404_cloud.png create mode 100644 ruoyi-ui/src/assets/icons/index.js create mode 100644 ruoyi-ui/src/assets/icons/svg/404.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/bug.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/build.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/chart.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/clipboard.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/code.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/component.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/dashboard.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/date.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/dict.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/documentation.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/download.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/drag.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/druid.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/edit.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/education.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/email.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/example.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/excel.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/exit-fullscreen.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/eye-open.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/eye.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/form.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/fullscreen.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/guide.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/icon.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/international.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/job.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/language.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/link.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/list.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/lock.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/log.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/logininfor.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/message.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/money.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/monitor.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/nested.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/online.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/password.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/pdf.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/people.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/peoples.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/phone.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/post.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/qq.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/search.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/server.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/shopping.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/size.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/skill.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/star.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/swagger.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/system.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/tab.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/table.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/theme.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/tool.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/tree-table.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/tree.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/user.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/validCode.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/wechat.svg create mode 100644 ruoyi-ui/src/assets/icons/svg/zip.svg create mode 100644 ruoyi-ui/src/assets/icons/svgo.yml create mode 100644 ruoyi-ui/src/assets/image/login-background.jpg create mode 100644 ruoyi-ui/src/assets/image/profile.jpg create mode 100644 ruoyi-ui/src/assets/logo/logo.png create mode 100644 ruoyi-ui/src/assets/styles/btn.scss create mode 100644 ruoyi-ui/src/assets/styles/element-ui.scss create mode 100644 ruoyi-ui/src/assets/styles/element-variables.scss create mode 100644 ruoyi-ui/src/assets/styles/index.scss create mode 100644 ruoyi-ui/src/assets/styles/mixin.scss create mode 100644 ruoyi-ui/src/assets/styles/ruoyi.scss create mode 100644 ruoyi-ui/src/assets/styles/sidebar.scss create mode 100644 ruoyi-ui/src/assets/styles/transition.scss create mode 100644 ruoyi-ui/src/assets/styles/variables.scss create mode 100644 ruoyi-ui/src/components/Breadcrumb/index.vue create mode 100644 ruoyi-ui/src/components/Editor/index.vue create mode 100644 ruoyi-ui/src/components/Hamburger/index.vue create mode 100644 ruoyi-ui/src/components/HeaderSearch/index.vue create mode 100644 ruoyi-ui/src/components/IconSelect/index.vue create mode 100644 ruoyi-ui/src/components/IconSelect/requireIcons.js create mode 100644 ruoyi-ui/src/components/Pagination/index.vue create mode 100644 ruoyi-ui/src/components/PanThumb/index.vue create mode 100644 ruoyi-ui/src/components/RightPanel/index.vue create mode 100644 ruoyi-ui/src/components/RuoYi/index.vue create mode 100644 ruoyi-ui/src/components/Screenfull/index.vue create mode 100644 ruoyi-ui/src/components/SizeSelect/index.vue create mode 100644 ruoyi-ui/src/components/SvgIcon/index.vue create mode 100644 ruoyi-ui/src/components/ThemePicker/index.vue create mode 100644 ruoyi-ui/src/directive/permission/hasPermi.js create mode 100644 ruoyi-ui/src/directive/permission/hasRole.js create mode 100644 ruoyi-ui/src/directive/permission/index.js create mode 100644 ruoyi-ui/src/layout/components/AppMain.vue create mode 100644 ruoyi-ui/src/layout/components/Navbar.vue create mode 100644 ruoyi-ui/src/layout/components/Settings/index.vue create mode 100644 ruoyi-ui/src/layout/components/Sidebar/FixiOSBug.js create mode 100644 ruoyi-ui/src/layout/components/Sidebar/Item.vue create mode 100644 ruoyi-ui/src/layout/components/Sidebar/Link.vue create mode 100644 ruoyi-ui/src/layout/components/Sidebar/Logo.vue create mode 100644 ruoyi-ui/src/layout/components/Sidebar/SidebarItem.vue create mode 100644 ruoyi-ui/src/layout/components/Sidebar/index.vue create mode 100644 ruoyi-ui/src/layout/components/TagsView/ScrollPane.vue create mode 100644 ruoyi-ui/src/layout/components/TagsView/index.vue create mode 100644 ruoyi-ui/src/layout/components/index.js create mode 100644 ruoyi-ui/src/layout/index.vue create mode 100644 ruoyi-ui/src/layout/mixin/ResizeHandler.js create mode 100644 ruoyi-ui/src/main.js create mode 100644 ruoyi-ui/src/permission.js create mode 100644 ruoyi-ui/src/router/index.js create mode 100644 ruoyi-ui/src/settings.js create mode 100644 ruoyi-ui/src/store/getters.js create mode 100644 ruoyi-ui/src/store/index.js create mode 100644 ruoyi-ui/src/store/modules/app.js create mode 100644 ruoyi-ui/src/store/modules/permission.js create mode 100644 ruoyi-ui/src/store/modules/settings.js create mode 100644 ruoyi-ui/src/store/modules/tagsView.js create mode 100644 ruoyi-ui/src/store/modules/user.js create mode 100644 ruoyi-ui/src/utils/auth.js create mode 100644 ruoyi-ui/src/utils/index.js create mode 100644 ruoyi-ui/src/utils/jsencrypt.js create mode 100644 ruoyi-ui/src/utils/permission.js create mode 100644 ruoyi-ui/src/utils/request.js create mode 100644 ruoyi-ui/src/utils/ruoyi.js create mode 100644 ruoyi-ui/src/utils/scroll-to.js create mode 100644 ruoyi-ui/src/utils/validate.js create mode 100644 ruoyi-ui/src/utils/zipdownload.js create mode 100644 ruoyi-ui/src/views/components/icons/element-icons.js create mode 100644 ruoyi-ui/src/views/components/icons/index.vue create mode 100644 ruoyi-ui/src/views/components/icons/svg-icons.js create mode 100644 ruoyi-ui/src/views/dashboard/BarChart.vue create mode 100644 ruoyi-ui/src/views/dashboard/LineChart.vue create mode 100644 ruoyi-ui/src/views/dashboard/PanelGroup.vue create mode 100644 ruoyi-ui/src/views/dashboard/PieChart.vue create mode 100644 ruoyi-ui/src/views/dashboard/RaddarChart.vue create mode 100644 ruoyi-ui/src/views/dashboard/mixins/resize.js create mode 100644 ruoyi-ui/src/views/error/401.vue create mode 100644 ruoyi-ui/src/views/error/404.vue create mode 100644 ruoyi-ui/src/views/index.vue create mode 100644 ruoyi-ui/src/views/login.vue create mode 100644 ruoyi-ui/src/views/login/auth-redirect.vue create mode 100644 ruoyi-ui/src/views/login/components/SocialSignin.vue create mode 100644 ruoyi-ui/src/views/monitor/druid/index.vue create mode 100644 ruoyi-ui/src/views/monitor/job/index.vue create mode 100644 ruoyi-ui/src/views/monitor/logininfor/index.vue create mode 100644 ruoyi-ui/src/views/monitor/online/index.vue create mode 100644 ruoyi-ui/src/views/monitor/operlog/index.vue create mode 100644 ruoyi-ui/src/views/monitor/server/index.vue create mode 100644 ruoyi-ui/src/views/redirect.vue create mode 100644 ruoyi-ui/src/views/system/config/index.vue create mode 100644 ruoyi-ui/src/views/system/dept/index.vue create mode 100644 ruoyi-ui/src/views/system/dict/data.vue create mode 100644 ruoyi-ui/src/views/system/dict/index.vue create mode 100644 ruoyi-ui/src/views/system/log/index.vue create mode 100644 ruoyi-ui/src/views/system/menu/index.vue create mode 100644 ruoyi-ui/src/views/system/notice/index.vue create mode 100644 ruoyi-ui/src/views/system/post/index.vue create mode 100644 ruoyi-ui/src/views/system/role/index.vue create mode 100644 ruoyi-ui/src/views/system/user/index.vue create mode 100644 ruoyi-ui/src/views/system/user/profile/index.vue create mode 100644 ruoyi-ui/src/views/system/user/profile/resetPwd.vue create mode 100644 ruoyi-ui/src/views/system/user/profile/userAvatar.vue create mode 100644 ruoyi-ui/src/views/system/user/profile/userInfo.vue create mode 100644 ruoyi-ui/src/views/tool/build/index.vue create mode 100644 ruoyi-ui/src/views/tool/gen/basicInfoForm.vue create mode 100644 ruoyi-ui/src/views/tool/gen/editTable.vue create mode 100644 ruoyi-ui/src/views/tool/gen/genInfoForm.vue create mode 100644 ruoyi-ui/src/views/tool/gen/importTable.vue create mode 100644 ruoyi-ui/src/views/tool/gen/index.vue create mode 100644 ruoyi-ui/src/views/tool/swagger/index.vue create mode 100644 ruoyi-ui/vue.config.js create mode 100644 ruoyi/.gitignore create mode 100644 ruoyi/bin/clean.bat create mode 100644 ruoyi/bin/package.bat create mode 100644 ruoyi/bin/run-tomcat.bat create mode 100644 ruoyi/pom.xml create mode 100644 ruoyi/ry.sh create mode 100644 ruoyi/sql/ry_20191202.sql create mode 100644 ruoyi/src/main/java/com/ruoyi/RuoYiApplication.java create mode 100644 ruoyi/src/main/java/com/ruoyi/RuoYiServletInitializer.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/constant/Constants.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/constant/GenConstants.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/constant/HttpStatus.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/constant/UserConstants.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/core/lang/UUID.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/core/text/CharsetKit.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/core/text/Convert.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/core/text/StrFormatter.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/enums/HttpMethod.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/enums/UserStatus.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/BaseException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/CustomException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/DemoModeException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/UtilException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/file/FileException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/file/FileNameLengthLimitExceededException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/file/FileSizeLimitExceededException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/file/InvalidExtensionException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/user/CaptchaException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/user/CaptchaExpireException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/user/UserException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/exception/user/UserPasswordNotMatchException.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/Arith.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/DateUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/IdUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/LogUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/MessageUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/SecurityUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/ServletUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/StringUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/Threads.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/VerifyCodeUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/file/FileUploadUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/file/FileUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/file/MimeTypeUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/html/EscapeUtil.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/html/HTMLFilter.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/http/HttpUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/ip/AddressUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/ip/IpUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/poi/ExcelUtil.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/reflect/ReflectUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/security/Md5Utils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/sign/Base64.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/spring/SpringUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/sql/SqlUtil.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/text/CharsetKit.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/text/Convert.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/utils/text/StrFormatter.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/xss/XssFilter.java create mode 100644 ruoyi/src/main/java/com/ruoyi/common/xss/XssHttpServletRequestWrapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/DataScopeAspect.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/DataSourceAspect.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/LogAspect.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataScope.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/DataSource.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excel.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Excels.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/annotation/Log.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessStatus.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/enums/BusinessType.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/enums/DataSourceType.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/aspectj/lang/enums/OperatorType.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/ApplicationConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/DruidConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/FastJson2JsonRedisSerializer.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/FilterConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/GenConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/MyBatisConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/RedisConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/ResourcesConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/RuoYiConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/SecurityConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/ServerConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/SwaggerConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/ThreadPoolConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/config/properties/DruidProperties.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/datasource/DynamicDataSource.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/datasource/DynamicDataSourceContextHolder.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/interceptor/RepeatSubmitInterceptor.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/interceptor/annotation/RepeatSubmit.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/interceptor/impl/SameUrlDataInterceptor.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/manager/AsyncManager.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/manager/ShutdownManager.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/manager/factory/AsyncFactory.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/redis/RedisCache.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/LoginUser.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/filter/JwtAuthenticationTokenFilter.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/handle/AuthenticationEntryPointImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/handle/LogoutSuccessHandlerImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/service/PermissionService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/service/SysLoginService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/service/SysPermissionService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/service/TokenService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/security/service/UserDetailsServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/controller/BaseController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/AjaxResult.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/BaseEntity.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/Server.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/TreeSelect.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/server/Cpu.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/server/Jvm.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/server/Mem.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/server/Sys.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/domain/server/SysFile.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/exception/GlobalExceptionHandler.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/page/PageDomain.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/page/TableDataInfo.java create mode 100644 ruoyi/src/main/java/com/ruoyi/framework/web/page/TableSupport.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/common/CaptchaController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/common/CommonController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/controller/ServerController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/controller/SysLogininforController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/controller/SysOperlogController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/controller/SysUserOnlineController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/domain/SysLogininfor.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/domain/SysOperLog.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/domain/SysUserOnline.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/mapper/SysLogininforMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/mapper/SysOperLogMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/service/ISysLogininforService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/service/ISysOperLogService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/service/impl/SysLogininforServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/monitor/service/impl/SysOperLogServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysConfigController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDeptController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDictDataController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysDictTypeController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysLoginController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysMenuController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysNoticeController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysPostController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysProfileController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysRoleController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/controller/SysUserController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysConfig.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysDept.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysDictData.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysDictType.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysMenu.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysNotice.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysPost.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysRole.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysRoleDept.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysRoleMenu.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysUser.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysUserPost.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/SysUserRole.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/vo/MetaVo.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/domain/vo/RouterVo.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysConfigMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysDeptMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysDictDataMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysDictTypeMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysMenuMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysNoticeMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysPostMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysRoleDeptMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysRoleMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysRoleMenuMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysUserMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysUserPostMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/mapper/SysUserRoleMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysConfigService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysDeptService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysDictDataService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysDictTypeService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysMenuService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysNoticeService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysPostService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysRoleService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysUserOnlineService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/ISysUserService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysConfigServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDeptServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDictDataServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysDictTypeServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysMenuServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysNoticeServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysPostServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysRoleServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysUserOnlineServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/system/service/impl/SysUserServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/controller/GenController.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/domain/GenTable.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/domain/GenTableColumn.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableColumnMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/mapper/GenTableMapper.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/GenTableColumnServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/GenTableServiceImpl.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableColumnService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/service/IGenTableService.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/util/GenUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/util/VelocityInitializer.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/gen/util/VelocityUtils.java create mode 100644 ruoyi/src/main/java/com/ruoyi/project/tool/swagger/TestController.java create mode 100644 ruoyi/src/main/resources/application-druid.yml create mode 100644 ruoyi/src/main/resources/application.yml create mode 100644 ruoyi/src/main/resources/banner.txt create mode 100644 ruoyi/src/main/resources/i18n/messages.properties create mode 100644 ruoyi/src/main/resources/logback.xml create mode 100644 ruoyi/src/main/resources/mybatis/monitor/SysLogininforMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/monitor/SysOperLogMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/mybatis-config.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysConfigMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysDeptMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysDictDataMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysDictTypeMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysMenuMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysNoticeMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysPostMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysRoleDeptMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysRoleMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysRoleMenuMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysUserMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysUserPostMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/system/SysUserRoleMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/tool/GenTableColumnMapper.xml create mode 100644 ruoyi/src/main/resources/mybatis/tool/GenTableMapper.xml create mode 100644 ruoyi/src/main/resources/vm/java/controller.java.vm create mode 100644 ruoyi/src/main/resources/vm/java/domain.java.vm create mode 100644 ruoyi/src/main/resources/vm/java/mapper.java.vm create mode 100644 ruoyi/src/main/resources/vm/java/service.java.vm create mode 100644 ruoyi/src/main/resources/vm/java/serviceImpl.java.vm create mode 100644 ruoyi/src/main/resources/vm/js/api.js.vm create mode 100644 ruoyi/src/main/resources/vm/sql/sql.vm create mode 100644 ruoyi/src/main/resources/vm/vue/index.vue.vm create mode 100644 ruoyi/src/main/resources/vm/xml/mapper.xml.vm diff --git a/LICENSE b/LICENSE new file mode 100644 index 000000000..8564f294c --- /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 000000000..0d0985688 --- /dev/null +++ b/README.md @@ -0,0 +1,84 @@ +## 平台简介 + +一直想做一款后台管理系统,看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套后台系统。如此有了若依。她可以用于所有的Web应用程序,如网站管理后台,网站会员中心,CMS,CRM,OA。所有前端后台代码封装过后十分精简易上手,出错概率低。同时支持移动客户端访问。系统会陆续更新一些实用功能。 + +性别男,若依是给还没有出生女儿取的名字(寓意:你若不离不弃,我必生死相依) + +参考后台模板[vue-element-admin](https://github.com/PanJiaChen/vue-element-admin) + +> 阿里云服务器89元/年,双12年末特惠,爆款产品限时1折 :[点我进入](https://www.aliyun.com/minisite/goods?userCode=brki8iof&share_source=copy_link) + +> 如需不分离应用,请移步 [RuoYi](https://gitee.com/y_project/RuoYi) `(保持同步更新)`,如需其他版本,请移步 [项目扩展](http://doc.ruoyi.vip/ruoyi/document/xmkz.html) `(不定时更新)` + +> 阿里云通用云产品1888优惠券 :[点我领取](https://promotion.aliyun.com/ntms/yunparter/invite.html?userCode=brki8iof) 腾讯云通用云产品2860优惠券 :[点我领取](https://cloud.tencent.com/redirect.php?redirect=1025&cps_key=198c8df2ed259157187173bc7f4f32fd&from=console) `(仅限新用户)` + +> 阿里云Hi拼购 限量爆款 低至199元/年 [点我进入](https://www.aliyun.com/acts/hi-group-buying?userCode=brki8iof) `(仅限新用户)` + +## 内置功能 + +1. 用户管理:用户是系统操作者,该功能主要完成系统用户配置。 +2. 部门管理:配置系统组织机构(公司、部门、小组),树结构展现支持数据权限。 +3. 岗位管理:配置系统用户所属担任职务。 +4. 菜单管理:配置系统菜单,操作权限,按钮权限标识等。 +5. 角色管理:角色菜单权限分配、设置角色按机构进行数据范围权限划分。 +6. 字典管理:对系统中经常使用的一些较为固定的数据进行维护。 +7. 参数管理:对系统动态配置常用参数。 +8. 通知公告:系统通知公告信息发布维护。 +9. 操作日志:系统正常操作日志记录和查询;系统异常信息日志记录和查询。 +10. 登录日志:系统登录日志记录查询包含登录异常。 +11. 在线用户:当前系统中活跃用户状态监控。 +12. 定时任务:在线(添加、修改、删除)任务调度包含执行结果日志。 +13. 代码生成:前后端代码的生成(java、html、xml、sql)支持CRUD下载 。 +14. 系统接口:根据业务代码自动生成相关的api接口文档。 +15. 服务监控:监视当前系统CPU、内存、磁盘、堆栈等相关信息。 +16. 在线构建器:拖动表单元素生成相应的HTML代码。 +17. 连接池监视:监视当前系统数据库连接池状态,可进行分析SQL找出系统性能瓶颈。 +## 在线体验 +> admin/admin123 +> 陆陆续续收到一些打赏,为了更好的体验已用于演示服务器升级。谢谢各位小伙伴。 + +演示地址:http://vue.ruoyi.vip + +文档地址:http://doc.ruoyi.vip + +## 演示图 + +
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
![]() |
+ ![]() |
+
!@OOpJ2XnO#@UYA-med*JM&7^WvSjSp+i-Fq|l!5{M@KBr&qVS0Av zoRYzLt$_32dd_PuIREC%d5s6>pYvQ$SGe%V=Ym?og}Xf$R2N*hapr=`gA12=E-EWr zJm+&!DdFPDo{Mq|E*|}J_ROAh-+Im|$evZQz0?(T=~~Stjkk<4Z!dmYbLsY(OB#PK znb=-3<2|qI%Veo*{_)Q#+gLOEwWl0&O`T&;xz06l=RM_l*4TURN#D0d{<$ar2iDHC zo_pz?%q6SZt9rVZpVnOd{pRYcJy*kHuST4@8awx@n(sC1+-tXtu1ASBy>kUx`pX)zPF(2^UU2;Cj_xwYf zn{om-&)GD!+A@f-++a@dVhPwBu;!+m!L7`>6W_nNJkyqG8Sg1J1|JLe&Nh}?g`zi~ znapT9!@#^Dr1R~~<-XzDYH!`Y!YJy(Aam-dg*j92T)*XKJ-5xhA(-mX9>ciTm+AhM z5&;Lsgv)pD@tQRVGT*now{?;b^Mo76SsB;so_Lj;zb4i1|6*064GP{&e)+0SH}{_0 zk?ObS3d8?T!pyuv4EzFqC+2Qgw~gWBT6v>vruIov>w9>lH$6~oaOBH7DHWtB z$5wui` Qm(+3TM8{1a T`D`Ft;D_G$i~{qNc9M=zJod%p0WFqZ)1TE3TB_f%Hyd&X7#dUM`0?t*<-L78?_FBmyDRTlcddKpa_-H2hi4z+-hZom|D*5ur+K_w4)1^d zd(R;M;qklIjERi@^geLR|G;(rDaUl-jddTm *1uV=CpN9& zg|z%9rTb3>9T ^nl~s+lEH{oT_M{qNdI+O|i-h29dO` z$yq%@B{hyyX2;5jOfO~Nm^Ei G9`lv4 zE|N^=p6j9eHSRyFMCqod9Skb5N|rkUXPwb8v}84?yzF5bY#{pO%%p{L&n|Qi%8Swz z(VWD?IBi$4m%q~$PoI@(3kysyo?9H%ukeCPgJJ%Ls0kC7CW|TES`zklOYX0->=@HD z)eCF0%@5qtDgHU{C(DC;!TpQAak +2hmPtWt+z3uJo9mTKjo!!0t{rv;Y-12^Vc6@w%VzPGpxjj2S zKfkcpd%oY^U0+|{*qnX;+}_>a-#<9qE$_c?&(F^ vyCIJS?`#};~tZ19dj7Xo~?M?XY=jFVorm98c!y;h-Idf zu>^25av+x@E)2{J3mN{v)7iYm%h&0=f~GT-)e%!3{}$;^YSotNKat|I^o62|P(uk< zgOZHc)S}aGt6a6ZmANK(s`9-pKbtpu#!QWMuOxQ8uUOipWFMv}SJ~8T W0+s-cFxN%A3%JGwT7tC70_jozixdpFZ z929%d|M6YZ#PtlzzVyo7S;6r9*SD>|MHa*#aFk<<<67`xfi(YT8N-qegQUfsBA*?Y zTMd=fB4lm1dH&E^a>7(4@V}_d&kG6~43ZJM7%N`QKVv4wG>5C $;D*l&WioWYVn90DFADI2)gAZrd#1A@8E7qiJn%e6&|mH zt#d|V$+tf 1md_I4bZ|A*9F)c{do(lsD!$OAtD9LqAJ2bggoYI=|_`gWE(^OD$U6OOu z*+ZpaMaZv`h?rAr%1-}XqjT $tS!@`SeyjfS~G z(F`0-on1;5Ray1j6Ek|NCrz7fTEQ`O#@u;1T#|FLMdmLv(duhxUA|UBOJq$0W5>E} znqr%p__l9bxp=kM-nDWYCvG{sY~?hDLnr4R-POJI{Ivbk7=? tZ?Ye$@{V$u?eret*-Dev6syQ#uaPKvl-0*RR(Q>ge ziMJ`YpBa0bcz!7mvlZgX+`QD(^%~~~!K_I(j+c41o)U~@m>#qBhDemDj^(PLvr3Ii z*wz|veRZL!b@$U0@tq|vQ}#M;^}n|=is_H9$`6jK2U&{)bbEF@NR;T7G+!pMbJLTP zGmNwEo!Pnh`S}IT-EzLWw!FN&BA9x~_5LbnCg$@(H52}CXR=|FeQ|65aR$BGS07lv z$cHogZI`d+n8e_?C69g8@vtTVH;soaB3j!MS|!p}U`ehTiS-w3f5bFu9jowa5E4>- z+-ouKLPFoX*blc_OP?HnJi&m$Qnts1YkP8uPEdNvq?tcCo=!25(%_gBe9y^YTFfn@ z1HAramQN;$dTBmONSXK2YewV^iP))GhmNMrDY>>YWR^ujCMdb?be&wsruAY$i&)l+ zg&k_EUM%V{d-Y=RfrFecmrO}olwMq+B#6{blVM A zeEpv3!NZML??2Vt&~xY9vo|U$duPA>B!BSq?MI*Q>22wK_4DbAUq^p0_h)4Cy0b;F z#*FR$0tR;RsO*T&IWBEnZ+eR>E?$%9{ce@SGV}N%k9c|Q|3x;HT}k#GI`un!*cFn_ zMCs+|c~uB6b;`P1^=OO3rnBqfoNQaY*^M)GStT?6m8_cLbkTsZFQ|0ul&H&V*V-JB zVrS62;T7vGX5C$^vvF#UuB48n$vW-CUHfj8n&$e3alZamG?(kCzWu>%9Oi~SKf <_MuvoXi88^47VVN1P1Py~#Fd0qHYGgbygs$yVV8H$ibKsB zdorAw)SkF4uGDopp};Hp&f-bGan6dSF3S%bk0*NQ?Q~)eSS6s$W$aej)S$_BQng)U z*@MN?)MW%xxP1OCU%(YV>F2$f(NWu O<2Y!e{aIl`IA1GYw}Gk+Lh5UF)zz`xn+k}+M;Ed5*9bst_%O}y~yWy79z+gC{)Ns>}nnd5U| z`Ts3BLEY_}ZaiC&t8h*4wgSWXAS1^uFIiu67e0y$VdQ*o#CTx))(zaQtl|zI8uz7z z1~Ia5&Pj0CBXcf#ohduRg*RMW1_B#6* 3+bSy&m^c|NC~{RQ9p$c+k8@cJt+VJJ>74d$^s-wrg(L%W-Xn zv(7guukya8|5tkj^mcJf m6*luCHFWQ@!u`K3mS4yXQIme7^gh zHQ)XEqM!PYo&Wj#Ubg0)*B|*c`9Gg~KCa{X_v^GXlf(k!=o{~a8UC=caD3}w4qH@x z<1_2uHIBRfFH~r7o1M@+C4EQOl|G+S&i7yDOkm(yr kj<|+c8RB8g8B-Em!B+{W;i}z`eV!}z|A?ErRSrtp3Pmk@?#!nDmNC+ zy^_N7QQ&AmpFn9=OtYkaWV1=!C(flymdxk*aKb}Ph^cN$>T@Qy)BGVDggp)~{S)DN zCQ0h^j1xY~jHaJFlV qx3v+XC(=2d;3{eb7W@1b(0;I7GR z0ygS=msXxD+x2;_*Ow;UiJpEH%MP@EJM&!V)yngAzczF4(m813+U}wL R{nXWURbN*p@UD(H?se^9r6LPrgg}OYjo~E2FGLe6W7WFl&$SBH zROCRGUftg>#(lJLf+HV& zVFUNtubz*7?3tIkRN;yrqdZ@AYg>VSWC#OCLVN!N|Kj@O-igy^m`!d-5)zrYV4?Et zJVv3uMJp%BaY@ceVVt&VbG07d`qUoZEqn5d%PSdL_8v)I!%@9#{?RjmdZ$lH?mm0P zI_$tnh6`8k%#yo(lH>B-Cz^UUS{WH0KYhD6d`BfC I*QB!Y#0#PHbCE*6`(_^htRBGa awy!nUC|$B`=J%yh7S!qL!)# z_gk%qcJ#Dy5y^@0iG94nxgzY1%hru&w(ULg>Ty77@y;L*Dc8BoJ1g}ycd&+sJ%|+3 z(EM5wv7B{x$TP#dH#>S#woM7m6)3j+e6v#iN0pz2|AmazOZ{&f*D9NGUt3ju&@Qm5 zEa%eJ*!%a+&W>z2ySKiHPwv%r35IQ*&RHKAe@tOsG *M1N?G|Q`wNshjzkDypZ`&4ex%xMA86NNn|5+~g zzp>zl`JqOO1LlXCc={&BGVs}XJmg|-3tK47&QZYJVyd#@VY}EXhecdJrfyK|vVC*> zP?yFG52q4?b1R(M4WETK)mXYIF5=R^m5|J7!RC2;f~LsNS^a7ZE0^&5EPC*S%YD{_ zlvbm MF) (P*s{mxz$z{ti4Tm- z;uj3MBY$pP{m7P6>bWzkz>!%8*c)Vn92Ha>vi+MplOBBF_}R3{fct}=k8uCyX#pD( zT6tC!%CYnq6iITb^tA7<{7~^p+Gbi#2jefhMMV &foaK5y@!{!|C#OEk z$;%%qs#h17yNJ{MH6!DNRvlUQb$;EAUlmQ94;_#TEEn&rw>o_Bt8)DNLWauJ_h-tk zCC*v +<0G0CHKVHXKd@**)xUfn(p-T#2sVMd9v31 zhVSb{i(7dCam>$B8s=60mzm%k)VMdLB5tSfwA%{1IIBK4SjbIk|7gXzef9z?PM7C- zMKTTEM-Lo4^XA^?=f|97ck=}=f7Ez&%bs`D8fVWJSs7k3pM2oiN(}}_{hP+dzg4fF z7qZjmWLbZKb;a^Yf8K9V38*zcznbaSm-aL7b^f(!@F_FCFP_71wZX WKBUFdk4kC{wzD<*BvHFOl>H_EpcC)pjs&Jyfv&U%Q}1 zJf)HA;{_+NH6NUpIyW-kb#N3-3Gme1?YQ?4L*vcA1zyTW4zel~I4kz8XYviX#8$qb zp=7H*t3ZMSYfOi$aF=`ij2R0V>?gSV|8%gRM_FUBVp)fq@QM7IK#6(c=TjQw`V?Do z_c+Qvj9~uu^dcwwWhL?809T`PANy4tWcP_}>u!xzh*j!PQd0Lk=@s>9(u^}p)XYzw z^sD+bc>&K-4R_B|L9;$hS>dx(EBxfCuw9>~CjXGrNq^a<_Mv}T^OC2W3zjo`wgpY| zS74CWuXK%-`aHwn<5N}sPNp~|W7h31X^$-|&!$Ixo>j3z&1}18PvWbf*>_YJ4Gw#r zE3!(Q^Gw9?t=`HrCDSg?e%HceVLEep#jWC^4=t&NXC=>?oeSn-j(D#2xzb-z?8^cU z-xW@_Gf%fFO`ggASKVCE%B|Dt%OZ)hFEqZdyqIofK6wtW>|9&>TY*trTb3MiN!Q}+ zx-@N9Nzd1sl|JcSmuKDjvdrS_O26_`m**LIEPZB^X{GtAQ2?ns4yjB2qSPg;p6`>> zhA!h(dZQ`URge+5qvFJpqLVrML`2w~oTf4`gmNBoG&I})U_-_CO%^K{#L7gZci;c; zzT3$6_9YIln)B~Z$E1Z>mx QJ z2)wyzdDPlZJ(G>stX_OqYSvQKss1;&F6${fyHrf?!p20VJzKLw881g%J@83&>4coS z2OTc _y>I>EhR|>D5oT}?wy8Px%Hnl42_N&qkU!GoA_HgPlM=MjOD{3C= z%fO?Q1q?OEVm}|qyElig<0r4pqz`QIRs#C}Jbti0nQnC^?OqMb7ZnC8mu35o@9cPO z(^CDsF5}N<6=6G{2)}v#KR?@8btK%kJ6HX~a#Qz=xc$~#AIvJs rds)D0t{^yEDeh|zqig% z;#E9#!l_f;#3H#u`^JrAuG?=loO^8^bTsujwH;z^*ZeVK(PXtf7E5?U)ovzsTTAR* zIK|WHr{mN$h9{e*i>X=6>-N6IuxzRl&x_kaDSjK&W*ZiHCi4|-x~bAr=C_i0Qq{DC zd$VoyZa(jOEXcJ;sFIEAF-O-ufrc3#Ca+#hm3N6c+~Uh}Gj&-zSJor(SyojJE43LM zG$p3RS;fzI*ZS(!boL&p<1D+*?s8(-YS*-Sjnk)FC)e-l+mN+!_Lo!K8#`=|GL$`( zX;2g9ieWhTpZ$7Rz?IGFDhJ*!dv#N)Z@E!S0t44|x6*eChh%?CZ7@< @TI99MsS4ly=`ck>eQ~ Zm2nNc!Got+o66tA;nW38~${hPTnKFsa`c8r{iqLgFWr%MU8)O zTxjR`%XYC@G1uediAfUOfg#*35V zx4(0@7YS)-$k`;zDRN;Ce*u53zzPTEV1fPKh6&Bu7sOe71N1p(J*eK5B(3>n`DzBc z{FcDtg^GWs+X%%lv?Mwt@CFKOyKMR}l539Wue=*9Tu}w>77YhjeJYr88~Hnp6%<&S z+?@nj1iK>6EE3y(;;3HL$L<84#S+Ioj{P^9^|2?zXR*}v6UWSUee5mhSuFGXhk(qb zjnU;I%>S?aa1jX*?6o_ySixJ+L;qdj1eG7kLR!;ZSq+3H<_DyRsdApYaq!^;>m&Cs z9pE@@D6*-o-^WRP <6NEwQgo&M*>qrV#q_H2(&n?(;cn*ImTiQu%@=duzy;?e*} =T*hm;osHJKYfOYT}?d0w3!PQ zDow1NJAcuNzS&FT>l;^YDASviT`00~N48#jS(n((1Mzko<&2EQ2T%I$UbB^9`>Bgo zNs}wOF5NIc(|m0I&HFlbSDUUsc&46o_9(->=kMe<_Z>U({+-_AJ3qeOsCsqn&F=$m zccq+hJdpoU?yU8Uv#hq2PbJ)TyBjPzk|M(SYIleB;zPYMiIq7iJSiR_%AEhF+DPiC zns@8CR#kWirTI*eRaFW?4`GXDHi+pC(h;x!tZx zFh^Wn#Wc(JU>WaMW9=Dh-yYNZ>veABEuYlcMYY{U=P$1GeCf0`VUqXBEmhM$c?An) zB&?ou?w=)3PIHofrR3tGJ4>Hvp7iQvJ)qP3Nho>F?ku~9mRpWoTvnZRZ_cj=udXkM zJ`JA7TE`TjzDw8Z0Q+4Z2AK!Er@rT_v#U)}yLaM8q1xf;#_~`8?3~1TZMpEOd9r@( z{D-%in={I||M>7|<$R5N 2}*>Q)xxci;8UhBtlr-t{O zH(dWSTS)AXt5vpGp&-L@N (#mDLIqwRV&aFE;^YFaH zdncXdd3$uKaTRJYHcYpYsLGfnTV}{OLq)BMdEum4p-YyU$Q;lpDh VYSA#Sz?jAYig}RSXFtrPqDHYT+GtD zsCm$VNnN6#@jv^zsR=q3!ZHP~IQRE4G;X?-bNb?(^NS4hG q{Rls_5M9U{WyFJ#?Yu?;Mv4eJZt{SNs!Vo38gptYyAh)#>~GM8fTEeecZ6 z*@qcC59l`EG?UQf+L dhbsT9s&Ot)?@b*8#akXoR|4_Z*#+U z)`!W@Ot`pe{<(h8kqEF$OIhAvd-U}BfWHghoDXRHWg&5Z;hx$Fxmi=%nOS2Pn3!xD zAFXR;J|UP}UGDv0&8O!bFAnN4_U&$FO*Ut`w6Zbs{bK=!sT1s;6b8h8jXw0xr{a+4 zg?G%NGvavpZaDSzK43cG<#jkB;;`JW5A6;-iv-#|jwnfe?C|heBsBfR5jCriodG?I zM3#FT)r$Jq6|u+vj6%UaooNfY<9r&~RV3W*iOyNqlaa#6e6FHNL~CMwrVpdU _Mr~XD275U#5p0;6|N)>Y+ zsm|VTLdtCuceBky*}Ve0oM#oW&VQ4vY}m 5{t0aB9^X6~4NkhXd~|m~rMzn$+Bt;BhYhC2AIp z7H0})eV()3NzLl|N$@z=ho0p&&pppq-TFN5$C>4J-y{2HL{6Ucr)3etg3e~-PJt`~ z2g3=BB44Xu%?8NShRypb$N*D62m90HnP2CD2AD+mwjG;wDd=t0{)D-wou<5zxwE0_ z?7TR^hUG^d=G=Z?aru1E6efYp%BJQ7dl8|+U w;OPuDtYGZ}|l$>den|8L!adA{I3ia(eoF~V(b{m7_kuyQbTgwk@ zIC~{YPVz)q{h_OObsaA3@45FxTkm+ww0%$CRB=75Jh0>K8@cugE55vaese$L>tCln zGX3y~b7&NMz&WXG!W`Syk9wwG($>cx2@qZ>x%r28l3VW!C034xkIEZ+XS)5LX0nod zsmCOpnLCd>H%#;9l39Fpi{|UZQ*&)X8>=n#GS }=9}ZSbWwxBkpLFlfk3P;TOY={? zi}7lIbIZ8#z22_FEUzDaY*^3Ny6eN2mTQ~e8#=m_{K$E7{{BVBmbyRXf86Ex=FMSG zsL|xfVE$k6UY6rny@tjKCx*Yh3=5lsV ?E+%m5Zc13hX?*O2bDzqD9Zc>*uXZr^|8p#S%;~}v>BOS7W`;tM_JI{oQfvcG zIQ0f|6+Ow0EW5}s#nj{G)69^B$R{(be?%}dh~8^Znx(eF(|NXq3TOJ9d!d!fd5e}E zP!lP8_tSB{`X5Qx1?56s$)fp-R<7V+%+Yk6(8RZ@d0|Lc6w|^Er;95l)yg?6mpYmG z>e-4in=Z9wEh| 2_jW g+WBhg0X=Cp8#Rs{ zKTA0}cO;(ZZr}29-UmI!|En(Ms=U~?aNX{H86PIb7KaDAimaO#ZczKhD&w{%@Z|9i z%F>e?){97_`* nQX|S@3!4M=5n@A6+g!_e1YbtMbTj?ltLNkbkcKO%40Dc%B1H zCl{^pX+3MmX}d|w?(so}b0HeGTeRHV6W?uhtakju;g+xa`S9!|Z+x#hPrmDXhM_8! zkHz J9 }M zwIVL_v{{Uv(>G-UhF!cH!ntfT#TW2D|2Aul|K|G@NACY%-|k+&<&RCY+>ccOj8ER` zvvRJO_dlnA@rrB#>$S&?OcDq7Kesigk-sqYquz;wd{rNs6?hhMxO*HDn)RVY!)GB^ z_=!VeyFRoU^ep5__c$zd>qDF6jyr6H7EI4RerUJ3p(x;Putz;&LZO{Z(%DrLTm;QF zvbQNGvI?j>s;+y`v8?EUNXw4{tYL;N3@nSp^H&_btXD9xFk;SScJ>U{ms3wSr+zsk z`CQCR>&nEm%$!8It2YkXuKUmz#Gu0W*kZe7SYwmymiT>k9!E7zggTn`EL8d~?kO!4 z#MSX =@xtM1>VLU#g+4s|i$(nmqRBz8<3Vn58N^kR1-Z>$M{J$woR!LFT z-mBoH8n&rz$&!WI tnuo@VJ$(~G!BZQCn_*KM%Po$3 zo-6v-I_;T{I`7n#=gN+~o3;OlqP1&>cLv+%w(lj&IVPUOQqKQCY1+SezW2jz=oEJD znh25h0FR# sQ6s^2N+puuy4M*POcfi&l0o z$)3An)rJy%v87q-HtxvQ=i(^soVxR1?5s&S9Yu#u_Hk{^-G1tVrG9;Rhfwjwn tTi5m4<6K9=%jCI9t|n;MJ=m-N)B|e5k*-r}oA7TW@*=zJ3 wlY+j2G_|k2J}BdHcFpFnPCwjI~zv$BQzq6IXfskK^hznsKT@C;HK;bk2*O zGZ%ciTaqT2z9!SU_v@FLmzY}@tYu13u)6H*ng3x%*CNmU`5_SwtGzaqn=WTsGDl$Q zYb(>m3yM=VMlsxW)w#Z9`iihA0-|~6wu<`S)U^tGv2|}m<;9IR#W$?5-DV|uZmXgu z153Vmdlt_zwUm -3c4|L#qH|3mr1dINo?n!jOYFWQ~V&;EVx!oYM#VZndSdlL=j zHy*mUVGidD#}&?vLSZi+aPmj3aA{xgF}$f>PLDB(Q~lP2N9^yW&N$R{s`JExHa)pR z&dvJQZZP#|Us%D^uavMtxyypX@^FjJ1dEhDQ;C~S3>KRho=niTlW6Gowb-drD`RH3 zlru`N^3inbXA7Q8ixv9$kS~4F%4ZxY|7N(%&O5YoVX3!E n+Y>j1jvk92PUYc %fzM32TC^x zZCU+an3F}CYvbj&BEeiYn;vN^up~^1-I}8!pzHPY(@u}lg+`2x?9+N~vsJ!r5?U|B zdEqt(bIFs}dJ5dv1oM;ySmvZ@oLI*FA?~-HW84wXGq*b!drW-TJDBb#8Y)Y0Un*4K zUv&D|@r}!xHYso}k8xt+Hx}A_T1n+eFfG_#SjE0_|MZ5vEy LLD( zDmxA^PM&b!?Nc76bF&%OU12{cRnT4O=HPfj=f*+Y<-En2g?!~Fz)gFbKQ57j9=*j@&&=~E4PN~SE~GCj%S&v$aFW 9 zZsx`b5}kbAi;m}5%@0`Np19CLg&{P-CDLvGgAEquqDi@o4J}EMyYGK^ar(|=mB&B! z#C_eBHj{xvq`IXw-=44DkFhMSt$%_|F-MnwreyBKS+jMD(-Sf|X3kl%bY9-VzNM@C zCr?ex 0Cr+1&fX00!B^75hU z_bh@hweGtA)a3Z>$1k6~QLCNs ;+3THaA(cVpvRtR zCf$KHk{aqh{DQ|B3mynRbLeL16N^3SpSFGJ)@4i16bojBu)1(+ZT0d>@UYO>xh_ON z JNtu;%k7Yze`5iyC$m)05QnOU!*Ru}&`g(fPk}BrzAKhUFYk3ns?lkq``Zy!C zhsVfHhwam>lSgHKr>aRB>!0nOR=JOD7W ~N;6LZltqlpa zoa-(<;CedoL43>J-tfcC@*mn0i?vNIw6rVx{CJq$u;9SMP8*$w1YVU%2}<2{UpGAB zFuzpc+^2NIow<_j)s7}6y=4cIxeaH1m@~og(Sya!CNd{g_}Fc3I<@Mau~41TtunJ| zdUO!$v*}@Nmd9pjd1R_dWUO28Y*wt%N3}W2wo0bXEO}M%u%_afrTpxuUy+9kliz5r z=!)nve7;aw!fMgtrdym`i?uvfWh^L(`gM$Ph99S $t-dHNS0F>cseDPZt{k=1!qo*cXLCVd%}46ltx6J2;Z_e_~IA^-T&1JNEk z6zUa<6ot8GIh<;(iS{_0WFvF(q|nJfJZIw9#GE?b|KJQ0qn)txXJtL>#A1GC1z+b2 zKQ0~GwArVBf{Ac&{vqRD_v=Mp%Om5BOHNk3kV(5fTVg_%rK|c5(;IDT{ysb$xLNo6 zos#Q+9oZ|^H B(aEP@t|EA+9t{UAo z#yrKmXOA=uep~$KPh0Nr^LfwW1q~1K95&o|vUu_L5>6HOiMzP^ZvV{^UO#`qfd^@7 z56ZX?&t_m`7Wb$-%zEJP$)8#?%isJ`TYY@p<1cL?{^c*LI@ayxxY56{>ht~P`fA~o zlj7?*IeAvw@QI( $g%{6quTQS>?|zJ-%Mz?y&})OFyXL`=tMTPHPJ!`KRE9+73`>tP`aJ+qfM~P zr^_csp0{&{owi+L^OR4ESdQLcIb~p!)g2#mU*KTD5#5~z>7R|2g)exlG~2cy>#4Fb z|C19d4u1T|R%H{SP~33*)5VGG{wdLXjUKKtBA-~=T^{TbvOH+t)HBIygYsOqPM80# zo7iT|xvftv_ z?QQZ#n+4*2oJZ5wArIlpGH@}RU_fo>uX(zt7?!px-queEnm(5$Xv8%U#>6{Il zc9!aiY%Qvux$97do>*%`d*R{J5&9haO4@gvx#GO%c;kVqx1APu%@(?R=dsrH?pse@ zK9xKFe9o&6YDaI}@A&v#uW#y$?;rHm{?7aQd3i&K17{uEvd;-;ge+3Ic2+KMcptN* z ed8!=-bjjAx(NxN$zYUB>-&TUyGMDpyS|&v>*);N_+3 zoAd4Kj f#i zjGNUAd@CL*iEMi&&v~=9qK!ejWQ9`)`>YuqT^bGTPMvy5jf=Pp=6!g;$#E^?P?GYU z4yJBf1&_u3)*%KiZT2U2FirHBr;yUv>3Y(cA^03)DyMbSN~UR=2A%ghM4v?{&rt8M zWSMD`^KvOi# w=q)wm1$0@C@bZ&f~@9{DZOy+8k%=8M)GKF1Z)3+1d*7S%6m zT(-DqUSi@B`3BFI9Nk=o2bZODZO~ldJR|ebGIj?o&1GF$kJMJHmT+mSZaP;LwCe25 zUyjpvMSW&u7LZ^#$Qmqj;I+Z=u!Sm|4tk4Ub^W~~-mp?tXTpL1oNNNx-P=NJyro&r z>K$6kfA5*d!m_-k*I}Ec2pBl+EHYTYtihwhw0@fEj@>6V1qJ@dlKM5R;JxJ6I-_+m z+_MZeELCUG>DV<*#K-**)9OR-WY|7 ;N`e4S=oE&;qP;&eqIa<=KJ;k#ggfH zR#M=`{ R
F)DkM#J1dU{Ho{ou>0HU=AVA;_E#Dw^kfLgvLDT0v-ri|>$E`m<*gZP zT2&`|!VV~}xh8Q$NMI9Bk S4RkaWM0oQS7fz;SHP@ 1j0_P zirIC3y4HqN0p-ktq3 qeb(qkksTFt(;WTwFl1Rh8fRNuX)C|;^#qsFXO5E zniI|Uo;+99=P=W;Xt~YvNK5z-K3Y5fiqH`sMVow!y``5X6g=DW#5CLEoE-A*8&FMf z60Ii4dAYaX&N)a!UuR8(7(0`qW}N^ZSHQt+tN9l+zARk;YUnqlBzo AU~o$Cbr9mK8E`HYvUT{a;%@z1+HzFR!7qE4d^*kdc8ytb58-zYxBb00yC& zY4aE8&Y0Cdcj59C%8T U?98&a1fGBR>>>^PWYAXGPj@6gG^awqE7 zp1M#hwtLOK0~c?Y9_c!M^PXALm4dyK?mx4Y $w6@gIjD-&t#kEgk`+Qy4 z!FuKTxD)}cwnbiRRz9-b%JywB`|@*4)AqKSOuW7|?V{Nmw&`n~*7bk8x^?wAiMxBZ zo8=UUt<-qn-~8O`N0mg_qpW38+`=)u2OLix)c9 h|L1L_V88i{AMius8STwC!h*b=i^5pRtec<%5^%Sq6vd`u@nTS$<#o zpDE-02JK99$N!ZaZh;GgKTcIhXb$99z}&35;JZTW=CvChaxqLYP;9sPu>4TF=9zY- zPU9Yp`_+Pr9w>FM{IOlBS3pBaB+jJkz+(=zb7D$d&fj)8O)ysQRA_UXwjhOz*Wl!# zUf)X}o^S+R`mne^RISr#nl6LDVqW7i%|lZY)+sFGJ2&&>p~;!cHaz3Y-L &Ry1G_kHPanVBd9?hfkR6dDoEDH27(CBUxoBo2YS8LMBxqbf} z?=H7xyYNzdab6ei66RU6dX_F(HS5Gu9fO1h4)KZ!XEID$PDQcqIuz8nM#VrtN9(Xq z^qY+fKD=Tnp28%wR{msLk>h`Pk4;)_>x(2Fypg`|bY<=~n-*=it*Nmmb7hV-73s#j z(qn4enXpIt_~a)|8}(%F?Yiw=&JrT@LGy22QohVjJ1>L1@iKRgA6V|-<9TqJ#hN!9 zpPQQA9aY})oAa<+(;rr5ndu6fM5Nsn3(bBvJuK8vX*N7yseQQcldEa-)J?~XnkN?X z+RqmFA}*P}^vs3(BDLK|Z*2L~b!kUP!E0S(?k}4R%)0}(+FElfo1Q)u^Y-i&6{pxD zjmZ7mzTVs+@WAAD!ExR1cLd5lY?CRwADha~78Ah8%vlq3kd^Jm+8lPn@--ezo!ti- z9 E}@&?IOnqMdJ65e=Ir7?9q32{(>5jx$g6w9vn7b= ~)7XtS|rX%4+>z@88cC%h&(=^=A9~f4@H**Z=?L%k}*Ke}5o1^#6+#FtQmWR531@ z!w`9ZWl5}F?#0gzKQbC@{wi)@z0-Z4rFetmkI)O8@>d>+JH4=bQM<7DucYSyiPs0MUOKa)XFvF3GI0xe@Mdin3~za9+}`I-YYNEg^wNV$jM$P%y!|Z z-p-G_IbSBr%r0>McvX-!gC{{gzoW?}ud5~g$KpS16C9mpy{T=!^6>Yj9n9PZ-*?+& zEKxT1WcHfJKXHx |SirNC!)B+QX EvnV zdzLaRv^@8F;+i?1k`HNT3n1-BlV#v$Krh;LUhbWjWNGr(a{i;OkVd|T%|Q{7b{D1$ ztJzAO%|UCT*56q3bw$fIhM=_-K6>ms&nVnjXt4YK2b~_Jm24_kcGR7Bmlcd)WZ=lH zZEH`{_b82IEEj3*m^9hBi;p3tJZH+BxjNHkq&Cf-w{)4j;q?4j6PK@R*DopTU%$0Y zPOPV(Pe^Rr{sKdeg_{{A*B&?-vGGV%Q{}0P(OeC+doJB@In&;>@8*5GLmhorA3W3Q zI(v=b#PfGb`WBP=KE408LT=Zc^6%eXPHDRJ^{`m? Gc5saY>H4u4hCd1bQGT*uk-4uxKcG+((b$skr#c(pda$f_dV2bW)8iD?U%wbs;m z&5HEw`rI2Ejte?B7J6UYdP`e>!`>LiDPMnceTZJrGF4LSF^9&zBg@6urM^lOr5szM z<2~Cta>BFxNsTxDzR@$`cVDu!&+lxpX|^%%i5YdVTHB`aZO*LTRIBRH&akWT v-MOBB4_wu3#9@7^qqk17{7zc5I0`t~Vm z-}iv|PIGI1 8JMexbP=U(+Hcgzn}GYKUw_|MO+_QJDa=7#j9YQ8>3Mfqc) z8b?~I16Dlb7v;IQfd7AOg)5V^(hR0{wVn(mE}eA`l=y`jekn zhn201`>UK@_A~5=T&Y=}w~Ce7B_`?=BcsAC<`owgM6syNN>k3_k|_D*$RrTr*2%=i z!Pro=_FM2O3C@@gU2B)5zL4ZTxQoeAp2bGPX>*5)gO0r7A;z`;H4l4Mv9efKY|@dr z6FWPc>26We>aFS-t0!)l8}hqt_N$;H4m&6Bc-^++#8iQN!8_ZuJJ;02bm+_fElSdt zXAZukEyEgIWFW&m`)a}7d5aA4)t`sOFzudOvw9=PlWB)O9%s8yogK`)VZsJ!<>E(< zr)wEv+)gc@QgdpH! 80V0vtQ0x#d08xgvl=YoQp7M&DbrOR|vuYS$ I%QpcwAYd!Sazou-wn~IOB$-|B@QJ za(66Wym~?9tFQ$p$~bvy)+IjSGMKPhpr!u7HqHs*I%WLtHuW8PeIn}) tN@!+lPgi+g+6;3iD%SnnZq!x!qE9n3$i+b4c>w4V#}!1vy;)NQgFWa6NEW zk1t;(L}qn@>;6!MejABoK~Dw`5fLNbhsw_Kf2VmEzA@;qjd*fj#k0lvUp_ !Smbl 5uBrw~UDq=oxfi~Co5yHrmvx^xe6{`RWr z$DIl-1STyJnkX2Va{zSywpYAMI}1Yqs|!c_Q7^sO=WX8vF5+fTN!n85r(P{0;&T0a z-}V0ujhY4?L3u(VO WQGiR7f@@lBb&V4 mLGX3JXV*+m;SZ{5>vu%kGybMKMTmh}gPl8>HA*XKKNkdfo;)v$;I^@pzA2|RzX zWTVikyH9m*^vr$s+Wh{@%Wpn9a$T7^>F}qY%5t-&z54a*&dp|agZp!1nWu_QF<&yz zp5cestlg}y<{#-?s>PI1B&clRxKXC;$+7pz3nnO^{y%k%hr!aVQ>O>)s+nn+c6#QS zAF0t#+LX`D={HgO ilO^H*%mo_bNUHEf1=hW%v+I?1E+NCVCBzUc>tw-)H z(Kpu?*i4-DR`tV@C0oyM?F{9feuHg&>g!9l3c_!P?>+kCTBob{hPwq~yzJ+edT-pi zZ@JaP;yc_$DkrDxjx=l0*u3+sT~g&Vb}RQa`io~TbPKFH`tnMs|N6FE*8^`>ZqJ-A z_(9Qp0)udg_~W~~y{2C~ AhVY-? zt3Es`uK3?@XOF^{m-$ovC*1uj^IrPF@p9j!y?^8Ot$iS0{a;i#f$Pr1fcXE7Auo>K z=e>C5_ybAiSr-~ag!&2|v^;eA7}zRf_TvG+ TY8T)#6lVN(&q%+yaGQu%}(W~NDp`fYqNTUTa6ie&aB&!=;$CJChL)rJ)}%+CDB z8MNT64+F!j4n3octjT{1mPdjX+Otm&3+QFnRQd44sj}?IOTLy<#s?W|UM Laz2Pu{${$6EDp?uyl)_PRE|q7uhEdu8Hw(Jvz^E&FbS_0ehGj zmBf=7_MP*RVLd*Tr@;AS5QmS?;fxJEm$w^R{|TDKmJ!2qidFbb@7aYbWWK0!%JX(z z)W5{N`BH$p?$;|J;d5iyBjTIBUXCtfXyg?&uysE#ufgDWt+&jefRn92w)L3k0$GjA zY3Dzha^)(&`pRYJf6<(iXUAOS6RTP7t+=5T(N)3euzEuIV$b%X#s{wVWKZ1;h~C$6 zbISCe=2D5}>(u|B4W7}v`KqeJhn@VQ4h2@PG*l*JKh_oC`^}$yf8FnQd%nN>{r&*E z{+|y=#Pk1rJfXh+&!;oy@Be(h;I9Ao%azyf99cy*9IC&_-OyvYc-nv7;aA7H_cy=T z@c!3fhVK7 d!EP!2Y8C7 z8BW^%TSdcNv&k=RL;n&V_$IIoJxg`cJx@p7`ZR6FnWyDkD^EYreLnGuw}Afq RhM*$n&|JZYSv4r+hA(67Gmex%DpaSo-(zd>S z?;4R5zcdc92{UIIPnzQ209s3_q(3>cc;S-Oeaq&>uUxaKN}p@}1_qAi&3h6II4XMf z9*)!J>&hw4IC5rU&GxLKU1zUY=}Vp{KXmnu$<~{<7%$&_QhlTC_S07?TQ59({QC8> z2M0HP{3OTm jTjxX*uz>oU6plvNbOFxO5(gdvQADnEbJx zpE935|JXR)ZQ?_Z|I_A_PD |YjL2xQmR zvhjMwdZ@r{#;ILxLZR*}gKYy=aIuM8Te(e!_s^`a>WU6pC-bVpJZ|Z2UEE^Rx|HYL z8eZuyOE#a@dhfir#{Fk(vzdYZo|f-Y@2n-RUpl&4p!(uZiJ~XRd`r?QvVVS9ZpmUT ze0Yzt!?Z1nsweJKRNuPms&3Tod8yAfzr5*_SNt%`Y5Sb}y9(346+LJuh&(t~W=6rB z&`)Z@Y6tT4u6eifpI`a>P0{S_-%?_G>IMGKO%{J9e_^`#3DpCof;X>UzpeX!VuQ)6 z%h&fi%Z0uFdvVRh`5eqlCwi;ZebN{F7y7<(!2=#vy&or f?_1ep4o$0%a=ez`GL*R- z^_rZ!ZRZs%;q?3@aG=X~TY2&nE1#Xry{5-HQe{H!9Z>D`@A{BBb 3?|0qI@1JJD~czSX6vtCWtg3? zTS(~Pvdk5y!Z%deta4vBt0Br`eU?i{j@+3;OLP89)# x+U%VX;Vi|XSn7oIsD z*wWhIt*yxxvSFRhv3=gB*3a(vt+)D9pOF5BHB)Z8F#R}WazN|Fq6hlIU-ZHXxR}MS z=r!=pFEC&fTwd@&=+(MS?=`sVFKpD2oPPb|aqe5YPo6lVGNEAKtR3Eb9TP%g4jpZi z5ZKhnI{D0}b3uV;KA(4B*Zp$ArTRuABacIZk(_`-0>jx*wGY!ympgnAV-DDT M;ke%KH(Rdf{eHXSIij5YuP5Kl9nZwP;MJSmOq?%l44!N@p5Odpv-1KQ zu4S9wIeya>DA@T*uHxOcHxG*)ZC^bte)#uwhrZ&!-OrWR{FS=TuDetG&i|U)4 z)?N4+edym4(*v?6dNPi_zV&j!@m7X?uj^wg;uk8MVC7^w)yQNc%QiK@!7q0LyVx3G z*7*X5% hp-?Ik|$DA9vtIZG1UHHnKE#xkH;RffZs}tB?d&fSQXK-ZU zMgew%KMtINSMB+(>1SwtiRX#_;PUvdKttStha#Q_4lIhD$Yy&dQm{0@wPsQ2MYed6 zD9Q8%M|Ha%^c><=zTmav*r}6+ESX;(3Eg_(X0hm9N5YX<;mCmFBA*oc_db3s_LpOi z^|N&oRyi+`R-ei2uurcmX9>n;-FFTXm-#H!$~E`!O)8qy^F&tbF2~8cjafa0Q&iq7 z2%MHe9s-wR;9)qy@STAHdM@9*j8*H_ysGSS4ea}TcG@NAWax~hNEwb!p#v;6Q{-Ee z-NEA|qHR+Q!q2U6UJjZJy?^@g2PVczg;jp*ldp?>7x3Ho`+tM00Y_peBLhcDV|Pz_ zwpdkoyO3D#wCOGtLg|b`wKEnh)X}fZoLjVL<*FsKi|2}Tt=iPPrj&90=AAuqVjOkb zIi~J9TpH85jbX)+)2Uk<+7F$%6yDr@;PQ=`dydy%xOv}Re_zk_2hSE8+&Ry%@%cNI zCDXT?z5lALzqWV#&u{OtUp4Y=ef|BdtBH5JouJA0rg?i99*Z>zv#*+Sq)G0_%hx4^ zNyoZmtkVvQYb`mEsbcv5t#zmFQ|Dft_MI*nMrs>pN+;f$^HquYM2B_h(O}5~i2)0_ z7}i-=OnL4;%WC$rtRDg^LL%9w-uhT3nipx;rU#@zv14jfW>qaowD+5EUxTBxm%i z>{{E7y9&G3&gOa_7E{yt({#3u!RCW=p1m{WxqfA#OV3ipV@2E-AD!5wCLPoxIXg}9 z_lq*UpOG#v<+d~RoD+SpCG*0n@aRHW7Ka?ME#7w~)h<2Qc*l-!jcuTn>3bbsyFYry ze|9W=a;owDjDiC@^ {=E*&7Wo_ENF2MxWUw_;gfKv zMuJbVfs1F_!^DpFbABjx&AGs+)II6K!bhC?hjtw9(44~2(x=9fk<2gNVCKRg@UP=2 zQ}>w_PEBsB4kdHhnQ_XAnc8VS<@ezWd@?mUGhBMQQ`E+#{E #OGxb2wt!zWJ&EIx!l>EUrNAKui2ZfBor!7t|UH!n}LxG08|73KJJti;s zx=%Ktr|CfS<_$BLQvcs*Jf$5Yd#?F!*V*PfsSEDrU!UPH!R(@A%!ch#O4yq=pD?+6 zu;I4VY^zeK3jSP&2VqlAnR8G0yujh Rkq(~f5T zQ<`;=GalTHI&etvN %YsPN Y{aVLSN4k6?IR~YdbfBPfw72 zdEB?^)8x;)QdF&PTDt7w>)N<@hGz73kK3j~Wfn${-flbWep5AJ>Kf)JTuw-%7@)%V zBwAst^LnqBj<)<==qSd@>BpTGf<`f1S_(vT%@&k+t&Li0pe!_ji-p0v>nUgyW8cHV znZLbcl0hp|szgLswm&a(dEL<1q^>XK5ggAU(%jQqqAwy;-H}k&H+@F%gq-kr(B@Lz z+3E8ZEnlHBVRG8CmFs7=&dG@H-mtydU~^G?;g0=91{{rXLiGnugz59GDd{|UA#_vE z){EEdPoFJ~<2Zi(zMk0bBMjRfJlDF}cmBoO7Oun78HM(}`zAMW#=39c&-`Ni_+#sC z;exw+s+jikO1k?t?QG%toO+A>qm*6l6$XnH9Os(%cS>1m{rRze!HE<(!~cAb$}UBD z1?WUO?dC9E;xk1gglkcSu((~DcJ8-7TLqRKUU-1R&!)pf^Q4>M>|axM_^k+u@Z!C+ z`_*UFkcODfuGPN`-mF%M_nlR{wJ~bz*8R8Mu`CeFTg6+n-Egb4_=M?2H4~pMJ!<@6 z?ZMPNEI(2tB$Bl2CC$s`+?c%m r zFAKa?U!U%)_UDHquiX;!`^~>AXWqL%Kj&SXo$R*|s~H{n^WXNq`tg;WrCyEY1#=@) z*u;7Nx!8 |kos zShd25`T9l% ckvZ*WflhQLTm1&jFRJm9Ed|IEqY(m`3$T-7;Qzgwhmq_LxJ1NuJ zyrS|MV}nu9^7-!HGSw${n9X`Jx5?_3#}X|A1tn(riUXkwH-|EuY3nmuuyV=%4lZw| zMj5M)MWGc^)4JA7JGfF|dScV7& KQeThPx%s^&=jUR_gWp2m^zBQs z>+#z2DNU$wj$FG<`!TiUP7WtEx4-#x+Tgg(=3-fu1Dhnx?!QTA- zKYR|cmMFwFT~PG*Y1(Tc!C=Jc=Uw%IOT5Ek3#Wj_-a}U(G~H!7uGuly`D)*yyB$o? z*_qpv^P69nDvPgJ`|e7SgKqgH`7LYTt(EXk{Bp+Pg{;!Upq}V$9Cga?emtJwuJ`lF zl<>TtPiLgB`-!D6)?3NWb7M^vm#E5y53l7zF6?+Tr#iu$TXw?SO4iMf4Guh*5ihWZ zuh84hT=b+pUybAr=XVD`+VMR2{dhOCqwSf~(=XbbkuzC$_?vG0``RZrgB|NmT)uAT z@ZIomz1uHe_D%bCJ^J2IbmlFyQNzRDSMmx^u5UVUwz1-Yw9A*6GzXJC{Dn+Q4*!=a zx7U25pY|pA{$sI@&AeeB*kwv2Z?H79@e66Ugr8Wjhr@$Oi0NR}1m*{PAsXx1?mcKy zS7_jIHfIo-=a+0^5-CtTVgLSx537xw7xBk watK+~Up1tr+f7BpmQDHQnYQpEJAb@xqDabF&|FZLqM^eD|RD++-#R^XEs!ZW#6` zc`SZ$O=GhWlMrk57a6(!vJ-ArK?VKb!Wi`^n@c5~f0n!w*?!`}-;WbyUO#^Qq{7Ov zuCJw}CYIeR(<<~I@&Z9fG5igsO`M}$RUoq)vMl6}hPH@1o1=_o!d}oupm!-EEi4Qc zq4pf@hd_fA+h!b6T*=D7!BufKPd|~1`%x7)i^`O>)#u;OP7vcOu}bF ?Trfk &b6YK5t(;ZF}+sjxO!80)CZNR@*ZRzX&|qQY3OdV$Tal z`Q2^O(NAA5F O=h_#$HWrKONAJy6sQr3+RqnanEuSB4>NfqTd0=LdY1yA0-Ll7~Om%$6s2P=( zIJ-E;?{j2yhV&%wZtJs$`d-QM?%Lq@=vQg~4ZpO<8-j0d6S~uH$MQj!r=njgq%+uP z-{S-9&rekvo;Q5x{Po49>Jov4($z~}n!Zr^zK-J$?~5mwcNxSdJAMD++jc!+zSESN zA3Ip?EV$2P`!DRz#De?ve1c97bpAzdoBN;ho$L+QCcb^l59O}AMm*pXjoQ(|Xtihh zp%yis6^Y!OZ;l;q(y6dm#Gw$iZIQU{FLfp9$9p-Fx-A~eIMkzGSJBjG%FyZ5X1k7I z;e@}UC*7Jnq-M5snN7N|WYXLP=BXVnpC+hIRdXm; 8Fwy7(oCi! Q#T=-Kfdyf~<};Xs&&vx>{( VZkIit0w41D{vUeXwrW<97VrK;FRb6l zahzXdP{Vlm^M~%Q=aM!|65XD3VAVZWopXDBe7wD3S8j#Rr;{4X*L*sq11g5MrJiX! zqoRJGfl1Wi0{c0E3q9*Nd1CIkbT&_VZ9GR-q}FM-H%Dv}qkI3$5>76k7-uFKt+`Ch zfyI`lojNfG3OQqz&)K4W>(Cu{*4V= {IQ&b zpYz+^>JQ(!_Q~u0xiCTgz01cU=J_mdI^Ul=%+UP$E#o^Yp7};!Vt6KeKYjiDoFCtP z0{VA+voe@p^dmQ+zUXV*44%!OV<)WN^h;W(?;qcf$$RR5{d(;D|H{|>GCTz_>`xf~ zhHZ0DFLwdGJgJTge@ke1!(pT{^9srDVBt zc38^G^|kp=mJ#(;a5?ez0;|WB+v1T1$I^E(USx~ykr52v;I=pNB5QO_lF*zVJB__Q zGH32t%z5vIh4i$*{ss|8X =8w?m6d_YZL B9j=APcvERm|Pn!3Je(;dqzQy3YA>Srumq+TvLDRS=o#j97(T0Upqf;F3a3}zS2 z<>=nBr_n&9y?Acn-lIj?2TN*_kDX1~w*HXN?sHc| LNcN{)Kl2uyo57V~ z VLy@BVhnAY^Goob-uh+|^>a zZu4`ySB8F@7!|Yq(1W|C)5OH(cUNCL*UGApn6R^X{Su>^8TzZtd!()1Ts)_xq<7YT zXiWZDwDpX&)!h$kDn(w1Eb?R*{GiAnc0E04wb-FuU#A)@Pj6q9yZcn*y XPp5 (V2RRxYI%!DU95 zUT{pDH<4lfj0K%;OPhSOl9b!Uo@OR5Z2R=0>8whW`^p(}xH?u%>)Ev`VpEios=}JM zMK7mw#u#X5Pye^8YxN=l@2BeyNp)pva7kFZtewVVz`d#Z;I8KXTTe emUvIyWKmEdB5Kq(!-^<@6Wf_@AosX>wGxyr!0Yi znMY#7deJ7eJqA-`e@Jn#lxY^|O?|h{yY+}#%m;&svKclfj{21`%urUb&Rnm`RpXO# zsyN{H>yyH}-z;I2VP5oMzsTv09A|DiDQpsWB2?3~K)k|X%SA_?vtKSlC-QQ?UX4g! z`}JB(`P;A86WVpZ-AI|9`|W1N^4j(6;&0Y$;}BP2Sj)k3rn>Z;9uLEoi@N%~rp(3L zH<+If6L8pk(a64f$AL~^!HWHU+=dmK ~o|G{y#0rnD_Qn zMv0xq3kRMJ72B3vZ?t^VxWP{KUeS%7r*BeL%u{_I`D0(T!l7_Z8?mFoox5aC`v0_& z+!Zca{gToA{b7dF>;E3CInf`-^xehfzuu4Q>HX_}*hTm+eQT3ozu{%bf_~LM&O7`* ze0)3of!)Dp!G;GIzEp=lX=|`uk zb$#Ax2b!C`61dqs%=mttZqZ(mu#Jm@MTqH4tG2+x{c;|&x6f^8&17E4`(JfG$2{Nm zFOwc}7(^VBo#fCO)x7XVK*kZs`6@}*r8FSttDFI!z@;zC-Wkli=xWSUXR(cQy?O#~ ziwYhT(^o57>+2WOB2 i6I!ZXcL~17svyQg(_c zx`^B<@LC(S-r+_eX8@}m1838u!?Vu6*y6YP%{!(<_ekIMx7!W6jX0*?cn2CSFyIr) zb7D*?Ztm?%H{|FDt`+N_KEtVUQd(F2%moXzDupuVEn2bCMXsu3`Kk@mCzh?>xUIpE zZ*o@GwC($|qIU0LC^~RF&2VYs))VJu$?-KaGII2szhQH#w_yIw`?{@tSFSyHrfqQg z4#U3Z@ATzF4mVu6^#1#5|Nbklems9U FIKt8Sb$qX{StxGi`m4P_XL=|0DCx znOadXFBab4*Cw6Jc!tAh$*PHr-v4L0v`$)dYU;wMK4A`FiDM02S+{z=O$zs$yS?S% z8HO+6J@b|ci1FT
Id)y(>I=FDzq`=-5B+BcGC zSDp9m`2Fn*dv5&0*t$A7t|Q_ddD l)WEMh5m z$j6-&alFmi=S5 `r+o z>)O0BP*Jevl03yIDwgRz;f~`=6)9i8%%}W3GLutNcX@U;F*1MMer2L#!_Vn6!q+h{ z%Dxa>aATVH&Yibrtvq1)Ksm)MDQ%YLy+TK=l6mD#b9x1&y5@$NHE=Dm5?ru?qxRJi z4YkI)j;@8%eP%sNn{{f(^JNR>O> nn)+*R&m$`ahxYxV*<7=B*0b8J4FhO@}p84UX%4 zK4Wq{=kr;M=W9Nnvw;uYy4-%m$o#zOdF%nh>Idt&XYG8`$as8_K o%s8gJV0d@$T0r@_N==X#kf%Z=N8xT(3XG8OsZ;q)K1Z!=2@1a74a{B$nMYj{qytV;^=Avg@)p4s}~*7 zJAXZ%%zba?`iZ;ke&4^BXLs~%a9mvLyKt?#qYN_5T7Pcc|7FMeAzbT!`I~EE_AH;n zxAC>ydEgY^`gy^%f6QMq_vN+D*^{qjCw7T@o?DY^^m?5iIx_3m{;}nFP`mZZ=LdCL z?`)q?zwK{y
9qJMiI{J$l1mpspe)bHL088?^ilh-jw=jFM@lFMeFTl#@n zQs*YCr+~xkjr|#le 3-4;TT6JINO5V1d zYgGV?$DNzArfF<8wG_+{Z+IwzI% bN#m&|^c@*|aV}hFFG%d)was_;WJ3a7rbk5Qk?~Yg@d5h)|(-v5-jn z#7VZD^}dZ0CeNC!Gc~T5Z_c8{N}WCP8D=h7-EJT@ZN;iJn{(|q#5cBV*_~kEnj5x# z&tY!^zU4U!j-1Y0U$yhhMXP-$4wRH#x~W%l=w$z`2Xl|N6-z#RUd?s)fY7cNFXXx= zo_haY?s0qAv#-ws_kZTt@bUDqT%l!+4<4=EZR{@Ql=gj<=%ViiQ7+94PN7>m^5YnK zrKiVENnuSnk*I9@f0oTo?bLleI-NUJ*p1cnTP0*~#e`0HvVHEBKax4@TU2HG|95Sg zHM4zD(7bb>1Z%BMAHLYhI4LN0Ysa1QYuA|N99Si)vvTA4eY1FPPdRrhHc8T{+ME0B ztOTo<^L)dC^ 6{vI^Fxh!6RJ88z%)CJlf^=!K&`hcJ{}PQ)1s#8?m=PlJ5JI z=2p1$-prGWJ ew}rV@9X^f*H(JT6$@Vx?6oD9&^agt57zy+;-w{we>m;re4Q&pA;vy z`!FQ;h$(4uwyWqxrj#oCWvW`4#bsV#bjY&os)*Cun82U#tM!(S01sO#A6ra9@bvwT z1 9euV|swB@rKR)uuT+~%kix>D@WOU2b$N-yV6`)A3$q)Ot~@ 1&0y)Y1 zJjaePdao{)Gx>kV^_&xb)S(&L;%mQL@-ct=1#gp4keQc%`UmzmU27efel*20o|I46 z^YymX5g$|L!qpExUzXdmCg+kX`@5D0zQXgGAF=&kdxXJ8dX2+<^MHTr*{iH4{yghq zZ0PWusoJ6ZKi^{R)5jPbpLg#NU(Nrf@u~FzxwPBaU#d4hj^$~vK2fnn?!&V<2L6JV z)&liQKQ8&-W5ah^T+>GU{O{M*;+OyL{w=)g|C}oRZPIhpx?@kgTe{^zx%QW1kCr#= zx^P=O{>RG&%s#)xFP^^dyzAxpdoJIV9P+ktew1Q(%yP|Un&sL$s~vF%1v;47xYkrz z2{`=z$9hmk<3ja??pqAm3I|ujUSN|qiTIQA;6RhF0junkTYoA94$WR`kpJKLA?MC( zP8+6vNH^DU{JChFv(S|f*|t|AS(7W8<;8NFRXLOdPo}x7H{F<^AG1hg{)WSvpd 3#CX`_n8LE&z%21u53eeHaaoh<-Wf4FROGDMO0zWI#K<`_q)-b@K88~a zUr_tm-c=ix2k<3z^DV8&18;)%kU1t|%E?d= L4QCWe?4CL;q_-las$lxO z`8qQv%ublQVEGE8S?P0DtebDpUlK2}e%n;J=DJDS_ty8e>}KTKceHTh;>`>-$IeE` zWpy&{Id?VEqkGG>+fD~=Ub*v7cjL79Gml{zc<)A{n^)VJLgsX zes}F@HoL%Fo~o(0L`+sNJT!0TUVU=Ha*i06Y+?JzJuh??+jq!xSL$pxTymoAAJcyY z15LrF2d3)G=1g(dS!P(o{PCuUXX7Jz&t+xzK1~Z)dSNzKLYi{L6>*dKn^jnHf1P4G z5$U#4>h^|`RoB9$cQDNg`KVx4=N!W5-W zH)<{S_KEgg@^$L M4CAN?cvpLgGeSEH&ylB!2$wxCUq^q{8F&)%SJa#dIvtLgrQ;FqRrssl?+$!&d z=?z{}=T6V@%39epOLdjHaEe#^%H<(k>MV1$HocfSx$4)cb^Gcrt@35w@L^Th-dmG$ zJdRfx% z!~K5GmuuPY_x^ac`u#q&HLu;7I3uc4*|&uyG{|%Pc>QiiVZ~B|E&TeMboR>|tU0t< zJ4B&ivY_^%1IK)m=A1Yva-5OzguhzDTX~+6Kkp7!Pg6A7#};98lvQPVOw(Dt1A-gQ z={)H<#A?Hw`{kmCI^IH4{wX6f8^fDVSLI?RH0;R@d&|g@GdtkR#mwWqPVB~)Ys>hV zIeND+m2KZ(zP};9(P)nx%e%u5pHv;#@xZG3!FN&SGq(Bn!ZhZseO$!Dr@t$L=R)59 z4Rg*LTJANRzi{Vr;rWIP&)(VT9eMd)?Opqupk;E$Uq$rAvAz#)igVleJxb1M-=WEl zd-m=NX0(~QYjxlHx3v%crM%qir+?_PJ p@$yv2X%Kj#DYe>`A0peeAR@`6@^;Gg5##vBZd7mVf!L@i(c zp0lz3ebZe5xeODIO%6>fq?y?S+gU$f 9^KFF~$?T|> pY o^y5>LJcC4dYf?w&8@UN*Uy&>(`=F zB&ED`JAFPsxO|5F=o-lrJpslOq!zkuutZ%Y#m8_OeN?i$s_W^Q&(8y3UF`st#TF_; z4Mm(1o&q}-f+pr0UkF%J5hH@z7eLVx}_r|I8i}!&JRI_UK(LsUMcCpLvksmQ2UwW$hEU zG0b_*X{2 @#}U_1JM|?VD|v z5-SRVj;;P;w@z!P$n!Inj`M@8f6aU8XcduP_w@3ox3f2JGxdAy5qbNh(=TK0JTGR8 z`|ct6_AUoz|NJ6-(0!xT{wu%#nF=dZKI7$JVP;cnQTQ+aQT2v!HJ_V@e4SEzW~B zu^fJF*%=y~?e<@uKkQIhmXO$KYtpeuPhs7TYn^&(K?yx3ZI_kg1=dw0_Z~bek;q`D zwkRo8uI2y(3!4h7GPkGD!Q>Y43l)wNH@ZkJtPGwen&K~dU{iwR` _|+R zwn14Ya+#*njM)wbYU=Tm7}IsK-#wZ#vs1v})EwK~nIa2jU70y${$zny&(yl~v^;0` z6*Z+TX_vV0LM80p)a4QrmYFaVv-wzgviiPjToD%gY|=`R`EiA>_}3e)>SpIr*|2EN zlw*~d>#9pu@vulO>w2_ow!wzgUaOy#>#RRx_WI4{3vSwPw_FL!Ui)9|NY}*NSqmp^ zc+0<3>Zfk+fmsa?cCat9e!~^0wqTu=){RrE_e^Z5UMu ;yF;fuH<#0#nR5}wz-cB8RRq{7D@QMy=l*LpnP+8wBdnUXY ww?)3KVMBKCt-`$8;lP zcH+;yJNXR{d^$5-(c$w2J?SHF&qn<}{OVWM{li}vtIr>P*Wdlo`WVxLxrQHQ=IiUe zQZ0zz@cWIPPd(R-;OhUJpOoj+b6vT7{lA~XzTUU_QLHhIzurwfAhO|ngJ87+*RSIS zobw#= Di zkIql385y7dc+s(;dK&iv8+PW~Z;ds2Z>zZTJT;s&g){C*>Sv44Jsf#++!(|xe|`EP zu;fIJr1$?en@DX{*U36F&w9VeO*|9Mr+I5nW!7EiDx2?X5ZarI~BS%{y+D*Tu?8ExO{5cE_83GrW -#>8Lgv0O8kvESF`4#$??792t$$53t z{&R)9_+P7T2)@5~Z!x>*@$KF0JO?Md6?}etxyJrvi`1{n?i_!~H@~$;Y-jj|_4ZHe zI{*Bsd~~0KVbg>-u7|7{_y2RUt}002+N1g6Py_EeF_#u0JrAc=wKvNTvv8($9IBP+ zlIW~aoz>A%ty(3~(yhjKT(K?r!iq(ln)f`;Fy8+ FsJz =2?lD#^vZ-MO0B$WpTwIke26*9yb z($psBd}>*y={IYkEMxcEm!9(jWivY#giA_^FPd}ZrRu_EM`k`-vV2FU@RBKMt6nDM z=W#8Yk;$aRzU)Njtd!+9??@)Fvh6TpaEP^AxqxxOu0yMq?|8OqwdVSFuU@Y|z^46X z!x6FU94^@vQEi)c9DBJ!vhUui?A3)54zK>RUoqo8zF9rwz?uz{!UR_@yZ_2?-LgC1 z3LSSIcUpL0=Z;0U^tKdUIjOfU_LTI|t)J@xvN>;l>vo#nqon 1p?BJ+o(C26VP`!rz`y+#fb4QeXk6vQp z)^)r1*NB&e@qf@PQ$Ek*)?Y+I#JRsn*#6ftl}Y5DZ6q0+o@ILDu$8X+t+eUB$F6^T zcd=|%^6W(Ob#9Y&-`w`+-*^1}JT^VHN3*}hvOS))Ztt26Tn>6i8O+|lTES4rGvVF3 zK5oCtYh2S_H 5@q3fK;#gn%me*CS+vFekYuQfW+(YM&eS6ouVxD}i z+cO334W&oA{&Q8IWwO8D^y=@ubIlBExwHTBwJ`6l<-1>P-};GD`MvY!!?Vse|2n>D zKJ(Y7?i2TJyt_W&|Az1UZwmgYP0;_uG2dI_SI~ofb*vXyFG*ixj5e@me&& s3zaA@rfNKxmx$?3hrK+H|2Ns9XhgXT0{i7+1DL%Sua zrB)o~|B#==vq6MaJK>-Vdb92fdb4gd+6>ABk;N7Q9GyXtMGx9QMV)L_kJkaM1+EsW zA8e?2vs-Pe^|~kCdAsii_dn$cv3~GlPu 7J=5$ljg7;h`SJKy!@cG)@Jox zbv}h>Z-$#>t>gVIa9~Rm*XwzOF^QE|A7^Jr1SLN-F{;|8yLDUm)oHEVI%{Vz+ s+7glU?aJ504H)7R0;oQvUmT|kbQbA*(%8S?)iW!o55gzTjE(%O6@*xiv zwunt)RuoZtc1bCF@!E<*-K#Ym9!az0I6aIPmr;#RF`IYeTA#bB!(%_ov}p{?tG`HG z>7Qt+siGcqXrhXW%cW3N$#B1ys+^oPJ3A+u-qUzCGgp?=b-LFoPp-+;Q;u`a&hRrl zP>{DxF+CvBtu#Hw+iJ6_di^@#jJa)3EMpd`zv Oi)@$+FYUiypoEkiGN8veoZ) zz1jBq-R=*^w2?c((8=Z;Sss@6uMe(fxp4E~&W}|Aj!aXPUavcRd!E68jd!aKY~a69 zwA$f_bwW)RtHS4i!WAmPg`XD7H!Bt`ms@k^FvI1xRUajoCq$?32s~l4lwIH5@WA$r zPdcsV)$??YF}VGY`6S|Xy>j)`Mc4LhS>YHw(fEu9x1;eH|J#yVXUMhKx?WSC)_eSD z!g||p(+$_>Zk>_gz0q{J!}?s~rFk>nCf-xw*zo0cL9)({YgW~f<|47#J9b=`RsLmB zxx~-UX_?lY-me0x{0 5)cNY|r kH+auyKU1}%)h4w02{)6$>EeyVs zqiVSy&yL#1wZFT{j_a;{*B{OYn}6@)y#0K(-JZ4FJuj~O!gA1KyYgQCC;l } znA(>gTvhk=)#blxFC6}T)%Fo>31?E#(C6QV-c-XVzfM gZ_b=68+@d1i#dPXz)qbm$i@UgM1p0I<&gNMkeG<#iuwcjgAAe3ccm8G) z%B*T`$uUUwFY#*a=?&!K2n%Q^>zg)RFKA-ilo|8ps~AX5nj `#?Zo*+uHBWzd>5`Kifk_5dgI>A%cmKR z-G8bYbo&U$zGrXc<@jFS5jywozTCqWhOghQ8+ N#{R2{loByaZjJg|5-L|pv5vPl$Pmme!hNaics9OFCh~y z9-O-);fb_}gF?VW=ap}*rA+4eSNXU`P1vz)#km#J+=R5+wyx$*`?II&mV-z`;Kr3F z^s?K&O}kb3